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