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