diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index dacabb56a..d8b255a40 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -38,7 +38,6 @@ add_library(common minizip_helpers.cpp minizip_helpers.h path.h - platform.h progress_callback.cpp progress_callback.h rectangle.h diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj index 577354780..1d7fee153 100644 --- a/src/common/common.vcxproj +++ b/src/common/common.vcxproj @@ -28,7 +28,6 @@ - diff --git a/src/common/common.vcxproj.filters b/src/common/common.vcxproj.filters index fcfd083bb..166b733f3 100644 --- a/src/common/common.vcxproj.filters +++ b/src/common/common.vcxproj.filters @@ -29,7 +29,6 @@ - diff --git a/src/common/platform.h b/src/common/platform.h deleted file mode 100644 index 8bb39c841..000000000 --- a/src/common/platform.h +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin -// 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 diff --git a/src/common/types.h b/src/common/types.h index a5dcc5408..9a12b0b6e 100644 --- a/src/common/types.h +++ b/src/common/types.h @@ -51,9 +51,9 @@ char (&__countof_ArraySizeHelper(T (&array)[N]))[N]; #endif #ifdef __GNUC__ -#define printflike(n,m) __attribute__((format(printf,n,m))) +#define printflike(n, m) __attribute__((format(printf, n, m))) #else -#define printflike(n,m) +#define printflike(n, m) #endif // [[noreturn]] which can be used on function pointers. @@ -68,7 +68,12 @@ char (&__countof_ArraySizeHelper(T (&array)[N]))[N]; #ifdef _MSC_VER #define ASSUME(x) __assume(x) #else -#define ASSUME(x) do { if (!(x)) __builtin_unreachable(); } while(0) +#define ASSUME(x) \ + do \ + { \ + if (!(x)) \ + __builtin_unreachable(); \ + } while (0) #endif // disable warnings that show up at warning level 4 @@ -88,6 +93,82 @@ using u32 = uint32_t; using s64 = int64_t; using u64 = uint64_t; +// Enable use of static_assert in constexpr if +template +struct dependent_false : std::false_type +{ +}; +template +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. #if defined(__APPLE__) && defined(__aarch64__) 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; #endif -// Enable use of static_assert in constexpr if -template -struct dependent_false : std::false_type -{ -}; -template -struct dependent_int_false : std::false_type -{ -}; - // Zero-extending helper template ALWAYS_INLINE constexpr TReturn ZeroExtend(TValue value) diff --git a/src/core/achievements.cpp b/src/core/achievements.cpp index 4ba0ef077..d4a184b9c 100644 --- a/src/core/achievements.cpp +++ b/src/core/achievements.cpp @@ -23,7 +23,6 @@ #include "common/log.h" #include "common/md5_digest.h" #include "common/path.h" -#include "common/platform.h" #include "common/scoped_guard.h" #include "common/small_string.h" #include "common/string_util.h" @@ -231,7 +230,7 @@ std::unique_lock Achievements::GetLock() 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) diff --git a/src/core/cdrom.cpp b/src/core/cdrom.cpp index 43d962ce5..78180fe59 100644 --- a/src/core/cdrom.cpp +++ b/src/core/cdrom.cpp @@ -22,7 +22,6 @@ #include "common/file_system.h" #include "common/heap_array.h" #include "common/log.h" -#include "common/platform.h" #include "imgui.h" @@ -30,7 +29,7 @@ #include Log_SetChannel(CDROM); -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) #include #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); -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) static_assert(Common::IsAlignedPow2(NUM_SAMPLES, 8)); const u8* current_ptr = raw_sector; __m128i v_peak = _mm_set1_epi16(0); diff --git a/src/core/cpu_code_cache.cpp b/src/core/cpu_code_cache.cpp index 250ae638a..f7f01b87e 100644 --- a/src/core/cpu_code_cache.cpp +++ b/src/core/cpu_code_cache.cpp @@ -36,7 +36,7 @@ static constexpr u32 INVALIDATE_THRESHOLD_TO_DISABLE_LINKING = 10; #define USE_STATIC_CODE_BUFFER 1 #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. static constexpr u32 RECOMPILER_CODE_CACHE_SIZE = 16 * 1024 * 1024; static constexpr u32 RECOMPILER_FAR_CODE_CACHE_SIZE = 8 * 1024 * 1024; diff --git a/src/core/cpu_recompiler_code_generator.cpp b/src/core/cpu_recompiler_code_generator.cpp index 509db7b6d..232fe8167 100644 --- a/src/core/cpu_recompiler_code_generator.cpp +++ b/src/core/cpu_recompiler_code_generator.cpp @@ -993,7 +993,7 @@ void CodeGenerator::BlockPrologue() void CodeGenerator::BlockEpilogue() { -#if defined(_DEBUG) && defined(CPU_X64) +#if defined(_DEBUG) && defined(CPU_ARCH_X64) m_emit->nop(); #endif @@ -1007,7 +1007,7 @@ void CodeGenerator::BlockEpilogue() void CodeGenerator::InstructionPrologue(const CodeBlockInstruction& cbi, TickCount cycles, bool force_sync /* = false */) { -#if defined(_DEBUG) && defined(CPU_X64) +#if defined(_DEBUG) && defined(CPU_ARCH_X64) m_emit->nop(); #endif diff --git a/src/core/cpu_recompiler_register_cache.h b/src/core/cpu_recompiler_register_cache.h index 2fd064d64..b8bfb2600 100644 --- a/src/core/cpu_recompiler_register_cache.h +++ b/src/core/cpu_recompiler_register_cache.h @@ -198,9 +198,9 @@ struct Value static Value FromConstantU64(u64 value) { return FromConstant(value, RegSize_64); } 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(reinterpret_cast(pointer)), RegSize_64); -#elif defined(CPU_AARCH32) +#elif defined(CPU_ARCH_ARM32) return FromConstant(static_cast(reinterpret_cast(pointer)), RegSize_32); #else return FromConstant(0, RegSize_32); diff --git a/src/core/cpu_recompiler_types.h b/src/core/cpu_recompiler_types.h index b12877129..432446c36 100644 --- a/src/core/cpu_recompiler_types.h +++ b/src/core/cpu_recompiler_types.h @@ -2,10 +2,9 @@ // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) #pragma once -#include "common/platform.h" #include "cpu_types.h" -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) // We need to include windows.h before xbyak does.. #ifdef _WIN32 @@ -15,13 +14,13 @@ #define XBYAK_NO_OP_NAMES 1 #include "xbyak.h" -#elif defined(CPU_AARCH32) +#elif defined(CPU_ARCH_ARM32) #include "vixl/aarch32/constants-aarch32.h" #include "vixl/aarch32/instructions-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/macro-assembler-aarch64.h" @@ -64,7 +63,7 @@ enum class Condition : u8 Zero }; -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) using HostReg = unsigned; using CodeEmitter = Xbyak::CodeGenerator; @@ -92,7 +91,7 @@ constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; #error Unknown ABI. #endif -#elif defined(CPU_AARCH32) +#elif defined(CPU_ARCH_ARM32) using HostReg = unsigned; using CodeEmitter = vixl::aarch32::MacroAssembler; @@ -111,7 +110,7 @@ constexpr u32 MAX_FAR_HOST_BYTES_PER_INSTRUCTION = 128; // Alignment of code stoarge. constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) using HostReg = unsigned; using CodeEmitter = vixl::aarch64::MacroAssembler; @@ -130,7 +129,7 @@ constexpr u32 MAX_FAR_HOST_BYTES_PER_INSTRUCTION = 128; // Alignment of code stoarge. constexpr u32 CODE_STORAGE_ALIGNMENT = 4096; -#elif defined(CPU_RISCV64) +#elif defined(CPU_ARCH_RISCV64) using HostReg = unsigned; diff --git a/src/core/gpu_sw.cpp b/src/core/gpu_sw.cpp index 9fd188207..d254a3a2e 100644 --- a/src/core/gpu_sw.cpp +++ b/src/core/gpu_sw.cpp @@ -10,15 +10,14 @@ #include "common/assert.h" #include "common/log.h" #include "common/make_array.h" -#include "common/platform.h" #include Log_SetChannel(GPU_SW); -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) #include -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) #ifdef _MSC_VER #include #else @@ -163,7 +162,7 @@ ALWAYS_INLINE void CopyOutRow16(const u16* sr { u32 col = 0; -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) const u32 aligned_width = Common::AlignDownPow2(width, 8); for (; col < aligned_width; col += 8) { @@ -177,7 +176,7 @@ ALWAYS_INLINE void CopyOutRow16(const u16* sr _mm_storeu_si128(reinterpret_cast<__m128i*>(dst_ptr), value); dst_ptr += 8; } -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) const u32 aligned_width = Common::AlignDownPow2(width, 8); for (; col < aligned_width; col += 8) { @@ -202,7 +201,7 @@ ALWAYS_INLINE void CopyOutRow16(const u16* src_ { u32 col = 0; -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) const u32 aligned_width = Common::AlignDownPow2(width, 8); for (; col < aligned_width; col += 8) { @@ -217,7 +216,7 @@ ALWAYS_INLINE void CopyOutRow16(const u16* src_ _mm_storeu_si128(reinterpret_cast<__m128i*>(dst_ptr), value); dst_ptr += 8; } -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) const u32 aligned_width = Common::AlignDownPow2(width, 8); const uint16x8_t single_mask = vdupq_n_u16(0x1F); for (; col < aligned_width; col += 8) diff --git a/src/core/imgui_overlays.cpp b/src/core/imgui_overlays.cpp index dd7744a87..332ee420d 100644 --- a/src/core/imgui_overlays.cpp +++ b/src/core/imgui_overlays.cpp @@ -41,9 +41,9 @@ #include #include -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) #include -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) #ifdef _MSC_VER #include #else @@ -66,7 +66,7 @@ static void Draw(); static std::tuple GetMinMax(std::span values) { -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) __m128 vmin(_mm_loadu_ps(values.data())); __m128 vmax(vmin); @@ -76,8 +76,8 @@ static std::tuple GetMinMax(std::span values) for (; i < aligned_count; i += 4) { const __m128 v(_mm_loadu_ps(&values[i])); - vmin = _mm_min_ps(v); - vmax = _mm_max_ps(v); + vmin = _mm_min_ps(vmin, v); + vmax = _mm_max_ps(vmax, v); } #ifdef _MSC_VER @@ -94,7 +94,7 @@ static std::tuple GetMinMax(std::span values) } return std::tie(min, max); -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) float32x4_t vmin(vld1q_f32(values.data())); float32x4_t vmax(vmin); @@ -104,8 +104,8 @@ static std::tuple GetMinMax(std::span values) for (; i < aligned_count; i += 4) { const float32x4_t v(vld1q_f32(&values[i])); - vmin = vminq_f32(v); - vmax = vmaxq_f32(v); + vmin = vminq_f32(vmin, v); + vmax = vmaxq_f32(vmax, v); } float min = vminvq_f32(vmin); diff --git a/src/core/texture_replacements.cpp b/src/core/texture_replacements.cpp index 0edbc6b04..d93b0aac2 100644 --- a/src/core/texture_replacements.cpp +++ b/src/core/texture_replacements.cpp @@ -5,14 +5,13 @@ #include "common/file_system.h" #include "common/log.h" #include "common/path.h" -#include "common/platform.h" #include "common/string_util.h" #include "common/timer.h" #include "fmt/format.h" #include "host.h" #include "settings.h" #include "xxhash.h" -#if defined(CPU_X86) || defined(CPU_X64) +#if defined(CPU_ARCH_X86) || defined(CPU_ARCH_X64) #include "xxh_x86dispatch.h" #endif #include diff --git a/src/util/audio_stream.cpp b/src/util/audio_stream.cpp index 68886d90f..797a4d698 100644 --- a/src/util/audio_stream.cpp +++ b/src/util/audio_stream.cpp @@ -7,7 +7,6 @@ #include "common/assert.h" #include "common/log.h" #include "common/make_array.h" -#include "common/platform.h" #include "common/timer.h" #include #include @@ -23,7 +22,7 @@ #include #elif defined(__aarch64__) #include -#elif defined(CPU_X86) || defined(CPU_X64) +#elif defined(CPU_ARCH_X86) || defined(CPU_ARCH_X64) #include #endif @@ -365,7 +364,7 @@ void AudioStream::EndWrite(u32 num_frames) static constexpr float S16_TO_FLOAT = 1.0f / 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) { @@ -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) { diff --git a/src/util/cd_image_chd.cpp b/src/util/cd_image_chd.cpp index da69d6534..e5db944af 100644 --- a/src/util/cd_image_chd.cpp +++ b/src/util/cd_image_chd.cpp @@ -11,7 +11,6 @@ #include "common/hash_combine.h" #include "common/log.h" #include "common/path.h" -#include "common/platform.h" #include "common/string_util.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) { u8* dst_ptr_byte = static_cast(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; 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); 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; for (u32 i = 0; i < num_values; i++) { diff --git a/src/util/jit_code_buffer.cpp b/src/util/jit_code_buffer.cpp index 6a8378824..9f155abda 100644 --- a/src/util/jit_code_buffer.cpp +++ b/src/util/jit_code_buffer.cpp @@ -5,7 +5,6 @@ #include "common/align.h" #include "common/assert.h" #include "common/log.h" -#include "common/platform.h" #include Log_SetChannel(JitCodeBuffer); @@ -209,7 +208,7 @@ void JitCodeBuffer::CommitCode(u32 length) if (length == 0) 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. FlushInstructionCache(m_free_code_ptr, length); #endif @@ -224,7 +223,7 @@ void JitCodeBuffer::CommitFarCode(u32 length) if (length == 0) 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. FlushInstructionCache(m_free_far_code_ptr, length); #endif diff --git a/src/util/page_fault_handler.cpp b/src/util/page_fault_handler.cpp index f9ba722b3..08db476b6 100644 --- a/src/util/page_fault_handler.cpp +++ b/src/util/page_fault_handler.cpp @@ -3,7 +3,6 @@ #include "page_fault_handler.h" #include "common/log.h" -#include "common/platform.h" #include #include #include @@ -36,7 +35,7 @@ static std::vector m_handlers; static std::mutex m_handler_lock; static thread_local bool s_in_handler; -#if defined(CPU_AARCH32) +#if defined(CPU_ARCH_ARM32) static bool IsStoreInstruction(const void* ptr) { u32 bits; @@ -46,7 +45,7 @@ static bool IsStoreInstruction(const void* ptr) return false; } -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) static bool IsStoreInstruction(const void* ptr) { u32 bits; @@ -81,7 +80,7 @@ static bool IsStoreInstruction(const void* ptr) return false; } } -#elif defined(CPU_RISCV64) +#elif defined(CPU_ARCH_RISCV64) static bool IsStoreInstruction(const void* ptr) { u32 bits; @@ -91,7 +90,7 @@ static bool IsStoreInstruction(const void* ptr) } #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 LONG ExceptionHandler(PEXCEPTION_POINTERS exi) @@ -142,16 +141,16 @@ static void SIGSEGVHandler(int sig, siginfo_t* info, void* ctx) #if defined(__linux__) || defined(__ANDROID__) void* const exception_address = reinterpret_cast(info->si_addr); -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext.gregs[REG_RIP]); const bool is_write = (static_cast(ctx)->uc_mcontext.gregs[REG_ERR] & 2) != 0; -#elif defined(CPU_AARCH32) +#elif defined(CPU_ARCH_ARM32) void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext.arm_pc); const bool is_write = IsStoreInstruction(exception_pc); -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext.pc); const bool is_write = IsStoreInstruction(exception_pc); -#elif defined(CPU_RISCV64) +#elif defined(CPU_ARCH_RISCV64) void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext.__gregs[REG_PC]); const bool is_write = IsStoreInstruction(exception_pc); #else @@ -161,12 +160,12 @@ static void SIGSEGVHandler(int sig, siginfo_t* info, void* ctx) #elif defined(__APPLE__) -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) void* const exception_address = reinterpret_cast(static_cast(ctx)->uc_mcontext->__es.__faultvaddr); void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext->__ss.__rip); const bool is_write = (static_cast(ctx)->uc_mcontext->__es.__err & 2) != 0; -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) void* const exception_address = reinterpret_cast(static_cast(ctx)->uc_mcontext->__es.__far); void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext->__ss.__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__) -#if defined(CPU_X64) +#if defined(CPU_ARCH_X64) void* const exception_address = reinterpret_cast(static_cast(ctx)->uc_mcontext.mc_addr); void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext.mc_rip); const bool is_write = (static_cast(ctx)->uc_mcontext.mc_err & 2) != 0; -#elif defined(CPU_AARCH64) +#elif defined(CPU_ARCH_ARM64) void* const exception_address = reinterpret_cast(static_cast(ctx)->uc_mcontext->__es.__far); void* const exception_pc = reinterpret_cast(static_cast(ctx)->uc_mcontext->__ss.__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 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); if (!s_veh_handle) { @@ -284,7 +283,7 @@ bool RemoveHandler(const void* owner) 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); s_veh_handle = nullptr; #elif defined(USE_SIGSEGV)