From 0a4199981807c1a61aab2a81161de04e2a0f2a48 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 5 Mar 2020 10:38:47 +0300 Subject: [PATCH] PPU LLVM: fix regression from warning fixes Forgot that negative power is used here. --- rpcs3/Emu/Cell/PPUTranslator.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/Cell/PPUTranslator.cpp b/rpcs3/Emu/Cell/PPUTranslator.cpp index f7fbd4d2d8..9bdfa79505 100644 --- a/rpcs3/Emu/Cell/PPUTranslator.cpp +++ b/rpcs3/Emu/Cell/PPUTranslator.cpp @@ -230,8 +230,23 @@ Value* PPUTranslator::GetAddr(u64 _add) Type* PPUTranslator::ScaleType(Type* type, s32 pow2) { verify(HERE), (type->getScalarType()->isIntegerTy()); + verify(HERE), pow2 > -32, pow2 < 32; - const auto new_type = m_ir->getIntNTy(type->getScalarSizeInBits() * (1 << pow2)); + uint scaled = type->getScalarSizeInBits(); + + verify(HERE), utils::popcnt32(scaled) == 1; + + if (pow2 > 0) + { + scaled <<= pow2; + } + else if (pow2 < 0) + { + scaled >>= -pow2; + } + + verify(HERE), (scaled != 0); + const auto new_type = m_ir->getIntNTy(scaled); return type->isVectorTy() ? VectorType::get(new_type, type->getVectorNumElements()) : cast(new_type); }