diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-08-03 23:16:41 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-08-03 23:16:41 +0200 |
commit | d42f9b511025014fb2e561813a535f9296886017 (patch) | |
tree | 261ed2a21a33517270be9b994e661ee4f3297bc2 /sys/src/cmd/7c | |
parent | cbe45e78f988184938ab63f8bac28632058e5810 (diff) |
reverting 7c change, breaks some 64-bit shifts...
Diffstat (limited to 'sys/src/cmd/7c')
-rw-r--r-- | sys/src/cmd/7c/cgen.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/sys/src/cmd/7c/cgen.c b/sys/src/cmd/7c/cgen.c index d7536aad0..2e6010b81 100644 --- a/sys/src/cmd/7c/cgen.c +++ b/sys/src/cmd/7c/cgen.c @@ -287,25 +287,28 @@ cgenrel(Node *n, Node *nn, int inrel) reglcgen(&nod2, l, Z); else nod2 = *l; - regalloc(&nod1, r, Z); - cgen(r, &nod1); + regalloc(&nod, n, nn); + cgen(r, &nod); } else { - regalloc(&nod1, r, Z); - cgen(r, &nod1); + regalloc(&nod, n, nn); + cgen(r, &nod); if(l->addable < INDEXED) reglcgen(&nod2, l, Z); else nod2 = *l; } - if(nod1.type == nod2.type || !typefd[nod1.type->etype]) - regalloc(&nod, &nod2, nn); - else - regalloc(&nod, &nod1, Z); - gmove(&nod2, &nod); - gopcode(o, &nod1, &nod, &nod); + regalloc(&nod1, n, Z); + gopcode(OAS, &nod2, Z, &nod1); + if(nod1.type->etype != nod.type->etype){ + regalloc(&nod3, &nod, Z); + gmove(&nod1, &nod3); + regfree(&nod1); + nod1 = nod3; + } + gopcode(o, &nod, &nod1, &nod); gmove(&nod, &nod2); if(nn != Z) - gmove(&nod2, nn); + gmove(&nod, nn); regfree(&nod); regfree(&nod1); if(l->addable < INDEXED) |