]>
Commit | Line | Data |
---|---|---|
e0a65194 RS |
1 | #! /usr/bin/env perl |
2 | # Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. | |
3e181369 | 3 | # |
e0a65194 RS |
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 | |
3e181369 AP |
8 | |
9 | while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} | |
10 | open STDOUT,">$output"; | |
11 | ||
12 | $code.=<<___; | |
13 | .text | |
bd227733 AP |
14 | |
15 | .if .ASSEMBLER_VERSION<7000000 | |
16 | .asg 0,__TI_EABI__ | |
17 | .endif | |
904732f6 AP |
18 | .if __TI_EABI__ |
19 | .asg OPENSSL_rdtsc,_OPENSSL_rdtsc | |
20 | .asg OPENSSL_cleanse,_OPENSSL_cleanse | |
e33826f0 | 21 | .asg CRYPTO_memcmp,_CRYPTO_memcmp |
904732f6 AP |
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 | |
3e181369 AP |
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 | ||
e33826f0 AP |
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 | ||
3e181369 AP |
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 ; reassing 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; |