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