Skip to content

Commit

Permalink
cmd/compile: use correct store types in softfloat
Browse files Browse the repository at this point in the history
When using softfloat, floating point ops are rewritten to integer
ops. The types of store ops were not rewritten. This may lower
to floating point stores, which are problematic. This CL fixes
this by rewriting the store types as well.

This fixes test/fixedbugs/issue28688.go on Wasm. Softfloat mode
is not used by default on Wasm, and it is not needed as Wasm spec
supports floating points. But it is nice to have the correct
types.

Change-Id: Ib5e19e19fa9491b15c2f60320f8724cace5cefb5
Reviewed-on: https://go-review.googlesource.com/c/149965
Run-TryBot: Cherry Zhang <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Keith Randall <[email protected]>
  • Loading branch information
cherrymui committed Nov 23, 2018
1 parent 649b893 commit 63a3993
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/cmd/compile/internal/ssa/softfloat.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

package ssa

import "math"
import (
"cmd/compile/internal/types"
"math"
)

func softfloat(f *Func) {
if !f.Config.SoftFloat {
Expand Down Expand Up @@ -53,6 +56,15 @@ func softfloat(f *Func) {
v.Type = f.Config.Types.UInt64
}
newInt64 = newInt64 || v.Type.Size() == 8
} else if (v.Op == OpStore || v.Op == OpZero || v.Op == OpMove) && v.Aux.(*types.Type).IsFloat() {
switch size := v.Aux.(*types.Type).Size(); size {
case 4:
v.Aux = f.Config.Types.UInt32
case 8:
v.Aux = f.Config.Types.UInt64
default:
v.Fatalf("bad float type with size %d", size)
}
}
}
}
Expand Down

0 comments on commit 63a3993

Please sign in to comment.