|
|
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: //////////
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.