]> Cypherpunks repositories - gostls13.git/commitdiff
6l, 8l: fix -K implementation
authorRuss Cox <rsc@golang.org>
Wed, 29 Sep 2010 19:10:14 +0000 (15:10 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 29 Sep 2010 19:10:14 +0000 (15:10 -0400)
R=ken2
CC=golang-dev
https://golang.org/cl/2313041

src/cmd/6l/pass.c
src/cmd/8l/pass.c

index d207e748320cffc59a83ecb8b0aa8190361c23b2..115aee6946fbd2947d864b592719ab3435e6b03a 100644 (file)
@@ -716,6 +716,11 @@ dostkoff(void)
                                        p->as = AINT;
                                        p->from.type = D_CONST;
                                        p->from.offset = 3;
+
+                                       p = appendp(p);
+                                       p->as = ANOP;
+                                       q1->pcond = p;
+                                       q1 = P;
                                }
 
                                if(autoffset < StackBig) {  // do we need to call morestack?
@@ -725,10 +730,6 @@ dostkoff(void)
                                                p->as = ACMPQ;
                                                p->from.type = D_SP;
                                                p->to.type = D_INDIR+D_CX;
-                                               if(q1) {
-                                                       q1->pcond = p;
-                                                       q1 = P;
-                                               }
                                        } else {
                                                // large stack
                                                p = appendp(p);
@@ -736,10 +737,6 @@ dostkoff(void)
                                                p->from.type = D_INDIR+D_SP;
                                                p->from.offset = -(autoffset-StackSmall);
                                                p->to.type = D_AX;
-                                               if(q1) {
-                                                       q1->pcond = p;
-                                                       q1 = P;
-                                               }
 
                                                p = appendp(p);
                                                p->as = ACMPQ;
@@ -769,20 +766,12 @@ dostkoff(void)
                                        p->to.type = D_BRANCH;
                                        p->pcond = pmorestack[0];
                                        p->to.sym = symmorestack[0];
-                                       if(q1) {
-                                               q1->pcond = p;
-                                               q1 = P;
-                                       }
                                } else
                                if(moreconst1 != 0 && moreconst2 == 0) {
                                        p->as = AMOVL;
                                        p->from.type = D_CONST;
                                        p->from.offset = moreconst1;
                                        p->to.type = D_AX;
-                                       if(q1) {
-                                               q1->pcond = p;
-                                               q1 = P;
-                                       }
 
                                        p = appendp(p);
                                        p->as = ACALL;
@@ -796,20 +785,12 @@ dostkoff(void)
                                        p->to.type = D_BRANCH;
                                        p->pcond = pmorestack[i];
                                        p->to.sym = symmorestack[i];
-                                       if(q1) {
-                                               q1->pcond = p;
-                                               q1 = P;
-                                       }
                                } else
                                if(moreconst1 == 0 && moreconst2 != 0) {
                                        p->as = AMOVL;
                                        p->from.type = D_CONST;
                                        p->from.offset = moreconst2;
                                        p->to.type = D_AX;
-                                       if(q1) {
-                                               q1->pcond = p;
-                                               q1 = P;
-                                       }
 
                                        p = appendp(p);
                                        p->as = ACALL;
@@ -822,10 +803,6 @@ dostkoff(void)
                                        p->from.offset = (uint64)moreconst2 << 32;
                                        p->from.offset |= moreconst1;
                                        p->to.type = D_AX;
-                                       if(q1) {
-                                               q1->pcond = p;
-                                               q1 = P;
-                                       }
 
                                        p = appendp(p);
                                        p->as = ACALL;
index f59ccdb61e5bd3199dbe416dfdc970edd745df93..f55e9a02d819021202478b64233db8c973655b5d 100644 (file)
@@ -701,6 +701,10 @@ dostkoff(void)
                                        p->as = AINT;
                                        p->from.type = D_CONST;
                                        p->from.offset = 3;
+                                       
+                                       p = appendp(p);
+                                       p->as = ANOP;
+                                       q1->pcond = p;
                                }
 
                                if(autoffset < StackBig) {  // do we need to call morestack
@@ -710,10 +714,6 @@ dostkoff(void)
                                                p->as = ACMPL;
                                                p->from.type = D_SP;
                                                p->to.type = D_INDIR+D_CX;
-                                               if(q1) {
-                                                       q1->pcond = p;
-                                                       q1 = P;
-                                               }
                                        } else {
                                                // large stack
                                                p = appendp(p);
@@ -721,10 +721,6 @@ dostkoff(void)
                                                p->from.type = D_INDIR+D_SP;
                                                p->from.offset = -(autoffset-StackSmall);
                                                p->to.type = D_AX;
-                                               if(q1) {
-                                                       q1->pcond = p;
-                                                       q1 = P;
-                                               }
 
                                                p = appendp(p);
                                                p->as = ACMPL;