X86: Flesh out the opcode groups for two byte opcodes.

--HG--
extra : convert_revision : 4d51befd6dae4035c0eb685d33e1f5e38467c766
This commit is contained in:
Gabe Black 2007-11-12 14:38:38 -08:00
parent fce45baf17
commit 6d4ba8de34

View file

@ -61,8 +61,62 @@
0x0F: decode OPCODE_OP_TOP5 { 0x0F: decode OPCODE_OP_TOP5 {
format WarnUnimpl { format WarnUnimpl {
0x00: decode OPCODE_OP_BOTTOM3 { 0x00: decode OPCODE_OP_BOTTOM3 {
0x00: group6(); //0x00: group6();
0x01: group7(); 0x00: decode MODRM_REG {
0x0: sldt_Mw_or_Rv();
0x1: str_Mw_or_Rv();
0x2: lldt_Mw_or_Rv();
0x3: ltr_Mw_or_Rv();
0x4: verr_Mw_or_Rv();
0x5: verw_Mw_or_Rv();
//0x6: jmpe_Ev(); // IA-64
default: Inst::UD2();
}
//0x01: group7(); // Ugly, ugly, ugly...
0x01: decode MODRM_MOD {
0x3: decode MODRM_REG {
0x0: decode MODRM_RM {
0x1: vmcall();
0x2: vmlaunch();
0x3: vmresume();
0x4: vmxoff();
default: Inst::UD2();
}
0x1: decode MODRM_RM {
0x0: monitor();
0x1: mwait();
default: Inst::UD2();
}
0x3: decode MODRM_RM {
0x0: vmrun();
0x1: vmmcall();
0x2: vmload();
0x3: vmsave();
0x4: stgi();
0x5: clgi();
0x6: skinit();
0x7: invlpga();
}
0x4: smsw_Rv();
0x6: lmsw_Rv();
0x7: decode MODRM_RM {
0x0: swapgs();
0x1: rdtscp();
default: Inst::UD2();
}
default: Inst::UD2();
}
default: decode MODRM_REG {
0x0: sgdt_Ms();
0x1: sidt_Ms();
0x2: lgdt_Ms();
0x3: lidt_Ms();
0x4: smsw_Mw();
0x6: lmsw_Mw();
0x7: invlpg_M();
default: Inst::UD2();
}
}
0x02: lar_Gv_Ew(); 0x02: lar_Gv_Ew();
0x03: lsl_Gv_Ew(); 0x03: lsl_Gv_Ew();
//sandpile.org doesn't seem to know what this is... ? //sandpile.org doesn't seem to know what this is... ?
@ -397,9 +451,58 @@
// no prefix // no prefix
0x0: decode OPCODE_OP_BOTTOM3 { 0x0: decode OPCODE_OP_BOTTOM3 {
0x0: pshufw_Pq_Qq_Ib(); 0x0: pshufw_Pq_Qq_Ib();
0x1: group13_pshimw(); //0x1: group13_pshimw();
0x2: group14_pshimd(); 0x1: decode MODRM_REG {
0x3: group15_pshimq(); 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: group14_pshimd();
0x2: decode MODRM_REG {
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();
}
default: Inst::UD2();
}
//0x3: group15_pshimq();
0x3: decode MODRM_REG {
0x2: decode LEGACY_OP {
0x0: psrlq_PRq_Ib();
0x1: psrlq_VRo_Ib();
}
0x3: decode LEGACY_OP {
0x0: Inst::UD2();
0x1: psrldq_VRo_Ib();
}
0x6: decode LEGACY_OP {
0x0: psllq_PRq_Ib();
0x1: psllq_VRo_Ib();
}
0x7: decode LEGACY_OP {
0x0: Inst::UD2();
0x1: pslldq_VRo_Ib();
}
default: Inst::UD2();
}
0x4: pcmpeqb_Pq_Qq(); 0x4: pcmpeqb_Pq_Qq();
0x5: pcmpeqw_Pq_Qq(); 0x5: pcmpeqw_Pq_Qq();
0x6: pcmpeqd_Pq_Qq(); 0x6: pcmpeqd_Pq_Qq();
@ -413,9 +516,58 @@
// operand size (0x66) // operand size (0x66)
0x1: decode OPCODE_OP_BOTTOM3 { 0x1: decode OPCODE_OP_BOTTOM3 {
0x0: pshufd_Vo_Wo_Ib(); 0x0: pshufd_Vo_Wo_Ib();
0x1: group13_pshimw(); //0x1: group13_pshimw();
0x2: group14_pshimd(); 0x1: decode MODRM_REG {
0x3: group15_pshimq_dq(); 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: group14_pshimd();
0x2: decode MODRM_REG {
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();
}
default: Inst::UD2();
}
//0x3: group15_pshimq();
0x3: decode MODRM_REG {
0x2: decode LEGACY_OP {
0x0: psrlq_PRq_Ib();
0x1: psrlq_VRo_Ib();
}
0x3: decode LEGACY_OP {
0x0: Inst::UD2();
0x1: psrldq_VRo_Ib();
}
0x6: decode LEGACY_OP {
0x0: psllq_PRq_Ib();
0x1: psllq_VRo_Ib();
}
0x7: decode LEGACY_OP {
0x0: Inst::UD2();
0x1: pslldq_VRo_Ib();
}
default: Inst::UD2();
}
0x4: pcmpeqb_Vo_Wo(); 0x4: pcmpeqb_Vo_Wo();
0x5: pcmpeqw_Vo_Wo(); 0x5: pcmpeqw_Vo_Wo();
0x6: pcmpeqd_Vo_Wo(); 0x6: pcmpeqd_Vo_Wo();
@ -518,7 +670,21 @@
0x3: bts_Ev_Gv(); 0x3: bts_Ev_Gv();
0x4: shrd_Ev_Gv_Ib(); 0x4: shrd_Ev_Gv_Ib();
0x5: shrd_Ev_Gv_rCl(); 0x5: shrd_Ev_Gv_rCl();
0x6: group16(); //0x6: group16();
0x6: decode MODRM_MOD {
0x3: decode MODRM_REG {
0x5: lfence();
0x6: mfence();
0x7: sfence();
default: Inst::UD2();
}
default: decode MODRM_REG {
0x0: fxsave();
0x1: fxrstor();
0x7: clflush();
default: Inst::UD2();
}
}
0x7: Inst::IMUL(Gv,Ev); 0x7: Inst::IMUL(Gv,Ev);
} }
0x16: decode OPCODE_OP_BOTTOM3 { 0x16: decode OPCODE_OP_BOTTOM3 {
@ -536,8 +702,16 @@
} }
0x17: decode OPCODE_OP_BOTTOM3 { 0x17: decode OPCODE_OP_BOTTOM3 {
0x0: jmpe_Jz(); // IA-64? 0x0: jmpe_Jz(); // IA-64?
0x1: group11_UD2(); //0x1: group11_UD2();
0x2: group8_Ev_Ib(); 0x1: Inst::UD2();
//0x2: group8_Ev_Ib();
0x2: decode MODRM_REG {
0x4: bt_Ev_Ib();
0x5: bts_Ev_Ib();
0x6: btr_Ev_Ib();
0x7: btc_Ev_Ib();
default: Inst::UD2();
}
0x3: btc_Ev_Gv(); 0x3: btc_Ev_Gv();
0x4: bsf_Gv_Ev(); 0x4: bsf_Gv_Ev();
0x5: bsr_Gv_Ev(); 0x5: bsr_Gv_Ev();
@ -550,7 +724,19 @@
0x18: decode OPCODE_OP_BOTTOM3 { 0x18: decode OPCODE_OP_BOTTOM3 {
0x0: xadd_Eb_Gb(); 0x0: xadd_Eb_Gb();
0x1: xadd_Ev_Gv(); 0x1: xadd_Ev_Gv();
0x7: group9(); //0x7: group9();
0x7: decode MODRM_REG {
0x1: cmpxchg_Mq();
0x6: decode LEGACY_OP {
0x1: vmclear_Mq();
default: decode LEGACY_REP {
0x1: vmxon_Mq();
0x0: vmptrld_Mq();
}
}
0x7: vmptrst_Mq();
default: Inst::UD2();
}
default: decode LEGACY_DECODEVAL { default: decode LEGACY_DECODEVAL {
// no prefix // no prefix
0x0: decode OPCODE_OP_BOTTOM3 { 0x0: decode OPCODE_OP_BOTTOM3 {