1*78e936b2SEnji Cooper=pod 2*78e936b2SEnji Cooper 3*78e936b2SEnji Cooper=head1 NAME 4*78e936b2SEnji Cooper 5*78e936b2SEnji CooperOPENSSL_armcap - the Arm processor capabilities vector 6*78e936b2SEnji Cooper 7*78e936b2SEnji Cooper=head1 SYNOPSIS 8*78e936b2SEnji Cooper 9*78e936b2SEnji Cooper env OPENSSL_armcap=... <application> 10*78e936b2SEnji Cooper 11*78e936b2SEnji Cooper=head1 DESCRIPTION 12*78e936b2SEnji Cooper 13*78e936b2SEnji Cooperlibcrypto supports a range of Arm instruction set extensions. These 14*78e936b2SEnji Cooperextensions are represented by bits in the Arm processor capabilities vector. 15*78e936b2SEnji CooperWhen libcrypto initializes, it stores the results returned by Arm CPU 16*78e936b2SEnji Coopercapabilities detection logic in the Arm processor capabilities vector. The 17*78e936b2SEnji CooperCPU capabilities detection methods are OS-dependent, using a combination of 18*78e936b2SEnji Cooperinformation gathered by the kernel during boot, and probe functions that attempt 19*78e936b2SEnji Cooperto execute instructions and trap illegal instruction signals with a signal 20*78e936b2SEnji Cooperhandler. 21*78e936b2SEnji Cooper 22*78e936b2SEnji CooperTo override the set of extensions available to an application, set the 23*78e936b2SEnji CooperB<OPENSSL_armcap> environment variable before starting the application. The 24*78e936b2SEnji Cooperenvironment variable is assigned a numerical value that denotes the bits in 25*78e936b2SEnji Cooperthe Arm processor capabilities vector. The arm_arch.h header file defines 26*78e936b2SEnji Cooperthe possible values, which are explained in detail below. 27*78e936b2SEnji Cooper 28*78e936b2SEnji CooperMultiple extensions are enabled by logically OR-ing the values that represent 29*78e936b2SEnji Cooperthe desired extensions. 30*78e936b2SEnji Cooper 31*78e936b2SEnji CooperB<Notes>: Attempting to executing an instruction from an extension that the 32*78e936b2SEnji Coopertarget CPU does not support will result in an illegal instruction exception 33*78e936b2SEnji Cooper(SIGILL). 34*78e936b2SEnji Cooper 35*78e936b2SEnji CooperPlease note that not all possible values in the Arm processor capabilities 36*78e936b2SEnji Coopervector are actual processor capabilities. Some values represent OpenSSL 37*78e936b2SEnji Cooperperformance preferences for some implementations which only make sense on 38*78e936b2SEnji Cooperspecific CPUs. 39*78e936b2SEnji Cooper 40*78e936b2SEnji CooperThe following extensions are defined: 41*78e936b2SEnji Cooper 42*78e936b2SEnji Cooper=over 4 43*78e936b2SEnji Cooper 44*78e936b2SEnji Cooper=item 0x0001 45*78e936b2SEnji Cooper 46*78e936b2SEnji CooperName: B<ARMV7_NEON> 47*78e936b2SEnji Cooper 48*78e936b2SEnji CooperMeaning: Indicates support for the Armv7 Neon SIMD extensions on the processor. 49*78e936b2SEnji Cooper 50*78e936b2SEnji CooperEffect: Enables various Armv7 Neon SIMD implementations. 51*78e936b2SEnji Cooper 52*78e936b2SEnji Cooper=item 0x00002 53*78e936b2SEnji Cooper 54*78e936b2SEnji CooperName: B<ARMV7_TICK> 55*78e936b2SEnji Cooper 56*78e936b2SEnji CooperMeaning: Indicates support for the Armv7 system timer on the processor. 57*78e936b2SEnji Cooper 58*78e936b2SEnji CooperEffect: This is used as a seed for some random number generators. 59*78e936b2SEnji Cooper 60*78e936b2SEnji Cooper=item 0x00004 61*78e936b2SEnji Cooper 62*78e936b2SEnji CooperName: B<ARMV8_AES> 63*78e936b2SEnji Cooper 64*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.0 AES hardware-acceleration extensions 65*78e936b2SEnji Cooperon the processor. 66*78e936b2SEnji Cooper 67*78e936b2SEnji CooperEffect: Enables various Armv8.0 AES hardware-accelerated implementations. 68*78e936b2SEnji Cooper 69*78e936b2SEnji Cooper=item 0x00008 70*78e936b2SEnji Cooper 71*78e936b2SEnji CooperName: B<ARMV8_SHA1> 72*78e936b2SEnji Cooper 73*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.0 SHA1 hardware-acceleration extensions 74*78e936b2SEnji Cooperon the processor. 75*78e936b2SEnji Cooper 76*78e936b2SEnji CooperEffect: Enables various Armv8.0 SHA1 hardware-accelerated implementations. 77*78e936b2SEnji Cooper 78*78e936b2SEnji Cooper=item 0x00010 79*78e936b2SEnji Cooper 80*78e936b2SEnji CooperName: B<ARMV8_SHA256> 81*78e936b2SEnji Cooper 82*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.0 SHA256 hardware-acceleration 83*78e936b2SEnji Cooperextensions on the processor. 84*78e936b2SEnji Cooper 85*78e936b2SEnji CooperEffect: Enables various Armv8.0 SHA256 hardware-accelerated implementations. 86*78e936b2SEnji Cooper 87*78e936b2SEnji Cooper=item 0x00020 88*78e936b2SEnji Cooper 89*78e936b2SEnji CooperName: B<ARMV8_PMULL> 90*78e936b2SEnji Cooper 91*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.0 polynomial multiplication 92*78e936b2SEnji Cooperhardware-acceleration extensions on the processor. 93*78e936b2SEnji Cooper 94*78e936b2SEnji CooperEffect: Used to hardware-accelerate polynomial multiplication, for example in 95*78e936b2SEnji CooperAES-GCM. 96*78e936b2SEnji Cooper 97*78e936b2SEnji Cooper=item 0x00040 98*78e936b2SEnji Cooper 99*78e936b2SEnji CooperName: B<ARMV8_SHA512> 100*78e936b2SEnji Cooper 101*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.2 SHA512 hardware-acceleration 102*78e936b2SEnji Cooperextensions on the processor. 103*78e936b2SEnji Cooper 104*78e936b2SEnji CooperEffect: Enables Armv8.2 SHA512 hardware-accelerated implementations. 105*78e936b2SEnji Cooper 106*78e936b2SEnji Cooper=item 0x00080 107*78e936b2SEnji Cooper 108*78e936b2SEnji CooperName: B<ARMV8_CPUID> 109*78e936b2SEnji Cooper 110*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.0 hardware identification extensions on 111*78e936b2SEnji Cooperthe processor. 112*78e936b2SEnji Cooper 113*78e936b2SEnji CooperEffect: Allows implementations to change their behaviour, dependant on the 114*78e936b2SEnji Cooperprocessor platform in order to achieve better performance. 115*78e936b2SEnji Cooper 116*78e936b2SEnji Cooper=item 0x00100 117*78e936b2SEnji Cooper 118*78e936b2SEnji CooperName: B<ARMV8_RNG> 119*78e936b2SEnji Cooper 120*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.5 hardware random number generation 121*78e936b2SEnji Cooperextensions on the processor. 122*78e936b2SEnji Cooper 123*78e936b2SEnji CooperEffect: Enables hardware random number generation on supported AArch64 124*78e936b2SEnji Cooperprocessors. 125*78e936b2SEnji Cooper 126*78e936b2SEnji Cooper=item 0x00200 127*78e936b2SEnji Cooper 128*78e936b2SEnji CooperName: B<ARMV8_SM3> 129*78e936b2SEnji Cooper 130*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.2 SM3 hardware-acceleration extensions 131*78e936b2SEnji Cooperon the processor. 132*78e936b2SEnji Cooper 133*78e936b2SEnji CooperEffect: Enables Armv8.2 SM3 hardware-accelerated implementations. 134*78e936b2SEnji Cooper 135*78e936b2SEnji Cooper=item 0x00400 136*78e936b2SEnji Cooper 137*78e936b2SEnji CooperName: B<ARMV8_SM4> 138*78e936b2SEnji Cooper 139*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.2 SM4 hardware-acceleration extensions 140*78e936b2SEnji Cooperon the processor. 141*78e936b2SEnji Cooper 142*78e936b2SEnji CooperEffect: Enables Armv8.2 SM4 hardware-accelerated implementations. 143*78e936b2SEnji Cooper 144*78e936b2SEnji Cooper=item 0x00800 145*78e936b2SEnji Cooper 146*78e936b2SEnji CooperName: B<ARMV8_SHA3> 147*78e936b2SEnji Cooper 148*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.2 SHA3 hardware-acceleration extensions 149*78e936b2SEnji Cooperon the processor. 150*78e936b2SEnji Cooper 151*78e936b2SEnji CooperEffect: Enables SHA3 hardware-accelerated implementations (see also 152*78e936b2SEnji CooperARMV8_HAVE_SHA3_AND_WORTH_USING). 153*78e936b2SEnji Cooper 154*78e936b2SEnji Cooper=item 0x01000 155*78e936b2SEnji Cooper 156*78e936b2SEnji CooperName: B<ARMV8_UNROLL8_EOR3> 157*78e936b2SEnji Cooper 158*78e936b2SEnji CooperMeaning: Indicates support for the Arm EOR3 instruction, which is a part of the 159*78e936b2SEnji CooperArmv8.2 SHA3 extensions, and enables 8x Loop unrolling in the AES-CTR 160*78e936b2SEnji Cooperimplementation. 161*78e936b2SEnji Cooper 162*78e936b2SEnji CooperEffect: Enables the 8x loop unrolling utilising EOR3 implementation of AES-CTR 163*78e936b2SEnji Cooperon platforms that support the SHA3 extension and have enough vector bandwidth. 164*78e936b2SEnji Cooper 165*78e936b2SEnji Cooper=item 0x02000 166*78e936b2SEnji Cooper 167*78e936b2SEnji CooperName: B<ARMV8_SVE> 168*78e936b2SEnji Cooper 169*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.2 SVE hardware extension on the 170*78e936b2SEnji Cooperprocessor. 171*78e936b2SEnji Cooper 172*78e936b2SEnji CooperEffect: Enables various Armv8.2 SVE implementations. 173*78e936b2SEnji Cooper 174*78e936b2SEnji Cooper=item 0x04000 175*78e936b2SEnji Cooper 176*78e936b2SEnji CooperName: B<ARMV9_SVE2> 177*78e936b2SEnji Cooper 178*78e936b2SEnji CooperMeaning: Indicates support for the Armv9.0 SVE2 hardware extension on the 179*78e936b2SEnji Cooperprocessor. 180*78e936b2SEnji Cooper 181*78e936b2SEnji CooperEffect: Enables various Armv9.0 SVE2 implementations. 182*78e936b2SEnji Cooper 183*78e936b2SEnji Cooper=item 0x08000 184*78e936b2SEnji Cooper 185*78e936b2SEnji CooperName: B<ARMV8_HAVE_SHA3_AND_WORTH_USING> 186*78e936b2SEnji Cooper 187*78e936b2SEnji CooperMeaning: Indicates support for the Armv8.2 SHA3 hardware-acceleration extensions 188*78e936b2SEnji Cooperon the processor, and that the hardware bandwidth is sufficient for it to be 189*78e936b2SEnji Cooperworth using. 190*78e936b2SEnji Cooper 191*78e936b2SEnji CooperEffect: On certain Apple platforms, although the SHA3 extension is supported, it 192*78e936b2SEnji Cooperis actually slower than other implementations. This flag disables the 193*78e936b2SEnji Cooperhardware-accelerated SHA3 implementations on these platforms. 194*78e936b2SEnji Cooper 195*78e936b2SEnji Cooper=item 0x10000 196*78e936b2SEnji Cooper 197*78e936b2SEnji CooperName: B<ARMV8_UNROLL12_EOR3> 198*78e936b2SEnji Cooper 199*78e936b2SEnji CooperMeaning: Indicates support for the Arm EOR3 instruction, which is a part of the 200*78e936b2SEnji CooperArmv8.2 SHA3 extensions, and enables 12x loop unrolling in the AES-CTR 201*78e936b2SEnji Cooperimplementation. 202*78e936b2SEnji Cooper 203*78e936b2SEnji CooperEffect: Enables the 12x loop unrolling utilising EOR3 implementation of AES-CTR 204*78e936b2SEnji Cooperon platforms that support the extension and have enough vector bandwidth. 205*78e936b2SEnji Cooper 206*78e936b2SEnji Cooper=item 0x20000 207*78e936b2SEnji Cooper 208*78e936b2SEnji CooperName: B<ARMV9_SVE2_POLY1305> 209*78e936b2SEnji Cooper 210*78e936b2SEnji CooperMeaning: Indicates support for the Armv9.0 SVE2 hardware extension, and enables 211*78e936b2SEnji Cooperits use in the Poly1305 implementation. 212*78e936b2SEnji Cooper 213*78e936b2SEnji CooperEffect: Enables the Armv9.0 SVE2 Poly1305 implementation if SVE2 is enabled, the 214*78e936b2SEnji Coopervector length is greater than 128 bits, and the vector length is a power of 2. 215*78e936b2SEnji Cooper 216*78e936b2SEnji Cooper=back 217*78e936b2SEnji Cooper 218*78e936b2SEnji Cooper=head1 RETURN VALUES 219*78e936b2SEnji Cooper 220*78e936b2SEnji CooperNot available. 221*78e936b2SEnji Cooper 222*78e936b2SEnji Cooper=head1 EXAMPLES 223*78e936b2SEnji Cooper 224*78e936b2SEnji CooperCheck currently detected capabilities: 225*78e936b2SEnji Cooper 226*78e936b2SEnji Cooper $ openssl info -cpusettings 227*78e936b2SEnji Cooper OPENSSL_armcap=0x987d 228*78e936b2SEnji Cooper 229*78e936b2SEnji CooperThe detected capabilities in the above example indicate that ARMV7_NEON, 230*78e936b2SEnji CooperARMV8_AES, ARMV8_SHA1, ARMV8_SHA256, ARMV8_PMULL, ARMV8_SHA512, ARMV8_SHA3, 231*78e936b2SEnji CooperARMV8_UNROLL8_EOR3, and ARMV8_HAVE_SHA3_AND_WORTH_USING are enabled. 232*78e936b2SEnji Cooper 233*78e936b2SEnji CooperDisable all instruction set extensions: 234*78e936b2SEnji Cooper 235*78e936b2SEnji Cooper export OPENSSL_armcap=0x00 236*78e936b2SEnji Cooper 237*78e936b2SEnji Cooper=head1 COPYRIGHT 238*78e936b2SEnji Cooper 239*78e936b2SEnji CooperCopyright 2026 The OpenSSL Project Authors. All Rights Reserved. 240*78e936b2SEnji Cooper 241*78e936b2SEnji CooperLicensed under the Apache License 2.0 (the "License"). You may not use 242*78e936b2SEnji Cooperthis file except in compliance with the License. You can obtain a copy 243*78e936b2SEnji Cooperin the file LICENSE in the source distribution or at 244*78e936b2SEnji CooperL<https://www.openssl.org/source/license.html>. 245*78e936b2SEnji Cooper 246*78e936b2SEnji Cooper=cut 247