Annotation of coherent/d/bin/cc/c/n1/i8086/table1.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * This file contains all of the machine specific tables used
                      3:  * by the coder half of the Intel iAPX-86 code generator.
                      4:  */
                      5: 
                      6: #ifdef   vax
                      7: #include "INC$LIB:cc1.h"
                      8: #else
                      9: #include "cc1.h"
                     10: #endif
                     11: 
                     12: /*
                     13:  * Width table.
                     14:  */
                     15: char   wtype[] = {
                     16:        0,                      /* S8 */
                     17:        0,                      /* U8 */
                     18:        1,                      /* S16 */
                     19:        1,                      /* U16 */
                     20:        2,                      /* S32 */
                     21:        2,                      /* U32 */
                     22:        3,                      /* F32 */
                     23:        4,                      /* F64 */
                     24:        5,                      /* BLK */
                     25:        0,                      /* FLD8 */
                     26:        1,                      /* FLD16 */
                     27:        2,                      /* LPTR */
                     28:        2,                      /* LPTB */
                     29:        1,                      /* SPTR */
                     30:        1                       /* SPTB */
                     31: };
                     32: 
                     33: /*
                     34:  * Register table.
                     35:  * Indexed by 'real' register numbers (as defined in mch.h).
                     36:  */
                     37: REGDESC        reg[]   = {
                     38: /*             KIND     KIND     int      REGNAME  REGNAME  REGNAME  PREGSET   */
                     39: /*             r_lvalue r_rvalue r_goal   r_enpair r_hihalf r_lohalf r_phys    */
                     40: /* ax   */     0,       KWB|KSP, MRVALUE,    DXAX,   AH,       AL,     BAX,
                     41: /* dx   */     0,       KWB|KSP, MRVALUE,    DXAX,   DH,       DL,     BDX,
                     42: /* bx   */     KWB|KSP, KWB|KSP, MRVALUE,    CXBX,   BH,       BL,     BBX,
                     43: /* cx   */     0,       KWB|KSP, MRVALUE,    CXBX,   CH,       CL,     BCX,
                     44: /* si   */     KW|KSP,  KW|KSP,  MRVALUE,      -1,   -1,       -1,     BSI,
                     45: /* di   */     KW|KSP,  KW|KSP,  MRVALUE,      -1,   -1,       -1,     BDI,
                     46: /* sp   */     0,       0,            -1,      -1,   -1,       -1,     BSP,
                     47: /* bp   */     KW|KSP,  0,            -1,      -1,   -1,       -1,     BBP,
                     48: /* fpac */     0,       KD,      MRVALUE,      -1,   -1,       -1,     BFPAC,
                     49: /* es   */     0,       0,            -1,      -1,   -1,       -1,     BES,
                     50: /* cs   */     0,       0,            -1,      -1,   -1,       -1,     BCS,
                     51: /* ss   */     0,       0,            -1,      -1,   -1,       -1,     BSS,
                     52: /* ds   */     0,       0,            -1,      -1,   -1,       -1,     BDS,
                     53: /* dxax */     0,       KL|KLP,  MRVALUE,      -1,   DX,       AX,     BDX|BAX,
                     54: /* cxbx */     KL,      KL|KLP,  MRVALUE,      -1,   CX,       BX,     BCX|BBX,
                     55: /* sssp */     0,       0,            -1,      -1,   SS,       SP,     BSS|BSP,
                     56: /* ssbp */     0,       0,            -1,      -1,   SS,       BP,     BSS|BBP,
                     57: /* esax */     0,       KLP,     MLVALUE,      -1,   ES,       AX,     BES|BAX,
                     58: /* esbx */     KLP,     0,       MLVALUE,      -1,   ES,       BX,     BES|BBX,
                     59: /* essi */     KLP,     0,       MLVALUE,      -1,   ES,       SI,     BES|BSI,
                     60: /* esdi */     KLP,     0,       MLVALUE,      -1,   ES,       DI,     BES|BDI,
                     61: /* dsax */     0,       KLP,     MLVALUE,      -1,   DS,       AX,     BDS|BAX,
                     62: /* dsbx */     KLP,     0,       MLVALUE,      -1,   DS,       BX,     BDS|BBX,
                     63: /* dssi */     KLP,     0,       MLVALUE,      -1,   DS,       SI,     BDS|BSI,
                     64: /* dsdi */     KLP,     0,       MLVALUE,      -1,   DS,       DI,     BDS|BDI,
                     65: /* al   */     0,       0,            -1,      AX,   -1,       -1,     BAX,
                     66: /* bl   */     0,       0,            -1,      BX,   -1,       -1,     BBX,
                     67: /* cl   */     0,       0,            -1,      CX,   -1,       -1,     BCX,
                     68: /* dl   */     0,       0,            -1,      DX,   -1,       -1,     BDX,
                     69: /* ah   */     0,       0,            -1,      AX,   -1,       -1,     BAX,
                     70: /* bh   */     0,       0,            -1,      BX,   -1,       -1,     BBX,
                     71: /* ch   */     0,       0,            -1,      CX,   -1,       -1,     BCX,
                     72: /* dh   */     0,       0,            -1,      DX,   -1,       -1,     BDX
                     73: /* None */
                     74: /* Anyr */
                     75: /* Anyl */
                     76: /* Pair */
                     77: /* Temp */
                     78: /* Lo */
                     79: /* Hi */
                     80: };
                     81: 
                     82: /*
                     83:  * The opcode table.
                     84:  * Indexed by operation.
                     85:  * The 0th and 1st entries of the relations are used by REL0 and by REL1.
                     86:  * The 2nd entry is the special supress EQ/NE entry used by LREL1 and LREL0.
                     87:  */
                     88: unsigned char  optab[][3] = {
                     89: 
                     90:        { ZADD, ZINC,   ZADC },
                     91:        { ZSUB, ZDEC,   ZSBB },
                     92:        { ZMUL, 0,      0 },
                     93:        { ZDIV, 0,      0 },
                     94:        { ZDIV, 0,      0 },
                     95:        { ZAND, ZTEST,  ZSUB },
                     96:        { ZOR,  0,      0 },
                     97:        { ZXOR, ZNOT,   0 },
                     98:        { ZSAL, ZSHL,   ZRCL },
                     99:        { ZSAR, ZSHR,   ZRCR },
                    100: 
                    101:        { ZADD, ZINC,   ZADC },
                    102:        { ZSUB, ZDEC,   ZSBB },
                    103:        { ZMUL, ZMOV,   ZMOVB },
                    104:        { ZDIV, ZMOV,   ZMOVB },
                    105:        { ZDIV, ZMOV,   ZMOVB },
                    106:        { ZAND, ZSUB,   0 },
                    107:        { ZOR,  0,      0 },
                    108:        { ZXOR, ZNOT,   0 },
                    109:        { ZSAL, ZSHL,   ZRCL },
                    110:        { ZSAR, ZSHR,   ZRCR },
                    111: 
                    112:        { ZJE,  ZJE,    0 },
                    113:        { ZJNE, ZJNE,   0 },
                    114:        { ZJG,  0,      ZJG },
                    115:        { ZJGE, ZJNS,   ZJG },
                    116:        { ZJLE, 0,      ZJL },
                    117:        { ZJL,  ZJS,    ZJL },
                    118:        { ZJA,  0,      ZJA },
                    119:        { ZJAE, 0,      ZJA },
                    120:        { ZJBE, 0,      ZJB },
                    121:        { ZJB,  0,      ZJB },
                    122: 
                    123:        { 0,    0,      0 },
                    124:        { 0,    0,      0 },
                    125:        { ZNEG, ZSBB,   0 },
                    126:        { ZNOT, 0,      0 },
                    127:        { 0,    0,      0 },
                    128:        { 0,    0,      0 },
                    129:        { 0,    0,      0 },
                    130:        { ZADD, ZINC,   ZADC },
                    131:        { ZSUB, ZDEC,   ZSBB },
                    132:        { ZADD, ZINC,   ZADC },
                    133:        { ZSUB, ZDEC,   ZSBB },
                    134:        { 0,    0,      0 },
                    135:        { 0,    0,      0 },
                    136:        { 0,    0,      0 },
                    137:        { 0,    0,      0 },
                    138:        { 0,    0,      0 },
                    139:        { 0,    0,      0 },
                    140:        { 0,    0,      0 },
                    141:        { 0,    0,      0 },
                    142:        { ZMOV, ZSUB,   0 },
                    143:        { 0,    0,      0 },
                    144:        { 0,    0,      0 },
                    145:        { 0,    0,      0 },
                    146:        { 0,    0,      0 },
                    147:        { 0,    0,      0 },
                    148:        { 0,    0,      0 }
                    149: };
                    150: 
                    151: /*
                    152:  * Per type info.
                    153:  * Column 0 is function return register (-1 if never a return type).
                    154:  * Column 1 is function return context, for select.
                    155:  * Column 2 is size of a temp.
                    156:  * Column 3 is the actual size in memory, for autoinc/autodec.
                    157:  * Column 4 is bit set for searching pattern tables.
                    158:  * Column 5 is register kind.
                    159:  * Column 6 is register kind for a pair.
                    160:  */
                    161: PERTYPE        pertype[] = {
                    162:        /*      REGNAME char            char    char    TYPESET KIND    KIND    */
                    163:        /*      p_frreg p_frcat         p_size  p_incr  p_type  p_kind  p_pair  */
                    164:        {       AX,     MRVALUE,        2,      1,      FS8,    KB,     KL },
                    165:        {       AX,     MRVALUE,        2,      1,      FU8,    KB,     KL },
                    166:        {       AX,     MRVALUE,        2,      2,      FS16,   KW,     KL },
                    167:        {       AX,     MRVALUE,        2,      2,      FU16,   KW,     KL },
                    168:        {       DXAX,   MRVALUE,        4,      4,      FS32,   KL,     0  },
                    169:        {       DXAX,   MRVALUE,        4,      4,      FU32,   KL,     0  },
                    170:        {       -1,     MRVALUE,        8,      8,      FF32,   0,      0  },
                    171:        {       FPAC,   MRVALUE,        8,      8,      FF64,   KD,     0  },
                    172:        {       -1,     MRVALUE,        0,      0,      FBLK,   0,      0  },
                    173:        {       -1,     MRVALUE,        0,      0,      FFLD8,  0,      0  },
                    174:        {       -1,     MRVALUE,        0,      0,      FFLD16, 0,      0  },
                    175:        {       DXAX,   MRVALUE,        4,      4,      FLPTR,  KLP,    0  },
                    176:        {       DXAX,   MRVALUE,        4,      4,      FLPTB,  KLP,    0  },
                    177:        {       AX,     MRVALUE,        2,      2,      FSPTR,  KSP,    0  },
                    178:        {       AX,     MRVALUE,        2,      2,      FSPTB,  KSP,    0  }
                    179: };
                    180: 
                    181: /*
                    182:  * These tables adjust relational ops when the
                    183:  * sense is reversed or when the subtrees are swapped.
                    184:  */
                    185: char   fliprel[] = {
                    186:        EQ, NE, LT, LE, GE, GT, ULT, ULE, UGE, UGT
                    187: };
                    188: 
                    189: char   otherel[] = {
                    190:        NE, EQ, LE, LT, GT, GE, ULE, ULT, UGT, UGE
                    191: };
                    192: 
                    193: /*
                    194:  * Type table.
                    195:  * Indexed by machine type.
                    196:  * Used by type testing macros defined in cc1mch.h.
                    197:  */
                    198: char   tinfo[] = {
                    199:        060,    064,            /* S8,    U8,    */
                    200:        022,    026,            /* S16,   U16,   */
                    201:        021,    025,            /* S32,   U32,   */
                    202:        010,    010,            /* F32,   F64,   */
                    203:        0100,                   /* BLK,          */
                    204:        060,                    /* FLD8,         */
                    205:        020,                    /* FLD16,        */
                    206:        0205,   0305,           /* LPTR,  LPTRB, */
                    207:        0226,   0326            /* SPTR,  SPTRB  */
                    208: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.