Annotation of coherent/b/bin/c/n1/i386/tables/assign.t, revision 1.1.1.1

1.1       root        1: //////////
                      2: / n1/i386/tables/assign.t
                      3: //////////
                      4: 
                      5: /////////
                      6: /
                      7: / Assignment (=).
                      8: / Longs, pointers, words, bytes, fields, doubles.
                      9: / The '=' operator is a non-conversion operator for integer types and pointers.
                     10: / There must be some special entries here to handle the cross type cases.
                     11: /
                     12: /////////
                     13: 
                     14: ASSIGN:
                     15: 
                     16: //////////
                     17: /
                     18: / Simple integer assignment.
                     19: /
                     20: //////////
                     21: 
                     22: //////////
                     23: / Longs and pointers.
                     24: //////////
                     25: 
                     26: / Register dword = 0 or NULL.
                     27: %      PEFFECT
                     28:        DWORD           NONE    *       *       NONE
                     29:                REG|MMX         DWORD
                     30:                0|MMX           *
                     31:                        [ZSUB]  [AL],[AL]
                     32: 
                     33: / Register dword = dword.
                     34: %      PEFFECT
                     35:        DWORD           NONE    *       *       NONE
                     36:                REG|MMX         DWORD
                     37:                EASY|MMX        DWORD
                     38: / Dword = register dword.
                     39: %      PEFFECT
                     40:        DWORD           NONE    *       *       NONE
                     41:                ADR|LV          DWORD
                     42:                REG|MMX         DWORD
                     43:                        [ZMOV]  [AL],[AR]
                     44: 
                     45: / Register dword = effective address.
                     46: %      PEFFECT
                     47:        DWORD           NONE    *       *       NONE
                     48:                REG|MMX         DWORD
                     49:                LEA|MMX         DWORD
                     50:                        [ZLEA]  [AL],[NSE AR]
                     51: 
                     52: / Integer or pointer = immediate.
                     53: %      PEFFECT
                     54:        DWORD           NONE    *       *       NONE
                     55:                ADR|LV          DWORD|SHORT
                     56:                IMM|MMX         DWORD
                     57:                        [TL ZMOV]       [AL],[TL AR]
                     58: 
                     59: / Dword = dword.
                     60: %      PEFFECT|PVALUE|P_SRT
                     61:        DWORD           ANYR    *       ANYR    TEMP
                     62:                ADR|LV          DWORD
                     63:                TREG            DWORD
                     64:                        [ZMOV]  [AL],[AR]
                     65: 
                     66: //////////
                     67: / Words.
                     68: //////////
                     69: 
                     70: / Word = immediate word.
                     71: %      PEFFECT
                     72:        DWORD           NONE    *       *       NONE
                     73:                ADR|LV          WORD
                     74:                IMM|MMX         WORD
                     75:                        [ZMOVW] [AL],[AR]
                     76: 
                     77: / Word = word.
                     78: %      PEFFECT|PVALUE|PREL|P_SRT
                     79:        LONG            ANYR    *       ANYR    TEMP
                     80:                ADR|LV          WORD
                     81:                TREG            WORD
                     82:                [IFV]   [TL ZMOVSX]     [R],[LO RR]
                     83:                        [ZMOVW]         [AL],[LO R]
                     84:                [IFR]   [ZCMPW]         [LO R],[CONST 0]
                     85:                [IFR]   [REL0]          [LAB]
                     86: 
                     87: //////////
                     88: / Bytes.
                     89: //////////
                     90: 
                     91: / Byte = immediate byte.
                     92: %      PEFFECT
                     93:        LONG            NONE    *       *       NONE
                     94:                ADR|LV          BYTE
                     95:                IMM|MMX         BYTE
                     96:                        [ZMOVB] [AL], [AR]
                     97: 
                     98: / Byte = byte.
                     99: %      PEFFECT|PVALUE|PREL|P_SRT|PBYTE
                    100:        LONG            ANYR    *       ANYR    TEMP
                    101:                ADR|LV          BYTE
                    102:                TREG            BYTE
                    103:                [IFV]   [TL ZMOVSX]     [R],[LO LO RR]
                    104:                        [ZMOVB]         [AL],[LO LO R]
                    105:                [IFR]   [ZCMPB]         [LO LO R],[CONST 0]
                    106:                [IFR]   [REL0]          [LAB]
                    107: 
                    108: //////////
                    109: /
                    110: / Mixed type assignment.
                    111: /
                    112: //////////
                    113: 
                    114: / Dword = short.
                    115: %      PEFFECT|PVALUE|P_SRT|PBYTE
                    116:        DWORD           ANYR    *       ANYR    TEMP
                    117:                ADR|LV          DWORD
                    118:                TREG            SHORT
                    119:                        [TR ZMOVSX]     [R],[TR RR]
                    120:                        [ZMOV]          [AL],[R]
                    121: 
                    122: / Short = long or pointer.
                    123: %      PEFFECT|PVALUE|P_SRT|PBYTE
                    124:        LONG            ANYR    *       ANYR    TEMP
                    125:                ADR|LV          SHORT
                    126:                TREG            DWORD
                    127:                        [TL ZMOV]       [AL],[TL AR]
                    128:                [IFV]   [TL ZMOVSX]     [R], [TL AR]
                    129: 
                    130: /////////
                    131: /
                    132: / Field assignment.
                    133: / The right operand has been preshifted and masked,
                    134: / just like the right side of an '|=' or '^=' operation.
                    135: / All you do is clear the junk and OR it in.
                    136: / In value context, unsigned result must be masked;
                    137: / signed result mask is unnecessary because of sign-extend shifts.
                    138: /
                    139: /////////
                    140: 
                    141: / Immediate to signed field.
                    142: %      PEFFECT|PVALUE
                    143:        FS32            ANYR    *       *       TEMP
                    144:                ADR|LV          FLD
                    145:                IMM|MMX         LONG
                    146:                        [TL ZAND]       [AL],[TL CMASK]         / clear
                    147:                        [TL ZOR]        [AL],[TL AR]            / store
                    148:                [IFV]   [TL ZMOVZX]     [R],[AL]                / fetch
                    149: 
                    150: / Immediate to unsigned field.
                    151: %      PEFFECT|PVALUE
                    152:        FU32            ANYR    *       *       TEMP
                    153:                ADR|LV          FLD
                    154:                IMM|MMX         LONG
                    155:                        [TL ZAND]       [AL],[TL CMASK]         / clear
                    156:                        [TL ZOR]        [AL],[TL AR]            / store
                    157:                [IFV]   [TL ZMOVZX]     [R],[AL]                / fetch
                    158:                [IFV]   [ZAND]          [R],[EMASK]             / mask
                    159: 
                    160: / Signed field.
                    161: %      PEFFECT|PVALUE|P_SRT|PBYTE
                    162:        FS32            ANYR    *       ANYR    TEMP
                    163:                ADR|LV          FLD
                    164:                TREG            LONG
                    165:                        [TL ZAND]       [AL],[TL CMASK]
                    166:                        [TL ZOR]        [AL],[TL R]
                    167:                [IFV]   [TL ZMOVSX]     [R],[AL]
                    168: 
                    169: / Unsigned field.
                    170: %      PEFFECT|PVALUE|P_SRT|PBYTE
                    171:        FU32            ANYR    *       ANYR    TEMP
                    172:                ADR|LV          FLD
                    173:                TREG            LONG
                    174:                        [TL ZAND]       [AL],[TL CMASK]
                    175:                        [TL ZOR]        [AL],[TL R]
                    176:                [IFV]   [TL ZMOVSX]     [R],[AL]
                    177:                [IFV]   [ZAND]          [R],[EMASK]
                    178: 
                    179: //////////
                    180: / Floating point.
                    181: //////////
                    182: 
                    183: / DECVAX and IEEE software floating point assignment.
                    184: / Zero and immediates are special.
                    185: / Floats are different for DECVAX and IEEE. 
                    186: 
                    187: / Double = 0.
                    188: %      PEFFECT|PIEEE|PDECVAX
                    189:        FF64            EAX     *       *       NONE
                    190:                ADR|LV          FF64
                    191:                0|MMX           *
                    192:                        [ZSUB]  [R],[R]
                    193:                        [ZMOV]  [HI AL],[R]
                    194:                        [ZMOV]  [LO AL],[R]
                    195: 
                    196: / Double = constant.
                    197: %      PEFFECT|PIEEE|PDECVAX
                    198:        FF64            NONE    *       *       NONE
                    199:                ADR|LV          FF64
                    200:                IMM|MMX         FF64
                    201:                        [ZMOV]  [HI AL],[HI AR]
                    202:                        [ZMOV]  [LO AL],[LO AR]
                    203: 
                    204: / Double = double.
                    205: %      PEFFECT|PVALUE|P_SRT|PIEEE|PDECVAX
                    206:        FF64            EDXEAX  *       EDXEAX  EDXEAX
                    207:                ADR|LV          FF64
                    208:                TREG            FF64
                    209:                        [ZMOV]  [HI AL],[HI R]
                    210:                        [ZMOV]  [LO AL],[LO R]
                    211: 
                    212: / Assignment to 32-bit floats.
                    213: / Float = 0.
                    214: %      PEFFECT|PDECVAX|PIEEE
                    215:        FF64            EAX     *       *       NONE
                    216:                ADR|LV          FF32
                    217:                0|MMX           *
                    218:                        [ZSUB]  [R],[R]
                    219:                        [ZMOV]  [AL],[R]
                    220: 
                    221: / Float = constant, DECVAX.
                    222: %      PEFFECT|PDECVAX
                    223:        FF64            NONE    *       *       NONE
                    224:                ADR|LV          FF32
                    225:                IMM|MMX         FF64
                    226:                        [ZMOV]  [AL],[LO AR]
                    227: 
                    228: / Float = constant, IEEE.
                    229: %      PEFFECT|PVALUE|PDECVAX
                    230:        FF64            EDXEAX  *       *       TEMP
                    231:                ADR|LV          FF32
                    232:                IMM|MMX         FF64
                    233:                        [ZMOV]  [HI R], [HI AR]
                    234:                        [ZMOV]  [LO R], [LO AR]
                    235:                        [ZCALL] [GID _fdcvt]
                    236:                        [ZMOV]  [AL],[LO R]
                    237:                [IFV]   [ZCALL] [GID _dfcvt]
                    238: 
                    239: / Float = double or float, DECVAX.
                    240: %      PEFFECT|PVALUE|P_SRT|PDECVAX
                    241:        FF64            EDXEAX  *       EDXEAX  EDXEAX
                    242:                ADR|LV          FF32
                    243:                TREG            FLOAT
                    244:                        [ZMOV]  [AL],[HI R]
                    245: 
                    246: / Float = double or float, IEEE.
                    247: %      PEFFECT|PVALUE|P_SRT|PIEEE
                    248:        FF64            EDXEAX  *       EDXEAX  EDXEAX
                    249:                ADR|LV          FF32
                    250:                TREG            FLOAT
                    251:                        [ZCALL] [GID _fdcvt]
                    252:                        [ZMOV]  [AL],[LO R]
                    253:                [IFV]   [ZCALL] [GID _dfcvt]
                    254: 
                    255: / Hardware coprocessor (NDP) floating point.
                    256: / Pop the NDP stack on assignment for effect.
                    257: %      PEFFECT|P_SRT|PNDP
                    258:        FF64            FPAC    *       FPAC    NONE
                    259:                ADR|LV          FLOAT
                    260:                TREG            FLOAT
                    261:                        [TL ZFSTPD]     [AL]
                    262: 
                    263: / Leave the value on the NDP stack on assignment for value.
                    264: %      PVALUE|P_SRT|PNDP
                    265:        FF64            FPAC    *       FPAC    FPAC
                    266:                ADR|LV          FLOAT
                    267:                TREG            FLOAT
                    268:                        [TL ZFSTD]      [AL]
                    269: 
                    270: //////////
                    271: / end of n1/i386/tables/assign.t
                    272: //////////

unix.superglobalmegacorp.com

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