summaryrefslogtreecommitdiff
path: root/neozip/zarch.h
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 19:56:09 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 19:56:09 +0300
commit7fb132859fda54aa96bc9dd46d302b343eeb5a02 (patch)
treeb43ae77d7451fb470a260c03349a1caf2846c5e5 /neozip/zarch.h
parentb1e34e861b5d732afe828d58aad2c638135061fd (diff)
parentc2712b8a345191f6ed79558c089777df94590087 (diff)
downloadProject-Tick-7fb132859fda54aa96bc9dd46d302b343eeb5a02.tar.gz
Project-Tick-7fb132859fda54aa96bc9dd46d302b343eeb5a02.zip
Add 'neozip/' from commit 'c2712b8a345191f6ed79558c089777df94590087'
git-subtree-dir: neozip git-subtree-mainline: b1e34e861b5d732afe828d58aad2c638135061fd git-subtree-split: c2712b8a345191f6ed79558c089777df94590087
Diffstat (limited to 'neozip/zarch.h')
-rw-r--r--neozip/zarch.h209
1 files changed, 209 insertions, 0 deletions
diff --git a/neozip/zarch.h b/neozip/zarch.h
new file mode 100644
index 0000000000..6fdcfaba55
--- /dev/null
+++ b/neozip/zarch.h
@@ -0,0 +1,209 @@
+/* zarch.h -- Detect compiler architecture and define ARCH_* macros
+ * Copyright (C) 2019 Hans Kristian Rosbach
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifndef ZARCH_H
+#define ZARCH_H
+
+#define ZARCH_STRINGIZE(X) ZARCH_DOSTRINGIZE(X)
+#define ZARCH_DOSTRINGIZE(X) #X
+
+/* ARM64EC defines both _M_ARM64EC and _M_AMD64/_M_X64, so check for ARM first. */
+
+/* ARM 64-bit */
+#if defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
+# define ARCH_ARM
+# define ARCH_64BIT
+# define ARCH_NAME "aarch64"
+
+/* ARM 32-bit */
+#elif defined(__arm__) || defined(__arm) || defined(_M_ARM) || defined(__TARGET_ARCH_ARM)
+# define ARCH_ARM
+# define ARCH_32BIT
+# if defined(__ARM64_ARCH_8__) || defined(__ARM_ARCH_8A__) || defined(__ARMv8__) || defined(__ARMv8_A__)
+# define ARCH_NAME "armv8"
+# elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__)
+# define ARCH_NAME "armv7"
+# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6T2__) || \
+ defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__) || \
+ defined(__ARM_ARCH_6M__)
+# define ARCH_NAME "armv6"
+# elif defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
+# define ARCH_NAME "armv5"
+# elif defined(__ARM_ARCH_4T__)
+# define ARCH_NAME "armv4"
+# elif defined(__ARM_ARCH_3__)
+# define ARCH_NAME "armv3"
+# elif defined(__ARM_ARCH_2__)
+# define ARCH_NAME "armv2"
+# else
+# define ARCH_NAME "arm"
+# endif
+
+/* x86_64 */
+#elif defined(__x86_64__) || defined(_M_X64)
+# define ARCH_X86
+# define ARCH_64BIT
+# define ARCH_NAME "x86_64"
+
+/* x86 (32-bit) */
+#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || \
+ defined(__i386) || defined(_M_IX86)
+# define ARCH_X86
+# define ARCH_32BIT
+# define ARCH_NAME "i686"
+
+/* PowerPC */
+#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)
+# define ARCH_POWER
+# if defined(__64BIT__) || defined(__powerpc64__) || defined(__ppc64__)
+# define ARCH_64BIT
+# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+# define ARCH_NAME "powerpc64le"
+# else
+# define ARCH_NAME "powerpc64"
+# endif
+# else
+# define ARCH_32BIT
+# define ARCH_NAME "powerpc"
+# endif
+
+/* --------------- Less common architectures alphabetically below --------------- */
+
+/* ALPHA */
+#elif defined(__alpha__) || defined(__alpha)
+# define ARCH_ALPHA
+# define ARCH_64BIT
+# define ARCH_NAME "alpha"
+
+/* Blackfin */
+#elif defined(__BFIN__)
+# define ARCH_BLACKFIN
+# define ARCH_32BIT
+# define ARCH_NAME "blackfin"
+
+/* Itanium */
+#elif defined(__ia64) || defined(_M_IA64)
+# define ARCH_IA64
+# define ARCH_64BIT
+# define ARCH_NAME "ia64"
+
+/* MIPS */
+#elif defined(__mips__) || defined(__mips)
+# define ARCH_MIPS
+# if defined(__mips64) || defined(__mips64__)
+# define ARCH_64BIT
+# define ARCH_NAME "mips64"
+# else
+# define ARCH_32BIT
+# define ARCH_NAME "mips"
+# endif
+
+/* Motorola 68000-series */
+#elif defined(__m68k__)
+# define ARCH_M68K
+# define ARCH_32BIT
+# define ARCH_NAME "m68k"
+
+/* SuperH */
+#elif defined(__sh__)
+# define ARCH_SH
+# define ARCH_32BIT
+# define ARCH_NAME "sh"
+
+/* SPARC */
+#elif defined(__sparc__) || defined(__sparc)
+# define ARCH_SPARC
+# if defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__)
+# define ARCH_64BIT
+# define ARCH_NAME "sparc9"
+# elif defined(__sparcv8) || defined(__sparc_v8__)
+# define ARCH_32BIT
+# define ARCH_NAME "sparc8"
+# else
+# define ARCH_32BIT
+# define ARCH_NAME "sparc"
+# endif
+
+/* SystemZ / S390 */
+#elif defined(__s390x) || defined(__zarch__)
+# define ARCH_S390
+# define ARCH_64BIT
+# define ARCH_NAME "s390x"
+#elif defined(__s390__)
+# define ARCH_S390
+# define ARCH_32BIT
+# define ARCH_NAME "s390"
+#elif defined(__370__)
+# define ARCH_S390
+# define ARCH_32BIT
+# define ARCH_NAME "s370"
+
+/* PARISC */
+#elif defined(__hppa__)
+# define ARCH_PARISC
+# if defined(__hppa64__) || defined(__LP64__)
+# define ARCH_64BIT
+# define ARCH_NAME "parisc64"
+# else
+# define ARCH_32BIT
+# define ARCH_NAME "parisc"
+# endif
+
+/* RS-6000 */
+#elif defined(__THW_RS6000)
+# define ARCH_RS6000
+# define ARCH_32BIT
+# define ARCH_NAME "rs6000"
+
+/* RISC-V */
+#elif defined(__riscv)
+# define ARCH_RISCV
+# if __riscv_xlen == 64
+# define ARCH_64BIT
+# define ARCH_NAME "riscv64"
+# elif __riscv_xlen == 32
+# define ARCH_32BIT
+# define ARCH_NAME "riscv32"
+# else
+# define ARCH_NAME "riscv"
+# endif
+
+/* LOONGARCH */
+#elif defined(__loongarch_lp64)
+# define ARCH_LOONGARCH
+# define ARCH_64BIT
+# define ARCH_NAME "loongarch64"
+
+/* Emscripten (WebAssembly) */
+#elif defined(__EMSCRIPTEN__)
+# define ARCH_WASM
+# if defined(__wasm64__)
+# define ARCH_64BIT
+# define ARCH_NAME "wasm64"
+# else
+# define ARCH_32BIT
+# define ARCH_NAME "wasm32"
+# endif
+
+/* Elbrus 2000 (aka e2k) */
+#elif defined(__e2k__)
+# define ARCH_E2K
+/* e2k reuse x86 optimizations */
+# define ARCH_X86
+# define ARCH_64BIT
+# define ARCH_NAME "e2k"
+# define ARCH_VERSION_STR ZARCH_STRINGIZE(__iset__)
+
+/* Unrecognized architecture */
+#else
+# if defined(__LP64__) || defined(_LP64) || defined(_WIN64)
+# define ARCH_64BIT
+# else
+# define ARCH_32BIT
+# endif
+# define ARCH_NAME "unrecognized"
+#endif
+
+#endif /* ZARCH_H */