|
|
1.1 root 1: /////////
2: /
3: / Addition.
4: / Check for +1 (inc) and +2 (inc, inc; thanks to Mac).
5: / Handle LARGE model addition of integers and pointers,
6: / which are OFFSET adjustments only.
7: /
8: /////////
9:
10: ADD:
11: % PEFFECT|PRVALUE|PSREL|P_SLT
12: WORD ANYR ANYR * TEMP
13: TREG WORD
14: 1|MMX *
15: % PLVALUE|P_SLT
16: WORD ANYL ANYL * TEMP
17: TREG WORD
18: 1|MMX *
19: [ZINC] [R]
20: [IFR] [REL0] [LAB]
21:
22: #ifndef ONLYSMALL
23: % PEFFECT|PRVALUE|P_SLT
24: LPTX ANYR ANYR * TEMP
25: TREG LPTX
26: 1|MMX *
27: % PLVALUE|P_SLT
28: LPTX ANYL ANYL * TEMP
29: TREG LPTX
30: 1|MMX *
31: [ZINC] [LO R]
32: #endif
33:
34: % PEFFECT|PRVALUE|PSREL|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: [ZINC] [R]
43: [ZINC] [R]
44: [IFR] [REL0] [LAB]
45:
46: #ifndef ONLYSMALL
47: % PEFFECT|PRVALUE|P_SLT
48: LPTX ANYR ANYR * TEMP
49: TREG LPTX
50: 2|MMX *
51: % PLVALUE|P_SLT
52: LPTX ANYL ANYL * TEMP
53: TREG LPTX
54: 2|MMX *
55: [ZINC] [LO R]
56: [ZINC] [LO R]
57: #endif
58:
59: % PEFFECT|PRVALUE|PSREL|P_SLT
60: WORD ANYR ANYR * TEMP
61: TREG WORD
62: ADR|IMM WORD
63: % PLVALUE|P_SLT
64: WORD ANYL ANYL * TEMP
65: TREG WORD
66: ADR|IMM WORD
67: [ZADD] [R],[AR]
68: [IFR] [REL0] [LAB]
69:
70: #ifndef ONLYSMALL
71: % PEFFECT|PRVALUE|P_SLT
72: LPTX ANYR ANYR * TEMP
73: TREG LPTX
74: ADR|IMM WORD
75: % PLVALUE|P_SLT
76: LPTX ANYL ANYL * TEMP
77: TREG LPTX
78: ADR|IMM WORD
79: [ZADD] [LO R],[AR]
80: #endif
81:
82: /////////
83: /
84: / Index like contexts.
85: / The hard tree is an integer and the
86: / result is a pointer. There are a lot of
87: / cases here, mainly to make sure the
88: / correct segment base gets moved over to
89: / the result.
90: /
91: /////////
92:
93: #ifndef ONLYSMALL
94: % PEFFECT|PRVALUE
95: LPTX DXAX AX * TEMP
96: TREG WORD
97: ICN|MMX LPTX
98: [ZADD] [LO R],[AR]
99: [ZSUB] [HI R],[HI R]
100:
101: % PLVALUE
102: LPTX ANYL LOTEMP AX TEMP
103: TREG WORD
104: ICN|MMX LPTX
105: [ZADD] [LO R],[AR]
106: [ZSUB] [REGNO AX],[REGNO AX]
107: [ZMOV] [HI R],[REGNO AX]
108:
109: % PEFFECT|PRVALUE
110: LPTX DXAX AX * TEMP
111: TREG WORD
112: LCN|MMX LPTX
113: [ZADD] [LO R],[LO AR]
114: [ZSUB] [HI R],[HI R]
115:
116: % PLVALUE
117: LPTX ANYL LOTEMP AX TEMP
118: TREG WORD
119: LCN|MMX LPTX
120: [ZADD] [LO R],[LO AR]
121: [ZMOV] [REGNO AX],[HI AR]
122: [ZMOV] [HI R],[REGNO AX]
123:
124: % PEFFECT|PRVALUE
125: LPTX DXAX AX * TEMP
126: TREG WORD
127: ACS|MMX LPTX
128: [ZADD] [LO R],[AR]
129: [ZMOV] [HI R],[REGNO CS]
130:
131: % PEFFECT|PRVALUE
132: LPTX DXAX AX * TEMP
133: TREG WORD
134: ADS|MMX LPTX
135: [ZADD] [LO R],[AR]
136: [ZMOV] [HI R],[REGNO DS]
137:
138: % PLVALUE
139: LPTX ANYL LOTEMP * TEMP
140: TREG WORD
141: ACS|MMX LPTX
142: [ZADD] [LO R],[AR]
143: [ZPUSH] [REGNO CS]
144: [ZPOP] [HI R]
145:
146: % PLVALUE
147: LPTX ANYL LOTEMP * TEMP
148: TREG WORD
149: ADS|MMX LPTX
150: [ZADD] [LO R],[AR]
151: [ZPUSH] [REGNO DS]
152: [ZPOP] [HI R]
153:
154: % PEFFECT|PRVALUE
155: LPTX DXAX AX * DXAX
156: TREG WORD
157: REG|MMX LPTX
158: [ZADD] [LO R],[LO AR]
159: [ZMOV] [HI R],[HI AR]
160:
161: % PLVALUE
162: LPTX ANYL LOTEMP * TEMP
163: TREG WORD
164: REG|MMX LPTX
165: [ZADD] [LO R],[LO AR]
166: [ZPUSH] [HI AR]
167: [ZPOP] [HI R]
168:
169: % PEFFECT|PRVALUE
170: LPTX DXAX AX * DXAX
171: TREG WORD
172: ADR LPTX
173: % PLVALUE
174: LPTX ANYL LOTEMP * TEMP
175: TREG WORD
176: ADR LPTX
177: [ZADD] [LO R],[LO AR]
178: [ZMOV] [HI R],[HI AR]
179: #endif
180:
181: % PEFFECT|PRVALUE|PGE|PLT|P_SLT
182: LONG DXAX DXAX * DXAX
183: TREG LONG
184: ADR|IMM LONG
185: [ZADD] [LO R],[LO AR]
186: [ZADC] [HI R],[HI AR]
187: [IFR] [REL1] [LAB]
188:
189: #ifndef ONLYSMALL
190: % PEFFECT|PRVALUE|P_SLT
191: LPTX ANYR ANYR * TEMP
192: TREG LPTX
193: ADR|IMM LONG
194: % PLVALUE|P_SLT
195: LPTX ANYL ANYL * TEMP
196: TREG LPTX
197: ADR|IMM LONG
198: [ZADD] [LO R],[LO AR]
199:
200: % PEFFECT|PRVALUE
201: LPTX DXAX DXAX * DXAX
202: TREG LONG
203: ADR|IMM LPTX
204: % PLVALUE
205: LPTX ESAX DXAX * DXAX
206: TREG LONG
207: ADR|IMM LPTX
208: [ZADD] [LO R],[LO AR]
209: [ZMOV] [HI R],[HI AR]
210: #endif
211:
212: /////////
213: /
214: / These special table entries make pushing offsts into structures and
215: / arrays more efficient. In particular, they improve the code for some of
216: / the standard I/O macros, when aimed at constant streams (like the stdin,
217: / stdout and stder streams).
218: /
219: /////////
220:
221: #ifndef ONLYSMALL
222: % PFNARG
223: LPTX AX * * NONE
224: ADR LPTX
225: IMM|MMX WORD
226: [ZPUSH] [HI AL]
227: [ZMOV] [R],[LO AL]
228: [ZADD] [R],[AR]
229: [ZPUSH] [R]
230:
231: % PFNARG
232: LPTX AX * * NONE
233: IMM|MMX WORD
234: ADR LPTX
235: [ZPUSH] [HI AR]
236: [ZMOV] [R],[LO AR]
237: [ZADD] [R],[AL]
238: [ZPUSH] [R]
239: #endif
240:
241: ////////
242: /
243: / Floating point, using the numeric
244: / data coprocessor (8087).
245: /
246: ////////
247:
248: #ifdef NDPDEF
249: % PRVALUE|P_SLT
250: FF32|FF64 FPAC FPAC * FPAC
251: TREG FF64
252: ADR FS16
253: [ZFADDI] [AR]
254:
255: % PRVALUE|P_SLT
256: FF32|FF64 FPAC FPAC * FPAC
257: TREG FF64
258: ADR FS32
259: [ZFADDL] [AR]
260:
261: % PRVALUE|P_SLT
262: FF32|FF64 FPAC FPAC * FPAC
263: TREG FF64
264: ADR FF32
265: [ZFADDF] [AR]
266:
267: % PRVALUE|P_SLT
268: FF32|FF64 FPAC FPAC * FPAC
269: TREG FF64
270: ADR FF64
271: [ZFADDD] [AR]
272: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.