how scale works on amd64/386
go/test: passes 85% (294/342)
R=rsc
APPROVED=rsc
DELTA=27 (26 added, 1 deleted, 0 changed)
OCL=35815
CL=35818
n4.op = OADDR;
n4.left = &n2;
cgen(&n4, &n3);
+ if (w == 1)
+ gins(AADD, &n2, &n3);
+ else if(w == 2)
+ gshift(AADD, &n2, SHIFT_LL, 1, &n3);
+ else if(w == 4)
+ gshift(AADD, &n2, SHIFT_LL, 2, &n3);
+ else if(w == 8)
+ gshift(AADD, &n2, SHIFT_LL, 3, &n3);
} else {
regalloc(&n4, t, N);
nodconst(&n1, t, w);
gmove(&n2, reg);
}
+ if (*w == 1)
+ gins(AADD, reg1, reg);
+ else if(*w == 2)
+ gshift(AADD, reg1, SHIFT_LL, 1, reg);
+ else if(*w == 4)
+ gshift(AADD, reg1, SHIFT_LL, 2, reg);
+ else if(*w == 8)
+ gshift(AADD, reg1, SHIFT_LL, 3, reg);
+
naddr(reg1, a);
- a->offset = 0;
a->type = D_OREG;
a->reg = reg->val.u.reg;
+ a->offset = 0;
goto yes;
args.go
assign.go
bigalg.go
+blank.go
blank1.go
bugs/bug136.go
bugs/bug162.go
interface/returntype.go
interface/struct.go
iota.go
+ken/array.go
+ken/complit.go
ken/divmod.go
ken/embed.go
ken/for.go
ken/label.go
ken/mfunc.go
ken/ptrvar.go
+ken/range.go
ken/rob1.go
ken/rob2.go
ken/robfor.go
ken/simpprint.go
ken/simpswitch.go
ken/simpvar.go
+ken/slicearray.go
+ken/sliceslice.go
ken/string.go
ken/strvar.go
method.go
sigchld.go
simassign.go
string_lit.go
+stringrange.go
switch.go
switch1.go
test0.go
typeswitch.go
+utf.go
varinit.go