← Documents Documentation/arch/arm64/elf_hwcaps.rst GitHub 원문 ↗

Linux 6.18.37 · Architecture

ARM64 ELF hwcaps

Auxiliary vector의 AT_HWCAP·AT_HWCAP2·AT_HWCAP3를 검사하는 법과 116개 arm64 hwcap의 ID-register 조건을 설명합니다.

Source pathDocumentation/arch/arm64/elf_hwcaps.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

elf_hwcaps.rst:1-452

Hwcap은 EL0가 직접 발견할 수 없는 CPU·kernel 기능을 auxiliary vector flag로 전달합니다. Software는 기능을 사용하기 전에 반드시 해당 flag를 확인해야 하며, instruction 실행 후 `SIGILL` 여부로 probe해서는 안 됩니다.

Userspace hwcap 사용 순서
`getauxval(AT_HWCAP*)`관련 `HWCAP*_*` maskBit 설정 확인지원 시 기능 사용미지원 시 fallback

기능 사용 전에 auxiliary vector를 읽고 bit를 검증합니다.

Arm64 auxiliary-vector feature 집합
Entry항목 수주요 범위
`AT_HWCAP`48FP·crypto·SVE·GCS·SME
`AT_HWCAP2`65SVE2·MTE·SME2·MOPS·FP8
`AT_HWCAP3`3MTE_FAR·MTE_STORE_ONLY·LSFE

이번 원문에 정의된 항목 수를 기준으로 정리합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. _elf_hwcaps_index:
2
3 ================
4 ARM64 ELF hwcaps
5 ================
6
7 This document describes the usage and semantics of the arm64 ELF hwcaps.
8
9
10 1. Introduction
11 ---------------
12
13 Some hardware or software features are only available on some CPU
14 implementations, and/or with certain kernel configurations, but have no
15 architected discovery mechanism available to userspace code at EL0. The
16 kernel exposes the presence of these features to userspace through a set
17 of flags called hwcaps, exposed in the auxiliary vector.
18
19 Userspace software can test for features by acquiring the AT_HWCAP,
20 AT_HWCAP2 or AT_HWCAP3 entry of the auxiliary vector, and testing
21 whether the relevant flags are set, e.g.::
22
23 bool floating_point_is_present(void)
24 {
25 unsigned long hwcaps = getauxval(AT_HWCAP);
26 if (hwcaps & HWCAP_FP)
27 return true;
28
29 return false;
30 }
31
32 Where software relies on a feature described by a hwcap, it should check
33 the relevant hwcap flag to verify that the feature is present before
34 attempting to make use of the feature.
35
36 Features cannot be probed reliably through other means. When a feature
37 is not available, attempting to use it may result in unpredictable
38 behaviour, and is not guaranteed to result in any reliable indication
39 that the feature is unavailable, such as a SIGILL.
40
41
42 2. Interpretation of hwcaps
43 ---------------------------
44
45 The majority of hwcaps are intended to indicate the presence of features
46 which are described by architected ID registers inaccessible to
47 userspace code at EL0. These hwcaps are defined in terms of ID register
48 fields, and should be interpreted with reference to the definition of
49 these fields in the ARM Architecture Reference Manual (ARM ARM).
50
51 Such hwcaps are described below in the form::
52
53 Functionality implied by idreg.field == val.
54
55 Such hwcaps indicate the availability of functionality that the ARM ARM
56 defines as being present when idreg.field has value val, but do not
57 indicate that idreg.field is precisely equal to val, nor do they
58 indicate the absence of functionality implied by other values of
59 idreg.field.
60
61 Other hwcaps may indicate the presence of features which cannot be
62 described by ID registers alone. These may be described without
63 reference to ID registers, and may refer to other documentation.
64
65
66 3. The hwcaps exposed in AT_HWCAP
67 ---------------------------------
68
69 HWCAP_FP
70 Functionality implied by ID_AA64PFR0_EL1.FP == 0b0000.
71
72 HWCAP_ASIMD
73 Functionality implied by ID_AA64PFR0_EL1.AdvSIMD == 0b0000.
74
75 HWCAP_EVTSTRM
76 The generic timer is configured to generate events at a frequency of
77 approximately 10KHz.
78
79 HWCAP_AES
80 Functionality implied by ID_AA64ISAR0_EL1.AES == 0b0001.
81
82 HWCAP_PMULL
83 Functionality implied by ID_AA64ISAR0_EL1.AES == 0b0010.
84
85 HWCAP_SHA1
86 Functionality implied by ID_AA64ISAR0_EL1.SHA1 == 0b0001.
87
88 HWCAP_SHA2
89 Functionality implied by ID_AA64ISAR0_EL1.SHA2 == 0b0001.
90
91 HWCAP_CRC32
92 Functionality implied by ID_AA64ISAR0_EL1.CRC32 == 0b0001.
93
94 HWCAP_ATOMICS
95 Functionality implied by ID_AA64ISAR0_EL1.Atomic == 0b0010.
96
97 HWCAP_FPHP
98 Functionality implied by ID_AA64PFR0_EL1.FP == 0b0001.
99
100 HWCAP_ASIMDHP
101 Functionality implied by ID_AA64PFR0_EL1.AdvSIMD == 0b0001.
102
103 HWCAP_CPUID
104 EL0 access to certain ID registers is available, to the extent
105 described by Documentation/arch/arm64/cpu-feature-registers.rst.
106
107 These ID registers may imply the availability of features.
108
109 HWCAP_ASIMDRDM
110 Functionality implied by ID_AA64ISAR0_EL1.RDM == 0b0001.
111
112 HWCAP_JSCVT
113 Functionality implied by ID_AA64ISAR1_EL1.JSCVT == 0b0001.
114
115 HWCAP_FCMA
116 Functionality implied by ID_AA64ISAR1_EL1.FCMA == 0b0001.
117
118 HWCAP_LRCPC
119 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0001.
120
121 HWCAP_DCPOP
122 Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0001.
123
124 HWCAP_SHA3
125 Functionality implied by ID_AA64ISAR0_EL1.SHA3 == 0b0001.
126
127 HWCAP_SM3
128 Functionality implied by ID_AA64ISAR0_EL1.SM3 == 0b0001.
129
130 HWCAP_SM4
131 Functionality implied by ID_AA64ISAR0_EL1.SM4 == 0b0001.
132
133 HWCAP_ASIMDDP
134 Functionality implied by ID_AA64ISAR0_EL1.DP == 0b0001.
135
136 HWCAP_SHA512
137 Functionality implied by ID_AA64ISAR0_EL1.SHA2 == 0b0010.
138
139 HWCAP_SVE
140 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001.
141
142 HWCAP_ASIMDFHM
143 Functionality implied by ID_AA64ISAR0_EL1.FHM == 0b0001.
144
145 HWCAP_DIT
146 Functionality implied by ID_AA64PFR0_EL1.DIT == 0b0001.
147
148 HWCAP_USCAT
149 Functionality implied by ID_AA64MMFR2_EL1.AT == 0b0001.
150
151 HWCAP_ILRCPC
152 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0010.
153
154 HWCAP_FLAGM
155 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0001.
156
157 HWCAP_SSBS
158 Functionality implied by ID_AA64PFR1_EL1.SSBS == 0b0010.
159
160 HWCAP_SB
161 Functionality implied by ID_AA64ISAR1_EL1.SB == 0b0001.
162
163 HWCAP_PACA
164 Functionality implied by ID_AA64ISAR1_EL1.APA == 0b0001 or
165 ID_AA64ISAR1_EL1.API == 0b0001, as described by
166 Documentation/arch/arm64/pointer-authentication.rst.
167
168 HWCAP_PACG
169 Functionality implied by ID_AA64ISAR1_EL1.GPA == 0b0001 or
170 ID_AA64ISAR1_EL1.GPI == 0b0001, as described by
171 Documentation/arch/arm64/pointer-authentication.rst.
172
173 HWCAP_GCS
174 Functionality implied by ID_AA64PFR1_EL1.GCS == 0b1, as
175 described by Documentation/arch/arm64/gcs.rst.
176
177 HWCAP_CMPBR
178 Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0010.
179
180 HWCAP_FPRCVT
181 Functionality implied by ID_AA64ISAR3_EL1.FPRCVT == 0b0001.
182
183 HWCAP_F8MM8
184 Functionality implied by ID_AA64FPFR0_EL1.F8MM8 == 0b0001.
185
186 HWCAP_F8MM4
187 Functionality implied by ID_AA64FPFR0_EL1.F8MM4 == 0b0001.
188
189 HWCAP_SVE_F16MM
190 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
191 ID_AA64ZFR0_EL1.F16MM == 0b0001.
192
193 HWCAP_SVE_ELTPERM
194 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
195 ID_AA64ZFR0_EL1.ELTPERM == 0b0001.
196
197 HWCAP_SVE_AES2
198 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
199 ID_AA64ZFR0_EL1.AES == 0b0011.
200
201 HWCAP_SVE_BFSCALE
202 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
203 ID_AA64ZFR0_EL1.B16B16 == 0b0010.
204
205 HWCAP_SVE2P2
206 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
207 ID_AA64ZFR0_EL1.SVEver == 0b0011.
208
209 HWCAP_SME2P2
210 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0011.
211
212 HWCAP_SME_SBITPERM
213 Functionality implied by ID_AA64SMFR0_EL1.SBitPerm == 0b1.
214
215 HWCAP_SME_AES
216 Functionality implied by ID_AA64SMFR0_EL1.AES == 0b1.
217
218 HWCAP_SME_SFEXPA
219 Functionality implied by ID_AA64SMFR0_EL1.SFEXPA == 0b1.
220
221 HWCAP_SME_STMOP
222 Functionality implied by ID_AA64SMFR0_EL1.STMOP == 0b1.
223
224 HWCAP_SME_SMOP4
225 Functionality implied by ID_AA64SMFR0_EL1.SMOP4 == 0b1.
226
227 HWCAP2_DCPODP
228 Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0010.
229
230 HWCAP2_SVE2
231 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
232 ID_AA64ZFR0_EL1.SVEver == 0b0001.
233
234 HWCAP2_SVEAES
235 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
236 ID_AA64ZFR0_EL1.AES == 0b0001.
237
238 HWCAP2_SVEPMULL
239 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
240 ID_AA64ZFR0_EL1.AES == 0b0010.
241
242 HWCAP2_SVEBITPERM
243 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
244 ID_AA64ZFR0_EL1.BitPerm == 0b0001.
245
246 HWCAP2_SVESHA3
247 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
248 ID_AA64ZFR0_EL1.SHA3 == 0b0001.
249
250 HWCAP2_SVESM4
251 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
252 ID_AA64ZFR0_EL1.SM4 == 0b0001.
253
254 HWCAP2_FLAGM2
255 Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0010.
256
257 HWCAP2_FRINT
258 Functionality implied by ID_AA64ISAR1_EL1.FRINTTS == 0b0001.
259
260 HWCAP2_SVEI8MM
261 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
262 ID_AA64ZFR0_EL1.I8MM == 0b0001.
263
264 HWCAP2_SVEF32MM
265 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
266 ID_AA64ZFR0_EL1.F32MM == 0b0001.
267
268 HWCAP2_SVEF64MM
269 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
270 ID_AA64ZFR0_EL1.F64MM == 0b0001.
271
272 HWCAP2_SVEBF16
273 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
274 ID_AA64ZFR0_EL1.BF16 == 0b0001.
275
276 HWCAP2_I8MM
277 Functionality implied by ID_AA64ISAR1_EL1.I8MM == 0b0001.
278
279 HWCAP2_BF16
280 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0001.
281
282 HWCAP2_DGH
283 Functionality implied by ID_AA64ISAR1_EL1.DGH == 0b0001.
284
285 HWCAP2_RNG
286 Functionality implied by ID_AA64ISAR0_EL1.RNDR == 0b0001.
287
288 HWCAP2_BTI
289 Functionality implied by ID_AA64PFR1_EL1.BT == 0b0001.
290
291 HWCAP2_MTE
292 Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0010, as described
293 by Documentation/arch/arm64/memory-tagging-extension.rst.
294
295 HWCAP2_ECV
296 Functionality implied by ID_AA64MMFR0_EL1.ECV == 0b0001.
297
298 HWCAP2_AFP
299 Functionality implied by ID_AA64MMFR1_EL1.AFP == 0b0001.
300
301 HWCAP2_RPRES
302 Functionality implied by ID_AA64ISAR2_EL1.RPRES == 0b0001.
303
304 HWCAP2_MTE3
305 Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0011, as described
306 by Documentation/arch/arm64/memory-tagging-extension.rst.
307
308 HWCAP2_SME
309 Functionality implied by ID_AA64PFR1_EL1.SME == 0b0001, as described
310 by Documentation/arch/arm64/sme.rst.
311
312 HWCAP2_SME_I16I64
313 Functionality implied by ID_AA64SMFR0_EL1.I16I64 == 0b1111.
314
315 HWCAP2_SME_F64F64
316 Functionality implied by ID_AA64SMFR0_EL1.F64F64 == 0b1.
317
318 HWCAP2_SME_I8I32
319 Functionality implied by ID_AA64SMFR0_EL1.I8I32 == 0b1111.
320
321 HWCAP2_SME_F16F32
322 Functionality implied by ID_AA64SMFR0_EL1.F16F32 == 0b1.
323
324 HWCAP2_SME_B16F32
325 Functionality implied by ID_AA64SMFR0_EL1.B16F32 == 0b1.
326
327 HWCAP2_SME_F32F32
328 Functionality implied by ID_AA64SMFR0_EL1.F32F32 == 0b1.
329
330 HWCAP2_SME_FA64
331 Functionality implied by ID_AA64SMFR0_EL1.FA64 == 0b1.
332
333 HWCAP2_WFXT
334 Functionality implied by ID_AA64ISAR2_EL1.WFXT == 0b0010.
335
336 HWCAP2_EBF16
337 Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0010.
338
339 HWCAP2_SVE_EBF16
340 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
341 ID_AA64ZFR0_EL1.BF16 == 0b0010.
342
343 HWCAP2_CSSC
344 Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0001.
345
346 HWCAP2_RPRFM
347 Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001.
348
349 HWCAP2_SVE2P1
350 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
351 ID_AA64ZFR0_EL1.SVEver == 0b0010.
352
353 HWCAP2_SME2
354 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0001.
355
356 HWCAP2_SME2P1
357 Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0010.
358
359 HWCAP2_SMEI16I32
360 Functionality implied by ID_AA64SMFR0_EL1.I16I32 == 0b0101
361
362 HWCAP2_SMEBI32I32
363 Functionality implied by ID_AA64SMFR0_EL1.BI32I32 == 0b1
364
365 HWCAP2_SMEB16B16
366 Functionality implied by ID_AA64SMFR0_EL1.B16B16 == 0b1
367
368 HWCAP2_SMEF16F16
369 Functionality implied by ID_AA64SMFR0_EL1.F16F16 == 0b1
370
371 HWCAP2_MOPS
372 Functionality implied by ID_AA64ISAR2_EL1.MOPS == 0b0001.
373
374 HWCAP2_HBC
375 Functionality implied by ID_AA64ISAR2_EL1.BC == 0b0001.
376
377 HWCAP2_SVE_B16B16
378 Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
379 ID_AA64ZFR0_EL1.B16B16 == 0b0001.
380
381 HWCAP2_LRCPC3
382 Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0011.
383
384 HWCAP2_LSE128
385 Functionality implied by ID_AA64ISAR0_EL1.Atomic == 0b0011.
386
387 HWCAP2_FPMR
388 Functionality implied by ID_AA64PFR2_EL1.FMR == 0b0001.
389
390 HWCAP2_LUT
391 Functionality implied by ID_AA64ISAR2_EL1.LUT == 0b0001.
392
393 HWCAP2_FAMINMAX
394 Functionality implied by ID_AA64ISAR3_EL1.FAMINMAX == 0b0001.
395
396 HWCAP2_F8CVT
397 Functionality implied by ID_AA64FPFR0_EL1.F8CVT == 0b1.
398
399 HWCAP2_F8FMA
400 Functionality implied by ID_AA64FPFR0_EL1.F8FMA == 0b1.
401
402 HWCAP2_F8DP4
403 Functionality implied by ID_AA64FPFR0_EL1.F8DP4 == 0b1.
404
405 HWCAP2_F8DP2
406 Functionality implied by ID_AA64FPFR0_EL1.F8DP2 == 0b1.
407
408 HWCAP2_F8E4M3
409 Functionality implied by ID_AA64FPFR0_EL1.F8E4M3 == 0b1.
410
411 HWCAP2_F8E5M2
412 Functionality implied by ID_AA64FPFR0_EL1.F8E5M2 == 0b1.
413
414 HWCAP2_SME_LUTV2
415 Functionality implied by ID_AA64SMFR0_EL1.LUTv2 == 0b1.
416
417 HWCAP2_SME_F8F16
418 Functionality implied by ID_AA64SMFR0_EL1.F8F16 == 0b1.
419
420 HWCAP2_SME_F8F32
421 Functionality implied by ID_AA64SMFR0_EL1.F8F32 == 0b1.
422
423 HWCAP2_SME_SF8FMA
424 Functionality implied by ID_AA64SMFR0_EL1.SF8FMA == 0b1.
425
426 HWCAP2_SME_SF8DP4
427 Functionality implied by ID_AA64SMFR0_EL1.SF8DP4 == 0b1.
428
429 HWCAP2_SME_SF8DP2
430 Functionality implied by ID_AA64SMFR0_EL1.SF8DP2 == 0b1.
431
432 HWCAP2_SME_SF8DP4
433 Functionality implied by ID_AA64SMFR0_EL1.SF8DP4 == 0b1.
434
435 HWCAP2_POE
436 Functionality implied by ID_AA64MMFR3_EL1.S1POE == 0b0001.
437
438 HWCAP3_MTE_FAR
439 Functionality implied by ID_AA64PFR2_EL1.MTEFAR == 0b0001.
440
441 HWCAP3_MTE_STORE_ONLY
442 Functionality implied by ID_AA64PFR2_EL1.MTESTOREONLY == 0b0001.
443
444 HWCAP3_LSFE
445 Functionality implied by ID_AA64ISAR3_EL1.LSFE == 0b0001
446
447
448 4. Unused AT_HWCAP bits
449 -----------------------
450
451 For interoperation with userspace, the kernel guarantees that bits 62
452 and 63 of AT_HWCAP will always be returned as 0.
453

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

문서 범위

1-9

이 문서는 `ARM64 ELF hwcaps`의 사용법과 의미를 설명하며 Sphinx anchor는 `_elf_hwcaps_index`입니다.

Auxiliary vector에서 기능 확인

10-41

일부 hardware 또는 software 기능은 특정 CPU 구현이나 kernel configuration에서만 제공되지만, EL0 userspace code가 사용할 수 있는 architecture 표준 발견 방법이 없습니다. Kernel은 이 기능들의 존재를 auxiliary vector에 담긴 `hwcaps` flag 집합으로 공개합니다.

Userspace는 auxiliary vector의 `AT_HWCAP`, `AT_HWCAP2`, `AT_HWCAP3` entry를 얻고 관련 flag가 설정되었는지 검사할 수 있습니다. 원문의 예제는 `getauxval(AT_HWCAP)` 결과에 `HWCAP_FP`가 있으면 floating-point 기능이 있다고 반환합니다.

bool floating_point_is_present(void)
{
        unsigned long hwcaps = getauxval(AT_HWCAP);
        if (hwcaps & HWCAP_FP)
                return true;

        return false;
}

Software가 hwcap으로 표현된 기능에 의존한다면 사용하기 전에 해당 flag를 검사해야 합니다. 다른 방법으로 기능을 probe하는 것은 신뢰할 수 없습니다. 미지원 기능을 실행해도 결과는 예측할 수 없으며, `SIGILL`처럼 기능 부재를 확실히 알려 주는 신호가 반드시 발생하는 것도 아닙니다.

hwcap 조건식 해석

42-65

대부분의 hwcap은 EL0에서 직접 읽을 수 없는 architecture ID register가 설명하는 기능의 존재를 뜻합니다. 각 hwcap은 ID register field로 정의되므로 ARM Architecture Reference Manual, 즉 ARM ARM의 field 정의와 함께 해석해야 합니다.

원문은 조건을 다음 형식으로 표기합니다.

Functionality implied by idreg.field == val.

이 표기는 `idreg.field`가 `val`일 때 ARM ARM이 존재한다고 정의한 기능을 사용할 수 있다는 뜻입니다. Field가 정확히 `val`과 같다는 의미는 아니며, 같은 field의 다른 값이 뜻하는 기능이 없다고 단정하는 것도 아닙니다.

ID register만으로 설명할 수 없는 기능을 나타내는 hwcap도 있습니다. 그런 항목은 ID register 조건 대신 별도 문서나 동작 설명을 사용합니다.

AT_HWCAP 기본 기능

66-176

다음 표는 `AT_HWCAP`의 기본 항목을 원문 순서대로 보존합니다. 조건식의 register, field, binary 값은 ABI 식별자이므로 번역하지 않습니다.

hwcap가용성 의미
`HWCAP_FP`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.FP == 0b0000.
`HWCAP_ASIMD`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.AdvSIMD == 0b0000.
`HWCAP_EVTSTRM`Generic timer가 약 10KHz 주파수로 event를 생성하도록 구성되어 있습니다.
`HWCAP_AES`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.AES == 0b0001.
`HWCAP_PMULL`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.AES == 0b0010.
`HWCAP_SHA1`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.SHA1 == 0b0001.
`HWCAP_SHA2`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.SHA2 == 0b0001.
`HWCAP_CRC32`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.CRC32 == 0b0001.
`HWCAP_ATOMICS`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.Atomic == 0b0010.
`HWCAP_FPHP`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.FP == 0b0001.
`HWCAP_ASIMDHP`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.AdvSIMD == 0b0001.
`HWCAP_CPUID`Documentation/arch/arm64/cpu-feature-registers.rst가 규정하는 범위에서 EL0가 일부 ID register에 접근할 수 있습니다. 이 ID register들은 추가 기능의 가용성을 나타낼 수 있습니다.
`HWCAP_ASIMDRDM`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.RDM == 0b0001.
`HWCAP_JSCVT`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.JSCVT == 0b0001.
`HWCAP_FCMA`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.FCMA == 0b0001.
`HWCAP_LRCPC`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.LRCPC == 0b0001.
`HWCAP_DCPOP`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.DPB == 0b0001.
`HWCAP_SHA3`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.SHA3 == 0b0001.
`HWCAP_SM3`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.SM3 == 0b0001.
`HWCAP_SM4`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.SM4 == 0b0001.
`HWCAP_ASIMDDP`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.DP == 0b0001.
`HWCAP_SHA512`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.SHA2 == 0b0010.
`HWCAP_SVE`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001.
`HWCAP_ASIMDFHM`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.FHM == 0b0001.
`HWCAP_DIT`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.DIT == 0b0001.
`HWCAP_USCAT`다음 조건이 의미하는 기능: ID_AA64MMFR2_EL1.AT == 0b0001.
`HWCAP_ILRCPC`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.LRCPC == 0b0010.
`HWCAP_FLAGM`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.TS == 0b0001.
`HWCAP_SSBS`다음 조건이 의미하는 기능: ID_AA64PFR1_EL1.SSBS == 0b0010.
`HWCAP_SB`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.SB == 0b0001.
`HWCAP_PACA`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.APA == 0b0001 또는 ID_AA64ISAR1_EL1.API == 0b0001; Documentation/arch/arm64/pointer-authentication.rst에 설명되어 있음.
`HWCAP_PACG`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.GPA == 0b0001 또는 ID_AA64ISAR1_EL1.GPI == 0b0001; Documentation/arch/arm64/pointer-authentication.rst에 설명되어 있음.
`HWCAP_GCS`다음 조건이 의미하는 기능: ID_AA64PFR1_EL1.GCS == 0b1; Documentation/arch/arm64/gcs.rst에 설명되어 있음.

AT_HWCAP 확장 기능

177-225

이 구간은 compare-and-branch, floating-point 8-bit, SVE 및 SME 확장 기능에 대한 `AT_HWCAP` flag를 설명합니다.

hwcap가용성 의미
`HWCAP_CMPBR`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.CSSC == 0b0010.
`HWCAP_FPRCVT`다음 조건이 의미하는 기능: ID_AA64ISAR3_EL1.FPRCVT == 0b0001.
`HWCAP_F8MM8`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8MM8 == 0b0001.
`HWCAP_F8MM4`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8MM4 == 0b0001.
`HWCAP_SVE_F16MM`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.F16MM == 0b0001.
`HWCAP_SVE_ELTPERM`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.ELTPERM == 0b0001.
`HWCAP_SVE_AES2`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.AES == 0b0011.
`HWCAP_SVE_BFSCALE`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.B16B16 == 0b0010.
`HWCAP_SVE2P2`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.SVEver == 0b0011.
`HWCAP_SME2P2`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SMEver == 0b0011.
`HWCAP_SME_SBITPERM`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SBitPerm == 0b1.
`HWCAP_SME_AES`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.AES == 0b1.
`HWCAP_SME_SFEXPA`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SFEXPA == 0b1.
`HWCAP_SME_STMOP`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.STMOP == 0b1.
`HWCAP_SME_SMOP4`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SMOP4 == 0b1.

AT_HWCAP2 기능 1

226-342

`AT_HWCAP2`의 첫 구간은 SVE2, crypto, matrix multiply, MTE, SME와 관련된 조건을 포함합니다.

hwcap가용성 의미
`HWCAP2_DCPODP`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.DPB == 0b0010.
`HWCAP2_SVE2`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.SVEver == 0b0001.
`HWCAP2_SVEAES`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.AES == 0b0001.
`HWCAP2_SVEPMULL`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.AES == 0b0010.
`HWCAP2_SVEBITPERM`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.BitPerm == 0b0001.
`HWCAP2_SVESHA3`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.SHA3 == 0b0001.
`HWCAP2_SVESM4`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.SM4 == 0b0001.
`HWCAP2_FLAGM2`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.TS == 0b0010.
`HWCAP2_FRINT`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.FRINTTS == 0b0001.
`HWCAP2_SVEI8MM`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.I8MM == 0b0001.
`HWCAP2_SVEF32MM`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.F32MM == 0b0001.
`HWCAP2_SVEF64MM`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.F64MM == 0b0001.
`HWCAP2_SVEBF16`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.BF16 == 0b0001.
`HWCAP2_I8MM`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.I8MM == 0b0001.
`HWCAP2_BF16`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.BF16 == 0b0001.
`HWCAP2_DGH`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.DGH == 0b0001.
`HWCAP2_RNG`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.RNDR == 0b0001.
`HWCAP2_BTI`다음 조건이 의미하는 기능: ID_AA64PFR1_EL1.BT == 0b0001.
`HWCAP2_MTE`다음 조건이 의미하는 기능: ID_AA64PFR1_EL1.MTE == 0b0010; Documentation/arch/arm64/memory-tagging-extension.rst에 설명되어 있음.
`HWCAP2_ECV`다음 조건이 의미하는 기능: ID_AA64MMFR0_EL1.ECV == 0b0001.
`HWCAP2_AFP`다음 조건이 의미하는 기능: ID_AA64MMFR1_EL1.AFP == 0b0001.
`HWCAP2_RPRES`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.RPRES == 0b0001.
`HWCAP2_MTE3`다음 조건이 의미하는 기능: ID_AA64PFR1_EL1.MTE == 0b0011; Documentation/arch/arm64/memory-tagging-extension.rst에 설명되어 있음.
`HWCAP2_SME`다음 조건이 의미하는 기능: ID_AA64PFR1_EL1.SME == 0b0001; Documentation/arch/arm64/sme.rst에 설명되어 있음.
`HWCAP2_SME_I16I64`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.I16I64 == 0b1111.
`HWCAP2_SME_F64F64`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.F64F64 == 0b1.
`HWCAP2_SME_I8I32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.I8I32 == 0b1111.
`HWCAP2_SME_F16F32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.F16F32 == 0b1.
`HWCAP2_SME_B16F32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.B16F32 == 0b1.
`HWCAP2_SME_F32F32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.F32F32 == 0b1.
`HWCAP2_SME_FA64`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.FA64 == 0b1.
`HWCAP2_WFXT`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.WFXT == 0b0010.
`HWCAP2_EBF16`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.BF16 == 0b0010.
`HWCAP2_SVE_EBF16`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.BF16 == 0b0010.

AT_HWCAP2 기능 2

343-436

`AT_HWCAP2`의 나머지 구간은 CSSC, SME2, MOPS, LSE128, FP8, LUT, POE 등의 조건을 원문 순서대로 나열합니다. 원문에 두 번 등장하는 `HWCAP2_SME_SF8DP4`도 줄 위치 보존을 위해 두 행 모두 유지합니다.

hwcap가용성 의미
`HWCAP2_CSSC`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.CSSC == 0b0001.
`HWCAP2_RPRFM`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.RPRFM == 0b0001.
`HWCAP2_SVE2P1`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.SVEver == 0b0010.
`HWCAP2_SME2`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SMEver == 0b0001.
`HWCAP2_SME2P1`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SMEver == 0b0010.
`HWCAP2_SMEI16I32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.I16I32 == 0b0101.
`HWCAP2_SMEBI32I32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.BI32I32 == 0b1.
`HWCAP2_SMEB16B16`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.B16B16 == 0b1.
`HWCAP2_SMEF16F16`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.F16F16 == 0b1.
`HWCAP2_MOPS`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.MOPS == 0b0001.
`HWCAP2_HBC`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.BC == 0b0001.
`HWCAP2_SVE_B16B16`다음 조건이 의미하는 기능: ID_AA64PFR0_EL1.SVE == 0b0001 그리고 ID_AA64ZFR0_EL1.B16B16 == 0b0001.
`HWCAP2_LRCPC3`다음 조건이 의미하는 기능: ID_AA64ISAR1_EL1.LRCPC == 0b0011.
`HWCAP2_LSE128`다음 조건이 의미하는 기능: ID_AA64ISAR0_EL1.Atomic == 0b0011.
`HWCAP2_FPMR`다음 조건이 의미하는 기능: ID_AA64PFR2_EL1.FMR == 0b0001.
`HWCAP2_LUT`다음 조건이 의미하는 기능: ID_AA64ISAR2_EL1.LUT == 0b0001.
`HWCAP2_FAMINMAX`다음 조건이 의미하는 기능: ID_AA64ISAR3_EL1.FAMINMAX == 0b0001.
`HWCAP2_F8CVT`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8CVT == 0b1.
`HWCAP2_F8FMA`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8FMA == 0b1.
`HWCAP2_F8DP4`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8DP4 == 0b1.
`HWCAP2_F8DP2`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8DP2 == 0b1.
`HWCAP2_F8E4M3`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8E4M3 == 0b1.
`HWCAP2_F8E5M2`다음 조건이 의미하는 기능: ID_AA64FPFR0_EL1.F8E5M2 == 0b1.
`HWCAP2_SME_LUTV2`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.LUTv2 == 0b1.
`HWCAP2_SME_F8F16`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.F8F16 == 0b1.
`HWCAP2_SME_F8F32`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.F8F32 == 0b1.
`HWCAP2_SME_SF8FMA`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SF8FMA == 0b1.
`HWCAP2_SME_SF8DP4`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SF8DP4 == 0b1.
`HWCAP2_SME_SF8DP2`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SF8DP2 == 0b1.
`HWCAP2_SME_SF8DP4`다음 조건이 의미하는 기능: ID_AA64SMFR0_EL1.SF8DP4 == 0b1.
`HWCAP2_POE`다음 조건이 의미하는 기능: ID_AA64MMFR3_EL1.S1POE == 0b0001.

AT_HWCAP3와 미사용 bit

437-452

`AT_HWCAP3`에는 MTE fault address, store-only MTE, LSFE 조건이 정의되어 있습니다.

hwcap가용성 의미
`HWCAP3_MTE_FAR`다음 조건이 의미하는 기능: ID_AA64PFR2_EL1.MTEFAR == 0b0001.
`HWCAP3_MTE_STORE_ONLY`다음 조건이 의미하는 기능: ID_AA64PFR2_EL1.MTESTOREONLY == 0b0001.
`HWCAP3_LSFE`다음 조건이 의미하는 기능: ID_AA64ISAR3_EL1.LSFE == 0b0001.

Userspace와의 상호 운용을 위해 kernel은 `AT_HWCAP`의 bit 62와 63을 항상 `0`으로 반환한다고 보장합니다.