diff --git a/CMakeLists.txt b/CMakeLists.txt index fe437d3e06..6f964de24e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -226,6 +226,8 @@ elseif(X86) set(CommonExtra ${CommonExtra} Common/ABI.cpp Common/ABI.h + Common/ArmEmitter.h + Common/ArmEmitter.cpp Common/CPUDetect.cpp Common/CPUDetect.h Common/Thunk.cpp @@ -718,7 +720,8 @@ elseif(X86) Core/MIPS/x86/RegCache.cpp Core/MIPS/x86/RegCache.h Core/MIPS/x86/RegCacheFPU.cpp - Core/MIPS/x86/RegCacheFPU.h) + Core/MIPS/x86/RegCacheFPU.h + ext/disarm.cpp) endif() # atrac3plus.cpp used dl* functions on non-win32 platforms diff --git a/Common/ArmEmitter.cpp b/Common/ArmEmitter.cpp index f0de619fee..28275f02b9 100644 --- a/Common/ArmEmitter.cpp +++ b/Common/ArmEmitter.cpp @@ -214,10 +214,10 @@ void ARMXEmitter::FlushLitPool() // Write the constant to Literal Pool if (!(*it).loc) { - (*it).loc = (s32)code; + (*it).loc = (intptr_t)code; Write32((*it).val); } - s32 offset = (*it).loc - (s32)(*it).ldr_address - 8; + intptr_t offset = (*it).loc - (intptr_t)(*it).ldr_address - 8; // Backpatch the LDR *(u32*)(*it).ldr_address |= (offset >= 0) << 23 | abs(offset); @@ -267,7 +267,7 @@ void ARMXEmitter::QuickCallFunction(ARMReg reg, void *func) { if (BLInRange(func)) { BL(func); } else { - MOVI2R(reg, (u32)(func)); + MOVI2R(reg, (uintptr_t)(func)); BL(reg); } } @@ -297,13 +297,13 @@ void ARMXEmitter::ReserveCodeSpace(u32 bytes) const u8 *ARMXEmitter::AlignCode16() { - ReserveCodeSpace((-(s32)code) & 15); + ReserveCodeSpace((-(intptr_t)code) & 15); return code; } const u8 *ARMXEmitter::AlignCodePage() { - ReserveCodeSpace((-(s32)code) & 4095); + ReserveCodeSpace((-(intptr_t)code) & 4095); return code; } @@ -323,12 +323,14 @@ void ARMXEmitter::FlushIcacheSection(u8 *start, u8 *end) // Header file says this is equivalent to: sys_icache_invalidate(start, end - start); sys_cache_control(kCacheFunctionPrepareForExecution, start, end - start); #elif !defined(_WIN32) +#if defined(ARM) #ifdef __clang__ __clear_cache(start, end); #else __builtin___clear_cache(start, end); #endif #endif +#endif } void ARMXEmitter::SetCC(CCFlags cond) @@ -390,8 +392,8 @@ FixupBranch ARMXEmitter::B_CC(CCFlags Cond) } void ARMXEmitter::B_CC(CCFlags Cond, const void *fnptr) { - s32 distance = (s32)fnptr - (s32(code) + 8); - _assert_msg_(JIT, distance > -33554432 + s32 distance = (intptr_t)fnptr - ((intptr_t)(code) + 8); + _assert_msg_(JIT, distance > -33554432 && distance <= 33554432, "B_CC out of range (%p calls %p)", code, fnptr); @@ -409,8 +411,8 @@ FixupBranch ARMXEmitter::BL_CC(CCFlags Cond) } void ARMXEmitter::SetJumpTarget(FixupBranch const &branch) { - s32 distance = (s32(code) - 8) - (s32)branch.ptr; - _assert_msg_(JIT, distance > -33554432 + s32 distance = ((intptr_t)(code) - 8) - (intptr_t)branch.ptr; + _assert_msg_(JIT, distance > -33554432 && distance <= 33554432, "SetJumpTarget out of range (%p calls %p)", code, branch.ptr); @@ -423,8 +425,8 @@ void ARMXEmitter::SetJumpTarget(FixupBranch const &branch) } void ARMXEmitter::B (const void *fnptr) { - s32 distance = (s32)fnptr - (s32(code) + 8); - _assert_msg_(JIT, distance > -33554432 + s32 distance = (intptr_t)fnptr - (intptr_t(code) + 8); + _assert_msg_(JIT, distance > -33554432 && distance <= 33554432, "B out of range (%p calls %p)", code, fnptr); @@ -437,7 +439,7 @@ void ARMXEmitter::B(ARMReg src) } bool ARMXEmitter::BLInRange(const void *fnptr) { - s32 distance = (s32)fnptr - (s32(code) + 8); + s32 distance = (intptr_t)fnptr - (intptr_t(code) + 8); if (distance <= -33554432 || distance > 33554432) return false; else @@ -446,8 +448,8 @@ bool ARMXEmitter::BLInRange(const void *fnptr) { void ARMXEmitter::BL(const void *fnptr) { - s32 distance = (s32)fnptr - (s32(code) + 8); - _assert_msg_(JIT, distance > -33554432 + s32 distance = (intptr_t)fnptr - (intptr_t(code) + 8); + _assert_msg_(JIT, distance > -33554432 && distance <= 33554432, "BL out of range (%p calls %p)", code, fnptr); Write32(condition | 0x0B000000 | ((distance >> 2) & 0x00FFFFFF)); diff --git a/Common/ArmEmitter.h b/Common/ArmEmitter.h index f876a198e1..695d49b1fa 100644 --- a/Common/ArmEmitter.h +++ b/Common/ArmEmitter.h @@ -325,7 +325,7 @@ Operand2 AssumeMakeOperand2(u32 imm); inline Operand2 R(ARMReg Reg) { return Operand2(Reg, TYPE_REG); } inline Operand2 IMM(u32 Imm) { return Operand2(Imm, TYPE_IMM); } -inline Operand2 Mem(void *ptr) { return Operand2((u32)ptr, TYPE_IMM); } +inline Operand2 Mem(void *ptr) { return Operand2((uintptr_t)ptr, TYPE_IMM); } //usage: struct {int e;} s; STRUCT_OFFSET(s,e) #define STRUCT_OFF(str,elem) ((u32)((u32)&(str).elem-(u32)&(str))) diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp index dfe2ba098e..338b6a0096 100644 --- a/UI/DevScreens.cpp +++ b/UI/DevScreens.cpp @@ -272,4 +272,4 @@ UI::EventReturn JitCompareScreen::OnCurrentBlock(UI::EventParams &e) { } UpdateDisasm(); return UI::EVENT_DONE; -} \ No newline at end of file +} diff --git a/lang b/lang index a52257c30f..307b80af90 160000 --- a/lang +++ b/lang @@ -1 +1 @@ -Subproject commit a52257c30fb0739b828666359ed81763d1ec8fc9 +Subproject commit 307b80af9051eab4bf37af646f5bc9bbc778316c diff --git a/pspautotests b/pspautotests index 42bffddb5c..c1255c756a 160000 --- a/pspautotests +++ b/pspautotests @@ -1 +1 @@ -Subproject commit 42bffddb5c133c81c88e62cfaca75c68d443f992 +Subproject commit c1255c756aae9caf4aa45ccbcb69b02882058288