From f4b53cafcec8f91627010689a318cb9e302f3f1f Mon Sep 17 00:00:00 2001
From: Jason Hiser <jdhiser@gmail.com>
Date: Mon, 9 Dec 2019 15:04:19 -0500
Subject: [PATCH] added patching for bc1f and bc1t

---
 src/patcher_mips32.cpp | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/patcher_mips32.cpp b/src/patcher_mips32.cpp
index 2119163..485c0d2 100644
--- a/src/patcher_mips32.cpp
+++ b/src/patcher_mips32.cpp
@@ -64,9 +64,12 @@ void ZiprPatcherMIPS32_t::ApplyNopToPatch(RangeAddress_t addr)
 
 void ZiprPatcherMIPS32_t::ApplyPatch(RangeAddress_t from_addr, RangeAddress_t to_addr)
 { 
-	const auto mask6      = 0b111111;
-        const auto first_byte = (uint8_t)memory_space[from_addr+0];
-	const auto top6bits   = (first_byte >> 2) & mask6;
+	const auto mask6       = 0b111111;
+        const auto first_byte  = (uint8_t)memory_space[from_addr+0];
+        const auto second_byte = (uint8_t)memory_space[from_addr+1];
+	const auto top6bits    = (first_byte >> 2) & mask6;
+	const auto top16bits   = (uint32_t(first_byte) << 8) | second_byte;
+	const auto top16bits_nocc  = top16bits & ~(0b11100);
 
 
 	if(
@@ -75,7 +78,9 @@ void ZiprPatcherMIPS32_t::ApplyPatch(RangeAddress_t from_addr, RangeAddress_t to
 		top6bits == 0b000111 ||  // bgtz, 
 		top6bits == 0b000110 ||  // blez, 
 		top6bits == 0b000110 ||  // blez, 
-		top6bits == 0b000101     // bne
+		top6bits == 0b000101 ||  // bne
+		top16bits_nocc == 0b0100010100000000 ||  // bc1f
+		top16bits_nocc == 0b0100010100000001     // bc1t
 		) 
 	{
 		const auto new_offset  = (int32_t)((to_addr) - (from_addr+4)) >> 2;
-- 
GitLab