aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/mips
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2016-10-27 17:52:53 -0400
committerCherry Zhang <cherryyz@google.com>2016-10-28 14:20:09 +0000
commit4f1ca8b6f92d69a889a6884d3b8393fdcf530e2b (patch)
tree02e50d6be1e04e801be40f1dd08f489574de7d05 /src/cmd/internal/obj/mips
parent0acefdbea07252191aa24b8bbbddeecbfa3e7ed9 (diff)
downloadgo-4f1ca8b6f92d69a889a6884d3b8393fdcf530e2b.tar.xz
cmd/internal/obj/mips: materialize float constant 0 from zero register
Materialize float constant 0 from integer zero register, instead of loading from constant pool. Change-Id: Ie4728895b9d617bec2a29d15729c0efaa10eedbb Reviewed-on: https://go-review.googlesource.com/32109 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/internal/obj/mips')
-rw-r--r--src/cmd/internal/obj/mips/obj0.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/mips/obj0.go b/src/cmd/internal/obj/mips/obj0.go
index 402b65eb27..651da23955 100644
--- a/src/cmd/internal/obj/mips/obj0.go
+++ b/src/cmd/internal/obj/mips/obj0.go
@@ -58,6 +58,12 @@ func progedit(ctxt *obj.Link, p *obj.Prog) {
if p.From.Type == obj.TYPE_FCONST {
f32 := float32(p.From.Val.(float64))
i32 := math.Float32bits(f32)
+ if i32 == 0 {
+ p.As = AMOVV
+ p.From.Type = obj.TYPE_REG
+ p.From.Reg = REGZERO
+ break
+ }
literal := fmt.Sprintf("$f32.%08x", i32)
s := obj.Linklookup(ctxt, literal, 0)
s.Size = 4
@@ -70,6 +76,12 @@ func progedit(ctxt *obj.Link, p *obj.Prog) {
case AMOVD:
if p.From.Type == obj.TYPE_FCONST {
i64 := math.Float64bits(p.From.Val.(float64))
+ if i64 == 0 {
+ p.As = AMOVV
+ p.From.Type = obj.TYPE_REG
+ p.From.Reg = REGZERO
+ break
+ }
literal := fmt.Sprintf("$f64.%016x", i64)
s := obj.Linklookup(ctxt, literal, 0)
s.Size = 8