reverting 7c change, breaks some 64-bit shifts...
This commit is contained in:
parent
cbe45e78f9
commit
d42f9b5110
1 changed files with 14 additions and 11 deletions
|
@ -287,25 +287,28 @@ cgenrel(Node *n, Node *nn, int inrel)
|
||||||
reglcgen(&nod2, l, Z);
|
reglcgen(&nod2, l, Z);
|
||||||
else
|
else
|
||||||
nod2 = *l;
|
nod2 = *l;
|
||||||
regalloc(&nod1, r, Z);
|
regalloc(&nod, n, nn);
|
||||||
cgen(r, &nod1);
|
cgen(r, &nod);
|
||||||
} else {
|
} else {
|
||||||
regalloc(&nod1, r, Z);
|
regalloc(&nod, n, nn);
|
||||||
cgen(r, &nod1);
|
cgen(r, &nod);
|
||||||
if(l->addable < INDEXED)
|
if(l->addable < INDEXED)
|
||||||
reglcgen(&nod2, l, Z);
|
reglcgen(&nod2, l, Z);
|
||||||
else
|
else
|
||||||
nod2 = *l;
|
nod2 = *l;
|
||||||
}
|
}
|
||||||
if(nod1.type == nod2.type || !typefd[nod1.type->etype])
|
regalloc(&nod1, n, Z);
|
||||||
regalloc(&nod, &nod2, nn);
|
gopcode(OAS, &nod2, Z, &nod1);
|
||||||
else
|
if(nod1.type->etype != nod.type->etype){
|
||||||
regalloc(&nod, &nod1, Z);
|
regalloc(&nod3, &nod, Z);
|
||||||
gmove(&nod2, &nod);
|
gmove(&nod1, &nod3);
|
||||||
gopcode(o, &nod1, &nod, &nod);
|
regfree(&nod1);
|
||||||
|
nod1 = nod3;
|
||||||
|
}
|
||||||
|
gopcode(o, &nod, &nod1, &nod);
|
||||||
gmove(&nod, &nod2);
|
gmove(&nod, &nod2);
|
||||||
if(nn != Z)
|
if(nn != Z)
|
||||||
gmove(&nod2, nn);
|
gmove(&nod, nn);
|
||||||
regfree(&nod);
|
regfree(&nod);
|
||||||
regfree(&nod1);
|
regfree(&nod1);
|
||||||
if(l->addable < INDEXED)
|
if(l->addable < INDEXED)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue