From d7842b7de22c27c156c867fb71199cc5f21f066d Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 26 Jun 2020 19:10:28 +0300 Subject: [PATCH] SPU LLVM: Fix WRCH instruction to WrTagMask --- rpcs3/Emu/Cell/SPURecompiler.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rpcs3/Emu/Cell/SPURecompiler.cpp b/rpcs3/Emu/Cell/SPURecompiler.cpp index 77cc887b6d..4bfae3719d 100644 --- a/rpcs3/Emu/Cell/SPURecompiler.cpp +++ b/rpcs3/Emu/Cell/SPURecompiler.cpp @@ -5693,6 +5693,13 @@ public: { // TODO m_ir->CreateStore(val.value, spu_ptr(&spu_thread::ch_tag_mask)); + const auto next = llvm::BasicBlock::Create(m_context, "", m_function); + const auto _mfc = llvm::BasicBlock::Create(m_context, "", m_function); + m_ir->CreateCondBr(m_ir->CreateICmpNE(m_ir->CreateLoad(spu_ptr(&spu_thread::ch_tag_upd)), m_ir->getInt32(MFC_TAG_UPDATE_IMMEDIATE)), _mfc, next); + m_ir->SetInsertPoint(_mfc); + call("spu_write_channel", &exec_wrch, m_thread, m_ir->getInt32(op.ra), val.value); + m_ir->CreateBr(next); + m_ir->SetInsertPoint(next); return; } case MFC_WrTagUpdate: