]> Cypherpunks repositories - gostls13.git/commitdiff
accept CALL $(constant) to call absolute PC
authorRuss Cox <rsc@golang.org>
Mon, 21 Sep 2009 16:41:21 +0000 (09:41 -0700)
committerRuss Cox <rsc@golang.org>
Mon, 21 Sep 2009 16:41:21 +0000 (09:41 -0700)
R=ken
OCL=34845
CL=34845

src/cmd/8a/a.y
src/cmd/8l/l.h
src/cmd/8l/optab.c
src/cmd/8l/span.c

index fced3efa47bf285a36b1d5eebb38adb4a3b4ddb1..3fded981f152eeda9b71bda43691b845a3944d9e 100644 (file)
@@ -285,6 +285,7 @@ rom:
        }
 |      reg
 |      omem
+|      imm
 
 rim:
        rem
index 1b61ee14be3cee1cf4ff83b44022a7a423bc8b53..98d35de6241ab258148caf650be773f96a683bb9 100644 (file)
@@ -193,6 +193,7 @@ enum
        Z_rp,
        Zbr,
        Zcall,
+       Zcallcon,
        Zib_,
        Zib_rp,
        Zibo_m,
index df5ba629fce002950ebf4f886e4ac14f45b8fd83..14e6daa326e3be7d557d16d155a0a9d5938cf1a6 100644 (file)
@@ -260,7 +260,8 @@ uchar       yloop[] =
 uchar  ycall[] =
 {
        Ynone,  Yml,    Zo_m,   2,
-       Ynone,  Ybr,    Zcall,  1,
+       Ynone,  Ybr,    Zcall,  0,
+       Ynone,  Yi32,   Zcallcon,       1,
        0
 };
 uchar  yjmp[] =
index d056fecafb19b5284b1ed408b0f50e0b194a43c2..8253ec9b16ad3397d1b0da32b06f1582c37bc1d7 100644 (file)
@@ -105,7 +105,7 @@ start:
                textsize = c;
                n++;
        }while(again);
-       
+
        if(INITRND) {
                INITDAT = rnd(c, INITRND);
                if(INITDAT != idat) {
@@ -1109,6 +1109,15 @@ found:
                }
                break;
 
+       case Zcallcon:
+               v = p->to.offset - p->pc - 5;
+               *andptr++ = op;
+               *andptr++ = v;
+               *andptr++ = v>>8;
+               *andptr++ = v>>16;
+               *andptr++ = v>>24;
+               break;
+
        case Zjmp:
                q = p->pcond;
                if(q) {