1 | #! /usr/bin/env perl
|
---|
2 | # Copyright 2012-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 | while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
|
---|
10 | open STDOUT,">$output";
|
---|
11 |
|
---|
12 | $code.=<<___;
|
---|
13 | .text
|
---|
14 |
|
---|
15 | .if .ASSEMBLER_VERSION<7000000
|
---|
16 | .asg 0,__TI_EABI__
|
---|
17 | .endif
|
---|
18 | .if __TI_EABI__
|
---|
19 | .asg OPENSSL_rdtsc,_OPENSSL_rdtsc
|
---|
20 | .asg OPENSSL_cleanse,_OPENSSL_cleanse
|
---|
21 | .asg CRYPTO_memcmp,_CRYPTO_memcmp
|
---|
22 | .asg OPENSSL_atomic_add,_OPENSSL_atomic_add
|
---|
23 | .asg OPENSSL_wipe_cpu,_OPENSSL_wipe_cpu
|
---|
24 | .asg OPENSSL_instrument_bus,_OPENSSL_instrument_bus
|
---|
25 | .asg OPENSSL_instrument_bus2,_OPENSSL_instrument_bus2
|
---|
26 | .endif
|
---|
27 |
|
---|
28 | .asg B3,RA
|
---|
29 |
|
---|
30 | .global _OPENSSL_rdtsc
|
---|
31 | _OPENSSL_rdtsc:
|
---|
32 | .asmfunc
|
---|
33 | B RA
|
---|
34 | MVC TSCL,B0
|
---|
35 | MVC TSCH,B1
|
---|
36 | [!B0] MVC B0,TSCL ; start TSC
|
---|
37 | MV B0,A4
|
---|
38 | MV B1,A5
|
---|
39 | .endasmfunc
|
---|
40 |
|
---|
41 | .global _OPENSSL_cleanse
|
---|
42 | _OPENSSL_cleanse:
|
---|
43 | .asmfunc
|
---|
44 | ZERO A3:A2
|
---|
45 | || ZERO B2
|
---|
46 | || SHRU B4,3,B0 ; is length >= 8
|
---|
47 | || ADD 1,A4,B6
|
---|
48 | [!B0] BNOP RA
|
---|
49 | || ZERO A1
|
---|
50 | || ZERO B1
|
---|
51 | [B0] MVC B0,ILC
|
---|
52 | ||[!B0] CMPLT 0,B4,A1
|
---|
53 | ||[!B0] CMPLT 1,B4,B1
|
---|
54 | [A1] STB A2,*A4++[2]
|
---|
55 | || [B1] STB B2,*B6++[2]
|
---|
56 | ||[!B0] CMPLT 2,B4,A1
|
---|
57 | ||[!B0] CMPLT 3,B4,B1
|
---|
58 | [A1] STB A2,*A4++[2]
|
---|
59 | || [B1] STB B2,*B6++[2]
|
---|
60 | ||[!B0] CMPLT 4,B4,A1
|
---|
61 | ||[!B0] CMPLT 5,B4,B1
|
---|
62 | [A1] STB A2,*A4++[2]
|
---|
63 | || [B1] STB B2,*B6++[2]
|
---|
64 | ||[!B0] CMPLT 6,B4,A1
|
---|
65 | [A1] STB A2,*A4++[2]
|
---|
66 |
|
---|
67 | SPLOOP 1
|
---|
68 | STNDW A3:A2,*A4++
|
---|
69 | || SUB B4,8,B4
|
---|
70 | SPKERNEL
|
---|
71 |
|
---|
72 | MV B4,B0 ; remaining bytes
|
---|
73 | || ADD 1,A4,B6
|
---|
74 | || BNOP RA
|
---|
75 | [B0] CMPLT 0,B0,A1
|
---|
76 | || [B0] CMPLT 1,B0,B1
|
---|
77 | [A1] STB A2,*A4++[2]
|
---|
78 | || [B1] STB B2,*B6++[2]
|
---|
79 | || [B0] CMPLT 2,B0,A1
|
---|
80 | || [B0] CMPLT 3,B0,B1
|
---|
81 | [A1] STB A2,*A4++[2]
|
---|
82 | || [B1] STB B2,*B6++[2]
|
---|
83 | || [B0] CMPLT 4,B0,A1
|
---|
84 | || [B0] CMPLT 5,B0,B1
|
---|
85 | [A1] STB A2,*A4++[2]
|
---|
86 | || [B1] STB B2,*B6++[2]
|
---|
87 | || [B0] CMPLT 6,B0,A1
|
---|
88 | [A1] STB A2,*A4++[2]
|
---|
89 | .endasmfunc
|
---|
90 |
|
---|
91 | .global _CRYPTO_memcmp
|
---|
92 | _CRYPTO_memcmp:
|
---|
93 | .asmfunc
|
---|
94 | MV A6,B0
|
---|
95 | [!B0] BNOP RA
|
---|
96 | ||[!B0] ZERO A4
|
---|
97 | [B0] MVC B0,ILC
|
---|
98 | || [B0] ZERO A0
|
---|
99 | NOP 4
|
---|
100 |
|
---|
101 | SPLOOP 1
|
---|
102 | LDBU *A4++,A1
|
---|
103 | || LDBU *B4++,B1
|
---|
104 | NOP 4
|
---|
105 | XOR.L B1,A1,A2
|
---|
106 | SPKERNEL 1,0
|
---|
107 | || OR.S A2,A0,A0
|
---|
108 |
|
---|
109 | BNOP RA,3
|
---|
110 | ZERO.L A4
|
---|
111 | [A0] MVK 1,A4
|
---|
112 | .endasmfunc
|
---|
113 |
|
---|
114 | .global _OPENSSL_atomic_add
|
---|
115 | _OPENSSL_atomic_add:
|
---|
116 | .asmfunc
|
---|
117 | MV A4,B0
|
---|
118 | atomic_add?:
|
---|
119 | LL *B0,B5
|
---|
120 | NOP 4
|
---|
121 | ADD B4,B5,B5
|
---|
122 | SL B5,*B0
|
---|
123 | CMTL *B0,B1
|
---|
124 | NOP 4
|
---|
125 | [!B1] B atomic_add?
|
---|
126 | [B1] BNOP RA,4
|
---|
127 | MV B5,A4
|
---|
128 | .endasmfunc
|
---|
129 |
|
---|
130 | .global _OPENSSL_wipe_cpu
|
---|
131 | _OPENSSL_wipe_cpu:
|
---|
132 | .asmfunc
|
---|
133 | ZERO A0
|
---|
134 | || ZERO B0
|
---|
135 | || ZERO A1
|
---|
136 | || ZERO B1
|
---|
137 | ZERO A3:A2
|
---|
138 | || MVD B0,B2
|
---|
139 | || ZERO A4
|
---|
140 | || ZERO B4
|
---|
141 | || ZERO A5
|
---|
142 | || ZERO B5
|
---|
143 | || BNOP RA
|
---|
144 | ZERO A7:A6
|
---|
145 | || ZERO B7:B6
|
---|
146 | || ZERO A8
|
---|
147 | || ZERO B8
|
---|
148 | || ZERO A9
|
---|
149 | || ZERO B9
|
---|
150 | ZERO A17:A16
|
---|
151 | || ZERO B17:B16
|
---|
152 | || ZERO A18
|
---|
153 | || ZERO B18
|
---|
154 | || ZERO A19
|
---|
155 | || ZERO B19
|
---|
156 | ZERO A21:A20
|
---|
157 | || ZERO B21:B20
|
---|
158 | || ZERO A22
|
---|
159 | || ZERO B22
|
---|
160 | || ZERO A23
|
---|
161 | || ZERO B23
|
---|
162 | ZERO A25:A24
|
---|
163 | || ZERO B25:B24
|
---|
164 | || ZERO A26
|
---|
165 | || ZERO B26
|
---|
166 | || ZERO A27
|
---|
167 | || ZERO B27
|
---|
168 | ZERO A29:A28
|
---|
169 | || ZERO B29:B28
|
---|
170 | || ZERO A30
|
---|
171 | || ZERO B30
|
---|
172 | || ZERO A31
|
---|
173 | || ZERO B31
|
---|
174 | .endasmfunc
|
---|
175 |
|
---|
176 | CLFLUSH .macro CONTROL,ADDR,LEN
|
---|
177 | B passthrough?
|
---|
178 | || STW ADDR,*CONTROL[0]
|
---|
179 | STW LEN,*CONTROL[1]
|
---|
180 | spinlock?:
|
---|
181 | LDW *CONTROL[1],A0
|
---|
182 | NOP 3
|
---|
183 | passthrough?:
|
---|
184 | NOP
|
---|
185 | [A0] BNOP spinlock?,5
|
---|
186 | .endm
|
---|
187 |
|
---|
188 | .global _OPENSSL_instrument_bus
|
---|
189 | _OPENSSL_instrument_bus:
|
---|
190 | .asmfunc
|
---|
191 | MV B4,B0 ; reassign sizeof(output)
|
---|
192 | || MV A4,B4 ; reassign output
|
---|
193 | || MVK 0x00004030,A3
|
---|
194 | MV B0,A4 ; return value
|
---|
195 | || MVK 1,A1
|
---|
196 | || MVKH 0x01840000,A3 ; L1DWIBAR
|
---|
197 | MVC TSCL,B8 ; collect 1st tick
|
---|
198 | || MVK 0x00004010,A5
|
---|
199 | MV B8,B9 ; lasttick = tick
|
---|
200 | || MVK 0,B7 ; lastdiff = 0
|
---|
201 | || MVKH 0x01840000,A5 ; L2WIBAR
|
---|
202 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
|
---|
203 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
|
---|
204 | LL *B4,B5
|
---|
205 | NOP 4
|
---|
206 | ADD B7,B5,B5
|
---|
207 | SL B5,*B4
|
---|
208 | CMTL *B4,B1
|
---|
209 | NOP 4
|
---|
210 | STW B5,*B4
|
---|
211 | bus_loop1?:
|
---|
212 | MVC TSCL,B8
|
---|
213 | || [B0] SUB B0,1,B0
|
---|
214 | SUB B8,B9,B7 ; lastdiff = tick - lasttick
|
---|
215 | || MV B8,B9 ; lasttick = tick
|
---|
216 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
|
---|
217 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
|
---|
218 | LL *B4,B5
|
---|
219 | NOP 4
|
---|
220 | ADD B7,B5,B5
|
---|
221 | SL B5,*B4
|
---|
222 | CMTL *B4,B1
|
---|
223 | STW B5,*B4 ; [!B1] is removed to flatten samples
|
---|
224 | || ADDK 4,B4
|
---|
225 | || [B0] BNOP bus_loop1?,5
|
---|
226 |
|
---|
227 | BNOP RA,5
|
---|
228 | .endasmfunc
|
---|
229 |
|
---|
230 | .global _OPENSSL_instrument_bus2
|
---|
231 | _OPENSSL_instrument_bus2:
|
---|
232 | .asmfunc
|
---|
233 | MV A6,B0 ; reassign max
|
---|
234 | || MV B4,A6 ; reassign sizeof(output)
|
---|
235 | || MVK 0x00004030,A3
|
---|
236 | MV A4,B4 ; reassign output
|
---|
237 | || MVK 0,A4 ; return value
|
---|
238 | || MVK 1,A1
|
---|
239 | || MVKH 0x01840000,A3 ; L1DWIBAR
|
---|
240 |
|
---|
241 | MVC TSCL,B8 ; collect 1st tick
|
---|
242 | || MVK 0x00004010,A5
|
---|
243 | MV B8,B9 ; lasttick = tick
|
---|
244 | || MVK 0,B7 ; lastdiff = 0
|
---|
245 | || MVKH 0x01840000,A5 ; L2WIBAR
|
---|
246 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
|
---|
247 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
|
---|
248 | LL *B4,B5
|
---|
249 | NOP 4
|
---|
250 | ADD B7,B5,B5
|
---|
251 | SL B5,*B4
|
---|
252 | CMTL *B4,B1
|
---|
253 | NOP 4
|
---|
254 | STW B5,*B4
|
---|
255 |
|
---|
256 | MVC TSCL,B8 ; collect 1st diff
|
---|
257 | SUB B8,B9,B7 ; lastdiff = tick - lasttick
|
---|
258 | || MV B8,B9 ; lasttick = tick
|
---|
259 | || SUB B0,1,B0
|
---|
260 | bus_loop2?:
|
---|
261 | CLFLUSH A3,B4,A1 ; write-back and invalidate L1D line
|
---|
262 | CLFLUSH A5,B4,A1 ; write-back and invalidate L2 line
|
---|
263 | LL *B4,B5
|
---|
264 | NOP 4
|
---|
265 | ADD B7,B5,B5
|
---|
266 | SL B5,*B4
|
---|
267 | CMTL *B4,B1
|
---|
268 | STW B5,*B4 ; [!B1] is removed to flatten samples
|
---|
269 | ||[!B0] BNOP bus_loop2_done?,2
|
---|
270 | || SUB B0,1,B0
|
---|
271 | MVC TSCL,B8
|
---|
272 | SUB B8,B9,B8
|
---|
273 | || MV B8,B9
|
---|
274 | CMPEQ B8,B7,B2
|
---|
275 | || MV B8,B7
|
---|
276 | [!B2] ADDAW B4,1,B4
|
---|
277 | ||[!B2] ADDK 1,A4
|
---|
278 | CMPEQ A4,A6,A2
|
---|
279 | [!A2] BNOP bus_loop2?,5
|
---|
280 |
|
---|
281 | bus_loop2_done?:
|
---|
282 | BNOP RA,5
|
---|
283 | .endasmfunc
|
---|
284 | ___
|
---|
285 |
|
---|
286 | print $code;
|
---|
287 | close STDOUT or die "error closing STDOUT: $!";
|
---|