1 /* $OpenBSD: arm_arch.h,v 1.1 2022/03/23 15:13:31 tb Exp $ */ 2 #ifndef __ARM_ARCH_H__ 3 #define __ARM_ARCH_H__ 4 5 #if !defined(__ARM_ARCH__) 6 # if defined(__CC_ARM) 7 # define __ARM_ARCH__ __TARGET_ARCH_ARM 8 # if defined(__BIG_ENDIAN) 9 # define __ARMEB__ 10 # else 11 # define __ARMEL__ 12 # endif 13 # elif defined(__GNUC__) 14 /* 15 * Why doesn't gcc define __ARM_ARCH__? Instead it defines 16 * bunch of below macros. See all_architectures[] table in 17 * gcc/config/arm/arm.c. On a side note it defines 18 * __ARMEL__/__ARMEB__ for little-/big-endian. 19 */ 20 # if defined(__ARM_ARCH) 21 # define __ARM_ARCH__ __ARM_ARCH 22 # elif defined(__ARM_ARCH_8A__) 23 # define __ARM_ARCH__ 8 24 # elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \ 25 defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \ 26 defined(__ARM_ARCH_7EM__) 27 # define __ARM_ARCH__ 7 28 # elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \ 29 defined(__ARM_ARCH_6K__)|| defined(__ARM_ARCH_6M__) || \ 30 defined(__ARM_ARCH_6Z__)|| defined(__ARM_ARCH_6ZK__) || \ 31 defined(__ARM_ARCH_6T2__) 32 # define __ARM_ARCH__ 6 33 # elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \ 34 defined(__ARM_ARCH_5E__)|| defined(__ARM_ARCH_5TE__) || \ 35 defined(__ARM_ARCH_5TEJ__) 36 # define __ARM_ARCH__ 5 37 # elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) 38 # define __ARM_ARCH__ 4 39 # else 40 # error "unsupported ARM architecture" 41 # endif 42 # endif 43 #endif 44 45 #if !defined(__ASSEMBLER__) 46 extern unsigned int OPENSSL_armcap_P; 47 48 #define ARMV7_NEON (1<<0) 49 #define ARMV8_AES (1<<1) 50 #define ARMV8_SHA1 (1<<2) 51 #define ARMV8_SHA256 (1<<3) 52 #define ARMV8_PMULL (1<<4) 53 #endif 54 55 #if defined(__OpenBSD__) 56 #define __STRICT_ALIGNMENT 57 #endif 58 59 #endif 60