Android project - Added armLdrsh function

This commit is contained in:
k2154
2025-08-06 06:23:52 +09:00
parent 3dd21a4d82
commit 88a29b09bc
4 changed files with 13 additions and 7 deletions
@@ -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);
@@ -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);
@@ -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<uintptr_t>(GetIndirectDispatcherPtr(mode, szidx, sign)));
armAsm->Blr(RXVIXLSCRATCH);
armEmitCall(GetIndirectDispatcherPtr(mode, szidx, sign));
// done.SetTarget();
armBind(&done);
@@ -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;