1/* $OpenBSD: arm64_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__) 46extern 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