summaryrefslogtreecommitdiff
path: root/sys/src/cmd/7c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-08-03 23:17:32 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2020-08-03 23:17:32 +0200
commit1d07c2a1614a3121a5b9d86f95394caccd61ee56 (patch)
tree736812cd20eaeb4ccd258adea5f31bad54510c4b /sys/src/cmd/7c
parentc4cf92b99efdf292e0563fedda68f650cb9970d6 (diff)
parentd42f9b511025014fb2e561813a535f9296886017 (diff)
merge
Diffstat (limited to 'sys/src/cmd/7c')
-rw-r--r--sys/src/cmd/7c/cgen.c25
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)