VirtualBox

source: vbox/trunk/src/libs/openssl-1.1.1j/crypto/pariscid.pl@ 88461

Last change on this file since 88461 was 87984, checked in by vboxsync, 4 years ago

openssl-1.1.1j: Applied and adjusted our OpenSSL changes to 1.1.1j. bugref:9963

File size: 4.6 KB
Line 
1#! /usr/bin/env perl
2# Copyright 2009-2020 The OpenSSL Project Authors. All Rights Reserved.
3#
4# Licensed under the OpenSSL license (the "License"). You may not use
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
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
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
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{
97my $inp="%r26";
98my $len="%r25";
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
107 cmpib,*= 0,$len,L\$done
108 nop
109 cmpib,*>>= 15,$len,L\$ittle
110 ldi $SIZE_T-1,%r1
111
112L\$align
113 and,*<> $inp,%r1,%r28
114 b,n L\$aligned
115 stb %r0,0($inp)
116 ldo -1($len),$len
117 b L\$align
118 ldo 1($inp),$inp
119
120L\$aligned
121 andcm $len,%r1,%r28
122L\$ot
123 $ST %r0,0($inp)
124 addib,*<> -$SIZE_T,%r28,L\$ot
125 ldo $SIZE_T($inp),$inp
126
127 and,*<> $len,%r1,$len
128 b,n L\$done
129L\$ittle
130 stb %r0,0($inp)
131 addib,*<> -1,$len,L\$ittle
132 ldo 1($inp),$inp
133L\$done
134 bv ($rp)
135 .EXIT
136 nop
137 .PROCEND
138___
139}
140{
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
163 extru %r29,0,1,$rv
164L\$no_data
165 bv ($rp)
166 .EXIT
167 nop
168 .PROCEND
169___
170}
171{
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)
192L\$oop
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
202 addib,<> -1,$cnt,L\$oop
203 addi 4,$out,$out
204
205 bv ($rp)
206 .EXIT
207 sub $rv,$cnt,$rv
208 .PROCEND
209
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
231L\$oop2
232 copy $diff,$lastdiff
233 fdc 0($out)
234 ldw 0($out),$tick
235 add $diff,$tick,$tick
236 stw $tick,0($out)
237
238 addib,= -1,$max,L\$done2
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
249 addb,<> $tick,$cnt,L\$oop2
250 shladd,l $tick,2,$out,$out
251L\$done2
252 bv ($rp)
253 .EXIT
254 add $rv,$cnt,$rv
255 .PROCEND
256___
257}
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}
275close STDOUT or die "error closing STDOUT: $!";
276
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette