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