]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/alphacpuid.pl
Fix intermittent sslapitest early data related failures
[thirdparty/openssl.git] / crypto / alphacpuid.pl
1 #! /usr/bin/env perl
2 # Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved.
3 #
4 # Licensed under the Apache License 2.0 (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 $output = pop;
11 open STDOUT,">$output";
12
13 print <<'___';
14 .text
15
16 .set noat
17
18 .globl OPENSSL_cpuid_setup
19 .ent OPENSSL_cpuid_setup
20 OPENSSL_cpuid_setup:
21 .frame $30,0,$26
22 .prologue 0
23 ret ($26)
24 .end OPENSSL_cpuid_setup
25
26 .globl OPENSSL_wipe_cpu
27 .ent OPENSSL_wipe_cpu
28 OPENSSL_wipe_cpu:
29 .frame $30,0,$26
30 .prologue 0
31 clr $1
32 clr $2
33 clr $3
34 clr $4
35 clr $5
36 clr $6
37 clr $7
38 clr $8
39 clr $16
40 clr $17
41 clr $18
42 clr $19
43 clr $20
44 clr $21
45 clr $22
46 clr $23
47 clr $24
48 clr $25
49 clr $27
50 clr $at
51 clr $29
52 fclr $f0
53 fclr $f1
54 fclr $f10
55 fclr $f11
56 fclr $f12
57 fclr $f13
58 fclr $f14
59 fclr $f15
60 fclr $f16
61 fclr $f17
62 fclr $f18
63 fclr $f19
64 fclr $f20
65 fclr $f21
66 fclr $f22
67 fclr $f23
68 fclr $f24
69 fclr $f25
70 fclr $f26
71 fclr $f27
72 fclr $f28
73 fclr $f29
74 fclr $f30
75 mov $sp,$0
76 ret ($26)
77 .end OPENSSL_wipe_cpu
78
79 .globl OPENSSL_atomic_add
80 .ent OPENSSL_atomic_add
81 OPENSSL_atomic_add:
82 .frame $30,0,$26
83 .prologue 0
84 1: ldl_l $0,0($16)
85 addl $0,$17,$1
86 stl_c $1,0($16)
87 beq $1,1b
88 addl $0,$17,$0
89 ret ($26)
90 .end OPENSSL_atomic_add
91
92 .globl OPENSSL_rdtsc
93 .ent OPENSSL_rdtsc
94 OPENSSL_rdtsc:
95 .frame $30,0,$26
96 .prologue 0
97 rpcc $0
98 ret ($26)
99 .end OPENSSL_rdtsc
100
101 .globl OPENSSL_cleanse
102 .ent OPENSSL_cleanse
103 OPENSSL_cleanse:
104 .frame $30,0,$26
105 .prologue 0
106 beq $17,.Ldone
107 and $16,7,$0
108 bic $17,7,$at
109 beq $at,.Little
110 beq $0,.Laligned
111
112 .Little:
113 subq $0,8,$0
114 ldq_u $1,0($16)
115 mov $16,$2
116 .Lalign:
117 mskbl $1,$16,$1
118 lda $16,1($16)
119 subq $17,1,$17
120 addq $0,1,$0
121 beq $17,.Lout
122 bne $0,.Lalign
123 .Lout: stq_u $1,0($2)
124 beq $17,.Ldone
125 bic $17,7,$at
126 beq $at,.Little
127
128 .Laligned:
129 stq $31,0($16)
130 subq $17,8,$17
131 lda $16,8($16)
132 bic $17,7,$at
133 bne $at,.Laligned
134 bne $17,.Little
135 .Ldone: ret ($26)
136 .end OPENSSL_cleanse
137
138 .globl CRYPTO_memcmp
139 .ent CRYPTO_memcmp
140 CRYPTO_memcmp:
141 .frame $30,0,$26
142 .prologue 0
143 xor $0,$0,$0
144 beq $18,.Lno_data
145
146 xor $1,$1,$1
147 nop
148 .Loop_cmp:
149 ldq_u $2,0($16)
150 subq $18,1,$18
151 ldq_u $3,0($17)
152 extbl $2,$16,$2
153 lda $16,1($16)
154 extbl $3,$17,$3
155 lda $17,1($17)
156 xor $3,$2,$2
157 or $2,$0,$0
158 bne $18,.Loop_cmp
159
160 subq $31,$0,$0
161 srl $0,63,$0
162 .Lno_data:
163 ret ($26)
164 .end CRYPTO_memcmp
165 ___
166 {
167 my ($out,$cnt,$max)=("\$16","\$17","\$18");
168 my ($tick,$lasttick)=("\$19","\$20");
169 my ($diff,$lastdiff)=("\$21","\$22");
170 my ($v0,$ra,$sp,$zero)=("\$0","\$26","\$30","\$31");
171
172 print <<___;
173 .globl OPENSSL_instrument_bus
174 .ent OPENSSL_instrument_bus
175 OPENSSL_instrument_bus:
176 .frame $sp,0,$ra
177 .prologue 0
178 mov $cnt,$v0
179
180 rpcc $lasttick
181 mov 0,$diff
182
183 ecb ($out)
184 ldl_l $tick,0($out)
185 addl $diff,$tick,$tick
186 mov $tick,$diff
187 stl_c $tick,0($out)
188 stl $diff,0($out)
189
190 .Loop: rpcc $tick
191 subq $tick,$lasttick,$diff
192 mov $tick,$lasttick
193
194 ecb ($out)
195 ldl_l $tick,0($out)
196 addl $diff,$tick,$tick
197 mov $tick,$diff
198 stl_c $tick,0($out)
199 stl $diff,0($out)
200
201 subl $cnt,1,$cnt
202 lda $out,4($out)
203 bne $cnt,.Loop
204
205 ret ($ra)
206 .end OPENSSL_instrument_bus
207
208 .globl OPENSSL_instrument_bus2
209 .ent OPENSSL_instrument_bus2
210 OPENSSL_instrument_bus2:
211 .frame $sp,0,$ra
212 .prologue 0
213 mov $cnt,$v0
214
215 rpcc $lasttick
216 mov 0,$diff
217
218 ecb ($out)
219 ldl_l $tick,0($out)
220 addl $diff,$tick,$tick
221 mov $tick,$diff
222 stl_c $tick,0($out)
223 stl $diff,0($out)
224
225 rpcc $tick
226 subq $tick,$lasttick,$diff
227 mov $tick,$lasttick
228 mov $diff,$lastdiff
229 .Loop2:
230 ecb ($out)
231 ldl_l $tick,0($out)
232 addl $diff,$tick,$tick
233 mov $tick,$diff
234 stl_c $tick,0($out)
235 stl $diff,0($out)
236
237 subl $max,1,$max
238 beq $max,.Ldone2
239
240 rpcc $tick
241 subq $tick,$lasttick,$diff
242 mov $tick,$lasttick
243 subq $lastdiff,$diff,$tick
244 mov $diff,$lastdiff
245 cmovne $tick,1,$tick
246 subl $cnt,$tick,$cnt
247 s4addq $tick,$out,$out
248 bne $cnt,.Loop2
249
250 .Ldone2:
251 subl $v0,$cnt,$v0
252 ret ($ra)
253 .end OPENSSL_instrument_bus2
254 ___
255 }
256
257 close STDOUT;