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) {