]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/ppccpuid.pl
aesp8-ppc.pl: fix typos.
[thirdparty/openssl.git] / crypto / ppccpuid.pl
CommitLineData
9c9c83cc
AP
1#!/usr/bin/env perl
2
addd641f 3$flavour = shift;
9c9c83cc
AP
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
8die "can't locate ppc-xlate.pl";
9
addd641f 10open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
9c9c83cc 11
addd641f 12if ($flavour=~/64/) {
9c9c83cc
AP
13 $CMPLI="cmpldi";
14 $SHRLI="srdi";
15 $SIGNX="extsw";
16} else {
17 $CMPLI="cmplwi";
18 $SHRLI="srwi";
19 $SIGNX="mr";
20}
21
22$code=<<___;
492279f6 23.machine "any"
9c9c83cc
AP
24.text
25
b4b48a10 26.globl .OPENSSL_ppc64_probe
9c9c83cc 27.align 4
b4b48a10
AP
28.OPENSSL_ppc64_probe:
29 fcfid f1,f1
30 extrdi r0,r0,32,0
9c9c83cc 31 blr
67150340
AP
32 .long 0
33 .byte 0,12,0x14,0,0,0,0,0
d6019e16 34.size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe
9c9c83cc 35
6415dd7b
AP
36.globl .OPENSSL_altivec_probe
37.align 4
38.OPENSSL_altivec_probe:
39 .long 0x10000484 # vor v0,v0,v0
40 blr
67150340
AP
41 .long 0
42 .byte 0,12,0x14,0,0,0,0,0
d6019e16 43.size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe
6415dd7b 44
de51e830
AP
45.globl .OPENSSL_crypto207_probe
46.align 4
d86689e1 47.OPENSSL_crypto207_probe:
de51e830
AP
48 lvx_u v0,0,r1
49 vcipher v0,v0,v0
50 blr
51 .long 0
52 .byte 0,12,0x14,0,0,0,0,0
53.size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
54
9c9c83cc
AP
55.globl .OPENSSL_wipe_cpu
56.align 4
57.OPENSSL_wipe_cpu:
58 xor r0,r0,r0
78a533cb
AP
59 fmr f0,f31
60 fmr f1,f31
61 fmr f2,f31
9c9c83cc 62 mr r3,r1
78a533cb 63 fmr f3,f31
9c9c83cc 64 xor r4,r4,r4
78a533cb 65 fmr f4,f31
9c9c83cc 66 xor r5,r5,r5
78a533cb 67 fmr f5,f31
9c9c83cc 68 xor r6,r6,r6
78a533cb 69 fmr f6,f31
9c9c83cc 70 xor r7,r7,r7
78a533cb 71 fmr f7,f31
9c9c83cc 72 xor r8,r8,r8
78a533cb 73 fmr f8,f31
9c9c83cc 74 xor r9,r9,r9
78a533cb 75 fmr f9,f31
9c9c83cc 76 xor r10,r10,r10
78a533cb 77 fmr f10,f31
9c9c83cc 78 xor r11,r11,r11
78a533cb 79 fmr f11,f31
9c9c83cc 80 xor r12,r12,r12
78a533cb
AP
81 fmr f12,f31
82 fmr f13,f31
9c9c83cc 83 blr
67150340
AP
84 .long 0
85 .byte 0,12,0x14,0,0,0,0,0
d6019e16 86.size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu
9c9c83cc
AP
87
88.globl .OPENSSL_atomic_add
89.align 4
90.OPENSSL_atomic_add:
5fabb88a 91Ladd: lwarx r5,0,r3
9c9c83cc
AP
92 add r0,r4,r5
93 stwcx. r0,0,r3
5fabb88a 94 bne- Ladd
9c9c83cc
AP
95 $SIGNX r3,r0
96 blr
67150340
AP
97 .long 0
98 .byte 0,12,0x14,0,0,0,2,0
99 .long 0
d6019e16 100.size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add
9c9c83cc
AP
101
102.globl .OPENSSL_rdtsc
103.align 4
104.OPENSSL_rdtsc:
105 mftb r3
106 mftbu r4
107 blr
67150340
AP
108 .long 0
109 .byte 0,12,0x14,0,0,0,0,0
d6019e16 110.size .OPENSSL_rdtsc,.-.OPENSSL_rdtsc
9c9c83cc
AP
111
112.globl .OPENSSL_cleanse
113.align 4
114.OPENSSL_cleanse:
115 $CMPLI r4,7
116 li r0,0
117 bge Lot
7676eebf
AP
118 $CMPLI r4,0
119 beqlr-
9c9c83cc
AP
120Little: mtctr r4
121 stb r0,0(r3)
122 addi r3,r3,1
9474483a 123 bdnz \$-8
9c9c83cc
AP
124 blr
125Lot: andi. r5,r3,3
126 beq Laligned
127 stb r0,0(r3)
128 subi r4,r4,1
129 addi r3,r3,1
130 b Lot
131Laligned:
132 $SHRLI r5,r4,2
133 mtctr r5
134 stw r0,0(r3)
135 addi r3,r3,4
9474483a 136 bdnz \$-8
9c9c83cc
AP
137 andi. r4,r4,3
138 bne Little
139 blr
67150340
AP
140 .long 0
141 .byte 0,12,0x14,0,0,0,2,0
142 .long 0
d6019e16 143.size .OPENSSL_cleanse,.-.OPENSSL_cleanse
9c9c83cc 144___
5fabb88a
AP
145{
146my ($out,$cnt,$max)=("r3","r4","r5");
147my ($tick,$lasttick)=("r6","r7");
148my ($diff,$lastdiff)=("r8","r9");
149
150$code.=<<___;
151.globl .OPENSSL_instrument_bus
152.align 4
153.OPENSSL_instrument_bus:
154 mtctr $cnt
155
156 mftb $lasttick # collect 1st tick
157 li $diff,0
158
159 dcbf 0,$out # flush cache line
160 lwarx $tick,0,$out # load and lock
161 add $tick,$tick,$diff
162 stwcx. $tick,0,$out
163 stwx $tick,0,$out
164
165Loop: mftb $tick
166 sub $diff,$tick,$lasttick
167 mr $lasttick,$tick
168 dcbf 0,$out # flush cache line
169 lwarx $tick,0,$out # load and lock
170 add $tick,$tick,$diff
171 stwcx. $tick,0,$out
172 stwx $tick,0,$out
173 addi $out,$out,4 # ++$out
174 bdnz Loop
175
176 mr r3,$cnt
177 blr
67150340
AP
178 .long 0
179 .byte 0,12,0x14,0,0,0,2,0
180 .long 0
d6019e16 181.size .OPENSSL_instrument_bus,.-.OPENSSL_instrument_bus
5fabb88a
AP
182
183.globl .OPENSSL_instrument_bus2
184.align 4
185.OPENSSL_instrument_bus2:
186 mr r0,$cnt
187 slwi $cnt,$cnt,2
188
189 mftb $lasttick # collect 1st tick
190 li $diff,0
191
192 dcbf 0,$out # flush cache line
193 lwarx $tick,0,$out # load and lock
194 add $tick,$tick,$diff
195 stwcx. $tick,0,$out
196 stwx $tick,0,$out
197
198 mftb $tick # collect 1st diff
199 sub $diff,$tick,$lasttick
200 mr $lasttick,$tick
201 mr $lastdiff,$diff
202Loop2:
203 dcbf 0,$out # flush cache line
204 lwarx $tick,0,$out # load and lock
205 add $tick,$tick,$diff
206 stwcx. $tick,0,$out
207 stwx $tick,0,$out
208
209 addic. $max,$max,-1
210 beq Ldone2
211
212 mftb $tick
213 sub $diff,$tick,$lasttick
214 mr $lasttick,$tick
215 cmplw 7,$diff,$lastdiff
216 mr $lastdiff,$diff
217
218 mfcr $tick # pull cr
219 not $tick,$tick # flip bits
220 rlwinm $tick,$tick,1,29,29 # isolate flipped eq bit and scale
221
222 sub. $cnt,$cnt,$tick # conditional --$cnt
223 add $out,$out,$tick # conditional ++$out
224 bne Loop2
225
226Ldone2:
227 srwi $cnt,$cnt,2
228 sub r3,r0,$cnt
229 blr
67150340
AP
230 .long 0
231 .byte 0,12,0x14,0,0,0,3,0
232 .long 0
d6019e16 233.size .OPENSSL_instrument_bus2,.-.OPENSSL_instrument_bus2
5fabb88a
AP
234___
235}
9c9c83cc
AP
236
237$code =~ s/\`([^\`]*)\`/eval $1/gem;
238print $code;
239close STDOUT;