]> Cypherpunks repositories - gostls13.git/commitdiff
replace original float instruction with jump to make branches
authorKai Backman <kaib@golang.org>
Tue, 6 Apr 2010 19:17:24 +0000 (22:17 +0300)
committerKai Backman <kaib@golang.org>
Tue, 6 Apr 2010 19:17:24 +0000 (22:17 +0300)
to float instructions work correctly.

R=rsc
CC=golang-dev
https://golang.org/cl/870044

src/cmd/5l/softfloat.c

index f5a146feb0f67d30cde72f76de675e79e3cb281a..82874ee1cf5a992e883f76cca5a9a3d5c90f94f6 100644 (file)
@@ -8,7 +8,7 @@
 void
 softfloat()
 {
-       Prog *p, *prev, *psfloat;
+       Prog *p, *next, *psfloat;
        Sym *symsfloat;
        int wasfloat;
        
@@ -26,7 +26,6 @@ softfloat()
 
        wasfloat = 0;
        p = firstp;
-       prev = P;
        for(p = firstp; p != P; p = p->link) {
                switch(p->as) {
                case AMOVWD:
@@ -50,21 +49,23 @@ softfloat()
                        if (psfloat == P)
                                diag("floats used with _sfloat not defined");
                        if (!wasfloat) {
-                               if (prev == P)
-                                       diag("float instruction without predecessor TEXT");
+                               next = prg();
+                               *next = *p;
+
                                // BL           _sfloat(SB)
-                               prev = appendp(prev);
-                               prev->as = ABL;
-                               prev->to.type = D_BRANCH;
-                               prev->to.sym = symsfloat;
-                               prev->cond = psfloat;
-                               
+                               *p = zprg;
+                               p->link = next;
+                               p->as = ABL;
+                               p->to.type = D_BRANCH;
+                               p->to.sym = symsfloat;
+                               p->cond = psfloat;
+
+                               p = next;
                                wasfloat = 1;
                        }
                        break;
                default:
                        wasfloat = 0;
                }
-               prev = p;
        }
 }