]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.9] cmd/compile: remove gc.Sysfunc calls from 387 backend
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 8 Aug 2017 23:38:25 +0000 (16:38 -0700)
committerKeith Randall <khr@golang.org>
Tue, 22 Aug 2017 18:24:54 +0000 (18:24 +0000)
[This is a cherry-pick of CL 54090 to the 1.9 release branch.]

gc.Sysfunc must not be called concurrently.
We set up runtime routines used by the backend
prior to doing any backend compilation.
I missed the 387 ones; fix that.

Sysfunc should have been unexported during 1.9.
I will rectify that in a subsequent CL.

Fixes #21352

Change-Id: I485bb1867b46d8e5cf64bc820b8963576dc16174
Reviewed-on: https://go-review.googlesource.com/55970
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/x86/387.go

index 65d8946849727caea901521f02d95aa3889b64f3..b1ead93c346cda7d101427e7021a801be31031e3 100644 (file)
@@ -293,4 +293,8 @@ var (
        typedmemmove,
        typedmemclr,
        Udiv *obj.LSym
+
+       // GO386=387
+       ControlWord64trunc,
+       ControlWord32 *obj.LSym
 )
index 1497c5c2f5f2dcf3ec9201aeb0f38e3a49536ba2..9c1b3ca69fc7ae8b4e80324f2ebf03ed6f1162ba 100644 (file)
@@ -92,6 +92,10 @@ func initssaconfig() {
        typedmemmove = Sysfunc("typedmemmove")
        typedmemclr = Sysfunc("typedmemclr")
        Udiv = Sysfunc("udiv")
+
+       // GO386=387 runtime functions
+       ControlWord64trunc = Sysfunc("controlWord64trunc")
+       ControlWord32 = Sysfunc("controlWord32")
 }
 
 // buildssa builds an SSA function for fn.
index 5bf14109b22a62040a6d6e4dec405d5713c8fe0c..cdac000648dcec3df77bd9e8e94f0dd937d4e925 100644 (file)
@@ -120,7 +120,7 @@ func ssaGenValue387(s *gc.SSAGenState, v *ssa.Value) {
                        p = s.Prog(x86.AFLDCW)
                        p.From.Type = obj.TYPE_MEM
                        p.From.Name = obj.NAME_EXTERN
-                       p.From.Sym = gc.Sysfunc("controlWord32")
+                       p.From.Sym = gc.ControlWord32
                }
 
                var op obj.As
@@ -210,7 +210,7 @@ func ssaGenValue387(s *gc.SSAGenState, v *ssa.Value) {
                p = s.Prog(x86.AFLDCW)
                p.From.Type = obj.TYPE_MEM
                p.From.Name = obj.NAME_EXTERN
-               p.From.Sym = gc.Sysfunc("controlWord64trunc")
+               p.From.Sym = gc.ControlWord64trunc
 
                // Now do the conversion.
                p = s.Prog(x86.AFMOVLP)