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