From 3577608cab0bc509f856ebf6e41b2f9d9f71acc4 Mon Sep 17 00:00:00 2001 From: ZeeWanderer Date: Fri, 28 Apr 2023 02:14:41 +0300 Subject: [PATCH] [MSVC] workaround mvn macro and detect ARM64 (#407) Fixed MSVC AArch64 build * Detect AArch64 target properly when compiling by MSVC * Workaround the issue caused by MSVC defining a mvn macro --------- Co-authored-by: Petr Kobalicek --- src/asmjit/arm/a64emitter.h | 13 +++++++++++++ src/asmjit/core/api-config.h | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/asmjit/arm/a64emitter.h b/src/asmjit/arm/a64emitter.h index 54354ea..d68df29 100644 --- a/src/asmjit/arm/a64emitter.h +++ b/src/asmjit/arm/a64emitter.h @@ -11,6 +11,14 @@ #include "../arm/a64instdb.h" #include "../arm/a64operand.h" +// MSVC targeting AArch64 defines a lot of macros without underscores clashing +// with AArch64 instruction names. We have to workaround until it's fixed in SDK. +#if defined(_MSC_VER) && defined(mvn) + #define ASMJIT_RESTORE_MSVC_AARCH64_MACROS + #pragma push_macro("mvn") + #undef mvn +#endif + ASMJIT_BEGIN_SUB_NAMESPACE(a64) #define ASMJIT_INST_0x(NAME, ID) \ @@ -1225,4 +1233,9 @@ class Emitter : public BaseEmitter, public EmitterExplicitT { ASMJIT_END_SUB_NAMESPACE +// Restore undefined MSVC AArch64 macros. +#if defined(ASMJIT_RESTORE_MSVC_AARCH64_MACROS) + #pragma pop_macro("mvn") +#endif + #endif // ASMJIT_ARM_A64EMITTER_H_INCLUDED diff --git a/src/asmjit/core/api-config.h b/src/asmjit/core/api-config.h index 60c9d52..2a8d849 100644 --- a/src/asmjit/core/api-config.h +++ b/src/asmjit/core/api-config.h @@ -172,7 +172,7 @@ namespace asmjit { #define ASMJIT_ARCH_X86 0 #endif -#if defined(__arm64__) || defined(__aarch64__) +#if defined(_M_ARM64) || defined(__arm64__) || defined(__aarch64__) # define ASMJIT_ARCH_ARM 64 #elif defined(_M_ARM) || defined(_M_ARMT) || defined(__arm__) || defined(__thumb__) || defined(__thumb2__) #define ASMJIT_ARCH_ARM 32