104,106c104,106
< 0x01: decode MODRM_MOD {
< 0x3: decode MODRM_REG {
< 0x0: decode MODRM_RM {
---
> 0x01: decode MODRM_REG {
> 0x0: decode MODRM_MOD {
> 0x3: decode MODRM_RM {
113c113,116
< 0x1: decode MODRM_RM {
---
> default: sgdt_Ms();
> }
> 0x1: decode MODRM_MOD {
> 0x3: decode MODRM_RM {
117a121,123
> default: sidt_Ms();
> }
> 0x2: decode MODRM_MOD {
119,126c125,126
< 0x0: vmrun();
< 0x1: vmmcall();
< 0x2: vmload();
< 0x3: vmsave();
< 0x4: stgi();
< 0x5: clgi();
< 0x6: skinit();
< 0x7: invlpga();
---
> 0x0: xgetbv();
> 0x1: xsetbv();
128,140c128
< 0x4: Inst::SMSW(Rv);
< 0x6: Inst::LMSW(Rv);
< 0x7: decode MODRM_RM {
< 0x0: Inst::SWAPGS();
< 0x1: rdtscp();
< default: Inst::UD2();
< }
< default: Inst::UD2();
< }
< default: decode MODRM_REG {
< 0x0: sgdt_Ms();
< 0x1: sidt_Ms();
< 0x2: decode MODE_SUBMODE {
---
> default: decode MODE_SUBMODE {
149c137,149
< 0x3: decode MODE_SUBMODE {
---
> }
> 0x3: decode MODRM_MOD {
> 0x3: decode MODRM_RM {
> 0x0: vmrun();
> 0x1: vmmcall();
> 0x2: vmload();
> 0x3: vmsave();
> 0x4: stgi();
> 0x5: clgi();
> 0x6: skinit();
> 0x7: invlpga();
> }
> default: decode MODE_SUBMODE {
158,161d157
< 0x4: Inst::SMSW(Mw);
< 0x6: Inst::LMSW(Mw);
< 0x7: Inst::INVLPG(M);
< default: Inst::UD2();
162a159,171
> 0x4: decode MODRM_MOD {
> 0x3: Inst::SMSW(Rv);
> default: Inst::SMSW(Mw);
> }
> 0x6: Inst::LMSW(Ew);
> 0x7: decode MODRM_MOD {
> 0x3: decode MODRM_RM {
> 0x0: Inst::SWAPGS();
> 0x1: rdtscp();
> default: Inst::UD2();
> }
> default: Inst::INVLPG(M);
> }
295,296c304,305
< 0x3: MOVHLPS(Vq,VRq);
< default: MOVLPS(Vq,Mq);
---
> 0x3: MOVHLPS(Vps,VRq);
> default: MOVLPS(Vps,Mq);
298c307
< 0x3: MOVLPS(Mq,Vq);
---
> 0x3: MOVLPS(Mq,Vps);
300c309
< 0x5: UNPCKHPS(Vpd,Wq);
---
> 0x5: UNPCKHPS(Vps,Wq);
302,303c311,312
< 0x3: MOVLHPS(Vq,VRq);
< default: MOVHPS(Vq,Mq);
---
> 0x3: MOVLHPS(Vps,VRq);
> default: MOVHPS(Vps,Mq);
336c345
< //group17();
---
> //group16();
359,360d367
< 0x4: WarnUnimpl::mov_Rd_Td();
< 0x6: WarnUnimpl::mov_Td_Rd();
363,366c370,384
< // lock prefix (0xF0)
< 0x2: decode OPCODE_OP_BOTTOM3 {
< 0x0: WarnUnimpl::mov_Rd_CR8D();
< 0x2: WarnUnimpl::mov_CR8D_Rd();
---
> default: UD2();
> }
> 0x05: decode LEGACY_DECODEVAL {
> // no prefix
> 0x0: decode OPCODE_OP_BOTTOM3 {
> //These moves should really use size o (octword), but
> //because they are split in two, they use q (quadword).
> 0x0: MOVAPS(Vq,Wq);
> 0x1: MOVAPS(Wq,Vq);
> 0x2: CVTPI2PS(Vq,Qq);
> 0x3: WarnUnimpl::movntps_Mo_Vo();
> 0x4: CVTTPS2PI(Pq,Wq);
> 0x5: CVTPS2PI(Pq,Wq);
> 0x6: UCOMISS(Vd,Wd);
> 0x7: COMISS(Vd,Wd);
367a386,412
> // repe (0xF3)
> 0x4: decode OPCODE_OP_BOTTOM3 {
> 0x2: CVTSI2SS(Vd,Ed);
> 0x4: CVTTSS2SI(Gd,Wd);
> 0x5: CVTSS2SI(Gd,Wd);
> default: UD2();
> }
> // operand size (0x66)
> 0x1: decode OPCODE_OP_BOTTOM3 {
> 0x0: MOVAPD(Vo,Wo);
> 0x1: MOVAPD(Wo,Vo);
> 0x2: CVTPI2PD(Vo,Qq);
> 0x3: WarnUnimpl::movntpd_Mo_Vo();
> 0x4: CVTTPD2PI(Pq,Wo);
> 0x5: CVTPD2PI(Pq,Wo);
> 0x6: UCOMISD(Vq,Wq);
> 0x7: COMISD(Vq,Wq);
> }
> // repne (0xF2)
> 0x8: decode OPCODE_OP_BOTTOM3 {
> // The size of the V operand should be q, not dp
> 0x2: CVTSI2SD(Vdp,Edp);
> // The size of the W operand should be q, not dp
> 0x4: CVTTSD2SI(Gdp,Wdp);
> 0x5: CVTSD2SI(Gd,Wq);
> default: UD2();
> }
371,413d415
< 0x05: decode LEGACY_DECODEVAL {
< // no prefix
< 0x0: decode OPCODE_OP_BOTTOM3 {
< //These moves should really use size o (octword), but
< //because they are split in two, they use q (quadword).
< 0x0: Inst::MOVAPS(Vq,Wq);
< 0x1: Inst::MOVAPS(Wq,Vq);
< 0x2: Inst::CVTPI2PS(Vq,Qq);
< 0x3: movntps_Mo_Vo();
< 0x4: Inst::CVTTPS2PI(Pq,Wq);
< 0x5: Inst::CVTPS2PI(Pq,Wq);
< 0x6: Inst::UCOMISS(Vd,Wd);
< 0x7: Inst::COMISS(Vd,Wd);
< }
< // repe (0xF3)
< 0x4: decode OPCODE_OP_BOTTOM3 {
< 0x2: Inst::CVTSI2SS(Vd,Ed);
< 0x4: Inst::CVTTSS2SI(Gd,Wd);
< 0x5: Inst::CVTSS2SI(Gd,Wd);
< default: Inst::UD2();
< }
< // operand size (0x66)
< 0x1: decode OPCODE_OP_BOTTOM3 {
< 0x0: Inst::MOVAPD(Vo,Wo);
< 0x1: Inst::MOVAPD(Wo,Vo);
< 0x2: Inst::CVTPI2PD(Vo,Qq);
< 0x3: movntpd_Mo_Vo();
< 0x4: Inst::CVTTPD2PI(Pq,Wo);
< 0x5: Inst::CVTPD2PI(Pq,Wo);
< 0x6: Inst::UCOMISD(Vq,Wq);
< 0x7: Inst::COMISD(Vq,Wq);
< }
< // repne (0xF2)
< 0x8: decode OPCODE_OP_BOTTOM3 {
< // The size of the V operand should be q, not dp
< 0x2: Inst::CVTSI2SD(Vdp,Edp);
< // The size of the W operand should be q, not dp
< 0x4: Inst::CVTTSD2SI(Gdp,Wdp);
< 0x5: Inst::CVTSD2SI(Gd,Wq);
< default: Inst::UD2();
< }
< default: Inst::UD2();
< }
430d431
< 0x1: three_byte_opcode();
432,436c433
< 0x3: three_byte_opcode();
< 0x4: three_byte_opcode();
< 0x5: three_byte_opcode();
< 0x6: three_byte_opcode();
< 0x7: three_byte_opcode();
---
> default: UD2();
485,487c482
< //This really should be type o, but it works on q sized
< //chunks at a time.
< 0x7: XORPD(Vq,Wq);
---
> 0x7: XORPD(Vo,Wo);
602c597
< //0x1: group13_pshimw();
---
> //0x1: group12_pshimw();
604,615c599,601
< 0x2: decode LEGACY_OP {
< 0x0: PSRLW(PRq,Ib);
< 0x1: PSRLW(VRo,Ib);
< }
< 0x4: decode LEGACY_OP {
< 0x0: PSRAW(PRq,Ib);
< 0x1: PSRAW(VRo,Ib);
< }
< 0x6: decode LEGACY_OP {
< 0x0: PSLLW(PRq,Ib);
< 0x1: PSLLW(VRo,Ib);
< }
---
> 0x2: PSRLW(PRq,Ib);
> 0x4: PSRAW(PRq,Ib);
> 0x6: PSLLW(PRq,Ib);
618c604
< //0x2: group14_pshimd();
---
> //0x2: group13_pshimd();
620,631c606,608
< 0x2: decode LEGACY_OP {
< 0x0: PSRLD(PRq,Ib);
< 0x1: PSRLD(VRo,Ib);
< }
< 0x4: decode LEGACY_OP {
< 0x0: PSRAD(PRq,Ib);
< 0x1: PSRAD(VRo,Ib);
< }
< 0x6: decode LEGACY_OP {
< 0x0: PSLLD(PRq,Ib);
< 0x1: PSLLD(VRo,Ib);
< }
---
> 0x2: PSRLD(PRq,Ib);
> 0x4: PSRAD(PRq,Ib);
> 0x6: PSLLD(PRq,Ib);
634c611
< //0x3: group15_pshimq();
---
> //0x3: group14_pshimq();
636,651c613,614
< 0x2: decode LEGACY_OP {
< 0x0: PSRLQ(PRq,Ib);
< 0x1: PSRLQ(VRo,Ib);
< }
< 0x3: decode LEGACY_OP {
< 0x0: UD2();
< 0x1: WarnUnimpl::psrldq_VRo_Ib();
< }
< 0x6: decode LEGACY_OP {
< 0x0: PSLLQ(PRq,Ib);
< 0x1: PSLLQ(VRo,Ib);
< }
< 0x7: decode LEGACY_OP {
< 0x0: UD2();
< 0x1: WarnUnimpl::pslldq_VRo_Ib();
< }
---
> 0x2: PSRLQ(PRq,Ib);
> 0x6: PSLLQ(PRq,Ib);
667c630
< //0x1: group13_pshimw();
---
> //0x1: group12_pshimw();
669,681c632,634
< 0x2: decode LEGACY_OP {
< 0x0: PSRLW(PRq,Ib);
< 0x1: PSRLW(VRo,Ib);
< }
< 0x4: decode LEGACY_OP {
< 0x0: PSRAW(PRq,Ib);
< 0x1: PSRAW(VRo,Ib);
< }
< 0x6: decode LEGACY_OP {
< 0x0: PSLLW(PRq,Ib);
< 0x1: PSLLW(VRo,Ib);
< }
< default: Inst::UD2();
---
> 0x2: PSRLW(VRo,Ib);
> 0x4: PSRAW(VRo,Ib);
> 0x6: PSLLW(VRo,Ib);
683c636
< //0x2: group14_pshimd();
---
> //0x2: group13_pshimd();
685,696c638,640
< 0x2: decode LEGACY_OP {
< 0x0: PSRLD(PRq,Ib);
< 0x1: PSRLD(VRo,Ib);
< }
< 0x4: decode LEGACY_OP {
< 0x0: PSRAD(PRq,Ib);
< 0x1: PSRAD(VRo,Ib);
< }
< 0x6: decode LEGACY_OP {
< 0x0: PSLLD(PRq,Ib);
< 0x1: PSLLD(VRo,Ib);
< }
---
> 0x2: PSRLD(VRo,Ib);
> 0x4: PSRAD(VRo,Ib);
> 0x6: PSLLD(VRo,Ib);
699c643
< //0x3: group15_pshimq();
---
> //0x3: group14_pshimq();
701,716c645,648
< 0x2: decode LEGACY_OP {
< 0x0: PSRLQ(PRq,Ib);
< 0x1: PSRLQ(VRo,Ib);
< }
< 0x3: decode LEGACY_OP {
< 0x0: UD2();
< 0x1: WarnUnimpl::psrldq_VRo_Ib();
< }
< 0x6: decode LEGACY_OP {
< 0x0: PSLLQ(PRq,Ib);
< 0x1: PSLLQ(VRo,Ib);
< }
< 0x7: decode LEGACY_OP {
< 0x0: UD2();
< 0x1: WarnUnimpl::pslldq_VRo_Ib();
< }
---
> 0x2: PSRLQ(VRo,Ib);
> 0x3: WarnUnimpl::psrldq_VRo_Ib();
> 0x6: PSLLQ(VRo,Ib);
> 0x7: WarnUnimpl::pslldq_VRo_Ib();
734,735c666,667
< 0x0: WarnUnimpl::vmread_Ed_or_Eq_Gd_or_Gq();
< 0x1: WarnUnimpl::vmwrite_Gd_or_Gq_Ed_or_Eq();
---
> 0x0: WarnUnimpl::vmread_Edp_Gdp();
> 0x1: WarnUnimpl::vmwrite_Gdp_Edp();
817,818c749
< 0x6: xbts_and_cmpxchg();
< 0x7: ibts_and_cmpxchg();
---
> default: Inst::UD2();
827,835c758,761
< //0x6: group16();
< 0x6: decode MODRM_REG {
< 0x0: fxsave();
< 0x1: fxrstor();
< 0x2: Inst::LDMXCSR(Md);
< 0x3: Inst::STMXCSR(Md);
< 0x4: Inst::UD2();
< 0x5: decode MODRM_MOD {
< 0x3: BasicOperate::LFENCE(
---
> //0x6: group15();
> 0x6: decode MODRM_MOD {
> 0x3: decode MODRM_REG {
> 0x5: BasicOperate::LFENCE(
837,840c763
< default: Inst::UD2();
< }
< 0x6: decode MODRM_MOD {
< 0x3: BasicOperate::MFENCE(
---
> 0x6: BasicOperate::MFENCE(
842,845c765
< default: Inst::UD2();
< }
< 0x7: decode MODRM_MOD {
< 0x3: BasicOperate::SFENCE(
---
> 0x7: BasicOperate::SFENCE(
848a769,778
> default: decode MODRM_REG {
> 0x0: fxsave();
> 0x1: fxrstor();
> 0x2: Inst::LDMXCSR(Md);
> 0x3: Inst::STMXCSR(Md);
> 0x4: xsave();
> 0x5: xrstor();
> 0x6: Inst::UD2();
> 0x7: clflush();
> }
868,869c798,802
< 0x0: WarnUnimpl::jmpe_Jz(); // IA-64?
< //0x1: group11_UD2();
---
> 0x0: decode LEGACY_REP {
> 0x0: WarnUnimpl::jmpe_Jz();
> 0x1: WarnUnimpl::popcnt_Gv_Ev();
> }
> //0x1: group10_UD2();