summaryrefslogtreecommitdiff
path: root/src/cmd/6g/gen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6g/gen.c')
-rw-r--r--src/cmd/6g/gen.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/cmd/6g/gen.c b/src/cmd/6g/gen.c
index cdb76bc69..8f083ad29 100644
--- a/src/cmd/6g/gen.c
+++ b/src/cmd/6g/gen.c
@@ -335,6 +335,7 @@ cgen_asop(Node *n)
Node *nl, *nr;
Prog *p1;
Addr addr;
+ int a;
nl = n->left;
nr = n->right;
@@ -357,12 +358,13 @@ cgen_asop(Node *n)
case OADD:
if(smallintconst(nr))
if(mpgetfix(nr->val.u.xval) == 1) {
+ a = optoas(OINC, nl->type);
if(nl->addable) {
- gins(optoas(OINC, nl->type), N, nl);
+ gins(a, N, nl);
goto ret;
}
- if(sudoaddable(nl, &addr)) {
- p1 = gins(optoas(OINC, nl->type), N, N);
+ if(sudoaddable(a, nl, &addr)) {
+ p1 = gins(a, N, N);
p1->to = addr;
sudoclean();
goto ret;
@@ -373,12 +375,13 @@ cgen_asop(Node *n)
case OSUB:
if(smallintconst(nr))
if(mpgetfix(nr->val.u.xval) == 1) {
+ a = optoas(ODEC, nl->type);
if(nl->addable) {
- gins(optoas(ODEC, nl->type), N, nl);
+ gins(a, N, nl);
goto ret;
}
- if(sudoaddable(nl, &addr)) {
- p1 = gins(optoas(ODEC, nl->type), N, N);
+ if(sudoaddable(a, nl, &addr)) {
+ p1 = gins(a, N, N);
p1->to = addr;
sudoclean();
goto ret;
@@ -393,28 +396,29 @@ cgen_asop(Node *n)
case OXOR:
case OAND:
case OOR:
+ a = optoas(n->etype, nl->type);
if(nl->addable) {
if(smallintconst(nr)) {
- gins(optoas(n->etype, nl->type), nr, nl);
+ gins(a, nr, nl);
goto ret;
}
regalloc(&n2, nr->type, N);
cgen(nr, &n2);
- gins(optoas(n->etype, nl->type), &n2, nl);
+ gins(a, &n2, nl);
regfree(&n2);
goto ret;
}
if(nr->ullman < UINF)
- if(sudoaddable(nl, &addr)) {
+ if(sudoaddable(a, nl, &addr)) {
if(smallintconst(nr)) {
- p1 = gins(optoas(n->etype, nl->type), nr, N);
+ p1 = gins(a, nr, N);
p1->to = addr;
sudoclean();
goto ret;
}
regalloc(&n2, nr->type, N);
cgen(nr, &n2);
- p1 = gins(optoas(n->etype, nl->type), &n2, N);
+ p1 = gins(a, &n2, N);
p1->to = addr;
regfree(&n2);
sudoclean();