diff --git a/rpcs3/Emu/CPU/CPUTranslator.h b/rpcs3/Emu/CPU/CPUTranslator.h index e21763e6b3..c08af85f6d 100644 --- a/rpcs3/Emu/CPU/CPUTranslator.h +++ b/rpcs3/Emu/CPU/CPUTranslator.h @@ -3356,37 +3356,6 @@ public: { static constexpr u32 esz = llvm_value_t::esize; - if constexpr (esz == 32) - { -#if defined(ARCH_X64) - if (m_use_fma && !llvm::isa(b.eval(m_ir))) - return eval(llvm_calli{"llvm.x86.avx2.psllv.d", {std::forward(a), std::forward(b)}}); -#endif - } - - if constexpr (esz == 16) - { -#if defined(ARCH_X64) - if (m_use_avx512 && !llvm::isa(b.eval(m_ir))) - return eval(llvm_calli{"llvm.x86.avx512.psllv.w.128", {std::forward(a), std::forward(b)}}); - - if (m_use_fma && !llvm::isa(b.eval(m_ir))) - { - using t32 = value_t; - auto a32 = eval(bitcast(std::forward(a))); - auto b32 = eval(bitcast(std::forward(b))); - auto sizeL = eval(b32 & 0xffff); - auto sizeH = eval(b32 >> 16); - auto dataL = eval(llvm_calli{"llvm.x86.avx2.psllv.d", {a32, sizeL}}); - auto dataH = eval(llvm_calli{"llvm.x86.avx2.psllv.d", {eval(a32 & 0xffff0000), sizeH}}); - return eval(bitcast((dataL & 0xffff) | dataH)); - } -#endif - } - - return eval(select(b < esz, a << b, splat(0))); - - /* return expr(select(b < esz, a << b, splat(0)), [](llvm::Value*& value, llvm::Module* _m) -> llvm_match_tuple { static const auto M = match(); @@ -3405,7 +3374,6 @@ public: value = nullptr; return {}; }); - */ } // Infinite-precision logical shift right (unsigned) @@ -3414,37 +3382,6 @@ public: { static constexpr u32 esz = llvm_value_t::esize; - if constexpr (esz == 32) - { -#if defined(ARCH_X64) - if (m_use_fma && !llvm::isa(b.eval(m_ir))) - return eval(llvm_calli{"llvm.x86.avx2.psrlv.d", {std::forward(a), std::forward(b)}}); -#endif - } - - if constexpr (esz == 16) - { -#if defined(ARCH_X64) - if (m_use_avx512 && !llvm::isa(b.eval(m_ir))) - return eval(llvm_calli{"llvm.x86.avx512.psrlv.w.128", {std::forward(a), std::forward(b)}}); - - if (m_use_fma && !llvm::isa(b.eval(m_ir))) - { - using t32 = value_t; - auto a32 = eval(bitcast(std::forward(a))); - auto b32 = eval(bitcast(std::forward(b))); - auto sizeL = eval(b32 & 0xffff); - auto sizeH = eval(b32 >> 16); - auto dataL = eval(llvm_calli{"llvm.x86.avx2.psrlv.d", {eval(a32 & 0xffff), sizeL}}); - auto dataH = eval(llvm_calli{"llvm.x86.avx2.psrlv.d", {a32, sizeH}}); - return eval(bitcast(dataL | (dataH & 0xffff0000))); - } -#endif - } - - return eval(select(b < esz, a >> b, splat(0))); - - /* return expr(select(b < esz, a >> b, splat(0)), [](llvm::Value*& value, llvm::Module* _m) -> llvm_match_tuple { static const auto M = match(); @@ -3463,7 +3400,6 @@ public: value = nullptr; return {}; }); - */ } // Infinite-precision arithmetic shift right (signed) @@ -3472,37 +3408,6 @@ public: { static constexpr u32 esz = llvm_value_t::esize; - if constexpr (esz == 32) - { -#if defined(ARCH_X64) - if (m_use_fma && !llvm::isa(b.eval(m_ir))) - return eval(llvm_calli{"llvm.x86.avx2.psrav.d", {std::forward(a), std::forward(b)}}); -#endif - } - - if constexpr (esz == 16) - { -#if defined(ARCH_X64) - if (m_use_avx512 && !llvm::isa(b.eval(m_ir))) - return eval(llvm_calli{"llvm.x86.avx512.psrav.w.128", {std::forward(a), std::forward(b)}}); - - if (m_use_fma && !llvm::isa(b.eval(m_ir))) - { - using t32 = value_t; - auto a32 = eval(bitcast(std::forward(a))); - auto b32 = eval(bitcast(std::forward(b))); - auto sizeL = eval(b32 & 0xffff); - auto sizeH = eval(b32 >> 16); - auto dataL = eval(llvm_calli{"llvm.x86.avx2.psrav.d", {eval(a32 << 16), sizeL}}); - auto dataH = eval(llvm_calli{"llvm.x86.avx2.psrav.d", {a32, sizeH}}); - return eval(bitcast((dataL >> 16) | (dataH & 0xffff0000))); - } -#endif - } - - return eval(a >> select(b > (esz - 1), splat(esz - 1), b)); - - /* return expr(a >> select(b > (esz - 1), splat(esz - 1), b), [](llvm::Value*& value, llvm::Module* _m) -> llvm_match_tuple { static const auto M = match(); @@ -3521,7 +3426,6 @@ public: value = nullptr; return {}; }); - */ } template