Commit 9a4e7942 authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder Committed by Keith Randall

[release-branch.go1.9] cmd/compile: remove gc.Sysfunc calls from 387 backend

[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: default avatarKeith Randall <khr@golang.org>
parent ff38035a
...@@ -293,4 +293,8 @@ var ( ...@@ -293,4 +293,8 @@ var (
typedmemmove, typedmemmove,
typedmemclr, typedmemclr,
Udiv *obj.LSym Udiv *obj.LSym
// GO386=387
ControlWord64trunc,
ControlWord32 *obj.LSym
) )
...@@ -92,6 +92,10 @@ func initssaconfig() { ...@@ -92,6 +92,10 @@ func initssaconfig() {
typedmemmove = Sysfunc("typedmemmove") typedmemmove = Sysfunc("typedmemmove")
typedmemclr = Sysfunc("typedmemclr") typedmemclr = Sysfunc("typedmemclr")
Udiv = Sysfunc("udiv") Udiv = Sysfunc("udiv")
// GO386=387 runtime functions
ControlWord64trunc = Sysfunc("controlWord64trunc")
ControlWord32 = Sysfunc("controlWord32")
} }
// buildssa builds an SSA function for fn. // buildssa builds an SSA function for fn.
......
...@@ -120,7 +120,7 @@ func ssaGenValue387(s *gc.SSAGenState, v *ssa.Value) { ...@@ -120,7 +120,7 @@ func ssaGenValue387(s *gc.SSAGenState, v *ssa.Value) {
p = s.Prog(x86.AFLDCW) p = s.Prog(x86.AFLDCW)
p.From.Type = obj.TYPE_MEM p.From.Type = obj.TYPE_MEM
p.From.Name = obj.NAME_EXTERN p.From.Name = obj.NAME_EXTERN
p.From.Sym = gc.Sysfunc("controlWord32") p.From.Sym = gc.ControlWord32
} }
var op obj.As var op obj.As
...@@ -210,7 +210,7 @@ func ssaGenValue387(s *gc.SSAGenState, v *ssa.Value) { ...@@ -210,7 +210,7 @@ func ssaGenValue387(s *gc.SSAGenState, v *ssa.Value) {
p = s.Prog(x86.AFLDCW) p = s.Prog(x86.AFLDCW)
p.From.Type = obj.TYPE_MEM p.From.Type = obj.TYPE_MEM
p.From.Name = obj.NAME_EXTERN p.From.Name = obj.NAME_EXTERN
p.From.Sym = gc.Sysfunc("controlWord64trunc") p.From.Sym = gc.ControlWord64trunc
// Now do the conversion. // Now do the conversion.
p = s.Prog(x86.AFMOVLP) p = s.Prog(x86.AFMOVLP)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment