ARM(armv7) 32bits AES support

Hi,

Is there any plan to support AES on 32 bits ARM arm7 (NEON)?

I am using ARM armv7(NEON) 32 bits cross compiler, but 1.6.2 failed to compile.

It seems zerotier-one AES is using armv8 instructions.

Thanks

Hello.
Can you post the error messages?

I don’t think arm7 NEON supports the necessary instructions to use hardware AES.

Hi zt-travis,

Below is the error messages.


arm-hisiv600-linux-g++ -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizations -O3 -fstack-protector -fPIE -Wall -Wno-deprecated -std=c++11 -pthread -DNDEBUG -DZT_USE_MINIUPNPC -DMINIUPNP_STATICLIB -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DOS_STRING=“Linux” -DMINIUPNPC_VERSION_STRING=“2.0” -DUPNP_VERSION_STRING=“UPnP/1.1” -DENABLE_STRNATPMPERR -DZT_NO_TYPE_PUNNING -DZT_BUILD_PLATFORM=1 -DZT_BUILD_ARCHITECTURE=3 -DZT_SOFTWARE_UPDATE_DEFAULT="“disable”" -D_MT_ALLOCATOR_H -D_POOL_ALLOCATOR_H -D_EXTPTR_ALLOCATOR_H -D_DEBUG_ALLOCATOR_H -DZT_USE_ARM32_NEON_ASM_SALSA2012 -c -o node/AES.o node/AES.cpp
arm-hisiv600-linux-g++ -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizations -O3 -fstack-protector -fPIE -Wall -Wno-deprecated -std=c++11 -pthread -DNDEBUG -DZT_USE_MINIUPNPC -DMINIUPNP_STATICLIB -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DOS_STRING=“Linux” -DMINIUPNPC_VERSION_STRING=“2.0” -DUPNP_VERSION_STRING=“UPnP/1.1” -DENABLE_STRNATPMPERR -DZT_NO_TYPE_PUNNING -DZT_BUILD_PLATFORM=1 -DZT_BUILD_ARCHITECTURE=3 -DZT_SOFTWARE_UPDATE_DEFAULT="“disable”" -D_MT_ALLOCATOR_H -D_POOL_ALLOCATOR_H -D_EXTPTR_ALLOCATOR_H -D_DEBUG_ALLOCATOR_H -DZT_USE_ARM32_NEON_ASM_SALSA2012 -c -o node/AES_aesni.o node/AES_aesni.cpp
arm-hisiv600-linux-g++ -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizations -O3 -fstack-protector -fPIE -Wall -Wno-deprecated -std=c++11 -pthread -DNDEBUG -DZT_USE_MINIUPNPC -DMINIUPNP_STATICLIB -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DOS_STRING=“Linux” -DMINIUPNPC_VERSION_STRING=“2.0” -DUPNP_VERSION_STRING=“UPnP/1.1” -DENABLE_STRNATPMPERR -DZT_NO_TYPE_PUNNING -DZT_BUILD_PLATFORM=1 -DZT_BUILD_ARCHITECTURE=3 -DZT_SOFTWARE_UPDATE_DEFAULT="“disable”" -D_MT_ALLOCATOR_H -D_POOL_ALLOCATOR_H -D_EXTPTR_ALLOCATOR_H -D_DEBUG_ALLOCATOR_H -DZT_USE_ARM32_NEON_ASM_SALSA2012 -c -o node/AES_armcrypto.o node/AES_armcrypto.cpp
node/AES_armcrypto.cpp: In function ‘uint8x16_t ZeroTier::{anonymous}::s_clmul_armneon_crypto(uint8x16_t, uint8x16_t, const uint8_t*)’:
node/AES_armcrypto.cpp:29:17: error: ‘vrbitq_u8’ was not declared in this scope
y = vrbitq_u8(y);
^
node/AES_armcrypto.cpp: In member function ‘void ZeroTier::AES::GMAC::p_armFinish(uint8_t*)’:
node/AES_armcrypto.cpp:108:95: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Utils::storeMachineEndian< uint64_t >(tag, tmp[0] ^ reinterpret_cast<const uint64_t >(&yy)[0]);
^
node/AES_armcrypto.cpp: In member function ‘void ZeroTier::AES::CTR::p_armCrypt(const uint8_t
, uint8_t*, unsigned int)’:
node/AES_armcrypto.cpp:147:37: error: ‘vaeseq_u8’ was not declared in this scope
d0 = vaesmcq_u8(vaeseq_u8(d0, k0));
^
node/AES_armcrypto.cpp:147:38: error: ‘vaesmcq_u8’ was not declared in this scope
d0 = vaesmcq_u8(vaeseq_u8(d0, k0));
^
node/AES_armcrypto.cpp:187:36: error: ‘vaeseq_u8’ was not declared in this scope
d0 = vaesmcq_u8(vaeseq_u8(d0, k0));
^
node/AES_armcrypto.cpp:187:37: error: ‘vaesmcq_u8’ was not declared in this scope
d0 = vaesmcq_u8(vaeseq_u8(d0, k0));
^
node/AES_armcrypto.cpp:272:35: error: ‘vaeseq_u8’ was not declared in this scope
d0 = vaesmcq_u8(vaeseq_u8(d0, k0));
^
node/AES_armcrypto.cpp:272:36: error: ‘vaesmcq_u8’ was not declared in this scope
d0 = vaesmcq_u8(vaeseq_u8(d0, k0));
^
node/AES_armcrypto.cpp: In member function ‘void ZeroTier::AES::p_init_armneon_crypto(const uint8_t*)’:
node/AES_armcrypto.cpp:335:51: error: ‘vaesimcq_u8’ was not declared in this scope
p_k.neon.dk[i] = vaesimcq_u8(p_k.neon.ek[14 - i]);
^
node/AES_armcrypto.cpp:340:35: error: ‘vrbitq_u8’ was not declared in this scope
p_k.neon.h = vrbitq_u8(p_k.neon.h);
^
node/AES_armcrypto.cpp: In member function ‘void ZeroTier::AES::p_encrypt_armneon_crypto(const void*, void*) const’:
node/AES_armcrypto.cpp:348:48: error: ‘vaeseq_u8’ was not declared in this scope
tmp = vaesmcq_u8(vaeseq_u8(tmp, p_k.neon.ek[0]));
^
node/AES_armcrypto.cpp:348:49: error: ‘vaesmcq_u8’ was not declared in this scope
tmp = vaesmcq_u8(vaeseq_u8(tmp, p_k.neon.ek[0]));
^
node/AES_armcrypto.cpp: In member function ‘void ZeroTier::AES::p_decrypt_armneon_crypto(const void*, void*) const’:
node/AES_armcrypto.cpp:368:49: error: ‘vaesdq_u8’ was not declared in this scope
tmp = vaesimcq_u8(vaesdq_u8(tmp, p_k.neon.dk[0]));
^
node/AES_armcrypto.cpp:368:50: error: ‘vaesimcq_u8’ was not declared in this scope
tmp = vaesimcq_u8(vaesdq_u8(tmp, p_k.neon.dk[0]));
^
node/AES_armcrypto.cpp: In function ‘uint8x16_t ZeroTier::{anonymous}::s_clmul_armneon_crypto(uint8x16_t, uint8x16_t, const uint8_t*)’:
node/AES_armcrypto.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^

our cross compiler is arm7v 32 bits with NEON support. So ARM_NEON is defined by the cross compiler.

but instructions

vrbitq_u8
vaeseq_u8

are armv8 instructions.


arm-hisiv600-linux-g++ -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -dM -E -x c /dev/null
#define DBL_MIN_EXP (-1021)
#define HQ_FBIT 15
#define UINT_LEAST16_MAX 65535
#define __ARM_SIZEOF_WCHAR_T 4
#define __ATOMIC_ACQUIRE 2
#define SFRACT_IBIT 0
#define FLT_MIN 1.1754943508222875e-38F
#define __GCC_IEC_559_COMPLEX 2
#define UFRACT_MAX 0XFFFFP-16UR
#define UINT_LEAST8_TYPE unsigned char
#define DQ_FBIT 63
#define __INTMAX_C© c ## LL
#define __ARM_FEATURE_SAT 1
#define ULFRACT_FBIT 32
#define SACCUM_EPSILON 0x1P-7HK
#define CHAR_BIT 8
#define USQ_IBIT 0
#define UINT8_MAX 255
#define ACCUM_FBIT 15
#define WINT_MAX 4294967295U
#define USFRACT_FBIT 8
#define ORDER_LITTLE_ENDIAN 1234
#define SIZE_MAX 4294967295U
#define __ARM_ARCH_ISA_ARM 1
#define WCHAR_MAX 4294967295U
#define LACCUM_IBIT 32
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define DBL_DENORM_MIN ((double)4.9406564584124654e-324L)
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
#define __GCC_IEC_559 2
#define FLT_EVAL_METHOD 0
#define unix 1
#define LLACCUM_MAX 0X7FFFFFFFFFFFFFFFP-31LLK
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
#define FRACT_FBIT 15
#define UINT_FAST64_MAX 18446744073709551615ULL
#define SIG_ATOMIC_TYPE int
#define UACCUM_FBIT 16
#define DBL_MIN_10_EXP (-307)
#define FINITE_MATH_ONLY 0
#define ARMEL 1
#define __ARM_FEATURE_UNALIGNED 1
#define LFRACT_IBIT 0
#define GNUC_PATCHLEVEL 4
#define LFRACT_MAX 0X7FFFFFFFP-31LR
#define UINT_FAST8_MAX 255
#define __has_include(STR) has_include(STR)
#define DEC64_MAX_EXP 385
#define __INT8_C© c
#define UINT_LEAST64_MAX 18446744073709551615ULL
#define SA_FBIT 15
#define SHRT_MAX 32767
#define LDBL_MAX 1.7976931348623157e+308L
#define __ARM_FEATURE_IDIV 1
#define FRACT_MAX 0X7FFFP-15R
#define UFRACT_FBIT 16
#define __ARM_FP 14
#define UFRACT_MIN 0.0UR
#define UINT_LEAST8_MAX 255
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
#define UINTMAX_TYPE long long unsigned int
#define LLFRACT_EPSILON 0x1P-63LLR
#define __linux 1
#define DEC32_EPSILON 1E-6DF
#define CHAR_UNSIGNED 1
#define UINT32_MAX 4294967295U
#define ULFRACT_MAX 0XFFFFFFFFP-32ULR
#define TA_IBIT 64
#define LDBL_MAX_EXP 1024
#define WINT_MIN 0U
#define linux 1
#define ULLFRACT_MIN 0.0ULLR
#define SCHAR_MAX 127
#define WCHAR_MIN 0U
#define __INT64_C© c ## LL
#define DBL_DIG 15
#define __ARM_NEON_FP 6
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
#define LLACCUM_MIN (-0X1P31LLK-0X1P31LLK)
#define SIZEOF_INT 4
#define SIZEOF_POINTER 4
#define USACCUM_IBIT 8
#define USER_LABEL_PREFIX
#define STDC_HOSTED 1
#define LDBL_HAS_INFINITY 1
#define LFRACT_MIN (-0.5LR-0.5LR)
#define HA_IBIT 8
#define TQ_IBIT 0
#define FLT_EPSILON 1.1920928955078125e-7F
#define APCS_32 1
#define USFRACT_IBIT 0
#define LDBL_MIN 2.2250738585072014e-308L
#define FRACT_MIN (-0.5R-0.5R)
#define DEC32_MAX 9.999999E96DF
#define DA_IBIT 32
#define __ARM_SIZEOF_MINIMAL_ENUM 4
#define INT32_MAX 2147483647
#define UQQ_FBIT 8
#define SIZEOF_LONG 4
#define UACCUM_MAX 0XFFFFFFFFP-16UK
#define STDC_IEC_559 1
#define STDC_ISO_10646 201103L
#define __UINT16_C© c
#define DECIMAL_DIG 17
#define LFRACT_EPSILON 0x1P-31LR
#define ULFRACT_MIN 0.0ULR
#define gnu_linux 1
#define __has_include_next(STR) has_include_next(STR)
#define LDBL_HAS_QUIET_NAN 1
#define ULACCUM_IBIT 32
#define UACCUM_EPSILON 0x1P-16UK
#define GNUC 4
#define ULLACCUM_MAX 0XFFFFFFFFFFFFFFFFP-32ULLK
#define HQ_IBIT 0
#define FLT_HAS_DENORM 1
#define SIZEOF_LONG_DOUBLE 8
#define BIGGEST_ALIGNMENT 8
#define DQ_IBIT 0
#define DBL_MAX ((double)1.7976931348623157e+308L)
#define ULFRACT_IBIT 0
#define INT_FAST32_MAX 2147483647
#define DBL_HAS_INFINITY 1
#define ACCUM_IBIT 16
#define DEC32_MIN_EXP (-94)
#define THUMB_INTERWORK 1
#define LACCUM_MAX 0X7FFFFFFFFFFFFFFFP-31LK
#define INT_FAST16_TYPE int
#define LDBL_HAS_DENORM 1
#define __ARM_FEATURE_LDREX 15
#define DEC128_MAX 9.999999999999999999999999999999999E6144DL
#define INT_LEAST32_MAX 2147483647
#define __ARM_PCS 1
#define DEC32_MIN 1E-95DF
#define ACCUM_MAX 0X7FFFFFFFP-15K
#define DBL_MAX_EXP 1024
#define USACCUM_EPSILON 0x1P-8UHK
#define DEC128_EPSILON 1E-33DL
#define SFRACT_MAX 0X7FP-7HR
#define FRACT_IBIT 0
#define PTRDIFF_MAX 2147483647
#define UACCUM_MIN 0.0UK
#define STDC_NO_THREADS 1
#define UACCUM_IBIT 16
#define LONG_LONG_MAX 9223372036854775807LL
#define SIZEOF_SIZE_T 4
#define ULACCUM_MAX 0XFFFFFFFFFFFFFFFFP-32ULK
#define SIZEOF_WINT_T 4
#define SA_IBIT 16
#define ULLACCUM_MIN 0.0ULLK
#define __GXX_ABI_VERSION 1002
#define UTA_FBIT 64
#define FLT_MIN_EXP (-125)
#define USFRACT_MAX 0XFFP-8UHR
#define UFRACT_IBIT 0
#define __ARM_FEATURE_QBIT 1
#define INT_FAST64_TYPE long long int
#define __FP_FAST_FMAF 1
#define __FP_FAST_FMAL 1
#define DBL_MIN ((double)2.2250738585072014e-308L)
#define LACCUM_MIN (-0X1P31LK-0X1P31LK)
#define ULLACCUM_FBIT 32
#define __GXX_TYPEINFO_EQUALITY_INLINE 0
#define ULLFRACT_EPSILON 0x1P-64ULLR
#define DEC128_MIN 1E-6143DL
#define REGISTER_PREFIX
#define UINT16_MAX 65535
#define DBL_HAS_DENORM 1
#define ACCUM_MIN (-0X1P15K-0X1P15K)
#define SQ_IBIT 0
#define UINT8_TYPE unsigned char
#define UHA_FBIT 8
#define NO_INLINE 1
#define SFRACT_MIN (-0.5HR-0.5HR)
#define UTQ_FBIT 128
#define FLT_MANT_DIG 24
#define VERSION “4.9.4 20150629 (prerelease)”
#define __UINT64_C© c ## ULL
#define ULLFRACT_FBIT 64
#define FRACT_EPSILON 0x1P-15R
#define ULACCUM_MIN 0.0ULK
#define _STDC_PREDEF_H 1
#define UDA_FBIT 32
#define LLACCUM_EPSILON 0x1P-31LLK
#define __ARM_FEATURE_FMA 1
#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define FLOAT_WORD_ORDER ORDER_LITTLE_ENDIAN
#define USFRACT_MIN 0.0UHR
#define UQQ_IBIT 0
#define STDC_IEC_559_COMPLEX 1
#define ARM_NEON 1
#define __INT32_C© c
#define DEC64_EPSILON 1E-15DD
#define ORDER_PDP_ENDIAN 3412
#define DEC128_MIN_EXP (-6142)
#define UHQ_FBIT 16
#define LLACCUM_FBIT 31
#define LINARO_SPIN 0
#define INT_FAST32_TYPE int
#define UINT_LEAST16_TYPE short unsigned int
#define unix 1
#define INT16_MAX 32767
#define SIZE_TYPE unsigned int
#define UINT64_MAX 18446744073709551615ULL
#define UDQ_FBIT 64
#define INT8_TYPE signed char
#define ELF 1
#define ULFRACT_EPSILON 0x1P-32ULR
#define LLFRACT_FBIT 63
#define FLT_RADIX 2
#define INT_LEAST16_TYPE short int
#define __ARM_ARCH_PROFILE 65
#define LDBL_EPSILON 2.2204460492503131e-16L
#define __UINTMAX_C© c ## ULL
#define SACCUM_MAX 0X7FFFP-7HK
#define SIG_ATOMIC_MAX 2147483647
#define LINARO_RELEASE 201506
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define VFP_FP 1
#define SIZEOF_PTRDIFF_T 4
#define LACCUM_EPSILON 0x1P-31LK
#define DEC32_SUBNORMAL_MIN 0.000001E-95DF
#define INT_FAST16_MAX 2147483647
#define UINT_FAST32_MAX 4294967295U
#define UINT_LEAST64_TYPE long long unsigned int
#define USACCUM_MAX 0XFFFFP-8UHK
#define SFRACT_EPSILON 0x1P-7HR
#define FLT_HAS_QUIET_NAN 1
#define FLT_MAX_10_EXP 38
#define LONG_MAX 2147483647L
#define DEC128_SUBNORMAL_MIN 0.000000000000000000000000000000001E-6143DL
#define FLT_HAS_INFINITY 1
#define __unix 1
#define USA_FBIT 16
#define UINT_FAST16_TYPE unsigned int
#define DEC64_MAX 9.999999999999999E384DD
#define __ARM_32BIT_STATE 1
#define CHAR16_TYPE short unsigned int
#define __PRAGMA_REDEFINE_EXTNAME 1
#define INT_LEAST16_MAX 32767
#define DEC64_MANT_DIG 16
#define INT64_MAX 9223372036854775807LL
#define UINT_LEAST32_MAX 4294967295U
#define SACCUM_FBIT 7
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
#define INT_LEAST64_TYPE long long int
#define __ARM_FEATURE_CLZ 1
#define INT16_TYPE short int
#define INT_LEAST8_TYPE signed char
#define SQ_FBIT 31
#define DEC32_MAX_EXP 97
#define __ARM_ARCH_ISA_THUMB 2
#define INT_FAST8_MAX 127
#define __ARM_ARCH 7
#define INTPTR_MAX 2147483647
#define QQ_FBIT 7
#define linux 1
#define UTA_IBIT 64
#define LDBL_MANT_DIG 53
#define SFRACT_FBIT 7
#define SACCUM_MIN (-0X1P7HK-0X1P7HK)
#define DBL_HAS_QUIET_NAN 1
#define SIG_ATOMIC_MIN (-SIG_ATOMIC_MAX - 1)
#define INTPTR_TYPE int
#define UINT16_TYPE short unsigned int
#define WCHAR_TYPE unsigned int
#define SIZEOF_FLOAT 4
#define USQ_FBIT 32
#define UINTPTR_MAX 4294967295U
#define DEC64_MIN_EXP (-382)
#define ULLACCUM_IBIT 32
#define INT_FAST64_MAX 9223372036854775807LL
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
#define FLT_DIG 6
#define UINT_FAST64_TYPE long long unsigned int
#define INT_MAX 2147483647
#define LACCUM_FBIT 31
#define USACCUM_MIN 0.0UHK
#define UHA_IBIT 8
#define INT64_TYPE long long int
#define FLT_MAX_EXP 128
#define UTQ_IBIT 0
#define DBL_MANT_DIG 53
#define INT_LEAST64_MAX 9223372036854775807LL
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
#define DEC64_MIN 1E-383DD
#define WINT_TYPE unsigned int
#define UINT_LEAST32_TYPE unsigned int
#define SIZEOF_SHORT 2
#define ULLFRACT_IBIT 0
#define LDBL_MIN_EXP (-1021)
#define arm 1
#define UDA_IBIT 32
#define INT_LEAST8_MAX 127
#define LFRACT_FBIT 31
#define ARM_ARCH_7A 1
#define LDBL_MAX_10_EXP 308
#define __ATOMIC_RELAXED 0
#define DBL_EPSILON ((double)2.2204460492503131e-16L)
#define __ARM_FEATURE_SIMD32 1
#define __UINT8_C© c
#define INT_LEAST32_TYPE int
#define SIZEOF_WCHAR_T 4
#define UINT64_TYPE long long unsigned int
#define __ARM_NEON 1
#define LLFRACT_MAX 0X7FFFFFFFFFFFFFFFP-63LLR
#define TQ_FBIT 127
#define INT_FAST8_TYPE signed char
#define ULLACCUM_EPSILON 0x1P-32ULLK
#define UHQ_IBIT 0
#define LLACCUM_IBIT 32
#define DBL_DECIMAL_DIG 17
#define DEC_EVAL_METHOD 2
#define TA_FBIT 63
#define UDQ_IBIT 0
#define ORDER_BIG_ENDIAN 4321
#define ACCUM_EPSILON 0x1P-15K
#define __UINT32_C© c ## U
#define INTMAX_MAX 9223372036854775807LL
#define BYTE_ORDER ORDER_LITTLE_ENDIAN
#define FLT_DENORM_MIN 1.4012984643248171e-45F
#define LLFRACT_IBIT 0
#define INT8_MAX 127
#define UINT_FAST32_TYPE unsigned int
#define CHAR32_TYPE unsigned int
#define FLT_MAX 3.4028234663852886e+38F
#define __FP_FAST_FMA 1
#define USACCUM_FBIT 8
#define INT32_TYPE int
#define SIZEOF_DOUBLE 8
#define FLT_MIN_10_EXP (-37)
#define UFRACT_EPSILON 0x1P-16UR
#define INTMAX_TYPE long long int
#define DEC128_MAX_EXP 6145
#define __ATOMIC_CONSUME 1
#define GNUC_MINOR 9
#define UINTMAX_MAX 18446744073709551615ULL
#define DEC32_MANT_DIG 7
#define HA_FBIT 7
#define DBL_MAX_10_EXP 308
#define LDBL_DENORM_MIN 4.9406564584124654e-324L
#define __INT16_C© c
#define STDC 1
#define PTRDIFF_TYPE int
#define LLFRACT_MIN (-0.5LLR-0.5LLR)
#define __ATOMIC_SEQ_CST 5
#define DA_FBIT 31
#define UINT32_TYPE unsigned int
#define ARM_ARCH_EXT_IDIV 1
#define UINTPTR_TYPE unsigned int
#define USA_IBIT 16
#define DEC64_SUBNORMAL_MIN 0.000000000000001E-383DD
#define ARM_EABI 1
#define DEC128_MANT_DIG 34
#define LDBL_MIN_10_EXP (-307)
#define SIZEOF_LONG_LONG 8
#define ULACCUM_EPSILON 0x1P-32ULK
#define SACCUM_IBIT 8
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
#define LDBL_DIG 15
#define FLT_DECIMAL_DIG 9
#define UINT_FAST16_MAX 4294967295U
#define GNUC_GNU_INLINE 1
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
#define ULLFRACT_MAX 0XFFFFFFFFFFFFFFFFP-64ULLR
#define UINT_FAST8_TYPE unsigned char
#define USFRACT_EPSILON 0x1P-8UHR
#define ULACCUM_FBIT 32
#define __ARM_FEATURE_DSP 1
#define QQ_IBIT 0
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_RELEASE 3