mirror of
https://github.com/golang/go
synced 2024-11-25 22:57:58 -07:00
6l/8l: emit correct opcodes to F(SUB|DIV)R?D.
When the destination was not F0, 6l and 8l swapped FSUBD/FSUBRD and FDIVD/FDIVRD. R=golang-dev, dave, rsc CC=golang-dev https://golang.org/cl/6498092
This commit is contained in:
parent
a7743d7ad2
commit
72fa142fc5
@ -1199,25 +1199,25 @@ Optab optab[] =
|
|||||||
{ AFSUBW, yfmvx, Px, 0xde,(04) },
|
{ AFSUBW, yfmvx, Px, 0xde,(04) },
|
||||||
{ AFSUBL, yfmvx, Px, 0xda,(04) },
|
{ AFSUBL, yfmvx, Px, 0xda,(04) },
|
||||||
{ AFSUBF, yfmvx, Px, 0xd8,(04) },
|
{ AFSUBF, yfmvx, Px, 0xd8,(04) },
|
||||||
{ AFSUBD, yfadd, Px, 0xdc,(04),0xd8,(04),0xdc,(05) },
|
{ AFSUBD, yfadd, Px, 0xdc,(04),0xd8,(04),0xdc,(04) },
|
||||||
|
|
||||||
{ AFSUBRDP, yfaddp, Px, 0xde,(04) },
|
{ AFSUBRDP, yfaddp, Px, 0xde,(04) },
|
||||||
{ AFSUBRW, yfmvx, Px, 0xde,(05) },
|
{ AFSUBRW, yfmvx, Px, 0xde,(05) },
|
||||||
{ AFSUBRL, yfmvx, Px, 0xda,(05) },
|
{ AFSUBRL, yfmvx, Px, 0xda,(05) },
|
||||||
{ AFSUBRF, yfmvx, Px, 0xd8,(05) },
|
{ AFSUBRF, yfmvx, Px, 0xd8,(05) },
|
||||||
{ AFSUBRD, yfadd, Px, 0xdc,(05),0xd8,(05),0xdc,(04) },
|
{ AFSUBRD, yfadd, Px, 0xdc,(05),0xd8,(05),0xdc,(05) },
|
||||||
|
|
||||||
{ AFDIVDP, yfaddp, Px, 0xde,(07) },
|
{ AFDIVDP, yfaddp, Px, 0xde,(07) },
|
||||||
{ AFDIVW, yfmvx, Px, 0xde,(06) },
|
{ AFDIVW, yfmvx, Px, 0xde,(06) },
|
||||||
{ AFDIVL, yfmvx, Px, 0xda,(06) },
|
{ AFDIVL, yfmvx, Px, 0xda,(06) },
|
||||||
{ AFDIVF, yfmvx, Px, 0xd8,(06) },
|
{ AFDIVF, yfmvx, Px, 0xd8,(06) },
|
||||||
{ AFDIVD, yfadd, Px, 0xdc,(06),0xd8,(06),0xdc,(07) },
|
{ AFDIVD, yfadd, Px, 0xdc,(06),0xd8,(06),0xdc,(06) },
|
||||||
|
|
||||||
{ AFDIVRDP, yfaddp, Px, 0xde,(06) },
|
{ AFDIVRDP, yfaddp, Px, 0xde,(06) },
|
||||||
{ AFDIVRW, yfmvx, Px, 0xde,(07) },
|
{ AFDIVRW, yfmvx, Px, 0xde,(07) },
|
||||||
{ AFDIVRL, yfmvx, Px, 0xda,(07) },
|
{ AFDIVRL, yfmvx, Px, 0xda,(07) },
|
||||||
{ AFDIVRF, yfmvx, Px, 0xd8,(07) },
|
{ AFDIVRF, yfmvx, Px, 0xd8,(07) },
|
||||||
{ AFDIVRD, yfadd, Px, 0xdc,(07),0xd8,(07),0xdc,(06) },
|
{ AFDIVRD, yfadd, Px, 0xdc,(07),0xd8,(07),0xdc,(07) },
|
||||||
|
|
||||||
{ AFXCHD, yfxch, Px, 0xd9,(01),0xd9,(01) },
|
{ AFXCHD, yfxch, Px, 0xd9,(01),0xd9,(01) },
|
||||||
{ AFFREE },
|
{ AFFREE },
|
||||||
|
@ -651,25 +651,25 @@ Optab optab[] =
|
|||||||
{ AFSUBW, yfmvx, Px, 0xde,(04) },
|
{ AFSUBW, yfmvx, Px, 0xde,(04) },
|
||||||
{ AFSUBL, yfmvx, Px, 0xda,(04) },
|
{ AFSUBL, yfmvx, Px, 0xda,(04) },
|
||||||
{ AFSUBF, yfmvx, Px, 0xd8,(04) },
|
{ AFSUBF, yfmvx, Px, 0xd8,(04) },
|
||||||
{ AFSUBD, yfadd, Px, 0xdc,(04),0xd8,(04),0xdc,(05) },
|
{ AFSUBD, yfadd, Px, 0xdc,(04),0xd8,(04),0xdc,(04) },
|
||||||
|
|
||||||
{ AFSUBRDP, yfaddp, Px, 0xde,(04) },
|
{ AFSUBRDP, yfaddp, Px, 0xde,(04) },
|
||||||
{ AFSUBRW, yfmvx, Px, 0xde,(05) },
|
{ AFSUBRW, yfmvx, Px, 0xde,(05) },
|
||||||
{ AFSUBRL, yfmvx, Px, 0xda,(05) },
|
{ AFSUBRL, yfmvx, Px, 0xda,(05) },
|
||||||
{ AFSUBRF, yfmvx, Px, 0xd8,(05) },
|
{ AFSUBRF, yfmvx, Px, 0xd8,(05) },
|
||||||
{ AFSUBRD, yfadd, Px, 0xdc,(05),0xd8,(05),0xdc,(04) },
|
{ AFSUBRD, yfadd, Px, 0xdc,(05),0xd8,(05),0xdc,(05) },
|
||||||
|
|
||||||
{ AFDIVDP, yfaddp, Px, 0xde,(07) },
|
{ AFDIVDP, yfaddp, Px, 0xde,(07) },
|
||||||
{ AFDIVW, yfmvx, Px, 0xde,(06) },
|
{ AFDIVW, yfmvx, Px, 0xde,(06) },
|
||||||
{ AFDIVL, yfmvx, Px, 0xda,(06) },
|
{ AFDIVL, yfmvx, Px, 0xda,(06) },
|
||||||
{ AFDIVF, yfmvx, Px, 0xd8,(06) },
|
{ AFDIVF, yfmvx, Px, 0xd8,(06) },
|
||||||
{ AFDIVD, yfadd, Px, 0xdc,(06),0xd8,(06),0xdc,(07) },
|
{ AFDIVD, yfadd, Px, 0xdc,(06),0xd8,(06),0xdc,(06) },
|
||||||
|
|
||||||
{ AFDIVRDP, yfaddp, Px, 0xde,(06) },
|
{ AFDIVRDP, yfaddp, Px, 0xde,(06) },
|
||||||
{ AFDIVRW, yfmvx, Px, 0xde,(07) },
|
{ AFDIVRW, yfmvx, Px, 0xde,(07) },
|
||||||
{ AFDIVRL, yfmvx, Px, 0xda,(07) },
|
{ AFDIVRL, yfmvx, Px, 0xda,(07) },
|
||||||
{ AFDIVRF, yfmvx, Px, 0xd8,(07) },
|
{ AFDIVRF, yfmvx, Px, 0xd8,(07) },
|
||||||
{ AFDIVRD, yfadd, Px, 0xdc,(07),0xd8,(07),0xdc,(06) },
|
{ AFDIVRD, yfadd, Px, 0xdc,(07),0xd8,(07),0xdc,(07) },
|
||||||
|
|
||||||
{ AFXCHD, yfxch, Px, 0xd9,(01),0xd9,(01) },
|
{ AFXCHD, yfxch, Px, 0xd9,(01),0xd9,(01) },
|
||||||
{ AFFREE },
|
{ AFFREE },
|
||||||
|
22
test/fixedbugs/bug453.dir/bug453.go
Normal file
22
test/fixedbugs/bug453.dir/bug453.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// These functions are implemented in bug453.s
|
||||||
|
func bug453a() float64
|
||||||
|
func bug453b() float64
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if v := bug453a(); v != -1 {
|
||||||
|
panic("a: bad result, want -1, got " + strconv.FormatFloat(v, 'f', -1, 64))
|
||||||
|
}
|
||||||
|
if v := bug453b(); v != 1 {
|
||||||
|
panic("b: bad result, want 1, got " + strconv.FormatFloat(v, 'f', -1, 64))
|
||||||
|
}
|
||||||
|
}
|
31
test/fixedbugs/bug453.dir/bug453.s
Normal file
31
test/fixedbugs/bug453.dir/bug453.s
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build amd64 386
|
||||||
|
|
||||||
|
// func bug453a() float64
|
||||||
|
TEXT ·bug453a(SB),7,$0
|
||||||
|
FLD1
|
||||||
|
FLD1
|
||||||
|
FADDD F1,F0
|
||||||
|
|
||||||
|
// This should subtract F0 (2) from F1 (1) and put -1 in F1.
|
||||||
|
FSUBRD F0,F1
|
||||||
|
|
||||||
|
FMOVDP F0,r+0(FP)
|
||||||
|
FMOVDP F0,r+0(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
// func bug453b() float64
|
||||||
|
TEXT ·bug453b(SB),7,$0
|
||||||
|
FLD1
|
||||||
|
FLD1
|
||||||
|
FADDD F1,F0
|
||||||
|
|
||||||
|
// This should subtract F1 (1) from F0 (2) and put 1 in F1.
|
||||||
|
FSUBD F0,F1
|
||||||
|
|
||||||
|
FMOVDP F0,r+0(FP)
|
||||||
|
FMOVDP F0,r+0(FP)
|
||||||
|
RET
|
15
test/fixedbugs/bug453.dir/bug453_ref.go
Normal file
15
test/fixedbugs/bug453.dir/bug453_ref.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !amd64,!386
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
// These functions are standins for the functions in the .s file on other platforms.
|
||||||
|
func bug453a() float64 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
func bug453b() float64 {
|
||||||
|
return 1
|
||||||
|
}
|
7
test/fixedbugs/bug453.go
Normal file
7
test/fixedbugs/bug453.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// compiledir
|
||||||
|
|
||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
ignored
|
Loading…
Reference in New Issue
Block a user