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 | 133cf52dde3138763a10d29f376f5fc353b6e99c (patch) | |
tree | ff01fff7fd753e3208f025eea572bc904c516ef0 /src/liblink/obj5.c | |
parent | dfa5443fe442274dc9ffd6b076e879040b3303e1 (diff) | |
download | go-133cf52dde3138763a10d29f376f5fc353b6e99c.tar.gz |
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://codereview.appspot.com/109050043
Diffstat (limited to 'src/liblink/obj5.c')
-rw-r--r-- | src/liblink/obj5.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/liblink/obj5.c b/src/liblink/obj5.c index ccd4c81c7..d473cb7c6 100644 --- a/src/liblink/obj5.c +++ b/src/liblink/obj5.c @@ -173,15 +173,15 @@ progedit(Link *ctxt, Prog *p) if(ctxt->flag_shared) { // Shared libraries use R_ARM_TLS_IE32 instead of // R_ARM_TLS_LE32, replacing the link time constant TLS offset in - // runtime.tlsgm with an address to a GOT entry containing the - // offset. Rewrite $runtime.tlsgm(SB) to runtime.tlsgm(SB) to + // runtime.tlsg with an address to a GOT entry containing the + // offset. Rewrite $runtime.tlsg(SB) to runtime.tlsg(SB) to // compensate. - if(ctxt->gmsym == nil) - ctxt->gmsym = linklookup(ctxt, "runtime.tlsgm", 0); + if(ctxt->tlsg == nil) + ctxt->tlsg = linklookup(ctxt, "runtime.tlsg", 0); - if(p->from.type == D_CONST && p->from.name == D_EXTERN && p->from.sym == ctxt->gmsym) + if(p->from.type == D_CONST && p->from.name == D_EXTERN && p->from.sym == ctxt->tlsg) p->from.type = D_OREG; - if(p->to.type == D_CONST && p->to.name == D_EXTERN && p->to.sym == ctxt->gmsym) + if(p->to.type == D_CONST && p->to.name == D_EXTERN && p->to.sym == ctxt->tlsg) p->to.type = D_OREG; } } |