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