mirror of
https://github.com/golang/go.git
synced 2025-11-10 21:51:05 +00:00
[dev.ssa] cmd/compile/internal/ssa: treat -0.0 literal as 0.0
This matches existing behavior, see issue #2196 Change-Id: Ifa9359b7c821115389f337a57de355c5ec23be8f Reviewed-on: https://go-review.googlesource.com/14261 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
2a29576562
commit
adba6c4fdf
2 changed files with 11 additions and 13 deletions
|
|
@ -1254,9 +1254,11 @@ func (s *state) expr(n *Node) *ssa.Value {
|
|||
f := n.Val().U.(*Mpflt)
|
||||
switch n.Type.Size() {
|
||||
case 4:
|
||||
return s.constFloat32(n.Type, mpgetflt32(f))
|
||||
// -0.0 literals need to be treated as if they were 0.0, adding 0.0 here
|
||||
// accomplishes this while not affecting other values.
|
||||
return s.constFloat32(n.Type, mpgetflt32(f)+0.0)
|
||||
case 8:
|
||||
return s.constFloat64(n.Type, mpgetflt(f))
|
||||
return s.constFloat64(n.Type, mpgetflt(f)+0.0)
|
||||
default:
|
||||
s.Fatalf("bad float size %d", n.Type.Size())
|
||||
return nil
|
||||
|
|
@ -1269,16 +1271,18 @@ func (s *state) expr(n *Node) *ssa.Value {
|
|||
case 8:
|
||||
{
|
||||
pt := Types[TFLOAT32]
|
||||
// -0.0 literals need to be treated as if they were 0.0, adding 0.0 here
|
||||
// accomplishes this while not affecting other values.
|
||||
return s.newValue2(ssa.OpComplexMake, n.Type,
|
||||
s.constFloat32(pt, mpgetflt32(r)),
|
||||
s.constFloat32(pt, mpgetflt32(i)))
|
||||
s.constFloat32(pt, mpgetflt32(r)+0.0),
|
||||
s.constFloat32(pt, mpgetflt32(i)+0.0))
|
||||
}
|
||||
case 16:
|
||||
{
|
||||
pt := Types[TFLOAT64]
|
||||
return s.newValue2(ssa.OpComplexMake, n.Type,
|
||||
s.constFloat64(pt, mpgetflt(r)),
|
||||
s.constFloat64(pt, mpgetflt(i)))
|
||||
s.constFloat64(pt, mpgetflt(r)+0.0),
|
||||
s.constFloat64(pt, mpgetflt(i)+0.0))
|
||||
}
|
||||
default:
|
||||
s.Fatalf("bad float size %d", n.Type.Size())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue