2 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3 * See the copyright notice in the ACK home directory, in the file "Copyright".
5 #define RCSID3 "$Id: mach3.c,v 1.13 1996/04/25 08:38:04 ceriel Exp $"
10 * No system registers for now ...
13 0, USE16, 0, ".use16",
14 0, USE32, 0, ".use32",
54 0, RSYSTR, 3, "tr3", /* i486 */
55 0, RSYSTR, 4, "tr4", /* i486 */
56 0, RSYSTR, 5, "tr5", /* i486 */
59 0, ADDOP, 000, "addb",
63 0, ADDOP, 020, "adcb",
65 0, ADDOP, 030, "sbbb",
67 0, ADDOP, 040, "andb",
69 0, ADDOP, 050, "subb",
71 0, ADDOP, 060, "xorb",
73 0, ADDOP, 070, "cmpb",
76 0, BITTEST, 05, "bts",
77 0, BITTEST, 06, "btr",
78 0, BITTEST, 07, "btc",
79 0, CALFOP, 030+(0232<<8), "callf",
80 0, CALFOP, 050+(0352<<8), "jmpf",
81 0, CALLOP, 020+(0350<<8), "call",
82 0, CALLOP, 040+(0351<<8), "jmp",
83 0, ENTER, 0310, "enter",
84 0, EXTEND, 0267, "movzx",
85 0, EXTEND, 0266, "movzxb",
86 0, EXTEND, 0277, "movsx",
87 0, EXTEND, 0276, "movsxb",
88 0, EXTOP, 0002, "lar",
89 0, EXTOP, 0003, "lsl",
90 0, EXTOP, 0274, "bsf",
91 0, EXTOP, 0275, "bsr",
92 0, EXTOP1, 0000, "sldt",
93 0, EXTOP1, 0001, "sgdt",
94 0, EXTOP1, 0010, "str",
95 0, EXTOP1, 0011, "sidt",
96 0, EXTOP1, 0020, "lldt",
97 0, EXTOP1, 0021, "lgdt",
98 0, EXTOP1, 0030, "ltr",
99 0, EXTOP1, 0031, "lidt",
100 0, EXTOP1, 0040, "verr",
101 0, EXTOP1, 0041, "smsw",
102 0, EXTOP1, 0050, "verw",
103 0, EXTOP1, 0061, "lmsw",
105 0, IMULB, 050, "imulb",
106 0, INCOP, 000, "incb",
107 0, INCOP, 001, "inc",
108 0, INCOP, 010, "decb",
109 0, INCOP, 011, "dec",
111 0, IOOP, 0344, "inb",
113 0, IOOP, 0346, "outb",
114 0, IOOP, 0347, "out",
115 0, JOP, 0340, "loopne",
116 0, JOP, 0340, "loopnz",
117 0, JOP, 0341, "loope",
118 0, JOP, 0341, "loopz",
119 0, JOP, 0342, "loop",
120 0, JOP, 0343, "jcxz",
121 0, JOP, 0343, "jecxz",
123 0, JOP2, 0001, "jno",
126 0, JOP2, 0002, "jnae",
127 0, JOP2, 0003, "jae",
128 0, JOP2, 0003, "jnb",
129 0, JOP2, 0003, "jnc",
132 0, JOP2, 0005, "jne",
133 0, JOP2, 0005, "jnz",
134 0, JOP2, 0006, "jbe",
135 0, JOP2, 0006, "jna",
137 0, JOP2, 0007, "jnbe",
139 0, JOP2, 0011, "jns",
141 0, JOP2, 0012, "jpe",
142 0, JOP2, 0013, "jnp",
143 0, JOP2, 0013, "jpo",
145 0, JOP2, 0014, "jnge",
146 0, JOP2, 0015, "jge",
147 0, JOP2, 0015, "jnl",
148 0, JOP2, 0016, "jle",
149 0, JOP2, 0016, "jng",
151 0, JOP2, 0017, "jnle",
152 0, LEAOP, 0142, "bound",
153 0, LEAOP, 0215, "lea",
154 0, LEAOP, 0304, "les",
155 0, LEAOP, 0305, "lds",
156 0, LEAOP2, 0262, "lss",
157 0, LEAOP2, 0264, "lfs",
158 0, LEAOP2, 0265, "lgs",
159 0, LSHFT, 0244, "shld",
160 0, LSHFT, 0254, "shrd",
163 0, NOOP_1, 0140, "pusha",
164 0, NOOP_1, 0140, "pushad",
165 0, NOOP_1, 0141, "popa",
166 0, NOOP_1, 0141, "popad",
167 0, NOOP_1, 0156, "outsb",
168 0, NOOP_1, 0157, "outs",
169 0, NOOP_1, 0220, "nop",
170 0, NOOP_1, 0230, "cbw",
171 0, NOOP_1, 0230, "cwde", /* same opcode as cbw! */
172 0, NOOP_1, 0231, "cdq", /* same opcode as cwd! */
173 0, NOOP_1, 0231, "cwd",
174 0, NOOP_1, 0233, "wait",
175 0, NOOP_1, 0234, "pushf",
176 0, NOOP_1, 0235, "popf",
177 0, NOOP_1, 0236, "sahf",
178 0, NOOP_1, 0237, "lahf",
179 0, NOOP_1, 0244, "movsb",
180 0, NOOP_1, 0245, "movs",
181 0, NOOP_1, 0246, "cmpsb",
182 0, NOOP_1, 0154, "insb",
183 0, NOOP_1, 0247, "cmps",
184 0, NOOP_1, 0155, "ins",
185 0, NOOP_1, 0252, "stosb",
186 0, NOOP_1, 0253, "stos",
187 0, NOOP_1, 0254, "lodsb",
188 0, NOOP_1, 0255, "lods",
189 0, NOOP_1, 0256, "scasb",
190 0, NOOP_1, 0257, "scas",
191 0, NOOP_1, 0311, "leave",
192 0, NOOP_1, 0316, "into",
193 0, NOOP_1, 0317, "iret",
194 0, NOOP_1, 0317, "iretd",
195 0, NOOP_1, 0327, "xlat",
196 0, NOOP_1, 0364, "hlt",
197 0, NOOP_1, 0365, "cmc",
198 0, NOOP_1, 0370, "clc",
199 0, NOOP_1, 0371, "stc",
200 0, NOOP_1, 0372, "cli",
201 0, NOOP_1, 0373, "sti",
202 0, NOOP_1, 0374, "cld",
203 0, NOOP_1, 0375, "std",
204 0, NOOP_1, 047, "daa",
205 0, NOOP_1, 057, "das",
206 0, NOOP_1, 067, "aaa",
207 0, NOOP_1, 077, "aas",
208 0, NOOP_2, 017+(06<<8), "clts",
209 0, NOOP_2, 0324+(012<<8), "aam",
210 0, NOOP_2, 0325+(012<<8), "aad",
211 0, NOTOP, 020, "notb",
212 0, NOTOP, 021, "not",
213 0, NOTOP, 030, "negb",
214 0, NOTOP, 031, "neg",
215 0, NOTOP, 040, "mulb",
216 0, NOTOP, 041, "mul",
217 0, NOTOP, 060, "divb",
218 0, NOTOP, 061, "div",
219 0, NOTOP, 070, "idivb",
220 0, NOTOP, 071, "idiv",
221 0, PREFIX, 0144, "fseg",
222 0, PREFIX, 0145, "gseg",
223 0, OTOGGLE, 0146, "o16", /* operand size toggle */
224 0, OTOGGLE, 0346, "o32", /* operand size toggle */
225 0, ATOGGLE, 0147, "a16", /* address size toggle */
226 0, ATOGGLE, 0347, "a32", /* address size toggle */
227 0, PREFIX, 0360, "lock",
228 0, PREFIX, 0362, "repne",
229 0, PREFIX, 0362, "repnz",
230 0, PREFIX, 0363, "rep",
231 0, PREFIX, 0363, "repe",
232 0, PREFIX, 0363, "repz",
233 0, PREFIX, 046, "eseg",
234 0, PREFIX, 056, "cseg",
235 0, PREFIX, 066, "sseg",
236 0, PREFIX, 076, "dseg",
237 0, PUSHOP, 0, "push",
240 0, RET, 0313, "retf",
241 0, ROLOP, 000, "rolb",
242 0, ROLOP, 001, "rol",
243 0, ROLOP, 010, "rorb",
244 0, ROLOP, 011, "ror",
245 0, ROLOP, 020, "rclb",
246 0, ROLOP, 021, "rcl",
247 0, ROLOP, 030, "rcrb",
248 0, ROLOP, 031, "rcr",
249 0, ROLOP, 040, "salb",
250 0, ROLOP, 040, "shlb",
251 0, ROLOP, 041, "sal",
252 0, ROLOP, 041, "shl",
253 0, ROLOP, 050, "shrb",
254 0, ROLOP, 051, "shr",
255 0, ROLOP, 070, "sarb",
256 0, ROLOP, 071, "sar",
257 0, SETCC, 0000, "seto",
258 0, SETCC, 0001, "setno",
259 0, SETCC, 0002, "setb",
260 0, SETCC, 0002, "setnae",
261 0, SETCC, 0003, "setae",
262 0, SETCC, 0003, "setnb",
263 0, SETCC, 0004, "sete",
264 0, SETCC, 0004, "setz",
265 0, SETCC, 0005, "setne",
266 0, SETCC, 0005, "setnz",
267 0, SETCC, 0006, "setbe",
268 0, SETCC, 0006, "setna",
269 0, SETCC, 0007, "seta",
270 0, SETCC, 0007, "setnbe",
271 0, SETCC, 0010, "sets",
272 0, SETCC, 0011, "setns",
273 0, SETCC, 0012, "setp",
274 0, SETCC, 0012, "setpe",
275 0, SETCC, 0013, "setnp",
276 0, SETCC, 0013, "setpo",
277 0, SETCC, 0014, "setl",
278 0, SETCC, 0014, "setnge",
279 0, SETCC, 0015, "setge",
280 0, SETCC, 0015, "setnl",
281 0, SETCC, 0016, "setle",
282 0, SETCC, 0016, "setng",
283 0, SETCC, 0017, "setg",
284 0, SETCC, 0017, "setnle",
289 0, ARPLOP, 0143, "arpl",
291 /* Intel 80[23]87 coprocessor keywords */
295 0, FNOOP, FESC+1+(0xF0<<8), "f2xm1",
296 0, FNOOP, FESC+1+(0xE1<<8), "fabs",
297 0, FNOOP, FESC+1+(0xE0<<8), "fchs",
298 0, FNOOP, FESC+3+(0xE2<<8), "fclex",
299 0, FNOOP, FESC+6+(0xD9<<8), "fcompp",
300 0, FNOOP, FESC+2+(0xE9<<8), "fucompp",
301 0, FNOOP, FESC+1+(0xF6<<8), "fdecstp",
302 0, FNOOP, FESC+3+(0xE1<<8), "fdisi",
303 0, FNOOP, FESC+3+(0xE0<<8), "feni",
304 0, FNOOP, FESC+1+(0xF7<<8), "fincstp",
305 0, FNOOP, FESC+3+(0xE3<<8), "finit",
306 0, FNOOP, FESC+1+(0xE8<<8), "fld1",
307 0, FNOOP, FESC+1+(0xEA<<8), "fldl2e",
308 0, FNOOP, FESC+1+(0xE9<<8), "fldl2t",
309 0, FNOOP, FESC+1+(0xEC<<8), "fldlg2",
310 0, FNOOP, FESC+1+(0xED<<8), "fldln2",
311 0, FNOOP, FESC+1+(0xEB<<8), "fldpi",
312 0, FNOOP, FESC+1+(0xEE<<8), "fldz",
313 0, FNOOP, FESC+1+(0xD0<<8), "fnop",
314 0, FNOOP, FESC+1+(0xF3<<8), "fpatan",
315 0, FNOOP, FESC+1+(0xFF<<8), "fcos",
316 0, FNOOP, FESC+1+(0xFE<<8), "fsin",
317 0, FNOOP, FESC+1+(0xFB<<8), "fsincos",
318 0, FNOOP, FESC+1+(0xF8<<8), "fprem",
319 0, FNOOP, FESC+1+(0xF5<<8), "fprem1",
320 0, FNOOP, FESC+1+(0xF2<<8), "fptan",
321 0, FNOOP, FESC+1+(0xFC<<8), "frndint",
322 0, FNOOP, FESC+1+(0xFD<<8), "fscale",
323 0, FNOOP, FESC+1+(0xFA<<8), "fsqrt",
324 0, FNOOP, FESC+1+(0xE4<<8), "ftst",
325 0, FNOOP, FESC+1+(0xE5<<8), "fxam",
326 0, FNOOP, FESC+1+(0xF4<<8), "fxtract",
327 0, FNOOP, FESC+1+(0xF1<<8), "fyl2x",
328 0, FNOOP, FESC+1+(0xF9<<8), "fyl2xp1",
330 0, FMEM, FESC+6+(0<<11), "fiadds",
331 0, FMEM, FESC+2+(0<<11), "fiaddl",
332 0, FMEM, FESC+0+(0<<11), "fadds",
333 0, FMEM, FESC+4+(0<<11), "faddd",
334 0, FMEM, FESC+7+(4<<11), "fbld",
335 0, FMEM, FESC+7+(6<<11), "fbstp",
336 0, FMEM, FESC+6+(2<<11), "ficoms",
337 0, FMEM, FESC+2+(2<<11), "ficoml",
338 0, FMEM, FESC+0+(2<<11), "fcoms",
339 0, FMEM, FESC+4+(2<<11), "fcomd",
340 0, FMEM, FESC+6+(3<<11), "ficomps",
341 0, FMEM, FESC+2+(3<<11), "ficompl",
342 0, FMEM, FESC+0+(3<<11), "fcomps",
343 0, FMEM, FESC+4+(3<<11), "fcompd",
344 0, FMEM, FESC+6+(6<<11), "fidivs",
345 0, FMEM, FESC+2+(6<<11), "fidivl",
346 0, FMEM, FESC+0+(6<<11), "fdivs",
347 0, FMEM, FESC+4+(6<<11), "fdivd",
348 0, FMEM, FESC+6+(7<<11), "fidivrs",
349 0, FMEM, FESC+2+(7<<11), "fidivrl",
350 0, FMEM, FESC+0+(7<<11), "fdivrs",
351 0, FMEM, FESC+4+(7<<11), "fdivrd",
352 0, FMEM, FESC+7+(5<<11), "fildq",
353 0, FMEM, FESC+7+(0<<11), "filds",
354 0, FMEM, FESC+3+(0<<11), "fildl",
355 0, FMEM, FESC+1+(0<<11), "flds",
356 0, FMEM, FESC+5+(0<<11), "fldd",
357 0, FMEM, FESC+3+(5<<11), "fldx",
358 0, FMEM, FESC+1+(5<<11), "fldcw",
359 0, FMEM, FESC+1+(4<<11), "fldenv",
360 0, FMEM, FESC+6+(1<<11), "fimuls",
361 0, FMEM, FESC+2+(1<<11), "fimull",
362 0, FMEM, FESC+0+(1<<11), "fmuls",
363 0, FMEM, FESC+4+(1<<11), "fmuld",
364 0, FMEM, FESC+5+(4<<11), "frstor",
365 0, FMEM, FESC+5+(6<<11), "fsave",
366 0, FMEM, FESC+7+(2<<11), "fists",
367 0, FMEM, FESC+3+(2<<11), "fistl",
368 0, FMEM, FESC+1+(2<<11), "fsts",
369 0, FMEM, FESC+5+(2<<11), "fstd",
370 0, FMEM, FESC+7+(7<<11), "fistpq",
371 0, FMEM, FESC+7+(3<<11), "fistps",
372 0, FMEM, FESC+3+(3<<11), "fistpl",
373 0, FMEM, FESC+1+(3<<11), "fstps",
374 0, FMEM, FESC+5+(3<<11), "fstpd",
375 0, FMEM, FESC+3+(7<<11), "fstpx",
376 0, FMEM, FESC+1+(7<<11), "fstcw",
377 0, FMEM, FESC+1+(6<<11), "fstenv",
378 0, FMEM_AX, FESC+5+(7<<11), "fstsw",
379 0, FMEM, FESC+6+(4<<11), "fisubs",
380 0, FMEM, FESC+2+(4<<11), "fisubl",
381 0, FMEM, FESC+0+(4<<11), "fsubs",
382 0, FMEM, FESC+4+(4<<11), "fsubd",
383 0, FMEM, FESC+6+(5<<11), "fisubrs",
384 0, FMEM, FESC+2+(5<<11), "fisubrl",
385 0, FMEM, FESC+0+(5<<11), "fsubrs",
386 0, FMEM, FESC+4+(5<<11), "fsubrd",
388 0, FST_I, FESC+1+(0xC0<<8), "fld",
389 0, FST_I, FESC+5+(0xD0<<8), "fst",
390 0, FST_I, FESC+5+(0xD8<<8), "fstp",
391 0, FST_I, FESC+1+(0xC8<<8), "fxch",
392 0, FST_I, FESC+0+(0xD0<<8), "fcom",
393 0, FST_I, FESC+5+(0xE0<<8), "fucom",
394 0, FST_I, FESC+0+(0xD8<<8), "fcomp",
395 0, FST_I, FESC+5+(0xE8<<8), "fucomp",
396 0, FST_I, FESC+5+(0xC0<<8), "ffree",
398 0, FST_ST, FESC+0+(0xC0<<8), "fadd",
399 0, FST_ST, FESC+2+(0xC0<<8), "faddp",
400 0, FST_ST2, FESC+0+(0xF0<<8), "fdiv",
401 0, FST_ST2, FESC+2+(0xF0<<8), "fdivp",
402 0, FST_ST2, FESC+0+(0xF8<<8), "fdivr",
403 0, FST_ST2, FESC+2+(0xF8<<8), "fdivrp",
404 0, FST_ST, FESC+0+(0xC8<<8), "fmul",
405 0, FST_ST, FESC+2+(0xC8<<8), "fmulp",
406 0, FST_ST2, FESC+0+(0xE0<<8), "fsub",
407 0, FST_ST2, FESC+2+(0xE0<<8), "fsubp",
408 0, FST_ST2, FESC+0+(0xE8<<8), "fsubr",
409 0, FST_ST2, FESC+2+(0xE8<<8), "fsubrp",
411 /* Intel 486 instructions */
412 0, EXTOPBW, 0xC0, "xaddb",
413 0, EXTOPBW, 0xC1, "xadd",
414 0, EXTOPBW, 0xB0, "cmpxchgb",
415 0, EXTOPBW, 0xB1, "cmpxchg",
416 0, BSWAP, 0xC8, "bswap",
417 0, NOOP_2, 017+(010<<8), "invd",
418 0, EXTOP1, 071, "invlpg",
419 0, NOOP_2, 017+(011<<8), "wbinvd",