]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/ppccpuid.pl
Update copyright year
[thirdparty/openssl.git] / crypto / ppccpuid.pl
1 #! /usr/bin/env perl
2 # Copyright 2007-2020 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
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;
14
15 $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
16 ( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
17 ( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
18 die "can't locate ppc-xlate.pl";
19
20 open STDOUT,"| $^X $xlate $flavour \"$output\""
21 or die "can't call $xlate: $!";
22
23 if ($flavour=~/64/) {
24 $CMPLI="cmpldi";
25 $SHRLI="srdi";
26 $SIGNX="extsw";
27 } else {
28 $CMPLI="cmplwi";
29 $SHRLI="srwi";
30 $SIGNX="mr";
31 }
32
33 $code=<<___;
34 .machine "any"
35 .text
36
37 .globl .OPENSSL_fpu_probe
38 .align 4
39 .OPENSSL_fpu_probe:
40 fmr f0,f0
41 blr
42 .long 0
43 .byte 0,12,0x14,0,0,0,0,0
44 .size .OPENSSL_fpu_probe,.-.OPENSSL_fpu_probe
45 .globl .OPENSSL_ppc64_probe
46 .align 4
47 .OPENSSL_ppc64_probe:
48 fcfid f1,f1
49 extrdi r0,r0,32,0
50 blr
51 .long 0
52 .byte 0,12,0x14,0,0,0,0,0
53 .size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe
54
55 .globl .OPENSSL_altivec_probe
56 .align 4
57 .OPENSSL_altivec_probe:
58 .long 0x10000484 # vor v0,v0,v0
59 blr
60 .long 0
61 .byte 0,12,0x14,0,0,0,0,0
62 .size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe
63
64 .globl .OPENSSL_crypto207_probe
65 .align 4
66 .OPENSSL_crypto207_probe:
67 lvx_u v0,0,r1
68 vcipher v0,v0,v0
69 blr
70 .long 0
71 .byte 0,12,0x14,0,0,0,0,0
72 .size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
73
74 .globl .OPENSSL_madd300_probe
75 .align 4
76 .OPENSSL_madd300_probe:
77 xor r0,r0,r0
78 maddld r3,r0,r0,r0
79 maddhdu r3,r0,r0,r0
80 blr
81 .long 0
82 .byte 0,12,0x14,0,0,0,0,0
83
84 .globl .OPENSSL_wipe_cpu
85 .align 4
86 .OPENSSL_wipe_cpu:
87 xor r0,r0,r0
88 fmr f0,f31
89 fmr f1,f31
90 fmr f2,f31
91 mr r3,r1
92 fmr f3,f31
93 xor r4,r4,r4
94 fmr f4,f31
95 xor r5,r5,r5
96 fmr f5,f31
97 xor r6,r6,r6
98 fmr f6,f31
99 xor r7,r7,r7
100 fmr f7,f31
101 xor r8,r8,r8
102 fmr f8,f31
103 xor r9,r9,r9
104 fmr f9,f31
105 xor r10,r10,r10
106 fmr f10,f31
107 xor r11,r11,r11
108 fmr f11,f31
109 xor r12,r12,r12
110 fmr f12,f31
111 fmr f13,f31
112 blr
113 .long 0
114 .byte 0,12,0x14,0,0,0,0,0
115 .size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu
116
117 .globl .OPENSSL_atomic_add
118 .align 4
119 .OPENSSL_atomic_add:
120 Ladd: lwarx r5,0,r3
121 add r0,r4,r5
122 stwcx. r0,0,r3
123 bne- Ladd
124 $SIGNX r3,r0
125 blr
126 .long 0
127 .byte 0,12,0x14,0,0,0,2,0
128 .long 0
129 .size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add
130
131 .globl .OPENSSL_rdtsc_mftb
132 .align 4
133 .OPENSSL_rdtsc_mftb:
134 mftb r3
135 blr
136 .long 0
137 .byte 0,12,0x14,0,0,0,0,0
138 .size .OPENSSL_rdtsc_mftb,.-.OPENSSL_rdtsc_mftb
139
140 .globl .OPENSSL_rdtsc_mfspr268
141 .align 4
142 .OPENSSL_rdtsc_mfspr268:
143 mfspr r3,268
144 blr
145 .long 0
146 .byte 0,12,0x14,0,0,0,0,0
147 .size .OPENSSL_rdtsc_mfspr268,.-.OPENSSL_rdtsc_mfspr268
148
149 .globl .OPENSSL_cleanse
150 .align 4
151 .OPENSSL_cleanse:
152 $CMPLI r4,7
153 li r0,0
154 bge Lot
155 $CMPLI r4,0
156 beqlr-
157 Little: mtctr r4
158 stb r0,0(r3)
159 addi r3,r3,1
160 bdnz \$-8
161 blr
162 Lot: andi. r5,r3,3
163 beq Laligned
164 stb r0,0(r3)
165 subi r4,r4,1
166 addi r3,r3,1
167 b Lot
168 Laligned:
169 $SHRLI r5,r4,2
170 mtctr r5
171 stw r0,0(r3)
172 addi r3,r3,4
173 bdnz \$-8
174 andi. r4,r4,3
175 bne Little
176 blr
177 .long 0
178 .byte 0,12,0x14,0,0,0,2,0
179 .long 0
180 .size .OPENSSL_cleanse,.-.OPENSSL_cleanse
181
182 globl .CRYPTO_memcmp
183 .align 4
184 .CRYPTO_memcmp:
185 $CMPLI r5,0
186 li r0,0
187 beq Lno_data
188 mtctr r5
189 Loop_cmp:
190 lbz r6,0(r3)
191 addi r3,r3,1
192 lbz r7,0(r4)
193 addi r4,r4,1
194 xor r6,r6,r7
195 or r0,r0,r6
196 bdnz Loop_cmp
197
198 Lno_data:
199 li r3,0
200 sub r3,r3,r0
201 extrwi r3,r3,1,0
202 blr
203 .long 0
204 .byte 0,12,0x14,0,0,0,3,0
205 .long 0
206 .size .CRYPTO_memcmp,.-.CRYPTO_memcmp
207 ___
208 {
209 my ($out,$cnt,$max)=("r3","r4","r5");
210 my ($tick,$lasttick)=("r6","r7");
211 my ($diff,$lastdiff)=("r8","r9");
212
213 $code.=<<___;
214 .globl .OPENSSL_instrument_bus_mftb
215 .align 4
216 .OPENSSL_instrument_bus_mftb:
217 mtctr $cnt
218
219 mftb $lasttick # collect 1st tick
220 li $diff,0
221
222 dcbf 0,$out # flush cache line
223 lwarx $tick,0,$out # load and lock
224 add $tick,$tick,$diff
225 stwcx. $tick,0,$out
226 stwx $tick,0,$out
227
228 Loop: mftb $tick
229 sub $diff,$tick,$lasttick
230 mr $lasttick,$tick
231 dcbf 0,$out # flush cache line
232 lwarx $tick,0,$out # load and lock
233 add $tick,$tick,$diff
234 stwcx. $tick,0,$out
235 stwx $tick,0,$out
236 addi $out,$out,4 # ++$out
237 bdnz Loop
238
239 mr r3,$cnt
240 blr
241 .long 0
242 .byte 0,12,0x14,0,0,0,2,0
243 .long 0
244 .size .OPENSSL_instrument_bus_mftb,.-.OPENSSL_instrument_bus_mftb
245
246 .globl .OPENSSL_instrument_bus2_mftb
247 .align 4
248 .OPENSSL_instrument_bus2_mftb:
249 mr r0,$cnt
250 slwi $cnt,$cnt,2
251
252 mftb $lasttick # collect 1st tick
253 li $diff,0
254
255 dcbf 0,$out # flush cache line
256 lwarx $tick,0,$out # load and lock
257 add $tick,$tick,$diff
258 stwcx. $tick,0,$out
259 stwx $tick,0,$out
260
261 mftb $tick # collect 1st diff
262 sub $diff,$tick,$lasttick
263 mr $lasttick,$tick
264 mr $lastdiff,$diff
265 Loop2:
266 dcbf 0,$out # flush cache line
267 lwarx $tick,0,$out # load and lock
268 add $tick,$tick,$diff
269 stwcx. $tick,0,$out
270 stwx $tick,0,$out
271
272 addic. $max,$max,-1
273 beq Ldone2
274
275 mftb $tick
276 sub $diff,$tick,$lasttick
277 mr $lasttick,$tick
278 cmplw 7,$diff,$lastdiff
279 mr $lastdiff,$diff
280
281 mfcr $tick # pull cr
282 not $tick,$tick # flip bits
283 rlwinm $tick,$tick,1,29,29 # isolate flipped eq bit and scale
284
285 sub. $cnt,$cnt,$tick # conditional --$cnt
286 add $out,$out,$tick # conditional ++$out
287 bne Loop2
288
289 Ldone2:
290 srwi $cnt,$cnt,2
291 sub r3,r0,$cnt
292 blr
293 .long 0
294 .byte 0,12,0x14,0,0,0,3,0
295 .long 0
296 .size .OPENSSL_instrument_bus2_mftb,.-.OPENSSL_instrument_bus2_mftb
297
298 .globl .OPENSSL_instrument_bus_mfspr268
299 .align 4
300 .OPENSSL_instrument_bus_mfspr268:
301 mtctr $cnt
302
303 mfspr $lasttick,268 # collect 1st tick
304 li $diff,0
305
306 dcbf 0,$out # flush cache line
307 lwarx $tick,0,$out # load and lock
308 add $tick,$tick,$diff
309 stwcx. $tick,0,$out
310 stwx $tick,0,$out
311
312 Loop3: mfspr $tick,268
313 sub $diff,$tick,$lasttick
314 mr $lasttick,$tick
315 dcbf 0,$out # flush cache line
316 lwarx $tick,0,$out # load and lock
317 add $tick,$tick,$diff
318 stwcx. $tick,0,$out
319 stwx $tick,0,$out
320 addi $out,$out,4 # ++$out
321 bdnz Loop3
322
323 mr r3,$cnt
324 blr
325 .long 0
326 .byte 0,12,0x14,0,0,0,2,0
327 .long 0
328 .size .OPENSSL_instrument_bus_mfspr268,.-.OPENSSL_instrument_bus_mfspr268
329
330 .globl .OPENSSL_instrument_bus2_mfspr268
331 .align 4
332 .OPENSSL_instrument_bus2_mfspr268:
333 mr r0,$cnt
334 slwi $cnt,$cnt,2
335
336 mfspr $lasttick,268 # collect 1st tick
337 li $diff,0
338
339 dcbf 0,$out # flush cache line
340 lwarx $tick,0,$out # load and lock
341 add $tick,$tick,$diff
342 stwcx. $tick,0,$out
343 stwx $tick,0,$out
344
345 mfspr $tick,268 # collect 1st diff
346 sub $diff,$tick,$lasttick
347 mr $lasttick,$tick
348 mr $lastdiff,$diff
349 Loop4:
350 dcbf 0,$out # flush cache line
351 lwarx $tick,0,$out # load and lock
352 add $tick,$tick,$diff
353 stwcx. $tick,0,$out
354 stwx $tick,0,$out
355
356 addic. $max,$max,-1
357 beq Ldone4
358
359 mfspr $tick,268
360 sub $diff,$tick,$lasttick
361 mr $lasttick,$tick
362 cmplw 7,$diff,$lastdiff
363 mr $lastdiff,$diff
364
365 mfcr $tick # pull cr
366 not $tick,$tick # flip bits
367 rlwinm $tick,$tick,1,29,29 # isolate flipped eq bit and scale
368
369 sub. $cnt,$cnt,$tick # conditional --$cnt
370 add $out,$out,$tick # conditional ++$out
371 bne Loop4
372
373 Ldone4:
374 srwi $cnt,$cnt,2
375 sub r3,r0,$cnt
376 blr
377 .long 0
378 .byte 0,12,0x14,0,0,0,3,0
379 .long 0
380 .size .OPENSSL_instrument_bus2_mfspr268,.-.OPENSSL_instrument_bus2_mfspr268
381 ___
382 }
383
384 $code =~ s/\`([^\`]*)\`/eval $1/gem;
385 print $code;
386 close STDOUT or die "error closing STDOUT: $!";