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