Commit 545dbd81 authored by Kai Backman's avatar Kai Backman

fix OINDEX address generation, leftover misunderstanding about

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
parent 3f085e64
...@@ -605,6 +605,14 @@ agen(Node *n, Node *res) ...@@ -605,6 +605,14 @@ agen(Node *n, Node *res)
n4.op = OADDR; n4.op = OADDR;
n4.left = &n2; n4.left = &n2;
cgen(&n4, &n3); 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 { } else {
regalloc(&n4, t, N); regalloc(&n4, t, N);
nodconst(&n1, t, w); nodconst(&n1, t, w);
......
...@@ -1709,10 +1709,19 @@ oindex: ...@@ -1709,10 +1709,19 @@ oindex:
gmove(&n2, reg); 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); naddr(reg1, a);
a->offset = 0;
a->type = D_OREG; a->type = D_OREG;
a->reg = reg->val.u.reg; a->reg = reg->val.u.reg;
a->offset = 0;
goto yes; goto yes;
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
args.go args.go
assign.go assign.go
bigalg.go bigalg.go
blank.go
blank1.go blank1.go
bugs/bug136.go bugs/bug136.go
bugs/bug162.go bugs/bug162.go
...@@ -242,6 +243,8 @@ interface/recursive.go ...@@ -242,6 +243,8 @@ interface/recursive.go
interface/returntype.go interface/returntype.go
interface/struct.go interface/struct.go
iota.go iota.go
ken/array.go
ken/complit.go
ken/divmod.go ken/divmod.go
ken/embed.go ken/embed.go
ken/for.go ken/for.go
...@@ -251,6 +254,7 @@ ken/intervar.go ...@@ -251,6 +254,7 @@ ken/intervar.go
ken/label.go ken/label.go
ken/mfunc.go ken/mfunc.go
ken/ptrvar.go ken/ptrvar.go
ken/range.go
ken/rob1.go ken/rob1.go
ken/rob2.go ken/rob2.go
ken/robfor.go ken/robfor.go
...@@ -262,6 +266,8 @@ ken/simpfun.go ...@@ -262,6 +266,8 @@ ken/simpfun.go
ken/simpprint.go ken/simpprint.go
ken/simpswitch.go ken/simpswitch.go
ken/simpvar.go ken/simpvar.go
ken/slicearray.go
ken/sliceslice.go
ken/string.go ken/string.go
ken/strvar.go ken/strvar.go
method.go method.go
...@@ -279,8 +285,10 @@ sieve.go ...@@ -279,8 +285,10 @@ sieve.go
sigchld.go sigchld.go
simassign.go simassign.go
string_lit.go string_lit.go
stringrange.go
switch.go switch.go
switch1.go switch1.go
test0.go test0.go
typeswitch.go typeswitch.go
utf.go
varinit.go varinit.go
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment