@@ -620,6 +620,10 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
620
620
621
621
p = c .ctxt .StartUnsafePoint (p , c .newprog )
622
622
623
+ // Spill Arguments. This has to happen before we open
624
+ // any more frame space.
625
+ p = c .cursym .Func ().SpillRegisterArgs (p , c .newprog )
626
+
623
627
// MOV REGLINK, -8/-16(SP)
624
628
p = obj .Appendp (p , c .newprog )
625
629
p .As = mov
@@ -684,6 +688,8 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
684
688
p .To .Reg = REGSP
685
689
p .Spadj = int32 (- frameSize )
686
690
691
+ // Unspill arguments
692
+ p = c .cursym .Func ().UnspillRegisterArgs (p , c .newprog )
687
693
p = c .ctxt .EndUnsafePoint (p , c .newprog , - 1 )
688
694
}
689
695
@@ -795,6 +801,10 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
795
801
796
802
p = c .ctxt .EmitEntryStackMap (c .cursym , p , c .newprog )
797
803
804
+ // Spill the register args that could be clobbered by the
805
+ // morestack code
806
+ p = c .cursym .Func ().SpillRegisterArgs (p , c .newprog )
807
+
798
808
// JAL runtime.morestack(SB)
799
809
p = obj .Appendp (p , c .newprog )
800
810
@@ -809,6 +819,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
809
819
}
810
820
p .Mark |= BRANCH
811
821
822
+ p = c .cursym .Func ().UnspillRegisterArgs (p , c .newprog )
812
823
p = c .ctxt .EndUnsafePoint (p , c .newprog , - 1 )
813
824
814
825
// JMP start
0 commit comments