]>
Commit | Line | Data |
---|---|---|
e0a65194 | 1 | #! /usr/bin/env perl |
33388b44 | 2 | # Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved. |
e0a65194 | 3 | # |
0e9725bc | 4 | # Licensed under the Apache License 2.0 (the "License"). You may not use |
e0a65194 RS |
5 | # this file except in compliance with the License. You can obtain a copy |
6 | # in the file LICENSE in the source distribution or at | |
7 | # https://www.openssl.org/source/license.html | |
8 | ||
9b05cbc3 | 9 | |
1aa89a7a RL |
10 | # $output is the last argument if it looks like a file (it has an extension) |
11 | # $flavour is the first argument if it doesn't look like a file | |
12 | $output = $#ARGV >= 0 && $ARGV[$#ARGV] =~ m|\.\w+$| ? pop : undef; | |
13 | $flavour = $#ARGV >= 0 && $ARGV[0] !~ m|\.| ? shift : undef; | |
9b05cbc3 AP |
14 | |
15 | $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; | |
16 | ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or | |
17 | ( $xlate="${dir}perlasm/arm-xlate.pl" and -f $xlate) or | |
18 | die "can't locate arm-xlate.pl"; | |
19 | ||
1aa89a7a RL |
20 | open OUT,"| \"$^X\" $xlate $flavour \"$output\"" |
21 | or die "can't call $xlate: $!"; | |
9b05cbc3 AP |
22 | *STDOUT=*OUT; |
23 | ||
24 | $code.=<<___; | |
e8d93e34 AP |
25 | #include "arm_arch.h" |
26 | ||
27 | .text | |
28 | .arch armv8-a+crypto | |
29 | ||
30 | .align 5 | |
9b05cbc3 | 31 | .globl _armv7_neon_probe |
e8d93e34 AP |
32 | .type _armv7_neon_probe,%function |
33 | _armv7_neon_probe: | |
34 | orr v15.16b, v15.16b, v15.16b | |
35 | ret | |
36 | .size _armv7_neon_probe,.-_armv7_neon_probe | |
37 | ||
9b05cbc3 | 38 | .globl _armv7_tick |
e8d93e34 AP |
39 | .type _armv7_tick,%function |
40 | _armv7_tick: | |
9b05cbc3 AP |
41 | #ifdef __APPLE__ |
42 | mrs x0, CNTPCT_EL0 | |
43 | #else | |
e8d93e34 | 44 | mrs x0, CNTVCT_EL0 |
9b05cbc3 | 45 | #endif |
e8d93e34 AP |
46 | ret |
47 | .size _armv7_tick,.-_armv7_tick | |
48 | ||
9b05cbc3 | 49 | .globl _armv8_aes_probe |
e8d93e34 AP |
50 | .type _armv8_aes_probe,%function |
51 | _armv8_aes_probe: | |
52 | aese v0.16b, v0.16b | |
53 | ret | |
54 | .size _armv8_aes_probe,.-_armv8_aes_probe | |
55 | ||
9b05cbc3 | 56 | .globl _armv8_sha1_probe |
e8d93e34 AP |
57 | .type _armv8_sha1_probe,%function |
58 | _armv8_sha1_probe: | |
59 | sha1h s0, s0 | |
60 | ret | |
61 | .size _armv8_sha1_probe,.-_armv8_sha1_probe | |
62 | ||
9b05cbc3 | 63 | .globl _armv8_sha256_probe |
e8d93e34 AP |
64 | .type _armv8_sha256_probe,%function |
65 | _armv8_sha256_probe: | |
66 | sha256su0 v0.4s, v0.4s | |
67 | ret | |
68 | .size _armv8_sha256_probe,.-_armv8_sha256_probe | |
77f3612e | 69 | |
9b05cbc3 | 70 | .globl _armv8_pmull_probe |
e8d93e34 AP |
71 | .type _armv8_pmull_probe,%function |
72 | _armv8_pmull_probe: | |
73 | pmull v0.1q, v0.1d, v0.1d | |
74 | ret | |
75 | .size _armv8_pmull_probe,.-_armv8_pmull_probe | |
6133b4ed | 76 | |
77f3612e AP |
77 | .globl _armv8_sha512_probe |
78 | .type _armv8_sha512_probe,%function | |
79 | _armv8_sha512_probe: | |
80 | .long 0xcec08000 // sha512su0 v0.2d,v0.2d | |
81 | ret | |
82 | .size _armv8_sha512_probe,.-_armv8_sha512_probe | |
83 | ||
5ea64b45 FF |
84 | .globl _armv8_cpuid_probe |
85 | .type _armv8_cpuid_probe,%function | |
86 | _armv8_cpuid_probe: | |
87 | mrs x0, midr_el1 | |
88 | ret | |
89 | .size _armv8_cpuid_probe,.-_armv8_cpuid_probe | |
90 | ||
6133b4ed AP |
91 | .globl OPENSSL_cleanse |
92 | .type OPENSSL_cleanse,%function | |
93 | .align 5 | |
94 | OPENSSL_cleanse: | |
95 | cbz x1,.Lret // len==0? | |
96 | cmp x1,#15 | |
97 | b.hi .Lot // len>15 | |
98 | nop | |
99 | .Little: | |
100 | strb wzr,[x0],#1 // store byte-by-byte | |
101 | subs x1,x1,#1 | |
102 | b.ne .Little | |
103 | .Lret: ret | |
104 | ||
105 | .align 4 | |
106 | .Lot: tst x0,#7 | |
107 | b.eq .Laligned // inp is aligned | |
108 | strb wzr,[x0],#1 // store byte-by-byte | |
109 | sub x1,x1,#1 | |
110 | b .Lot | |
111 | ||
112 | .align 4 | |
113 | .Laligned: | |
114 | str xzr,[x0],#8 // store word-by-word | |
115 | sub x1,x1,#8 | |
116 | tst x1,#-8 | |
117 | b.ne .Laligned // len>=8 | |
118 | cbnz x1,.Little // len!=0? | |
119 | ret | |
120 | .size OPENSSL_cleanse,.-OPENSSL_cleanse | |
e33826f0 AP |
121 | |
122 | .globl CRYPTO_memcmp | |
123 | .type CRYPTO_memcmp,%function | |
124 | .align 4 | |
125 | CRYPTO_memcmp: | |
126 | eor w3,w3,w3 | |
127 | cbz x2,.Lno_data // len==0? | |
9a708bf9 AP |
128 | cmp x2,#16 |
129 | b.ne .Loop_cmp | |
130 | ldp x8,x9,[x0] | |
131 | ldp x10,x11,[x1] | |
132 | eor x8,x8,x10 | |
133 | eor x9,x9,x11 | |
134 | orr x8,x8,x9 | |
135 | mov x0,#1 | |
136 | cmp x8,#0 | |
137 | csel x0,xzr,x0,eq | |
138 | ret | |
139 | ||
140 | .align 4 | |
e33826f0 AP |
141 | .Loop_cmp: |
142 | ldrb w4,[x0],#1 | |
143 | ldrb w5,[x1],#1 | |
144 | eor w4,w4,w5 | |
145 | orr w3,w3,w4 | |
146 | subs x2,x2,#1 | |
147 | b.ne .Loop_cmp | |
148 | ||
149 | .Lno_data: | |
150 | neg w0,w3 | |
151 | lsr w0,w0,#31 | |
152 | ret | |
153 | .size CRYPTO_memcmp,.-CRYPTO_memcmp | |
9b05cbc3 AP |
154 | ___ |
155 | ||
156 | print $code; | |
a21314db | 157 | close STDOUT or die "error closing STDOUT: $!"; |