]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/ppccpuid.pl
Minor updates to ppccap.c and ppccpuid.pl.
[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 fmr f0,f31
38 fmr f1,f31
39 fmr f2,f31
40 mr r3,r1
41 fmr f3,f31
42 xor r4,r4,r4
43 fmr f4,f31
44 xor r5,r5,r5
45 fmr f5,f31
46 xor r6,r6,r6
47 fmr f6,f31
48 xor r7,r7,r7
49 fmr f7,f31
50 xor r8,r8,r8
51 fmr f8,f31
52 xor r9,r9,r9
53 fmr f9,f31
54 xor r10,r10,r10
55 fmr f10,f31
56 xor r11,r11,r11
57 fmr f11,f31
58 xor r12,r12,r12
59 fmr f12,f31
60 fmr f13,f31
61 blr
62
63 .globl .OPENSSL_atomic_add
64 .align 4
65 .OPENSSL_atomic_add:
66 Loop: lwarx r5,0,r3
67 add r0,r4,r5
68 stwcx. r0,0,r3
69 bne- Loop
70 $SIGNX r3,r0
71 blr
72
73 .globl .OPENSSL_rdtsc
74 .align 4
75 .OPENSSL_rdtsc:
76 mftb r3
77 mftbu r4
78 blr
79
80 .globl .OPENSSL_cleanse
81 .align 4
82 .OPENSSL_cleanse:
83 $CMPLI r4,7
84 li r0,0
85 bge Lot
86 Little: mtctr r4
87 stb r0,0(r3)
88 addi r3,r3,1
89 bdnz- \$-8
90 blr
91 Lot: andi. r5,r3,3
92 beq Laligned
93 stb r0,0(r3)
94 subi r4,r4,1
95 addi r3,r3,1
96 b Lot
97 Laligned:
98 $SHRLI r5,r4,2
99 mtctr r5
100 stw r0,0(r3)
101 addi r3,r3,4
102 bdnz- \$-8
103 andi. r4,r4,3
104 bne Little
105 blr
106 ___
107
108 $code =~ s/\`([^\`]*)\`/eval $1/gem;
109 print $code;
110 close STDOUT;