From 4d60d85db5a8bc7d61641ba7435656504a737d98 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sat, 28 Apr 2018 20:11:16 +0300 Subject: [PATCH] SPU: fix MFC_PUTQLLUC_CMD fence trait --- rpcs3/Emu/Cell/SPUThread.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/SPUThread.cpp b/rpcs3/Emu/Cell/SPUThread.cpp index b04b705ac4..2755f864fd 100644 --- a/rpcs3/Emu/Cell/SPUThread.cpp +++ b/rpcs3/Emu/Cell/SPUThread.cpp @@ -743,7 +743,7 @@ bool SPUThread::do_dma_check(const spu_mfc_cmd& args) if (UNLIKELY(mfc_barrier & mask || (args.cmd & MFC_FENCE_MASK && mfc_fence & mask))) { // Check for special value combination (normally impossible) - if (UNLIKELY(mfc_barrier == -1 && mfc_fence == -1)) + if (false) { // Update barrier/fence masks if necessary mfc_barrier = 0; @@ -998,6 +998,11 @@ void SPUThread::do_mfc(bool wait) } else if (args.cmd == MFC_PUTQLLUC_CMD) { + if (fence & mask) + { + return false; + } + do_putlluc(args); } @@ -1263,11 +1268,13 @@ bool SPUThread::process_mfc_cmd(spu_mfc_cmd args) } case MFC_PUTQLLUC_CMD: { - if (UNLIKELY(!do_dma_check(args))) + const u32 mask = 1u << args.tag; + + if (UNLIKELY((mfc_barrier | mfc_fence) & mask)) { args.size = 0; mfc_queue[mfc_size++] = args; - mfc_fence |= 1u << args.tag; + mfc_fence |= mask; } else {