mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-25 12:00:51 +01:00
Merge pull request #2212 from lioncash/comiss
OpcodeDispatcher: Handle VCOMISD/VCOMISS/VUCOMISD/VUCOMISS
This commit is contained in:
6 files changed
+253
-4
No files matched your search
@@ -5821,6 +5821,11 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() {
|
||||
{OPD(1, 0b00, 0x2B), 1, &OpDispatchBuilder::VMOVVectorNTOp},
|
||||
{OPD(1, 0b01, 0x2B), 1, &OpDispatchBuilder::VMOVVectorNTOp},
|
||||
|
||||
{OPD(1, 0b00, 0x2E), 1, &OpDispatchBuilder::UCOMISxOp<4>},
|
||||
{OPD(1, 0b01, 0x2E), 1, &OpDispatchBuilder::UCOMISxOp<8>},
|
||||
{OPD(1, 0b00, 0x2F), 1, &OpDispatchBuilder::UCOMISxOp<4>},
|
||||
{OPD(1, 0b01, 0x2F), 1, &OpDispatchBuilder::UCOMISxOp<8>},
|
||||
|
||||
{OPD(1, 0b00, 0x54), 1, &OpDispatchBuilder::AVXVectorALUOp<IR::OP_VAND, 16>},
|
||||
{OPD(1, 0b01, 0x54), 1, &OpDispatchBuilder::AVXVectorALUOp<IR::OP_VAND, 16>},
|
||||
|
||||
|
||||
@@ -130,11 +130,11 @@ void InitializeVEXTables() {
|
||||
{OPD(1, 0b10, 0x2D), 1, X86InstInfo{"VCVTSS2SI", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(1, 0b11, 0x2D), 1, X86InstInfo{"VCVTSD2SI", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
|
||||
{OPD(1, 0b00, 0x2E), 1, X86InstInfo{"VUCOMISS", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(1, 0b01, 0x2E), 1, X86InstInfo{"VUCOMISD", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(1, 0b00, 0x2E), 1, X86InstInfo{"VUCOMISS", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_32BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS, 0, nullptr}},
|
||||
{OPD(1, 0b01, 0x2E), 1, X86InstInfo{"VUCOMISD", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS, 0, nullptr}},
|
||||
|
||||
{OPD(1, 0b00, 0x2F), 1, X86InstInfo{"VUCOMISS", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(1, 0b01, 0x2F), 1, X86InstInfo{"VUCOMISD", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
|
||||
{OPD(1, 0b00, 0x2F), 1, X86InstInfo{"VCOMISS", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_32BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS, 0, nullptr}},
|
||||
{OPD(1, 0b01, 0x2F), 1, X86InstInfo{"VCOMISD", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_64BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS, 0, nullptr}},
|
||||
|
||||
{OPD(1, 0b00, 0x58), 1, X86InstInfo{"VADDPS", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}},
|
||||
{OPD(1, 0b01, 0x58), 1, X86InstInfo{"VADDPD", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}},
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RAX": "0x4700",
|
||||
"RBX": "0x0300"
|
||||
},
|
||||
"MemoryRegions": {
|
||||
"0x100000000": "4096"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
lea rdx, [rel .data]
|
||||
|
||||
vmovaps xmm0, [rdx + 16 * 0]
|
||||
vcomisd xmm0, [rdx + 16 * 1] ; 1.0 <comp> 4.0
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000100
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 00000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 00000111
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
mov rbx, rax
|
||||
|
||||
vcomisd xmm0, [rdx + 16 * 2] ; 1.0 <comp> NaN
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000100
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 01000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 01000111
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
|
||||
hlt
|
||||
|
||||
align 16
|
||||
.data:
|
||||
dq 0x3FF0000000000000
|
||||
dq 0x4000000000000000
|
||||
|
||||
dq 0x4010000000000000
|
||||
dq 0x4010000000000000
|
||||
|
||||
dq 0x7FF8000000000000
|
||||
dq 0x4010000000000000
|
||||
@@ -0,0 +1,61 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RAX": "0x4700",
|
||||
"RBX": "0x0300"
|
||||
},
|
||||
"MemoryRegions": {
|
||||
"0x100000000": "4096"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
lea rdx, [rel .data]
|
||||
|
||||
vmovaps xmm0, [rdx + 16 * 0]
|
||||
vcomiss xmm0, [rdx + 16 * 1]
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000000
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 00000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 00000011
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
mov rbx, rax
|
||||
|
||||
vcomiss xmm0, [rdx + 16 * 2]
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000100
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 01000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 01000111
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
|
||||
hlt
|
||||
|
||||
align 16
|
||||
.data:
|
||||
dq 0x515253543F800000
|
||||
dq 0x5152535440000000
|
||||
|
||||
dq 0x5152535440800000
|
||||
dq 0x5152535440800000
|
||||
|
||||
dq 0x515253547FC00000
|
||||
dq 0x5152535440800000
|
||||
@@ -0,0 +1,61 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RAX": "0x4700",
|
||||
"RBX": "0x0300"
|
||||
},
|
||||
"MemoryRegions": {
|
||||
"0x100000000": "4096"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
lea rdx, [rel .data]
|
||||
|
||||
vmovaps xmm0, [rdx + 16 * 0]
|
||||
vucomisd xmm0, [rdx + 16 * 1] ; 1.0 <comp> 4.0
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000000
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 00000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 00000011
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
mov rbx, rax
|
||||
|
||||
vucomisd xmm0, [rdx + 16 * 2] ; 1.0 <comp> NaN
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000100
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 01000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 01000111
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
|
||||
hlt
|
||||
|
||||
align 16
|
||||
.data:
|
||||
dq 0x3FF0000000000000
|
||||
dq 0x4000000000000000
|
||||
|
||||
dq 0x4010000000000000
|
||||
dq 0x4010000000000000
|
||||
|
||||
dq 0x7FF8000000000000
|
||||
dq 0x4010000000000000
|
||||
@@ -0,0 +1,61 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RAX": "0x4700",
|
||||
"RBX": "0x0300"
|
||||
},
|
||||
"MemoryRegions": {
|
||||
"0x100000000": "4096"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
lea rdx, [rel .data]
|
||||
|
||||
vmovaps xmm0, [rdx + 16 * 0]
|
||||
vucomiss xmm0, [rdx + 16 * 1]
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000000
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 00000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 00000011
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
mov rbx, rax
|
||||
|
||||
vucomiss xmm0, [rdx + 16 * 2]
|
||||
; 0: CF - 00000001
|
||||
; 1: - 00000010
|
||||
; 2: PF - 00000100
|
||||
; 3: 0 - 00000000
|
||||
; 4: AF - 00000000 <- 0
|
||||
; 5: 0 - 00000000
|
||||
; 6: ZF - 01000000
|
||||
; 7: SF - 00000000 <- 0
|
||||
; ================
|
||||
; 01000111
|
||||
; OF: LAHF doesn't load - 0
|
||||
|
||||
mov rax, 0
|
||||
lahf
|
||||
|
||||
hlt
|
||||
|
||||
align 16
|
||||
.data:
|
||||
dq 0x515253543F800000
|
||||
dq 0x5152535440000000
|
||||
|
||||
dq 0x5152535440800000
|
||||
dq 0x5152535440800000
|
||||
|
||||
dq 0x515253547FC00000
|
||||
dq 0x5152535440800000
|
||||
Reference in new issue
Block a user