aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/link.go9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go
index a3e4a0d309..462b9b2bd2 100644
--- a/src/cmd/internal/obj/link.go
+++ b/src/cmd/internal/obj/link.go
@@ -1100,6 +1100,7 @@ type Auto struct {
type RegSpill struct {
Addr Addr
Reg int16
+ Reg2 int16 // If not 0, a second register to spill at Addr+regSize. Only for some archs.
Spill, Unspill As
}
@@ -1192,6 +1193,10 @@ func (fi *FuncInfo) SpillRegisterArgs(last *Prog, pa ProgAlloc) *Prog {
spill.As = ra.Spill
spill.From.Type = TYPE_REG
spill.From.Reg = ra.Reg
+ if ra.Reg2 != 0 {
+ spill.From.Type = TYPE_REGREG
+ spill.From.Offset = int64(ra.Reg2)
+ }
spill.To = ra.Addr
last = spill
}
@@ -1208,6 +1213,10 @@ func (fi *FuncInfo) UnspillRegisterArgs(last *Prog, pa ProgAlloc) *Prog {
unspill.From = ra.Addr
unspill.To.Type = TYPE_REG
unspill.To.Reg = ra.Reg
+ if ra.Reg2 != 0 {
+ unspill.To.Type = TYPE_REGREG
+ unspill.To.Offset = int64(ra.Reg2)
+ }
last = unspill
}
return last