]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/c64xpluscpuid.pl
Implement EVP_MAC_do_all_ex()
[thirdparty/openssl.git] / crypto / c64xpluscpuid.pl
1 #! /usr/bin/env perl
2 # Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved.
3 #
4 # Licensed under the Apache License 2.0 (the "License"). You may not use
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
9 while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
10 open STDOUT,">$output";
11
12 $code.=<<___;
13 .text
14
15 .if .ASSEMBLER_VERSION<7000000
16 .asg 0,__TI_EABI__
17 .endif
18 .if __TI_EABI__
19 .asg OPENSSL_rdtsc,_OPENSSL_rdtsc
20 .asg OPENSSL_cleanse,_OPENSSL_cleanse
21 .asg CRYPTO_memcmp,_CRYPTO_memcmp
22 .asg OPENSSL_atomic_add,_OPENSSL_atomic_add
23 .asg OPENSSL_wipe_cpu,_OPENSSL_wipe_cpu
24 .asg OPENSSL_instrument_bus,_OPENSSL_instrument_bus
25 .asg OPENSSL_instrument_bus2,_OPENSSL_instrument_bus2
26 .endif
27
28 .asg B3,RA
29
30 .global _OPENSSL_rdtsc
31 _OPENSSL_rdtsc:
32 .asmfunc
33 B RA
34 MVC TSCL,B0
35 MVC TSCH,B1
36 [!B0] MVC B0,TSCL ; start TSC
37 MV B0,A4
38 MV B1,A5
39 .endasmfunc
40
41 .global _OPENSSL_cleanse
42 _OPENSSL_cleanse:
43 .asmfunc
44 ZERO A3:A2
45 || ZERO B2
46 || SHRU B4,3,B0 ; is length >= 8
47 || ADD 1,A4,B6
48 [!B0] BNOP RA
49 || ZERO A1
50 || ZERO B1
51 [B0] MVC B0,ILC
52 ||[!B0] CMPLT 0,B4,A1
53 ||[!B0] CMPLT 1,B4,B1
54 [A1] STB A2,*A4++[2]
55 || [B1] STB B2,*B6++[2]
56 ||[!B0] CMPLT 2,B4,A1
57 ||[!B0] CMPLT 3,B4,B1
58 [A1] STB A2,*A4++[2]
59 || [B1] STB B2,*B6++[2]
60 ||[!B0] CMPLT 4,B4,A1
61 ||[!B0] CMPLT 5,B4,B1
62 [A1] STB A2,*A4++[2]
63 || [B1] STB B2,*B6++[2]
64 ||[!B0] CMPLT 6,B4,A1
65 [A1] STB A2,*A4++[2]
66
67 SPLOOP 1
68 STNDW A3:A2,*A4++
69 || SUB B4,8,B4
70 SPKERNEL
71
72 MV B4,B0 ; remaining bytes
73 || ADD 1,A4,B6
74 || BNOP RA
75 [B0] CMPLT 0,B0,A1
76 || [B0] CMPLT 1,B0,B1
77 [A1] STB A2,*A4++[2]
78 || [B1] STB B2,*B6++[2]
79 || [B0] CMPLT 2,B0,A1
80 || [B0] CMPLT 3,B0,B1
81 [A1] STB A2,*A4++[2]
82 || [B1] STB B2,*B6++[2]
83 || [B0] CMPLT 4,B0,A1
84 || [B0] CMPLT 5,B0,B1
85 [A1] STB A2,*A4++[2]
86 || [B1] STB B2,*B6++[2]
87 || [B0] CMPLT 6,B0,A1
88 [A1] STB A2,*A4++[2]
89 .endasmfunc
90
91 .global _CRYPTO_memcmp
92 _CRYPTO_memcmp:
93 .asmfunc
94 MV A6,B0
95 [!B0] BNOP RA
96 ||[!B0] ZERO A4
97 [B0] MVC B0,ILC
98 || [B0] ZERO A0
99 NOP 4
100
101 SPLOOP 1
102 LDBU *A4++,A1
103 || LDBU *B4++,B1
104 NOP 4
105 XOR.L B1,A1,A2
106 SPKERNEL 1,0
107 || OR.S A2,A0,A0
108
109 BNOP RA,3
110 ZERO.L A4
111 [A0] MVK 1,A4
112 .endasmfunc
113
114 .global _OPENSSL_atomic_add
115 _OPENSSL_atomic_add:
116 .asmfunc
117 MV A4,B0
118 atomic_add?:
119 LL *B0,B5
120 NOP 4
121 ADD B4,B5,B5
122 SL B5,*B0
123 CMTL *B0,B1
124 NOP 4
125 [!B1] B atomic_add?
126 [B1] BNOP RA,4
127 MV B5,A4
128 .endasmfunc
129
130 .global _OPENSSL_wipe_cpu
131 _OPENSSL_wipe_cpu:
132 .asmfunc
133 ZERO A0
134 || ZERO B0
135 || ZERO A1
136 || ZERO B1
137 ZERO A3:A2
138 || MVD B0,B2
139 || ZERO A4
140 || ZERO B4
141 || ZERO A5
142 || ZERO B5
143 || BNOP RA
144 ZERO A7:A6
145 || ZERO B7:B6
146 || ZERO A8
147 || ZERO B8
148 || ZERO A9
149 || ZERO B9
150 ZERO A17:A16
151 || ZERO B17:B16
152 || ZERO A18
153 || ZERO B18
154 || ZERO A19
155 || ZERO B19
156 ZERO A21:A20
157 || ZERO B21:B20
158 || ZERO A22
159 || ZERO B22
160 || ZERO A23
161 || ZERO B23
162 ZERO A25:A24
163 || ZERO B25:B24
164 || ZERO A26
165 || ZERO B26
166 || ZERO A27
167 || ZERO B27
168 ZERO A29:A28
169 || ZERO B29:B28
170 || ZERO A30
171 || ZERO B30
172 || ZERO A31
173 || ZERO B31
174 .endasmfunc
175
176 CLFLUSH .macro CONTROL,ADDR,LEN
177 B passthrough?
178 || STW ADDR,*CONTROL[0]
179 STW LEN,*CONTROL[1]
180 spinlock?:
181 LDW *CONTROL[1],A0
182 NOP 3
183 passthrough?:
184 NOP
185 [A0] BNOP spinlock?,5
186 .endm
187
188 .global _OPENSSL_instrument_bus
189 _OPENSSL_instrument_bus:
190 .asmfunc
191 MV B4,B0 ; reassign sizeof(output)
192 || MV A4,B4 ; reassign output
193 || MVK 0x00004030,A3
194 MV B0,A4 ; return value
195 || MVK 1,A1
196 || MVKH 0x01840000,A3 ; L1DWIBAR
197 MVC TSCL,B8 ; collect 1st tick
198 || MVK 0x00004010,A5
199 MV B8,B9 ; lasttick = tick
200 || MVK 0,B7 ; lastdiff = 0
201 || MVKH 0x01840000,A5 ; L2WIBAR
202 CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
203 CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
204 LL *B4,B5
205 NOP 4
206 ADD B7,B5,B5
207 SL B5,*B4
208 CMTL *B4,B1
209 NOP 4
210 STW B5,*B4
211 bus_loop1?:
212 MVC TSCL,B8
213 || [B0] SUB B0,1,B0
214 SUB B8,B9,B7 ; lastdiff = tick - lasttick
215 || MV B8,B9 ; lasttick = tick
216 CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
217 CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
218 LL *B4,B5
219 NOP 4
220 ADD B7,B5,B5
221 SL B5,*B4
222 CMTL *B4,B1
223 STW B5,*B4 ; [!B1] is removed to flatten samples
224 || ADDK 4,B4
225 || [B0] BNOP bus_loop1?,5
226
227 BNOP RA,5
228 .endasmfunc
229
230 .global _OPENSSL_instrument_bus2
231 _OPENSSL_instrument_bus2:
232 .asmfunc
233 MV A6,B0 ; reassign max
234 || MV B4,A6 ; reassign sizeof(output)
235 || MVK 0x00004030,A3
236 MV A4,B4 ; reassign output
237 || MVK 0,A4 ; return value
238 || MVK 1,A1
239 || MVKH 0x01840000,A3 ; L1DWIBAR
240
241 MVC TSCL,B8 ; collect 1st tick
242 || MVK 0x00004010,A5
243 MV B8,B9 ; lasttick = tick
244 || MVK 0,B7 ; lastdiff = 0
245 || MVKH 0x01840000,A5 ; L2WIBAR
246 CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
247 CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
248 LL *B4,B5
249 NOP 4
250 ADD B7,B5,B5
251 SL B5,*B4
252 CMTL *B4,B1
253 NOP 4
254 STW B5,*B4
255
256 MVC TSCL,B8 ; collect 1st diff
257 SUB B8,B9,B7 ; lastdiff = tick - lasttick
258 || MV B8,B9 ; lasttick = tick
259 || SUB B0,1,B0
260 bus_loop2?:
261 CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
262 CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
263 LL *B4,B5
264 NOP 4
265 ADD B7,B5,B5
266 SL B5,*B4
267 CMTL *B4,B1
268 STW B5,*B4 ; [!B1] is removed to flatten samples
269 ||[!B0] BNOP bus_loop2_done?,2
270 || SUB B0,1,B0
271 MVC TSCL,B8
272 SUB B8,B9,B8
273 || MV B8,B9
274 CMPEQ B8,B7,B2
275 || MV B8,B7
276 [!B2] ADDAW B4,1,B4
277 ||[!B2] ADDK 1,A4
278 CMPEQ A4,A6,A2
279 [!A2] BNOP bus_loop2?,5
280
281 bus_loop2_done?:
282 BNOP RA,5
283 .endasmfunc
284 ___
285
286 print $code;
287 close STDOUT;