]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/pariscid.pl
Add EVP_CIPHER_do_all_ex() and EVP_MD_do_all_ex()
[thirdparty/openssl.git] / crypto / pariscid.pl
CommitLineData
e0a65194 1#! /usr/bin/env perl
c4d3c19b 2# Copyright 2009-2018 The OpenSSL Project Authors. All Rights Reserved.
e0a65194 3#
0e9725bc 4# Licensed under the Apache License 2.0 (the "License"). You may not use
e0a65194
RS
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
8
cb3b9b13
AP
9
10$flavour = shift;
11$output = shift;
12open STDOUT,">$output";
13
14if ($flavour =~ /64/) {
15 $LEVEL ="2.0W";
16 $SIZE_T =8;
17 $ST ="std";
18} else {
19 $LEVEL ="1.1";
20 $SIZE_T =4;
21 $ST ="stw";
22}
23
24$rp="%r2";
25$sp="%r30";
26$rv="%r28";
27
28$code=<<___;
29 .LEVEL $LEVEL
30 .SPACE \$TEXT\$
31 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
32
3fc2efd2
AP
33 .EXPORT OPENSSL_cpuid_setup,ENTRY
34 .ALIGN 8
35OPENSSL_cpuid_setup
36 .PROC
37 .CALLINFO NO_CALLS
38 .ENTRY
39 bv ($rp)
40 .EXIT
41 nop
42 .PROCEND
43
cb3b9b13
AP
44 .EXPORT OPENSSL_rdtsc,ENTRY
45 .ALIGN 8
46OPENSSL_rdtsc
47 .PROC
48 .CALLINFO NO_CALLS
49 .ENTRY
50 mfctl %cr16,$rv
51 bv ($rp)
52 .EXIT
53 nop
54 .PROCEND
55
56 .EXPORT OPENSSL_wipe_cpu,ENTRY
57 .ALIGN 8
58OPENSSL_wipe_cpu
59 .PROC
60 .CALLINFO NO_CALLS
61 .ENTRY
62 xor %r0,%r0,%r1
63 fcpy,dbl %fr0,%fr4
64 xor %r0,%r0,%r19
65 fcpy,dbl %fr0,%fr5
66 xor %r0,%r0,%r20
67 fcpy,dbl %fr0,%fr6
68 xor %r0,%r0,%r21
69 fcpy,dbl %fr0,%fr7
70 xor %r0,%r0,%r22
71 fcpy,dbl %fr0,%fr8
72 xor %r0,%r0,%r23
73 fcpy,dbl %fr0,%fr9
74 xor %r0,%r0,%r24
75 fcpy,dbl %fr0,%fr10
76 xor %r0,%r0,%r25
77 fcpy,dbl %fr0,%fr11
78 xor %r0,%r0,%r26
79 fcpy,dbl %fr0,%fr22
80 xor %r0,%r0,%r29
81 fcpy,dbl %fr0,%fr23
82 xor %r0,%r0,%r31
83 fcpy,dbl %fr0,%fr24
84 fcpy,dbl %fr0,%fr25
85 fcpy,dbl %fr0,%fr26
86 fcpy,dbl %fr0,%fr27
87 fcpy,dbl %fr0,%fr28
88 fcpy,dbl %fr0,%fr29
89 fcpy,dbl %fr0,%fr30
90 fcpy,dbl %fr0,%fr31
91 bv ($rp)
92 .EXIT
93 ldo 0($sp),$rv
94 .PROCEND
95___
96{
5fabb88a
AP
97my $inp="%r26";
98my $len="%r25";
cb3b9b13
AP
99
100$code.=<<___;
101 .EXPORT OPENSSL_cleanse,ENTRY,ARGW0=GR,ARGW1=GR
102 .ALIGN 8
103OPENSSL_cleanse
104 .PROC
105 .CALLINFO NO_CALLS
106 .ENTRY
02450ec6 107 cmpib,*= 0,$len,L\$done
82a66ce3 108 nop
02450ec6 109 cmpib,*>>= 15,$len,L\$ittle
cb3b9b13
AP
110 ldi $SIZE_T-1,%r1
111
02450ec6 112L\$align
cb3b9b13 113 and,*<> $inp,%r1,%r28
02450ec6 114 b,n L\$aligned
cb3b9b13
AP
115 stb %r0,0($inp)
116 ldo -1($len),$len
02450ec6 117 b L\$align
cb3b9b13
AP
118 ldo 1($inp),$inp
119
02450ec6 120L\$aligned
cb3b9b13 121 andcm $len,%r1,%r28
02450ec6 122L\$ot
cb3b9b13 123 $ST %r0,0($inp)
02450ec6 124 addib,*<> -$SIZE_T,%r28,L\$ot
cb3b9b13
AP
125 ldo $SIZE_T($inp),$inp
126
127 and,*<> $len,%r1,$len
02450ec6
AP
128 b,n L\$done
129L\$ittle
cb3b9b13 130 stb %r0,0($inp)
02450ec6 131 addib,*<> -1,$len,L\$ittle
cb3b9b13 132 ldo 1($inp),$inp
02450ec6 133L\$done
cb3b9b13
AP
134 bv ($rp)
135 .EXIT
136 nop
137 .PROCEND
138___
139}
5fabb88a 140{
e33826f0
AP
141my ($in1,$in2,$len)=("%r26","%r25","%r24");
142
143$code.=<<___;
144 .EXPORT CRYPTO_memcmp,ENTRY,ARGW0=GR,ARGW1=GR,ARGW1=GR
145 .ALIGN 8
146CRYPTO_memcmp
147 .PROC
148 .CALLINFO NO_CALLS
149 .ENTRY
150 cmpib,*= 0,$len,L\$no_data
151 xor $rv,$rv,$rv
152
153L\$oop_cmp
154 ldb 0($in1),%r19
155 ldb 0($in2),%r20
156 ldo 1($in1),$in1
157 ldo 1($in2),$in2
158 xor %r19,%r20,%r29
159 addib,*<> -1,$len,L\$oop_cmp
160 or %r29,$rv,$rv
161
162 sub %r0,$rv,%r29
0b020b14 163 extru %r29,0,1,$rv
e33826f0
AP
164L\$no_data
165 bv ($rp)
166 .EXIT
167 nop
168 .PROCEND
169___
170}
171{
5fabb88a
AP
172my ($out,$cnt,$max)=("%r26","%r25","%r24");
173my ($tick,$lasttick)=("%r23","%r22");
174my ($diff,$lastdiff)=("%r21","%r20");
175
176$code.=<<___;
177 .EXPORT OPENSSL_instrument_bus,ENTRY,ARGW0=GR,ARGW1=GR
178 .ALIGN 8
179OPENSSL_instrument_bus
180 .PROC
181 .CALLINFO NO_CALLS
182 .ENTRY
183 copy $cnt,$rv
184 mfctl %cr16,$tick
185 copy $tick,$lasttick
186 ldi 0,$diff
187
188 fdc 0($out)
189 ldw 0($out),$tick
190 add $diff,$tick,$tick
191 stw $tick,0($out)
02450ec6 192L\$oop
5fabb88a
AP
193 mfctl %cr16,$tick
194 sub $tick,$lasttick,$diff
195 copy $tick,$lasttick
196
197 fdc 0($out)
198 ldw 0($out),$tick
199 add $diff,$tick,$tick
200 stw $tick,0($out)
201
02450ec6 202 addib,<> -1,$cnt,L\$oop
5fabb88a
AP
203 addi 4,$out,$out
204
205 bv ($rp)
206 .EXIT
207 sub $rv,$cnt,$rv
208 .PROCEND
cb3b9b13 209
5fabb88a
AP
210 .EXPORT OPENSSL_instrument_bus2,ENTRY,ARGW0=GR,ARGW1=GR
211 .ALIGN 8
212OPENSSL_instrument_bus2
213 .PROC
214 .CALLINFO NO_CALLS
215 .ENTRY
216 copy $cnt,$rv
217 sub %r0,$cnt,$cnt
218
219 mfctl %cr16,$tick
220 copy $tick,$lasttick
221 ldi 0,$diff
222
223 fdc 0($out)
224 ldw 0($out),$tick
225 add $diff,$tick,$tick
226 stw $tick,0($out)
227
228 mfctl %cr16,$tick
229 sub $tick,$lasttick,$diff
230 copy $tick,$lasttick
02450ec6 231L\$oop2
5fabb88a
AP
232 copy $diff,$lastdiff
233 fdc 0($out)
234 ldw 0($out),$tick
235 add $diff,$tick,$tick
236 stw $tick,0($out)
237
02450ec6 238 addib,= -1,$max,L\$done2
5fabb88a
AP
239 nop
240
241 mfctl %cr16,$tick
242 sub $tick,$lasttick,$diff
243 copy $tick,$lasttick
244 cmpclr,<> $lastdiff,$diff,$tick
245 ldi 1,$tick
246
247 ldi 1,%r1
248 xor %r1,$tick,$tick
02450ec6 249 addb,<> $tick,$cnt,L\$oop2
5fabb88a 250 shladd,l $tick,2,$out,$out
02450ec6 251L\$done2
5fabb88a
AP
252 bv ($rp)
253 .EXIT
254 add $rv,$cnt,$rv
255 .PROCEND
256___
257}
1753d123
AP
258
259if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
260 =~ /GNU assembler/) {
261 $gnuas = 1;
262}
263
264foreach(split("\n",$code)) {
265
266 s/(\.LEVEL\s+2\.0)W/$1w/ if ($gnuas && $SIZE_T==8);
267 s/\.SPACE\s+\$TEXT\$/.text/ if ($gnuas && $SIZE_T==8);
268 s/\.SUBSPA.*// if ($gnuas && $SIZE_T==8);
269 s/cmpib,\*/comib,/ if ($SIZE_T==4);
270 s/,\*/,/ if ($SIZE_T==4);
271 s/\bbv\b/bve/ if ($SIZE_T==8);
272
273 print $_,"\n";
274}
cb3b9b13
AP
275close STDOUT;
276