From 567f9bede4db4298c709c5234bfa103c2a3fd279 Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Wed, 8 Jun 2022 19:59:27 -0700 Subject: [PATCH] DSPHLE: Remove unneeded calls to m_mail_handler.Clear() It's cleared whenever the uCode changes, so there's no reason to clear it in a destructor or during initialization. I've also renamed it to ClearPending. --- Source/Core/Core/HW/DSPHLE/DSPHLE.cpp | 4 ++-- Source/Core/Core/HW/DSPHLE/MailHandler.cpp | 7 +++---- Source/Core/Core/HW/DSPHLE/MailHandler.h | 6 +++++- Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp | 1 - Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp | 1 - Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp | 1 - Source/Core/Core/HW/DSPHLE/UCodes/ROM.cpp | 1 - Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp | 1 - 8 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp b/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp index c686930383..9e17a78ecc 100644 --- a/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp +++ b/Source/Core/Core/HW/DSPHLE/DSPHLE.cpp @@ -67,7 +67,7 @@ void DSPHLE::SendMailToDSP(u32 mail) void DSPHLE::SetUCode(u32 crc) { - m_mail_handler.Clear(); + m_mail_handler.ClearPending(); m_ucode = UCodeFactory(crc, this, m_wii); m_ucode->Initialize(); } @@ -77,7 +77,7 @@ void DSPHLE::SetUCode(u32 crc) // Even callers are deleted. void DSPHLE::SwapUCode(u32 crc) { - m_mail_handler.Clear(); + m_mail_handler.ClearPending(); if (m_last_ucode && UCodeInterface::GetCRC(m_last_ucode.get()) == crc) { diff --git a/Source/Core/Core/HW/DSPHLE/MailHandler.cpp b/Source/Core/Core/HW/DSPHLE/MailHandler.cpp index 46019abc6f..b1d0377ec2 100644 --- a/Source/Core/Core/HW/DSPHLE/MailHandler.cpp +++ b/Source/Core/Core/HW/DSPHLE/MailHandler.cpp @@ -19,7 +19,6 @@ CMailHandler::CMailHandler() CMailHandler::~CMailHandler() { - Clear(); } void CMailHandler::PushMail(u32 mail, bool interrupt, int cycles_into_future) @@ -69,7 +68,7 @@ u16 CMailHandler::ReadDSPMailboxLow() return 0x00; } -void CMailHandler::Clear() +void CMailHandler::ClearPending() { while (!m_Mails.empty()) m_Mails.pop(); @@ -84,7 +83,7 @@ void CMailHandler::Halt(bool _Halt) { if (_Halt) { - Clear(); + ClearPending(); PushMail(0x80544348); } } @@ -93,7 +92,7 @@ void CMailHandler::DoState(PointerWrap& p) { if (p.IsReadMode()) { - Clear(); + ClearPending(); int sz = 0; p.Do(sz); for (int i = 0; i < sz; i++) diff --git a/Source/Core/Core/HW/DSPHLE/MailHandler.h b/Source/Core/Core/HW/DSPHLE/MailHandler.h index 773cf042bb..411d169545 100644 --- a/Source/Core/Core/HW/DSPHLE/MailHandler.h +++ b/Source/Core/Core/HW/DSPHLE/MailHandler.h @@ -20,11 +20,15 @@ public: // TODO: figure out correct timing for interrupts rather than defaulting to "immediately." void PushMail(u32 mail, bool interrupt = false, int cycles_into_future = 0); - void Clear(); void Halt(bool _Halt); void DoState(PointerWrap& p); bool HasPending() const; + // Clear any pending mail from the current uCode. This is called by DSPHLE::SetUCode and + // DSPHLE::SwapUCode. Since pending mail is an abstraction for DSPHLE and not something that + // actually exists on real hardware, HLE implementations do not need to call this directly. + void ClearPending(); + u16 ReadDSPMailboxHigh(); u16 ReadDSPMailboxLow(); diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp index ee64a96659..45d9848b8c 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp @@ -34,7 +34,6 @@ AXUCode::AXUCode(DSPHLE* dsphle, u32 crc) : UCodeInterface(dsphle, crc) AXUCode::~AXUCode() { - m_mail_handler.Clear(); } void AXUCode::Initialize() diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp index 23ee74bec8..ac14bd26be 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp @@ -18,7 +18,6 @@ CARDUCode::CARDUCode(DSPHLE* dsphle, u32 crc) : UCodeInterface(dsphle, crc) CARDUCode::~CARDUCode() { - m_mail_handler.Clear(); } void CARDUCode::Initialize() diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp index 49816fe6fd..b22e594719 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp @@ -75,7 +75,6 @@ GBAUCode::GBAUCode(DSPHLE* dsphle, u32 crc) : UCodeInterface(dsphle, crc) GBAUCode::~GBAUCode() { - m_mail_handler.Clear(); } void GBAUCode::Initialize() diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/ROM.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/ROM.cpp index e41a5b19c0..00e4989afe 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/ROM.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/ROM.cpp @@ -34,7 +34,6 @@ ROMUCode::~ROMUCode() void ROMUCode::Initialize() { - m_mail_handler.Clear(); m_mail_handler.PushMail(0x8071FEED); } diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp index 7cfab59596..5c07a31ea4 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/Zelda.cpp @@ -130,7 +130,6 @@ ZeldaUCode::ZeldaUCode(DSPHLE* dsphle, u32 crc) : UCodeInterface(dsphle, crc) ZeldaUCode::~ZeldaUCode() { - m_mail_handler.Clear(); } void ZeldaUCode::Initialize()