mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/8g, cmd/internal/gc: fix GO386=387 build
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>
This commit is contained in:
parent
2c4cf2f6f2
commit
8fc73a39ef
6 changed files with 26 additions and 14 deletions
|
|
@ -50,8 +50,16 @@ func main() {
|
||||||
gc.Thearch.REGRETURN = x86.REG_AX
|
gc.Thearch.REGRETURN = x86.REG_AX
|
||||||
gc.Thearch.REGMIN = x86.REG_AX
|
gc.Thearch.REGMIN = x86.REG_AX
|
||||||
gc.Thearch.REGMAX = x86.REG_DI
|
gc.Thearch.REGMAX = x86.REG_DI
|
||||||
gc.Thearch.FREGMIN = x86.REG_X0
|
switch v := obj.Getgo386(); v {
|
||||||
gc.Thearch.FREGMAX = x86.REG_X7
|
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.MAXWIDTH = MAXWIDTH
|
||||||
gc.Thearch.ReservedRegs = resvd
|
gc.Thearch.ReservedRegs = resvd
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -617,7 +617,7 @@ func cgen_float(n *gc.Node, res *gc.Node) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if gc.Use_sse != 0 {
|
if gc.Use_sse {
|
||||||
cgen_floatsse(n, res)
|
cgen_floatsse(n, res)
|
||||||
} else {
|
} else {
|
||||||
cgen_float387(n, res)
|
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 et int
|
||||||
var n2 gc.Node
|
var n2 gc.Node
|
||||||
var ax gc.Node
|
var ax gc.Node
|
||||||
if gc.Use_sse != 0 {
|
if gc.Use_sse {
|
||||||
if nl.Addable == 0 {
|
if nl.Addable == 0 {
|
||||||
var n1 gc.Node
|
var n1 gc.Node
|
||||||
gc.Tempname(&n1, nl.Type)
|
gc.Tempname(&n1, nl.Type)
|
||||||
|
|
|
||||||
|
|
@ -402,7 +402,7 @@ func foptoas(op int, t *gc.Type, flg int) int {
|
||||||
a := obj.AXXX
|
a := obj.AXXX
|
||||||
et := int(gc.Simtype[t.Etype])
|
et := int(gc.Simtype[t.Etype])
|
||||||
|
|
||||||
if gc.Use_sse != 0 {
|
if gc.Use_sse {
|
||||||
switch uint32(op)<<16 | uint32(et) {
|
switch uint32(op)<<16 | uint32(et) {
|
||||||
default:
|
default:
|
||||||
gc.Fatal("foptoas-sse: no entry %v-%v", gc.Oconv(int(op), 0), gc.Tconv(t, 0))
|
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) {
|
switch uint32(ft)<<16 | uint32(tt) {
|
||||||
default:
|
default:
|
||||||
if gc.Use_sse != 0 {
|
if gc.Use_sse {
|
||||||
floatmove_sse(f, t)
|
floatmove_sse(f, t)
|
||||||
} else {
|
} else {
|
||||||
floatmove_387(f, t)
|
floatmove_387(f, t)
|
||||||
|
|
|
||||||
|
|
@ -632,7 +632,7 @@ var typesw *Node
|
||||||
|
|
||||||
var nblank *Node
|
var nblank *Node
|
||||||
|
|
||||||
var Use_sse int
|
var Use_sse bool // should we generate SSE2 instructions for 386 targets
|
||||||
|
|
||||||
var hunk string
|
var hunk string
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -692,6 +692,10 @@ Switch:
|
||||||
Fatal("out of fixed registers")
|
Fatal("out of fixed registers")
|
||||||
|
|
||||||
case TFLOAT32, TFLOAT64:
|
case TFLOAT32, TFLOAT64:
|
||||||
|
if Thearch.Thechar == '8' && !Use_sse {
|
||||||
|
i = Thearch.FREGMIN // x86.REG_F0
|
||||||
|
break Switch
|
||||||
|
}
|
||||||
if o != nil && o.Op == OREGISTER {
|
if o != nil && o.Op == OREGISTER {
|
||||||
i = int(o.Val.U.Reg)
|
i = int(o.Val.U.Reg)
|
||||||
if Thearch.FREGMIN <= i && i <= Thearch.FREGMAX {
|
if Thearch.FREGMIN <= i && i <= Thearch.FREGMAX {
|
||||||
|
|
|
||||||
|
|
@ -278,13 +278,13 @@ func Main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if Thearch.Thechar == '8' {
|
if Thearch.Thechar == '8' {
|
||||||
p := obj.Getgo386()
|
switch v := obj.Getgo386(); v {
|
||||||
if p == "387" {
|
case "387":
|
||||||
Use_sse = 0
|
Use_sse = false
|
||||||
} else if p == "sse2" {
|
case "sse2":
|
||||||
Use_sse = 1
|
Use_sse = true
|
||||||
} else {
|
default:
|
||||||
log.Fatalf("unsupported setting GO386=%s", p)
|
log.Fatalf("unsupported setting GO386=%s", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue