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
12 $0 =~ m/(.*[\/\\])[^\
/\\]+$/; $dir=$1;
13 ( $xlate="${dir}ppc-xlate.pl" and -f
$xlate ) or
14 ( $xlate="${dir}perlasm/ppc-xlate.pl" and -f
$xlate) or
15 die "can't locate ppc-xlate.pl";
17 open STDOUT
,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
33 .globl
.OPENSSL_fpu_probe
39 .byte
0,12,0x14,0,0,0,0,0
40 .size
.OPENSSL_fpu_probe
,.-.OPENSSL_fpu_probe
41 .globl
.OPENSSL_ppc64_probe
48 .byte
0,12,0x14,0,0,0,0,0
49 .size
.OPENSSL_ppc64_probe
,.-.OPENSSL_ppc64_probe
51 .globl
.OPENSSL_altivec_probe
53 .OPENSSL_altivec_probe
:
54 .long
0x10000484 # vor v0,v0,v0
57 .byte
0,12,0x14,0,0,0,0,0
58 .size
.OPENSSL_altivec_probe
,.-..OPENSSL_altivec_probe
60 .globl
.OPENSSL_crypto207_probe
62 .OPENSSL_crypto207_probe
:
67 .byte
0,12,0x14,0,0,0,0,0
68 .size
.OPENSSL_crypto207_probe
,.-.OPENSSL_crypto207_probe
70 .globl
.OPENSSL_madd300_probe
72 .OPENSSL_madd300_probe
:
78 .byte
0,12,0x14,0,0,0,0,0
80 .globl
.OPENSSL_wipe_cpu
110 .byte
0,12,0x14,0,0,0,0,0
111 .size
.OPENSSL_wipe_cpu
,.-.OPENSSL_wipe_cpu
113 .globl
.OPENSSL_atomic_add
123 .byte
0,12,0x14,0,0,0,2,0
125 .size
.OPENSSL_atomic_add
,.-.OPENSSL_atomic_add
127 .globl
.OPENSSL_rdtsc_mftb
133 .byte
0,12,0x14,0,0,0,0,0
134 .size
.OPENSSL_rdtsc_mftb
,.-.OPENSSL_rdtsc_mftb
136 .globl
.OPENSSL_rdtsc_mfspr268
138 .OPENSSL_rdtsc_mfspr268
:
142 .byte
0,12,0x14,0,0,0,0,0
143 .size
.OPENSSL_rdtsc_mfspr268
,.-.OPENSSL_rdtsc_mfspr268
145 .globl
.OPENSSL_cleanse
174 .byte
0,12,0x14,0,0,0,2,0
176 .size
.OPENSSL_cleanse
,.-.OPENSSL_cleanse
200 .byte
0,12,0x14,0,0,0,3,0
202 .size
.CRYPTO_memcmp
,.-.CRYPTO_memcmp
205 my ($out,$cnt,$max)=("r3","r4","r5");
206 my ($tick,$lasttick)=("r6","r7");
207 my ($diff,$lastdiff)=("r8","r9");
210 .globl
.OPENSSL_instrument_bus_mftb
212 .OPENSSL_instrument_bus_mftb
:
215 mftb
$lasttick # collect 1st tick
218 dcbf
0,$out # flush cache line
219 lwarx
$tick,0,$out # load and lock
220 add
$tick,$tick,$diff
225 sub $diff,$tick,$lasttick
227 dcbf
0,$out # flush cache line
228 lwarx
$tick,0,$out # load and lock
229 add
$tick,$tick,$diff
232 addi
$out,$out,4 # ++$out
238 .byte
0,12,0x14,0,0,0,2,0
240 .size
.OPENSSL_instrument_bus_mftb
,.-.OPENSSL_instrument_bus_mftb
242 .globl
.OPENSSL_instrument_bus2_mftb
244 .OPENSSL_instrument_bus2_mftb
:
248 mftb
$lasttick # collect 1st tick
251 dcbf
0,$out # flush cache line
252 lwarx
$tick,0,$out # load and lock
253 add
$tick,$tick,$diff
257 mftb
$tick # collect 1st diff
258 sub $diff,$tick,$lasttick
262 dcbf
0,$out # flush cache line
263 lwarx
$tick,0,$out # load and lock
264 add
$tick,$tick,$diff
272 sub $diff,$tick,$lasttick
274 cmplw
7,$diff,$lastdiff
278 not $tick,$tick # flip bits
279 rlwinm
$tick,$tick,1,29,29 # isolate flipped eq bit and scale
281 sub. $cnt,$cnt,$tick # conditional --$cnt
282 add
$out,$out,$tick # conditional ++$out
290 .byte
0,12,0x14,0,0,0,3,0
292 .size
.OPENSSL_instrument_bus2_mftb
,.-.OPENSSL_instrument_bus2_mftb
294 .globl
.OPENSSL_instrument_bus_mfspr268
296 .OPENSSL_instrument_bus_mfspr268
:
299 mfspr
$lasttick,268 # collect 1st tick
302 dcbf
0,$out # flush cache line
303 lwarx
$tick,0,$out # load and lock
304 add
$tick,$tick,$diff
308 Loop3
: mfspr
$tick,268
309 sub $diff,$tick,$lasttick
311 dcbf
0,$out # flush cache line
312 lwarx
$tick,0,$out # load and lock
313 add
$tick,$tick,$diff
316 addi
$out,$out,4 # ++$out
322 .byte
0,12,0x14,0,0,0,2,0
324 .size
.OPENSSL_instrument_bus_mfspr268
,.-.OPENSSL_instrument_bus_mfspr268
326 .globl
.OPENSSL_instrument_bus2_mfspr268
328 .OPENSSL_instrument_bus2_mfspr268
:
332 mfspr
$lasttick,268 # collect 1st tick
335 dcbf
0,$out # flush cache line
336 lwarx
$tick,0,$out # load and lock
337 add
$tick,$tick,$diff
341 mfspr
$tick,268 # collect 1st diff
342 sub $diff,$tick,$lasttick
346 dcbf
0,$out # flush cache line
347 lwarx
$tick,0,$out # load and lock
348 add
$tick,$tick,$diff
356 sub $diff,$tick,$lasttick
358 cmplw
7,$diff,$lastdiff
362 not $tick,$tick # flip bits
363 rlwinm
$tick,$tick,1,29,29 # isolate flipped eq bit and scale
365 sub. $cnt,$cnt,$tick # conditional --$cnt
366 add
$out,$out,$tick # conditional ++$out
374 .byte
0,12,0x14,0,0,0,3,0
376 .size
.OPENSSL_instrument_bus2_mfspr268
,.-.OPENSSL_instrument_bus2_mfspr268
380 $code =~ s/\`([^\`]*)\`/eval $1/gem;