|
|
1.1 root 1: /////////
2: /
3: / Relationals.
4: / Handles only test contexts, since other parts of the compiler transform
5: / all other contexts (like value) into the required '?' and ':' operations.
6: / Some special things handle bytes in a slightly better way than the default
7: / (saving the 'cbw') and other special things handle pointers.
8: / Pointers are compared for equality by comparing both segment and offset.
9: / Pointers are compared for inequality by comparing only the offset;
10: / the C code always assumes OPTIMIZE(3).
11: /
12: /////////
13:
14: EQ:
15: NE:
16: GT:
17: GE:
18: LT:
19: LE:
20: ULT:
21: ULE:
22: UGT:
23: UGE:
24:
25: /////////
26: /
27: / Simple stuff.
28: / Words and bytes.
29: / An immediate can be compared to any addressable thing.
30: / Special things for the byte compare to avoid the CBW.
31: /
32: /////////
33:
34: % PREL
35: * NONE * * NONE
36: ADR BYTE
37: BYTE|MMX WORD
38: [ZCMPB] [AL],[AR]
39: [REL0] [LAB]
40:
41: % PREL
42: * NONE * * NONE
43: ADR|MMX WORD
44: IMM|MMX WORD
45: % PREL
46: * NONE * * NONE
47: RREG|LREG|MMX WORD
48: ADR|IMM WORD
49: [ZCMP] [AL],[AR]
50: [REL0] [LAB]
51:
52: % PREL|P_SLT
53: * ANYR ANYR * NONE
54: TREG BYTE
55: ADR|IMM BYTE
56: [ZCMPB] [LO R],[AR]
57: [REL0] [LAB]
58:
59: % PREL
60: * AX * * NONE
61: ADR BYTE
62: ADR|IMM BYTE
63: [ZMOVB] [LO R],[AL]
64: [ZCMPB] [LO R],[AR]
65: [REL0] [LAB]
66:
67: % PREL|P_SLT
68: * ANYR ANYR * NONE
69: TREG WORD
70: ADR|IMM WORD
71: [ZCMP] [R],[AR]
72: [REL0] [LAB]
73:
74: /////////
75: /
76: / Longs and pointers.
77: / Equality.
78: /
79: /////////
80:
81: % PEQ
82: WORD NONE * * NONE
83: ADR LONG
84: IMM|MMX LONG
85: [ZCMP] [HI AL],[HI AR]
86: [ZJNE] [LAB1]
87: [ZCMP] [LO AL],[LO AR]
88: [ZJE] [LAB]
89: [DLAB1]:
90:
91: % PEQ
92: * NONE ANYR * NONE
93: TREG LONG
94: UHC|MMX LONG
95: [ZOR] [HI RL],[HI RL]
96: [ZJNE] [LAB1]
97: [ZCMP] [LO RL],[LO AR]
98: [ZJE] [LAB]
99: [DLAB1]:
100:
101: % PEQ
102: * NONE ANYR * NONE
103: TREG LONG
104: LHC|MMX LONG
105: [ZCMP] [HI RL],[HI AR]
106: [ZJNE] [LAB1]
107: [ZOR] [LO RL],[LO RL]
108: [ZJE] [LAB]
109: [DLAB1]:
110:
111: % PEQ
112: * NONE ANYR * NONE
113: TREG LONG
114: ADR|IMM LONG
115: #ifndef ONLYSMALL
116: % PEQ
117: * NONE ANYR * NONE
118: TREG LPTX
119: ADR LPTX
120: #endif
121: [ZCMP] [HI RL],[HI AR]
122: [ZJNE] [LAB1]
123: [ZCMP] [LO RL],[LO AR]
124: [ZJE] [LAB]
125: [DLAB1]:
126:
127: #ifndef ONLYSMALL
128: % PEQ
129: * NONE ANYR * NONE
130: TREG LPTX
131: ADR|IMM WORD
132: [ZOR] [HI RL],[HI RL]
133: [ZJNE] [LAB1]
134: [ZCMP] [LO RL],[AR]
135: [ZJE] [LAB]
136: [DLAB1]:
137:
138: % PEQ
139: WORD ANYR ANYR * TEMP
140: TREG WORD
141: ADR|IMM LPTX
142: [ZMOV] [R],[HI AR]
143: [ZOR] [R],[R]
144: [ZJNE] [LAB1]
145: [ZCMP] [RL],[LO AR]
146: [ZJE] [LAB]
147: [DLAB1]:
148: #endif
149:
150: /////////
151: /
152: / Inequality. Slightly different code for longs.
153: /
154: /////////
155:
156: % PNE
157: * NONE * * NONE
158: ADR LONG
159: IMM|MMX LONG
160: [ZCMP] [HI AL],[HI AR]
161: [ZJNE] [LAB]
162: [ZCMP] [LO AL],[LO AR]
163: [ZJNE] [LAB]
164:
165: % PNE
166: * NONE ANYR * NONE
167: TREG LONG
168: UHC|MMX LONG
169: [ZOR] [HI RL],[HI RL]
170: [ZJNE] [LAB]
171: [ZCMP] [LO RL],[LO AR]
172: [ZJNE] [LAB]
173:
174: % PNE
175: * NONE ANYR * NONE
176: TREG LONG
177: LHC|MMX LONG
178: [ZCMP] [HI RL],[HI AR]
179: [ZJNE] [LAB]
180: [ZOR] [LO RL],[LO RL]
181: [ZJNE] [LAB]
182:
183: % PNE
184: * NONE ANYR * NONE
185: TREG LONG
186: ADR|IMM LONG
187: #ifndef ONLYSMALL
188: % PNE
189: * NONE ANYR * NONE
190: TREG LPTX
191: ADR LPTX
192: #endif
193: [ZCMP] [HI RL],[HI AR]
194: [ZJNE] [LAB]
195: [ZCMP] [LO RL],[LO AR]
196: [ZJNE] [LAB]
197:
198: #ifndef ONLYSMALL
199: % PNE
200: * NONE ANYR * NONE
201: TREG LPTX
202: ADR|IMM WORD
203: [ZOR] [HI RL],[HI RL]
204: [ZJNE] [LAB]
205: [ZCMP] [LO RL],[AR]
206: [ZJNE] [LAB]
207:
208: % PNE
209: WORD ANYR ANYR * TEMP
210: TREG WORD
211: ADR|IMM LPTX
212: [ZMOV] [R],[HI AR]
213: [ZOR] [R],[R]
214: [ZJNE] [LAB]
215: [ZCMP] [RL],[LO AR]
216: [ZJNE] [LAB]
217: #endif
218:
219: /////////
220: /
221: / All the rest.
222: /
223: /////////
224:
225: #ifndef ONLYSMALL
226: % PNEREL
227: * NONE * * NONE
228: ADR LPTX
229: IMM|MMX LPTX
230: [ZCMP] [LO AL],[LO AR]
231: [REL0] [LAB]
232:
233: % PNEREL
234: * NONE ANYR * NONE
235: TREG LPTX
236: ADR LPTX
237: [ZCMP] [LO RL],[LO AR]
238: [REL0] [LAB]
239:
240: % PNEREL
241: * NONE * * NONE
242: ADR LPTX
243: IMM|MMX WORD
244: [ZCMP] [LO AL],[AR]
245: [REL0] [LAB]
246:
247: % PNEREL
248: * NONE ANYR * NONE
249: TREG LPTX
250: ADR|IMM WORD
251: [ZCMP] [LO RL],[AR]
252: [REL0] [LAB]
253:
254: % PNEREL
255: * NONE * * NONE
256: ADR WORD
257: IMM|MMX LPTX
258: [ZCMP] [AL],[LO AR]
259: [REL0] [LAB]
260:
261: % PNEREL
262: * NONE ANYR * NONE
263: TREG WORD
264: ADR|IMM LPTX
265: [ZCMP] [RL],[LO AR]
266: [REL0] [LAB]
267: #endif
268:
269: % PNEREL
270: * NONE * * NONE
271: ADR LONG
272: IMM|MMX LONG
273: [ZCMP] [HI AL],[HI AR]
274: [LREL1] [LAB1]
275: [LREL0] [LAB]
276: [ZCMP] [LO AL],[LO AR]
277: [LREL2] [LAB]
278: [DLAB1]:
279:
280: % PNEREL
281: * NONE ANYR * NONE
282: TREG LONG
283: UHC|MMX LONG
284: [ZOR] [HI RL],[HI RL]
285: [LREL1] [LAB1]
286: [LREL0] [LAB]
287: [ZCMP] [LO RL],[LO AR]
288: [LREL2] [LAB]
289: [DLAB1]:
290:
291: % PNEREL
292: * NONE ANYR * NONE
293: TREG LONG
294: ADR|IMM LONG
295: [ZCMP] [HI RL],[HI AR]
296: [LREL1] [LAB1]
297: [LREL0] [LAB]
298: [ZCMP] [LO RL],[LO AR]
299: [LREL2] [LAB]
300: [DLAB1]:
301:
302: ////////
303: /
304: / Floating point, using the numeric data coprocessor (8087).
305: /
306: ////////
307:
308: #ifdef NDPDEF
309: % PREL
310: * * FPAC * NONE
311: TREG FF64
312: ADR FS16
313: [ZFCOMPI] [AR]
314: [CALL] [GID cfcc]
315: [REL0] [LAB]
316:
317: % PREL|P_SLT
318: * * FPAC * NONE
319: TREG FF64
320: ADR FS32
321: [ZFCOMPL] [AR]
322: [CALL] [GID cfcc]
323: [REL0] [LAB]
324:
325: % PREL|P_SLT
326: * * FPAC * NONE
327: TREG FF64
328: ADR FF32
329: [ZFCOMPF] [AR]
330: [CALL] [GID cfcc]
331: [REL0] [LAB]
332:
333: % PREL|P_SLT
334: * * FPAC * NONE
335: TREG FF64
336: ADR FF64
337: [ZFCOMPD] [AR]
338: [CALL] [GID cfcc]
339: [REL0] [LAB]
340: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.