2 # Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
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
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;
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";
20 open STDOUT,"| $^X $xlate $flavour \"$output\""
21 or die "can't call $xlate: $!";
37 .globl .OPENSSL_fpu_probe
43 .byte 0,12,0x14,0,0,0,0,0
44 .size .OPENSSL_fpu_probe,.-.OPENSSL_fpu_probe
45 .globl .OPENSSL_ppc64_probe
52 .byte 0,12,0x14,0,0,0,0,0
53 .size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe
55 .globl .OPENSSL_altivec_probe
57 .OPENSSL_altivec_probe:
58 .long 0x10000484 # vor v0,v0,v0
61 .byte 0,12,0x14,0,0,0,0,0
62 .size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe
64 .globl .OPENSSL_crypto207_probe
66 .OPENSSL_crypto207_probe:
71 .byte 0,12,0x14,0,0,0,0,0
72 .size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
74 .globl .OPENSSL_madd300_probe
76 .OPENSSL_madd300_probe:
82 .byte 0,12,0x14,0,0,0,0,0
84 .globl .OPENSSL_wipe_cpu
114 .byte 0,12,0x14,0,0,0,0,0
115 .size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu
117 .globl .OPENSSL_atomic_add
127 .byte 0,12,0x14,0,0,0,2,0
129 .size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add
131 .globl .OPENSSL_rdtsc_mftb
137 .byte 0,12,0x14,0,0,0,0,0
138 .size .OPENSSL_rdtsc_mftb,.-.OPENSSL_rdtsc_mftb
140 .globl .OPENSSL_rdtsc_mfspr268
142 .OPENSSL_rdtsc_mfspr268:
146 .byte 0,12,0x14,0,0,0,0,0
147 .size .OPENSSL_rdtsc_mfspr268,.-.OPENSSL_rdtsc_mfspr268
149 .globl .OPENSSL_cleanse
178 .byte 0,12,0x14,0,0,0,2,0
180 .size .OPENSSL_cleanse,.-.OPENSSL_cleanse
204 .byte 0,12,0x14,0,0,0,3,0
206 .size .CRYPTO_memcmp,.-.CRYPTO_memcmp
209 my ($out,$cnt,$max)=("r3","r4","r5");
210 my ($tick,$lasttick)=("r6","r7");
211 my ($diff,$lastdiff)=("r8","r9");
214 .globl .OPENSSL_instrument_bus_mftb
216 .OPENSSL_instrument_bus_mftb:
219 mftb $lasttick # collect 1st tick
222 dcbf 0,$out # flush cache line
223 lwarx $tick,0,$out # load and lock
224 add $tick,$tick,$diff
229 sub $diff,$tick,$lasttick
231 dcbf 0,$out # flush cache line
232 lwarx $tick,0,$out # load and lock
233 add $tick,$tick,$diff
236 addi $out,$out,4 # ++$out
242 .byte 0,12,0x14,0,0,0,2,0
244 .size .OPENSSL_instrument_bus_mftb,.-.OPENSSL_instrument_bus_mftb
246 .globl .OPENSSL_instrument_bus2_mftb
248 .OPENSSL_instrument_bus2_mftb:
252 mftb $lasttick # collect 1st tick
255 dcbf 0,$out # flush cache line
256 lwarx $tick,0,$out # load and lock
257 add $tick,$tick,$diff
261 mftb $tick # collect 1st diff
262 sub $diff,$tick,$lasttick
266 dcbf 0,$out # flush cache line
267 lwarx $tick,0,$out # load and lock
268 add $tick,$tick,$diff
276 sub $diff,$tick,$lasttick
278 cmplw 7,$diff,$lastdiff
282 not $tick,$tick # flip bits
283 rlwinm $tick,$tick,1,29,29 # isolate flipped eq bit and scale
285 sub. $cnt,$cnt,$tick # conditional --$cnt
286 add $out,$out,$tick # conditional ++$out
294 .byte 0,12,0x14,0,0,0,3,0
296 .size .OPENSSL_instrument_bus2_mftb,.-.OPENSSL_instrument_bus2_mftb
298 .globl .OPENSSL_instrument_bus_mfspr268
300 .OPENSSL_instrument_bus_mfspr268:
303 mfspr $lasttick,268 # collect 1st tick
306 dcbf 0,$out # flush cache line
307 lwarx $tick,0,$out # load and lock
308 add $tick,$tick,$diff
312 Loop3: mfspr $tick,268
313 sub $diff,$tick,$lasttick
315 dcbf 0,$out # flush cache line
316 lwarx $tick,0,$out # load and lock
317 add $tick,$tick,$diff
320 addi $out,$out,4 # ++$out
326 .byte 0,12,0x14,0,0,0,2,0
328 .size .OPENSSL_instrument_bus_mfspr268,.-.OPENSSL_instrument_bus_mfspr268
330 .globl .OPENSSL_instrument_bus2_mfspr268
332 .OPENSSL_instrument_bus2_mfspr268:
336 mfspr $lasttick,268 # collect 1st tick
339 dcbf 0,$out # flush cache line
340 lwarx $tick,0,$out # load and lock
341 add $tick,$tick,$diff
345 mfspr $tick,268 # collect 1st diff
346 sub $diff,$tick,$lasttick
350 dcbf 0,$out # flush cache line
351 lwarx $tick,0,$out # load and lock
352 add $tick,$tick,$diff
360 sub $diff,$tick,$lasttick
362 cmplw 7,$diff,$lastdiff
366 not $tick,$tick # flip bits
367 rlwinm $tick,$tick,1,29,29 # isolate flipped eq bit and scale
369 sub. $cnt,$cnt,$tick # conditional --$cnt
370 add $out,$out,$tick # conditional ++$out
378 .byte 0,12,0x14,0,0,0,3,0
380 .size .OPENSSL_instrument_bus2_mfspr268,.-.OPENSSL_instrument_bus2_mfspr268
384 $code =~ s/\`([^\`]*)\`/eval $1/gem;
386 close STDOUT or die "error closing STDOUT: $!";