mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 17:00:19 +02:00
OpcodeDecoder: Handle ANDN
This commit is contained in:
1 parent
f088f0a236
commit
877db85428
4 files changed
+39
-1
No files matched your search
@@ -2130,6 +2130,17 @@ void OpDispatchBuilder::ROLImmediateOp(OpcodeArgs) {
|
||||
GenerateFlags_RotateLeftImmediate(Op, ALUOp, Dest, Shift);
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::ANDNBMIOp(OpcodeArgs) {
|
||||
auto* Src1 = LoadSource(GPRClass, Op, Op->Src[0], Op->Flags, -1);
|
||||
auto* Src2 = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags, -1);
|
||||
|
||||
// TODO: This can be replaced with a BIC IR op once it's implemented.
|
||||
auto Dest = _And(_Not(Src1), Src2);
|
||||
|
||||
StoreResult(GPRClass, Op, Dest, -1);
|
||||
GenerateFlags_Logical(Op, Dest, Src1, Src2);
|
||||
}
|
||||
|
||||
void OpDispatchBuilder::RCROp1Bit(OpcodeArgs) {
|
||||
OrderedNode *Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags, -1);
|
||||
auto Size = GetSrcSize(Op) * 8;
|
||||
@@ -5797,6 +5808,8 @@ constexpr uint16_t PF_F2 = 3;
|
||||
|
||||
{OPD(2, 0b01, 0x78), 1, &OpDispatchBuilder::UnimplementedOp},
|
||||
{OPD(2, 0b01, 0x79), 1, &OpDispatchBuilder::UnimplementedOp},
|
||||
|
||||
{OPD(2, 0b00, 0xF2), 1, &OpDispatchBuilder::ANDNBMIOp},
|
||||
};
|
||||
#undef OPD
|
||||
|
||||
|
||||
@@ -324,6 +324,9 @@ public:
|
||||
template<size_t ElementSize>
|
||||
void PSIGN(OpcodeArgs);
|
||||
|
||||
// BMI Ops
|
||||
void ANDNBMIOp(OpcodeArgs);
|
||||
|
||||
// X87 Ops
|
||||
template<size_t width>
|
||||
void FLD(OpcodeArgs);
|
||||
|
||||
@@ -386,7 +386,7 @@ void InitializeVEXTables() {
|
||||
{OPD(2, 0b01, 0xDE), 1, X86InstInfo{"VAESDEC", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(2, 0b01, 0xDF), 1, X86InstInfo{"VAESDECLAST", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
|
||||
{OPD(2, 0b00, 0xF2), 1, X86InstInfo{"ANDN", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(2, 0b00, 0xF2), 1, X86InstInfo{"ANDN", TYPE_INST, FLAGS_MODRM | FLAGS_VEX, 0, nullptr}},
|
||||
|
||||
{OPD(2, 0b00, 0xF3), 1, X86InstInfo{"", TYPE_VEX_GROUP_17, FLAGS_NONE, 0, nullptr}}, // VEX Group 17
|
||||
{OPD(2, 0b01, 0xF3), 1, X86InstInfo{"", TYPE_VEX_GROUP_17, FLAGS_NONE, 0, nullptr}}, // VEX Group 17
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"RegData": {
|
||||
"RAX": "0xFFFFFFFFFFFFFFFF",
|
||||
"RBX": "0",
|
||||
"RCX": "0xFFFFFFFF",
|
||||
"RDX": "0"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
mov rax, 0
|
||||
mov rbx, -1
|
||||
andn rax, rax, rbx
|
||||
andn rbx, rbx, rax
|
||||
|
||||
mov rcx, 0
|
||||
mov rdx, -1
|
||||
andn ecx, ecx, edx
|
||||
andn edx, edx, ecx
|
||||
|
||||
hlt
|
||||
Reference in new issue
Block a user