Annotation of coherent/b/bin/c/n1/i8086/tables/shl.t, revision 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.