Annotation of coherent/b/bin/c/n1/i8086/tables/shl.t, revision 1.1.1.1

1.1       root        1: /////////
                      2: /
                      3: / Shift left.
                      4: / Small shifts (1 or 2 bits) are easy.
                      5: / Longer shifts use either 'shift by CL' (words) or a loop (longs).
                      6: / Shifts by a constant generate the load of CL directly
                      7: / to get a 'movb' instruction and save a byte.
                      8: /
                      9: /////////
                     10: 
                     11: SHL:
                     12: %      PEFFECT|PRVALUE|PREL|P_SLT|P80186
                     13:        WORD            ANYR    ANYR    *       TEMP
                     14:                TREG            WORD
                     15:                BYTE|MMX        WORD
                     16: %      PLVALUE|P_SLT|P80186
                     17:        WORD            ANYL    ANYL    *       TEMP
                     18:                TREG            WORD
                     19:                BYTE|MMX        WORD
                     20:                        [ZSAL]  [R],[AR]
                     21:                [IFR]   [REL0]  [LAB]
                     22: 
                     23: %      PEFFECT|PRVALUE|PREL|P_SLT
                     24:        WORD            ANYR    ANYR    *       TEMP
                     25:                TREG            WORD
                     26:                1|MMX           *
                     27: %      PLVALUE|P_SLT
                     28:        WORD            ANYL    ANYL    *       TEMP
                     29:                TREG            WORD
                     30:                1|MMX           *
                     31:                        [ZSAL]  [R],[AR]
                     32:                [IFR]   [REL0]  [LAB]
                     33: 
                     34: %      PEFFECT|PRVALUE|PREL|P_SLT
                     35:        WORD            ANYR    ANYR    *       TEMP
                     36:                TREG            WORD
                     37:                2|MMX           *
                     38: %      PLVALUE|P_SLT
                     39:        WORD            ANYL    ANYL    *       TEMP
                     40:                TREG            WORD
                     41:                2|MMX           *
                     42:                        [ZSAL]  [R],[CONST 1]
                     43:                        [ZSAL]  [R],[CONST 1]
                     44:                [IFR]   [REL0]  [LAB]
                     45: 
                     46: /////////
                     47: /
                     48: / Harder word shifts.
                     49: / If the right is a constant,
                     50: / use a MOVB to load the shift count and save a byte.
                     51: /
                     52: /////////
                     53: %      PEFFECT|PRVALUE|PREL|P_SLT
                     54:        WORD            ANYR    ANYR    CX      TEMP
                     55:                TREG            WORD
                     56:                IMM|MMX         WORD
                     57: %      PLVALUE|P_SLT
                     58:        WORD            ANYL    ANYL    CX      TEMP
                     59:                TREG            WORD
                     60:                IMM|MMX         WORD
                     61:                        [ZMOVB] [REGNO CL],[AR]
                     62:                        [ZSAL]  [R],[REGNO CL]
                     63:                [IFR]   [REL0]  [LAB]
                     64: 
                     65: %      PEFFECT|PRVALUE|P_SLT
                     66:        WORD            ANYR    ANYR    CX      TEMP
                     67:                TREG            WORD
                     68:                ADR             WORD
                     69: %      PLVALUE|P_SLT
                     70:        WORD            ANYL    ANYL    CX      TEMP
                     71:                TREG            WORD
                     72:                ADR             WORD
                     73:                        [ZMOV]  [REGNO CX],[AR]
                     74:                        [ZSAL]  [R],[REGNO CL]
                     75: 
                     76: /////////
                     77: /
                     78: / Hard long shifts.
                     79: / Since the modify phase has ripped out shifts by 0,
                     80: / any immediate shift is by a nonzero count, so no JCXZ is needed.
                     81: /
                     82: /////////
                     83: 
                     84: %      PEFFECT|PRVALUE|P_SLT
                     85:        LONG            DXAX    DXAX    CX      DXAX
                     86:                TREG            LONG
                     87:                IMM|MMX         WORD
                     88:                        [ZMOV]  [REGNO CX],[AR]
                     89:                [DLAB0]:[ZSAL]  [LO R],[CONST 1]
                     90:                        [ZRCL]  [HI R],[CONST 1]
                     91:                        [ZLOOP] [LAB0]
                     92: 
                     93: %      PEFFECT|PRVALUE|P_SLT
                     94:        LONG            DXAX    DXAX    CX      DXAX
                     95:                TREG            LONG
                     96:                ADR             WORD
                     97:                        [ZMOV]  [REGNO CX],[AR]
                     98:                        [ZJCXZ] [LAB0]
                     99:                [DLAB1]:[ZSAL]  [LO R],[CONST 1]
                    100:                        [ZRCL]  [HI R],[CONST 1]
                    101:                        [ZLOOP] [LAB1]
                    102:                [DLAB0]:
                    103: 
                    104: /////////
                    105: /
                    106: / These strange entries are for LARGE model int-to-pointer conversions.
                    107: / The pointer is a strange kind of long integer.
                    108: / Computes the word into the offset, does the shift
                    109: / and sets the base to 0.
                    110: /
                    111: /////////
                    112: 
                    113: #ifndef ONLYSMALL
                    114: %      PEFFECT|PRVALUE|P80186
                    115:        LPTX            DXAX    AX      *       DXAX
                    116:                TREG            WORD
                    117:                BYTE|MMX        WORD
                    118:                        [ZSAL]  [LO R],[AR]
                    119:                        [ZSUB]  [HI R],[HI R]
                    120: 
                    121: %      PEFFECT|PRVALUE
                    122:        LPTX            DXAX    AX      CX      DXAX
                    123:                TREG            WORD
                    124:                IMM|MMX         WORD
                    125:                        [ZMOVB] [REGNO CL],[AR]
                    126:                        [ZSAL]  [LO R],[REGNO CL]
                    127:                        [ZSUB]  [HI R],[HI R]
                    128: 
                    129: %      PEFFECT|PRVALUE
                    130:        LPTX            DXAX    AX      CX      DXAX
                    131:                TREG            WORD
                    132:                ADR             WORD
                    133:                        [ZMOV]  [REGNO CX],[AR]
                    134:                        [ZSAL]  [LO R],[REGNO CL]
                    135:                        [ZSUB]  [HI R],[HI R]
                    136: #endif

unix.superglobalmegacorp.com

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