two_byte_opcodes.isa (6610:dbfe22c711d5) two_byte_opcodes.isa (6611:2cd76560a1f1)
1// Copyright (c) 2008 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer;
8// redistributions in binary form must reproduce the above copyright

--- 87 unchanged lines hidden (view full) ---

96 0x2: Inst::LLDT(Ew);
97 0x3: Inst::LTR(Ew);
98 0x4: verr_Mw_or_Rv();
99 0x5: verw_Mw_or_Rv();
100 //0x6: jmpe_Ev(); // IA-64
101 default: Inst::UD2();
102 }
103 //0x01: group7(); // Ugly, ugly, ugly...
1// Copyright (c) 2008 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer;
8// redistributions in binary form must reproduce the above copyright

--- 87 unchanged lines hidden (view full) ---

96 0x2: Inst::LLDT(Ew);
97 0x3: Inst::LTR(Ew);
98 0x4: verr_Mw_or_Rv();
99 0x5: verw_Mw_or_Rv();
100 //0x6: jmpe_Ev(); // IA-64
101 default: Inst::UD2();
102 }
103 //0x01: group7(); // Ugly, ugly, ugly...
104 0x01: decode MODRM_MOD {
105 0x3: decode MODRM_REG {
106 0x0: decode MODRM_RM {
104 0x01: decode MODRM_REG {
105 0x0: decode MODRM_MOD {
106 0x3: decode MODRM_RM {
107 0x1: vmcall();
108 0x2: vmlaunch();
109 0x3: vmresume();
110 0x4: vmxoff();
111 default: Inst::UD2();
112 }
107 0x1: vmcall();
108 0x2: vmlaunch();
109 0x3: vmresume();
110 0x4: vmxoff();
111 default: Inst::UD2();
112 }
113 0x1: decode MODRM_RM {
113 default: sgdt_Ms();
114 }
115 0x1: decode MODRM_MOD {
116 0x3: decode MODRM_RM {
114 0x0: monitor();
115 0x1: mwait();
116 default: Inst::UD2();
117 }
117 0x0: monitor();
118 0x1: mwait();
119 default: Inst::UD2();
120 }
121 default: sidt_Ms();
122 }
123 0x2: decode MODRM_MOD {
118 0x3: decode MODRM_RM {
124 0x3: decode MODRM_RM {
119 0x0: vmrun();
120 0x1: vmmcall();
121 0x2: vmload();
122 0x3: vmsave();
123 0x4: stgi();
124 0x5: clgi();
125 0x6: skinit();
126 0x7: invlpga();
125 0x0: xgetbv();
126 0x1: xsetbv();
127 }
127 }
128 0x4: Inst::SMSW(Rv);
129 0x6: Inst::LMSW(Rv);
130 0x7: decode MODRM_RM {
131 0x0: Inst::SWAPGS();
132 0x1: rdtscp();
133 default: Inst::UD2();
134 }
135 default: Inst::UD2();
136 }
137 default: decode MODRM_REG {
138 0x0: sgdt_Ms();
139 0x1: sidt_Ms();
140 0x2: decode MODE_SUBMODE {
128 default: decode MODE_SUBMODE {
141 0x0: Inst::LGDT(M);
142 default: decode OPSIZE {
143 // 16 bit operand sizes are special, but only
144 // in legacy and compatability modes.
145 0x2: Inst::LGDT_16(M);
146 default: Inst::LGDT(M);
147 }
148 }
129 0x0: Inst::LGDT(M);
130 default: decode OPSIZE {
131 // 16 bit operand sizes are special, but only
132 // in legacy and compatability modes.
133 0x2: Inst::LGDT_16(M);
134 default: Inst::LGDT(M);
135 }
136 }
149 0x3: decode MODE_SUBMODE {
137 }
138 0x3: decode MODRM_MOD {
139 0x3: decode MODRM_RM {
140 0x0: vmrun();
141 0x1: vmmcall();
142 0x2: vmload();
143 0x3: vmsave();
144 0x4: stgi();
145 0x5: clgi();
146 0x6: skinit();
147 0x7: invlpga();
148 }
149 default: decode MODE_SUBMODE {
150 0x0: Inst::LIDT(M);
151 default: decode OPSIZE {
152 // 16 bit operand sizes are special, but only
153 // in legacy and compatability modes.
154 0x2: Inst::LIDT_16(M);
155 default: Inst::LIDT(M);
156 }
157 }
150 0x0: Inst::LIDT(M);
151 default: decode OPSIZE {
152 // 16 bit operand sizes are special, but only
153 // in legacy and compatability modes.
154 0x2: Inst::LIDT_16(M);
155 default: Inst::LIDT(M);
156 }
157 }
158 0x4: Inst::SMSW(Mw);
159 0x6: Inst::LMSW(Mw);
160 0x7: Inst::INVLPG(M);
161 default: Inst::UD2();
162 }
158 }
159 0x4: decode MODRM_MOD {
160 0x3: Inst::SMSW(Rv);
161 default: Inst::SMSW(Mw);
162 }
163 0x6: Inst::LMSW(Ew);
164 0x7: decode MODRM_MOD {
165 0x3: decode MODRM_RM {
166 0x0: Inst::SWAPGS();
167 0x1: rdtscp();
168 default: Inst::UD2();
169 }
170 default: Inst::INVLPG(M);
171 }
163 }
164 0x02: lar_Gv_Ew();
165 0x03: lsl_Gv_Ew();
166 // sandpile.org doesn't seem to know what this is...? We'll
167 // use it for pseudo instructions. We've got 16 bits of space
168 // to play with so there can be quite a few pseudo
169 // instructions.
170 //0x04: loadall_or_reset_or_hang();

--- 116 unchanged lines hidden (view full) ---

287 }
288 format Inst{
289 0x02: decode LEGACY_DECODEVAL {
290 // no prefix
291 0x0: decode OPCODE_OP_BOTTOM3 {
292 0x0: MOVUPS(Vo,Wo);
293 0x1: MOVUPS(Wo,Vo);
294 0x2: decode MODRM_MOD {
172 }
173 0x02: lar_Gv_Ew();
174 0x03: lsl_Gv_Ew();
175 // sandpile.org doesn't seem to know what this is...? We'll
176 // use it for pseudo instructions. We've got 16 bits of space
177 // to play with so there can be quite a few pseudo
178 // instructions.
179 //0x04: loadall_or_reset_or_hang();

--- 116 unchanged lines hidden (view full) ---

296 }
297 format Inst{
298 0x02: decode LEGACY_DECODEVAL {
299 // no prefix
300 0x0: decode OPCODE_OP_BOTTOM3 {
301 0x0: MOVUPS(Vo,Wo);
302 0x1: MOVUPS(Wo,Vo);
303 0x2: decode MODRM_MOD {
295 0x3: MOVHLPS(Vq,VRq);
296 default: MOVLPS(Vq,Mq);
304 0x3: MOVHLPS(Vps,VRq);
305 default: MOVLPS(Vps,Mq);
297 }
306 }
298 0x3: MOVLPS(Mq,Vq);
307 0x3: MOVLPS(Mq,Vps);
299 0x4: UNPCKLPS(Vps,Wq);
308 0x4: UNPCKLPS(Vps,Wq);
300 0x5: UNPCKHPS(Vpd,Wq);
309 0x5: UNPCKHPS(Vps,Wq);
301 0x6: decode MODRM_MOD {
310 0x6: decode MODRM_MOD {
302 0x3: MOVLHPS(Vq,VRq);
303 default: MOVHPS(Vq,Mq);
311 0x3: MOVLHPS(Vps,VRq);
312 default: MOVHPS(Vps,Mq);
304 }
305 0x7: MOVHPS(Mq,Vq);
306 }
307 // repe (0xF3)
308 0x4: decode OPCODE_OP_BOTTOM3 {
309 0x0: MOVSS(Vd,Wd);
310 0x1: MOVSS(Wd,Vd);
311 0x2: WarnUnimpl::movsldup_Vo_Wo();

--- 16 unchanged lines hidden (view full) ---

328 0x0: MOVSD(Vq,Wq);
329 0x1: MOVSD(Wq,Vq);
330 0x2: MOVDDUP(Vo,Wq);
331 default: UD2();
332 }
333 default: UD2();
334 }
335 0x03: decode OPCODE_OP_BOTTOM3 {
313 }
314 0x7: MOVHPS(Mq,Vq);
315 }
316 // repe (0xF3)
317 0x4: decode OPCODE_OP_BOTTOM3 {
318 0x0: MOVSS(Vd,Wd);
319 0x1: MOVSS(Wd,Vd);
320 0x2: WarnUnimpl::movsldup_Vo_Wo();

--- 16 unchanged lines hidden (view full) ---

337 0x0: MOVSD(Vq,Wq);
338 0x1: MOVSD(Wq,Vq);
339 0x2: MOVDDUP(Vo,Wq);
340 default: UD2();
341 }
342 default: UD2();
343 }
344 0x03: decode OPCODE_OP_BOTTOM3 {
336 //group17();
345 //group16();
337 0x0: decode MODRM_REG {
338 0x0: WarnUnimpl::prefetch_nta();
339 0x1: PREFETCH_T0(Mb);
340 0x2: WarnUnimpl::prefetch_t1();
341 0x3: WarnUnimpl::prefetch_t2();
342 default: HINT_NOP();
343 }
344 0x1: HINT_NOP();

--- 6 unchanged lines hidden (view full) ---

351 }
352 0x04: decode LEGACY_DECODEVAL {
353 // no prefix
354 0x0: decode OPCODE_OP_BOTTOM3 {
355 0x0: MOV(Rd,Cd);
356 0x1: MOV(Rd,Dd);
357 0x2: MOV(Cd,Rd);
358 0x3: MOV(Dd,Rd);
346 0x0: decode MODRM_REG {
347 0x0: WarnUnimpl::prefetch_nta();
348 0x1: PREFETCH_T0(Mb);
349 0x2: WarnUnimpl::prefetch_t1();
350 0x3: WarnUnimpl::prefetch_t2();
351 default: HINT_NOP();
352 }
353 0x1: HINT_NOP();

--- 6 unchanged lines hidden (view full) ---

360 }
361 0x04: decode LEGACY_DECODEVAL {
362 // no prefix
363 0x0: decode OPCODE_OP_BOTTOM3 {
364 0x0: MOV(Rd,Cd);
365 0x1: MOV(Rd,Dd);
366 0x2: MOV(Cd,Rd);
367 0x3: MOV(Dd,Rd);
359 0x4: WarnUnimpl::mov_Rd_Td();
360 0x6: WarnUnimpl::mov_Td_Rd();
361 default: UD2();
362 }
368 default: UD2();
369 }
363 // lock prefix (0xF0)
364 0x2: decode OPCODE_OP_BOTTOM3 {
365 0x0: WarnUnimpl::mov_Rd_CR8D();
366 0x2: WarnUnimpl::mov_CR8D_Rd();
370 default: UD2();
371 }
372 0x05: decode LEGACY_DECODEVAL {
373 // no prefix
374 0x0: decode OPCODE_OP_BOTTOM3 {
375 //These moves should really use size o (octword), but
376 //because they are split in two, they use q (quadword).
377 0x0: MOVAPS(Vq,Wq);
378 0x1: MOVAPS(Wq,Vq);
379 0x2: CVTPI2PS(Vq,Qq);
380 0x3: WarnUnimpl::movntps_Mo_Vo();
381 0x4: CVTTPS2PI(Pq,Wq);
382 0x5: CVTPS2PI(Pq,Wq);
383 0x6: UCOMISS(Vd,Wd);
384 0x7: COMISS(Vd,Wd);
367 }
385 }
386 // repe (0xF3)
387 0x4: decode OPCODE_OP_BOTTOM3 {
388 0x2: CVTSI2SS(Vd,Ed);
389 0x4: CVTTSS2SI(Gd,Wd);
390 0x5: CVTSS2SI(Gd,Wd);
391 default: UD2();
392 }
393 // operand size (0x66)
394 0x1: decode OPCODE_OP_BOTTOM3 {
395 0x0: MOVAPD(Vo,Wo);
396 0x1: MOVAPD(Wo,Vo);
397 0x2: CVTPI2PD(Vo,Qq);
398 0x3: WarnUnimpl::movntpd_Mo_Vo();
399 0x4: CVTTPD2PI(Pq,Wo);
400 0x5: CVTPD2PI(Pq,Wo);
401 0x6: UCOMISD(Vq,Wq);
402 0x7: COMISD(Vq,Wq);
403 }
404 // repne (0xF2)
405 0x8: decode OPCODE_OP_BOTTOM3 {
406 // The size of the V operand should be q, not dp
407 0x2: CVTSI2SD(Vdp,Edp);
408 // The size of the W operand should be q, not dp
409 0x4: CVTTSD2SI(Gdp,Wdp);
410 0x5: CVTSD2SI(Gd,Wq);
411 default: UD2();
412 }
368 default: UD2();
369 }
370 }
413 default: UD2();
414 }
415 }
371 0x05: decode LEGACY_DECODEVAL {
372 // no prefix
373 0x0: decode OPCODE_OP_BOTTOM3 {
374 //These moves should really use size o (octword), but
375 //because they are split in two, they use q (quadword).
376 0x0: Inst::MOVAPS(Vq,Wq);
377 0x1: Inst::MOVAPS(Wq,Vq);
378 0x2: Inst::CVTPI2PS(Vq,Qq);
379 0x3: movntps_Mo_Vo();
380 0x4: Inst::CVTTPS2PI(Pq,Wq);
381 0x5: Inst::CVTPS2PI(Pq,Wq);
382 0x6: Inst::UCOMISS(Vd,Wd);
383 0x7: Inst::COMISS(Vd,Wd);
384 }
385 // repe (0xF3)
386 0x4: decode OPCODE_OP_BOTTOM3 {
387 0x2: Inst::CVTSI2SS(Vd,Ed);
388 0x4: Inst::CVTTSS2SI(Gd,Wd);
389 0x5: Inst::CVTSS2SI(Gd,Wd);
390 default: Inst::UD2();
391 }
392 // operand size (0x66)
393 0x1: decode OPCODE_OP_BOTTOM3 {
394 0x0: Inst::MOVAPD(Vo,Wo);
395 0x1: Inst::MOVAPD(Wo,Vo);
396 0x2: Inst::CVTPI2PD(Vo,Qq);
397 0x3: movntpd_Mo_Vo();
398 0x4: Inst::CVTTPD2PI(Pq,Wo);
399 0x5: Inst::CVTPD2PI(Pq,Wo);
400 0x6: Inst::UCOMISD(Vq,Wq);
401 0x7: Inst::COMISD(Vq,Wq);
402 }
403 // repne (0xF2)
404 0x8: decode OPCODE_OP_BOTTOM3 {
405 // The size of the V operand should be q, not dp
406 0x2: Inst::CVTSI2SD(Vdp,Edp);
407 // The size of the W operand should be q, not dp
408 0x4: Inst::CVTTSD2SI(Gdp,Wdp);
409 0x5: Inst::CVTSD2SI(Gd,Wq);
410 default: Inst::UD2();
411 }
412 default: Inst::UD2();
413 }
414 0x06: decode OPCODE_OP_BOTTOM3 {
415 0x0: Inst::WRMSR();
416 0x1: Inst::RDTSC();
417 0x2: Inst::RDMSR();
418 0x3: rdpmc();
419#if FULL_SYSTEM
420 0x4: sysenter();
421#else
422 0x4: SyscallInst::sysenter('xc->syscall(Rax)', IsSyscall);
423#endif
424 0x5: sysexit();
425 0x6: Inst::UD2();
426 0x7: getsec();
427 }
428 0x07: decode OPCODE_OP_BOTTOM3 {
429 0x0: three_byte_opcode();
416 0x06: decode OPCODE_OP_BOTTOM3 {
417 0x0: Inst::WRMSR();
418 0x1: Inst::RDTSC();
419 0x2: Inst::RDMSR();
420 0x3: rdpmc();
421#if FULL_SYSTEM
422 0x4: sysenter();
423#else
424 0x4: SyscallInst::sysenter('xc->syscall(Rax)', IsSyscall);
425#endif
426 0x5: sysexit();
427 0x6: Inst::UD2();
428 0x7: getsec();
429 }
430 0x07: decode OPCODE_OP_BOTTOM3 {
431 0x0: three_byte_opcode();
430 0x1: three_byte_opcode();
431 0x2: three_byte_opcode();
432 0x2: three_byte_opcode();
432 0x3: three_byte_opcode();
433 0x4: three_byte_opcode();
434 0x5: three_byte_opcode();
435 0x6: three_byte_opcode();
436 0x7: three_byte_opcode();
433 default: UD2();
437 }
438 format Inst {
439 0x08: decode OPCODE_OP_BOTTOM3 {
440 0x0: CMOVO(Gv,Ev);
441 0x1: CMOVNO(Gv,Ev);
442 0x2: CMOVB(Gv,Ev);
443 0x3: CMOVNB(Gv,Ev);
444 0x4: CMOVZ(Gv,Ev);

--- 32 unchanged lines hidden (view full) ---

477 }
478 // operand size (0x66)
479 0x1: decode OPCODE_OP_BOTTOM3 {
480 0x0: MOVMSKPD(Gd,VRo);
481 0x1: SQRTPD(Vo,Wo);
482 0x4: ANDPD(Vo,Wo);
483 0x5: ANDNPD(Vo,Wo);
484 0x6: ORPD(Vo,Wo);
434 }
435 format Inst {
436 0x08: decode OPCODE_OP_BOTTOM3 {
437 0x0: CMOVO(Gv,Ev);
438 0x1: CMOVNO(Gv,Ev);
439 0x2: CMOVB(Gv,Ev);
440 0x3: CMOVNB(Gv,Ev);
441 0x4: CMOVZ(Gv,Ev);

--- 32 unchanged lines hidden (view full) ---

474 }
475 // operand size (0x66)
476 0x1: decode OPCODE_OP_BOTTOM3 {
477 0x0: MOVMSKPD(Gd,VRo);
478 0x1: SQRTPD(Vo,Wo);
479 0x4: ANDPD(Vo,Wo);
480 0x5: ANDNPD(Vo,Wo);
481 0x6: ORPD(Vo,Wo);
485 //This really should be type o, but it works on q sized
486 //chunks at a time.
487 0x7: XORPD(Vq,Wq);
482 0x7: XORPD(Vo,Wo);
488 default: UD2();
489 }
490 // repne (0xF2)
491 0x8: decode OPCODE_OP_BOTTOM3 {
492 0x1: SQRTSD(Vq,Wq);
493 default: UD2();
494 }
495 default: UD2();

--- 98 unchanged lines hidden (view full) ---

594 0x7: WarnUnimpl::movdqa_Vo_Wo();
595 }
596 default: UD2();
597 }
598 0x0E: decode LEGACY_DECODEVAL {
599 // no prefix
600 0x0: decode OPCODE_OP_BOTTOM3 {
601 0x0: PSHUFW(Pq,Qq,Ib);
483 default: UD2();
484 }
485 // repne (0xF2)
486 0x8: decode OPCODE_OP_BOTTOM3 {
487 0x1: SQRTSD(Vq,Wq);
488 default: UD2();
489 }
490 default: UD2();

--- 98 unchanged lines hidden (view full) ---

589 0x7: WarnUnimpl::movdqa_Vo_Wo();
590 }
591 default: UD2();
592 }
593 0x0E: decode LEGACY_DECODEVAL {
594 // no prefix
595 0x0: decode OPCODE_OP_BOTTOM3 {
596 0x0: PSHUFW(Pq,Qq,Ib);
602 //0x1: group13_pshimw();
597 //0x1: group12_pshimw();
603 0x1: decode MODRM_REG {
598 0x1: decode MODRM_REG {
604 0x2: decode LEGACY_OP {
605 0x0: PSRLW(PRq,Ib);
606 0x1: PSRLW(VRo,Ib);
607 }
608 0x4: decode LEGACY_OP {
609 0x0: PSRAW(PRq,Ib);
610 0x1: PSRAW(VRo,Ib);
611 }
612 0x6: decode LEGACY_OP {
613 0x0: PSLLW(PRq,Ib);
614 0x1: PSLLW(VRo,Ib);
615 }
599 0x2: PSRLW(PRq,Ib);
600 0x4: PSRAW(PRq,Ib);
601 0x6: PSLLW(PRq,Ib);
616 default: UD2();
617 }
602 default: UD2();
603 }
618 //0x2: group14_pshimd();
604 //0x2: group13_pshimd();
619 0x2: decode MODRM_REG {
605 0x2: decode MODRM_REG {
620 0x2: decode LEGACY_OP {
621 0x0: PSRLD(PRq,Ib);
622 0x1: PSRLD(VRo,Ib);
623 }
624 0x4: decode LEGACY_OP {
625 0x0: PSRAD(PRq,Ib);
626 0x1: PSRAD(VRo,Ib);
627 }
628 0x6: decode LEGACY_OP {
629 0x0: PSLLD(PRq,Ib);
630 0x1: PSLLD(VRo,Ib);
631 }
606 0x2: PSRLD(PRq,Ib);
607 0x4: PSRAD(PRq,Ib);
608 0x6: PSLLD(PRq,Ib);
632 default: UD2();
633 }
609 default: UD2();
610 }
634 //0x3: group15_pshimq();
611 //0x3: group14_pshimq();
635 0x3: decode MODRM_REG {
612 0x3: decode MODRM_REG {
636 0x2: decode LEGACY_OP {
637 0x0: PSRLQ(PRq,Ib);
638 0x1: PSRLQ(VRo,Ib);
639 }
640 0x3: decode LEGACY_OP {
641 0x0: UD2();
642 0x1: WarnUnimpl::psrldq_VRo_Ib();
643 }
644 0x6: decode LEGACY_OP {
645 0x0: PSLLQ(PRq,Ib);
646 0x1: PSLLQ(VRo,Ib);
647 }
648 0x7: decode LEGACY_OP {
649 0x0: UD2();
650 0x1: WarnUnimpl::pslldq_VRo_Ib();
651 }
613 0x2: PSRLQ(PRq,Ib);
614 0x6: PSLLQ(PRq,Ib);
652 default: Inst::UD2();
653 }
654 0x4: Inst::PCMPEQB(Pq,Qq);
655 0x5: Inst::PCMPEQW(Pq,Qq);
656 0x6: Inst::PCMPEQD(Pq,Qq);
657 0x7: WarnUnimpl::emms();
658 }
659 // repe (0xF3)
660 0x4: decode OPCODE_OP_BOTTOM3 {
661 0x0: PSHUFHW(Vo,Wo,Ib);
662 default: UD2();
663 }
664 // operand size (0x66)
665 0x1: decode OPCODE_OP_BOTTOM3 {
666 0x0: PSHUFD(Vo,Wo,Ib);
615 default: Inst::UD2();
616 }
617 0x4: Inst::PCMPEQB(Pq,Qq);
618 0x5: Inst::PCMPEQW(Pq,Qq);
619 0x6: Inst::PCMPEQD(Pq,Qq);
620 0x7: WarnUnimpl::emms();
621 }
622 // repe (0xF3)
623 0x4: decode OPCODE_OP_BOTTOM3 {
624 0x0: PSHUFHW(Vo,Wo,Ib);
625 default: UD2();
626 }
627 // operand size (0x66)
628 0x1: decode OPCODE_OP_BOTTOM3 {
629 0x0: PSHUFD(Vo,Wo,Ib);
667 //0x1: group13_pshimw();
630 //0x1: group12_pshimw();
668 0x1: decode MODRM_REG {
631 0x1: decode MODRM_REG {
669 0x2: decode LEGACY_OP {
670 0x0: PSRLW(PRq,Ib);
671 0x1: PSRLW(VRo,Ib);
672 }
673 0x4: decode LEGACY_OP {
674 0x0: PSRAW(PRq,Ib);
675 0x1: PSRAW(VRo,Ib);
676 }
677 0x6: decode LEGACY_OP {
678 0x0: PSLLW(PRq,Ib);
679 0x1: PSLLW(VRo,Ib);
680 }
681 default: Inst::UD2();
632 0x2: PSRLW(VRo,Ib);
633 0x4: PSRAW(VRo,Ib);
634 0x6: PSLLW(VRo,Ib);
682 }
635 }
683 //0x2: group14_pshimd();
636 //0x2: group13_pshimd();
684 0x2: decode MODRM_REG {
637 0x2: decode MODRM_REG {
685 0x2: decode LEGACY_OP {
686 0x0: PSRLD(PRq,Ib);
687 0x1: PSRLD(VRo,Ib);
688 }
689 0x4: decode LEGACY_OP {
690 0x0: PSRAD(PRq,Ib);
691 0x1: PSRAD(VRo,Ib);
692 }
693 0x6: decode LEGACY_OP {
694 0x0: PSLLD(PRq,Ib);
695 0x1: PSLLD(VRo,Ib);
696 }
638 0x2: PSRLD(VRo,Ib);
639 0x4: PSRAD(VRo,Ib);
640 0x6: PSLLD(VRo,Ib);
697 default: UD2();
698 }
641 default: UD2();
642 }
699 //0x3: group15_pshimq();
643 //0x3: group14_pshimq();
700 0x3: decode MODRM_REG {
644 0x3: decode MODRM_REG {
701 0x2: decode LEGACY_OP {
702 0x0: PSRLQ(PRq,Ib);
703 0x1: PSRLQ(VRo,Ib);
704 }
705 0x3: decode LEGACY_OP {
706 0x0: UD2();
707 0x1: WarnUnimpl::psrldq_VRo_Ib();
708 }
709 0x6: decode LEGACY_OP {
710 0x0: PSLLQ(PRq,Ib);
711 0x1: PSLLQ(VRo,Ib);
712 }
713 0x7: decode LEGACY_OP {
714 0x0: UD2();
715 0x1: WarnUnimpl::pslldq_VRo_Ib();
716 }
645 0x2: PSRLQ(VRo,Ib);
646 0x3: WarnUnimpl::psrldq_VRo_Ib();
647 0x6: PSLLQ(VRo,Ib);
648 0x7: WarnUnimpl::pslldq_VRo_Ib();
717 default: UD2();
718 }
719 0x4: PCMPEQB(Vo,Wo);
720 0x5: PCMPEQW(Vo,Wo);
721 0x6: PCMPEQD(Vo,Wo);
722 default: UD2();
723 }
724 // repne (0xF2)
725 0x8: decode OPCODE_OP_BOTTOM3 {
726 0x0: PSHUFLW(Vo,Wo,Ib);
727 default: UD2();
728 }
729 default: UD2();
730 }
731 0x0F: decode LEGACY_DECODEVAL {
732 // no prefix
733 0x0: decode OPCODE_OP_BOTTOM3 {
649 default: UD2();
650 }
651 0x4: PCMPEQB(Vo,Wo);
652 0x5: PCMPEQW(Vo,Wo);
653 0x6: PCMPEQD(Vo,Wo);
654 default: UD2();
655 }
656 // repne (0xF2)
657 0x8: decode OPCODE_OP_BOTTOM3 {
658 0x0: PSHUFLW(Vo,Wo,Ib);
659 default: UD2();
660 }
661 default: UD2();
662 }
663 0x0F: decode LEGACY_DECODEVAL {
664 // no prefix
665 0x0: decode OPCODE_OP_BOTTOM3 {
734 0x0: WarnUnimpl::vmread_Ed_or_Eq_Gd_or_Gq();
735 0x1: WarnUnimpl::vmwrite_Gd_or_Gq_Ed_or_Eq();
666 0x0: WarnUnimpl::vmread_Edp_Gdp();
667 0x1: WarnUnimpl::vmwrite_Gdp_Edp();
736 0x6: MOVD(Edp,Pdp);
737 0x7: MOVQ(Qq,Pq);
738 default: UD2();
739 }
740 // repe (0xF3)
741 0x4: decode OPCODE_OP_BOTTOM3 {
742 0x6: MOVQ(Vq,Wq);
743 0x7: WarnUnimpl::movdqu_Wo_Vo();

--- 65 unchanged lines hidden (view full) ---

809 Rax = result.rax;
810 Rbx = result.rbx;
811 Rcx = result.rcx;
812 Rdx = result.rdx;
813 }});
814 0x3: Inst::BT(Ev,Gv);
815 0x4: Inst::SHLD(Ev,Gv,Ib);
816 0x5: Inst::SHLD(Ev,Gv);
668 0x6: MOVD(Edp,Pdp);
669 0x7: MOVQ(Qq,Pq);
670 default: UD2();
671 }
672 // repe (0xF3)
673 0x4: decode OPCODE_OP_BOTTOM3 {
674 0x6: MOVQ(Vq,Wq);
675 0x7: WarnUnimpl::movdqu_Wo_Vo();

--- 65 unchanged lines hidden (view full) ---

741 Rax = result.rax;
742 Rbx = result.rbx;
743 Rcx = result.rcx;
744 Rdx = result.rdx;
745 }});
746 0x3: Inst::BT(Ev,Gv);
747 0x4: Inst::SHLD(Ev,Gv,Ib);
748 0x5: Inst::SHLD(Ev,Gv);
817 0x6: xbts_and_cmpxchg();
818 0x7: ibts_and_cmpxchg();
749 default: Inst::UD2();
819 }
820 0x15: decode OPCODE_OP_BOTTOM3 {
821 0x0: push_gs();
822 0x1: pop_gs();
823 0x2: rsm_smm();
824 0x3: Inst::BTS(Ev,Gv);
825 0x4: Inst::SHRD(Ev,Gv,Ib);
826 0x5: Inst::SHRD(Ev,Gv);
750 }
751 0x15: decode OPCODE_OP_BOTTOM3 {
752 0x0: push_gs();
753 0x1: pop_gs();
754 0x2: rsm_smm();
755 0x3: Inst::BTS(Ev,Gv);
756 0x4: Inst::SHRD(Ev,Gv,Ib);
757 0x5: Inst::SHRD(Ev,Gv);
827 //0x6: group16();
828 0x6: decode MODRM_REG {
829 0x0: fxsave();
830 0x1: fxrstor();
831 0x2: Inst::LDMXCSR(Md);
832 0x3: Inst::STMXCSR(Md);
833 0x4: Inst::UD2();
834 0x5: decode MODRM_MOD {
835 0x3: BasicOperate::LFENCE(
758 //0x6: group15();
759 0x6: decode MODRM_MOD {
760 0x3: decode MODRM_REG {
761 0x5: BasicOperate::LFENCE(
836 {{/*Nothing*/}}, IsReadBarrier);
762 {{/*Nothing*/}}, IsReadBarrier);
837 default: Inst::UD2();
838 }
839 0x6: decode MODRM_MOD {
840 0x3: BasicOperate::MFENCE(
763 0x6: BasicOperate::MFENCE(
841 {{/*Nothing*/}}, IsMemBarrier);
764 {{/*Nothing*/}}, IsMemBarrier);
842 default: Inst::UD2();
843 }
844 0x7: decode MODRM_MOD {
845 0x3: BasicOperate::SFENCE(
765 0x7: BasicOperate::SFENCE(
846 {{/*Nothing*/}}, IsWriteBarrier);
847 default: Inst::UD2();
848 }
766 {{/*Nothing*/}}, IsWriteBarrier);
767 default: Inst::UD2();
768 }
769 default: decode MODRM_REG {
770 0x0: fxsave();
771 0x1: fxrstor();
772 0x2: Inst::LDMXCSR(Md);
773 0x3: Inst::STMXCSR(Md);
774 0x4: xsave();
775 0x5: xrstor();
776 0x6: Inst::UD2();
777 0x7: clflush();
778 }
849 }
850 0x7: Inst::IMUL(Gv,Ev);
851 }
852 format Inst {
853 0x16: decode OPCODE_OP_BOTTOM3 {
854 0x0: CMPXCHG(Eb,Gb);
855 0x1: CMPXCHG(Ev,Gv);
856 0x2: WarnUnimpl::lss_Gz_Mp();
857 0x3: BTR(Ev,Gv);
858 0x4: WarnUnimpl::lfs_Gz_Mp();
859 0x5: WarnUnimpl::lgs_Gz_Mp();
860 //The size of the second operand in these instructions
861 //should really be "b" or "w", but it's set to v in order
862 //to have a consistent register size. This shouldn't
863 //affect behavior.
864 0x6: MOVZX_B(Gv,Ev);
865 0x7: MOVZX_W(Gv,Ev);
866 }
867 0x17: decode OPCODE_OP_BOTTOM3 {
779 }
780 0x7: Inst::IMUL(Gv,Ev);
781 }
782 format Inst {
783 0x16: decode OPCODE_OP_BOTTOM3 {
784 0x0: CMPXCHG(Eb,Gb);
785 0x1: CMPXCHG(Ev,Gv);
786 0x2: WarnUnimpl::lss_Gz_Mp();
787 0x3: BTR(Ev,Gv);
788 0x4: WarnUnimpl::lfs_Gz_Mp();
789 0x5: WarnUnimpl::lgs_Gz_Mp();
790 //The size of the second operand in these instructions
791 //should really be "b" or "w", but it's set to v in order
792 //to have a consistent register size. This shouldn't
793 //affect behavior.
794 0x6: MOVZX_B(Gv,Ev);
795 0x7: MOVZX_W(Gv,Ev);
796 }
797 0x17: decode OPCODE_OP_BOTTOM3 {
868 0x0: WarnUnimpl::jmpe_Jz(); // IA-64?
869 //0x1: group11_UD2();
798 0x0: decode LEGACY_REP {
799 0x0: WarnUnimpl::jmpe_Jz();
800 0x1: WarnUnimpl::popcnt_Gv_Ev();
801 }
802 //0x1: group10_UD2();
870 0x1: UD2();
871 //0x2: group8_Ev_Ib();
872 0x2: decode MODRM_REG {
873 0x4: BT(Ev,Ib);
874 0x5: BTS(Ev,Ib);
875 0x6: BTR(Ev,Ib);
876 0x7: BTC(Ev,Ib);
877 default: UD2();

--- 245 unchanged lines hidden ---
803 0x1: UD2();
804 //0x2: group8_Ev_Ib();
805 0x2: decode MODRM_REG {
806 0x4: BT(Ev,Ib);
807 0x5: BTS(Ev,Ib);
808 0x6: BTR(Ev,Ib);
809 0x7: BTC(Ev,Ib);
810 default: UD2();

--- 245 unchanged lines hidden ---