]> Cypherpunks repositories - gostls13.git/commitdiff
6l, 8l: remove JCXZ; add JCXZW, JCXZL, and JCXZQ
authorJaroslavas Počepko <jp@webmaster.ms>
Fri, 26 Aug 2011 21:45:19 +0000 (17:45 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 26 Aug 2011 21:45:19 +0000 (17:45 -0400)
R=golang-dev
CC=golang-dev, rsc
https://golang.org/cl/4950050

src/cmd/6a/lex.c
src/cmd/6l/6.out.h
src/cmd/6l/optab.c
src/cmd/6l/span.c
src/cmd/8a/lex.c
src/cmd/8l/8.out.h
src/cmd/8l/optab.c
src/cmd/8l/span.c

index 42f4b1d11d396add123403b02f84d8e995991f0c..1cc89a37a03b5b9244ae460d69c11645c7c73967 100644 (file)
@@ -456,8 +456,8 @@ struct
        "JGT",          LTYPER, AJGT,
        "JG",           LTYPER, AJGT,   /* alternate */
        "JNLE",         LTYPER, AJGT,   /* alternate */
-
-       "JCXZ",         LTYPER, AJCXZ,
+       "JCXZL",        LTYPER, AJCXZL,
+       "JCXZQ",        LTYPER, AJCXZQ,
        "JMP",          LTYPEC, AJMP,
        "LAHF",         LTYPE0, ALAHF,
        "LARL",         LTYPE3, ALARL,
index 262da02abd6deff96d6a35dab3366f95a8ecbd1d..9a69c8ad525b147addb6b12454a9734c08439565 100644 (file)
@@ -121,7 +121,7 @@ enum        as
        AIRETW,
        AJCC,
        AJCS,
-       AJCXZ,
+       AJCXZL,
        AJEQ,
        AJGE,
        AJGT,
@@ -487,6 +487,7 @@ enum        as
        AIDIVQ,
        AIMULQ,
        AIRETQ,
+       AJCXZQ,
        ALEAQ,
        ALEAVEQ,
        ALODSQ,
index 36806ec4b625d20b329fc8f2cece004a6867008c..0a4c0eb07fc27fa9bd3f50c641e798f8ee199409 100644 (file)
@@ -788,7 +788,8 @@ Optab optab[] =
        { AIRETW,       ynone,  Pe, 0xcf },
        { AJCC,         yjcond, Px, 0x73,0x83,(00) },
        { AJCS,         yjcond, Px, 0x72,0x82 },
-       { AJCXZ,        yloop,  Px, 0xe3 },
+       { AJCXZL,       yloop,  Px, 0xe3 },
+       { AJCXZQ,       yloop,  Px, 0xe3 },
        { AJEQ,         yjcond, Px, 0x74,0x84 },
        { AJGE,         yjcond, Px, 0x7d,0x8d },
        { AJGT,         yjcond, Px, 0x7f,0x8f },
index 7313e42b2f0b817e80f4dfa0407c42c34a376161..9b869a493ccb0b41a7ca8be9a2641847cc061d0e 100644 (file)
@@ -88,7 +88,10 @@ span1(Sym *s)
                                                loop++;
                                                q->back ^= 2;
                                        }
-                                       s->p[q->pc+1] = v;
+                                       if(q->as == AJCXZL)
+                                               s->p[q->pc+2] = v;
+                                       else
+                                               s->p[q->pc+1] = v;
                                } else {
                                        bp = s->p + q->pc + q->mark - 4;
                                        *bp++ = v;
@@ -1467,6 +1470,8 @@ found:
                if(p->back & 1) {
                        v = q->pc - (p->pc + 2);
                        if(v >= -128) {
+                               if(p->as == AJCXZL)
+                                       *andptr++ = 0x67;
                                *andptr++ = op;
                                *andptr++ = v;
                        } else if(t[2] == Zloop) {
@@ -1490,6 +1495,8 @@ found:
                p->forwd = q->comefrom;
                q->comefrom = p;
                if(p->back & 2) { // short
+                       if(p->as == AJCXZL)
+                               *andptr++ = 0x67;
                        *andptr++ = op;
                        *andptr++ = 0;
                } else if(t[2] == Zloop) {
index e56460e4bd2d7bc394f174c58c8e4feea88a040f..44cfa41f87e83885be274d6f126c1e80fcb7868b 100644 (file)
@@ -371,7 +371,8 @@ struct
        "JG",           LTYPER, AJGT,   /* alternate */
        "JNLE",         LTYPER, AJGT,   /* alternate */
 
-       "JCXZ",         LTYPER, AJCXZ,
+       "JCXZL",        LTYPER, AJCXZL,
+       "JCXZW",        LTYPER, AJCXZW,
        "JMP",          LTYPEC, AJMP,
        "LAHF",         LTYPE0, ALAHF,
        "LARL",         LTYPE3, ALARL,
index 9a8483aaf4fbc484a191f67ca55cfc3d631187e1..5e4b73ad09686ead34199999f06bd8b295179ac6 100644 (file)
@@ -115,7 +115,8 @@ enum        as
        AIRETW,
        AJCC,
        AJCS,
-       AJCXZ,
+       AJCXZL,
+       AJCXZW,
        AJEQ,
        AJGE,
        AJGT,
index f5c195d75f308b4d28c6a6d05f4ca86b14f09c03..42490b8610c218ac9d54b209841e40c75bd7416a 100644 (file)
@@ -430,7 +430,8 @@ Optab optab[] =
        { AIRETW,       ynone,  Pe, 0xcf },
        { AJCC,         yjcond, Px, 0x73,0x83,(00) },
        { AJCS,         yjcond, Px, 0x72,0x82 },
-       { AJCXZ,        yloop,  Px, 0xe3 },
+       { AJCXZL,       yloop,  Px, 0xe3 },
+       { AJCXZW,       yloop,  Px, 0xe3 },
        { AJEQ,         yjcond, Px, 0x74,0x84 },
        { AJGE,         yjcond, Px, 0x7d,0x8d },
        { AJGT,         yjcond, Px, 0x7f,0x8f },
index cc0069c683d128bad0366e273d907777126805d4..ba193da1c610e10d647c2aaa6ec74c5c2fa5f8a5 100644 (file)
@@ -83,7 +83,10 @@ span1(Sym *s)
                                                loop++;
                                                q->back ^= 2;
                                        }
-                                       s->p[q->pc+1] = v;
+                                       if(q->as == AJCXZW)
+                                               s->p[q->pc+2] = v;
+                                       else
+                                               s->p[q->pc+1] = v;
                                } else {
                                        bp = s->p + q->pc + q->mark - 4;
                                        *bp++ = v;
@@ -1085,6 +1088,8 @@ found:
                if(p->back & 1) {
                        v = q->pc - (p->pc + 2);
                        if(v >= -128) {
+                               if(p->as == AJCXZW)
+                                       *andptr++ = 0x67;
                                *andptr++ = op;
                                *andptr++ = v;
                        } else if(t[2] == Zloop) {
@@ -1108,6 +1113,8 @@ found:
                p->forwd = q->comefrom;
                q->comefrom = p;
                if(p->back & 2) { // short
+                       if(p->as == AJCXZW)
+                               *andptr++ = 0x67;
                        *andptr++ = op;
                        *andptr++ = 0;
                } else if(t[2] == Zloop) {