mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/obj: clean up handling of register list operand on ARM
ARM operands for MOVM have lists of registers: [R1,R2,R5-R8]. Handle them cleanly. It was TYPE_CONST with special handling, which meant operand printing didn't work right and the special handling was ugly. Add a new TYPE_REGLIST for this case and it all gets cleaner. Change-Id: I4a64f70fb9765e63cb636619a7a8553611bfe970 Reviewed-on: https://go-review.googlesource.com/6300 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
bc9748ee6b
commit
0eeb5cf088
11 changed files with 59 additions and 29 deletions
|
|
@ -362,6 +362,9 @@ func Dconv(p *Prog, a *Addr) string {
|
|||
|
||||
case TYPE_REGREG2:
|
||||
str = fmt.Sprintf("%v, %v", Rconv(int(a.Reg)), Rconv(int(a.Offset)))
|
||||
|
||||
case TYPE_REGLIST:
|
||||
str = regListConv(int(a.Offset))
|
||||
}
|
||||
|
||||
return str
|
||||
|
|
@ -438,6 +441,8 @@ const (
|
|||
RBaseARM = 3 * 1024
|
||||
RBasePPC64 = 4 * 1024
|
||||
// The next free base is 8*1024 (PPC64 has many registers).
|
||||
// Alternatively, the next architecture, with an ordinary
|
||||
// number of registers, could go under PPC64.
|
||||
)
|
||||
|
||||
// RegisterRegister binds a pretty-printer (Rconv) for register
|
||||
|
|
@ -459,3 +464,26 @@ func Rconv(reg int) string {
|
|||
}
|
||||
return fmt.Sprintf("R???%d", reg)
|
||||
}
|
||||
|
||||
func regListConv(list int) string {
|
||||
str := ""
|
||||
|
||||
for i := 0; i < 16; i++ { // TODO: 16 is ARM-specific.
|
||||
if list&(1<<uint(i)) != 0 {
|
||||
if str == "" {
|
||||
str += "["
|
||||
} else {
|
||||
str += ","
|
||||
}
|
||||
// This is ARM-specific; R10 is g.
|
||||
if i == 10 {
|
||||
str += "g"
|
||||
} else {
|
||||
str += fmt.Sprintf("R%d", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
str += "]"
|
||||
return str
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue