mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	Common: Move CPU macros to types.h
This commit is contained in:
		
							parent
							
								
									dd204d116e
								
							
						
					
					
						commit
						b1bb33a566
					
				|  | @ -38,7 +38,6 @@ add_library(common | ||||||
|   minizip_helpers.cpp |   minizip_helpers.cpp | ||||||
|   minizip_helpers.h |   minizip_helpers.h | ||||||
|   path.h |   path.h | ||||||
|   platform.h |  | ||||||
|   progress_callback.cpp |   progress_callback.cpp | ||||||
|   progress_callback.h |   progress_callback.h | ||||||
|   rectangle.h |   rectangle.h | ||||||
|  |  | ||||||
|  | @ -28,7 +28,6 @@ | ||||||
|     <ClInclude Include="memory_settings_interface.h" /> |     <ClInclude Include="memory_settings_interface.h" /> | ||||||
|     <ClInclude Include="md5_digest.h" /> |     <ClInclude Include="md5_digest.h" /> | ||||||
|     <ClInclude Include="path.h" /> |     <ClInclude Include="path.h" /> | ||||||
|     <ClInclude Include="platform.h" /> |  | ||||||
|     <ClInclude Include="progress_callback.h" /> |     <ClInclude Include="progress_callback.h" /> | ||||||
|     <ClInclude Include="rectangle.h" /> |     <ClInclude Include="rectangle.h" /> | ||||||
|     <ClInclude Include="scoped_guard.h" /> |     <ClInclude Include="scoped_guard.h" /> | ||||||
|  |  | ||||||
|  | @ -29,7 +29,6 @@ | ||||||
|     <ClInclude Include="lru_cache.h" /> |     <ClInclude Include="lru_cache.h" /> | ||||||
|     <ClInclude Include="easing.h" /> |     <ClInclude Include="easing.h" /> | ||||||
|     <ClInclude Include="error.h" /> |     <ClInclude Include="error.h" /> | ||||||
|     <ClInclude Include="platform.h" /> |  | ||||||
|     <ClInclude Include="http_downloader_winhttp.h" /> |     <ClInclude Include="http_downloader_winhttp.h" /> | ||||||
|     <ClInclude Include="http_downloader.h" /> |     <ClInclude Include="http_downloader.h" /> | ||||||
|     <ClInclude Include="path.h" /> |     <ClInclude Include="path.h" /> | ||||||
|  |  | ||||||
|  | @ -1,66 +0,0 @@ | ||||||
| // SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin <stenzek@gmail.com>
 |  | ||||||
| // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
 |  | ||||||
| 
 |  | ||||||
| #pragma once |  | ||||||
| 
 |  | ||||||
| #if defined(_MSC_VER) |  | ||||||
| 
 |  | ||||||
| #if defined(_M_X64) |  | ||||||
| #define CPU_X64 1 |  | ||||||
| #elif defined(_M_IX86) |  | ||||||
| #define CPU_X86 1 |  | ||||||
| #elif defined(_M_ARM64) |  | ||||||
| #define CPU_AARCH64 1 |  | ||||||
| #elif defined(_M_ARM) |  | ||||||
| #define CPU_AARCH32 1 |  | ||||||
| #else |  | ||||||
| #error Unknown architecture. |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #elif defined(__GNUC__) || defined(__clang__) |  | ||||||
| 
 |  | ||||||
| #if defined(__x86_64__) |  | ||||||
| #define CPU_X64 1 |  | ||||||
| #elif defined(__i386__) |  | ||||||
| #define CPU_X86 1 |  | ||||||
| #elif defined(__aarch64__) |  | ||||||
| #define CPU_AARCH64 1 |  | ||||||
| #elif defined(__arm__) |  | ||||||
| #define CPU_AARCH32 1 |  | ||||||
| #elif defined(__riscv) && __riscv_xlen == 64 |  | ||||||
| #define CPU_RISCV64 1 |  | ||||||
| #else |  | ||||||
| #error Unknown architecture. |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #else |  | ||||||
| 
 |  | ||||||
| #error Unknown compiler. |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if defined(CPU_X64) |  | ||||||
| #define CPU_ARCH_STR "x64" |  | ||||||
| #elif defined(CPU_X86) |  | ||||||
| #define CPU_ARCH_STR "x86" |  | ||||||
| #elif defined(CPU_AARCH32) |  | ||||||
| #define CPU_ARCH_STR "AArch32" |  | ||||||
| #elif defined(CPU_AARCH64) |  | ||||||
| #define CPU_ARCH_STR "AArch64" |  | ||||||
| #else |  | ||||||
| #define CPU_ARCH_STR "Unknown" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if defined(_WIN32) |  | ||||||
| #define SYSTEM_STR "Windows" |  | ||||||
| #elif defined(__ANDROID__) |  | ||||||
| #define SYSTEM_STR "Android" |  | ||||||
| #elif defined(__linux__) |  | ||||||
| #define SYSTEM_STR "Linux" |  | ||||||
| #elif defined(__FreeBSD__) |  | ||||||
| #define SYSTEM_STR "FreeBSD" |  | ||||||
| #elif defined(__APPLE__) |  | ||||||
| #define SYSTEM_STR "macOS" |  | ||||||
| #else |  | ||||||
| #define SYSTEM_STR "Unknown" |  | ||||||
| #endif |  | ||||||
|  | @ -51,9 +51,9 @@ char (&__countof_ArraySizeHelper(T (&array)[N]))[N]; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||||
| #define printflike(n,m) __attribute__((format(printf,n,m))) | #define printflike(n, m) __attribute__((format(printf, n, m))) | ||||||
| #else | #else | ||||||
| #define printflike(n,m) | #define printflike(n, m) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| // [[noreturn]] which can be used on function pointers.
 | // [[noreturn]] which can be used on function pointers.
 | ||||||
|  | @ -68,7 +68,12 @@ char (&__countof_ArraySizeHelper(T (&array)[N]))[N]; | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #define ASSUME(x) __assume(x) | #define ASSUME(x) __assume(x) | ||||||
| #else | #else | ||||||
| #define ASSUME(x) do { if (!(x)) __builtin_unreachable(); } while(0) | #define ASSUME(x)                                                                                                      \ | ||||||
|  |   do                                                                                                                   \ | ||||||
|  |   {                                                                                                                    \ | ||||||
|  |     if (!(x))                                                                                                          \ | ||||||
|  |       __builtin_unreachable();                                                                                         \ | ||||||
|  |   } while (0) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| // disable warnings that show up at warning level 4
 | // disable warnings that show up at warning level 4
 | ||||||
|  | @ -88,6 +93,82 @@ using u32 = uint32_t; | ||||||
| using s64 = int64_t; | using s64 = int64_t; | ||||||
| using u64 = uint64_t; | using u64 = uint64_t; | ||||||
| 
 | 
 | ||||||
|  | // Enable use of static_assert in constexpr if
 | ||||||
|  | template<class T> | ||||||
|  | struct dependent_false : std::false_type | ||||||
|  | { | ||||||
|  | }; | ||||||
|  | template<int T> | ||||||
|  | struct dependent_int_false : std::false_type | ||||||
|  | { | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // Architecture detection.
 | ||||||
|  | #if defined(_MSC_VER) | ||||||
|  | 
 | ||||||
|  | #if defined(_M_X64) | ||||||
|  | #define CPU_ARCH_X64 1 | ||||||
|  | #elif defined(_M_IX86) | ||||||
|  | #define CPU_ARCH_X86 1 | ||||||
|  | #elif defined(_M_ARM64) | ||||||
|  | #define CPU_ARCH_ARM64 1 | ||||||
|  | #elif defined(_M_ARM) | ||||||
|  | #define CPU_ARCH_ARM32 1 | ||||||
|  | #else | ||||||
|  | #error Unknown architecture. | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #elif defined(__GNUC__) || defined(__clang__) | ||||||
|  | 
 | ||||||
|  | #if defined(__x86_64__) | ||||||
|  | #define CPU_ARCH_X64 1 | ||||||
|  | #elif defined(__i386__) | ||||||
|  | #define CPU_ARCH_X86 1 | ||||||
|  | #elif defined(__aarch64__) | ||||||
|  | #define CPU_ARCH_ARM64 1 | ||||||
|  | #elif defined(__arm__) | ||||||
|  | #define CPU_ARCH_ARM32 1 | ||||||
|  | #elif defined(__riscv) && __riscv_xlen == 64 | ||||||
|  | #define CPU_ARCH_RISCV64 1 | ||||||
|  | #else | ||||||
|  | #error Unknown architecture. | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | #error Unknown compiler. | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if defined(CPU_ARCH_X64) | ||||||
|  | #define CPU_ARCH_STR "x64" | ||||||
|  | #elif defined(CPU_ARCH_X86) | ||||||
|  | #define CPU_ARCH_STR "x86" | ||||||
|  | #elif defined(CPU_ARCH_ARM32) | ||||||
|  | #define CPU_ARCH_STR "arm32" | ||||||
|  | #elif defined(CPU_ARCH_ARM64) | ||||||
|  | #define CPU_ARCH_STR "arm64" | ||||||
|  | #elif defined(CPU_ARCH_RISCV64) | ||||||
|  | #define CPU_ARCH_STR "riscv64" | ||||||
|  | #else | ||||||
|  | #define CPU_ARCH_STR "Unknown" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | // OS detection.
 | ||||||
|  | #if defined(_WIN32) | ||||||
|  | #define TARGET_OS_STR "Windows" | ||||||
|  | #elif defined(__ANDROID__) | ||||||
|  | #define TARGET_OS_STR "Android" | ||||||
|  | #elif defined(__linux__) | ||||||
|  | #define TARGET_OS_STR "Linux" | ||||||
|  | #elif defined(__FreeBSD__) | ||||||
|  | #define TARGET_OS_STR "FreeBSD" | ||||||
|  | #elif defined(__APPLE__) | ||||||
|  | #define TARGET_OS_STR "macOS" | ||||||
|  | #else | ||||||
|  | #define TARGET_OS_STR "Unknown" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| // Host page sizes.
 | // Host page sizes.
 | ||||||
| #if defined(__APPLE__) && defined(__aarch64__) | #if defined(__APPLE__) && defined(__aarch64__) | ||||||
| static constexpr u32 HOST_PAGE_SIZE = 0x4000; | static constexpr u32 HOST_PAGE_SIZE = 0x4000; | ||||||
|  | @ -99,16 +180,6 @@ static constexpr u32 HOST_PAGE_MASK = HOST_PAGE_SIZE - 1; | ||||||
| static constexpr u32 HOST_PAGE_SHIFT = 12; | static constexpr u32 HOST_PAGE_SHIFT = 12; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| // Enable use of static_assert in constexpr if
 |  | ||||||
| template<class T> |  | ||||||
| struct dependent_false : std::false_type |  | ||||||
| { |  | ||||||
| }; |  | ||||||
| template<int T> |  | ||||||
| struct dependent_int_false : std::false_type |  | ||||||
| { |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // Zero-extending helper
 | // Zero-extending helper
 | ||||||
| template<typename TReturn, typename TValue> | template<typename TReturn, typename TValue> | ||||||
| ALWAYS_INLINE constexpr TReturn ZeroExtend(TValue value) | ALWAYS_INLINE constexpr TReturn ZeroExtend(TValue value) | ||||||
|  |  | ||||||
|  | @ -23,7 +23,6 @@ | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/md5_digest.h" | #include "common/md5_digest.h" | ||||||
| #include "common/path.h" | #include "common/path.h" | ||||||
| #include "common/platform.h" |  | ||||||
| #include "common/scoped_guard.h" | #include "common/scoped_guard.h" | ||||||
| #include "common/small_string.h" | #include "common/small_string.h" | ||||||
| #include "common/string_util.h" | #include "common/string_util.h" | ||||||
|  | @ -231,7 +230,7 @@ std::unique_lock<std::recursive_mutex> Achievements::GetLock() | ||||||
| 
 | 
 | ||||||
| std::string Achievements::GetUserAgent() | std::string Achievements::GetUserAgent() | ||||||
| { | { | ||||||
|   return fmt::format("DuckStation for {} ({}) {}", SYSTEM_STR, CPU_ARCH_STR, g_scm_tag_str); |   return fmt::format("DuckStation for {} ({}) {}", TARGET_OS_STR, CPU_ARCH_STR, g_scm_tag_str); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Achievements::ReportError(const std::string_view& sv) | void Achievements::ReportError(const std::string_view& sv) | ||||||
|  |  | ||||||
|  | @ -22,7 +22,6 @@ | ||||||
| #include "common/file_system.h" | #include "common/file_system.h" | ||||||
| #include "common/heap_array.h" | #include "common/heap_array.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/platform.h" |  | ||||||
| 
 | 
 | ||||||
| #include "imgui.h" | #include "imgui.h" | ||||||
| 
 | 
 | ||||||
|  | @ -30,7 +29,7 @@ | ||||||
| #include <vector> | #include <vector> | ||||||
| Log_SetChannel(CDROM); | Log_SetChannel(CDROM); | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
| #include <emmintrin.h> | #include <emmintrin.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -3074,7 +3073,7 @@ static s16 GetPeakVolume(const u8* raw_sector, u8 channel) | ||||||
| { | { | ||||||
|   static constexpr u32 NUM_SAMPLES = CDImage::RAW_SECTOR_SIZE / sizeof(s16); |   static constexpr u32 NUM_SAMPLES = CDImage::RAW_SECTOR_SIZE / sizeof(s16); | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   static_assert(Common::IsAlignedPow2(NUM_SAMPLES, 8)); |   static_assert(Common::IsAlignedPow2(NUM_SAMPLES, 8)); | ||||||
|   const u8* current_ptr = raw_sector; |   const u8* current_ptr = raw_sector; | ||||||
|   __m128i v_peak = _mm_set1_epi16(0); |   __m128i v_peak = _mm_set1_epi16(0); | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ static constexpr u32 INVALIDATE_THRESHOLD_TO_DISABLE_LINKING = 10; | ||||||
| #define USE_STATIC_CODE_BUFFER 1 | #define USE_STATIC_CODE_BUFFER 1 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_AARCH32) | #if defined(CPU_ARCH_ARM32) | ||||||
| // Use a smaller code buffer size on AArch32 to have a better chance of being in range.
 | // Use a smaller code buffer size on AArch32 to have a better chance of being in range.
 | ||||||
| static constexpr u32 RECOMPILER_CODE_CACHE_SIZE = 16 * 1024 * 1024; | static constexpr u32 RECOMPILER_CODE_CACHE_SIZE = 16 * 1024 * 1024; | ||||||
| static constexpr u32 RECOMPILER_FAR_CODE_CACHE_SIZE = 8 * 1024 * 1024; | static constexpr u32 RECOMPILER_FAR_CODE_CACHE_SIZE = 8 * 1024 * 1024; | ||||||
|  |  | ||||||
|  | @ -993,7 +993,7 @@ void CodeGenerator::BlockPrologue() | ||||||
| 
 | 
 | ||||||
| void CodeGenerator::BlockEpilogue() | void CodeGenerator::BlockEpilogue() | ||||||
| { | { | ||||||
| #if defined(_DEBUG) && defined(CPU_X64) | #if defined(_DEBUG) && defined(CPU_ARCH_X64) | ||||||
|   m_emit->nop(); |   m_emit->nop(); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -1007,7 +1007,7 @@ void CodeGenerator::BlockEpilogue() | ||||||
| void CodeGenerator::InstructionPrologue(const CodeBlockInstruction& cbi, TickCount cycles, | void CodeGenerator::InstructionPrologue(const CodeBlockInstruction& cbi, TickCount cycles, | ||||||
|                                         bool force_sync /* = false */) |                                         bool force_sync /* = false */) | ||||||
| { | { | ||||||
| #if defined(_DEBUG) && defined(CPU_X64) | #if defined(_DEBUG) && defined(CPU_ARCH_X64) | ||||||
|   m_emit->nop(); |   m_emit->nop(); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -198,9 +198,9 @@ struct Value | ||||||
|   static Value FromConstantU64(u64 value) { return FromConstant(value, RegSize_64); } |   static Value FromConstantU64(u64 value) { return FromConstant(value, RegSize_64); } | ||||||
|   static Value FromConstantPtr(const void* pointer) |   static Value FromConstantPtr(const void* pointer) | ||||||
|   { |   { | ||||||
| #if defined(CPU_AARCH64) || defined(CPU_X64) | #if defined(CPU_ARCH_ARM64) || defined(CPU_ARCH_X64) | ||||||
|     return FromConstant(static_cast<u64>(reinterpret_cast<uintptr_t>(pointer)), RegSize_64); |     return FromConstant(static_cast<u64>(reinterpret_cast<uintptr_t>(pointer)), RegSize_64); | ||||||
| #elif defined(CPU_AARCH32) | #elif defined(CPU_ARCH_ARM32) | ||||||
|     return FromConstant(static_cast<u32>(reinterpret_cast<uintptr_t>(pointer)), RegSize_32); |     return FromConstant(static_cast<u32>(reinterpret_cast<uintptr_t>(pointer)), RegSize_32); | ||||||
| #else | #else | ||||||
|     return FromConstant(0, RegSize_32); |     return FromConstant(0, RegSize_32); | ||||||
|  |  | ||||||
|  | @ -2,10 +2,9 @@ | ||||||
| // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
 | // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
 | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| #include "common/platform.h" |  | ||||||
| #include "cpu_types.h" | #include "cpu_types.h" | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
| 
 | 
 | ||||||
| // We need to include windows.h before xbyak does..
 | // We need to include windows.h before xbyak does..
 | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
|  | @ -15,13 +14,13 @@ | ||||||
| #define XBYAK_NO_OP_NAMES 1 | #define XBYAK_NO_OP_NAMES 1 | ||||||
| #include "xbyak.h" | #include "xbyak.h" | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_AARCH32) | #elif defined(CPU_ARCH_ARM32) | ||||||
| 
 | 
 | ||||||
| #include "vixl/aarch32/constants-aarch32.h" | #include "vixl/aarch32/constants-aarch32.h" | ||||||
| #include "vixl/aarch32/instructions-aarch32.h" | #include "vixl/aarch32/instructions-aarch32.h" | ||||||
| #include "vixl/aarch32/macro-assembler-aarch32.h" | #include "vixl/aarch32/macro-assembler-aarch32.h" | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
| 
 | 
 | ||||||
| #include "vixl/aarch64/constants-aarch64.h" | #include "vixl/aarch64/constants-aarch64.h" | ||||||
| #include "vixl/aarch64/macro-assembler-aarch64.h" | #include "vixl/aarch64/macro-assembler-aarch64.h" | ||||||
|  | @ -64,7 +63,7 @@ enum class Condition : u8 | ||||||
|   Zero |   Zero | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
| 
 | 
 | ||||||
| using HostReg = unsigned; | using HostReg = unsigned; | ||||||
| using CodeEmitter = Xbyak::CodeGenerator; | using CodeEmitter = Xbyak::CodeGenerator; | ||||||
|  | @ -92,7 +91,7 @@ constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; | ||||||
| #error Unknown ABI. | #error Unknown ABI. | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_AARCH32) | #elif defined(CPU_ARCH_ARM32) | ||||||
| 
 | 
 | ||||||
| using HostReg = unsigned; | using HostReg = unsigned; | ||||||
| using CodeEmitter = vixl::aarch32::MacroAssembler; | using CodeEmitter = vixl::aarch32::MacroAssembler; | ||||||
|  | @ -111,7 +110,7 @@ constexpr u32 MAX_FAR_HOST_BYTES_PER_INSTRUCTION = 128; | ||||||
| // Alignment of code stoarge.
 | // Alignment of code stoarge.
 | ||||||
| constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; | constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
| 
 | 
 | ||||||
| using HostReg = unsigned; | using HostReg = unsigned; | ||||||
| using CodeEmitter = vixl::aarch64::MacroAssembler; | using CodeEmitter = vixl::aarch64::MacroAssembler; | ||||||
|  | @ -130,7 +129,7 @@ constexpr u32 MAX_FAR_HOST_BYTES_PER_INSTRUCTION = 128; | ||||||
| // Alignment of code stoarge.
 | // Alignment of code stoarge.
 | ||||||
| constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; | constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_RISCV64) | #elif defined(CPU_ARCH_RISCV64) | ||||||
| 
 | 
 | ||||||
| using HostReg = unsigned; | using HostReg = unsigned; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,15 +10,14 @@ | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/make_array.h" | #include "common/make_array.h" | ||||||
| #include "common/platform.h" |  | ||||||
| 
 | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| 
 | 
 | ||||||
| Log_SetChannel(GPU_SW); | Log_SetChannel(GPU_SW); | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
| #include <emmintrin.h> | #include <emmintrin.h> | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #include <arm64_neon.h> | #include <arm64_neon.h> | ||||||
| #else | #else | ||||||
|  | @ -163,7 +162,7 @@ ALWAYS_INLINE void CopyOutRow16<GPUTexture::Format::RGBA5551, u16>(const u16* sr | ||||||
| { | { | ||||||
|   u32 col = 0; |   u32 col = 0; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   const u32 aligned_width = Common::AlignDownPow2(width, 8); |   const u32 aligned_width = Common::AlignDownPow2(width, 8); | ||||||
|   for (; col < aligned_width; col += 8) |   for (; col < aligned_width; col += 8) | ||||||
|   { |   { | ||||||
|  | @ -177,7 +176,7 @@ ALWAYS_INLINE void CopyOutRow16<GPUTexture::Format::RGBA5551, u16>(const u16* sr | ||||||
|     _mm_storeu_si128(reinterpret_cast<__m128i*>(dst_ptr), value); |     _mm_storeu_si128(reinterpret_cast<__m128i*>(dst_ptr), value); | ||||||
|     dst_ptr += 8; |     dst_ptr += 8; | ||||||
|   } |   } | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
|   const u32 aligned_width = Common::AlignDownPow2(width, 8); |   const u32 aligned_width = Common::AlignDownPow2(width, 8); | ||||||
|   for (; col < aligned_width; col += 8) |   for (; col < aligned_width; col += 8) | ||||||
|   { |   { | ||||||
|  | @ -202,7 +201,7 @@ ALWAYS_INLINE void CopyOutRow16<GPUTexture::Format::RGB565, u16>(const u16* src_ | ||||||
| { | { | ||||||
|   u32 col = 0; |   u32 col = 0; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   const u32 aligned_width = Common::AlignDownPow2(width, 8); |   const u32 aligned_width = Common::AlignDownPow2(width, 8); | ||||||
|   for (; col < aligned_width; col += 8) |   for (; col < aligned_width; col += 8) | ||||||
|   { |   { | ||||||
|  | @ -217,7 +216,7 @@ ALWAYS_INLINE void CopyOutRow16<GPUTexture::Format::RGB565, u16>(const u16* src_ | ||||||
|     _mm_storeu_si128(reinterpret_cast<__m128i*>(dst_ptr), value); |     _mm_storeu_si128(reinterpret_cast<__m128i*>(dst_ptr), value); | ||||||
|     dst_ptr += 8; |     dst_ptr += 8; | ||||||
|   } |   } | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
|   const u32 aligned_width = Common::AlignDownPow2(width, 8); |   const u32 aligned_width = Common::AlignDownPow2(width, 8); | ||||||
|   const uint16x8_t single_mask = vdupq_n_u16(0x1F); |   const uint16x8_t single_mask = vdupq_n_u16(0x1F); | ||||||
|   for (; col < aligned_width; col += 8) |   for (; col < aligned_width; col += 8) | ||||||
|  |  | ||||||
|  | @ -41,9 +41,9 @@ | ||||||
| #include <span> | #include <span> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
| #include <emmintrin.h> | #include <emmintrin.h> | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #include <arm64_neon.h> | #include <arm64_neon.h> | ||||||
| #else | #else | ||||||
|  | @ -66,7 +66,7 @@ static void Draw(); | ||||||
| 
 | 
 | ||||||
| static std::tuple<float, float> GetMinMax(std::span<const float> values) | static std::tuple<float, float> GetMinMax(std::span<const float> values) | ||||||
| { | { | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   __m128 vmin(_mm_loadu_ps(values.data())); |   __m128 vmin(_mm_loadu_ps(values.data())); | ||||||
|   __m128 vmax(vmin); |   __m128 vmax(vmin); | ||||||
| 
 | 
 | ||||||
|  | @ -76,8 +76,8 @@ static std::tuple<float, float> GetMinMax(std::span<const float> values) | ||||||
|   for (; i < aligned_count; i += 4) |   for (; i < aligned_count; i += 4) | ||||||
|   { |   { | ||||||
|     const __m128 v(_mm_loadu_ps(&values[i])); |     const __m128 v(_mm_loadu_ps(&values[i])); | ||||||
|     vmin = _mm_min_ps(v); |     vmin = _mm_min_ps(vmin, v); | ||||||
|     vmax = _mm_max_ps(v); |     vmax = _mm_max_ps(vmax, v); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|  | @ -94,7 +94,7 @@ static std::tuple<float, float> GetMinMax(std::span<const float> values) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return std::tie(min, max); |   return std::tie(min, max); | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
|   float32x4_t vmin(vld1q_f32(values.data())); |   float32x4_t vmin(vld1q_f32(values.data())); | ||||||
|   float32x4_t vmax(vmin); |   float32x4_t vmax(vmin); | ||||||
| 
 | 
 | ||||||
|  | @ -104,8 +104,8 @@ static std::tuple<float, float> GetMinMax(std::span<const float> values) | ||||||
|   for (; i < aligned_count; i += 4) |   for (; i < aligned_count; i += 4) | ||||||
|   { |   { | ||||||
|     const float32x4_t v(vld1q_f32(&values[i])); |     const float32x4_t v(vld1q_f32(&values[i])); | ||||||
|     vmin = vminq_f32(v); |     vmin = vminq_f32(vmin, v); | ||||||
|     vmax = vmaxq_f32(v); |     vmax = vmaxq_f32(vmax, v); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   float min = vminvq_f32(vmin); |   float min = vminvq_f32(vmin); | ||||||
|  |  | ||||||
|  | @ -5,14 +5,13 @@ | ||||||
| #include "common/file_system.h" | #include "common/file_system.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/path.h" | #include "common/path.h" | ||||||
| #include "common/platform.h" |  | ||||||
| #include "common/string_util.h" | #include "common/string_util.h" | ||||||
| #include "common/timer.h" | #include "common/timer.h" | ||||||
| #include "fmt/format.h" | #include "fmt/format.h" | ||||||
| #include "host.h" | #include "host.h" | ||||||
| #include "settings.h" | #include "settings.h" | ||||||
| #include "xxhash.h" | #include "xxhash.h" | ||||||
| #if defined(CPU_X86) || defined(CPU_X64) | #if defined(CPU_ARCH_X86) || defined(CPU_ARCH_X64) | ||||||
| #include "xxh_x86dispatch.h" | #include "xxh_x86dispatch.h" | ||||||
| #endif | #endif | ||||||
| #include <cinttypes> | #include <cinttypes> | ||||||
|  |  | ||||||
|  | @ -7,7 +7,6 @@ | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/make_array.h" | #include "common/make_array.h" | ||||||
| #include "common/platform.h" |  | ||||||
| #include "common/timer.h" | #include "common/timer.h" | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <cmath> | #include <cmath> | ||||||
|  | @ -23,7 +22,7 @@ | ||||||
| #include <arm64_neon.h> | #include <arm64_neon.h> | ||||||
| #elif defined(__aarch64__) | #elif defined(__aarch64__) | ||||||
| #include <arm_neon.h> | #include <arm_neon.h> | ||||||
| #elif defined(CPU_X86) || defined(CPU_X64) | #elif defined(CPU_ARCH_X86) || defined(CPU_ARCH_X64) | ||||||
| #include <emmintrin.h> | #include <emmintrin.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -365,7 +364,7 @@ void AudioStream::EndWrite(u32 num_frames) | ||||||
| static constexpr float S16_TO_FLOAT = 1.0f / 32767.0f; | static constexpr float S16_TO_FLOAT = 1.0f / 32767.0f; | ||||||
| static constexpr float FLOAT_TO_S16 = 32767.0f; | static constexpr float FLOAT_TO_S16 = 32767.0f; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_AARCH64) | #if defined(CPU_ARCH_ARM64) | ||||||
| 
 | 
 | ||||||
| static void S16ChunkToFloat(const s32* src, float* dst) | static void S16ChunkToFloat(const s32* src, float* dst) | ||||||
| { | { | ||||||
|  | @ -418,7 +417,7 @@ static void FloatChunkToS16(s32* dst, const float* src, uint size) | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_X86) || defined(CPU_X64) | #elif defined(CPU_ARCH_X86) || defined(CPU_ARCH_X64) | ||||||
| 
 | 
 | ||||||
| static void S16ChunkToFloat(const s32* src, float* dst) | static void S16ChunkToFloat(const s32* src, float* dst) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -11,7 +11,6 @@ | ||||||
| #include "common/hash_combine.h" | #include "common/hash_combine.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/path.h" | #include "common/path.h" | ||||||
| #include "common/platform.h" |  | ||||||
| #include "common/string_util.h" | #include "common/string_util.h" | ||||||
| 
 | 
 | ||||||
| #include "fmt/format.h" | #include "fmt/format.h" | ||||||
|  | @ -448,7 +447,7 @@ bool CDImageCHD::IsPrecached() const | ||||||
| ALWAYS_INLINE static void CopyAndSwap(void* dst_ptr, const u8* src_ptr, u32 data_size) | ALWAYS_INLINE static void CopyAndSwap(void* dst_ptr, const u8* src_ptr, u32 data_size) | ||||||
| { | { | ||||||
|   u8* dst_ptr_byte = static_cast<u8*>(dst_ptr); |   u8* dst_ptr_byte = static_cast<u8*>(dst_ptr); | ||||||
| #if defined(CPU_X64) || defined(CPU_AARCH64) | #if defined(CPU_ARCH_X64) || defined(CPU_ARCH_ARM64) | ||||||
|   const u32 num_values = data_size / 8; |   const u32 num_values = data_size / 8; | ||||||
|   for (u32 i = 0; i < num_values; i++) |   for (u32 i = 0; i < num_values; i++) | ||||||
|   { |   { | ||||||
|  | @ -459,7 +458,7 @@ ALWAYS_INLINE static void CopyAndSwap(void* dst_ptr, const u8* src_ptr, u32 data | ||||||
|     src_ptr += sizeof(value); |     src_ptr += sizeof(value); | ||||||
|     dst_ptr_byte += sizeof(value); |     dst_ptr_byte += sizeof(value); | ||||||
|   } |   } | ||||||
| #elif defined(CPU_X86) || defined(CPU_ARM) | #elif defined(CPU_ARCH_X86) || defined(CPU_ARCH_ARM32) | ||||||
|   const u32 num_values = data_size / 4; |   const u32 num_values = data_size / 4; | ||||||
|   for (u32 i = 0; i < num_values; i++) |   for (u32 i = 0; i < num_values; i++) | ||||||
|   { |   { | ||||||
|  |  | ||||||
|  | @ -5,7 +5,6 @@ | ||||||
| #include "common/align.h" | #include "common/align.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/platform.h" |  | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| Log_SetChannel(JitCodeBuffer); | Log_SetChannel(JitCodeBuffer); | ||||||
| 
 | 
 | ||||||
|  | @ -209,7 +208,7 @@ void JitCodeBuffer::CommitCode(u32 length) | ||||||
|   if (length == 0) |   if (length == 0) | ||||||
|     return; |     return; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_AARCH32) || defined(CPU_AARCH64) || defined(CPU_RISCV64) | #if defined(CPU_ARCH_ARM32) || defined(CPU_ARCH_ARM64) || defined(CPU_ARCH_RISCV64) | ||||||
|   // ARM instruction and data caches are not coherent, we need to flush after every block.
 |   // ARM instruction and data caches are not coherent, we need to flush after every block.
 | ||||||
|   FlushInstructionCache(m_free_code_ptr, length); |   FlushInstructionCache(m_free_code_ptr, length); | ||||||
| #endif | #endif | ||||||
|  | @ -224,7 +223,7 @@ void JitCodeBuffer::CommitFarCode(u32 length) | ||||||
|   if (length == 0) |   if (length == 0) | ||||||
|     return; |     return; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_AARCH32) || defined(CPU_AARCH64) || defined(CPU_RISCV64) | #if defined(CPU_ARCH_ARM32) || defined(CPU_ARCH_ARM64) || defined(CPU_ARCH_RISCV64) | ||||||
|   // ARM instruction and data caches are not coherent, we need to flush after every block.
 |   // ARM instruction and data caches are not coherent, we need to flush after every block.
 | ||||||
|   FlushInstructionCache(m_free_far_code_ptr, length); |   FlushInstructionCache(m_free_far_code_ptr, length); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -3,7 +3,6 @@ | ||||||
| 
 | 
 | ||||||
| #include "page_fault_handler.h" | #include "page_fault_handler.h" | ||||||
| #include "common/log.h" | #include "common/log.h" | ||||||
| #include "common/platform.h" |  | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <mutex> | #include <mutex> | ||||||
|  | @ -36,7 +35,7 @@ static std::vector<RegisteredHandler> m_handlers; | ||||||
| static std::mutex m_handler_lock; | static std::mutex m_handler_lock; | ||||||
| static thread_local bool s_in_handler; | static thread_local bool s_in_handler; | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_AARCH32) | #if defined(CPU_ARCH_ARM32) | ||||||
| static bool IsStoreInstruction(const void* ptr) | static bool IsStoreInstruction(const void* ptr) | ||||||
| { | { | ||||||
|   u32 bits; |   u32 bits; | ||||||
|  | @ -46,7 +45,7 @@ static bool IsStoreInstruction(const void* ptr) | ||||||
|   return false; |   return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
| static bool IsStoreInstruction(const void* ptr) | static bool IsStoreInstruction(const void* ptr) | ||||||
| { | { | ||||||
|   u32 bits; |   u32 bits; | ||||||
|  | @ -81,7 +80,7 @@ static bool IsStoreInstruction(const void* ptr) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #elif defined(CPU_RISCV64) | #elif defined(CPU_ARCH_RISCV64) | ||||||
| static bool IsStoreInstruction(const void* ptr) | static bool IsStoreInstruction(const void* ptr) | ||||||
| { | { | ||||||
|   u32 bits; |   u32 bits; | ||||||
|  | @ -91,7 +90,7 @@ static bool IsStoreInstruction(const void* ptr) | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if defined(_WIN32) && (defined(CPU_X64) || defined(CPU_AARCH64)) | #if defined(_WIN32) && (defined(CPU_ARCH_X64) || defined(CPU_ARCH_ARM64)) | ||||||
| static PVOID s_veh_handle; | static PVOID s_veh_handle; | ||||||
| 
 | 
 | ||||||
| static LONG ExceptionHandler(PEXCEPTION_POINTERS exi) | static LONG ExceptionHandler(PEXCEPTION_POINTERS exi) | ||||||
|  | @ -142,16 +141,16 @@ static void SIGSEGVHandler(int sig, siginfo_t* info, void* ctx) | ||||||
| #if defined(__linux__) || defined(__ANDROID__) | #if defined(__linux__) || defined(__ANDROID__) | ||||||
|   void* const exception_address = reinterpret_cast<void*>(info->si_addr); |   void* const exception_address = reinterpret_cast<void*>(info->si_addr); | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.gregs[REG_RIP]); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.gregs[REG_RIP]); | ||||||
|   const bool is_write = (static_cast<ucontext_t*>(ctx)->uc_mcontext.gregs[REG_ERR] & 2) != 0; |   const bool is_write = (static_cast<ucontext_t*>(ctx)->uc_mcontext.gregs[REG_ERR] & 2) != 0; | ||||||
| #elif defined(CPU_AARCH32) | #elif defined(CPU_ARCH_ARM32) | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.arm_pc); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.arm_pc); | ||||||
|   const bool is_write = IsStoreInstruction(exception_pc); |   const bool is_write = IsStoreInstruction(exception_pc); | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.pc); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.pc); | ||||||
|   const bool is_write = IsStoreInstruction(exception_pc); |   const bool is_write = IsStoreInstruction(exception_pc); | ||||||
| #elif defined(CPU_RISCV64) | #elif defined(CPU_ARCH_RISCV64) | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.__gregs[REG_PC]); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.__gregs[REG_PC]); | ||||||
|   const bool is_write = IsStoreInstruction(exception_pc); |   const bool is_write = IsStoreInstruction(exception_pc); | ||||||
| #else | #else | ||||||
|  | @ -161,12 +160,12 @@ static void SIGSEGVHandler(int sig, siginfo_t* info, void* ctx) | ||||||
| 
 | 
 | ||||||
| #elif defined(__APPLE__) | #elif defined(__APPLE__) | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   void* const exception_address = |   void* const exception_address = | ||||||
|     reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__faultvaddr); |     reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__faultvaddr); | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__ss.__rip); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__ss.__rip); | ||||||
|   const bool is_write = (static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__err & 2) != 0; |   const bool is_write = (static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__err & 2) != 0; | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
|   void* const exception_address = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__far); |   void* const exception_address = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__far); | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__ss.__pc); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__ss.__pc); | ||||||
|   const bool is_write = IsStoreInstruction(exception_pc); |   const bool is_write = IsStoreInstruction(exception_pc); | ||||||
|  | @ -178,11 +177,11 @@ static void SIGSEGVHandler(int sig, siginfo_t* info, void* ctx) | ||||||
| 
 | 
 | ||||||
| #elif defined(__FreeBSD__) | #elif defined(__FreeBSD__) | ||||||
| 
 | 
 | ||||||
| #if defined(CPU_X64) | #if defined(CPU_ARCH_X64) | ||||||
|   void* const exception_address = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.mc_addr); |   void* const exception_address = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.mc_addr); | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.mc_rip); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext.mc_rip); | ||||||
|   const bool is_write = (static_cast<ucontext_t*>(ctx)->uc_mcontext.mc_err & 2) != 0; |   const bool is_write = (static_cast<ucontext_t*>(ctx)->uc_mcontext.mc_err & 2) != 0; | ||||||
| #elif defined(CPU_AARCH64) | #elif defined(CPU_ARCH_ARM64) | ||||||
|   void* const exception_address = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__far); |   void* const exception_address = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__es.__far); | ||||||
|   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__ss.__pc); |   void* const exception_pc = reinterpret_cast<void*>(static_cast<ucontext_t*>(ctx)->uc_mcontext->__ss.__pc); | ||||||
|   const bool is_write = IsStoreInstruction(exception_pc); |   const bool is_write = IsStoreInstruction(exception_pc); | ||||||
|  | @ -238,7 +237,7 @@ bool InstallHandler(const void* owner, void* start_pc, u32 code_size, Callback c | ||||||
| 
 | 
 | ||||||
|   if (was_empty) |   if (was_empty) | ||||||
|   { |   { | ||||||
| #if defined(_WIN32) && (defined(CPU_X64) || defined(CPU_AARCH64)) | #if defined(_WIN32) && (defined(CPU_ARCH_X64) || defined(CPU_ARCH_ARM64)) | ||||||
|     s_veh_handle = AddVectoredExceptionHandler(1, ExceptionHandler); |     s_veh_handle = AddVectoredExceptionHandler(1, ExceptionHandler); | ||||||
|     if (!s_veh_handle) |     if (!s_veh_handle) | ||||||
|     { |     { | ||||||
|  | @ -284,7 +283,7 @@ bool RemoveHandler(const void* owner) | ||||||
| 
 | 
 | ||||||
|   if (m_handlers.empty()) |   if (m_handlers.empty()) | ||||||
|   { |   { | ||||||
| #if defined(_WIN32) && (defined(CPU_X64) || defined(CPU_AARCH64)) | #if defined(_WIN32) && (defined(CPU_ARCH_X64) || defined(CPU_ARCH_ARM64)) | ||||||
|     RemoveVectoredExceptionHandler(s_veh_handle); |     RemoveVectoredExceptionHandler(s_veh_handle); | ||||||
|     s_veh_handle = nullptr; |     s_veh_handle = nullptr; | ||||||
| #elif defined(USE_SIGSEGV) | #elif defined(USE_SIGSEGV) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Stenzek
						Stenzek