diff options
| author | Russ Cox <rsc@golang.org> | 2014-06-26 11:54:39 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-06-26 11:54:39 -0400 |
| commit | 89f185fe8a036b0fabce30b20c480cf1c832bdd7 (patch) | |
| tree | cd8c84fca5164747bebd852da7edfed132ce4e70 /src/pkg/runtime/sys_linux_amd64.s | |
| parent | 2565b5c06086488b2b23d48929803c8c3cec4400 (diff) | |
| download | go-89f185fe8a036b0fabce30b20c480cf1c832bdd7.tar.xz | |
all: remove 'extern register M *m' from runtime
The runtime has historically held two dedicated values g (current goroutine)
and m (current thread) in 'extern register' slots (TLS on x86, real registers
backed by TLS on ARM).
This CL removes the extern register m; code now uses g->m.
On ARM, this frees up the register that formerly held m (R9).
This is important for NaCl, because NaCl ARM code cannot use R9 at all.
The Go 1 macrobenchmarks (those with per-op times >= 10 µs) are unaffected:
BenchmarkBinaryTree17 5491374955 5471024381 -0.37%
BenchmarkFannkuch11 4357101311 4275174828 -1.88%
BenchmarkGobDecode 11029957 11364184 +3.03%
BenchmarkGobEncode 6852205 6784822 -0.98%
BenchmarkGzip 650795967 650152275 -0.10%
BenchmarkGunzip 140962363 141041670 +0.06%
BenchmarkHTTPClientServer 71581 73081 +2.10%
BenchmarkJSONEncode 31928079 31913356 -0.05%
BenchmarkJSONDecode 117470065 113689916 -3.22%
BenchmarkMandelbrot200 6008923 5998712 -0.17%
BenchmarkGoParse 6310917 6327487 +0.26%
BenchmarkRegexpMatchMedium_1K 114568 114763 +0.17%
BenchmarkRegexpMatchHard_1K 168977 169244 +0.16%
BenchmarkRevcomp 935294971 914060918 -2.27%
BenchmarkTemplate 145917123 148186096 +1.55%
Minux previous reported larger variations, but these were caused by
run-to-run noise, not repeatable slowdowns.
Actual code changes by Minux.
I only did the docs and the benchmarking.
LGTM=dvyukov, iant, minux
R=minux, josharian, iant, dave, bradfitz, dvyukov
CC=golang-codereviews
https://golang.org/cl/109050043
Diffstat (limited to 'src/pkg/runtime/sys_linux_amd64.s')
| -rw-r--r-- | src/pkg/runtime/sys_linux_amd64.s | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/pkg/runtime/sys_linux_amd64.s b/src/pkg/runtime/sys_linux_amd64.s index b340c4f2cc..03b9d6a7c4 100644 --- a/src/pkg/runtime/sys_linux_amd64.s +++ b/src/pkg/runtime/sys_linux_amd64.s @@ -184,9 +184,9 @@ TEXT runtime·rt_sigaction(SB),NOSPLIT,$0-32 TEXT runtime·sigtramp(SB),NOSPLIT,$64 get_tls(BX) - // check that m exists - MOVQ m(BX), BP - CMPQ BP, $0 + // check that g exists + MOVQ g(BX), R10 + CMPQ R10, $0 JNE 5(PC) MOVQ DI, 0(SP) MOVQ $runtime·badsignal(SB), AX @@ -194,10 +194,10 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$64 RET // save g - MOVQ g(BX), R10 MOVQ R10, 40(SP) // g = m->gsignal + MOVQ g_m(R10), BP MOVQ m_gsignal(BP), BP MOVQ BP, g(BX) @@ -301,7 +301,7 @@ TEXT runtime·clone(SB),NOSPLIT,$0 // In child, set up new stack get_tls(CX) - MOVQ R8, m(CX) + MOVQ R8, g_m(R9) MOVQ R9, g(CX) CALL runtime·stackcheck(SB) |
