summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWunkolo <Wunkolo@gmail.com>2022-02-04 22:51:17 -0800
committerRick Gibbed <rick@gibbed.us>2022-10-21 08:47:31 -0500
commitf207239349aefe5dd93c4f797a0c18211ee6b53a (patch)
tree9eb929fb759c58a8b7e3d72017d77359e12f0eb6
parentd73088e5cae139358aeff910cbaedfe82b1e5330 (diff)
[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.
-rw-r--r--src/xenia/cpu/backend/x64/x64_backend.cc1
-rw-r--r--src/xenia/cpu/backend/x64/x64_emitter.cc1
-rw-r--r--src/xenia/cpu/backend/x64/x64_emitter.h2
3 files changed, 4 insertions, 0 deletions
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
};