]> Cypherpunks repositories - gostls13.git/commitdiff
liblink: remove dead computation of p->back in span6/span8
authorRuss Cox <rsc@golang.org>
Thu, 29 Jan 2015 20:35:56 +0000 (15:35 -0500)
committerRuss Cox <rsc@golang.org>
Tue, 3 Feb 2015 18:22:35 +0000 (18:22 +0000)
Originally, when this code was part of 6l/8l, every new
Prog was constructed starting with zprg, which set back=2,
and then this code walked over the list setting back=1 for
backward branches, back=0 otherwise. The initial back=2
setting was used to identify forward branches (the branched-to
instruction had back == 2 since it hadn't yet been set to 0 or 1).

When the code was extracted into liblink and linked directly
with 6a/6g/8a/8g, those programs created the Prog struct
and did not set back=2, breaking this backward branch detection.

No one noticed, because the next loop recomputes the information.
The only requirement for the next loop is that p->back == 0 or 1 for
each of the Progs in the list.

The initialization of the zprg with back=2 would cause problems
in this second loop, for the few liblink-internally-generated instructions
that are created by copying zprg, except that the first loop was
making sure that back == 0 or 1.

The first loop's manipulation of p->back can thus be deleted,
provided we also delete the zprg.back = 2 initializations.

This is awful and my fault. I apologize.

While we're here, remove the .scale = 1 from the zprg init too.
Anything that sets up a scaled index should set the scale itself.
(And mostly those come from outside liblink anyway.)

Tested by checking that all generated code is bit-for-bit
identical to before this CL.

Change-Id: I7f6e0b33ce9ccd5b7dc25e0f00429fedd0957c8c
Reviewed-on: https://go-review.googlesource.com/3574
Reviewed-by: Austin Clements <austin@google.com>
src/liblink/asm6.c
src/liblink/asm8.c
src/liblink/obj6.c
src/liblink/obj8.c

index ee248d272a3378997b0d6eee7fd7679eecf69120..71d24821e0f4adfa89730492bb7c11a538a5a038 100644 (file)
@@ -1615,14 +1615,9 @@ span6(Link *ctxt, LSym *s)
                instinit();
        
        for(p = ctxt->cursym->text; p != nil; p = p->link) {
-               n = 0;
                if(p->to.type == TYPE_BRANCH)
                        if(p->pcond == nil)
                                p->pcond = p;
-               if((q = p->pcond) != nil)
-                       if(q->back != 2)
-                               n = 1;
-               p->back = n;
                if(p->as == AADJSP) {
                        p->to.type = TYPE_REG;
                        p->to.reg = REG_SP;
index 5d6a7f7d4f6783e7585f1736a6ef2281ebc3a3d4..e8508eb07ab5f24d06be274d4cc58bf2dd8366b4 100644 (file)
@@ -1231,14 +1231,9 @@ span8(Link *ctxt, LSym *s)
                instinit();
 
        for(p = s->text; p != nil; p = p->link) {
-               n = 0;
                if(p->to.type == TYPE_BRANCH)
                        if(p->pcond == nil)
                                p->pcond = p;
-               if((q = p->pcond) != nil)
-                       if(q->back != 2)
-                               n = 1;
-               p->back = n;
                if(p->as == AADJSP) {
                        p->to.type = TYPE_REG;
                        p->to.reg = REG_SP;
index 12e0606453080e2e77483475c5ab81b4e549d35d..15dd9e99a7cc774d583be91808d57e88db751780 100644 (file)
@@ -36,7 +36,6 @@
 #include "../runtime/stack.h"
 
 static Prog zprg = {
-       .back = 2,
        .as = AGOK,
        .from = {
                .type = TYPE_NONE,
index 16b0e07eac4eefa4b6b58da37cb2824612e01544..37ef8a490e55c12cf64e186d9b1fcdd34b763ecb 100644 (file)
 #include "../runtime/stack.h"
 
 static Prog zprg = {
-       .back = 2,
        .as = AGOK,
        .from = {
                .type = TYPE_NONE,
                .index = REG_NONE,
-               .scale = 1,
        },
        .to = {
                .type = TYPE_NONE,
                .index = REG_NONE,
-               .scale = 1,
        },
 };