xref: /freebsd/crypto/openssl/doc/man3/OPENSSL_armcap.pod (revision 78e936b2d0b5e6554425009199be31e76bc67c10)
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