mirror of
https://github.com/golang/go
synced 2024-11-22 01:14:40 -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) },
|
||||
{ AFSUBL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFSUBRW, yfmvx, Px, 0xde,(05) },
|
||||
{ AFSUBRL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFDIVW, yfmvx, Px, 0xde,(06) },
|
||||
{ AFDIVL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFDIVRW, yfmvx, Px, 0xde,(07) },
|
||||
{ AFDIVRL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFFREE },
|
||||
|
@ -651,25 +651,25 @@ Optab optab[] =
|
||||
{ AFSUBW, yfmvx, Px, 0xde,(04) },
|
||||
{ AFSUBL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFSUBRW, yfmvx, Px, 0xde,(05) },
|
||||
{ AFSUBRL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFDIVW, yfmvx, Px, 0xde,(06) },
|
||||
{ AFDIVL, yfmvx, Px, 0xda,(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) },
|
||||
{ AFDIVRW, yfmvx, Px, 0xde,(07) },
|
||||
{ AFDIVRL, yfmvx, Px, 0xda,(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) },
|
||||
{ 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