Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
z
Classes
Class List
Class Hierarchy
Class Members
All
:
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
w
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
Properties
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Related Functions
:
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
z
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
grpc
third_party
boringssl-with-bazel
src
crypto
cpu-aarch64-linux.c
Go to the documentation of this file.
1
/* Copyright (c) 2016, Google Inc.
2
*
3
* Permission to use, copy, modify, and/or distribute this software for any
4
* purpose with or without fee is hereby granted, provided that the above
5
* copyright notice and this permission notice appear in all copies.
6
*
7
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
15
#include <
openssl/cpu.h
>
16
17
#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \
18
!defined(OPENSSL_STATIC_ARMCAP)
19
20
#include <sys/auxv.h>
21
22
#include <
openssl/arm_arch.h
>
23
24
#include "internal.h"
25
26
27
extern
uint32_t
OPENSSL_armcap_P;
28
29
void
OPENSSL_cpuid_setup
(
void
) {
30
unsigned
long
hwcap = getauxval(
AT_HWCAP
);
31
32
// See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
33
// these values.
34
static
const
unsigned
long
kNEON = 1 << 1;
35
static
const
unsigned
long
kAES = 1 << 3;
36
static
const
unsigned
long
kPMULL = 1 << 4;
37
static
const
unsigned
long
kSHA1 = 1 << 5;
38
static
const
unsigned
long
kSHA256 = 1 << 6;
39
40
if
((hwcap & kNEON) == 0) {
41
// Matching OpenSSL, if NEON is missing, don't report other features
42
// either.
43
return
;
44
}
45
46
OPENSSL_armcap_P |=
ARMV7_NEON
;
47
48
if
(hwcap & kAES) {
49
OPENSSL_armcap_P |=
ARMV8_AES
;
50
}
51
if
(hwcap & kPMULL) {
52
OPENSSL_armcap_P |=
ARMV8_PMULL
;
53
}
54
if
(hwcap & kSHA1) {
55
OPENSSL_armcap_P |=
ARMV8_SHA1
;
56
}
57
if
(hwcap & kSHA256) {
58
OPENSSL_armcap_P |=
ARMV8_SHA256
;
59
}
60
}
61
62
#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
OPENSSL_cpuid_setup
#define OPENSSL_cpuid_setup
Definition:
boringssl_prefix_symbols.h:1868
ARMV8_AES
#define ARMV8_AES
Definition:
arm_arch.h:109
uint32_t
unsigned int uint32_t
Definition:
stdint-msvc2008.h:80
ARMV7_NEON
#define ARMV7_NEON
Definition:
arm_arch.h:106
ARMV8_SHA256
#define ARMV8_SHA256
Definition:
arm_arch.h:115
AT_HWCAP
#define AT_HWCAP
Definition:
elf_common.h:925
arm_arch.h
ARMV8_PMULL
#define ARMV8_PMULL
Definition:
arm_arch.h:118
cpu.h
ARMV8_SHA1
#define ARMV8_SHA1
Definition:
arm_arch.h:112
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:59