diff options
author | RSDuck <rsduck@users.noreply.github.com> | 2020-02-07 00:08:29 +0100 |
---|---|---|
committer | RSDuck <rsduck@users.noreply.github.com> | 2020-06-16 11:57:54 +0200 |
commit | d2acceb36754df349cf5d483155f71332a50000c (patch) | |
tree | a173a293bff10867924b815cb8d19c34f087d333 /src | |
parent | 272542972775368cec990561e419e84e34e09fe8 (diff) |
fixup for aarch64 JIT
Diffstat (limited to 'src')
-rw-r--r-- | src/ARMJIT_A64/ARMJIT_Compiler.cpp | 1 | ||||
-rw-r--r-- | src/ARMJIT_RegisterCache.h | 10 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/ARMJIT_A64/ARMJIT_Compiler.cpp b/src/ARMJIT_A64/ARMJIT_Compiler.cpp index d61cc9c..2033307 100644 --- a/src/ARMJIT_A64/ARMJIT_Compiler.cpp +++ b/src/ARMJIT_A64/ARMJIT_Compiler.cpp @@ -83,7 +83,6 @@ Compiler::Compiler() JitMemUseableSize = JitMemSize; Reset(); #else - #else u64 pageSize = sysconf(_SC_PAGE_SIZE); u8* pageAligned = (u8*)(((u64)JitMem & ~(pageSize - 1)) + pageSize); u64 alignedSize = (((u64)JitMem + sizeof(JitMem)) & ~(pageSize - 1)) - (u64)pageAligned; diff --git a/src/ARMJIT_RegisterCache.h b/src/ARMJIT_RegisterCache.h index b894657..8460825 100644 --- a/src/ARMJIT_RegisterCache.h +++ b/src/ARMJIT_RegisterCache.h @@ -18,11 +18,15 @@ public: RegisterCache() {} - RegisterCache(T* compiler, FetchedInstr instrs[], int instrsCount) + RegisterCache(T* compiler, FetchedInstr instrs[], int instrsCount, bool pcAllocatableAsSrc = false) : Compiler(compiler), Instrs(instrs), InstrsCount(instrsCount) { for (int i = 0; i < 16; i++) Mapping[i] = (Reg)-1; + + PCAllocatableAsSrc = ~(pcAllocatableAsSrc + ? 0 + : (1 << 15)); } void UnloadRegister(int reg) @@ -120,7 +124,7 @@ public: for (int reg : neverNeededAgain) UnloadRegister(reg); - u16 necessaryRegs = ((instr.Info.SrcRegs & ~(1 << 15)) | instr.Info.DstRegs) & ~instr.Info.NotStrictlyNeeded; + u16 necessaryRegs = ((instr.Info.SrcRegs & PCAllocatableAsSrc) | instr.Info.DstRegs) & ~instr.Info.NotStrictlyNeeded; u16 writeRegs = instr.Info.DstRegs & ~instr.Info.NotStrictlyNeeded; BitSet16 needToBeLoaded(necessaryRegs & ~LoadedRegs); if (needToBeLoaded != BitSet16(0)) @@ -184,6 +188,8 @@ public: u16 LoadedRegs = 0; u16 DirtyRegs = 0; + u16 PCAllocatableAsSrc = 0; + T* Compiler; FetchedInstr* Instrs; |