mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.ssa] cmd/compile: fix a few bugs for SSA for ARM
- 64x signed right shift was wrong for shift larger than 0x80000000. - for Lsh-followed-by-Rsh, the intermediate value should be full int width, so when it is spilled MOVW should be used. - use RET for RetJmp, so the assembler can take case of restoring LR for non-leaf case. - reserve R9 in dynlink mode. R9 is used for GOT by the assembler. Progress on SSA backend for ARM. Still not complete. Updates #15365. Change-Id: I3caca256b92ff7cf96469da2feaf4868a592efc5 Reviewed-on: https://go-review.googlesource.com/23793 Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
225ef76c25
commit
fa54bf16e0
6 changed files with 63 additions and 71 deletions
|
|
@ -458,8 +458,15 @@ func (s *regAllocState) init(f *Func) {
|
|||
if s.f.Config.ctxt.Framepointer_enabled && s.f.Config.FPReg >= 0 {
|
||||
s.allocatable &^= 1 << uint(s.f.Config.FPReg)
|
||||
}
|
||||
if s.f.Config.ctxt.Flag_dynlink && s.f.Config.arch == "amd64" {
|
||||
s.allocatable &^= 1 << 15 // R15
|
||||
if s.f.Config.ctxt.Flag_dynlink {
|
||||
switch s.f.Config.arch {
|
||||
case "amd64":
|
||||
s.allocatable &^= 1 << 15 // R15
|
||||
case "arm":
|
||||
s.allocatable &^= 1 << 9 // R9
|
||||
default:
|
||||
s.f.Config.fe.Unimplementedf(0, "arch %s not implemented", s.f.Config.arch)
|
||||
}
|
||||
}
|
||||
|
||||
s.regs = make([]regState, s.numRegs)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue