CALL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB), NOSPLIT, $0-8
- MOVL argp+0(FP), AX
- MOVL AX, ret+4(FP)
- RET
-
// func cputicks() int64
TEXT runtime·cputicks(SB),NOSPLIT,$0-8
TESTL $0x4000000, runtime·cpuid_edx(SB) // no sse2, no mfence
CALL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$0-16
- MOVQ argp+0(FP), AX
- MOVQ AX, ret+8(FP)
- RET
-
// func cputicks() int64
TEXT runtime·cputicks(SB),NOSPLIT,$0-0
CMPB runtime·lfenceBeforeRdtsc(SB), $1
CALL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$0-12
- MOVL argp+0(FP), AX
- MOVL AX, ret+8(FP)
- RET
-
// int64 runtime·cputicks(void)
TEXT runtime·cputicks(SB),NOSPLIT,$0-0
RDTSC
BL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$-4-8
- MOVW argp+0(FP), R0
- MOVW $-4(R0), R0
- MOVW R0, ret+4(FP)
- RET
-
TEXT runtime·emptyfunc(SB),0,$0-0
RET
BL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$0-16
- MOVD argp+0(FP), R0
- SUB $8, R0
- MOVD R0, ret+8(FP)
- RET
-
TEXT runtime·abort(SB),NOSPLIT,$-8-0
B (ZR)
UNDEF
JAL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$0-16
- MOVV argp+0(FP), R1
- ADDV $-8, R1
- MOVV R1, ret+8(FP)
- RET
-
TEXT runtime·abort(SB),NOSPLIT,$-8-0
MOVW (R0), R0
UNDEF
BL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$0-16
- MOVD argp+0(FP), R3
- SUB $FIXED_FRAME, R3
- MOVD R3, ret+8(FP)
- RET
-
TEXT runtime·abort(SB),NOSPLIT|NOFRAME,$0-0
MOVW (R0), R0
UNDEF
BL runtime·setNextBarrierPC(SB)
RET
-TEXT runtime·getcallersp(SB),NOSPLIT,$0-16
- MOVD argp+0(FP), R3
- SUB $8, R3
- MOVD R3, ret+8(FP)
- RET
-
TEXT runtime·abort(SB),NOSPLIT|NOFRAME,$0-0
MOVW (R0), R0
UNDEF
package runtime
-import "unsafe"
+import (
+ "runtime/internal/sys"
+ "unsafe"
+)
// Should be a built-in for unsafe.Pointer?
//go:nosplit
//go:noescape
func getcallerpc(argp unsafe.Pointer) uintptr
-//go:noescape
-func getcallersp(argp unsafe.Pointer) uintptr
+//go:nosplit
+func getcallersp(argp unsafe.Pointer) uintptr {
+ return uintptr(argp) - sys.MinFrameSize
+}
//go:noescape
func asmcgocall(fn, arg unsafe.Pointer) int32