diff options
| author | Kai Backman <kaib@golang.org> | 2009-10-15 22:16:31 -0700 |
|---|---|---|
| committer | Kai Backman <kaib@golang.org> | 2009-10-15 22:16:31 -0700 |
| commit | 9f13d7321e53adcee417b4195f4dd38baa796386 (patch) | |
| tree | 3c84d768f458399cd9421ee5f842253a58a9a9f1 /src | |
| parent | 4db26b6bfd1005b0254cf13fd85e881dcbb3223a (diff) | |
| download | golang-9f13d7321e53adcee417b4195f4dd38baa796386.tar.gz | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/5g/cgen.c | 8 | ||||
| -rw-r--r-- | src/cmd/5g/gsubr.c | 11 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/cmd/5g/cgen.c b/src/cmd/5g/cgen.c index b8556e561..a05dcf621 100644 --- a/src/cmd/5g/cgen.c +++ b/src/cmd/5g/cgen.c @@ -605,6 +605,14 @@ agen(Node *n, Node *res) 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); diff --git a/src/cmd/5g/gsubr.c b/src/cmd/5g/gsubr.c index d22d4b468..3f8fd3f68 100644 --- a/src/cmd/5g/gsubr.c +++ b/src/cmd/5g/gsubr.c @@ -1709,10 +1709,19 @@ oindex: 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; |
