diff options
Diffstat (limited to 'opcodes/i386-opc.tbl')
-rw-r--r-- | opcodes/i386-opc.tbl | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl index bc71987..6eadc2e 100644 --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -44,7 +44,7 @@ #define InOutPortReg RegD|Word #define FloatAcc Acc|Tbyte -#define FloatReg Class=Reg|Tbyte +#define FloatReg Class=RegFP|Tbyte #define SReg Class=SReg @@ -275,7 +275,9 @@ in, 0xe4, 0, W|No_sSuf|No_qSuf, { Imm8, Acc|Byte|Word|Dword } in, 0xec, 0, W|No_sSuf|No_qSuf, { InOutPortReg, Acc|Byte|Word|Dword } in, 0xe4, 0, W|No_sSuf|No_qSuf|IntelSuffix, { Imm8 } in, 0xec, 0, W|No_sSuf|No_qSuf|IntelSuffix, { InOutPortReg } -out, 0xe6, 0, W|No_sSuf|No_qSuf, { Acc|Byte|Word|Dword, Imm8 } +// Immediates want to be first; md_assemble() takes care of swapping operands +// accordingly. +out, 0xe6, 0, W|No_sSuf|No_qSuf, { Imm8, Acc|Byte|Word|Dword } out, 0xee, 0, W|No_sSuf|No_qSuf, { Acc|Byte|Word|Dword, InOutPortReg } out, 0xe6, 0, W|No_sSuf|No_qSuf|IntelSuffix, { Imm8 } out, 0xee, 0, W|No_sSuf|No_qSuf|IntelSuffix, { InOutPortReg } @@ -979,15 +981,18 @@ fxrstor, 0xfae/1, FXSR, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|IntelSuffix, { Uns fxrstor64, 0xfae/1, FXSR&x64, Modrm|NoSuf|Size64, { Unspecified|BaseIndex } rdpmc, 0xf33, i686, NoSuf, {} // official undefined instr. -ud2, 0xf0b, i186, NoSuf, {} +ud2, 0xf0b, i286, NoSuf, {} // alias for ud2 -ud2a, 0xf0b, i186, NoSuf, {} -// 2nd. official undefined instr. -ud1, 0xfb9, i186, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +ud2a, 0xf0b, i286, NoSuf, {} +// 2nd official undefined instr (older AMD CPUs don't take a ModR/M byte) +ud1, 0xfb9, i286, /*Amd|*/NoSuf, {} +ud1, 0xfb9, i286, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // alias for ud1 -ud2b, 0xfb9, i186, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +ud2b, 0xfb9, i286, /*Amd|*/NoSuf, {} +ud2b, 0xfb9, i286, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // 3rd official undefined instr (older CPUs don't take a ModR/M byte) -ud0, 0xfff, i186, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } +ud0, 0xfff, i286, NoSuf, {} +ud0, 0xfff, i286, Modrm|CheckOperandSize|No_bSuf|No_sSuf, { Reg16|Reg32|Reg64|Unspecified|BaseIndex, Reg16|Reg32|Reg64 } // C (commutative) isn't quite correct here on its own; the condition also // needs inverting when source operands are swapped in order to convert to |