]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/8g, cmd/internal/gc: fix GO386=387 build
authorDave Cheney <dave@cheney.net>
Tue, 24 Mar 2015 11:16:48 +0000 (22:16 +1100)
committerDave Cheney <dave@cheney.net>
Tue, 24 Mar 2015 21:57:54 +0000 (21:57 +0000)
Adjust Thearch.FREG_MIN/MAX when using non sse2 mode in 8g.

Also, gc.Use_sse is treated as a bool, so make it a bool.

Change-Id: I840411605344bb31c32f492b3e6729166c084f0c
Reviewed-on: https://go-review.googlesource.com/7993
Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Dave Cheney <dave@cheney.net>
Run-TryBot: Dave Cheney <dave@cheney.net>

src/cmd/8g/galign.go
src/cmd/8g/ggen.go
src/cmd/8g/gsubr.go
src/cmd/internal/gc/go.go
src/cmd/internal/gc/gsubr.go
src/cmd/internal/gc/lex.go

index f5ff825e0c95027a239727f2274cc9a832893ea0..e92802d0b5f2685ca6e15389219b6e53a84be848 100644 (file)
@@ -50,8 +50,16 @@ func main() {
        gc.Thearch.REGRETURN = x86.REG_AX
        gc.Thearch.REGMIN = x86.REG_AX
        gc.Thearch.REGMAX = x86.REG_DI
-       gc.Thearch.FREGMIN = x86.REG_X0
-       gc.Thearch.FREGMAX = x86.REG_X7
+       switch v := obj.Getgo386(); v {
+       case "387":
+               gc.Thearch.FREGMIN = x86.REG_F0
+               gc.Thearch.FREGMAX = x86.REG_F7
+       case "sse2":
+               gc.Thearch.FREGMIN = x86.REG_X0
+               gc.Thearch.FREGMAX = x86.REG_X7
+       default:
+               gc.Fatal("unsupported setting GO386=%s", v)
+       }
        gc.Thearch.MAXWIDTH = MAXWIDTH
        gc.Thearch.ReservedRegs = resvd
 
index 69c60288a24b5bbb1ad72d739dda685b11cfc76d..a55c2d81b07c3b09fb57b6defc08bf1b4dd1077c 100644 (file)
@@ -617,7 +617,7 @@ func cgen_float(n *gc.Node, res *gc.Node) {
                return
        }
 
-       if gc.Use_sse != 0 {
+       if gc.Use_sse {
                cgen_floatsse(n, res)
        } else {
                cgen_float387(n, res)
@@ -761,7 +761,7 @@ func bgen_float(n *gc.Node, true_ int, likely int, to *obj.Prog) {
        var et int
        var n2 gc.Node
        var ax gc.Node
-       if gc.Use_sse != 0 {
+       if gc.Use_sse {
                if nl.Addable == 0 {
                        var n1 gc.Node
                        gc.Tempname(&n1, nl.Type)
index fa28b6dac1ae25b2d729a819d5388382a070c6ee..7ca4dacf917603fc597a405c471d368e289c24ed 100644 (file)
@@ -402,7 +402,7 @@ func foptoas(op int, t *gc.Type, flg int) int {
        a := obj.AXXX
        et := int(gc.Simtype[t.Etype])
 
-       if gc.Use_sse != 0 {
+       if gc.Use_sse {
                switch uint32(op)<<16 | uint32(et) {
                default:
                        gc.Fatal("foptoas-sse: no entry %v-%v", gc.Oconv(int(op), 0), gc.Tconv(t, 0))
@@ -1036,7 +1036,7 @@ func floatmove(f *gc.Node, t *gc.Node) {
 
        switch uint32(ft)<<16 | uint32(tt) {
        default:
-               if gc.Use_sse != 0 {
+               if gc.Use_sse {
                        floatmove_sse(f, t)
                } else {
                        floatmove_387(f, t)
index 6dd17c18bc8101c936f8d11a2290dc8fd800d672..a6e525aba1831cd5d4c1beee4ce2c43942f31867 100644 (file)
@@ -632,7 +632,7 @@ var typesw *Node
 
 var nblank *Node
 
-var Use_sse int
+var Use_sse bool // should we generate SSE2 instructions for 386 targets
 
 var hunk string
 
index 05642d6bfd67eb8cdc5e2769c71fe3045cb19c8d..4a9f8952655b9f29be39db26f1c410df3dfaca3e 100644 (file)
@@ -692,6 +692,10 @@ Switch:
                Fatal("out of fixed registers")
 
        case TFLOAT32, TFLOAT64:
+               if Thearch.Thechar == '8' && !Use_sse {
+                       i = Thearch.FREGMIN // x86.REG_F0
+                       break Switch
+               }
                if o != nil && o.Op == OREGISTER {
                        i = int(o.Val.U.Reg)
                        if Thearch.FREGMIN <= i && i <= Thearch.FREGMAX {
index 9c097706fb23fa6266539d0419a575531e2dda9b..0d715cf34749096851394ff4bc8292db3062eed5 100644 (file)
@@ -278,13 +278,13 @@ func Main() {
        }
 
        if Thearch.Thechar == '8' {
-               p := obj.Getgo386()
-               if p == "387" {
-                       Use_sse = 0
-               } else if p == "sse2" {
-                       Use_sse = 1
-               } else {
-                       log.Fatalf("unsupported setting GO386=%s", p)
+               switch v := obj.Getgo386(); v {
+               case "387":
+                       Use_sse = false
+               case "sse2":
+                       Use_sse = true
+               default:
+                       log.Fatalf("unsupported setting GO386=%s", v)
                }
        }