]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/crypto/openssl/aarch64/arm64cpuid.S
Use a template assembly file to generate the embedded MFS.
[FreeBSD/FreeBSD.git] / sys / crypto / openssl / aarch64 / arm64cpuid.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from arm64cpuid.pl. */
3 #include "arm_arch.h"
4
5 .text
6 .arch   armv8-a+crypto
7
8 .align  5
9 .globl  _armv7_neon_probe
10 .type   _armv7_neon_probe,%function
11 _armv7_neon_probe:
12         orr     v15.16b, v15.16b, v15.16b
13         ret
14 .size   _armv7_neon_probe,.-_armv7_neon_probe
15
16 .globl  _armv7_tick
17 .type   _armv7_tick,%function
18 _armv7_tick:
19 #ifdef  __APPLE__
20         mrs     x0, CNTPCT_EL0
21 #else
22         mrs     x0, CNTVCT_EL0
23 #endif
24         ret
25 .size   _armv7_tick,.-_armv7_tick
26
27 .globl  _armv8_aes_probe
28 .type   _armv8_aes_probe,%function
29 _armv8_aes_probe:
30         aese    v0.16b, v0.16b
31         ret
32 .size   _armv8_aes_probe,.-_armv8_aes_probe
33
34 .globl  _armv8_sha1_probe
35 .type   _armv8_sha1_probe,%function
36 _armv8_sha1_probe:
37         sha1h   s0, s0
38         ret
39 .size   _armv8_sha1_probe,.-_armv8_sha1_probe
40
41 .globl  _armv8_sha256_probe
42 .type   _armv8_sha256_probe,%function
43 _armv8_sha256_probe:
44         sha256su0       v0.4s, v0.4s
45         ret
46 .size   _armv8_sha256_probe,.-_armv8_sha256_probe
47
48 .globl  _armv8_pmull_probe
49 .type   _armv8_pmull_probe,%function
50 _armv8_pmull_probe:
51         pmull   v0.1q, v0.1d, v0.1d
52         ret
53 .size   _armv8_pmull_probe,.-_armv8_pmull_probe
54
55 .globl  _armv8_sha512_probe
56 .type   _armv8_sha512_probe,%function
57 _armv8_sha512_probe:
58 .long   0xcec08000      // sha512su0    v0.2d,v0.2d
59         ret
60 .size   _armv8_sha512_probe,.-_armv8_sha512_probe
61
62 .globl  OPENSSL_cleanse
63 .type   OPENSSL_cleanse,%function
64 .align  5
65 OPENSSL_cleanse:
66         cbz     x1,.Lret        // len==0?
67         cmp     x1,#15
68         b.hi    .Lot            // len>15
69         nop
70 .Little:
71         strb    wzr,[x0],#1     // store byte-by-byte
72         subs    x1,x1,#1
73         b.ne    .Little
74 .Lret:  ret
75
76 .align  4
77 .Lot:   tst     x0,#7
78         b.eq    .Laligned       // inp is aligned
79         strb    wzr,[x0],#1     // store byte-by-byte
80         sub     x1,x1,#1
81         b       .Lot
82
83 .align  4
84 .Laligned:
85         str     xzr,[x0],#8     // store word-by-word
86         sub     x1,x1,#8
87         tst     x1,#-8
88         b.ne    .Laligned       // len>=8
89         cbnz    x1,.Little      // len!=0?
90         ret
91 .size   OPENSSL_cleanse,.-OPENSSL_cleanse
92
93 .globl  CRYPTO_memcmp
94 .type   CRYPTO_memcmp,%function
95 .align  4
96 CRYPTO_memcmp:
97         eor     w3,w3,w3
98         cbz     x2,.Lno_data    // len==0?
99         cmp     x2,#16
100         b.ne    .Loop_cmp
101         ldp     x8,x9,[x0]
102         ldp     x10,x11,[x1]
103         eor     x8,x8,x10
104         eor     x9,x9,x11
105         orr     x8,x8,x9
106         mov     x0,#1
107         cmp     x8,#0
108         csel    x0,xzr,x0,eq
109         ret
110
111 .align  4
112 .Loop_cmp:
113         ldrb    w4,[x0],#1
114         ldrb    w5,[x1],#1
115         eor     w4,w4,w5
116         orr     w3,w3,w4
117         subs    x2,x2,#1
118         b.ne    .Loop_cmp
119
120 .Lno_data:
121         neg     w0,w3
122         lsr     w0,w0,#31
123         ret
124 .size   CRYPTO_memcmp,.-CRYPTO_memcmp