Pristine Ack-5.5
[Ack-5.5.git] / mach / i86 / 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 3.9 1994/11/16 14:43:42 ceriel Exp $"
6
7 /*
8  * INTEL 8086 keywords
9  */
10
11 0,      R16,            0,              "ax",
12 0,      R16,            1,              "cx",
13 0,      R16,            2,              "dx",
14 0,      R16,            3,              "bx",
15 0,      R16,            4,              "sp",
16 0,      R16,            5,              "bp",
17 0,      R16,            6,              "si",
18 0,      R16,            7,              "di",
19 0,      R8,             0,              "al",
20 0,      R8,             1,              "cl",
21 0,      R8,             2,              "dl",
22 0,      R8,             3,              "bl",
23 0,      R8,             4,              "ah",
24 0,      R8,             5,              "ch",
25 0,      R8,             6,              "dh",
26 0,      R8,             7,              "bh",
27 0,      RSEG,           0,              "es",
28 0,      RSEG,           1,              "cs",
29 0,      RSEG,           2,              "ss",
30 0,      RSEG,           3,              "ds",
31 0,      PREFIX,         046,            "eseg",
32 0,      PREFIX,         056,            "cseg",
33 0,      PREFIX,         066,            "sseg",
34 0,      PREFIX,         076,            "dseg",
35 0,      PREFIX,         0360,           "lock",
36 0,      PREFIX,         0363,           "rep",
37 0,      PREFIX,         0362,           "repne",
38 0,      PREFIX,         0362,           "repnz",
39 0,      PREFIX,         0363,           "repe",
40 0,      PREFIX,         0363,           "repz",
41 0,      NOOP_1,         047,            "daa",
42 0,      NOOP_1,         057,            "das",
43 0,      NOOP_1,         067,            "aaa",
44 0,      NOOP_1,         077,            "aas",
45 0,      NOOP_1,         0220,           "nop",
46 0,      NOOP_1,         0230,           "cbw",
47 0,      NOOP_1,         0231,           "cwd",
48 0,      NOOP_1,         0233,           "wait",
49 0,      NOOP_1,         0234,           "pushf",
50 0,      NOOP_1,         0235,           "popf",
51 0,      NOOP_1,         0236,           "sahf",
52 0,      NOOP_1,         0237,           "lahf",
53 0,      NOOP_1,         0244,           "movsb",
54 0,      NOOP_1,         0245,           "movs",
55 0,      NOOP_1,         0245,           "movsw",
56 0,      NOOP_1,         0246,           "cmpsb",
57 0,      NOOP_1,         0247,           "cmps",
58 0,      NOOP_1,         0247,           "cmpsw",
59 0,      NOOP_1,         0252,           "stosb",
60 0,      NOOP_1,         0253,           "stos",
61 0,      NOOP_1,         0253,           "stosw",
62 0,      NOOP_1,         0254,           "lodsb",
63 0,      NOOP_1,         0255,           "lods",
64 0,      NOOP_1,         0255,           "lodsw",
65 0,      NOOP_1,         0256,           "scasb",
66 0,      NOOP_1,         0257,           "scas",
67 0,      NOOP_1,         0257,           "scasw",
68 0,      NOOP_1,         0316,           "into",
69 0,      NOOP_1,         0317,           "iret",
70 0,      NOOP_1,         0327,           "xlat",
71 0,      NOOP_1,         0364,           "hlt",
72 0,      NOOP_1,         0365,           "cmc",
73 0,      NOOP_1,         0370,           "clc",
74 0,      NOOP_1,         0371,           "stc",
75 0,      NOOP_1,         0372,           "cli",
76 0,      NOOP_1,         0373,           "sti",
77 0,      NOOP_1,         0374,           "cld",
78 0,      NOOP_1,         0375,           "std",
79 0,      NOOP_2,         0324+012<<8,    "aam",
80 0,      NOOP_2,         0325+012<<8,    "aad",
81 0,      JOP,            0340,           "loopne",
82 0,      JOP,            0340,           "loopnz",
83 0,      JOP,            0341,           "loope",
84 0,      JOP,            0341,           "loopz",
85 0,      JOP,            0342,           "loop",
86 0,      JOP,            0343,           "jcxz",
87 0,      JOP,            0160,           "jo",
88 0,      JOP,            0161,           "jno",
89 0,      JOP,            0162,           "jb",
90 0,      JOP,            0162,           "jc",
91 0,      JOP,            0162,           "jnae",
92 0,      JOP,            0163,           "jae",
93 0,      JOP,            0163,           "jnb",
94 0,      JOP,            0163,           "jnc",
95 0,      JOP,            0164,           "je",
96 0,      JOP,            0164,           "jz",
97 0,      JOP,            0165,           "jne",
98 0,      JOP,            0165,           "jnz",
99 0,      JOP,            0166,           "jbe",
100 0,      JOP,            0166,           "jna",
101 0,      JOP,            0167,           "ja",
102 0,      JOP,            0167,           "jnbe",
103 0,      JOP,            0170,           "js",
104 0,      JOP,            0171,           "jns",
105 0,      JOP,            0172,           "jp",
106 0,      JOP,            0172,           "jpe",
107 0,      JOP,            0173,           "jnp",
108 0,      JOP,            0173,           "jpo",
109 0,      JOP,            0174,           "jl",
110 0,      JOP,            0174,           "jnge",
111 0,      JOP,            0175,           "jge",
112 0,      JOP,            0175,           "jnl",
113 0,      JOP,            0176,           "jle",
114 0,      JOP,            0176,           "jng",
115 0,      JOP,            0177,           "jg",
116 0,      JOP,            0177,           "jnle",
117 0,      PUSHOP,         0,              "push",
118 0,      PUSHOP,         1,              "pop",
119 0,      IOOP,           0344,           "inb",
120 0,      IOOP,           0345,           "in",
121 0,      IOOP,           0345,           "inw",
122 0,      IOOP,           0346,           "outb",
123 0,      IOOP,           0347,           "out",
124 0,      IOOP,           0347,           "outw",
125 0,      ADDOP,          000,            "addb",
126 0,      ADDOP,          001,            "add",
127 0,      ADDOP,          010,            "orb",
128 0,      ADDOP,          011,            "or",
129 0,      ADDOP,          020,            "adcb",
130 0,      ADDOP,          021,            "adc",
131 0,      ADDOP,          030,            "sbbb",
132 0,      ADDOP,          031,            "sbb",
133 0,      ADDOP,          040,            "andb",
134 0,      ADDOP,          041,            "and",
135 0,      ADDOP,          050,            "subb",
136 0,      ADDOP,          051,            "sub",
137 0,      ADDOP,          060,            "xorb",
138 0,      ADDOP,          061,            "xor",
139 0,      ADDOP,          070,            "cmpb",
140 0,      ADDOP,          071,            "cmp",
141 0,      ROLOP,          000,            "rolb",
142 0,      ROLOP,          001,            "rol",
143 0,      ROLOP,          010,            "rorb",
144 0,      ROLOP,          011,            "ror",
145 0,      ROLOP,          020,            "rclb",
146 0,      ROLOP,          021,            "rcl",
147 0,      ROLOP,          030,            "rcrb",
148 0,      ROLOP,          031,            "rcr",
149 0,      ROLOP,          040,            "salb",
150 0,      ROLOP,          040,            "shlb",
151 0,      ROLOP,          041,            "sal",
152 0,      ROLOP,          041,            "shl",
153 0,      ROLOP,          050,            "shrb",
154 0,      ROLOP,          051,            "shr",
155 0,      ROLOP,          070,            "sarb",
156 0,      ROLOP,          071,            "sar",
157 0,      INCOP,          000,            "incb",
158 0,      INCOP,          001,            "inc",
159 0,      INCOP,          010,            "decb",
160 0,      INCOP,          011,            "dec",
161 0,      NOTOP,          020,            "notb",
162 0,      NOTOP,          021,            "not",
163 0,      NOTOP,          030,            "negb",
164 0,      NOTOP,          031,            "neg",
165 0,      NOTOP,          040,            "mulb",
166 0,      NOTOP,          041,            "mul",
167 0,      NOTOP,          050,            "imulb",
168 0,      IMUL,           051,            "imul",         /* for 80286 */
169 0,      NOTOP,          060,            "divb",
170 0,      NOTOP,          061,            "div",
171 0,      NOTOP,          070,            "idivb",
172 0,      NOTOP,          071,            "idiv",
173 0,      CALLOP,         020+(0350<<8),  "call",
174 0,      CALLOP,         040+(0351<<8),  "jmp",
175 0,      CALFOP,         030+(0232<<8),  "callf",
176 0,      CALFOP,         050+(0352<<8),  "jmpf",
177 0,      LEAOP,          0215,           "lea",
178 0,      LEAOP,          0304,           "les",
179 0,      LEAOP,          0305,           "lds",
180 0,      ESC,            0,              "esc",
181 0,      INT,            0,              "int",
182 0,      RET,            0303,           "ret",
183 0,      RET,            0313,           "retf",
184 0,      XCHG,           0,              "xchgb",
185 0,      XCHG,           1,              "xchg",
186 0,      TEST,           0,              "testb",
187 0,      TEST,           1,              "test",
188 0,      MOV,            0,              "movb",
189 0,      MOV,            1,              "mov",
190 0,      MOV,            1,              "movw",
191
192 /* Intel 8087 coprocessor keywords */
193
194 0,      ST,             0,                      "st",
195
196 0,      FNOOP,          FESC+1+(0xF0<<8),       "f2xm1",
197 0,      FNOOP,          FESC+1+(0xE1<<8),       "fabs",
198 0,      FNOOP,          FESC+1+(0xE0<<8),       "fchs",
199 0,      FNOOP,          FESC+3+(0xE2<<8),       "fclex",
200 0,      FNOOP,          FESC+6+(0xD9<<8),       "fcompp",
201 0,      FNOOP,          FESC+1+(0xF6<<8),       "fdecstp",
202 0,      FNOOP,          FESC+3+(0xE1<<8),       "fdisi",
203 0,      FNOOP,          FESC+3+(0xE0<<8),       "feni",
204 0,      FNOOP,          FESC+1+(0xF7<<8),       "fincstp",
205 0,      FNOOP,          FESC+3+(0xE3<<8),       "finit",
206 0,      FNOOP,          FESC+1+(0xE8<<8),       "fld1",
207 0,      FNOOP,          FESC+1+(0xEA<<8),       "fldl2e",
208 0,      FNOOP,          FESC+1+(0xE9<<8),       "fldl2t",
209 0,      FNOOP,          FESC+1+(0xEC<<8),       "fldlg2",
210 0,      FNOOP,          FESC+1+(0xED<<8),       "fldln2",
211 0,      FNOOP,          FESC+1+(0xEB<<8),       "fldpi",
212 0,      FNOOP,          FESC+1+(0xEE<<8),       "fldz",
213 0,      FNOOP,          FESC+1+(0xD0<<8),       "fnop",
214 0,      FNOOP,          FESC+1+(0xF3<<8),       "fpatan",
215 0,      FNOOP,          FESC+1+(0xF8<<8),       "fprem",
216 0,      FNOOP,          FESC+1+(0xF2<<8),       "fptan",
217 0,      FNOOP,          FESC+1+(0xFC<<8),       "frndint",
218 0,      FNOOP,          FESC+1+(0xFD<<8),       "fscale",
219 0,      FNOOP,          FESC+1+(0xFA<<8),       "fsqrt",
220 0,      FNOOP,          FESC+7+(0xE0<<8),       "fstswax", /* 80287 */
221 0,      FNOOP,          FESC+1+(0xE4<<8),       "ftst",
222 0,      FNOOP,          FESC+1+(0xE5<<8),       "fxam",
223 0,      FNOOP,          FESC+1+(0xF4<<8),       "fxtract",
224 0,      FNOOP,          FESC+1+(0xF1<<8),       "fyl2x",
225 0,      FNOOP,          FESC+1+(0xF9<<8),       "fyl2pi",
226
227 0,      FMEM,           FESC+6+(0<<11),         "fiadds",
228 0,      FMEM,           FESC+2+(0<<11),         "fiaddl",
229 0,      FMEM,           FESC+0+(0<<11),         "fadds",
230 0,      FMEM,           FESC+4+(0<<11),         "faddd",
231 0,      FMEM,           FESC+7+(4<<11),         "fbld",
232 0,      FMEM,           FESC+7+(6<<11),         "fbstp",
233 0,      FMEM,           FESC+6+(2<<11),         "ficoms",
234 0,      FMEM,           FESC+2+(2<<11),         "ficoml",
235 0,      FMEM,           FESC+0+(2<<11),         "fcoms",
236 0,      FMEM,           FESC+4+(2<<11),         "fcomd",
237 0,      FMEM,           FESC+6+(3<<11),         "ficomps",
238 0,      FMEM,           FESC+2+(3<<11),         "ficompl",
239 0,      FMEM,           FESC+0+(3<<11),         "fcomps",
240 0,      FMEM,           FESC+4+(3<<11),         "fcompd",
241 0,      FMEM,           FESC+6+(6<<11),         "fidivs",
242 0,      FMEM,           FESC+2+(6<<11),         "fidivl",
243 0,      FMEM,           FESC+0+(6<<11),         "fdivs",
244 0,      FMEM,           FESC+4+(6<<11),         "fdivd",
245 0,      FMEM,           FESC+6+(7<<11),         "fidivrs",
246 0,      FMEM,           FESC+2+(7<<11),         "fidivrl",
247 0,      FMEM,           FESC+0+(7<<11),         "fdivrs",
248 0,      FMEM,           FESC+4+(7<<11),         "fdivrd",
249 0,      FMEM,           FESC+7+(5<<11),         "fildq",
250 0,      FMEM,           FESC+7+(0<<11),         "filds",
251 0,      FMEM,           FESC+3+(0<<11),         "fildl",
252 0,      FMEM,           FESC+1+(0<<11),         "flds",
253 0,      FMEM,           FESC+5+(0<<11),         "fldd",
254 0,      FMEM,           FESC+3+(5<<11),         "fldx",
255 0,      FMEM,           FESC+1+(5<<11),         "fldcw",
256 0,      FMEM,           FESC+1+(4<<11),         "fldenv",
257 0,      FMEM,           FESC+6+(1<<11),         "fimuls",
258 0,      FMEM,           FESC+2+(1<<11),         "fimull",
259 0,      FMEM,           FESC+0+(1<<11),         "fmuls",
260 0,      FMEM,           FESC+4+(1<<11),         "fmuld",
261 0,      FMEM,           FESC+5+(4<<11),         "frstor",
262 0,      FMEM,           FESC+5+(6<<11),         "fsave",
263 0,      FMEM,           FESC+7+(2<<11),         "fists",
264 0,      FMEM,           FESC+3+(2<<11),         "fistl",
265 0,      FMEM,           FESC+1+(2<<11),         "fsts",
266 0,      FMEM,           FESC+5+(2<<11),         "fstd",
267 0,      FMEM,           FESC+7+(7<<11),         "fistpq",
268 0,      FMEM,           FESC+7+(3<<11),         "fistps",
269 0,      FMEM,           FESC+3+(3<<11),         "fistpl",
270 0,      FMEM,           FESC+1+(3<<11),         "fstps",
271 0,      FMEM,           FESC+5+(3<<11),         "fstpd",
272 0,      FMEM,           FESC+3+(7<<11),         "fstpx",
273 0,      FMEM,           FESC+1+(7<<11),         "fstcw",
274 0,      FMEM,           FESC+1+(6<<11),         "fstenv",
275 0,      FMEM,           FESC+5+(7<<11),         "fstsw",
276 0,      FMEM,           FESC+6+(4<<11),         "fisubs",
277 0,      FMEM,           FESC+2+(4<<11),         "fisubl",
278 0,      FMEM,           FESC+0+(4<<11),         "fsubs",
279 0,      FMEM,           FESC+4+(4<<11),         "fsubd",
280 0,      FMEM,           FESC+6+(5<<11),         "fisubrs",
281 0,      FMEM,           FESC+2+(5<<11),         "fisubrl",
282 0,      FMEM,           FESC+0+(5<<11),         "fsubrs",
283 0,      FMEM,           FESC+4+(5<<11),         "fsubrd",
284
285 0,      FST_I,          FESC+1+(0xC0<<8),       "fld",
286 0,      FST_I,          FESC+5+(0xD0<<8),       "fst",
287 0,      FST_I,          FESC+5+(0xC8<<8),       "fstp",
288 0,      FST_I,          FESC+1+(0xC8<<8),       "fxch",
289 0,      FST_I,          FESC+0+(0xD0<<8),       "fcom",
290 0,      FST_I,          FESC+0+(0xD8<<8),       "fcomp",
291 0,      FST_I,          FESC+5+(0xC0<<8),       "ffree",
292
293 0,      FST_ST,         FESC+0+(0xC0<<8),       "fadd",
294 0,      FST_ST,         FESC+2+(0xC0<<8),       "faddp",
295 0,      FST_ST2,        FESC+0+(0xF0<<8),       "fdiv",
296 0,      FST_ST2,        FESC+2+(0xF0<<8),       "fdivp",
297 0,      FST_ST2,        FESC+0+(0xF8<<8),       "fdivr",
298 0,      FST_ST2,        FESC+2+(0xF8<<8),       "fdivrp",
299 0,      FST_ST,         FESC+0+(0xC8<<8),       "fmul",
300 0,      FST_ST,         FESC+2+(0xC8<<8),       "fmulp",
301 0,      FST_ST2,        FESC+0+(0xE0<<8),       "fsub",
302 0,      FST_ST2,        FESC+2+(0xE0<<8),       "fsubp",
303 0,      FST_ST2,        FESC+0+(0xE8<<8),       "fsubr",
304 0,      FST_ST2,        FESC+2+(0xE8<<8),       "fsubrp",
305
306 /* 80286 keywords */
307 0,      NOOP_1,         0140,                   "pusha",
308 0,      NOOP_1,         0141,                   "popa",
309 0,      NOOP_1,         0154,                   "insb",
310 0,      NOOP_1,         0155,                   "ins",
311 0,      NOOP_1,         0155,                   "insw",
312 0,      NOOP_1,         0156,                   "outsb",
313 0,      NOOP_1,         0157,                   "outs",
314 0,      NOOP_1,         0157,                   "outsw",
315
316 0,      ARPLOP,         0143,                   "arpl",
317 0,      ENTER,          0310,                   "enter",
318 0,      NOOP_1,         0311,                   "leave",
319 0,      LEAOP,          0142,                   "bound",
320
321 0,      NOOP_2,         017+06<<8,              "clts",
322
323 0,      EXTOP,          0002,                   "lar",
324 0,      EXTOP,          0003,                   "lsl",
325
326 0,      EXTOP1,         0021,                   "lgdt",
327 0,      EXTOP1,         0001,                   "sgdt",
328 0,      EXTOP1,         0031,                   "lidt",
329 0,      EXTOP1,         0011,                   "sidt",
330 0,      EXTOP1,         0020,                   "lldt",
331 0,      EXTOP1,         0000,                   "sldt",
332 0,      EXTOP1,         0030,                   "ltr",
333 0,      EXTOP1,         0010,                   "str",
334 0,      EXTOP1,         0061,                   "lmsw",
335 0,      EXTOP1,         0041,                   "smsw",
336 0,      EXTOP1,         0050,                   "verw",
337 0,      EXTOP1,         0040,                   "verr",