}
}
if objabi.Experiment.RegabiWrappers {
- set("GOEXPERIMENT_REGABI_WRAPPERS")
+ set("GOEXPERIMENT_regabiwrappers")
}
if objabi.Experiment.RegabiG {
- set("GOEXPERIMENT_REGABI_G")
+ set("GOEXPERIMENT_regabig")
}
if objabi.Experiment.RegabiReflect {
- set("GOEXPERIMENT_REGABI_REFLECT")
+ set("GOEXPERIMENT_regabireflect")
}
if objabi.Experiment.RegabiDefer {
- set("GOEXPERIMENT_REGABI_DEFER")
+ set("GOEXPERIMENT_regabidefer")
}
if objabi.Experiment.RegabiArgs {
- set("GOEXPERIMENT_REGABI_ARGS")
+ set("GOEXPERIMENT_regabiargs")
}
}
// Switch to m->g0's stack, call fn(g).
// Fn must never return. It should gogo(&g->sched)
// to keep running g.
-#ifdef GOEXPERIMENT_REGABI_ARGS
+#ifdef GOEXPERIMENT_regabiargs
TEXT runtime·mcall<ABIInternal>(SB), NOSPLIT, $0-8
MOVQ AX, DX // DX = fn
MOVL $0, DX
JMP runtime·morestack(SB)
-#ifdef GOEXPERIMENT_REGABI_REFLECT
+#ifdef GOEXPERIMENT_regabireflect
// spillArgs stores return values from registers to a *internal/abi.RegArgs in R12.
TEXT ·spillArgs<ABIInternal>(SB),NOSPLIT,$0-0
MOVQ AX, 0(R12)
// or else unwinding from systemstack_switch is incorrect.
// Smashes R9.
TEXT gosave_systemstack_switch<>(SB),NOSPLIT,$0
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R14)
MOVQ g(R14), R14
#endif
// signals. It is quite painful to set X15 in the signal context,
// so we do it here.
TEXT ·sigpanic0<ABIInternal>(SB),NOSPLIT,$0-0
-#ifdef GOEXPERIMENT_REGABI_G
+#ifdef GOEXPERIMENT_regabig
get_tls(R14)
MOVQ g(R14), R14
XORPS X15, X15
MOVQ R13, 104(SP)
// TODO: Consider passing g.m.p in as an argument so they can be shared
// across a sequence of write barriers.
-#ifdef GOEXPERIMENT_REGABI_G
+#ifdef GOEXPERIMENT_regabig
MOVQ g_m(R14), R13
#else
get_tls(R13)
// Defined as ABIInternal so as to avoid introducing a wrapper,
// which would render runtime.getcallerpc ineffective.
TEXT runtime·raceread<ABIInternal>(SB), NOSPLIT, $0-8
-#ifdef GOEXPERIMENT_REGABI_ARGS
+#ifdef GOEXPERIMENT_regabiargs
MOVQ AX, RARG1
#else
MOVQ addr+0(FP), RARG1
// Defined as ABIInternal so as to avoid introducing a wrapper,
// which would render runtime.getcallerpc ineffective.
TEXT runtime·racewrite<ABIInternal>(SB), NOSPLIT, $0-8
-#ifdef GOEXPERIMENT_REGABI_ARGS
+#ifdef GOEXPERIMENT_regabiargs
MOVQ AX, RARG1
#else
MOVQ addr+0(FP), RARG1
// Defined as ABIInternal so as to avoid introducing a wrapper,
// which would render runtime.getcallerpc ineffective.
TEXT runtime·racewriterange<ABIInternal>(SB), NOSPLIT, $0-16
-#ifdef GOEXPERIMENT_REGABI_ARGS
+#ifdef GOEXPERIMENT_regabiargs
MOVQ AX, RARG1
MOVQ BX, RARG2
#else
// If addr (RARG1) is out of range, do nothing.
// Otherwise, setup goroutine context and invoke racecall. Other arguments already set.
TEXT racecalladdr<>(SB), NOSPLIT, $0-0
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R12)
MOVQ g(R12), R14
#endif
// R11 = caller's return address
TEXT racefuncenter<>(SB), NOSPLIT, $0-0
MOVQ DX, BX // save function entry context (for closures)
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R12)
MOVQ g(R12), R14
#endif
// func runtime·racefuncexit()
// Called from instrumented code.
TEXT runtime·racefuncexit(SB), NOSPLIT, $0-0
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R12)
MOVQ g(R12), R14
#endif
JAE racecallatomic_ignore
racecallatomic_ok:
// Addr is within the good range, call the atomic function.
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R12)
MOVQ g(R12), R14
#endif
// An attempt to synchronize on the address would cause crash.
MOVQ AX, BX // remember the original function
MOVQ $__tsan_go_ignore_sync_begin(SB), AX
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R12)
MOVQ g(R12), R14
#endif
// Switches SP to g0 stack and calls (AX). Arguments already set.
TEXT racecall<>(SB), NOSPLIT, $0-0
-#ifndef GOEXPERIMENT_REGABI_G
+#ifndef GOEXPERIMENT_regabig
get_tls(R12)
MOVQ g(R12), R14
#endif
MOVQ SP, R12 // Save old SP; R12 unchanged by C code.
-#ifdef GOEXPERIMENT_REGABI_G
+#ifdef GOEXPERIMENT_regabig
MOVQ g_m(R14), BX // BX unchanged by C code.
#else
get_tls(CX)
MOVQ CX, m_vdsoPC(BX)
MOVQ DX, m_vdsoSP(BX)
-#ifdef GOEXPERIMENT_REGABI_G
+#ifdef GOEXPERIMENT_regabig
CMPQ R14, m_curg(BX) // Only switch if on curg.
#else
CMPQ AX, m_curg(BX) // Only switch if on curg.
MOVQ SP, R12 // Save old SP; R12 unchanged by C code.
-#ifdef GOEXPERIMENT_REGABI_G
+#ifdef GOEXPERIMENT_regabig
MOVQ g_m(R14), BX // BX unchanged by C code.
#else
get_tls(CX)
MOVQ CX, m_vdsoPC(BX)
MOVQ DX, m_vdsoSP(BX)
-#ifdef GOEXPERIMENT_REGABI_G
+#ifdef GOEXPERIMENT_regabig
CMPQ R14, m_curg(BX) // Only switch if on curg.
#else
CMPQ AX, m_curg(BX) // Only switch if on curg.