Skip to content

Commit 070139a

Browse files
abner-chencsophie-zhao
authored andcommitted
cmd/compile,cmd/internal,runtime: change registers on loong64 to avoid regABI arguments
Update #40724 Co-authored-by: Xiaolin Zhao <[email protected]> Change-Id: Ic7e2e7fb4c1d3670e6abbfb817aa6e4e654e08d3 Reviewed-on: https://go-review.googlesource.com/c/go/+/521777 Reviewed-by: David Chase <[email protected]> Reviewed-by: Meidan Li <[email protected]> Reviewed-by: Cherry Mui <[email protected]> Reviewed-by: Than McIntosh <[email protected]> Auto-Submit: David Chase <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Run-TryBot: David Chase <[email protected]>
1 parent 945c2bc commit 070139a

File tree

4 files changed

+81
-81
lines changed

4 files changed

+81
-81
lines changed

src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ func init() {
130130
gpspsbg = gpspg | buildReg("SB")
131131
fp = buildReg("F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31")
132132
callerSave = gp | fp | buildReg("g") // runtime.setg (and anything calling it) may clobber g
133-
r1 = buildReg("R19")
134-
r2 = buildReg("R18")
135-
r3 = buildReg("R17")
136-
r4 = buildReg("R4")
133+
r1 = buildReg("R20")
134+
r2 = buildReg("R21")
135+
r3 = buildReg("R23")
136+
r4 = buildReg("R24")
137137
)
138138
// Common regInfo
139139
var (

src/cmd/compile/internal/ssa/opGen.go

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/cmd/internal/obj/loong64/obj.go

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -396,13 +396,13 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
396396
if c.cursym.Func().Text.From.Sym.Wrapper() && c.cursym.Func().Text.Mark&LEAF == 0 {
397397
// if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame
398398
//
399-
// MOV g_panic(g), R1
400-
// BEQ R1, end
401-
// MOV panic_argp(R1), R2
402-
// ADD $(autosize+FIXED_FRAME), R29, R3
403-
// BNE R2, R3, end
404-
// ADD $FIXED_FRAME, R29, R2
405-
// MOV R2, panic_argp(R1)
399+
// MOV g_panic(g), R20
400+
// BEQ R20, end
401+
// MOV panic_argp(R20), R24
402+
// ADD $(autosize+FIXED_FRAME), R3, R30
403+
// BNE R24, R30, end
404+
// ADD $FIXED_FRAME, R3, R24
405+
// MOV R24, panic_argp(R20)
406406
// end:
407407
// NOP
408408
//
@@ -419,37 +419,37 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
419419
q.From.Reg = REGG
420420
q.From.Offset = 4 * int64(c.ctxt.Arch.PtrSize) // G.panic
421421
q.To.Type = obj.TYPE_REG
422-
q.To.Reg = REG_R19
422+
q.To.Reg = REG_R20
423423

424424
q = obj.Appendp(q, newprog)
425425
q.As = ABEQ
426426
q.From.Type = obj.TYPE_REG
427-
q.From.Reg = REG_R19
427+
q.From.Reg = REG_R20
428428
q.To.Type = obj.TYPE_BRANCH
429429
q.Mark |= BRANCH
430430
p1 = q
431431

432432
q = obj.Appendp(q, newprog)
433433
q.As = mov
434434
q.From.Type = obj.TYPE_MEM
435-
q.From.Reg = REG_R19
435+
q.From.Reg = REG_R20
436436
q.From.Offset = 0 // Panic.argp
437437
q.To.Type = obj.TYPE_REG
438-
q.To.Reg = REG_R4
438+
q.To.Reg = REG_R24
439439

440440
q = obj.Appendp(q, newprog)
441441
q.As = add
442442
q.From.Type = obj.TYPE_CONST
443443
q.From.Offset = int64(autosize) + ctxt.Arch.FixedFrameSize
444444
q.Reg = REGSP
445445
q.To.Type = obj.TYPE_REG
446-
q.To.Reg = REG_R5
446+
q.To.Reg = REG_R30
447447

448448
q = obj.Appendp(q, newprog)
449449
q.As = ABNE
450450
q.From.Type = obj.TYPE_REG
451-
q.From.Reg = REG_R4
452-
q.Reg = REG_R5
451+
q.From.Reg = REG_R24
452+
q.Reg = REG_R30
453453
q.To.Type = obj.TYPE_BRANCH
454454
q.Mark |= BRANCH
455455
p2 = q
@@ -460,14 +460,14 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
460460
q.From.Offset = ctxt.Arch.FixedFrameSize
461461
q.Reg = REGSP
462462
q.To.Type = obj.TYPE_REG
463-
q.To.Reg = REG_R4
463+
q.To.Reg = REG_R24
464464

465465
q = obj.Appendp(q, newprog)
466466
q.As = mov
467467
q.From.Type = obj.TYPE_REG
468-
q.From.Reg = REG_R4
468+
q.From.Reg = REG_R24
469469
q.To.Type = obj.TYPE_MEM
470-
q.To.Reg = REG_R19
470+
q.To.Reg = REG_R20
471471
q.To.Offset = 0 // Panic.argp
472472

473473
q = obj.Appendp(q, newprog)
@@ -690,7 +690,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
690690
// Jump back to here after morestack returns.
691691
startPred := p
692692

693-
// MOV g_stackguard(g), R19
693+
// MOV g_stackguard(g), R20
694694
p = obj.Appendp(p, c.newprog)
695695

696696
p.As = mov
@@ -701,7 +701,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
701701
p.From.Offset = 3 * int64(c.ctxt.Arch.PtrSize) // G.stackguard1
702702
}
703703
p.To.Type = obj.TYPE_REG
704-
p.To.Reg = REG_R19
704+
p.To.Reg = REG_R20
705705

706706
// Mark the stack bound check and morestack call async nonpreemptible.
707707
// If we get preempted here, when resumed the preemption request is
@@ -712,15 +712,15 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
712712
var q *obj.Prog
713713
if framesize <= abi.StackSmall {
714714
// small stack: SP < stackguard
715-
// AGTU SP, stackguard, R19
715+
// AGTU SP, stackguard, R20
716716
p = obj.Appendp(p, c.newprog)
717717

718718
p.As = ASGTU
719719
p.From.Type = obj.TYPE_REG
720720
p.From.Reg = REGSP
721-
p.Reg = REG_R19
721+
p.Reg = REG_R20
722722
p.To.Type = obj.TYPE_REG
723-
p.To.Reg = REG_R19
723+
p.To.Reg = REG_R20
724724
} else {
725725
// large stack: SP-framesize < stackguard-StackSmall
726726
offset := int64(framesize) - abi.StackSmall
@@ -732,22 +732,22 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
732732
// stack guard to incorrectly succeed. We explicitly
733733
// guard against underflow.
734734
//
735-
// SGTU $(framesize-StackSmall), SP, R4
736-
// BNE R4, label-of-call-to-morestack
735+
// SGTU $(framesize-StackSmall), SP, R24
736+
// BNE R24, label-of-call-to-morestack
737737

738738
p = obj.Appendp(p, c.newprog)
739739
p.As = ASGTU
740740
p.From.Type = obj.TYPE_CONST
741741
p.From.Offset = offset
742742
p.Reg = REGSP
743743
p.To.Type = obj.TYPE_REG
744-
p.To.Reg = REG_R4
744+
p.To.Reg = REG_R24
745745

746746
p = obj.Appendp(p, c.newprog)
747747
q = p
748748
p.As = ABNE
749749
p.From.Type = obj.TYPE_REG
750-
p.From.Reg = REG_R4
750+
p.From.Reg = REG_R24
751751
p.To.Type = obj.TYPE_BRANCH
752752
p.Mark |= BRANCH
753753
}
@@ -759,35 +759,35 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
759759
p.From.Offset = -offset
760760
p.Reg = REGSP
761761
p.To.Type = obj.TYPE_REG
762-
p.To.Reg = REG_R4
762+
p.To.Reg = REG_R24
763763

764764
p = obj.Appendp(p, c.newprog)
765765
p.As = ASGTU
766766
p.From.Type = obj.TYPE_REG
767-
p.From.Reg = REG_R4
768-
p.Reg = REG_R19
767+
p.From.Reg = REG_R24
768+
p.Reg = REG_R20
769769
p.To.Type = obj.TYPE_REG
770-
p.To.Reg = REG_R19
770+
p.To.Reg = REG_R20
771771
}
772772

773-
// q1: BNE R19, done
773+
// q1: BNE R20, done
774774
p = obj.Appendp(p, c.newprog)
775775
q1 := p
776776

777777
p.As = ABNE
778778
p.From.Type = obj.TYPE_REG
779-
p.From.Reg = REG_R19
779+
p.From.Reg = REG_R20
780780
p.To.Type = obj.TYPE_BRANCH
781781
p.Mark |= BRANCH
782782

783-
// MOV LINK, R5
783+
// MOV LINK, R31
784784
p = obj.Appendp(p, c.newprog)
785785

786786
p.As = mov
787787
p.From.Type = obj.TYPE_REG
788788
p.From.Reg = REGLINK
789789
p.To.Type = obj.TYPE_REG
790-
p.To.Reg = REG_R5
790+
p.To.Reg = REG_R31
791791
if q != nil {
792792
q.To.SetTarget(p)
793793
p.Mark |= LABEL

src/runtime/asm_loong64.s

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ noswitch:
214214

215215
// Called during function prolog when more stack is needed.
216216
// Caller has already loaded:
217-
// loong64: R5: LR
217+
// loong64: R31: LR
218218
//
219219
// The traceback routines see morestack on a g0 as being
220220
// the top of a stack (for example, morestack calling newstack
@@ -238,12 +238,12 @@ TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0
238238
// Set g->sched to context in f.
239239
MOVV R3, (g_sched+gobuf_sp)(g)
240240
MOVV R1, (g_sched+gobuf_pc)(g)
241-
MOVV R5, (g_sched+gobuf_lr)(g)
241+
MOVV R31, (g_sched+gobuf_lr)(g)
242242
MOVV REGCTXT, (g_sched+gobuf_ctxt)(g)
243243

244244
// Called from f.
245245
// Set m->morebuf to f's caller.
246-
MOVV R5, (m_morebuf+gobuf_pc)(R7) // f's caller's PC
246+
MOVV R31, (m_morebuf+gobuf_pc)(R7) // f's caller's PC
247247
MOVV R3, (m_morebuf+gobuf_sp)(R7) // f's caller's SP
248248
MOVV g, (m_morebuf+gobuf_g)(R7)
249249

@@ -775,70 +775,70 @@ TEXT runtime·gcWriteBarrier8<ABIInternal>(SB),NOSPLIT,$0
775775
// then tail call to the corresponding runtime handler.
776776
// The tail call makes these stubs disappear in backtraces.
777777
TEXT runtime·panicIndex(SB),NOSPLIT,$0-16
778-
MOVV R19, x+0(FP)
779-
MOVV R18, y+8(FP)
778+
MOVV R20, x+0(FP)
779+
MOVV R21, y+8(FP)
780780
JMP runtime·goPanicIndex(SB)
781781
TEXT runtime·panicIndexU(SB),NOSPLIT,$0-16
782-
MOVV R19, x+0(FP)
783-
MOVV R18, y+8(FP)
782+
MOVV R20, x+0(FP)
783+
MOVV R21, y+8(FP)
784784
JMP runtime·goPanicIndexU(SB)
785785
TEXT runtime·panicSliceAlen(SB),NOSPLIT,$0-16
786-
MOVV R18, x+0(FP)
787-
MOVV R17, y+8(FP)
786+
MOVV R21, x+0(FP)
787+
MOVV R23, y+8(FP)
788788
JMP runtime·goPanicSliceAlen(SB)
789789
TEXT runtime·panicSliceAlenU(SB),NOSPLIT,$0-16
790-
MOVV R18, x+0(FP)
791-
MOVV R17, y+8(FP)
790+
MOVV R21, x+0(FP)
791+
MOVV R23, y+8(FP)
792792
JMP runtime·goPanicSliceAlenU(SB)
793793
TEXT runtime·panicSliceAcap(SB),NOSPLIT,$0-16
794-
MOVV R18, x+0(FP)
795-
MOVV R17, y+8(FP)
794+
MOVV R21, x+0(FP)
795+
MOVV R23, y+8(FP)
796796
JMP runtime·goPanicSliceAcap(SB)
797797
TEXT runtime·panicSliceAcapU(SB),NOSPLIT,$0-16
798-
MOVV R18, x+0(FP)
799-
MOVV R17, y+8(FP)
798+
MOVV R21, x+0(FP)
799+
MOVV R23, y+8(FP)
800800
JMP runtime·goPanicSliceAcapU(SB)
801801
TEXT runtime·panicSliceB(SB),NOSPLIT,$0-16
802-
MOVV R19, x+0(FP)
803-
MOVV R18, y+8(FP)
802+
MOVV R20, x+0(FP)
803+
MOVV R21, y+8(FP)
804804
JMP runtime·goPanicSliceB(SB)
805805
TEXT runtime·panicSliceBU(SB),NOSPLIT,$0-16
806-
MOVV R19, x+0(FP)
807-
MOVV R18, y+8(FP)
806+
MOVV R20, x+0(FP)
807+
MOVV R21, y+8(FP)
808808
JMP runtime·goPanicSliceBU(SB)
809809
TEXT runtime·panicSlice3Alen(SB),NOSPLIT,$0-16
810-
MOVV R17, x+0(FP)
811-
MOVV R4, y+8(FP)
810+
MOVV R23, x+0(FP)
811+
MOVV R24, y+8(FP)
812812
JMP runtime·goPanicSlice3Alen(SB)
813813
TEXT runtime·panicSlice3AlenU(SB),NOSPLIT,$0-16
814-
MOVV R17, x+0(FP)
815-
MOVV R4, y+8(FP)
814+
MOVV R23, x+0(FP)
815+
MOVV R24, y+8(FP)
816816
JMP runtime·goPanicSlice3AlenU(SB)
817817
TEXT runtime·panicSlice3Acap(SB),NOSPLIT,$0-16
818-
MOVV R17, x+0(FP)
819-
MOVV R4, y+8(FP)
818+
MOVV R23, x+0(FP)
819+
MOVV R24, y+8(FP)
820820
JMP runtime·goPanicSlice3Acap(SB)
821821
TEXT runtime·panicSlice3AcapU(SB),NOSPLIT,$0-16
822-
MOVV R17, x+0(FP)
823-
MOVV R4, y+8(FP)
822+
MOVV R23, x+0(FP)
823+
MOVV R24, y+8(FP)
824824
JMP runtime·goPanicSlice3AcapU(SB)
825825
TEXT runtime·panicSlice3B(SB),NOSPLIT,$0-16
826-
MOVV R18, x+0(FP)
827-
MOVV R17, y+8(FP)
826+
MOVV R21, x+0(FP)
827+
MOVV R23, y+8(FP)
828828
JMP runtime·goPanicSlice3B(SB)
829829
TEXT runtime·panicSlice3BU(SB),NOSPLIT,$0-16
830-
MOVV R18, x+0(FP)
831-
MOVV R17, y+8(FP)
830+
MOVV R21, x+0(FP)
831+
MOVV R23, y+8(FP)
832832
JMP runtime·goPanicSlice3BU(SB)
833833
TEXT runtime·panicSlice3C(SB),NOSPLIT,$0-16
834-
MOVV R19, x+0(FP)
835-
MOVV R18, y+8(FP)
834+
MOVV R20, x+0(FP)
835+
MOVV R21, y+8(FP)
836836
JMP runtime·goPanicSlice3C(SB)
837837
TEXT runtime·panicSlice3CU(SB),NOSPLIT,$0-16
838-
MOVV R19, x+0(FP)
839-
MOVV R18, y+8(FP)
838+
MOVV R20, x+0(FP)
839+
MOVV R21, y+8(FP)
840840
JMP runtime·goPanicSlice3CU(SB)
841841
TEXT runtime·panicSliceConvert(SB),NOSPLIT,$0-16
842-
MOVV R17, x+0(FP)
843-
MOVV R4, y+8(FP)
842+
MOVV R23, x+0(FP)
843+
MOVV R24, y+8(FP)
844844
JMP runtime·goPanicSliceConvert(SB)

0 commit comments

Comments
 (0)