mirror of
https://github.com/golang/go
synced 2024-11-22 22:20:03 -07:00
cmd/8g: extend elimination of temporaries to SSE2 code.
Before: (erf.go:188) TEXT Erf+0(SB),$220 (erf.go:265) TEXT Erfc+0(SB),$204 (lgamma.go:174) TEXT Lgamma+0(SB),$948 After: (erf.go:188) TEXT Erf+0(SB),$84 (erf.go:265) TEXT Erfc+0(SB),$84 (lgamma.go:174) TEXT Lgamma+0(SB),$44 SSE before vs. SSE after: benchmark old ns/op new ns/op delta BenchmarkAcosh 81 49 -39.14% BenchmarkAsinh 109 109 +0.00% BenchmarkAtanh 73 74 +0.68% BenchmarkLgamma 138 42 -69.20% BenchmarkModf 24 15 -36.95% BenchmarkSqrtGo 565 556 -1.59% R=rsc CC=golang-dev https://golang.org/cl/7028048
This commit is contained in:
parent
5e46d540c8
commit
cf77dd37e7
@ -1845,26 +1845,33 @@ fixtemp(Prog *firstp)
|
||||
for(p=firstp; p!=P; p=p->link) {
|
||||
if(debug['R'] && debug['v'])
|
||||
print("%P\n", p);
|
||||
if(p->link == P
|
||||
|| !RtoB(p->from.type)
|
||||
|| p->to.type != D_AUTO
|
||||
|| isfloat[p->to.etype])
|
||||
if(p->link == P || p->to.type != D_AUTO)
|
||||
continue;
|
||||
switch(p->as) {
|
||||
case AMOVB:
|
||||
if(p->to.width == 1)
|
||||
if(isfloat[p->to.etype] && FtoB(p->from.type)) {
|
||||
switch(p->as) {
|
||||
case AMOVSS:
|
||||
case AMOVSD:
|
||||
break;
|
||||
case AMOVW:
|
||||
if(p->to.width == 2)
|
||||
break;
|
||||
case AMOVL:
|
||||
if(p->to.width == 4)
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
} else if(!isfloat[p->to.etype] && RtoB(p->from.type)) {
|
||||
switch(p->as) {
|
||||
case AMOVB:
|
||||
if(p->to.width == 1)
|
||||
break;
|
||||
case AMOVW:
|
||||
if(p->to.width == 2)
|
||||
break;
|
||||
case AMOVL:
|
||||
if(p->to.width == 4)
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
} else
|
||||
continue;
|
||||
}
|
||||
// p is a MOV reg, mem.
|
||||
// and it is not a float.
|
||||
p2 = p->link;
|
||||
h = hash32to16(fnv1(p->to.sym));
|
||||
if(counts[h] != 2) {
|
||||
@ -1872,7 +1879,9 @@ fixtemp(Prog *firstp)
|
||||
}
|
||||
switch(p2->as) {
|
||||
case ALEAL:
|
||||
case AFMOVL:
|
||||
case AFMOVD:
|
||||
case AFMOVF:
|
||||
case AFMOVL:
|
||||
case AFMOVW:
|
||||
case AFMOVV:
|
||||
// funny
|
||||
|
Loading…
Reference in New Issue
Block a user