if c.cursym.Func().Text.From.Sym.Wrapper() && c.cursym.Func().Text.Mark&LEAF == 0 {
// if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame
//
- // MOV g_panic(g), R1
- // BEQ R1, end
- // MOV panic_argp(R1), R2
- // ADD $(autosize+FIXED_FRAME), R29, R3
- // BNE R2, R3, end
- // ADD $FIXED_FRAME, R29, R2
- // MOV R2, panic_argp(R1)
+ // MOV g_panic(g), R20
+ // BEQ R20, end
+ // MOV panic_argp(R20), R24
+ // ADD $(autosize+FIXED_FRAME), R3, R30
+ // BNE R24, R30, end
+ // ADD $FIXED_FRAME, R3, R24
+ // MOV R24, panic_argp(R20)
// end:
// NOP
//
q.From.Reg = REGG
q.From.Offset = 4 * int64(c.ctxt.Arch.PtrSize) // G.panic
q.To.Type = obj.TYPE_REG
- q.To.Reg = REG_R19
+ q.To.Reg = REG_R20
q = obj.Appendp(q, newprog)
q.As = ABEQ
q.From.Type = obj.TYPE_REG
- q.From.Reg = REG_R19
+ q.From.Reg = REG_R20
q.To.Type = obj.TYPE_BRANCH
q.Mark |= BRANCH
p1 = q
q = obj.Appendp(q, newprog)
q.As = mov
q.From.Type = obj.TYPE_MEM
- q.From.Reg = REG_R19
+ q.From.Reg = REG_R20
q.From.Offset = 0 // Panic.argp
q.To.Type = obj.TYPE_REG
- q.To.Reg = REG_R4
+ q.To.Reg = REG_R24
q = obj.Appendp(q, newprog)
q.As = add
q.From.Offset = int64(autosize) + ctxt.Arch.FixedFrameSize
q.Reg = REGSP
q.To.Type = obj.TYPE_REG
- q.To.Reg = REG_R5
+ q.To.Reg = REG_R30
q = obj.Appendp(q, newprog)
q.As = ABNE
q.From.Type = obj.TYPE_REG
- q.From.Reg = REG_R4
- q.Reg = REG_R5
+ q.From.Reg = REG_R24
+ q.Reg = REG_R30
q.To.Type = obj.TYPE_BRANCH
q.Mark |= BRANCH
p2 = q
q.From.Offset = ctxt.Arch.FixedFrameSize
q.Reg = REGSP
q.To.Type = obj.TYPE_REG
- q.To.Reg = REG_R4
+ q.To.Reg = REG_R24
q = obj.Appendp(q, newprog)
q.As = mov
q.From.Type = obj.TYPE_REG
- q.From.Reg = REG_R4
+ q.From.Reg = REG_R24
q.To.Type = obj.TYPE_MEM
- q.To.Reg = REG_R19
+ q.To.Reg = REG_R20
q.To.Offset = 0 // Panic.argp
q = obj.Appendp(q, newprog)
// Jump back to here after morestack returns.
startPred := p
- // MOV g_stackguard(g), R19
+ // MOV g_stackguard(g), R20
p = obj.Appendp(p, c.newprog)
p.As = mov
p.From.Offset = 3 * int64(c.ctxt.Arch.PtrSize) // G.stackguard1
}
p.To.Type = obj.TYPE_REG
- p.To.Reg = REG_R19
+ p.To.Reg = REG_R20
// Mark the stack bound check and morestack call async nonpreemptible.
// If we get preempted here, when resumed the preemption request is
var q *obj.Prog
if framesize <= abi.StackSmall {
// small stack: SP < stackguard
- // AGTU SP, stackguard, R19
+ // AGTU SP, stackguard, R20
p = obj.Appendp(p, c.newprog)
p.As = ASGTU
p.From.Type = obj.TYPE_REG
p.From.Reg = REGSP
- p.Reg = REG_R19
+ p.Reg = REG_R20
p.To.Type = obj.TYPE_REG
- p.To.Reg = REG_R19
+ p.To.Reg = REG_R20
} else {
// large stack: SP-framesize < stackguard-StackSmall
offset := int64(framesize) - abi.StackSmall
// stack guard to incorrectly succeed. We explicitly
// guard against underflow.
//
- // SGTU $(framesize-StackSmall), SP, R4
- // BNE R4, label-of-call-to-morestack
+ // SGTU $(framesize-StackSmall), SP, R24
+ // BNE R24, label-of-call-to-morestack
p = obj.Appendp(p, c.newprog)
p.As = ASGTU
p.From.Offset = offset
p.Reg = REGSP
p.To.Type = obj.TYPE_REG
- p.To.Reg = REG_R4
+ p.To.Reg = REG_R24
p = obj.Appendp(p, c.newprog)
q = p
p.As = ABNE
p.From.Type = obj.TYPE_REG
- p.From.Reg = REG_R4
+ p.From.Reg = REG_R24
p.To.Type = obj.TYPE_BRANCH
p.Mark |= BRANCH
}
p.From.Offset = -offset
p.Reg = REGSP
p.To.Type = obj.TYPE_REG
- p.To.Reg = REG_R4
+ p.To.Reg = REG_R24
p = obj.Appendp(p, c.newprog)
p.As = ASGTU
p.From.Type = obj.TYPE_REG
- p.From.Reg = REG_R4
- p.Reg = REG_R19
+ p.From.Reg = REG_R24
+ p.Reg = REG_R20
p.To.Type = obj.TYPE_REG
- p.To.Reg = REG_R19
+ p.To.Reg = REG_R20
}
- // q1: BNE R19, done
+ // q1: BNE R20, done
p = obj.Appendp(p, c.newprog)
q1 := p
p.As = ABNE
p.From.Type = obj.TYPE_REG
- p.From.Reg = REG_R19
+ p.From.Reg = REG_R20
p.To.Type = obj.TYPE_BRANCH
p.Mark |= BRANCH
- // MOV LINK, R5
+ // MOV LINK, R31
p = obj.Appendp(p, c.newprog)
p.As = mov
p.From.Type = obj.TYPE_REG
p.From.Reg = REGLINK
p.To.Type = obj.TYPE_REG
- p.To.Reg = REG_R5
+ p.To.Reg = REG_R31
if q != nil {
q.To.SetTarget(p)
p.Mark |= LABEL
// Called during function prolog when more stack is needed.
// Caller has already loaded:
-// loong64: R5: LR
+// loong64: R31: LR
//
// The traceback routines see morestack on a g0 as being
// the top of a stack (for example, morestack calling newstack
// Set g->sched to context in f.
MOVV R3, (g_sched+gobuf_sp)(g)
MOVV R1, (g_sched+gobuf_pc)(g)
- MOVV R5, (g_sched+gobuf_lr)(g)
+ MOVV R31, (g_sched+gobuf_lr)(g)
MOVV REGCTXT, (g_sched+gobuf_ctxt)(g)
// Called from f.
// Set m->morebuf to f's caller.
- MOVV R5, (m_morebuf+gobuf_pc)(R7) // f's caller's PC
+ MOVV R31, (m_morebuf+gobuf_pc)(R7) // f's caller's PC
MOVV R3, (m_morebuf+gobuf_sp)(R7) // f's caller's SP
MOVV g, (m_morebuf+gobuf_g)(R7)
// then tail call to the corresponding runtime handler.
// The tail call makes these stubs disappear in backtraces.
TEXT runtime·panicIndex(SB),NOSPLIT,$0-16
- MOVV R19, x+0(FP)
- MOVV R18, y+8(FP)
+ MOVV R20, x+0(FP)
+ MOVV R21, y+8(FP)
JMP runtime·goPanicIndex(SB)
TEXT runtime·panicIndexU(SB),NOSPLIT,$0-16
- MOVV R19, x+0(FP)
- MOVV R18, y+8(FP)
+ MOVV R20, x+0(FP)
+ MOVV R21, y+8(FP)
JMP runtime·goPanicIndexU(SB)
TEXT runtime·panicSliceAlen(SB),NOSPLIT,$0-16
- MOVV R18, x+0(FP)
- MOVV R17, y+8(FP)
+ MOVV R21, x+0(FP)
+ MOVV R23, y+8(FP)
JMP runtime·goPanicSliceAlen(SB)
TEXT runtime·panicSliceAlenU(SB),NOSPLIT,$0-16
- MOVV R18, x+0(FP)
- MOVV R17, y+8(FP)
+ MOVV R21, x+0(FP)
+ MOVV R23, y+8(FP)
JMP runtime·goPanicSliceAlenU(SB)
TEXT runtime·panicSliceAcap(SB),NOSPLIT,$0-16
- MOVV R18, x+0(FP)
- MOVV R17, y+8(FP)
+ MOVV R21, x+0(FP)
+ MOVV R23, y+8(FP)
JMP runtime·goPanicSliceAcap(SB)
TEXT runtime·panicSliceAcapU(SB),NOSPLIT,$0-16
- MOVV R18, x+0(FP)
- MOVV R17, y+8(FP)
+ MOVV R21, x+0(FP)
+ MOVV R23, y+8(FP)
JMP runtime·goPanicSliceAcapU(SB)
TEXT runtime·panicSliceB(SB),NOSPLIT,$0-16
- MOVV R19, x+0(FP)
- MOVV R18, y+8(FP)
+ MOVV R20, x+0(FP)
+ MOVV R21, y+8(FP)
JMP runtime·goPanicSliceB(SB)
TEXT runtime·panicSliceBU(SB),NOSPLIT,$0-16
- MOVV R19, x+0(FP)
- MOVV R18, y+8(FP)
+ MOVV R20, x+0(FP)
+ MOVV R21, y+8(FP)
JMP runtime·goPanicSliceBU(SB)
TEXT runtime·panicSlice3Alen(SB),NOSPLIT,$0-16
- MOVV R17, x+0(FP)
- MOVV R4, y+8(FP)
+ MOVV R23, x+0(FP)
+ MOVV R24, y+8(FP)
JMP runtime·goPanicSlice3Alen(SB)
TEXT runtime·panicSlice3AlenU(SB),NOSPLIT,$0-16
- MOVV R17, x+0(FP)
- MOVV R4, y+8(FP)
+ MOVV R23, x+0(FP)
+ MOVV R24, y+8(FP)
JMP runtime·goPanicSlice3AlenU(SB)
TEXT runtime·panicSlice3Acap(SB),NOSPLIT,$0-16
- MOVV R17, x+0(FP)
- MOVV R4, y+8(FP)
+ MOVV R23, x+0(FP)
+ MOVV R24, y+8(FP)
JMP runtime·goPanicSlice3Acap(SB)
TEXT runtime·panicSlice3AcapU(SB),NOSPLIT,$0-16
- MOVV R17, x+0(FP)
- MOVV R4, y+8(FP)
+ MOVV R23, x+0(FP)
+ MOVV R24, y+8(FP)
JMP runtime·goPanicSlice3AcapU(SB)
TEXT runtime·panicSlice3B(SB),NOSPLIT,$0-16
- MOVV R18, x+0(FP)
- MOVV R17, y+8(FP)
+ MOVV R21, x+0(FP)
+ MOVV R23, y+8(FP)
JMP runtime·goPanicSlice3B(SB)
TEXT runtime·panicSlice3BU(SB),NOSPLIT,$0-16
- MOVV R18, x+0(FP)
- MOVV R17, y+8(FP)
+ MOVV R21, x+0(FP)
+ MOVV R23, y+8(FP)
JMP runtime·goPanicSlice3BU(SB)
TEXT runtime·panicSlice3C(SB),NOSPLIT,$0-16
- MOVV R19, x+0(FP)
- MOVV R18, y+8(FP)
+ MOVV R20, x+0(FP)
+ MOVV R21, y+8(FP)
JMP runtime·goPanicSlice3C(SB)
TEXT runtime·panicSlice3CU(SB),NOSPLIT,$0-16
- MOVV R19, x+0(FP)
- MOVV R18, y+8(FP)
+ MOVV R20, x+0(FP)
+ MOVV R21, y+8(FP)
JMP runtime·goPanicSlice3CU(SB)
TEXT runtime·panicSliceConvert(SB),NOSPLIT,$0-16
- MOVV R17, x+0(FP)
- MOVV R4, y+8(FP)
+ MOVV R23, x+0(FP)
+ MOVV R24, y+8(FP)
JMP runtime·goPanicSliceConvert(SB)