diff --git a/engine/common/build.c b/engine/common/build.c
index 7fd62795..78f9c8f9 100644
--- a/engine/common/build.c
+++ b/engine/common/build.c
@@ -115,11 +115,13 @@ const char *Q_buildarch( void )
archname = "amd64";
#elif XASH_X86
archname = "i386";
-#elif XASH_ARM64
+#elif XASH_ARM && XASH_64BIT
archname = "arm64";
#elif XASH_ARM
archname = "armv"
- #if XASH_ARM == 7
+ #if XASH_ARM == 8
+ "8_32" // for those who (mis)using 32-bit OS on 64-bit CPU
+ #elif XASH_ARM == 7
"7"
#elif XASH_ARM == 6
"6"
diff --git a/engine/common/crashhandler.c b/engine/common/crashhandler.c
index 38821dd6..1048b510 100644
--- a/engine/common/crashhandler.c
+++ b/engine/common/crashhandler.c
@@ -336,7 +336,7 @@ static void Sys_Crash( int signal, siginfo_t *si, void *context)
bp = (void**)ucontext->uc_mcontext.gregs[REG_EBP];
sp = (void**)ucontext->uc_mcontext.gregs[REG_ESP];
#endif
-#elif XASH_ARM64
+#elif XASH_ARM && XASH_64BIT
pc = (void*)ucontext->uc_mcontext.pc;
bp = (void*)ucontext->uc_mcontext.regs[29];
sp = (void*)ucontext->uc_mcontext.sp;
diff --git a/public/build.h b/public/build.h
index a087c22c..043a11cd 100644
--- a/public/build.h
+++ b/public/build.h
@@ -45,13 +45,13 @@ For more information, please refer to
#undef XASH_ANDROID
#undef XASH_APPLE
#undef XASH_ARM
-#undef XASH_ARM64
#undef XASH_ARM_HARDFP
#undef XASH_ARM_SOFTFP
#undef XASH_ARMv4
#undef XASH_ARMv5
#undef XASH_ARMv6
#undef XASH_ARMv7
+#undef XASH_ARMv8
//#undef XASH_BIG_ENDIAN
#undef XASH_BSD
#undef XASH_E2K
@@ -169,14 +169,13 @@ For more information, please refer to
#define XASH_AMD64 1
#elif defined(__i386__) || defined(_X86_) || defined(_M_IX86)
#define XASH_X86 1
-#elif defined __aarch64__
+#elif defined __aarch64__ || defined _M_ARM64
#define XASH_64BIT 1
- #define XASH_ARM64 1
+ #define XASH_ARM 8
#elif defined __arm__ || defined _M_ARM
- #if defined _M_ARM
- // msvc can only armv7 ?
- #define XASH_ARM 7
- #elif __ARM_ARCH == 7 || __ARM_ARCH_7__
+ #if __ARM_ARCH == 8 || __ARM_ARCH_8__
+ #define XASH_ARM 8
+ #elif __ARM_ARCH == 7 || __ARM_ARCH_7__ || defined _M_ARM // msvc can only armv7 in 32 bit
#define XASH_ARM 7
#elif __ARM_ARCH == 6 || __ARM_ARCH_6__ || __ARM_ARCH_6J__
#define XASH_ARM 6
@@ -212,7 +211,9 @@ For more information, please refer to
#define XASH_64BIT 1
#endif
-#if XASH_ARM == 7
+#if XASH_ARM == 8
+ #define XASH_ARMv8 1
+#elif XASH_ARM == 7
#define XASH_ARMv7 1
#elif XASH_ARM == 6
#define XASH_ARMv6 1