Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[ARM] Optimize that fastmem load/stores minimally.
  • Loading branch information
Sonicadvance1 committed Sep 8, 2013
1 parent 2126f40 commit e5b5713
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
5 changes: 2 additions & 3 deletions Source/Core/Core/Src/PowerPC/JitArm32/JitArm_BackPatch.cpp
Expand Up @@ -96,7 +96,7 @@ const u8 *JitArm::BackPatch(u8 *codePtr, u32, void *ctx_void)

if (Store)
{
const u32 ARMREGOFFSET = 4 * 7;
const u32 ARMREGOFFSET = 4 * 5;
ARMXEmitter emitter(codePtr - ARMREGOFFSET);
switch (accessSize)
{
Expand All @@ -117,15 +117,14 @@ const u8 *JitArm::BackPatch(u8 *codePtr, u32, void *ctx_void)
emitter.MOV(R1, R10); // Addr- 5
emitter.BL(R14); // 6
emitter.POP(4, R0, R1, R2, R3); // 7
emitter.NOP(1); // 8
u32 newPC = ctx->reg_pc - (ARMREGOFFSET + 4 * 4);
ctx->reg_pc = newPC;
emitter.FlushIcache();
return codePtr;
}
else
{
const u32 ARMREGOFFSET = 4 * 6;
const u32 ARMREGOFFSET = 4 * 4;
ARMXEmitter emitter(codePtr - ARMREGOFFSET);
switch (accessSize)
{
Expand Down
31 changes: 16 additions & 15 deletions Source/Core/Core/Src/PowerPC/JitArm32/JitArm_LoadStore.cpp
Expand Up @@ -33,16 +33,15 @@

void JitArm::UnsafeStoreFromReg(ARMReg dest, ARMReg value, int accessSize, s32 offset)
{

// All this gets replaced on backpatch
MOVI2R(R14, Memory::MEMVIEW32_MASK, false); // 1-2
AND(dest, dest, R14); // 3
MOVI2R(R14, (u32)Memory::base, false); // 4-5
ADD(dest, dest, R14); // 6
Operand2 mask(3, 1); // ~(Memory::MEMVIEW32_MASK)
BIC(dest, dest, mask); // 1
MOVI2R(R14, (u32)Memory::base, false); // 2-3
ADD(dest, dest, R14); // 4
switch (accessSize)
{
case 32:
REV(value, value); // 7
REV(value, value); // 5
break;
case 16:
REV16(value, value);
Expand All @@ -54,7 +53,7 @@ void JitArm::UnsafeStoreFromReg(ARMReg dest, ARMReg value, int accessSize, s32 o
switch (accessSize)
{
case 32:
STR(value, dest); // 8
STR(value, dest); // 6
break;
case 16:
STRH(value, dest);
Expand All @@ -63,6 +62,7 @@ void JitArm::UnsafeStoreFromReg(ARMReg dest, ARMReg value, int accessSize, s32 o
STRB(value, dest);
break;
}
NOP(1); // 7
}

void JitArm::SafeStoreFromReg(bool fastmem, s32 dest, u32 value, s32 regOffset, int accessSize, s32 offset)
Expand Down Expand Up @@ -224,14 +224,14 @@ void JitArm::UnsafeLoadToReg(ARMReg dest, ARMReg addr, int accessSize, s32 offse
ADD(addr, addr, rA); // - 1

// All this gets replaced on backpatch
MOVI2R(rA, Memory::MEMVIEW32_MASK, false); // 2
AND(addr, addr, rA); // 3
MOVI2R(rA, (u32)Memory::base, false); // 5
ADD(addr, addr, rA); // 6
Operand2 mask(3, 1); // ~(Memory::MEMVIEW32_MASK)
BIC(addr, addr, mask); // 1
MOVI2R(rA, (u32)Memory::base, false); // 2-3
ADD(addr, addr, rA); // 4
switch (accessSize)
{
case 32:
LDR(dest, addr); // 7
LDR(dest, addr); // 5
break;
case 16:
LDRH(dest, addr);
Expand All @@ -243,7 +243,7 @@ void JitArm::UnsafeLoadToReg(ARMReg dest, ARMReg addr, int accessSize, s32 offse
switch (accessSize)
{
case 32:
REV(dest, dest); // 9
REV(dest, dest); // 6
break;
case 16:
REV16(dest, dest);
Expand All @@ -253,6 +253,7 @@ void JitArm::UnsafeLoadToReg(ARMReg dest, ARMReg addr, int accessSize, s32 offse
break;

}
NOP(2); // 7-8
gpr.Unlock(rA);
}

Expand Down Expand Up @@ -460,8 +461,8 @@ void JitArm::lmw(UGeckoInstruction inst)
MOVI2R(rA, inst.SIMM_16);
if (a)
ADD(rA, rA, gpr.R(a));
MOVI2R(rB, Memory::MEMVIEW32_MASK, false); // 1-2
AND(rA, rA, rB); // 3
Operand2 mask(3, 1); // ~(Memory::MEMVIEW32_MASK)
BIC(rA, rA, mask); // 3
MOVI2R(rB, (u32)Memory::base, false); // 4-5
ADD(rA, rA, rB); // 6

Expand Down

0 comments on commit e5b5713

Please sign in to comment.