diff options
-rw-r--r-- | sys/src/cmd/5c/cgen.c | 15 | ||||
-rw-r--r-- | sys/src/cmd/6c/cgen.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/7c/cgen.c | 15 | ||||
-rw-r--r-- | sys/src/cmd/8c/cgen.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/kc/cgen.c | 12 | ||||
-rw-r--r-- | sys/src/cmd/qc/cgen.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/vc/cgen.c | 12 |
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); |