From ce5fa6d5e9977f30bbcc16b0b42d51896a1c40cc Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Thu, 8 Feb 2018 11:39:50 -0500 Subject: [PATCH] cmd/internal/obj/mips: fix use of R28 on 32-bit MIPS R28 is used as the SB register on MIPS64, and it was printed as "RSB" on both 32-bit and 64-bit MIPS. This is confusing on MIPS32 as there R28 is just a general purpose register. Further, this string representation is used in the assembler's frontend to parse register symbols, and this leads to failure in parsing R28 in MIPS32 assembly code. Change rconv to always print the register as R28. This fixes the parsing problem on MIPS32, and this is a reasonable representation on both MIPS32 and MIPS64. Change-Id: I30d6c0a442fbb08ea615f32f1763b5baadcee1da Reviewed-on: https://go-review.googlesource.com/92915 Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot Reviewed-by: Austin Clements --- src/cmd/asm/internal/asm/operand_test.go | 3 ++- src/cmd/internal/obj/mips/list0.go | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/cmd/asm/internal/asm/operand_test.go b/src/cmd/asm/internal/asm/operand_test.go index ca692bf828..f4ce4fe114 100644 --- a/src/cmd/asm/internal/asm/operand_test.go +++ b/src/cmd/asm/internal/asm/operand_test.go @@ -626,7 +626,7 @@ var mips64OperandTests = []operandTest{ {"LO", "LO"}, {"a(FP)", "a(FP)"}, {"g", "g"}, - {"RSB", "RSB"}, + {"RSB", "R28"}, {"ret+8(FP)", "ret+8(FP)"}, {"runtime·abort(SB)", "runtime.abort(SB)"}, {"·AddUint32(SB)", "\"\".AddUint32(SB)"}, @@ -697,6 +697,7 @@ var mipsOperandTests = []operandTest{ {"R25", "R25"}, {"R26", "R26"}, {"R27", "R27"}, + {"R28", "R28"}, {"R29", "R29"}, {"R3", "R3"}, {"R31", "R31"}, diff --git a/src/cmd/internal/obj/mips/list0.go b/src/cmd/internal/obj/mips/list0.go index bdd9df974a..addf9f70d8 100644 --- a/src/cmd/internal/obj/mips/list0.go +++ b/src/cmd/internal/obj/mips/list0.go @@ -47,10 +47,6 @@ func rconv(r int) string { // Special case. return "g" } - if r == REGSB { - // Special case. - return "RSB" - } if REG_R0 <= r && r <= REG_R31 { return fmt.Sprintf("R%d", r-REG_R0) }