Pristine Ack-5.5
[Ack-5.5.git] / mach / i386 / as / mach3.c
1 /*
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".
4  */
5 #define RCSID3 "$Id: mach3.c,v 1.13 1996/04/25 08:38:04 ceriel Exp $"
6
7 /*
8  * INTEL 80386 keywords
9  *
10  * No system registers for now ...
11  */
12
13 0,      USE16,          0,              ".use16",
14 0,      USE32,          0,              ".use32",
15 0,      R32,            0,              "ax",
16 0,      R32,            1,              "cx",
17 0,      R32,            2,              "dx",
18 0,      R32,            3,              "bx",
19 0,      R32,            4,              "sp",
20 0,      R32,            5,              "bp",
21 0,      R32,            6,              "si",
22 0,      R32,            7,              "di",
23 0,      R32,            0,              "eax",
24 0,      R32,            1,              "ecx",
25 0,      R32,            2,              "edx",
26 0,      R32,            3,              "ebx",
27 0,      R32,            4,              "esp",
28 0,      R32,            5,              "ebp",
29 0,      R32,            6,              "esi",
30 0,      R32,            7,              "edi",
31 0,      R8,             0,              "al",
32 0,      R8,             1,              "cl",
33 0,      R8,             2,              "dl",
34 0,      R8,             3,              "bl",
35 0,      R8,             4,              "ah",
36 0,      R8,             5,              "ch",
37 0,      R8,             6,              "dh",
38 0,      R8,             7,              "bh",
39 0,      RSEG,           0,              "es",
40 0,      RSEG,           1,              "cs",
41 0,      RSEG,           2,              "ss",
42 0,      RSEG,           3,              "ds",
43 0,      RSEG,           4,              "fs",
44 0,      RSEG,           5,              "gs",
45 0,      RSYSCR,         0,              "cr0",
46 0,      RSYSCR,         2,              "cr2",
47 0,      RSYSCR,         3,              "cr3",
48 0,      RSYSDR,         0,              "dr0",
49 0,      RSYSDR,         1,              "dr1",
50 0,      RSYSDR,         2,              "dr2",
51 0,      RSYSDR,         3,              "dr3",
52 0,      RSYSDR,         6,              "dr6",
53 0,      RSYSDR,         7,              "dr7",
54 0,      RSYSTR,         3,              "tr3",  /* i486 */
55 0,      RSYSTR,         4,              "tr4",  /* i486 */
56 0,      RSYSTR,         5,              "tr5",  /* i486 */
57 0,      RSYSTR,         6,              "tr6",
58 0,      RSYSTR,         7,              "tr7",
59 0,      ADDOP,          000,            "addb",
60 0,      ADDOP,          001,            "add",
61 0,      ADDOP,          010,            "orb",
62 0,      ADDOP,          011,            "or",
63 0,      ADDOP,          020,            "adcb",
64 0,      ADDOP,          021,            "adc",
65 0,      ADDOP,          030,            "sbbb",
66 0,      ADDOP,          031,            "sbb",
67 0,      ADDOP,          040,            "andb",
68 0,      ADDOP,          041,            "and",
69 0,      ADDOP,          050,            "subb",
70 0,      ADDOP,          051,            "sub",
71 0,      ADDOP,          060,            "xorb",
72 0,      ADDOP,          061,            "xor",
73 0,      ADDOP,          070,            "cmpb",
74 0,      ADDOP,          071,            "cmp",
75 0,      BITTEST,        04,             "bt",
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",
104 0,      IMUL,           00,             "imul",
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",
110 0,      INT,            0,              "int",
111 0,      IOOP,           0344,           "inb",
112 0,      IOOP,           0345,           "in",
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",
122 0,      JOP2,           0000,           "jo",
123 0,      JOP2,           0001,           "jno",
124 0,      JOP2,           0002,           "jb",
125 0,      JOP2,           0002,           "jc",
126 0,      JOP2,           0002,           "jnae",
127 0,      JOP2,           0003,           "jae",
128 0,      JOP2,           0003,           "jnb",
129 0,      JOP2,           0003,           "jnc",
130 0,      JOP2,           0004,           "je",
131 0,      JOP2,           0004,           "jz",
132 0,      JOP2,           0005,           "jne",
133 0,      JOP2,           0005,           "jnz",
134 0,      JOP2,           0006,           "jbe",
135 0,      JOP2,           0006,           "jna",
136 0,      JOP2,           0007,           "ja",
137 0,      JOP2,           0007,           "jnbe",
138 0,      JOP2,           0010,           "js",
139 0,      JOP2,           0011,           "jns",
140 0,      JOP2,           0012,           "jp",
141 0,      JOP2,           0012,           "jpe",
142 0,      JOP2,           0013,           "jnp",
143 0,      JOP2,           0013,           "jpo",
144 0,      JOP2,           0014,           "jl",
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",
150 0,      JOP2,           0017,           "jg",
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",
161 0,      MOV,            0,              "movb",
162 0,      MOV,            1,              "mov",
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",
238 0,      PUSHOP,         1,              "pop",
239 0,      RET,            0303,           "ret",
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",
285 0,      TEST,           0,              "testb",
286 0,      TEST,           1,              "test",
287 0,      XCHG,           0,              "xchgb",
288 0,      XCHG,           1,              "xchg",
289 0,      ARPLOP,         0143,           "arpl",
290
291 /* Intel 80[23]87 coprocessor keywords */
292
293 0,      ST,             0,                      "st",
294
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",
329
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",
387
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",
397
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",
410
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",
420