mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-03-06 06:17:43 +00:00
CPU/NewRec: Fix ARM32 (again)
This commit is contained in:
parent
a432308908
commit
c2a08bdb1d
|
@ -1588,7 +1588,7 @@ void CPU::NewRec::AArch32Compiler::Compile_lwx(CompileFlags cf, MemoryAccessSize
|
||||||
|
|
||||||
// We'd need to be careful here if we weren't overwriting it..
|
// We'd need to be careful here if we weren't overwriting it..
|
||||||
ComputeLoadStoreAddressArg(cf, address, addr);
|
ComputeLoadStoreAddressArg(cf, address, addr);
|
||||||
armAsm->and_(RARG1, addr, armCheckLogicalConstant(~0x3u));
|
armAsm->bic(RARG1, addr, 3);
|
||||||
GenerateLoad(RARG1, MemoryAccessSize::Word, false, use_fastmem, []() { return RRET; });
|
GenerateLoad(RARG1, MemoryAccessSize::Word, false, use_fastmem, []() { return RRET; });
|
||||||
|
|
||||||
if (inst->r.rt == Reg::zero)
|
if (inst->r.rt == Reg::zero)
|
||||||
|
@ -1660,7 +1660,7 @@ void CPU::NewRec::AArch32Compiler::Compile_lwx(CompileFlags cf, MemoryAccessSize
|
||||||
{
|
{
|
||||||
Flush(FLUSH_FOR_C_CALL);
|
Flush(FLUSH_FOR_C_CALL);
|
||||||
armAsm->mov(RARG3, value);
|
armAsm->mov(RARG3, value);
|
||||||
armAsm->and_(RARG2, addr, armCheckLogicalConstant(~0x3u));
|
armAsm->bic(RARG2, addr, 3);
|
||||||
EmitMov(RARG1, inst->bits);
|
EmitMov(RARG1, inst->bits);
|
||||||
EmitCall(reinterpret_cast<const void*>(&PGXP::CPU_LW));
|
EmitCall(reinterpret_cast<const void*>(&PGXP::CPU_LW));
|
||||||
}
|
}
|
||||||
|
@ -1797,12 +1797,12 @@ void CPU::NewRec::AArch32Compiler::Compile_swx(CompileFlags cf, MemoryAccessSize
|
||||||
// TODO: if address is constant, this can be simplified..
|
// TODO: if address is constant, this can be simplified..
|
||||||
// We'd need to be careful here if we weren't overwriting it..
|
// We'd need to be careful here if we weren't overwriting it..
|
||||||
ComputeLoadStoreAddressArg(cf, address, addr);
|
ComputeLoadStoreAddressArg(cf, address, addr);
|
||||||
armAsm->and_(RARG1, addr, armCheckLogicalConstant(~0x3u));
|
armAsm->bic(RARG1, addr, 3);
|
||||||
GenerateLoad(RARG1, MemoryAccessSize::Word, false, use_fastmem, []() { return RRET; });
|
GenerateLoad(RARG1, MemoryAccessSize::Word, false, use_fastmem, []() { return RRET; });
|
||||||
|
|
||||||
armAsm->and_(RSCRATCH, addr, 3);
|
armAsm->and_(RSCRATCH, addr, 3);
|
||||||
armAsm->lsl(RSCRATCH, RSCRATCH, 3); // *8
|
armAsm->lsl(RSCRATCH, RSCRATCH, 3); // *8
|
||||||
armAsm->and_(addr, addr, armCheckLogicalConstant(~0x3u));
|
armAsm->bic(addr, addr, 3);
|
||||||
|
|
||||||
// Need to load down here for PGXP-off, because it's in a volatile reg that can get overwritten by flush.
|
// Need to load down here for PGXP-off, because it's in a volatile reg that can get overwritten by flush.
|
||||||
if (!g_settings.gpu_pgxp_enable)
|
if (!g_settings.gpu_pgxp_enable)
|
||||||
|
|
|
@ -82,7 +82,6 @@ constexpr u32 MAX_FAR_HOST_BYTES_PER_INSTRUCTION = 128;
|
||||||
#define RARG1 vixl::aarch32::r0
|
#define RARG1 vixl::aarch32::r0
|
||||||
#define RARG2 vixl::aarch32::r1
|
#define RARG2 vixl::aarch32::r1
|
||||||
#define RARG3 vixl::aarch32::r2
|
#define RARG3 vixl::aarch32::r2
|
||||||
#define RARG4 vixl::aarch32::r3
|
|
||||||
#define RSCRATCH vixl::aarch32::r12
|
#define RSCRATCH vixl::aarch32::r12
|
||||||
#define RSTATE vixl::aarch32::r4
|
#define RSTATE vixl::aarch32::r4
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue