1 | #! /usr/bin/env perl
|
---|
2 | # Copyright 2010-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 | $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 or die "error closing STDOUT: $!";
|
---|