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

1.1       root        1: //////////
                      2: / n1/i386/tables/amul.t
                      3: //////////
                      4: 
                      5: /////////
                      6: /
                      7: / Assigned multiplication (*=).
                      8: / Immediate byte operands use the three-operand multiply immediate form.
                      9: / Otherwise, the multiply is done in EDX:EAX.
                     10: / [TL ZIMUL] is ZIMUL if signed, ZMUL if unsigned; cf. n1/i386/outmch.c.
                     11: / Signed multiply should use the i386 two-operand MUL but currently does not.
                     12: /
                     13: /////////
                     14: 
                     15: AMUL:
                     16: 
                     17: //////////
                     18: / Long.
                     19: //////////
                     20: 
                     21: / Long *= byte constant.
                     22: %      PEFFECT|PVALUE
                     23:        LONG            ANYR    *       *       TEMP
                     24:                ADR|LV          LONG
                     25:                SBYTE|MMX       LONG
                     26:                        [ZIMULI]        [R],[AL],[AR]
                     27:                        [ZMOV]          [AL],[R]
                     28: 
                     29: / Long *= long.
                     30: %      PEFFECT|PVALUE
                     31:        LONG            EDXEAX  *       *       EAX
                     32:                ADR|LV          LONG
                     33:                ADR             LONG
                     34:                        [ZMOV]          [REGNO EAX],[AL]
                     35:                        [TL ZIMUL]      [AR]
                     36:                        [ZMOV]          [AL],[REGNO EAX]
                     37: 
                     38: //////////
                     39: / Short.
                     40: / Sign- or zero-extend the result in value context.
                     41: //////////
                     42: 
                     43: / Short *= long.
                     44: %      PEFFECT|PVALUE
                     45:        LONG            EDXEAX  *       *       EAX
                     46:                ADR|LV          WORD|BYTE
                     47:                ADR             LONG
                     48:                        [TL ZMOVSX]     [REGNO EAX],[AL]
                     49:                        [TL ZIMUL]      [AR]
                     50:                        [TL ZMOV]       [AL],[TL REGNO EAX]
                     51:                [IFV]   [TL ZMOVSX]     [REGNO EAX],[TL REGNO EAX]
                     52: 
                     53: //////////
                     54: / Fields.
                     55: //////////
                     56: 
                     57: / Field.
                     58: %      PEFFECT|PVALUE
                     59:        LONG            EDXEAX  *       *       EAX
                     60:                ADR|LV          FLD
                     61:                ADR             LONG
                     62:                        [TL ZMOVZX]     [REGNO EAX],[AL]        / fetch
                     63:                        [ZAND]          [REGNO EAX],[EMASK]     / extract
                     64:                        [ZMUL]          [AR]                    / multiply
                     65:                        [ZAND]          [REGNO EAX],[EMASK]     / mask
                     66:                        [TL ZAND]       [AL],[TL CMASK]         / clear
                     67:                        [TL ZOR]        [AL],[TL REGNO EAX]     / store
                     68: 
                     69: //////////
                     70: / Floating point.
                     71: //////////
                     72: 
                     73: / IEEE or DECVAX software floating point.
                     74: / Double *= double.
                     75: %      PEFFECT|PVALUE|P_SRT|PDECVAX|PIEEE
                     76:        FF64            EDXEAX  *       EDXEAX  TEMP
                     77:                ADR|LV          FF64
                     78:                TREG            FF64
                     79:                        [ZPUSH] [HI AL]
                     80:                        [ZPUSH] [LO AL]
                     81:                        [ZCALL] [GID _dmul]
                     82:                        [ZADD]  [REGNO ESP],[CONST 8]
                     83:                        [ZMOV]  [HI AL],[HI R]
                     84:                        [ZMOV]  [LO AL],[LO R]
                     85: 
                     86: / Float *= double.
                     87: %      PEFFECT|PVALUE|P_SRT|PDECVAX|PIEEE
                     88:        FF64            EDXEAX  *       EDXEAX  TEMP
                     89:                ADR|LV          FF32
                     90:                TREG            FF64
                     91:                        [ZPUSH] [AL]
                     92:                        [ZCALL] [GID _fmul]
                     93:                        [ZADD]  [REGNO ESP],[CONST 4]
                     94:                        [ZCALL] [GID _fdcvt]
                     95:                        [ZMOV]  [AL], [LO R]
                     96:                [IFV]   [ZCALL] [GID _dfcvt]
                     97: 
                     98: / Hardware coprocessor (NDP) floating point.
                     99: %      PEFFECT|PVALUE|PNDP
                    100:        FLOAT           FPAC    *       FPAC    FPAC
                    101:                ADR|LV          FLOAT
                    102:                TREG            FF64
                    103:                        [TL ZFMULD]     [AL]
                    104:                [IFV]   [TL ZFSTD]      [AL]
                    105:                [IFE]   [TL ZFSTPD]     [AL]
                    106: 
                    107: //////////
                    108: / end of n1/i386/tables/amul.t
                    109: //////////

unix.superglobalmegacorp.com

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