|
|
1.1 root 1: //////////
2: / n1/i386/tables/adiv.t
3: //////////
4:
5: /////////
6: /
7: / Assigned divide (/=).
8: / Use unsigned divide if either left or right operand is unsigned.
9: /
10: /////////
11:
12: ADIV:
13:
14: / Unsigned integer by unsigned.
15: / The result word or byte does not have to be sign- or zero-extended
16: / in value context, the result is already correct.
17: % PEFFECT|PVALUE
18: LONG EDXEAX * * EAX
19: ADR|LV UINT
20: ADR LONG
21: / Signed long by unsigned.
22: % PEFFECT|PVALUE
23: LONG EDXEAX * * EAX
24: ADR|LV FS32
25: ADR FU32
26: [TL ZMOVSX] [REGNO EAX], [AL]
27: [ZSUB] [REGNO EDX], [REGNO EDX]
28: [ZDIV] [AR]
29: [TL ZMOV] [AL], [TL REGNO EAX]
30:
31: / Signed word or byte by unsigned.
32: / The result must be sign- or zero-extended in value context.
33: % PEFFECT|PVALUE
34: LONG EDXEAX * * EAX
35: ADR|LV FS16|FS8
36: ADR FU32
37: [TL ZMOVSX] [REGNO EAX], [AL]
38: [ZSUB] [REGNO EDX], [REGNO EDX]
39: [ZDIV] [AR]
40: [TL ZMOV] [AL], [TL REGNO EAX]
41: [IFV] [TL ZMOVSX] [REGNO EAX], [TL REGNO EAX]
42:
43: / Signed integer by signed.
44: / The result word or byte does not have to be sign- or zero-extended
45: / in value context, the result is already correct.
46: % PEFFECT|PVALUE
47: LONG EDXEAX * * EAX
48: ADR|LV SINT
49: ADR FS32
50: [TL ZMOVSX] [REGNO EAX], [AL]
51: [ZCDQ]
52: [ZIDIV] [AR]
53: [TL ZMOV] [AL], [TL REGNO EAX]
54:
55: //////////
56: / Fields.
57: / The right hand operand of the field is not preshifted
58: / like it is for add, subtract and the increment/decrement ops.
59: //////////
60:
61: / Field.
62: % PEFFECT|PVALUE
63: LONG EDXEAX * * EAX
64: ADR|LV FLD
65: ADR LONG
66: [TL ZMOVZX] [REGNO EAX],[AL] / fetch
67: [ZAND] [REGNO EAX],[EMASK] / extract
68: [ZSUB] [REGNO EDX],[REGNO EDX] / widen
69: [ZDIV] [AR] / divide
70: [ZAND] [REGNO EAX],[EMASK] / mask
71: [TL ZAND] [AL],[TL CMASK] / clear
72: [TL ZOR] [AL],[TL REGNO EAX] / store
73:
74: //////////
75: / Floating point.
76: //////////
77:
78: / IEEE or DECVAX software floating point.
79: / Double /= double.
80: % PEFFECT|PVALUE|P_SRT|PDECVAX|PIEEE
81: FF64 EDXEAX * EDXEAX TEMP
82: ADR|LV FF64
83: TREG FF64
84: [ZPUSH] [HI AL]
85: [ZPUSH] [LO AL]
86: [ZCALL] [GID _ddiv]
87: [ZADD] [REGNO ESP],[CONST 8]
88: [ZMOV] [HI AL],[HI R]
89: [ZMOV] [LO AL],[LO R]
90:
91: / Float /= double.
92: % PEFFECT|PVALUE|P_SRT|PDECVAX|PIEEE
93: FF64 EDXEAX * EDXEAX TEMP
94: ADR|LV FF32
95: TREG FF64
96: [ZPUSH] [AL]
97: [ZCALL] [GID _fdiv]
98: [ZADD] [REGNO ESP],[CONST 4]
99: [ZCALL] [GID _fdcvt]
100: [ZMOV] [AL], [LO R]
101: [IFV] [ZCALL] [GID _dfcvt]
102:
103: / Hardware coprocessor (NDP) floating point.
104: % PEFFECT|PVALUE|PNDP
105: FLOAT FPAC * FPAC FPAC
106: ADR|LV FLOAT
107: TREG FF64
108: [TL ZFRDIVD] [AL]
109: [IFV] [TL ZFSTD] [AL]
110: [IFE] [TL ZFSTPD] [AL]
111:
112: //////////
113: / end of n1/i386/tables/adiv.t
114: //////////
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.