From f207239349aefe5dd93c4f797a0c18211ee6b53a Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Fri, 4 Feb 2022 22:51:17 -0800 Subject: [PATCH] [x64] Add `kX64EmitAVX512VBMI` feature-flag and detection Allows access to byte-element 2-register permutations(32-byte look up tables) and for 64-bit multi-shifts. Particularly adding this to accelerate the assembly of our `PERMUTE` opcode. --- src/xenia/cpu/backend/x64/x64_backend.cc | 1 + src/xenia/cpu/backend/x64/x64_emitter.cc | 1 + src/xenia/cpu/backend/x64/x64_emitter.h | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/xenia/cpu/backend/x64/x64_backend.cc b/src/xenia/cpu/backend/x64/x64_backend.cc index 31e1dc9fd..5355d1470 100644 --- a/src/xenia/cpu/backend/x64/x64_backend.cc +++ b/src/xenia/cpu/backend/x64/x64_backend.cc @@ -42,6 +42,7 @@ DEFINE_int32(x64_extension_mask, -1, " 512 = AVX512VL\n" " 1024 = AVX512BW\n" " 2048 = AVX512DQ\n" + " 4096 = AVX512VBMI\n" " -1 = Detect and utilize all possible processor features\n", "x64"); diff --git a/src/xenia/cpu/backend/x64/x64_emitter.cc b/src/xenia/cpu/backend/x64/x64_emitter.cc index 97b14e03e..034946d03 100644 --- a/src/xenia/cpu/backend/x64/x64_emitter.cc +++ b/src/xenia/cpu/backend/x64/x64_emitter.cc @@ -98,6 +98,7 @@ X64Emitter::X64Emitter(X64Backend* backend, XbyakAllocator* allocator) TEST_EMIT_FEATURE(kX64EmitAVX512VL, Xbyak::util::Cpu::tAVX512VL); TEST_EMIT_FEATURE(kX64EmitAVX512BW, Xbyak::util::Cpu::tAVX512BW); TEST_EMIT_FEATURE(kX64EmitAVX512DQ, Xbyak::util::Cpu::tAVX512DQ); + TEST_EMIT_FEATURE(kX64EmitAVX512VBMI, Xbyak::util::Cpu::tAVX512_VBMI); #undef TEST_EMIT_FEATURE } diff --git a/src/xenia/cpu/backend/x64/x64_emitter.h b/src/xenia/cpu/backend/x64/x64_emitter.h index 247d6175c..3cf1df7d7 100644 --- a/src/xenia/cpu/backend/x64/x64_emitter.h +++ b/src/xenia/cpu/backend/x64/x64_emitter.h @@ -140,6 +140,8 @@ enum X64EmitterFeatureFlags { kX64EmitAVX512BW = 1 << 10, kX64EmitAVX512DQ = 1 << 11, + kX64EmitAVX512VBMI = 1 << 12, + kX64EmitAVX512Ortho = kX64EmitAVX512F | kX64EmitAVX512VL, kX64EmitAVX512Ortho64 = kX64EmitAVX512Ortho | kX64EmitAVX512DQ };