OpcodeDispatcher: Handle VCVTPS2PD/VCVTPD2PS

This commit is contained in:
Lioncache committed 2023-04-18 10:29:57 -04:00
1 parent 73ca4e5687
commit 651c6f8ddf
5 files changed
+162 -2

No files matched your search

@@ -5724,6 +5724,8 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() {
{OPD(1, 0b10, 0x59), 1, &OpDispatchBuilder::AVXVectorScalarALUOp<IR::OP_VFMUL, 4>},
{OPD(1, 0b11, 0x59), 1, &OpDispatchBuilder::AVXVectorScalarALUOp<IR::OP_VFMUL, 8>},
{OPD(1, 0b00, 0x5A), 1, &OpDispatchBuilder::Vector_CVT_Float_To_Float<8, 4, true>},
{OPD(1, 0b01, 0x5A), 1, &OpDispatchBuilder::Vector_CVT_Float_To_Float<4, 8, true>},
{OPD(1, 0b10, 0x5A), 1, &OpDispatchBuilder::AVXScalar_CVT_Float_To_Float<8, 4>},
{OPD(1, 0b11, 0x5A), 1, &OpDispatchBuilder::AVXScalar_CVT_Float_To_Float<4, 8>},
@@ -2193,6 +2193,10 @@ template
void OpDispatchBuilder::Vector_CVT_Float_To_Float<4, 8, false>(OpcodeArgs);
template
void OpDispatchBuilder::Vector_CVT_Float_To_Float<8, 4, false>(OpcodeArgs);
template
void OpDispatchBuilder::Vector_CVT_Float_To_Float<4, 8, true>(OpcodeArgs);
template
void OpDispatchBuilder::Vector_CVT_Float_To_Float<8, 4, true>(OpcodeArgs);
template<size_t SrcElementSize, bool Widen>
void OpDispatchBuilder::MMX_To_XMM_Vector_CVT_Int_To_Float(OpcodeArgs) {
@@ -146,8 +146,8 @@ void InitializeVEXTables() {
{OPD(1, 0b10, 0x59), 1, X86InstInfo{"VMULSS", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_32BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}},
{OPD(1, 0b11, 0x59), 1, X86InstInfo{"VMULSD", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_64BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}},
{OPD(1, 0b00, 0x5A), 1, X86InstInfo{"VCVTPS2PD", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
{OPD(1, 0b01, 0x5A), 1, X86InstInfo{"VCVTPD2PS", TYPE_UNDEC, FLAGS_NONE, 0, nullptr}},
{OPD(1, 0b00, 0x5A), 1, X86InstInfo{"VCVTPS2PD", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS, 0, nullptr}},
{OPD(1, 0b01, 0x5A), 1, X86InstInfo{"VCVTPD2PS", TYPE_INST, GenFlagsSameSize(SIZE_128BIT) | FLAGS_MODRM | FLAGS_XMM_FLAGS, 0, nullptr}},
{OPD(1, 0b10, 0x5A), 1, X86InstInfo{"VCVTSS2SD", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_32BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}},
{OPD(1, 0b11, 0x5A), 1, X86InstInfo{"VCVTSD2SS", TYPE_INST, GenFlagsSizes(SIZE_128BIT, SIZE_64BIT) | FLAGS_MODRM | FLAGS_VEX_1ST_SRC | FLAGS_XMM_FLAGS, 0, nullptr}},
+77
View File
@@ -0,0 +1,77 @@
%ifdef CONFIG
{
"HostFeatures": ["AVX"],
"RegData": {
"XMM0": ["0x4054C664C2F837B5", "0x40516053E2D6238E", "0x4044836D86EC17EC", "0x402A1E1C58255B03"],
"XMM1": ["0x401568E0C9D9D346", "0x4035FE425AEE6320", "0x402359003EEA209B", "0x40154B7D41743E96"],
"XMM2": ["0x403D075A31A4BDBA", "0x4050A018BD66277C", "0x40334EC17EBAF102", "0x4056D7404EA4A8C1"],
"XMM7": ["0x428B029F42A63326", "0x0000000000000000", "0x0000000000000000", "0x0000000000000000"],
"XMM8": ["0x41AFF21340AB4706", "0x0000000000000000", "0x0000000000000000", "0x0000000000000000"],
"XMM9": ["0x428500C641E83AD2", "0x0000000000000000", "0x0000000000000000", "0x0000000000000000"],
"XMM10": ["0x4214ADB642B062C4", "0x41245B0E42461AA5", "0x0000000000000000", "0x0000000000000000"],
"XMM11": ["0x41A1B712429B697F", "0x42252CF2411CE3BD", "0x0000000000000000", "0x0000000000000000"],
"XMM12": ["0x42662BE34176837B", "0x425E2C0D4119C75A", "0x0000000000000000", "0x0000000000000000"],
"XMM13": ["0x409C30014253A13B", "0x4041495242910EC1", "0x0000000000000000", "0x0000000000000000"]
}
}
%endif
lea rdx, [rel .data]
vmovapd ymm0, [rdx + 32 * 0]
vmovapd ymm1, [rdx + 32 * 1]
vmovapd ymm2, [rdx + 32 * 2]
vcvtpd2ps xmm7, xmm0
vcvtpd2ps xmm8, xmm1
vcvtpd2ps xmm9, xmm2
vcvtpd2ps xmm10, yword [rdx + 32 * 10]
vcvtpd2ps xmm11, yword [rdx + 32 * 11]
vcvtpd2ps xmm12, yword [rdx + 32 * 12]
vcvtpd2ps xmm13, yword [rdx + 32 * 13]
hlt
align 32
.data:
dq 83.0999, 69.50512
dq 41.02678, 13.05881
dq 5.35242, 21.9932
dq 9.67383, 5.32372
dq 29.02872, 66.50151
dq 19.30764, 91.3633
dq 40.45086, 50.96153
dq 32.64489, 23.97574
dq 90.64316, 24.22547
dq 98.9394, 91.21715
dq 90.80143, 99.48407
dq 64.97245, 74.39838
dq 35.22761, 25.35321
dq 5.8732, 90.19956
dq 33.03133, 52.02952
dq 58.38554, 10.17531
dq 47.84703, 84.04831
dq 90.02965, 65.81329
dq 96.27991, 6.64479
dq 25.58971, 95.00694
dq 88.1929, 37.16964
dq 49.52602, 10.27223
dq 77.70605, 20.21439
dq 9.8056, 41.29389
dq 15.4071, 57.54286
dq 9.61117, 55.54302
dq 52.90745, 4.88086
dq 72.52882, 3.0201
+77
View File
@@ -0,0 +1,77 @@
%ifdef CONFIG
{
"HostFeatures": ["AVX"],
"RegData": {
"XMM0": ["0x428B029F42A63326", "0x4150F0E342241B6C", "0x409C30014253A13B", "0x4041495242910EC1"],
"XMM1": ["0x41AFF21340AB4706", "0x40AA5BEA411AC802", "0x42662BE34176837B", "0x425E2C0D4119C75A"],
"XMM2": ["0x428500C641E83AD2", "0x42B6BA02419A760C", "0x41A1B712429B697F", "0x42252CF2411CE3BD"],
"XMM7": ["0x4054C664C0000000", "0x40516053E0000000", "0x0000000000000000", "0x0000000000000000"],
"XMM8": ["0x401568E0C0000000", "0x4035FE4260000000", "0x0000000000000000", "0x0000000000000000"],
"XMM9": ["0x403D075A40000000", "0x4050A018C0000000", "0x0000000000000000", "0x0000000000000000"],
"XMM10": ["0x40560C5880000000", "0x404295B6C0000000", "0x4048C354A0000000", "0x40248B61C0000000"],
"XMM11": ["0x40536D2FE0000000", "0x403436E240000000", "0x40239C77A0000000", "0x4044A59E40000000"],
"XMM12": ["0x402ED06F60000000", "0x404CC57C60000000", "0x402338EB40000000", "0x404BC581A0000000"],
"XMM13": ["0x404A742760000000", "0x4013860020000000", "0x405221D820000000", "0x4008292A40000000"]
}
}
%endif
lea rdx, [rel .data]
vmovapd ymm0, [rdx + 32 * 0]
vmovapd ymm1, [rdx + 32 * 1]
vmovapd ymm2, [rdx + 32 * 2]
vcvtps2pd xmm7, xmm0
vcvtps2pd xmm8, xmm1
vcvtps2pd xmm9, xmm2
vcvtps2pd ymm10, [rdx + 32 * 10]
vcvtps2pd ymm11, [rdx + 32 * 11]
vcvtps2pd ymm12, [rdx + 32 * 12]
vcvtps2pd ymm13, [rdx + 32 * 13]
hlt
align 32
.data:
dd 83.0999, 69.50512, 41.02678, 13.05881
dd 52.90745, 4.88086, 72.52882, 3.0201
dd 5.35242, 21.9932, 9.67383, 5.32372
dd 15.4071, 57.54286, 9.61117, 55.54302
dd 29.02872, 66.50151, 19.30764, 91.3633
dd 77.70605, 20.21439, 9.8056, 41.29389
dd 40.45086, 50.96153, 32.64489, 23.97574
dd 88.1929, 37.16964, 49.52602, 10.27223
dd 90.64316, 24.22547, 98.9394, 91.21715
dd 96.27991, 6.64479, 25.58971, 95.00694
dd 90.80143, 99.48407, 64.97245, 74.39838
dd 47.84703, 84.04831, 90.02965, 65.81329
dd 35.22761, 25.35321, 5.8732, 90.19956
dd 33.03133, 52.02952, 58.38554, 10.17531
dd 33.03133, 52.02952, 58.38554, 10.17531
dd 83.0999, 69.50512, 41.02678, 13.05881
dd 47.84703, 84.04831, 90.02965, 65.81329
dd 5.35242, 21.9932, 9.67383, 5.32372
dd 96.27991, 6.64479, 25.58971, 95.00694
dd 29.02872, 66.50151, 19.30764, 91.3633
dd 88.1929, 37.16964, 49.52602, 10.27223
dd 40.45086, 50.96153, 32.64489, 23.97574
dd 77.70605, 20.21439, 9.8056, 41.29389
dd 90.64316, 24.22547, 98.9394, 91.21715
dd 15.4071, 57.54286, 9.61117, 55.54302
dd 90.80143, 99.48407, 64.97245, 74.39838
dd 52.90745, 4.88086, 72.52882, 3.0201
dd 35.22761, 25.35321, 5.8732, 90.19956