mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-14 06:00:41 +02:00
FEXCore: Make more distinctions between host register size and guest vector register size
We can support a few combinations of guest and host vector sizes Host: 128-bit or 256-bit Guest: 128-bit or 256-bit The typical case is Host = 128-bit and Guest = 256-bit now that AVX is implemented. On 32-bit this changes to Host=128-bit and Guest=128-bit because we disable AVX. In the vixl simulator 32-bit turns in to Host=256-bit and Guest=128-bit. And then in the vixl sim 64-bit turns in to Host=256-bit and Guest=256-bit. We cover all four combinations of guest and host vector register sizes! Fixes a few assumptions that SVE256 = AVX256 basically.
This commit is contained in:
6 files changed
+15
-11
No files matched your search
@@ -4453,7 +4453,7 @@ void OpDispatchBuilder::StoreResult_WithOpSize(FEXCore::IR::RegisterClassType Cl
|
||||
StoreContext(MM0Index + gpr - FEXCore::X86State::REG_MM_0, Src);
|
||||
} else if (gpr >= FEXCore::X86State::REG_XMM_0) {
|
||||
const auto gprIndex = gpr - X86State::REG_XMM_0;
|
||||
const auto VectorSize = CTX->HostFeatures.SupportsSVE256 ? 32 : 16;
|
||||
const auto VectorSize = (CTX->HostFeatures.SupportsSVE256 && CTX->HostFeatures.SupportsAVX) ? 32 : 16;
|
||||
|
||||
auto Result = Src;
|
||||
if (OpSize != VectorSize) {
|
||||
@@ -5451,7 +5451,7 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() {
|
||||
InstallToTable(FEXCore::X86Tables::SecondInstGroupOps, SecondaryExtensionOp_RDRAND);
|
||||
}
|
||||
|
||||
if (CTX->HostFeatures.SupportsSVE256) {
|
||||
if (CTX->HostFeatures.SupportsAVX && CTX->HostFeatures.SupportsSVE256) {
|
||||
InstallToTable(FEXCore::X86Tables::VEXTableOps, AVXTable);
|
||||
InstallToTable(FEXCore::X86Tables::VEXTableGroupOps, VEXTableGroupOps);
|
||||
if (CTX->HostFeatures.SupportsPMULL_128Bit) {
|
||||
|
||||
Reference in new issue
Block a user