• Russ Cox's avatar
    all: remove 'extern register M *m' from runtime · 89f185fe
    Russ Cox authored
    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
    89f185fe
obj6.c 25.8 KB