Path: blob/master/thirdparty/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h
9917 views
/*1* Stack-less Just-In-Time compiler2*3* Copyright Zoltan Herczeg ([email protected]). All rights reserved.4*5* Redistribution and use in source and binary forms, with or without modification, are6* permitted provided that the following conditions are met:7*8* 1. Redistributions of source code must retain the above copyright notice, this list of9* conditions and the following disclaimer.10*11* 2. Redistributions in binary form must reproduce the above copyright notice, this list12* of conditions and the following disclaimer in the documentation and/or other materials13* provided with the distribution.14*15* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY16* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES17* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT18* SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,19* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED20* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR21* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN22* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN23* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.24*/2526#ifndef SLJIT_CONFIG_CPU_H_27#define SLJIT_CONFIG_CPU_H_2829/* --------------------------------------------------------------------- */30/* Architecture */31/* --------------------------------------------------------------------- */3233/* Architecture selection. */34/* #define SLJIT_CONFIG_X86_32 1 */35/* #define SLJIT_CONFIG_X86_64 1 */36/* #define SLJIT_CONFIG_ARM_V6 1 */37/* #define SLJIT_CONFIG_ARM_V7 1 */38/* #define SLJIT_CONFIG_ARM_THUMB2 1 */39/* #define SLJIT_CONFIG_ARM_64 1 */40/* #define SLJIT_CONFIG_PPC_32 1 */41/* #define SLJIT_CONFIG_PPC_64 1 */42/* #define SLJIT_CONFIG_MIPS_32 1 */43/* #define SLJIT_CONFIG_MIPS_64 1 */44/* #define SLJIT_CONFIG_RISCV_32 1 */45/* #define SLJIT_CONFIG_RISCV_64 1 */46/* #define SLJIT_CONFIG_S390X 1 */47/* #define SLJIT_CONFIG_LOONGARCH_64 */4849/* #define SLJIT_CONFIG_AUTO 1 */50/* #define SLJIT_CONFIG_UNSUPPORTED 1 */5152/*****************/53/* Sanity check. */54/*****************/5556#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) \57+ (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) \58+ (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6) \59+ (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) \60+ (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2) \61+ (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \62+ (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) \63+ (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) \64+ (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) \65+ (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) \66+ (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) \67+ (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \68+ (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \69+ (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \70+ (defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) \71+ (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) >= 272#error "Multiple architectures are selected"73#endif7475#if !(defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) \76&& !(defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) \77&& !(defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6) \78&& !(defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) \79&& !(defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2) \80&& !(defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \81&& !(defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) \82&& !(defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64) \83&& !(defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) \84&& !(defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) \85&& !(defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) \86&& !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \87&& !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \88&& !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \89&& !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) \90&& !(defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO)91#if defined SLJIT_CONFIG_AUTO && !SLJIT_CONFIG_AUTO92#error "An architecture must be selected"93#else /* SLJIT_CONFIG_AUTO */94#define SLJIT_CONFIG_AUTO 195#endif /* !SLJIT_CONFIG_AUTO */96#endif /* !SLJIT_CONFIG */9798/********************************************************/99/* Automatic CPU detection (requires compiler support). */100/********************************************************/101102#if (defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO)103#ifndef _WIN32104105#if defined(__i386__) || defined(__i386)106#define SLJIT_CONFIG_X86_32 1107#elif defined(__x86_64__)108#define SLJIT_CONFIG_X86_64 1109#elif defined(__aarch64__)110#define SLJIT_CONFIG_ARM_64 1111#elif defined(__thumb2__)112#define SLJIT_CONFIG_ARM_THUMB2 1113#elif (defined(__ARM_ARCH) && __ARM_ARCH >= 7) || \114((defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7S__)) \115|| (defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH_8R__)) \116|| (defined(__ARM_ARCH_9A__)))117#define SLJIT_CONFIG_ARM_V7 1118#elif defined(__arm__) || defined (__ARM__)119#define SLJIT_CONFIG_ARM_V6 1120#elif defined(__ppc64__) || defined(__powerpc64__) || (defined(_ARCH_PPC64) && defined(__64BIT__)) || (defined(_POWER) && defined(__64BIT__))121#define SLJIT_CONFIG_PPC_64 1122#elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC) || defined(_ARCH_PWR) || defined(_ARCH_PWR2) || defined(_POWER)123#define SLJIT_CONFIG_PPC_32 1124#elif defined(__mips__) && !defined(_LP64)125#define SLJIT_CONFIG_MIPS_32 1126#elif defined(__mips64)127#define SLJIT_CONFIG_MIPS_64 1128#elif defined (__riscv_xlen) && (__riscv_xlen == 32)129#define SLJIT_CONFIG_RISCV_32 1130#elif defined (__riscv_xlen) && (__riscv_xlen == 64)131#define SLJIT_CONFIG_RISCV_64 1132#elif defined (__loongarch_lp64)133#define SLJIT_CONFIG_LOONGARCH_64 1134#elif defined(__s390x__)135#define SLJIT_CONFIG_S390X 1136#else137/* Unsupported architecture */138#define SLJIT_CONFIG_UNSUPPORTED 1139#endif140141#else /* _WIN32 */142143#if defined(_M_X64) || defined(__x86_64__)144#define SLJIT_CONFIG_X86_64 1145#elif (defined(_M_ARM) && _M_ARM >= 7 && defined(_M_ARMT)) || defined(__thumb2__)146#define SLJIT_CONFIG_ARM_THUMB2 1147#elif (defined(_M_ARM) && _M_ARM >= 7)148#define SLJIT_CONFIG_ARM_V7 1149#elif defined(_ARM_)150#define SLJIT_CONFIG_ARM_V6 1151#elif defined(_M_ARM64) || defined(__aarch64__)152#define SLJIT_CONFIG_ARM_64 1153#else154#define SLJIT_CONFIG_X86_32 1155#endif156157#endif /* !_WIN32 */158#endif /* SLJIT_CONFIG_AUTO */159160#if (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED)161#undef SLJIT_EXECUTABLE_ALLOCATOR162#endif /* SLJIT_CONFIG_UNSUPPORTED */163164/******************************/165/* CPU family type detection. */166/******************************/167168#if (defined SLJIT_CONFIG_ARM_V6 && SLJIT_CONFIG_ARM_V6) || (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7) \169|| (defined SLJIT_CONFIG_ARM_THUMB2 && SLJIT_CONFIG_ARM_THUMB2)170#define SLJIT_CONFIG_ARM_32 1171#endif /* SLJIT_CONFIG_ARM_V6 || SLJIT_CONFIG_ARM_V7 || SLJIT_CONFIG_ARM_THUMB2 */172173#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)174#define SLJIT_CONFIG_X86 1175#elif (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64)176#define SLJIT_CONFIG_ARM 1177#elif (defined SLJIT_CONFIG_PPC_32 && SLJIT_CONFIG_PPC_32) || (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)178#define SLJIT_CONFIG_PPC 1179#elif (defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32) || (defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64)180#define SLJIT_CONFIG_MIPS 1181#elif (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) || (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64)182#define SLJIT_CONFIG_RISCV 1183#elif (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64)184#define SLJIT_CONFIG_LOONGARCH 1185#endif186187#endif /* SLJIT_CONFIG_CPU_H_ */188189190