]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/ppccpuid.pl
ppc64-mont.pl: adapt for 32-bit and engage for all builds.
[thirdparty/openssl.git] / crypto / ppccpuid.pl
1 #!/usr/bin/env perl
2
3 $flavour = shift;
4
5 $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
6 ( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
7 ( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
8 die "can't locate ppc-xlate.pl";
9
10 open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
11
12 if ($flavour=~/64/) {
13 $CMPLI="cmpldi";
14 $SHRLI="srdi";
15 $SIGNX="extsw";
16 } else {
17 $CMPLI="cmplwi";
18 $SHRLI="srwi";
19 $SIGNX="mr";
20 }
21
22 $code=<<___;
23 .machine "any"
24 .text
25
26 .globl .OPENSSL_ppc64_probe
27 .align 4
28 .OPENSSL_ppc64_probe:
29 fcfid f1,f1
30 extrdi r0,r0,32,0
31 blr
32
33 .globl .OPENSSL_wipe_cpu
34 .align 4
35 .OPENSSL_wipe_cpu:
36 xor r0,r0,r0
37 mr r3,r1
38 xor r4,r4,r4
39 xor r5,r5,r5
40 xor r6,r6,r6
41 xor r7,r7,r7
42 xor r8,r8,r8
43 xor r9,r9,r9
44 xor r10,r10,r10
45 xor r11,r11,r11
46 xor r12,r12,r12
47 blr
48
49 .globl .OPENSSL_atomic_add
50 .align 4
51 .OPENSSL_atomic_add:
52 Loop: lwarx r5,0,r3
53 add r0,r4,r5
54 stwcx. r0,0,r3
55 bne- Loop
56 $SIGNX r3,r0
57 blr
58
59 .globl .OPENSSL_rdtsc
60 .align 4
61 .OPENSSL_rdtsc:
62 mftb r3
63 mftbu r4
64 blr
65
66 .globl .OPENSSL_cleanse
67 .align 4
68 .OPENSSL_cleanse:
69 $CMPLI r4,7
70 li r0,0
71 bge Lot
72 Little: mtctr r4
73 stb r0,0(r3)
74 addi r3,r3,1
75 bdnz- \$-8
76 blr
77 Lot: andi. r5,r3,3
78 beq Laligned
79 stb r0,0(r3)
80 subi r4,r4,1
81 addi r3,r3,1
82 b Lot
83 Laligned:
84 $SHRLI r5,r4,2
85 mtctr r5
86 stw r0,0(r3)
87 addi r3,r3,4
88 bdnz- \$-8
89 andi. r4,r4,3
90 bne Little
91 blr
92 ___
93
94 $code =~ s/\`([^\`]*)\`/eval $1/gem;
95 print $code;
96 close STDOUT;