xref: /inferno-os/utils/6l/optab.c (revision e57c7e16a3789cd4de1a3c2560d49b1ee39cd10a)
1 #include	"l.h"
2 
3 uchar	ynone[] =
4 {
5 	Ynone,	Ynone,	Zlit,	1,
6 	0
7 };
8 uchar	ytext[] =
9 {
10 	Ymb,	Yi32,	Zpseudo,1,
11 	0
12 };
13 uchar	ynop[] =
14 {
15 	Ynone,	Ynone,	Zpseudo,1,
16 	Ynone,	Yml,	Zpseudo,1,
17 	Ynone,	Yrf,	Zpseudo,1,
18 	Yml,	Ynone,	Zpseudo,1,
19 	Yrf,	Ynone,	Zpseudo,1,
20 	0
21 };
22 uchar	yxorb[] =
23 {
24 	Yi32,	Yal,	Zib_,	1,
25 	Yi32,	Ymb,	Zibo_m,	2,
26 	Yrb,	Ymb,	Zr_m,	1,
27 	Ymb,	Yrb,	Zm_r,	1,
28 	0
29 };
30 uchar	yxorl[] =
31 {
32 	Yi8,	Yml,	Zibo_m,	2,
33 	Yi32,	Yax,	Zil_,	1,
34 	Yi32,	Yml,	Zilo_m,	2,
35 	Yrl,	Yml,	Zr_m,	1,
36 	Yml,	Yrl,	Zm_r,	1,
37 	0
38 };
39 uchar	yaddl[] =
40 {
41 	Yi8,	Yml,	Zibo_m,	2,
42 	Yi32,	Yax,	Zil_,	1,
43 	Yi32,	Yml,	Zilo_m,	2,
44 	Yrl,	Yml,	Zr_m,	1,
45 	Yml,	Yrl,	Zm_r,	1,
46 	0
47 };
48 uchar	yincb[] =
49 {
50 	Ynone,	Ymb,	Zo_m,	2,
51 	0
52 };
53 uchar	yincw[] =
54 {
55 	Ynone,	Yml,	Zo_m,	2,
56 	0
57 };
58 uchar	yincl[] =
59 {
60 	Ynone,	Yml,	Zo_m,	2,
61 	0
62 };
63 uchar	ycmpb[] =
64 {
65 	Yal,	Yi32,	Z_ib,	1,
66 	Ymb,	Yi32,	Zm_ibo,	2,
67 	Ymb,	Yrb,	Zm_r,	1,
68 	Yrb,	Ymb,	Zr_m,	1,
69 	0
70 };
71 uchar	ycmpl[] =
72 {
73 	Yml,	Yi8,	Zm_ibo,	2,
74 	Yax,	Yi32,	Z_il,	1,
75 	Yml,	Yi32,	Zm_ilo,	2,
76 	Yml,	Yrl,	Zm_r,	1,
77 	Yrl,	Yml,	Zr_m,	1,
78 	0
79 };
80 uchar	yshb[] =
81 {
82 	Yi1,	Ymb,	Zo_m,	2,
83 	Yi32,	Ymb,	Zibo_m,	2,
84 	Ycx,	Ymb,	Zo_m,	2,
85 	0
86 };
87 uchar	yshl[] =
88 {
89 	Yi1,	Yml,	Zo_m,	2,
90 	Yi32,	Yml,	Zibo_m,	2,
91 	Ycl,	Yml,	Zo_m,	2,
92 	Ycx,	Yml,	Zo_m,	2,
93 	0
94 };
95 uchar	ytestb[] =
96 {
97 	Yi32,	Yal,	Zib_,	1,
98 	Yi32,	Ymb,	Zibo_m,	2,
99 	Yrb,	Ymb,	Zr_m,	1,
100 	Ymb,	Yrb,	Zm_r,	1,
101 	0
102 };
103 uchar	ytestl[] =
104 {
105 	Yi32,	Yax,	Zil_,	1,
106 	Yi32,	Yml,	Zilo_m,	2,
107 	Yrl,	Yml,	Zr_m,	1,
108 	Yml,	Yrl,	Zm_r,	1,
109 	0
110 };
111 uchar	ymovb[] =
112 {
113 	Yrb,	Ymb,	Zr_m,	1,
114 	Ymb,	Yrb,	Zm_r,	1,
115 	Yi32,	Yrb,	Zib_rp,	1,
116 	Yi32,	Ymb,	Zibo_m,	2,
117 	0
118 };
119 uchar	ymbs[] =
120 {
121 	Ymb,	Ynone,	Zm_o,	2,
122 	0
123 };
124 uchar	ybtl[] =
125 {
126 	Yi8,	Yml,	Zibo_m,	2,
127 	Yrl,	Yml,	Zr_m,	1,
128 	0
129 };
130 uchar	ymovw[] =
131 {
132 	Yrl,	Yml,	Zr_m,	1,
133 	Yml,	Yrl,	Zm_r,	1,
134 	Yi0,	Yrl,	Zclr,	1,
135 	Yi32,	Yrl,	Zil_rp,	1,
136 	Yi32,	Yml,	Zilo_m,	2,
137 	Yiauto,	Yrl,	Zaut_r,	2,
138 	0
139 };
140 uchar	ymovl[] =
141 {
142 	Yrl,	Yml,	Zr_m,	1,
143 	Yml,	Yrl,	Zm_r,	1,
144 	Yi0,	Yrl,	Zclr,	1,
145 	Yi32,	Yrl,	Zil_rp,	1,
146 	Yi32,	Yml,	Zilo_m,	2,
147 	Yml,	Ymr,	Zm_r_xm,	1,	// MMX MOVD
148 	Ymr,	Yml,	Zr_m_xm,	1,	// MMX MOVD
149 	Yml,	Yxr,	Zm_r_xm,	2,	// XMM MOVD (32 bit)
150 	Yxr,	Yml,	Zr_m_xm,	2,	// XMM MOVD (32 bit)
151 	Yiauto,	Yrl,	Zaut_r,	2,
152 	0
153 };
154 uchar	yret[] =
155 {
156 	Ynone,	Ynone,	Zo_iw,	1,
157 	Yi32,	Ynone,	Zo_iw,	1,
158 	0
159 };
160 uchar	ymovq[] =
161 {
162 	Yrl,	Yml,	Zr_m,	1,	// 0x89
163 	Yml,	Yrl,	Zm_r,	1,	// 0x8b
164 	Yi0,	Yrl,	Zclr,	1,	// 0x31
165 	Ys32,	Yrl,	Zilo_m,	2,	// 32 bit signed 0xc7,(0)
166 	Yi64,	Yrl,	Ziq_rp,	1,	// 0xb8 -- 32/64 bit immediate
167 	Yi32,	Yml,	Zilo_m,	2,	// 0xc7,(0)
168 	Ym,	Ymr,	Zm_r_xm_nr,	1,	// MMX MOVQ (shorter encoding)
169 	Ymr,	Ym,	Zr_m_xm_nr,	1,	// MMX MOVQ
170 	Ymm,	Ymr,	Zm_r_xm,	1,	// MMX MOVD
171 	Ymr,	Ymm,	Zr_m_xm,	1,	// MMX MOVD
172 	Yxr,	Ymr,	Zm_r_xm_nr,	2,	// MOVDQ2Q
173 	Yxr,	Ym,	Zr_m_xm_nr,	2,	// MOVQ xmm store
174 	Yml,	Yxr,	Zm_r_xm,	2,	// MOVD xmm load
175 	Yxr,	Yml,	Zr_m_xm,	2,	// MOVD xmm store
176 	Yiauto,	Yrl,	Zaut_r,	2,	// built-in LEAQ
177 	0
178 };
179 uchar	ym_rl[] =
180 {
181 	Ym,	Yrl,	Zm_r,	1,
182 	0
183 };
184 uchar	yrl_m[] =
185 {
186 	Yrl,	Ym,	Zr_m,	1,
187 	0
188 };
189 uchar	ymb_rl[] =
190 {
191 	Ymb,	Yrl,	Zmb_r,	1,
192 	0
193 };
194 uchar	yml_rl[] =
195 {
196 	Yml,	Yrl,	Zm_r,	1,
197 	0
198 };
199 uchar	yrl_ml[] =
200 {
201 	Yrl,	Yml,	Zr_m,	1,
202 	0
203 };
204 uchar	yml_mb[] =
205 {
206 	Yrb,	Ymb,	Zr_m,	1,
207 	Ymb,	Yrb,	Zm_r,	1,
208 	0
209 };
210 uchar	yrb_mb[] =
211 {
212 	Yrb,	Ymb,	Zr_m,	1,
213 	0
214 };
215 uchar	yml_ml[] =
216 {
217 	Yrl,	Yml,	Zr_m,	1,
218 	Yml,	Yrl,	Zm_r,	1,
219 	0
220 };
221 uchar	ydivl[] =
222 {
223 	Yml,	Ynone,	Zm_o,	2,
224 	0
225 };
226 uchar	ydivb[] =
227 {
228 	Ymb,	Ynone,	Zm_o,	2,
229 	0
230 };
231 uchar	yimul[] =
232 {
233 	Yml,	Ynone,	Zm_o,	2,
234 	Yi8,	Yrl,	Zib_rr,	1,
235 	Yi32,	Yrl,	Zil_rr,	1,
236 	Yml,	Yrl,	Zm_r,	2,
237 	0
238 };
239 uchar	ybyte[] =
240 {
241 	Yi64,	Ynone,	Zbyte,	1,
242 	0
243 };
244 uchar	yin[] =
245 {
246 	Yi32,	Ynone,	Zib_,	1,
247 	Ynone,	Ynone,	Zlit,	1,
248 	0
249 };
250 uchar	yint[] =
251 {
252 	Yi32,	Ynone,	Zib_,	1,
253 	0
254 };
255 uchar	ypushl[] =
256 {
257 	Yrl,	Ynone,	Zrp_,	1,
258 	Ym,	Ynone,	Zm_o,	2,
259 	Yi8,	Ynone,	Zib_,	1,
260 	Yi32,	Ynone,	Zil_,	1,
261 	0
262 };
263 uchar	ypopl[] =
264 {
265 	Ynone,	Yrl,	Z_rp,	1,
266 	Ynone,	Ym,	Zo_m,	2,
267 	0
268 };
269 uchar	yscond[] =
270 {
271 	Ynone,	Ymb,	Zo_m,	2,
272 	0
273 };
274 uchar	yjcond[] =
275 {
276 	Ynone,	Ybr,	Zbr,	1,
277 	0
278 };
279 uchar	yloop[] =
280 {
281 	Ynone,	Ybr,	Zloop,	1,
282 	0
283 };
284 uchar	ycall[] =
285 {
286 	Ynone,	Yml,	Zo_m64,	2,
287 	Ynone,	Ybr,	Zcall,	1,
288 	0
289 };
290 uchar	yjmp[] =
291 {
292 	Ynone,	Yml,	Zo_m64,	2,
293 	Ynone,	Ybr,	Zjmp,	1,
294 	0
295 };
296 
297 uchar	yfmvd[] =
298 {
299 	Ym,	Yf0,	Zm_o,	2,
300 	Yf0,	Ym,	Zo_m,	2,
301 	Yrf,	Yf0,	Zm_o,	2,
302 	Yf0,	Yrf,	Zo_m,	2,
303 	0
304 };
305 uchar	yfmvdp[] =
306 {
307 	Yf0,	Ym,	Zo_m,	2,
308 	Yf0,	Yrf,	Zo_m,	2,
309 	0
310 };
311 uchar	yfmvf[] =
312 {
313 	Ym,	Yf0,	Zm_o,	2,
314 	Yf0,	Ym,	Zo_m,	2,
315 	0
316 };
317 uchar	yfmvx[] =
318 {
319 	Ym,	Yf0,	Zm_o,	2,
320 	0
321 };
322 uchar	yfmvp[] =
323 {
324 	Yf0,	Ym,	Zo_m,	2,
325 	0
326 };
327 uchar	yfadd[] =
328 {
329 	Ym,	Yf0,	Zm_o,	2,
330 	Yrf,	Yf0,	Zm_o,	2,
331 	Yf0,	Yrf,	Zo_m,	2,
332 	0
333 };
334 uchar	yfaddp[] =
335 {
336 	Yf0,	Yrf,	Zo_m,	2,
337 	0
338 };
339 uchar	yfxch[] =
340 {
341 	Yf0,	Yrf,	Zo_m,	2,
342 	Yrf,	Yf0,	Zm_o,	2,
343 	0
344 };
345 uchar	ycompp[] =
346 {
347 	Yf0,	Yrf,	Zo_m,	2,	/* botch is really f0,f1 */
348 	0
349 };
350 uchar	ystsw[] =
351 {
352 	Ynone,	Ym,	Zo_m,	2,
353 	Ynone,	Yax,	Zlit,	1,
354 	0
355 };
356 uchar	ystcw[] =
357 {
358 	Ynone,	Ym,	Zo_m,	2,
359 	Ym,	Ynone,	Zm_o,	2,
360 	0
361 };
362 uchar	ysvrs[] =
363 {
364 	Ynone,	Ym,	Zo_m,	2,
365 	Ym,	Ynone,	Zm_o,	2,
366 	0
367 };
368 uchar	ymm[] =
369 {
370 	Ymm,	Ymr,	Zm_r_xm,	1,
371 	Yxm,	Yxr,	Zm_r_xm,	2,
372 	0
373 };
374 uchar	yxm[] =
375 {
376 	Yxm,	Yxr,	Zm_r_xm,	1,
377 	0
378 };
379 uchar	yxcvm1[] =
380 {
381 	Yxm,	Yxr,	Zm_r_xm,	2,
382 	Yxm,	Ymr,	Zm_r_xm,	2,
383 	0
384 };
385 uchar	yxcvm2[] =
386 {
387 	Yxm,	Yxr,	Zm_r_xm,	2,
388 	Ymm,	Yxr,	Zm_r_xm,	2,
389 	0
390 };
391 uchar	yxmq[] =
392 {
393 	Yxm,	Yxr,	Zm_r_xm,	2,
394 	0
395 };
396 uchar	yxr[] =
397 {
398 	Yxr,	Yxr,	Zm_r_xm,	1,
399 	0
400 };
401 uchar	yxr_ml[] =
402 {
403 	Yxr,	Yml,	Zr_m_xm,	1,
404 	0
405 };
406 uchar	ymr[] =
407 {
408 	Ymr,	Ymr,	Zm_r,	1,
409 	0
410 };
411 uchar	ymr_ml[] =
412 {
413 	Ymr,	Yml,	Zr_m_xm,	1,
414 	0
415 };
416 uchar	yxcmp[] =
417 {
418 	Yxm,	Yxr, Zm_r_xm,	1,
419 	0
420 };
421 uchar	yxcmpi[] =
422 {
423 	Yxm,	Yxr, Zm_r_i_xm,	2,
424 	0
425 };
426 uchar	yxmov[] =
427 {
428 	Yxm,	Yxr,	Zm_r_xm,	1,
429 	Yxr,	Yxm,	Zr_m_xm,	1,
430 	0
431 };
432 uchar	yxcvfl[] =
433 {
434 	Yxm,	Yrl,	Zm_r_xm,	1,
435 	0
436 };
437 uchar	yxcvlf[] =
438 {
439 	Yml,	Yxr,	Zm_r_xm,	1,
440 	0
441 };
442 uchar	yxcvfq[] =
443 {
444 	Yxm,	Yrl,	Zm_r_xm,	2,
445 	0
446 };
447 uchar	yxcvqf[] =
448 {
449 	Yml,	Yxr,	Zm_r_xm,	2,
450 	0
451 };
452 uchar	yps[] =
453 {
454 	Ymm,	Ymr,	Zm_r_xm,	1,
455 	Yi8,	Ymr,	Zibo_m_xm,	2,
456 	Yxm,	Yxr,	Zm_r_xm,	2,
457 	Yi8,	Yxr,	Zibo_m_xm,	3,
458 	0
459 };
460 uchar	yxrrl[] =
461 {
462 	Yxr,	Yrl,	Zm_r,	1,
463 	0
464 };
465 uchar	ymfp[] =
466 {
467 	Ymm,	Ymr,	Zm_r_3d,	1,
468 	0,
469 };
470 uchar	ymrxr[] =
471 {
472 	Ymr,	Yxr,	Zm_r,	1,
473 	Yxm,	Yxr,	Zm_r_xm,	1,
474 	0
475 };
476 uchar	ymshuf[] =
477 {
478 	Ymm,	Ymr,	Zibm_r,	1,
479 	0
480 };
481 uchar	yxshuf[] =
482 {
483 	Yxm,	Yxr,	Zibm_r,	1,
484 	0
485 };
486 uchar	yextrw[] =
487 {
488 	Yxr,	Yrl,	Zibm_r,	1,
489 	0
490 };
491 uchar	ypsdq[] =
492 {
493 	Yi8,	Yxr,	Zibo_m,	2,
494 	0
495 };
496 uchar	ymskb[] =
497 {
498 	Yxr,	Yrl,	Zm_r_xm,	2,
499 	Ymr,	Yrl,	Zm_r_xm,	1,
500 	0
501 };
502 
503 Optab optab[] =
504 /*	as, ytab, andproto, opcode */
505 {
506 	{ AXXX },
507 	{ AAAA,		ynone,	P32, 0x37 },
508 	{ AAAD,		ynone,	P32, 0xd5,0x0a },
509 	{ AAAM,		ynone,	P32, 0xd4,0x0a },
510 	{ AAAS,		ynone,	P32, 0x3f },
511 	{ AADCB,	yxorb,	Pb, 0x14,0x80,(02),0x10,0x10 },
512 	{ AADCL,	yxorl,	Px, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
513 	{ AADCQ,	yxorl,	Pw, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
514 	{ AADCW,	yxorl,	Pe, 0x83,(02),0x15,0x81,(02),0x11,0x13 },
515 	{ AADDB,	yxorb,	Pb, 0x04,0x80,(00),0x00,0x02 },
516 	{ AADDL,	yaddl,	Px, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
517 	{ AADDPD,	yxm,	Pq, 0x58 },
518 	{ AADDPS,	yxm,	Pm, 0x58 },
519 	{ AADDQ,	yaddl,	Pw, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
520 	{ AADDSD,	yxm,	Pf2, 0x58 },
521 	{ AADDSS,	yxm,	Pf3, 0x58 },
522 	{ AADDW,	yaddl,	Pe, 0x83,(00),0x05,0x81,(00),0x01,0x03 },
523 	{ AADJSP },
524 	{ AANDB,	yxorb,	Pb, 0x24,0x80,(04),0x20,0x22 },
525 	{ AANDL,	yxorl,	Px, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
526 	{ AANDNPD,	yxm,	Pq, 0x55 },
527 	{ AANDNPS,	yxm,	Pm, 0x55 },
528 	{ AANDPD,	yxm,	Pq, 0x54 },
529 	{ AANDPS,	yxm,	Pq, 0x54 },
530 	{ AANDQ,	yxorl,	Pw, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
531 	{ AANDW,	yxorl,	Pe, 0x83,(04),0x25,0x81,(04),0x21,0x23 },
532 	{ AARPL,	yrl_ml,	P32, 0x63 },
533 	{ ABOUNDL,	yrl_m,	P32, 0x62 },
534 	{ ABOUNDW,	yrl_m,	Pe, 0x62 },
535 	{ ABSFL,	yml_rl,	Pm, 0xbc },
536 	{ ABSFQ,	yml_rl,	Pw, 0x0f,0xbc },
537 	{ ABSFW,	yml_rl,	Pq, 0xbc },
538 	{ ABSRL,	yml_rl,	Pm, 0xbd },
539 	{ ABSRQ,	yml_rl,	Pw, 0x0f,0xbd },
540 	{ ABSRW,	yml_rl,	Pq, 0xbd },
541 	{ ABTCL,	ybtl,	Pm, 0xba,(07),0xbb },
542 	{ ABTCQ,	ybtl,	Pw, 0x0f,0xba,(07),0x0f,0xbb },
543 	{ ABTCW,	ybtl,	Pq, 0xba,(07),0xbb },
544 	{ ABTL,		ybtl,	Pm, 0xba,(04),0xa3 },
545 	{ ABTQ,		ybtl,	Pw, 0x0f,0xba,(04),0x0f,0xa3},
546 	{ ABTRL,	ybtl,	Pm, 0xba,(06),0xb3 },
547 	{ ABTRQ,	ybtl,	Pw, 0x0f,0xba,(06),0x0f,0xb3 },
548 	{ ABTRW,	ybtl,	Pq, 0xba,(06),0xb3 },
549 	{ ABTSL,	ybtl,	Pm, 0xba,(05),0xab  },
550 	{ ABTSQ,	ybtl,	Pw, 0x0f,0xba,(05),0x0f,0xab },
551 	{ ABTSW,	ybtl,	Pq, 0xba,(05),0xab  },
552 	{ ABTW,		ybtl,	Pq, 0xba,(04),0xa3 },
553 	{ ABYTE,	ybyte,	Px, 1 },
554 	{ ACALL,	ycall,	Px, 0xff,(02),0xe8 },
555 	{ ACDQ,		ynone,	Px, 0x99 },
556 	{ ACLC,		ynone,	Px, 0xf8 },
557 	{ ACLD,		ynone,	Px, 0xfc },
558 	{ ACLI,		ynone,	Px, 0xfa },
559 	{ ACLTS,	ynone,	Pm, 0x06 },
560 	{ ACMC,		ynone,	Px, 0xf5 },
561 	{ ACMOVLCC,	yml_rl,	Pm, 0x43 },
562 	{ ACMOVLCS,	yml_rl,	Pm, 0x42 },
563 	{ ACMOVLEQ,	yml_rl,	Pm, 0x44 },
564 	{ ACMOVLGE,	yml_rl,	Pm, 0x4d },
565 	{ ACMOVLGT,	yml_rl,	Pm, 0x4f },
566 	{ ACMOVLHI,	yml_rl,	Pm, 0x47 },
567 	{ ACMOVLLE,	yml_rl,	Pm, 0x4e },
568 	{ ACMOVLLS,	yml_rl,	Pm, 0x46 },
569 	{ ACMOVLLT,	yml_rl,	Pm, 0x4c },
570 	{ ACMOVLMI,	yml_rl,	Pm, 0x48 },
571 	{ ACMOVLNE,	yml_rl,	Pm, 0x45 },
572 	{ ACMOVLOC,	yml_rl,	Pm, 0x41 },
573 	{ ACMOVLOS,	yml_rl,	Pm, 0x40 },
574 	{ ACMOVLPC,	yml_rl,	Pm, 0x4b },
575 	{ ACMOVLPL,	yml_rl,	Pm, 0x49 },
576 	{ ACMOVLPS,	yml_rl,	Pm, 0x4a },
577 	{ ACMOVQCC,	yml_rl,	Pw, 0x0f,0x43 },
578 	{ ACMOVQCS,	yml_rl,	Pw, 0x0f,0x42 },
579 	{ ACMOVQEQ,	yml_rl,	Pw, 0x0f,0x44 },
580 	{ ACMOVQGE,	yml_rl,	Pw, 0x0f,0x4d },
581 	{ ACMOVQGT,	yml_rl,	Pw, 0x0f,0x4f },
582 	{ ACMOVQHI,	yml_rl,	Pw, 0x0f,0x47 },
583 	{ ACMOVQLE,	yml_rl,	Pw, 0x0f,0x4e },
584 	{ ACMOVQLS,	yml_rl,	Pw, 0x0f,0x46 },
585 	{ ACMOVQLT,	yml_rl,	Pw, 0x0f,0x4c },
586 	{ ACMOVQMI,	yml_rl,	Pw, 0x0f,0x48 },
587 	{ ACMOVQNE,	yml_rl,	Pw, 0x0f,0x45 },
588 	{ ACMOVQOC,	yml_rl,	Pw, 0x0f,0x41 },
589 	{ ACMOVQOS,	yml_rl,	Pw, 0x0f,0x40 },
590 	{ ACMOVQPC,	yml_rl,	Pw, 0x0f,0x4b },
591 	{ ACMOVQPL,	yml_rl,	Pw, 0x0f,0x49 },
592 	{ ACMOVQPS,	yml_rl,	Pw, 0x0f,0x4a },
593 	{ ACMOVWCC,	yml_rl,	Pq, 0x43 },
594 	{ ACMOVWCS,	yml_rl,	Pq, 0x42 },
595 	{ ACMOVWEQ,	yml_rl,	Pq, 0x44 },
596 	{ ACMOVWGE,	yml_rl,	Pq, 0x4d },
597 	{ ACMOVWGT,	yml_rl,	Pq, 0x4f },
598 	{ ACMOVWHI,	yml_rl,	Pq, 0x47 },
599 	{ ACMOVWLE,	yml_rl,	Pq, 0x4e },
600 	{ ACMOVWLS,	yml_rl,	Pq, 0x46 },
601 	{ ACMOVWLT,	yml_rl,	Pq, 0x4c },
602 	{ ACMOVWMI,	yml_rl,	Pq, 0x48 },
603 	{ ACMOVWNE,	yml_rl,	Pq, 0x45 },
604 	{ ACMOVWOC,	yml_rl,	Pq, 0x41 },
605 	{ ACMOVWOS,	yml_rl,	Pq, 0x40 },
606 	{ ACMOVWPC,	yml_rl,	Pq, 0x4b },
607 	{ ACMOVWPL,	yml_rl,	Pq, 0x49 },
608 	{ ACMOVWPS,	yml_rl,	Pq, 0x4a },
609 	{ ACMPB,	ycmpb,	Pb, 0x3c,0x80,(07),0x38,0x3a },
610 	{ ACMPL,	ycmpl,	Px, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
611 	{ ACMPPD,	yxcmpi,	Px, Pe,0xc2 },
612 	{ ACMPPS,	yxcmpi,	Pm, 0xc2,0 },
613 	{ ACMPQ,	ycmpl,	Pw, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
614 	{ ACMPSB,	ynone,	Pb, 0xa6 },
615 	{ ACMPSD,	yxcmpi,	Px, Pf2,0xc2 },
616 	{ ACMPSL,	ynone,	Px, 0xa7 },
617 	{ ACMPSQ,	ynone,	Pw, 0xa7 },
618 	{ ACMPSS,	yxcmpi,	Px, Pf3,0xc2 },
619 	{ ACMPSW,	ynone,	Pe, 0xa7 },
620 	{ ACMPW,	ycmpl,	Pe, 0x83,(07),0x3d,0x81,(07),0x39,0x3b },
621 	{ ACOMISD,	yxcmp,	Pe, 0x2f },
622 	{ ACOMISS,	yxcmp,	Pm, 0x2f },
623 	{ ACPUID,	ynone,	Pm, 0xa2 },
624 	{ ACVTPL2PD,	yxcvm2,	Px, Pf3,0xe6,Pe,0x2a },
625 	{ ACVTPL2PS,	yxcvm2,	Pm, 0x5b,0,0x2a,0, },
626 	{ ACVTPD2PL,	yxcvm1,	Px, Pf2,0xe6,Pe,0x2d },
627 	{ ACVTPD2PS,	yxm,	Pe, 0x5a },
628 	{ ACVTPS2PL,	yxcvm1, Px, Pe,0x5b,Pm,0x2d },
629 	{ ACVTPS2PD,	yxm,	Pm, 0x5a },
630 	{ API2FW,	ymfp,	Px, 0x0c },
631 	{ ACVTSD2SL,	yxcvfl, Pf2, 0x2d },
632 	{ ACVTSD2SQ,	yxcvfq, Pw, Pf2,0x2d },
633 	{ ACVTSD2SS,	yxm,	Pf2, 0x5a },
634 	{ ACVTSL2SD,	yxcvlf, Pf2, 0x2a },
635 	{ ACVTSQ2SD,	yxcvqf, Pw, Pf2,0x2a },
636 	{ ACVTSL2SS,	yxcvlf, Pf3, 0x2a },
637 	{ ACVTSQ2SS,	yxcvqf, Pw, Pf3,0x2a },
638 	{ ACVTSS2SD,	yxm,	Pf3, 0x5a },
639 	{ ACVTSS2SL,	yxcvfl, Pf3, 0x2d },
640 	{ ACVTSS2SQ,	yxcvfq, Pw, Pf3,0x2d },
641 	{ ACVTTPD2PL,	yxcvm1,	Px, Pe,0xe6,Pe,0x2c },
642 	{ ACVTTPS2PL,	yxcvm1,	Px, Pf3,0x5b,Pm,0x2c },
643 	{ ACVTTSD2SL,	yxcvfl, Pf2, 0x2c },
644 	{ ACVTTSD2SQ,	yxcvfq, Pw, Pf2,0x2c },
645 	{ ACVTTSS2SL,	yxcvfl,	Pf3, 0x2c },
646 	{ ACVTTSS2SQ,	yxcvfq, Pw, Pf3,0x2c },
647 	{ ACWD,		ynone,	Pe, 0x99 },
648 	{ ACQO,		ynone,	Pw, 0x99 },
649 	{ ADAA,		ynone,	P32, 0x27 },
650 	{ ADAS,		ynone,	P32, 0x2f },
651 	{ ADATA },
652 	{ ADECB,	yincb,	Pb, 0xfe,(01) },
653 	{ ADECL,	yincl,	Px, 0xff,(01) },
654 	{ ADECQ,	yincl,	Pw, 0xff,(01) },
655 	{ ADECW,	yincw,	Pe, 0xff,(01) },
656 	{ ADIVB,	ydivb,	Pb, 0xf6,(06) },
657 	{ ADIVL,	ydivl,	Px, 0xf7,(06) },
658 	{ ADIVPD,	yxm,	Pe, 0x5e },
659 	{ ADIVPS,	yxm,	Pm, 0x5e },
660 	{ ADIVQ,	ydivl,	Pw, 0xf7,(06) },
661 	{ ADIVSD,	yxm,	Pf2, 0x5e },
662 	{ ADIVSS,	yxm,	Pf3, 0x5e },
663 	{ ADIVW,	ydivl,	Pe, 0xf7,(06) },
664 	{ AEMMS,	ynone,	Pm, 0x77 },
665 	{ AENTER },				/* botch */
666 	{ AFXRSTOR,	ysvrs,	Pm, 0xae,(01),0xae,(01) },
667 	{ AFXSAVE,	ysvrs,	Pm, 0xae,(00),0xae,(00) },
668 	{ AFXRSTOR64,	ysvrs,	Pw, 0x0f,0xae,(01),0x0f,0xae,(01) },
669 	{ AFXSAVE64,	ysvrs,	Pw, 0x0f,0xae,(00),0x0f,0xae,(00) },
670 	{ AGLOBL },
671 	{ AGOK },
672 	{ AHISTORY },
673 	{ AHLT,		ynone,	Px, 0xf4 },
674 	{ AIDIVB,	ydivb,	Pb, 0xf6,(07) },
675 	{ AIDIVL,	ydivl,	Px, 0xf7,(07) },
676 	{ AIDIVQ,	ydivl,	Pw, 0xf7,(07) },
677 	{ AIDIVW,	ydivl,	Pe, 0xf7,(07) },
678 	{ AIMULB,	ydivb,	Pb, 0xf6,(05) },
679 	{ AIMULL,	yimul,	Px, 0xf7,(05),0x6b,0x69,Pm,0xaf },
680 	{ AIMULQ,	yimul,	Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf },
681 	{ AIMULW,	yimul,	Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf },
682 	{ AINB,		yin,	Pb, 0xe4,0xec },
683 	{ AINCB,	yincb,	Pb, 0xfe,(00) },
684 	{ AINCL,	yincl,	Px, 0xff,(00) },
685 	{ AINCQ,	yincl,	Pw, 0xff,(00) },
686 	{ AINCW,	yincw,	Pe, 0xff,(00) },
687 	{ AINL,		yin,	Px, 0xe5,0xed },
688 	{ AINSB,	ynone,	Pb, 0x6c },
689 	{ AINSL,	ynone,	Px, 0x6d },
690 	{ AINSW,	ynone,	Pe, 0x6d },
691 	{ AINT,		yint,	Px, 0xcd },
692 	{ AINTO,	ynone,	P32, 0xce },
693 	{ AINW,		yin,	Pe, 0xe5,0xed },
694 	{ AIRETL,	ynone,	Px, 0xcf },
695 	{ AIRETQ,	ynone,	Pw, 0xcf },
696 	{ AIRETW,	ynone,	Pe, 0xcf },
697 	{ AJCC,		yjcond,	Px, 0x73,0x83,(00) },
698 	{ AJCS,		yjcond,	Px, 0x72,0x82 },
699 	{ AJCXZ,	yloop,	Px, 0xe3 },
700 	{ AJEQ,		yjcond,	Px, 0x74,0x84 },
701 	{ AJGE,		yjcond,	Px, 0x7d,0x8d },
702 	{ AJGT,		yjcond,	Px, 0x7f,0x8f },
703 	{ AJHI,		yjcond,	Px, 0x77,0x87 },
704 	{ AJLE,		yjcond,	Px, 0x7e,0x8e },
705 	{ AJLS,		yjcond,	Px, 0x76,0x86 },
706 	{ AJLT,		yjcond,	Px, 0x7c,0x8c },
707 	{ AJMI,		yjcond,	Px, 0x78,0x88 },
708 	{ AJMP,		yjmp,	Px, 0xff,(04),0xeb,0xe9 },
709 	{ AJNE,		yjcond,	Px, 0x75,0x85 },
710 	{ AJOC,		yjcond,	Px, 0x71,0x81,(00) },
711 	{ AJOS,		yjcond,	Px, 0x70,0x80,(00) },
712 	{ AJPC,		yjcond,	Px, 0x7b,0x8b },
713 	{ AJPL,		yjcond,	Px, 0x79,0x89 },
714 	{ AJPS,		yjcond,	Px, 0x7a,0x8a },
715 	{ ALAHF,	ynone,	Px, 0x9f },
716 	{ ALARL,	yml_rl,	Pm, 0x02 },
717 	{ ALARW,	yml_rl,	Pq, 0x02 },
718 	{ ALDMXCSR,	ysvrs,	Pm, 0xae,(02),0xae,(02) },
719 	{ ALEAL,	ym_rl,	Px, 0x8d },
720 	{ ALEAQ,	ym_rl,	Pw, 0x8d },
721 	{ ALEAVEL,	ynone,	P32, 0xc9 },
722 	{ ALEAVEQ,	ynone,	Py, 0xc9 },
723 	{ ALEAVEW,	ynone,	Pe, 0xc9 },
724 	{ ALEAW,	ym_rl,	Pe, 0x8d },
725 	{ ALOCK,	ynone,	Px, 0xf0 },
726 	{ ALODSB,	ynone,	Pb, 0xac },
727 	{ ALODSL,	ynone,	Px, 0xad },
728 	{ ALODSQ,	ynone,	Pw, 0xad },
729 	{ ALODSW,	ynone,	Pe, 0xad },
730 	{ ALONG,	ybyte,	Px, 4 },
731 	{ ALOOP,	yloop,	Px, 0xe2 },
732 	{ ALOOPEQ,	yloop,	Px, 0xe1 },
733 	{ ALOOPNE,	yloop,	Px, 0xe0 },
734 	{ ALSLL,	yml_rl,	Pm, 0x03  },
735 	{ ALSLW,	yml_rl,	Pq, 0x03  },
736 	{ AMASKMOVOU,	yxr,	Pe, 0xf7 },
737 	{ AMASKMOVQ,	ymr,	Pm, 0xf7 },
738 	{ AMAXPD,	yxm,	Pe, 0x5f },
739 	{ AMAXPS,	yxm,	Pm, 0x5f },
740 	{ AMAXSD,	yxm,	Pf2, 0x5f },
741 	{ AMAXSS,	yxm,	Pf3, 0x5f },
742 	{ AMINPD,	yxm,	Pe, 0x5d },
743 	{ AMINPS,	yxm,	Pm, 0x5d },
744 	{ AMINSD,	yxm,	Pf2, 0x5d },
745 	{ AMINSS,	yxm,	Pf3, 0x5d },
746 	{ AMOVAPD,	yxmov,	Pe, 0x28,0x29 },
747 	{ AMOVAPS,	yxmov,	Pm, 0x28,0x29 },
748 	{ AMOVB,	ymovb,	Pb, 0x88,0x8a,0xb0,0xc6,(00) },
749 	{ AMOVBLSX,	ymb_rl,	Pm, 0xbe },
750 	{ AMOVBLZX,	ymb_rl,	Pm, 0xb6 },
751 	{ AMOVBQSX,	ymb_rl,	Pw, 0x0f,0xbe },
752 	{ AMOVBQZX,	ymb_rl,	Pw, 0x0f,0xb6 },
753 	{ AMOVBWSX,	ymb_rl,	Pq, 0xbe },
754 	{ AMOVBWZX,	ymb_rl,	Pq, 0xb6 },
755 	{ AMOVO,	yxmov,	Pe, 0x6f,0x7f },
756 	{ AMOVOU,	yxmov,	Pf2, 0x6f,0x7f },
757 	{ AMOVHLPS,	yxr,	Pm, 0x12 },
758 	{ AMOVHPD,	yxmov,	Pe, 0x16,0x17 },
759 	{ AMOVHPS,	yxmov,	Pm, 0x16,0x17 },
760 	{ AMOVL,	ymovl,	Px, 0x89,0x8b,0x31,0xb8,0xc7,(00),0x6e,0x7e,Pe,0x6e,Pe,0x7e },
761 	{ AMOVLHPS,	yxr,	Pm, 0x16 },
762 	{ AMOVLPD,	yxmov,	Pe, 0x12,0x13 },
763 	{ AMOVLPS,	yxmov,	Pm, 0x12,0x13 },
764 	{ AMOVLQSX,	yml_rl,	Pw, 0x63 },
765 	{ AMOVLQZX,	yml_rl,	Px, 0x63 },
766 	{ AMOVMSKPD,	yxrrl,	Pq, 0x50 },
767 	{ AMOVMSKPS,	yxrrl,	Pm, 0x50 },
768 	{ AMOVNTO,	yxr_ml,	Pe, 0xe7 },
769 	{ AMOVNTPD,	yxr_ml,	Pe, 0x2b },
770 	{ AMOVNTPS,	yxr_ml,	Pm, 0x2b },
771 	{ AMOVNTQ,	ymr_ml,	Pm, 0xe7 },
772 	{ AMOVQ,	ymovq,	Pw, 0x89,0x8b,0x31,0xc7,(00),0xb8,0xc7,(00),0x6f,0x7f,0x6e,0x7e,Pf2,0xd6,Pe,0xd6,Pe,0x6e,Pe,0x7e },
773 	{ AMOVQOZX,	ymrxr,	Pf3, 0xd6,0x7e },
774 	{ AMOVSB,	ynone,	Pb, 0xa4 },
775 	{ AMOVSD,	yxmov,	Pf2, 0x10,0x11 },
776 	{ AMOVSL,	ynone,	Px, 0xa5 },
777 	{ AMOVSQ,	ynone,	Pw, 0xa5 },
778 	{ AMOVSS,	yxmov,	Pf3, 0x10,0x11 },
779 	{ AMOVSW,	ynone,	Pe, 0xa5 },
780 	{ AMOVUPD,	yxmov,	Pe, 0x10,0x11 },
781 	{ AMOVUPS,	yxmov,	Pm, 0x10,0x11 },
782 	{ AMOVW,	ymovw,	Pe, 0x89,0x8b,0x31,0xb8,0xc7,(00) },
783 	{ AMOVWLSX,	yml_rl,	Pm, 0xbf },
784 	{ AMOVWLZX,	yml_rl,	Pm, 0xb7 },
785 	{ AMOVWQSX,	yml_rl,	Pw, 0x0f,0xbf },
786 	{ AMOVWQZX,	yml_rl,	Pw, 0x0f,0xb7 },
787 	{ AMULB,	ydivb,	Pb, 0xf6,(04) },
788 	{ AMULL,	ydivl,	Px, 0xf7,(04) },
789 	{ AMULPD,	yxm,	Pe, 0x59 },
790 	{ AMULPS,	yxm,	Ym, 0x59 },
791 	{ AMULQ,	ydivl,	Pw, 0xf7,(04) },
792 	{ AMULSD,	yxm,	Pf2, 0x59 },
793 	{ AMULSS,	yxm,	Pf3, 0x59 },
794 	{ AMULW,	ydivl,	Pe, 0xf7,(04) },
795 	{ ANAME },
796 	{ ANEGB,	yscond,	Pb, 0xf6,(03) },
797 	{ ANEGL,	yscond,	Px, 0xf7,(03) },
798 	{ ANEGQ,	yscond,	Pw, 0xf7,(03) },
799 	{ ANEGW,	yscond,	Pe, 0xf7,(03) },
800 	{ ANOP,		ynop,	Px, 0,0 },
801 	{ ANOTB,	yscond,	Pb, 0xf6,(02) },
802 	{ ANOTL,	yscond,	Px, 0xf7,(02) },
803 	{ ANOTQ,	yscond,	Pw, 0xf7,(02) },
804 	{ ANOTW,	yscond,	Pe, 0xf7,(02) },
805 	{ AORB,		yxorb,	Pb, 0x0c,0x80,(01),0x08,0x0a },
806 	{ AORL,		yxorl,	Px, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
807 	{ AORPD,	yxm,	Pq, 0x56 },
808 	{ AORPS,	yxm,	Pm, 0x56 },
809 	{ AORQ,		yxorl,	Pw, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
810 	{ AORW,		yxorl,	Pe, 0x83,(01),0x0d,0x81,(01),0x09,0x0b },
811 	{ AOUTB,	yin,	Pb, 0xe6,0xee },
812 	{ AOUTL,	yin,	Px, 0xe7,0xef },
813 	{ AOUTSB,	ynone,	Pb, 0x6e },
814 	{ AOUTSL,	ynone,	Px, 0x6f },
815 	{ AOUTSW,	ynone,	Pe, 0x6f },
816 	{ AOUTW,	yin,	Pe, 0xe7,0xef },
817 	{ APACKSSLW,	ymm,	Py, 0x6b,Pe,0x6b },
818 	{ APACKSSWB,	ymm,	Py, 0x63,Pe,0x63 },
819 	{ APACKUSWB,	ymm,	Py, 0x67,Pe,0x67 },
820 	{ APADDB,	ymm,	Py, 0xfc,Pe,0xfc },
821 	{ APADDL,	ymm,	Py, 0xfe,Pe,0xfe },
822 	{ APADDQ,	yxm,	Pe, 0xd4 },
823 	{ APADDSB,	ymm,	Py, 0xec,Pe,0xec },
824 	{ APADDSW,	ymm,	Py, 0xed,Pe,0xed },
825 	{ APADDUSB,	ymm,	Py, 0xdc,Pe,0xdc },
826 	{ APADDUSW,	ymm,	Py, 0xdd,Pe,0xdd },
827 	{ APADDW,	ymm,	Py, 0xfd,Pe,0xfd },
828 	{ APAND,	ymm,	Py, 0xdb,Pe,0xdb },
829 	{ APANDN,	ymm,	Py, 0xdf,Pe,0xdf },
830 	{ APAVGB,	ymm,	Py, 0xe0,Pe,0xe0 },
831 	{ APAVGW,	ymm,	Py, 0xe3,Pe,0xe3 },
832 	{ APCMPEQB,	ymm,	Py, 0x74,Pe,0x74 },
833 	{ APCMPEQL,	ymm,	Py, 0x76,Pe,0x76 },
834 	{ APCMPEQW,	ymm,	Py, 0x75,Pe,0x75 },
835 	{ APCMPGTB,	ymm,	Py, 0x64,Pe,0x64 },
836 	{ APCMPGTL,	ymm,	Py, 0x66,Pe,0x66 },
837 	{ APCMPGTW,	ymm,	Py, 0x65,Pe,0x65 },
838 	{ APEXTRW,	yextrw,	Pq, 0xc5 },
839 	{ APF2IL,	ymfp,	Px, 0x1d },
840 	{ APF2IW,	ymfp,	Px, 0x1c },
841 	{ API2FL,	ymfp,	Px, 0x0d },
842 	{ APFACC,	ymfp,	Px, 0xae },
843 	{ APFADD,	ymfp,	Px, 0x9e },
844 	{ APFCMPEQ,	ymfp,	Px, 0xb0 },
845 	{ APFCMPGE,	ymfp,	Px, 0x90 },
846 	{ APFCMPGT,	ymfp,	Px, 0xa0 },
847 	{ APFMAX,	ymfp,	Px, 0xa4 },
848 	{ APFMIN,	ymfp,	Px, 0x94 },
849 	{ APFMUL,	ymfp,	Px, 0xb4 },
850 	{ APFNACC,	ymfp,	Px, 0x8a },
851 	{ APFPNACC,	ymfp,	Px, 0x8e },
852 	{ APFRCP,	ymfp,	Px, 0x96 },
853 	{ APFRCPIT1,	ymfp,	Px, 0xa6 },
854 	{ APFRCPI2T,	ymfp,	Px, 0xb6 },
855 	{ APFRSQIT1,	ymfp,	Px, 0xa7 },
856 	{ APFRSQRT,	ymfp,	Px, 0x97 },
857 	{ APFSUB,	ymfp,	Px, 0x9a },
858 	{ APFSUBR,	ymfp,	Px, 0xaa },
859 	{ APINSRW,	yextrw,	Pq, 0xc4 },
860 	{ APMADDWL,	ymm,	Py, 0xf5,Pe,0xf5 },
861 	{ APMAXSW,	yxm,	Pe, 0xee },
862 	{ APMAXUB,	yxm,	Pe, 0xde },
863 	{ APMINSW,	yxm,	Pe, 0xea },
864 	{ APMINUB,	yxm,	Pe, 0xda },
865 	{ APMOVMSKB,	ymskb,	Px, Pe,0xd7,0xd7 },
866 	{ APMULHRW,	ymfp,	Px, 0xb7 },
867 	{ APMULHUW,	ymm,	Py, 0xe4,Pe,0xe4 },
868 	{ APMULHW,	ymm,	Py, 0xe5,Pe,0xe5 },
869 	{ APMULLW,	ymm,	Py, 0xd5,Pe,0xd5 },
870 	{ APMULULQ,	ymm,	Py, 0xf4,Pe,0xf4 },
871 	{ APOPAL,	ynone,	P32, 0x61 },
872 	{ APOPAW,	ynone,	Pe, 0x61 },
873 	{ APOPFL,	ynone,	P32, 0x9d },
874 	{ APOPFQ,	ynone,	Py, 0x9d },
875 	{ APOPFW,	ynone,	Pe, 0x9d },
876 	{ APOPL,	ypopl,	P32, 0x58,0x8f,(00) },
877 	{ APOPQ,	ypopl,	Py, 0x58,0x8f,(00) },
878 	{ APOPW,	ypopl,	Pe, 0x58,0x8f,(00) },
879 	{ APOR,		ymm,	Py, 0xeb,Pe,0xeb },
880 	{ APSADBW,	yxm,	Pw, Pe,0xf6 },
881 	{ APSHUFHW,	yxshuf,	Pf3, 0x70 },
882 	{ APSHUFL,	yxm,	Pw, Pe,0x70 },
883 	{ APSHUFLW,	yxshuf,	Pf2, 0x70 },
884 	{ APSHUFW,	ymshuf,	Pm, 0x70 },
885 	{ APSLLO,	ypsdq,	Pq, 0x73,(07) },
886 	{ APSLLL,	yps,	Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) },
887 	{ APSLLQ,	yps,	Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x7e,(06) },
888 	{ APSLLW,	yps,	Py, 0xf1, 0x71,(06), Pe,0xf1, Pe,0x71,(06) },
889 	{ APSRAL,	yps,	Py, 0xe2, 0x72,(04), Pe,0xe2, Pe,0x72,(04) },
890 	{ APSRAW,	yps,	Py, 0xe1, 0x71,(04), Pe,0xe1, Pe,0x71,(04) },
891 	{ APSRLO,	ypsdq,	Pq, 0x73,(03) },
892 	{ APSRLL,	yps,	Py, 0xd2, 0x72,(02), Pe,0xd2, Pe,0x72,(02) },
893 	{ APSRLQ,	yps,	Py, 0xd3, 0x73,(02), Pe,0xd3, Pe,0x73,(02) },
894 	{ APSRLW,	yps,	Py, 0xd1, 0x71,(02), Pe,0xe1, Pe,0x71,(02) },
895 	{ APSUBB,	yxm,	Pe, 0xf8 },
896 	{ APSUBL,	yxm,	Pe, 0xfa },
897 	{ APSUBQ,	yxm,	Pe, 0xfb },
898 	{ APSUBSB,	yxm,	Pe, 0xe8 },
899 	{ APSUBSW,	yxm,	Pe, 0xe9 },
900 	{ APSUBUSB,	yxm,	Pe, 0xd8 },
901 	{ APSUBUSW,	yxm,	Pe, 0xd9 },
902 	{ APSUBW,	yxm,	Pe, 0xf9 },
903 	{ APSWAPL,	ymfp,	Px, 0xbb },
904 	{ APUNPCKHBW,	ymm,	Py, 0x68,Pe,0x68 },
905 	{ APUNPCKHLQ,	ymm,	Py, 0x6a,Pe,0x6a },
906 	{ APUNPCKHQDQ,	yxm,	Pe, 0x6d },
907 	{ APUNPCKHWL,	ymm,	Py, 0x69,Pe,0x69 },
908 	{ APUNPCKLBW,	ymm,	Py, 0x60,Pe,0x60 },
909 	{ APUNPCKLLQ,	ymm,	Py, 0x62,Pe,0x62 },
910 	{ APUNPCKLQDQ,	yxm,	Pe, 0x6c },
911 	{ APUNPCKLWL,	ymm,	Py, 0x61,Pe,0x61 },
912 	{ APUSHAL,	ynone,	P32, 0x60 },
913 	{ APUSHAW,	ynone,	Pe, 0x60 },
914 	{ APUSHFL,	ynone,	P32, 0x9c },
915 	{ APUSHFQ,	ynone,	Py, 0x9c },
916 	{ APUSHFW,	ynone,	Pe, 0x9c },
917 	{ APUSHL,	ypushl,	P32, 0x50,0xff,(06),0x6a,0x68 },
918 	{ APUSHQ,	ypushl,	Py, 0x50,0xff,(06),0x6a,0x68 },
919 	{ APUSHW,	ypushl,	Pe, 0x50,0xff,(06),0x6a,0x68 },
920 	{ APXOR,	ymm,	Py, 0xef,Pe,0xef },
921 	{ AQUAD,	ybyte,	Px, 8 },
922 	{ ARCLB,	yshb,	Pb, 0xd0,(02),0xc0,(02),0xd2,(02) },
923 	{ ARCLL,	yshl,	Px, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
924 	{ ARCLQ,	yshl,	Pw, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
925 	{ ARCLW,	yshl,	Pe, 0xd1,(02),0xc1,(02),0xd3,(02),0xd3,(02) },
926 	{ ARCPPS,	yxm,	Pm, 0x53 },
927 	{ ARCPSS,	yxm,	Pf3, 0x53 },
928 	{ ARCRB,	yshb,	Pb, 0xd0,(03),0xc0,(03),0xd2,(03) },
929 	{ ARCRL,	yshl,	Px, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
930 	{ ARCRQ,	yshl,	Pw, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
931 	{ ARCRW,	yshl,	Pe, 0xd1,(03),0xc1,(03),0xd3,(03),0xd3,(03) },
932 	{ AREP,		ynone,	Px, 0xf3 },
933 	{ AREPN,	ynone,	Px, 0xf2 },
934 	{ ARET,		ynone,	Px, 0xc3 },
935 	{ ARETFW,	yret,	Pe, 0xcb,0xca },
936 	{ ARETFL,	yret,	Px, 0xcb,0xca },
937 	{ ARETFQ,	yret,	Pw, 0xcb,0xca },
938 	{ AROLB,	yshb,	Pb, 0xd0,(00),0xc0,(00),0xd2,(00) },
939 	{ AROLL,	yshl,	Px, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
940 	{ AROLQ,	yshl,	Pw, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
941 	{ AROLW,	yshl,	Pe, 0xd1,(00),0xc1,(00),0xd3,(00),0xd3,(00) },
942 	{ ARORB,	yshb,	Pb, 0xd0,(01),0xc0,(01),0xd2,(01) },
943 	{ ARORL,	yshl,	Px, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
944 	{ ARORQ,	yshl,	Pw, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
945 	{ ARORW,	yshl,	Pe, 0xd1,(01),0xc1,(01),0xd3,(01),0xd3,(01) },
946 	{ ARSQRTPS,	yxm,	Pm, 0x52 },
947 	{ ARSQRTSS,	yxm,	Pf3, 0x52 },
948 	{ ASAHF,	ynone,	Px, 0x86,0xe0,0x50,0x9d },	/* XCHGB AH,AL; PUSH AX; POPFL */
949 	{ ASALB,	yshb,	Pb, 0xd0,(04),0xc0,(04),0xd2,(04) },
950 	{ ASALL,	yshl,	Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
951 	{ ASALQ,	yshl,	Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
952 	{ ASALW,	yshl,	Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
953 	{ ASARB,	yshb,	Pb, 0xd0,(07),0xc0,(07),0xd2,(07) },
954 	{ ASARL,	yshl,	Px, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
955 	{ ASARQ,	yshl,	Pw, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
956 	{ ASARW,	yshl,	Pe, 0xd1,(07),0xc1,(07),0xd3,(07),0xd3,(07) },
957 	{ ASBBB,	yxorb,	Pb, 0x1c,0x80,(03),0x18,0x1a },
958 	{ ASBBL,	yxorl,	Px, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
959 	{ ASBBQ,	yxorl,	Pw, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
960 	{ ASBBW,	yxorl,	Pe, 0x83,(03),0x1d,0x81,(03),0x19,0x1b },
961 	{ ASCASB,	ynone,	Pb, 0xae },
962 	{ ASCASL,	ynone,	Px, 0xaf },
963 	{ ASCASQ,	ynone,	Pw, 0xaf },
964 	{ ASCASW,	ynone,	Pe, 0xaf },
965 	{ ASETCC,	yscond,	Pm, 0x93,(00) },
966 	{ ASETCS,	yscond,	Pm, 0x92,(00) },
967 	{ ASETEQ,	yscond,	Pm, 0x94,(00) },
968 	{ ASETGE,	yscond,	Pm, 0x9d,(00) },
969 	{ ASETGT,	yscond,	Pm, 0x9f,(00) },
970 	{ ASETHI,	yscond,	Pm, 0x97,(00) },
971 	{ ASETLE,	yscond,	Pm, 0x9e,(00) },
972 	{ ASETLS,	yscond,	Pm, 0x96,(00) },
973 	{ ASETLT,	yscond,	Pm, 0x9c,(00) },
974 	{ ASETMI,	yscond,	Pm, 0x98,(00) },
975 	{ ASETNE,	yscond,	Pm, 0x95,(00) },
976 	{ ASETOC,	yscond,	Pm, 0x91,(00) },
977 	{ ASETOS,	yscond,	Pm, 0x90,(00) },
978 	{ ASETPC,	yscond,	Pm, 0x96,(00) },
979 	{ ASETPL,	yscond,	Pm, 0x99,(00) },
980 	{ ASETPS,	yscond,	Pm, 0x9a,(00) },
981 	{ ASHLB,	yshb,	Pb, 0xd0,(04),0xc0,(04),0xd2,(04) },
982 	{ ASHLL,	yshl,	Px, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
983 	{ ASHLQ,	yshl,	Pw, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
984 	{ ASHLW,	yshl,	Pe, 0xd1,(04),0xc1,(04),0xd3,(04),0xd3,(04) },
985 	{ ASHRB,	yshb,	Pb, 0xd0,(05),0xc0,(05),0xd2,(05) },
986 	{ ASHRL,	yshl,	Px, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
987 	{ ASHRQ,	yshl,	Pw, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
988 	{ ASHRW,	yshl,	Pe, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
989 	{ ASHUFPD,	yxshuf,	Pq, 0xc6 },
990 	{ ASHUFPS,	yxshuf,	Pm, 0xc6 },
991 	{ ASQRTPD,	yxm,	Pe, 0x51 },
992 	{ ASQRTPS,	yxm,	Pm, 0x51 },
993 	{ ASQRTSD,	yxm,	Pf2, 0x51 },
994 	{ ASQRTSS,	yxm,	Pf3, 0x51 },
995 	{ ASTC,		ynone,	Px, 0xf9 },
996 	{ ASTD,		ynone,	Px, 0xfd },
997 	{ ASTI,		ynone,	Px, 0xfb },
998 	{ ASTMXCSR,	ysvrs,	Pm, 0xae,(03),0xae,(03) },
999 	{ ASTOSB,	ynone,	Pb, 0xaa },
1000 	{ ASTOSL,	ynone,	Px, 0xab },
1001 	{ ASTOSQ,	ynone,	Pw, 0xab },
1002 	{ ASTOSW,	ynone,	Pe, 0xab },
1003 	{ ASUBB,	yxorb,	Pb, 0x2c,0x80,(05),0x28,0x2a },
1004 	{ ASUBL,	yaddl,	Px, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
1005 	{ ASUBPD,	yxm,	Pe, 0x5c },
1006 	{ ASUBPS,	yxm,	Pm, 0x5c },
1007 	{ ASUBQ,	yaddl,	Pw, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
1008 	{ ASUBSD,	yxm,	Pf2, 0x5c },
1009 	{ ASUBSS,	yxm,	Pf3, 0x5c },
1010 	{ ASUBW,	yaddl,	Pe, 0x83,(05),0x2d,0x81,(05),0x29,0x2b },
1011 	{ ASWAPGS,	ynone,	Pm, 0x01,0xf8 },
1012 	{ ASYSCALL,	ynone,	Px, 0x0f,0x05 },	/* fast syscall */
1013 	{ ATESTB,	ytestb,	Pb, 0xa8,0xf6,(00),0x84,0x84 },
1014 	{ ATESTL,	ytestl,	Px, 0xa9,0xf7,(00),0x85,0x85 },
1015 	{ ATESTQ,	ytestl,	Pw, 0xa9,0xf7,(00),0x85,0x85 },
1016 	{ ATESTW,	ytestl,	Pe, 0xa9,0xf7,(00),0x85,0x85 },
1017 	{ ATEXT,	ytext,	Px },
1018 	{ AUCOMISD,	yxcmp,	Pe, 0x2e },
1019 	{ AUCOMISS,	yxcmp,	Pm, 0x2e },
1020 	{ AUNPCKHPD,	yxm,	Pe, 0x15 },
1021 	{ AUNPCKHPS,	yxm,	Pm, 0x15 },
1022 	{ AUNPCKLPD,	yxm,	Pe, 0x14 },
1023 	{ AUNPCKLPS,	yxm,	Pm, 0x14 },
1024 	{ AVERR,	ydivl,	Pm, 0x00,(04) },
1025 	{ AVERW,	ydivl,	Pm, 0x00,(05) },
1026 	{ AWAIT,	ynone,	Px, 0x9b },
1027 	{ AWORD,	ybyte,	Px, 2 },
1028 	{ AXCHGB,	yml_mb,	Pb, 0x86,0x86 },
1029 	{ AXCHGL,	yml_ml,	Px, 0x87,0x87 },
1030 	{ AXCHGQ,	yml_ml,	Pw, 0x87,0x87 },
1031 	{ AXCHGW,	yml_ml,	Pe, 0x87,0x87 },
1032 	{ AXLAT,	ynone,	Px, 0xd7 },
1033 	{ AXORB,	yxorb,	Pb, 0x34,0x80,(06),0x30,0x32 },
1034 	{ AXORL,	yxorl,	Px, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
1035 	{ AXORPD,	yxm,	Pe, 0x57 },
1036 	{ AXORPS,	yxm,	Pm, 0x57 },
1037 	{ AXORQ,	yxorl,	Pw, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
1038 	{ AXORW,	yxorl,	Pe, 0x83,(06),0x35,0x81,(06),0x31,0x33 },
1039 
1040 	{ AFMOVB,	yfmvx,	Px, 0xdf,(04) },
1041 	{ AFMOVBP,	yfmvp,	Px, 0xdf,(06) },
1042 	{ AFMOVD,	yfmvd,	Px, 0xdd,(00),0xdd,(02),0xd9,(00),0xdd,(02) },
1043 	{ AFMOVDP,	yfmvdp,	Px, 0xdd,(03),0xdd,(03) },
1044 	{ AFMOVF,	yfmvf,	Px, 0xd9,(00),0xd9,(02) },
1045 	{ AFMOVFP,	yfmvp,	Px, 0xd9,(03) },
1046 	{ AFMOVL,	yfmvf,	Px, 0xdb,(00),0xdb,(02) },
1047 	{ AFMOVLP,	yfmvp,	Px, 0xdb,(03) },
1048 	{ AFMOVV,	yfmvx,	Px, 0xdf,(05) },
1049 	{ AFMOVVP,	yfmvp,	Px, 0xdf,(07) },
1050 	{ AFMOVW,	yfmvf,	Px, 0xdf,(00),0xdf,(02) },
1051 	{ AFMOVWP,	yfmvp,	Px, 0xdf,(03) },
1052 	{ AFMOVX,	yfmvx,	Px, 0xdb,(05) },
1053 	{ AFMOVXP,	yfmvp,	Px, 0xdb,(07) },
1054 
1055 	{ AFCOMB },
1056 	{ AFCOMBP },
1057 	{ AFCOMD,	yfadd,	Px, 0xdc,(02),0xd8,(02),0xdc,(02) },	/* botch */
1058 	{ AFCOMDP,	yfadd,	Px, 0xdc,(03),0xd8,(03),0xdc,(03) },	/* botch */
1059 	{ AFCOMDPP,	ycompp,	Px, 0xde,(03) },
1060 	{ AFCOMF,	yfmvx,	Px, 0xd8,(02) },
1061 	{ AFCOMFP,	yfmvx,	Px, 0xd8,(03) },
1062 	{ AFCOML,	yfmvx,	Px, 0xda,(02) },
1063 	{ AFCOMLP,	yfmvx,	Px, 0xda,(03) },
1064 	{ AFCOMW,	yfmvx,	Px, 0xde,(02) },
1065 	{ AFCOMWP,	yfmvx,	Px, 0xde,(03) },
1066 
1067 	{ AFUCOM,	ycompp,	Px, 0xdd,(04) },
1068 	{ AFUCOMP,	ycompp, Px, 0xdd,(05) },
1069 	{ AFUCOMPP,	ycompp,	Px, 0xda,(13) },
1070 
1071 	{ AFADDDP,	yfaddp,	Px, 0xde,(00) },
1072 	{ AFADDW,	yfmvx,	Px, 0xde,(00) },
1073 	{ AFADDL,	yfmvx,	Px, 0xda,(00) },
1074 	{ AFADDF,	yfmvx,	Px, 0xd8,(00) },
1075 	{ AFADDD,	yfadd,	Px, 0xdc,(00),0xd8,(00),0xdc,(00) },
1076 
1077 	{ AFMULDP,	yfaddp,	Px, 0xde,(01) },
1078 	{ AFMULW,	yfmvx,	Px, 0xde,(01) },
1079 	{ AFMULL,	yfmvx,	Px, 0xda,(01) },
1080 	{ AFMULF,	yfmvx,	Px, 0xd8,(01) },
1081 	{ AFMULD,	yfadd,	Px, 0xdc,(01),0xd8,(01),0xdc,(01) },
1082 
1083 	{ AFSUBDP,	yfaddp,	Px, 0xde,(05) },
1084 	{ AFSUBW,	yfmvx,	Px, 0xde,(04) },
1085 	{ AFSUBL,	yfmvx,	Px, 0xda,(04) },
1086 	{ AFSUBF,	yfmvx,	Px, 0xd8,(04) },
1087 	{ AFSUBD,	yfadd,	Px, 0xdc,(04),0xd8,(04),0xdc,(05) },
1088 
1089 	{ AFSUBRDP,	yfaddp,	Px, 0xde,(04) },
1090 	{ AFSUBRW,	yfmvx,	Px, 0xde,(05) },
1091 	{ AFSUBRL,	yfmvx,	Px, 0xda,(05) },
1092 	{ AFSUBRF,	yfmvx,	Px, 0xd8,(05) },
1093 	{ AFSUBRD,	yfadd,	Px, 0xdc,(05),0xd8,(05),0xdc,(04) },
1094 
1095 	{ AFDIVDP,	yfaddp,	Px, 0xde,(07) },
1096 	{ AFDIVW,	yfmvx,	Px, 0xde,(06) },
1097 	{ AFDIVL,	yfmvx,	Px, 0xda,(06) },
1098 	{ AFDIVF,	yfmvx,	Px, 0xd8,(06) },
1099 	{ AFDIVD,	yfadd,	Px, 0xdc,(06),0xd8,(06),0xdc,(07) },
1100 
1101 	{ AFDIVRDP,	yfaddp,	Px, 0xde,(06) },
1102 	{ AFDIVRW,	yfmvx,	Px, 0xde,(07) },
1103 	{ AFDIVRL,	yfmvx,	Px, 0xda,(07) },
1104 	{ AFDIVRF,	yfmvx,	Px, 0xd8,(07) },
1105 	{ AFDIVRD,	yfadd,	Px, 0xdc,(07),0xd8,(07),0xdc,(06) },
1106 
1107 	{ AFXCHD,	yfxch,	Px, 0xd9,(01),0xd9,(01) },
1108 	{ AFFREE },
1109 	{ AFLDCW,	ystcw,	Px, 0xd9,(05),0xd9,(05) },
1110 	{ AFLDENV,	ystcw,	Px, 0xd9,(04),0xd9,(04) },
1111 	{ AFRSTOR,	ysvrs,	Px, 0xdd,(04),0xdd,(04) },
1112 	{ AFSAVE,	ysvrs,	Px, 0xdd,(06),0xdd,(06) },
1113 	{ AFSTCW,	ystcw,	Px, 0xd9,(07),0xd9,(07) },
1114 	{ AFSTENV,	ystcw,	Px, 0xd9,(06),0xd9,(06) },
1115 	{ AFSTSW,	ystsw,	Px, 0xdd,(07),0xdf,0xe0 },
1116 	{ AF2XM1,	ynone,	Px, 0xd9, 0xf0 },
1117 	{ AFABS,	ynone,	Px, 0xd9, 0xe1 },
1118 	{ AFCHS,	ynone,	Px, 0xd9, 0xe0 },
1119 	{ AFCLEX,	ynone,	Px, 0xdb, 0xe2 },
1120 	{ AFCOS,	ynone,	Px, 0xd9, 0xff },
1121 	{ AFDECSTP,	ynone,	Px, 0xd9, 0xf6 },
1122 	{ AFINCSTP,	ynone,	Px, 0xd9, 0xf7 },
1123 	{ AFINIT,	ynone,	Px, 0xdb, 0xe3 },
1124 	{ AFLD1,	ynone,	Px, 0xd9, 0xe8 },
1125 	{ AFLDL2E,	ynone,	Px, 0xd9, 0xea },
1126 	{ AFLDL2T,	ynone,	Px, 0xd9, 0xe9 },
1127 	{ AFLDLG2,	ynone,	Px, 0xd9, 0xec },
1128 	{ AFLDLN2,	ynone,	Px, 0xd9, 0xed },
1129 	{ AFLDPI,	ynone,	Px, 0xd9, 0xeb },
1130 	{ AFLDZ,	ynone,	Px, 0xd9, 0xee },
1131 	{ AFNOP,	ynone,	Px, 0xd9, 0xd0 },
1132 	{ AFPATAN,	ynone,	Px, 0xd9, 0xf3 },
1133 	{ AFPREM,	ynone,	Px, 0xd9, 0xf8 },
1134 	{ AFPREM1,	ynone,	Px, 0xd9, 0xf5 },
1135 	{ AFPTAN,	ynone,	Px, 0xd9, 0xf2 },
1136 	{ AFRNDINT,	ynone,	Px, 0xd9, 0xfc },
1137 	{ AFSCALE,	ynone,	Px, 0xd9, 0xfd },
1138 	{ AFSIN,	ynone,	Px, 0xd9, 0xfe },
1139 	{ AFSINCOS,	ynone,	Px, 0xd9, 0xfb },
1140 	{ AFSQRT,	ynone,	Px, 0xd9, 0xfa },
1141 	{ AFTST,	ynone,	Px, 0xd9, 0xe4 },
1142 	{ AFXAM,	ynone,	Px, 0xd9, 0xe5 },
1143 	{ AFXTRACT,	ynone,	Px, 0xd9, 0xf4 },
1144 	{ AFYL2X,	ynone,	Px, 0xd9, 0xf1 },
1145 	{ AFYL2XP1,	ynone,	Px, 0xd9, 0xf9 },
1146 
1147 	{ ACMPXCHGB,	yrb_mb,	Pb, 0x0f,0xb0 },
1148 	{ ACMPXCHGL,	yrl_ml,	Px, 0x0f,0xb1 },
1149 	{ ACMPXCHGW,	yrl_ml,	Pe, 0x0f,0xb1 },
1150 	{ ACMPXCHGQ,	yrl_ml,	Pw, 0x0f,0xb1 },
1151 	{ ACMPXCHG8B,	yscond,	Pm, 0xc7,(01) },
1152 	{ AINVD,	ynone,	Pm, 0x08 },
1153 	{ AINVLPG,	ymbs,	Pm, 0x01,(07) },
1154 	{ ALFENCE,	ynone,	Pm, 0xae,0xe8 },
1155 	{ AMFENCE,	ynone,	Pm, 0xae,0xf0 },
1156 	{ AMOVNTIL,	yrl_ml,	Pm, 0xc3 },
1157 	{ AMOVNTIQ,	yrl_ml, Pw, 0x0f,0xc3 },
1158 	{ ARDMSR,	ynone,	Pm, 0x32 },
1159 	{ ARDPMC,	ynone,	Pm, 0x33 },
1160 	{ ARDTSC,	ynone,	Pm, 0x31 },
1161 	{ ARSM,		ynone,	Pm, 0xaa },
1162 	{ ASFENCE,	ynone,	Pm, 0xae,0xf8 },
1163 	{ ASYSRET,	ynone,	Pm, 0x07 },
1164 	{ AWBINVD,	ynone,	Pm, 0x09 },
1165 	{ AWRMSR,	ynone,	Pm, 0x30 },
1166 
1167 	{ AXADDB,	yrb_mb,	Pb, 0x0f,0xc0 },
1168 	{ AXADDL,	yrl_ml,	Px, 0x0f,0xc1 },
1169 	{ AXADDQ,	yrl_ml,	Pw, 0x0f,0xc1 },
1170 	{ AXADDW,	yrl_ml,	Pe, 0x0f,0xc1 },
1171 
1172 	{ AEND },
1173 	0
1174 };
1175 
1176 Optab*	opindex[ALAST+1];
1177 
1178 /*
1179 AMOVD	0f 6e/r	mmx,reg/mem32[mem64-rex?]
1180 AMOVD	0f 7e/r	reg/mem32[64],mmx	STORE
1181 AMOVQ	0f 6f/r	mmx1,mmx2/mem64
1182 AMOVQ	0f 7f/r	mmx1/mem64,mmx2
1183 */
1184