From 88a29b09bc5e85fe3f5d5790bf15eeaf15c73647 Mon Sep 17 00:00:00 2001 From: k2154 Date: Wed, 6 Aug 2025 06:23:52 +0900 Subject: [PATCH] Android project - Added armLdrsh function --- app/src/main/cpp/common/arm64/AsmHelpers.cpp | 6 ++++++ app/src/main/cpp/common/arm64/AsmHelpers.h | 1 + app/src/main/cpp/pcsx2/x86/ix86-32/recVTLB.cpp | 3 +-- app/src/main/cpp/pcsx2/x86/microVU_Branch.inl | 10 +++++----- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/src/main/cpp/common/arm64/AsmHelpers.cpp b/app/src/main/cpp/common/arm64/AsmHelpers.cpp index 47f3725..d7b335b 100644 --- a/app/src/main/cpp/common/arm64/AsmHelpers.cpp +++ b/app/src/main/cpp/common/arm64/AsmHelpers.cpp @@ -548,6 +548,12 @@ a64::Register armLdrsh(const void* addr) return EEX; } +a64::Register armLdrsh(const a64::MemOperand offset) +{ + armAsm->Ldrsh(EEX, offset); + return EEX; +} + a64::Register armLoadPtr(const a64::MemOperand offset) { armAsm->Ldr(EEX, offset); diff --git a/app/src/main/cpp/common/arm64/AsmHelpers.h b/app/src/main/cpp/common/arm64/AsmHelpers.h index b7d2535..bc62fc1 100644 --- a/app/src/main/cpp/common/arm64/AsmHelpers.h +++ b/app/src/main/cpp/common/arm64/AsmHelpers.h @@ -179,6 +179,7 @@ a64::Register armLoadPtr(const void* addr); a64::Register armLoadPtr64(const void* addr); a64::Register armLdrh(const void* addr); a64::Register armLdrsh(const void* addr); +a64::Register armLdrsh(const a64::MemOperand offset); a64::Register armLoadPtr(const a64::MemOperand offset); void armLoadPtr(const a64::CPURegister& reg, const void* addr, int64_t offset); a64::Register armLoadPtr(a64::Register regRs, int64_t offset); diff --git a/app/src/main/cpp/pcsx2/x86/ix86-32/recVTLB.cpp b/app/src/main/cpp/pcsx2/x86/ix86-32/recVTLB.cpp index ff935ac..5fad099 100644 --- a/app/src/main/cpp/pcsx2/x86/ix86-32/recVTLB.cpp +++ b/app/src/main/cpp/pcsx2/x86/ix86-32/recVTLB.cpp @@ -304,8 +304,7 @@ static void DynGen_HandlerTest(const GenDirectFn& gen_direct, int mode, int bits armBind(&to_handler); // xFastCall(GetIndirectDispatcherPtr(mode, szidx, sign)); - armAsm->Mov(RXVIXLSCRATCH, reinterpret_cast(GetIndirectDispatcherPtr(mode, szidx, sign))); - armAsm->Blr(RXVIXLSCRATCH); + armEmitCall(GetIndirectDispatcherPtr(mode, szidx, sign)); // done.SetTarget(); armBind(&done); diff --git a/app/src/main/cpp/pcsx2/x86/microVU_Branch.inl b/app/src/main/cpp/pcsx2/x86/microVU_Branch.inl index c6749ef..34ecbf3 100644 --- a/app/src/main/cpp/pcsx2/x86/microVU_Branch.inl +++ b/app/src/main/cpp/pcsx2/x86/microVU_Branch.inl @@ -575,7 +575,7 @@ void condBranch(mV, microFlagCycles& mFC, a64::Condition JMPcc) } mVUDTendProgram(mVU, &mFC, 2); // xCMP(ptr16[&mVU.branch], 0); - armAsm->Cmp(armLdrsh(&mVU.branch), 0); + armAsm->Cmp(armLdrsh(PTR_MVU(microVU[mVU.index].branch)), a64::wzr); // xForwardJump32 tJMP(xInvertCond((JccComparisonType)JMPcc)); a64::Label tJMP; armAsm->B(&tJMP, a64::InvertCondition(JMPcc)); @@ -627,7 +627,7 @@ void condBranch(mV, microFlagCycles& mFC, a64::Condition JMPcc) } mVUDTendProgram(mVU, &mFC, 2); // xCMP(ptr16[&mVU.branch], 0); - armAsm->Cmp(armLdrsh(&mVU.branch), 0); + armAsm->Cmp(armLdrsh(PTR_MVU(microVU[mVU.index].branch)), a64::wzr); // xForwardJump32 dJMP(xInvertCond((JccComparisonType)JMPcc)); a64::Label dJMP; armAsm->B(&dJMP, a64::InvertCondition(JMPcc)); @@ -660,7 +660,7 @@ void condBranch(mV, microFlagCycles& mFC, a64::Condition JMPcc) mVUendProgram(mVU, &mFC, 3); // xCMP(ptr16[&mVU.branch], 0); - armAsm->Cmp(armLdrsh(&mVU.branch), 0); + armAsm->Cmp(armLdrsh(PTR_MVU(microVU[mVU.index].branch)), a64::wzr); // xForwardJump32 dJMP((JccComparisonType)JMPcc); a64::Label dJMP; armAsm->B(&dJMP, JMPcc); @@ -694,7 +694,7 @@ void condBranch(mV, microFlagCycles& mFC, a64::Condition JMPcc) mVUendProgram(mVU, &mFC, 2); // xCMP(ptr16[&mVU.branch], 0); - armAsm->Cmp(armLdrsh(&mVU.branch), 0); + armAsm->Cmp(armLdrsh(PTR_MVU(microVU[mVU.index].branch)), a64::wzr); incPC(3); // xForwardJump32 eJMP(((JccComparisonType)JMPcc)); @@ -727,7 +727,7 @@ void condBranch(mV, microFlagCycles& mFC, a64::Condition JMPcc) else // Normal Conditional Branch { // xCMP(ptr16[&mVU.branch], 0); - armAsm->Cmp(armLdrsh(&mVU.branch), 0); + armAsm->Cmp(armLdrsh(PTR_MVU(microVU[mVU.index].branch)), a64::wzr); incPC(3); microBlock* bBlock;