aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2025-06-18 15:49:52 -0700
committerKeith Randall <khr@golang.org>2025-07-30 08:33:08 -0700
commit8330fb48a645a29a79dd5c58ad3d9c54d7e6537c (patch)
tree1d9c73ac070efd64329fa224e117e962b779bece /src/runtime
parent9f9d7b50e8c1a2c186b7b526222ba5499e6f36b0 (diff)
downloadgo-8330fb48a645a29a79dd5c58ad3d9c54d7e6537c.tar.xz
cmd/compile: move mips32 over to new bounds check strategy
Change-Id: Ied54ea7bf68c4c943c621ca059aca1048903c041 Reviewed-on: https://go-review.googlesource.com/c/go/+/682497 Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Julian Zhu <jz531210@gmail.com> Reviewed-by: Mark Freeman <mark@golang.org>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/asm_mipsx.s208
1 files changed, 54 insertions, 154 deletions
diff --git a/src/runtime/asm_mipsx.s b/src/runtime/asm_mipsx.s
index 7245e8ac49..ec352f5828 100644
--- a/src/runtime/asm_mipsx.s
+++ b/src/runtime/asm_mipsx.s
@@ -787,158 +787,58 @@ TEXT runtime·gcWriteBarrier8<ABIInternal>(SB),NOSPLIT,$0
MOVW $32, R25
JMP gcWriteBarrier<>(SB)
-// Note: these functions use a special calling convention to save generated code space.
-// Arguments are passed in registers, but the space for those arguments are allocated
-// in the caller's stack frame. These stubs write the args into that stack space and
-// then tail call to the corresponding runtime handler.
-// The tail call makes these stubs disappear in backtraces.
-TEXT runtime·panicIndex(SB),NOSPLIT,$0-8
- MOVW R1, x+0(FP)
- MOVW R2, y+4(FP)
- JMP runtime·goPanicIndex(SB)
-TEXT runtime·panicIndexU(SB),NOSPLIT,$0-8
- MOVW R1, x+0(FP)
- MOVW R2, y+4(FP)
- JMP runtime·goPanicIndexU(SB)
-TEXT runtime·panicSliceAlen(SB),NOSPLIT,$0-8
- MOVW R2, x+0(FP)
- MOVW R3, y+4(FP)
- JMP runtime·goPanicSliceAlen(SB)
-TEXT runtime·panicSliceAlenU(SB),NOSPLIT,$0-8
- MOVW R2, x+0(FP)
- MOVW R3, y+4(FP)
- JMP runtime·goPanicSliceAlenU(SB)
-TEXT runtime·panicSliceAcap(SB),NOSPLIT,$0-8
- MOVW R2, x+0(FP)
- MOVW R3, y+4(FP)
- JMP runtime·goPanicSliceAcap(SB)
-TEXT runtime·panicSliceAcapU(SB),NOSPLIT,$0-8
- MOVW R2, x+0(FP)
- MOVW R3, y+4(FP)
- JMP runtime·goPanicSliceAcapU(SB)
-TEXT runtime·panicSliceB(SB),NOSPLIT,$0-8
- MOVW R1, x+0(FP)
- MOVW R2, y+4(FP)
- JMP runtime·goPanicSliceB(SB)
-TEXT runtime·panicSliceBU(SB),NOSPLIT,$0-8
- MOVW R1, x+0(FP)
- MOVW R2, y+4(FP)
- JMP runtime·goPanicSliceBU(SB)
-TEXT runtime·panicSlice3Alen(SB),NOSPLIT,$0-8
- MOVW R3, x+0(FP)
- MOVW R4, y+4(FP)
- JMP runtime·goPanicSlice3Alen(SB)
-TEXT runtime·panicSlice3AlenU(SB),NOSPLIT,$0-8
- MOVW R3, x+0(FP)
- MOVW R4, y+4(FP)
- JMP runtime·goPanicSlice3AlenU(SB)
-TEXT runtime·panicSlice3Acap(SB),NOSPLIT,$0-8
- MOVW R3, x+0(FP)
- MOVW R4, y+4(FP)
- JMP runtime·goPanicSlice3Acap(SB)
-TEXT runtime·panicSlice3AcapU(SB),NOSPLIT,$0-8
- MOVW R3, x+0(FP)
- MOVW R4, y+4(FP)
- JMP runtime·goPanicSlice3AcapU(SB)
-TEXT runtime·panicSlice3B(SB),NOSPLIT,$0-8
- MOVW R2, x+0(FP)
- MOVW R3, y+4(FP)
- JMP runtime·goPanicSlice3B(SB)
-TEXT runtime·panicSlice3BU(SB),NOSPLIT,$0-8
- MOVW R2, x+0(FP)
- MOVW R3, y+4(FP)
- JMP runtime·goPanicSlice3BU(SB)
-TEXT runtime·panicSlice3C(SB),NOSPLIT,$0-8
- MOVW R1, x+0(FP)
- MOVW R2, y+4(FP)
- JMP runtime·goPanicSlice3C(SB)
-TEXT runtime·panicSlice3CU(SB),NOSPLIT,$0-8
- MOVW R1, x+0(FP)
- MOVW R2, y+4(FP)
- JMP runtime·goPanicSlice3CU(SB)
-TEXT runtime·panicSliceConvert(SB),NOSPLIT,$0-8
- MOVW R3, x+0(FP)
- MOVW R4, y+4(FP)
- JMP runtime·goPanicSliceConvert(SB)
+TEXT runtime·panicBounds<ABIInternal>(SB),NOSPLIT,$72-0
+ NO_LOCAL_POINTERS
+ // Save all 16 int registers that could have an index in them.
+ // They may be pointers, but if they are they are dead.
+ // Skip R0 aka ZERO.
+ MOVW R1, 12(R29)
+ MOVW R2, 16(R29)
+ MOVW R3, 20(R29)
+ MOVW R4, 24(R29)
+ MOVW R5, 28(R29)
+ MOVW R6, 32(R29)
+ MOVW R7, 36(R29)
+ MOVW R8, 40(R29)
+ MOVW R9, 44(R29)
+ MOVW R10, 48(R29)
+ MOVW R11, 52(R29)
+ MOVW R12, 56(R29)
+ MOVW R13, 60(R29)
+ MOVW R14, 64(R29)
+ MOVW R15, 68(R29)
+ MOVW R16, 72(R29)
+
+ MOVW R31, 4(R29) // PC immediately after call to panicBounds
+ ADD $12, R29, R1 // pointer to save area
+ MOVW R1, 8(R29)
+ CALL runtime·panicBounds32<ABIInternal>(SB)
+ RET
-// Extended versions for 64-bit indexes.
-TEXT runtime·panicExtendIndex(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R1, lo+4(FP)
- MOVW R2, y+8(FP)
- JMP runtime·goPanicExtendIndex(SB)
-TEXT runtime·panicExtendIndexU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R1, lo+4(FP)
- MOVW R2, y+8(FP)
- JMP runtime·goPanicExtendIndexU(SB)
-TEXT runtime·panicExtendSliceAlen(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R2, lo+4(FP)
- MOVW R3, y+8(FP)
- JMP runtime·goPanicExtendSliceAlen(SB)
-TEXT runtime·panicExtendSliceAlenU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R2, lo+4(FP)
- MOVW R3, y+8(FP)
- JMP runtime·goPanicExtendSliceAlenU(SB)
-TEXT runtime·panicExtendSliceAcap(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R2, lo+4(FP)
- MOVW R3, y+8(FP)
- JMP runtime·goPanicExtendSliceAcap(SB)
-TEXT runtime·panicExtendSliceAcapU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R2, lo+4(FP)
- MOVW R3, y+8(FP)
- JMP runtime·goPanicExtendSliceAcapU(SB)
-TEXT runtime·panicExtendSliceB(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R1, lo+4(FP)
- MOVW R2, y+8(FP)
- JMP runtime·goPanicExtendSliceB(SB)
-TEXT runtime·panicExtendSliceBU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R1, lo+4(FP)
- MOVW R2, y+8(FP)
- JMP runtime·goPanicExtendSliceBU(SB)
-TEXT runtime·panicExtendSlice3Alen(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R3, lo+4(FP)
- MOVW R4, y+8(FP)
- JMP runtime·goPanicExtendSlice3Alen(SB)
-TEXT runtime·panicExtendSlice3AlenU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R3, lo+4(FP)
- MOVW R4, y+8(FP)
- JMP runtime·goPanicExtendSlice3AlenU(SB)
-TEXT runtime·panicExtendSlice3Acap(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R3, lo+4(FP)
- MOVW R4, y+8(FP)
- JMP runtime·goPanicExtendSlice3Acap(SB)
-TEXT runtime·panicExtendSlice3AcapU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R3, lo+4(FP)
- MOVW R4, y+8(FP)
- JMP runtime·goPanicExtendSlice3AcapU(SB)
-TEXT runtime·panicExtendSlice3B(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R2, lo+4(FP)
- MOVW R3, y+8(FP)
- JMP runtime·goPanicExtendSlice3B(SB)
-TEXT runtime·panicExtendSlice3BU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R2, lo+4(FP)
- MOVW R3, y+8(FP)
- JMP runtime·goPanicExtendSlice3BU(SB)
-TEXT runtime·panicExtendSlice3C(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R1, lo+4(FP)
- MOVW R2, y+8(FP)
- JMP runtime·goPanicExtendSlice3C(SB)
-TEXT runtime·panicExtendSlice3CU(SB),NOSPLIT,$0-12
- MOVW R5, hi+0(FP)
- MOVW R1, lo+4(FP)
- MOVW R2, y+8(FP)
- JMP runtime·goPanicExtendSlice3CU(SB)
+TEXT runtime·panicExtend<ABIInternal>(SB),NOSPLIT,$72-0
+ NO_LOCAL_POINTERS
+ // Save all 16 int registers that could have an index in them.
+ // They may be pointers, but if they are they are dead.
+ // Skip R0 aka ZERO.
+ MOVW R1, 12(R29)
+ MOVW R2, 16(R29)
+ MOVW R3, 20(R29)
+ MOVW R4, 24(R29)
+ MOVW R5, 28(R29)
+ MOVW R6, 32(R29)
+ MOVW R7, 36(R29)
+ MOVW R8, 40(R29)
+ MOVW R9, 44(R29)
+ MOVW R10, 48(R29)
+ MOVW R11, 52(R29)
+ MOVW R12, 56(R29)
+ MOVW R13, 60(R29)
+ MOVW R14, 64(R29)
+ MOVW R15, 68(R29)
+ MOVW R16, 72(R29)
+
+ MOVW R31, 4(R29) // PC immediately after call to panicBounds
+ ADD $12, R29, R1 // pointer to save area
+ MOVW R1, 8(R29)
+ CALL runtime·panicBounds32X<ABIInternal>(SB)
+ RET