2 # Copyright 2007-2016 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";