• Josh Bleecher Snyder's avatar
    cmd/6g, cmd/8g, liblink: improve handling of float constants · 43c87aa4
    Josh Bleecher Snyder authored
    * Enable basic constant propagation for floats.
      The constant propagation is still not as aggressive as it could be.
    * Implement MOVSS $(0), Xx and MOVSD $(0), Xx as XORPS Xx, Xx.
    
    Sample code:
    
    func f32() float32 {
    	var f float32
    	return f
    }
    
    func f64() float64 {
    	var f float64
    	return f
    }
    
    Before:
    
    "".f32 t=1 size=32 value=0 args=0x8 locals=0x0
    	0x0000 00000 (demo.go:3)	TEXT	"".f32+0(SB),4,$0-8
    	0x0000 00000 (demo.go:3)	FUNCDATA	$0,gclocals·a7a3692b8e27e823add69ec4239ba55f+0(SB)
    	0x0000 00000 (demo.go:3)	FUNCDATA	$1,gclocals·3280bececceccd33cb74587feedb1f9f+0(SB)
    	0x0000 00000 (demo.go:3)	MOVSS	$f32.00000000+0(SB),X0
    	0x0008 00008 (demo.go:4)	MOVSS	$f32.00000000+0(SB),X0
    	0x0010 00016 (demo.go:5)	MOVSS	X0,"".~r0+8(FP)
    	0x0016 00022 (demo.go:5)	RET	,
    "".f64 t=1 size=32 value=0 args=0x8 locals=0x0
    	0x0000 00000 (demo.go:8)	TEXT	"".f64+0(SB),4,$0-8
    	0x0000 00000 (demo.go:8)	FUNCDATA	$0,gclocals·a7a3692b8e27e823add69ec4239ba55f+0(SB)
    	0x0000 00000 (demo.go:8)	FUNCDATA	$1,gclocals·3280bececceccd33cb74587feedb1f9f+0(SB)
    	0x0000 00000 (demo.go:8)	MOVSD	$f64.0000000000000000+0(SB),X0
    	0x0008 00008 (demo.go:9)	MOVSD	$f64.0000000000000000+0(SB),X0
    	0x0010 00016 (demo.go:10)	MOVSD	X0,"".~r0+8(FP)
    	0x0016 00022 (demo.go:10)	RET	,
    
    After:
    
    "".f32 t=1 size=16 value=0 args=0x8 locals=0x0
    	0x0000 00000 (demo.go:3)	TEXT	"".f32+0(SB),4,$0-8
    	0x0000 00000 (demo.go:3)	FUNCDATA	$0,gclocals·a7a3692b8e27e823add69ec4239ba55f+0(SB)
    	0x0000 00000 (demo.go:3)	FUNCDATA	$1,gclocals·3280bececceccd33cb74587feedb1f9f+0(SB)
    	0x0000 00000 (demo.go:3)	XORPS	X0,X0
    	0x0003 00003 (demo.go:5)	MOVSS	X0,"".~r0+8(FP)
    	0x0009 00009 (demo.go:5)	RET	,
    "".f64 t=1 size=16 value=0 args=0x8 locals=0x0
    	0x0000 00000 (demo.go:8)	TEXT	"".f64+0(SB),4,$0-8
    	0x0000 00000 (demo.go:8)	FUNCDATA	$0,gclocals·a7a3692b8e27e823add69ec4239ba55f+0(SB)
    	0x0000 00000 (demo.go:8)	FUNCDATA	$1,gclocals·3280bececceccd33cb74587feedb1f9f+0(SB)
    	0x0000 00000 (demo.go:8)	XORPS	X0,X0
    	0x0003 00003 (demo.go:10)	MOVSD	X0,"".~r0+8(FP)
    	0x0009 00009 (demo.go:10)	RET	,
    
    Change-Id: Ie9eb65e324af4f664153d0a7cd22bb16b0fba16d
    Reviewed-on: https://go-review.googlesource.com/2053Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    43c87aa4
Name
Last commit
Last update
..
Makefile Loading commit data...
cgen.c Loading commit data...
cgen64.c Loading commit data...
doc.go Loading commit data...
galign.c Loading commit data...
gg.h Loading commit data...
ggen.c Loading commit data...
gobj.c Loading commit data...
gsubr.c Loading commit data...
opt.h Loading commit data...
peep.c Loading commit data...
prog.c Loading commit data...
reg.c Loading commit data...