]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: remove cgen_asop, no longer used
authorRuss Cox <rsc@golang.org>
Tue, 3 Feb 2015 20:27:54 +0000 (15:27 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 11 Feb 2015 20:36:37 +0000 (20:36 +0000)
gc/order.c rewrites OASOP nodes into ordinary assignments.
The back ends never see them anymore.

Change-Id: I268ac8bdc92dccd7123110a21f99ada3ceeb2baa
Reviewed-on: https://go-review.googlesource.com/3882
Reviewed-by: Austin Clements <austin@google.com>
14 files changed:
src/cmd/5g/galign.c
src/cmd/5g/gg.h
src/cmd/5g/ggen.c
src/cmd/6g/galign.c
src/cmd/6g/gg.h
src/cmd/6g/ggen.c
src/cmd/8g/galign.c
src/cmd/8g/gg.h
src/cmd/8g/ggen.c
src/cmd/9g/galign.c
src/cmd/9g/gg.h
src/cmd/9g/ggen.c
src/cmd/gc/gen.c
src/cmd/gc/go.h

index 1af6df06a8f93b759315ac72968d5bb6b1a15f9f..c136406a79a5b8d088c04587bad02fdc763b7fe0 100644 (file)
@@ -53,7 +53,6 @@ main(int argc, char **argv)
        arch.betypeinit = betypeinit;
        arch.bgen = bgen;
        arch.cgen = cgen;
-       arch.cgen_asop = cgen_asop;
        arch.cgen_call = cgen_call;
        arch.cgen_callinter = cgen_callinter;
        arch.cgen_ret = cgen_ret;
index 912c224b317b896359ae38db469409cd348ac95e..210c9c2cc74e952793ae29d11091a844b9db3033 100644 (file)
@@ -115,7 +115,6 @@ int anyregalloc(void);
 void betypeinit(void);
 void bgen(Node*, int, int, Prog*);
 void cgen(Node*, Node*);
-void cgen_asop(Node*);
 void cgen_call(Node*, int);
 void cgen_callinter(Node*, Node*, int);
 void cgen_ret(Node*);
index e65523730b3edb3385e22c126a904ff71dfddbaf..f91cd7151818daa0daf86aff322c2f70ed0613ac 100644 (file)
@@ -437,135 +437,6 @@ cgen_ret(Node *n)
        }
 }
 
-/*
- * generate += *= etc.
- */
-void
-cgen_asop(Node *n)
-{
-       Node n1, n2, n3, n4;
-       Node *nl, *nr;
-       Prog *p1;
-       Addr addr;
-       int a, w;
-
-       nl = n->left;
-       nr = n->right;
-
-       if(nr->ullman >= UINF && nl->ullman >= UINF) {
-               tempname(&n1, nr->type);
-               cgen(nr, &n1);
-               n2 = *n;
-               n2.right = &n1;
-               cgen_asop(&n2);
-               goto ret;
-       }
-
-       if(!isint[nl->type->etype])
-               goto hard;
-       if(!isint[nr->type->etype])
-               goto hard;
-       if(is64(nl->type) || is64(nr->type))
-               goto hard64;
-
-       switch(n->etype) {
-       case OADD:
-       case OSUB:
-       case OXOR:
-       case OAND:
-       case OOR:
-               a = optoas(n->etype, nl->type);
-               if(nl->addable) {
-                       if(smallintconst(nr))
-                               n3 = *nr;
-                       else {
-                               regalloc(&n3, nr->type, N);
-                               cgen(nr, &n3);
-                       }
-                       regalloc(&n2, nl->type, N);
-                       cgen(nl, &n2);
-                       gins(a, &n3, &n2);
-                       cgen(&n2, nl);
-                       regfree(&n2);
-                       if(n3.op != OLITERAL)
-                               regfree(&n3);
-                       goto ret;
-               }
-               if(nr->ullman < UINF)
-               if(sudoaddable(a, nl, &addr, &w)) {
-                       w = optoas(OAS, nl->type);
-                       regalloc(&n2, nl->type, N);
-                       p1 = gins(w, N, &n2);
-                       p1->from = addr;
-                       regalloc(&n3, nr->type, N);
-                       cgen(nr, &n3);
-                       gins(a, &n3, &n2);
-                       p1 = gins(w, &n2, N);
-                       p1->to = addr;
-                       regfree(&n2);
-                       regfree(&n3);
-                       sudoclean();
-                       goto ret;
-               }
-       }
-
-hard:
-       n2.op = 0;
-       n1.op = 0;
-       if(nr->op == OLITERAL) {
-               // don't allocate a register for literals.
-       } else if(nr->ullman >= nl->ullman || nl->addable) {
-               regalloc(&n2, nr->type, N);
-               cgen(nr, &n2);
-               nr = &n2;
-       } else {
-               tempname(&n2, nr->type);
-               cgen(nr, &n2);
-               nr = &n2;
-       }
-       if(!nl->addable) {
-               igen(nl, &n1, N);
-               nl = &n1;
-       }
-
-       n3 = *n;
-       n3.left = nl;
-       n3.right = nr;
-       n3.op = n->etype;
-
-       regalloc(&n4, nl->type, N);
-       cgen(&n3, &n4);
-       gmove(&n4, nl);
-
-       if(n1.op)
-               regfree(&n1);
-       if(n2.op == OREGISTER)
-               regfree(&n2);
-       regfree(&n4);
-       goto ret;
-
-hard64:
-       if(nr->ullman > nl->ullman) {
-               tempname(&n2, nr->type);
-               cgen(nr, &n2);
-               igen(nl, &n1, N);
-       } else {
-               igen(nl, &n1, N);
-               tempname(&n2, nr->type);
-               cgen(nr, &n2);
-       }
-
-       n3 = *n;
-       n3.left = &n1;
-       n3.right = &n2;
-       n3.op = n->etype;
-
-       cgen(&n3, &n1);
-
-ret:
-       ;
-}
-
 /*
  * generate high multiply
  *  res = (nl * nr) >> wordsize
index 58de9ae7bc9748316af3fedd469327f062e5e559..71ad402cd5b446e7732d25680c9d7d79d45a7d5e 100644 (file)
@@ -76,7 +76,6 @@ main(int argc, char **argv)
        arch.betypeinit = betypeinit;
        arch.bgen = bgen;
        arch.cgen = cgen;
-       arch.cgen_asop = cgen_asop;
        arch.cgen_call = cgen_call;
        arch.cgen_callinter = cgen_callinter;
        arch.cgen_ret = cgen_ret;
index 0167a3fa0f9c5b4a94e780c9064c813584c06e1c..789a9870eaf5f706d58a1febea631ac43c979522 100644 (file)
@@ -114,7 +114,6 @@ int anyregalloc(void);
 void betypeinit(void);
 void bgen(Node*, int, int, Prog*);
 void cgen(Node*, Node*);
-void cgen_asop(Node*);
 void cgen_call(Node*, int);
 void cgen_callinter(Node*, Node*, int);
 void cgen_ret(Node*);
index f1d5cf2c1d3fa712e7ab6f7823d9bddd69c2c9e2..dd61812bcdeb5dffbfa9cfb2479bd0db01194265 100644 (file)
@@ -431,145 +431,6 @@ cgen_ret(Node *n)
        }
 }
 
-/*
- * generate += *= etc.
- */
-void
-cgen_asop(Node *n)
-{
-       Node n1, n2, n3, n4;
-       Node *nl, *nr;
-       Prog *p1;
-       Addr addr;
-       int a;
-
-       nl = n->left;
-       nr = n->right;
-
-       if(nr->ullman >= UINF && nl->ullman >= UINF) {
-               tempname(&n1, nr->type);
-               cgen(nr, &n1);
-               n2 = *n;
-               n2.right = &n1;
-               cgen_asop(&n2);
-               goto ret;
-       }
-
-       if(!isint[nl->type->etype])
-               goto hard;
-       if(!isint[nr->type->etype])
-               goto hard;
-
-       switch(n->etype) {
-       case OADD:
-               if(smallintconst(nr))
-               if(mpgetfix(nr->val.u.xval) == 1) {
-                       a = optoas(OINC, nl->type);
-                       if(nl->addable) {
-                               gins(a, N, nl);
-                               goto ret;
-                       }
-                       if(sudoaddable(a, nl, &addr)) {
-                               p1 = gins(a, N, N);
-                               p1->to = addr;
-                               sudoclean();
-                               goto ret;
-                       }
-               }
-               break;
-
-       case OSUB:
-               if(smallintconst(nr))
-               if(mpgetfix(nr->val.u.xval) == 1) {
-                       a = optoas(ODEC, nl->type);
-                       if(nl->addable) {
-                               gins(a, N, nl);
-                               goto ret;
-                       }
-                       if(sudoaddable(a, nl, &addr)) {
-                               p1 = gins(a, N, N);
-                               p1->to = addr;
-                               sudoclean();
-                               goto ret;
-                       }
-               }
-               break;
-       }
-
-       switch(n->etype) {
-       case OADD:
-       case OSUB:
-       case OXOR:
-       case OAND:
-       case OOR:
-               a = optoas(n->etype, nl->type);
-               if(nl->addable) {
-                       if(smallintconst(nr)) {
-                               gins(a, nr, nl);
-                               goto ret;
-                       }
-                       regalloc(&n2, nr->type, N);
-                       cgen(nr, &n2);
-                       gins(a, &n2, nl);
-                       regfree(&n2);
-                       goto ret;
-               }
-               if(nr->ullman < UINF)
-               if(sudoaddable(a, nl, &addr)) {
-                       if(smallintconst(nr)) {
-                               p1 = gins(a, nr, N);
-                               p1->to = addr;
-                               sudoclean();
-                               goto ret;
-                       }
-                       regalloc(&n2, nr->type, N);
-                       cgen(nr, &n2);
-                       p1 = gins(a, &n2, N);
-                       p1->to = addr;
-                       regfree(&n2);
-                       sudoclean();
-                       goto ret;
-               }
-       }
-
-hard:
-       n2.op = 0;
-       n1.op = 0;
-       if(nr->op == OLITERAL) {
-               // don't allocate a register for literals.
-       } else if(nr->ullman >= nl->ullman || nl->addable) {
-               regalloc(&n2, nr->type, N);
-               cgen(nr, &n2);
-               nr = &n2;
-       } else {
-               tempname(&n2, nr->type);
-               cgen(nr, &n2);
-               nr = &n2;
-       }
-       if(!nl->addable) {
-               igen(nl, &n1, N);
-               nl = &n1;
-       }
-
-       n3 = *n;
-       n3.left = nl;
-       n3.right = nr;
-       n3.op = n->etype;
-
-       regalloc(&n4, nl->type, N);
-       cgen(&n3, &n4);
-       gmove(&n4, nl);
-
-       if(n1.op)
-               regfree(&n1);
-       if(n2.op == OREGISTER)
-               regfree(&n2);
-       regfree(&n4);
-
-ret:
-       ;
-}
-
 /*
  * generate division.
  * generates one of:
index c06552c02d172faeb2fd71009551260c54ed8765..3fb48ad5e4cd1c27ed6057b648ac64281d473892 100644 (file)
@@ -53,7 +53,6 @@ main(int argc, char **argv)
        arch.betypeinit = betypeinit;
        arch.bgen = bgen;
        arch.cgen = cgen;
-       arch.cgen_asop = cgen_asop;
        arch.cgen_call = cgen_call;
        arch.cgen_callinter = cgen_callinter;
        arch.cgen_ret = cgen_ret;
index 5217cdc2306144de7233010fe3ffeb39b5b36cb4..46a61b4d1cef2b576b6e2c247f9e31a58b339dbf 100644 (file)
@@ -127,7 +127,6 @@ int anyregalloc(void);
 void betypeinit(void);
 void bgen(Node*, int, int, Prog*);
 void cgen(Node*, Node*);
-void cgen_asop(Node*);
 void cgen_call(Node*, int);
 void cgen_callinter(Node*, Node*, int);
 void cgen_ret(Node*);
index 475a5fd0e4c0859a5ae2b485d101fd47fd2bca9d..4cd159edcd6c1dc41737f95ff771e6817eb481a6 100644 (file)
@@ -478,142 +478,6 @@ cgen_ret(Node *n)
        }
 }
 
-/*
- * generate += *= etc.
- */
-void
-cgen_asop(Node *n)
-{
-       Node n1, n2, n3, n4;
-       Node *nl, *nr;
-       Prog *p1;
-       Addr addr;
-       int a;
-
-       nl = n->left;
-       nr = n->right;
-
-       if(nr->ullman >= UINF && nl->ullman >= UINF) {
-               tempname(&n1, nr->type);
-               cgen(nr, &n1);
-               n2 = *n;
-               n2.right = &n1;
-               cgen_asop(&n2);
-               goto ret;
-       }
-
-       if(!isint[nl->type->etype])
-               goto hard;
-       if(!isint[nr->type->etype])
-               goto hard;
-       if(is64(nl->type) || is64(nr->type))
-               goto hard;
-
-       switch(n->etype) {
-       case OADD:
-               if(smallintconst(nr))
-               if(mpgetfix(nr->val.u.xval) == 1) {
-                       a = optoas(OINC, nl->type);
-                       if(nl->addable) {
-                               gins(a, N, nl);
-                               goto ret;
-                       }
-                       if(sudoaddable(a, nl, &addr)) {
-                               p1 = gins(a, N, N);
-                               p1->to = addr;
-                               sudoclean();
-                               goto ret;
-                       }
-               }
-               break;
-
-       case OSUB:
-               if(smallintconst(nr))
-               if(mpgetfix(nr->val.u.xval) == 1) {
-                       a = optoas(ODEC, nl->type);
-                       if(nl->addable) {
-                               gins(a, N, nl);
-                               goto ret;
-                       }
-                       if(sudoaddable(a, nl, &addr)) {
-                               p1 = gins(a, N, N);
-                               p1->to = addr;
-                               sudoclean();
-                               goto ret;
-                       }
-               }
-               break;
-       }
-
-       switch(n->etype) {
-       case OADD:
-       case OSUB:
-       case OXOR:
-       case OAND:
-       case OOR:
-               a = optoas(n->etype, nl->type);
-               if(nl->addable) {
-                       if(smallintconst(nr)) {
-                               gins(a, nr, nl);
-                               goto ret;
-                       }
-                       regalloc(&n2, nr->type, N);
-                       cgen(nr, &n2);
-                       gins(a, &n2, nl);
-                       regfree(&n2);
-                       goto ret;
-               }
-               if(nr->ullman < UINF)
-               if(sudoaddable(a, nl, &addr)) {
-                       if(smallintconst(nr)) {
-                               p1 = gins(a, nr, N);
-                               p1->to = addr;
-                               sudoclean();
-                               goto ret;
-                       }
-                       regalloc(&n2, nr->type, N);
-                       cgen(nr, &n2);
-                       p1 = gins(a, &n2, N);
-                       p1->to = addr;
-                       regfree(&n2);
-                       sudoclean();
-                       goto ret;
-               }
-       }
-
-hard:
-       n2.op = 0;
-       n1.op = 0;
-       if(nr->ullman >= nl->ullman || nl->addable) {
-               mgen(nr, &n2, N);
-               nr = &n2;
-       } else {
-               tempname(&n2, nr->type);
-               cgen(nr, &n2);
-               nr = &n2;
-       }
-       if(!nl->addable) {
-               igen(nl, &n1, N);
-               nl = &n1;
-       }
-
-       n3 = *n;
-       n3.left = nl;
-       n3.right = nr;
-       n3.op = n->etype;
-
-       mgen(&n3, &n4, N);
-       gmove(&n4, nl);
-
-       if(n1.op)
-               regfree(&n1);
-       mfree(&n2);
-       mfree(&n4);
-
-ret:
-       ;
-}
-
 /*
  * generate division.
  * caller must set:
index 71c869fe4e3bed5e5b4b0b98e5be9643d18f6fc2..39db87d48aa1f5af9aa8e111a402f7b3dfddc9b6 100644 (file)
@@ -60,7 +60,6 @@ main(int argc, char **argv)
        arch.betypeinit = betypeinit;
        arch.bgen = bgen;
        arch.cgen = cgen;
-       arch.cgen_asop = cgen_asop;
        arch.cgen_call = cgen_call;
        arch.cgen_callinter = cgen_callinter;
        arch.cgen_ret = cgen_ret;
index bf5d00299eeb703aed3d7f3706c11c4fe4cdefb2..235b8b9731fa32cdbd55cebad7012061c502c569 100644 (file)
@@ -109,7 +109,6 @@ int anyregalloc(void);
 void betypeinit(void);
 void bgen(Node*, int, int, Prog*);
 void cgen(Node*, Node*);
-void cgen_asop(Node*);
 void cgen_call(Node*, int);
 void cgen_callinter(Node*, Node*, int);
 void cgen_ret(Node*);
index 0340e1d7c2d4a065f42df6b9923228e69acec1af..7e8efb504810e288760e6ea503743893512a6812 100644 (file)
@@ -442,13 +442,6 @@ cgen_ret(Node *n)
        }
 }
 
-void
-cgen_asop(Node *n)
-{
-       USED(n);
-       fatal("cgen_asop"); // no longer used
-}
-
 /*
  * generate division.
  * generates one of:
index f1a020152b318c0415d1507a4474a47f65546905..e600c1e5ea9e895f26979b6db9a203b8a190cbce 100644 (file)
@@ -453,10 +453,6 @@ gen(Node *n)
                        lab->breakpc = P;
                break;
 
-       case OASOP:
-               arch.cgen_asop(n);
-               break;
-
        case ODCL:
                cgen_dcl(n->left);
                break;
index a89055170e43262548e96a0a473cbefbf4e78155..0674b2ce6be7ddf6d36728b55ea3f5200368653d 100644 (file)
@@ -1666,7 +1666,6 @@ struct Arch
        void (*betypeinit)(void);
        void (*bgen)(Node*, int, int, Prog*);
        void (*cgen)(Node*, Node*);
-       void (*cgen_asop)(Node*);
        void (*cgen_call)(Node*, int);
        void (*cgen_callinter)(Node*, Node*, int);
        void (*cgen_ret)(Node*);