From 906c0b8fa69050fab05984878bb1ab23ff5d9432 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Tue, 28 Oct 2025 17:43:21 +0100 Subject: [PATCH] [CPU] Fixed issue with const path in AVX512 vector left rotate. - Added logging in case of similar issues --- src/xenia/cpu/backend/x64/x64_op.h | 4 ++++ src/xenia/cpu/backend/x64/x64_seq_vector.cc | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/xenia/cpu/backend/x64/x64_op.h b/src/xenia/cpu/backend/x64/x64_op.h index 68e67567c..b923bc31b 100644 --- a/src/xenia/cpu/backend/x64/x64_op.h +++ b/src/xenia/cpu/backend/x64/x64_op.h @@ -175,6 +175,10 @@ struct ValueOp : Op, KEY_TYPE> { virtual bool ConstantFitsIn32Reg() const { return true; } const REG_TYPE& reg() const { assert_true(!is_constant); + if (is_constant) { + XELOGE("{} - Invalid handling of constant! Report this to developers!", + __FUNCTION__); + } return reg_; } operator const REG_TYPE&() const { return reg(); } diff --git a/src/xenia/cpu/backend/x64/x64_seq_vector.cc b/src/xenia/cpu/backend/x64/x64_seq_vector.cc index f1996a36a..40da0ac9a 100644 --- a/src/xenia/cpu/backend/x64/x64_seq_vector.cc +++ b/src/xenia/cpu/backend/x64/x64_seq_vector.cc @@ -1873,7 +1873,12 @@ struct VECTOR_ROTATE_LEFT_V128 } break; case INT32_TYPE: { if (e.IsFeatureEnabled(kX64EmitAVX512Ortho)) { - e.vprolvd(i.dest, i.src1, i.src2); + if (i.src2.is_constant) { + e.LoadConstantXmm(e.xmm0, i.src2.constant()); + e.vprolvd(i.dest, i.src1, e.xmm0); + } else { + e.vprolvd(i.dest, i.src1, i.src2); + } } else if (e.IsFeatureEnabled(kX64EmitAVX2)) { Xmm temp = i.dest; if (i.dest == i.src1 || i.dest == i.src2) {