From 99d5caa06d3af1bb441c3acc4a718763a371551b Mon Sep 17 00:00:00 2001 From: Merry Date: Sat, 6 Aug 2022 14:01:15 +0100 Subject: [PATCH] A32/asimd_two_regs_misc: Remove use of VectorShuffleWords in VUZP --- .../frontend/A32/translate/impl/asimd_two_regs_misc.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_misc.cpp b/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_misc.cpp index 93a59136..4c859bcd 100644 --- a/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_misc.cpp +++ b/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_misc.cpp @@ -486,13 +486,8 @@ bool TranslatorVisitor::asimd_VUZP(bool D, size_t sz, size_t Vd, bool Q, bool M, const auto reg_d = ir.GetVector(d); const auto reg_m = ir.GetVector(m); - auto result_d = ir.VectorDeinterleaveEven(esize, reg_d, reg_m); - auto result_m = ir.VectorDeinterleaveOdd(esize, reg_d, reg_m); - - if (!Q) { - result_d = ir.VectorShuffleWords(result_d, 0b11011000); - result_m = ir.VectorShuffleWords(result_m, 0b11011000); - } + auto result_d = Q ? ir.VectorDeinterleaveEven(esize, reg_d, reg_m) : ir.VectorDeinterleaveEvenLower(esize, reg_d, reg_m); + auto result_m = Q ? ir.VectorDeinterleaveOdd(esize, reg_d, reg_m) : ir.VectorDeinterleaveOddLower(esize, reg_d, reg_m); ir.SetVector(d, result_d); ir.SetVector(m, result_m);