Fixed signatures of recently added ud0 and ud1 instructions, added two-operand NOP (fixes #217)

This commit is contained in:
kobalicek
2020-07-05 13:32:53 +02:00
parent 75f2b69a26
commit ae4ad9075d
3 changed files with 793 additions and 773 deletions

View File

@@ -846,18 +846,32 @@ CaseX86M_GPB_MulDiv:
if (isign3 == ENC_OPS1(None))
goto EmitX86Op;
// Multi-byte NOP instruction "0F 1F /0".
// Single operand NOP instruction "0F 1F /0".
opcode = Opcode::k000F00 | 0x1F;
opReg = 0;
if (isign3 == ENC_OPS1(Reg)) {
opcode.add66hBySize(o0.size());
opcode.addPrefixBySize(o0.size());
rbReg = o0.id();
goto EmitX86R;
}
if (isign3 == ENC_OPS1(Mem)) {
opcode.add66hBySize(o0.size());
opcode.addPrefixBySize(o0.size());
rmRel = &o0;
goto EmitX86M;
}
// Two operand NOP instruction "0F 1F /r".
opReg = o1.id();
opcode.addPrefixBySize(o1.size());
if (isign3 == ENC_OPS2(Reg, Reg)) {
rbReg = o0.id();
goto EmitX86R;
}
if (isign3 == ENC_OPS2(Mem, Reg)) {
rmRel = &o0;
goto EmitX86M;
}

View File

@@ -641,6 +641,8 @@ public:
ASMJIT_INST_0x(nop, Nop) // ANY
ASMJIT_INST_1x(nop, Nop, Gp) // ANY
ASMJIT_INST_1x(nop, Nop, Mem) // ANY
ASMJIT_INST_2x(nop, Nop, Gp, Gp) // ANY
ASMJIT_INST_2x(nop, Nop, Mem, Gp) // ANY
ASMJIT_INST_1x(not_, Not, Gp) // ANY
ASMJIT_INST_1x(not_, Not, Mem) // ANY
ASMJIT_INST_2x(or_, Or, Gp, Gp) // ANY
@@ -723,10 +725,10 @@ public:
ASMJIT_INST_2i(test, Test, Gp, Imm) // ANY
ASMJIT_INST_2x(test, Test, Mem, Gp) // ANY
ASMJIT_INST_2i(test, Test, Mem, Imm) // ANY
ASMJIT_INST_2x(ud0, Ud0, Reg, Reg) // ANY
ASMJIT_INST_2x(ud0, Ud0, Reg, Mem) // ANY
ASMJIT_INST_2x(ud1, Ud1, Reg, Reg) // ANY
ASMJIT_INST_2x(ud1, Ud1, Reg, Mem) // ANY
ASMJIT_INST_1x(ud0, Ud0, Reg) // ANY
ASMJIT_INST_1x(ud0, Ud0, Mem) // ANY
ASMJIT_INST_1x(ud1, Ud1, Reg) // ANY
ASMJIT_INST_1x(ud1, Ud1, Mem) // ANY
ASMJIT_INST_0x(ud2, Ud2) // ANY
ASMJIT_INST_2x(xadd, Xadd, Gp, Gp) // ANY
ASMJIT_INST_2x(xadd, Xadd, Mem, Gp) // ANY

File diff suppressed because it is too large Load Diff