summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/5c/cgen.c15
-rw-r--r--sys/src/cmd/6c/cgen.c4
-rw-r--r--sys/src/cmd/7c/cgen.c15
-rw-r--r--sys/src/cmd/8c/cgen.c4
-rw-r--r--sys/src/cmd/kc/cgen.c12
-rw-r--r--sys/src/cmd/qc/cgen.c4
-rw-r--r--sys/src/cmd/vc/cgen.c12
7 files changed, 52 insertions, 14 deletions
diff --git a/sys/src/cmd/5c/cgen.c b/sys/src/cmd/5c/cgen.c
index dae6e1872..fdddfa8e9 100644
--- a/sys/src/cmd/5c/cgen.c
+++ b/sys/src/cmd/5c/cgen.c
@@ -113,6 +113,8 @@ cgenrel(Node *n, Node *nn, int inrel)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
@@ -251,7 +253,8 @@ cgenrel(Node *n, Node *nn, int inrel)
gopcode(OAS, &nod2, Z, &nod);
gopcode(o, r, Z, &nod);
gopcode(OAS, &nod, Z, &nod2);
-
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
if(l->addable < INDEXED)
regfree(&nod2);
@@ -472,6 +475,8 @@ cgenrel(Node *n, Node *nn, int inrel)
regalloc(&nod, l, nn);
gopcode(OAS, &nod2, Z, &nod);
+ if(nn != Z)
+ gmove(&nod, nn);
regalloc(&nod1, l, Z);
if(typefd[l->type->etype]) {
regalloc(&nod3, l, Z);
@@ -524,9 +529,11 @@ cgenrel(Node *n, Node *nn, int inrel)
} else
gopcode(OADD, nodconst(v), Z, &nod);
gopcode(OAS, &nod, Z, &nod2);
- if(nn && l->op == ONAME) /* in x=++i, emit USED(i) */
- gins(ANOP, l, Z);
-
+ if(nn != Z){
+ gmove(&nod, nn);
+ if(l->op == ONAME) /* in x=++i, emit USED(i) */
+ gins(ANOP, l, Z);
+ }
regfree(&nod);
if(l->addable < INDEXED)
regfree(&nod2);
diff --git a/sys/src/cmd/6c/cgen.c b/sys/src/cmd/6c/cgen.c
index d86eed225..05b285946 100644
--- a/sys/src/cmd/6c/cgen.c
+++ b/sys/src/cmd/6c/cgen.c
@@ -112,6 +112,8 @@ cgen(Node *n, Node *nn)
if(l->complex >= r->complex) {
if(l->op == OINDEX && immconst(r)) {
gmove(r, l);
+ if(nn != Z)
+ gmove(r, nn);
break;
}
reglcgen(&nod1, l, Z);
@@ -130,6 +132,8 @@ cgen(Node *n, Node *nn)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
diff --git a/sys/src/cmd/7c/cgen.c b/sys/src/cmd/7c/cgen.c
index bed0087f9..3cb84a65c 100644
--- a/sys/src/cmd/7c/cgen.c
+++ b/sys/src/cmd/7c/cgen.c
@@ -128,6 +128,8 @@ cgenrel(Node *n, Node *nn, int inrel)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
@@ -267,7 +269,8 @@ cgenrel(Node *n, Node *nn, int inrel)
gopcode(OAS, &nod2, Z, &nod);
gopcode(o, r, Z, &nod);
gopcode(OAS, &nod, Z, &nod2);
-
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
if(l->addable < INDEXED)
regfree(&nod2);
@@ -528,6 +531,8 @@ cgenrel(Node *n, Node *nn, int inrel)
regalloc(&nod, l, nn);
gopcode(OAS, &nod2, Z, &nod);
+ if(nn != Z)
+ gmove(&nod, nn);
regalloc(&nod1, l, Z);
if(typefd[l->type->etype]) {
regalloc(&nod3, l, Z);
@@ -580,9 +585,11 @@ cgenrel(Node *n, Node *nn, int inrel)
} else
gopcode(OADD, nodconst(v), Z, &nod);
gopcode(OAS, &nod, Z, &nod2);
- if(nn && l->op == ONAME) /* in x=++i, emit USED(i) */
- gins(ANOP, l, Z);
-
+ if(nn != Z){
+ gmove(&nod, nn);
+ if(l->op == ONAME) /* in x=++i, emit USED(i) */
+ gins(ANOP, l, Z);
+ }
regfree(&nod);
if(l->addable < INDEXED)
regfree(&nod2);
diff --git a/sys/src/cmd/8c/cgen.c b/sys/src/cmd/8c/cgen.c
index 0c26454e8..c1ec490d5 100644
--- a/sys/src/cmd/8c/cgen.c
+++ b/sys/src/cmd/8c/cgen.c
@@ -131,6 +131,8 @@ cgen(Node *n, Node *nn)
if(l->complex >= r->complex) {
if(l->op == OINDEX && r->op == OCONST) {
gmove(r, l);
+ if(nn != Z)
+ gmove(r, nn);
break;
}
reglcgen(&nod1, l, Z);
@@ -149,6 +151,8 @@ cgen(Node *n, Node *nn)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
diff --git a/sys/src/cmd/kc/cgen.c b/sys/src/cmd/kc/cgen.c
index ad295177b..401812e60 100644
--- a/sys/src/cmd/kc/cgen.c
+++ b/sys/src/cmd/kc/cgen.c
@@ -107,6 +107,8 @@ cgen(Node *n, Node *nn)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
@@ -423,6 +425,8 @@ cgen(Node *n, Node *nn)
regalloc(&nod, l, nn);
gopcode(OAS, &nod2, Z, &nod);
+ if(nn != Z)
+ gmove(&nod, nn);
regalloc(&nod1, l, Z);
if(typefd[l->type->etype]) {
regalloc(&nod3, l, Z);
@@ -475,9 +479,11 @@ cgen(Node *n, Node *nn)
} else
gopcode(OADD, nodconst(v), Z, &nod);
gopcode(OAS, &nod, Z, &nod2);
- if(nn && l->op == ONAME) /* in x=++i, emit USED(i) */
- gins(ANOP, l, Z);
-
+ if(nn != Z){
+ gmove(&nod, nn);
+ if(l->op == ONAME) /* in x=++i, emit USED(i) */
+ gins(ANOP, l, Z);
+ }
regfree(&nod);
if(l->addable < INDEXED)
regfree(&nod2);
diff --git a/sys/src/cmd/qc/cgen.c b/sys/src/cmd/qc/cgen.c
index b2391e3f8..6f09197d6 100644
--- a/sys/src/cmd/qc/cgen.c
+++ b/sys/src/cmd/qc/cgen.c
@@ -109,6 +109,8 @@ cgen(Node *n, Node *nn)
regalloc(&nod, r, nn);
cgen(r, &nod);
gmove(&nod, l);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
} else
gmove(r, l);
@@ -131,6 +133,8 @@ cgen(Node *n, Node *nn)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
diff --git a/sys/src/cmd/vc/cgen.c b/sys/src/cmd/vc/cgen.c
index 7b9ec4808..4c0cf61c1 100644
--- a/sys/src/cmd/vc/cgen.c
+++ b/sys/src/cmd/vc/cgen.c
@@ -107,6 +107,8 @@ cgen(Node *n, Node *nn)
reglcgen(&nod1, l, Z);
}
gmove(&nod, &nod1);
+ if(nn != Z)
+ gmove(&nod, nn);
regfree(&nod);
regfree(&nod1);
break;
@@ -425,6 +427,8 @@ cgen(Node *n, Node *nn)
regalloc(&nod, l, nn);
gopcode(OAS, &nod2, Z, &nod);
+ if(nn != Z)
+ gmove(&nod, nn);
regalloc(&nod1, l, Z);
if(typefd[l->type->etype]) {
regalloc(&nod3, l, Z);
@@ -477,9 +481,11 @@ cgen(Node *n, Node *nn)
} else
gopcode(OADD, nodconst(v), Z, &nod);
gopcode(OAS, &nod, Z, &nod2);
- if(nn && l->op == ONAME) /* in x=++i, emit USED(i) */
- gins(ANOP, l, Z);
-
+ if(nn != Z) {
+ gmove(&nod, nn);
+ if(l->op == ONAME) /* in x=++i, emit USED(i) */
+ gins(ANOP, l, Z);
+ }
regfree(&nod);
if(l->addable < INDEXED)
regfree(&nod2);