]>
Commit | Line | Data |
---|---|---|
4102950a CZ |
1 | ; WARNING: do not edit!\r |
2 | ; Generated from openssl/crypto/x86cpuid.pl\r | |
3 | ;\r | |
4 | ; Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.\r | |
5 | ;\r | |
6 | ; Licensed under the OpenSSL license (the "License"). You may not use\r | |
7 | ; this file except in compliance with the License. You can obtain a copy\r | |
8 | ; in the file LICENSE in the source distribution or at\r | |
9 | ; https://www.openssl.org/source/license.html\r | |
10 | \r | |
11 | %ifidn __OUTPUT_FORMAT__,obj\r | |
12 | section code use32 class=code align=64\r | |
13 | %elifidn __OUTPUT_FORMAT__,win32\r | |
14 | $@feat.00 equ 1\r | |
15 | section .text code align=64\r | |
16 | %else\r | |
17 | section .text code\r | |
18 | %endif\r | |
19 | global _OPENSSL_ia32_cpuid\r | |
20 | align 16\r | |
21 | _OPENSSL_ia32_cpuid:\r | |
22 | L$_OPENSSL_ia32_cpuid_begin:\r | |
23 | push ebp\r | |
24 | push ebx\r | |
25 | push esi\r | |
26 | push edi\r | |
27 | xor edx,edx\r | |
28 | pushfd\r | |
29 | pop eax\r | |
30 | mov ecx,eax\r | |
31 | xor eax,2097152\r | |
32 | push eax\r | |
33 | popfd\r | |
34 | pushfd\r | |
35 | pop eax\r | |
36 | xor ecx,eax\r | |
37 | xor eax,eax\r | |
38 | mov esi,DWORD [20+esp]\r | |
39 | mov DWORD [8+esi],eax\r | |
40 | bt ecx,21\r | |
41 | jnc NEAR L$000nocpuid\r | |
42 | cpuid\r | |
43 | mov edi,eax\r | |
44 | xor eax,eax\r | |
45 | cmp ebx,1970169159\r | |
46 | setne al\r | |
47 | mov ebp,eax\r | |
48 | cmp edx,1231384169\r | |
49 | setne al\r | |
50 | or ebp,eax\r | |
51 | cmp ecx,1818588270\r | |
52 | setne al\r | |
53 | or ebp,eax\r | |
54 | jz NEAR L$001intel\r | |
55 | cmp ebx,1752462657\r | |
56 | setne al\r | |
57 | mov esi,eax\r | |
58 | cmp edx,1769238117\r | |
59 | setne al\r | |
60 | or esi,eax\r | |
61 | cmp ecx,1145913699\r | |
62 | setne al\r | |
63 | or esi,eax\r | |
64 | jnz NEAR L$001intel\r | |
65 | mov eax,2147483648\r | |
66 | cpuid\r | |
67 | cmp eax,2147483649\r | |
68 | jb NEAR L$001intel\r | |
69 | mov esi,eax\r | |
70 | mov eax,2147483649\r | |
71 | cpuid\r | |
72 | or ebp,ecx\r | |
73 | and ebp,2049\r | |
74 | cmp esi,2147483656\r | |
75 | jb NEAR L$001intel\r | |
76 | mov eax,2147483656\r | |
77 | cpuid\r | |
78 | movzx esi,cl\r | |
79 | inc esi\r | |
80 | mov eax,1\r | |
81 | xor ecx,ecx\r | |
82 | cpuid\r | |
83 | bt edx,28\r | |
84 | jnc NEAR L$002generic\r | |
85 | shr ebx,16\r | |
86 | and ebx,255\r | |
87 | cmp ebx,esi\r | |
88 | ja NEAR L$002generic\r | |
89 | and edx,4026531839\r | |
90 | jmp NEAR L$002generic\r | |
91 | L$001intel:\r | |
92 | cmp edi,4\r | |
93 | mov esi,-1\r | |
94 | jb NEAR L$003nocacheinfo\r | |
95 | mov eax,4\r | |
96 | mov ecx,0\r | |
97 | cpuid\r | |
98 | mov esi,eax\r | |
99 | shr esi,14\r | |
100 | and esi,4095\r | |
101 | L$003nocacheinfo:\r | |
102 | mov eax,1\r | |
103 | xor ecx,ecx\r | |
104 | cpuid\r | |
105 | and edx,3220176895\r | |
106 | cmp ebp,0\r | |
107 | jne NEAR L$004notintel\r | |
108 | or edx,1073741824\r | |
109 | and ah,15\r | |
110 | cmp ah,15\r | |
111 | jne NEAR L$004notintel\r | |
112 | or edx,1048576\r | |
113 | L$004notintel:\r | |
114 | bt edx,28\r | |
115 | jnc NEAR L$002generic\r | |
116 | and edx,4026531839\r | |
117 | cmp esi,0\r | |
118 | je NEAR L$002generic\r | |
119 | or edx,268435456\r | |
120 | shr ebx,16\r | |
121 | cmp bl,1\r | |
122 | ja NEAR L$002generic\r | |
123 | and edx,4026531839\r | |
124 | L$002generic:\r | |
125 | and ebp,2048\r | |
126 | and ecx,4294965247\r | |
127 | mov esi,edx\r | |
128 | or ebp,ecx\r | |
129 | cmp edi,7\r | |
130 | mov edi,DWORD [20+esp]\r | |
131 | jb NEAR L$005no_extended_info\r | |
132 | mov eax,7\r | |
133 | xor ecx,ecx\r | |
134 | cpuid\r | |
135 | mov DWORD [8+edi],ebx\r | |
136 | L$005no_extended_info:\r | |
137 | bt ebp,27\r | |
138 | jnc NEAR L$006clear_avx\r | |
139 | xor ecx,ecx\r | |
140 | db 15,1,208\r | |
141 | and eax,6\r | |
142 | cmp eax,6\r | |
143 | je NEAR L$007done\r | |
144 | cmp eax,2\r | |
145 | je NEAR L$006clear_avx\r | |
146 | L$008clear_xmm:\r | |
147 | and ebp,4261412861\r | |
148 | and esi,4278190079\r | |
149 | L$006clear_avx:\r | |
150 | and ebp,4026525695\r | |
151 | and DWORD [8+edi],4294967263\r | |
152 | L$007done:\r | |
153 | mov eax,esi\r | |
154 | mov edx,ebp\r | |
155 | L$000nocpuid:\r | |
156 | pop edi\r | |
157 | pop esi\r | |
158 | pop ebx\r | |
159 | pop ebp\r | |
160 | ret\r | |
161 | ;extern _OPENSSL_ia32cap_P\r | |
162 | global _OPENSSL_rdtsc\r | |
163 | align 16\r | |
164 | _OPENSSL_rdtsc:\r | |
165 | L$_OPENSSL_rdtsc_begin:\r | |
166 | xor eax,eax\r | |
167 | xor edx,edx\r | |
168 | lea ecx,[_OPENSSL_ia32cap_P]\r | |
169 | bt DWORD [ecx],4\r | |
170 | jnc NEAR L$009notsc\r | |
171 | rdtsc\r | |
172 | L$009notsc:\r | |
173 | ret\r | |
174 | global _OPENSSL_instrument_halt\r | |
175 | align 16\r | |
176 | _OPENSSL_instrument_halt:\r | |
177 | L$_OPENSSL_instrument_halt_begin:\r | |
178 | lea ecx,[_OPENSSL_ia32cap_P]\r | |
179 | bt DWORD [ecx],4\r | |
180 | jnc NEAR L$010nohalt\r | |
181 | dd 2421723150\r | |
182 | and eax,3\r | |
183 | jnz NEAR L$010nohalt\r | |
184 | pushfd\r | |
185 | pop eax\r | |
186 | bt eax,9\r | |
187 | jnc NEAR L$010nohalt\r | |
188 | rdtsc\r | |
189 | push edx\r | |
190 | push eax\r | |
191 | hlt\r | |
192 | rdtsc\r | |
193 | sub eax,DWORD [esp]\r | |
194 | sbb edx,DWORD [4+esp]\r | |
195 | add esp,8\r | |
196 | ret\r | |
197 | L$010nohalt:\r | |
198 | xor eax,eax\r | |
199 | xor edx,edx\r | |
200 | ret\r | |
201 | global _OPENSSL_far_spin\r | |
202 | align 16\r | |
203 | _OPENSSL_far_spin:\r | |
204 | L$_OPENSSL_far_spin_begin:\r | |
205 | pushfd\r | |
206 | pop eax\r | |
207 | bt eax,9\r | |
208 | jnc NEAR L$011nospin\r | |
209 | mov eax,DWORD [4+esp]\r | |
210 | mov ecx,DWORD [8+esp]\r | |
211 | dd 2430111262\r | |
212 | xor eax,eax\r | |
213 | mov edx,DWORD [ecx]\r | |
214 | jmp NEAR L$012spin\r | |
215 | align 16\r | |
216 | L$012spin:\r | |
217 | inc eax\r | |
218 | cmp edx,DWORD [ecx]\r | |
219 | je NEAR L$012spin\r | |
220 | dd 529567888\r | |
221 | ret\r | |
222 | L$011nospin:\r | |
223 | xor eax,eax\r | |
224 | xor edx,edx\r | |
225 | ret\r | |
226 | global _OPENSSL_wipe_cpu\r | |
227 | align 16\r | |
228 | _OPENSSL_wipe_cpu:\r | |
229 | L$_OPENSSL_wipe_cpu_begin:\r | |
230 | xor eax,eax\r | |
231 | xor edx,edx\r | |
232 | lea ecx,[_OPENSSL_ia32cap_P]\r | |
233 | mov ecx,DWORD [ecx]\r | |
234 | bt DWORD [ecx],1\r | |
235 | jnc NEAR L$013no_x87\r | |
236 | dd 4007259865,4007259865,4007259865,4007259865,2430851995\r | |
237 | L$013no_x87:\r | |
238 | lea eax,[4+esp]\r | |
239 | ret\r | |
240 | global _OPENSSL_atomic_add\r | |
241 | align 16\r | |
242 | _OPENSSL_atomic_add:\r | |
243 | L$_OPENSSL_atomic_add_begin:\r | |
244 | mov edx,DWORD [4+esp]\r | |
245 | mov ecx,DWORD [8+esp]\r | |
246 | push ebx\r | |
247 | nop\r | |
248 | mov eax,DWORD [edx]\r | |
249 | L$014spin:\r | |
250 | lea ebx,[ecx*1+eax]\r | |
251 | nop\r | |
252 | dd 447811568\r | |
253 | jne NEAR L$014spin\r | |
254 | mov eax,ebx\r | |
255 | pop ebx\r | |
256 | ret\r | |
257 | global _OPENSSL_cleanse\r | |
258 | align 16\r | |
259 | _OPENSSL_cleanse:\r | |
260 | L$_OPENSSL_cleanse_begin:\r | |
261 | mov edx,DWORD [4+esp]\r | |
262 | mov ecx,DWORD [8+esp]\r | |
263 | xor eax,eax\r | |
264 | cmp ecx,7\r | |
265 | jae NEAR L$015lot\r | |
266 | cmp ecx,0\r | |
267 | je NEAR L$016ret\r | |
268 | L$017little:\r | |
269 | mov BYTE [edx],al\r | |
270 | sub ecx,1\r | |
271 | lea edx,[1+edx]\r | |
272 | jnz NEAR L$017little\r | |
273 | L$016ret:\r | |
274 | ret\r | |
275 | align 16\r | |
276 | L$015lot:\r | |
277 | test edx,3\r | |
278 | jz NEAR L$018aligned\r | |
279 | mov BYTE [edx],al\r | |
280 | lea ecx,[ecx-1]\r | |
281 | lea edx,[1+edx]\r | |
282 | jmp NEAR L$015lot\r | |
283 | L$018aligned:\r | |
284 | mov DWORD [edx],eax\r | |
285 | lea ecx,[ecx-4]\r | |
286 | test ecx,-4\r | |
287 | lea edx,[4+edx]\r | |
288 | jnz NEAR L$018aligned\r | |
289 | cmp ecx,0\r | |
290 | jne NEAR L$017little\r | |
291 | ret\r | |
292 | global _CRYPTO_memcmp\r | |
293 | align 16\r | |
294 | _CRYPTO_memcmp:\r | |
295 | L$_CRYPTO_memcmp_begin:\r | |
296 | push esi\r | |
297 | push edi\r | |
298 | mov esi,DWORD [12+esp]\r | |
299 | mov edi,DWORD [16+esp]\r | |
300 | mov ecx,DWORD [20+esp]\r | |
301 | xor eax,eax\r | |
302 | xor edx,edx\r | |
303 | cmp ecx,0\r | |
304 | je NEAR L$019no_data\r | |
305 | L$020loop:\r | |
306 | mov dl,BYTE [esi]\r | |
307 | lea esi,[1+esi]\r | |
308 | xor dl,BYTE [edi]\r | |
309 | lea edi,[1+edi]\r | |
310 | or al,dl\r | |
311 | dec ecx\r | |
312 | jnz NEAR L$020loop\r | |
313 | neg eax\r | |
314 | shr eax,31\r | |
315 | L$019no_data:\r | |
316 | pop edi\r | |
317 | pop esi\r | |
318 | ret\r | |
319 | global _OPENSSL_instrument_bus\r | |
320 | align 16\r | |
321 | _OPENSSL_instrument_bus:\r | |
322 | L$_OPENSSL_instrument_bus_begin:\r | |
323 | push ebp\r | |
324 | push ebx\r | |
325 | push esi\r | |
326 | push edi\r | |
327 | mov eax,0\r | |
328 | pop edi\r | |
329 | pop esi\r | |
330 | pop ebx\r | |
331 | pop ebp\r | |
332 | ret\r | |
333 | global _OPENSSL_instrument_bus2\r | |
334 | align 16\r | |
335 | _OPENSSL_instrument_bus2:\r | |
336 | L$_OPENSSL_instrument_bus2_begin:\r | |
337 | push ebp\r | |
338 | push ebx\r | |
339 | push esi\r | |
340 | push edi\r | |
341 | mov eax,0\r | |
342 | pop edi\r | |
343 | pop esi\r | |
344 | pop ebx\r | |
345 | pop ebp\r | |
346 | ret\r | |
347 | global _OPENSSL_ia32_rdrand_bytes\r | |
348 | align 16\r | |
349 | _OPENSSL_ia32_rdrand_bytes:\r | |
350 | L$_OPENSSL_ia32_rdrand_bytes_begin:\r | |
351 | push edi\r | |
352 | push ebx\r | |
353 | xor eax,eax\r | |
354 | mov edi,DWORD [12+esp]\r | |
355 | mov ebx,DWORD [16+esp]\r | |
356 | cmp ebx,0\r | |
357 | je NEAR L$021done\r | |
358 | mov ecx,8\r | |
359 | L$022loop:\r | |
360 | db 15,199,242\r | |
361 | jc NEAR L$023break\r | |
362 | loop L$022loop\r | |
363 | jmp NEAR L$021done\r | |
364 | align 16\r | |
365 | L$023break:\r | |
366 | cmp ebx,4\r | |
367 | jb NEAR L$024tail\r | |
368 | mov DWORD [edi],edx\r | |
369 | lea edi,[4+edi]\r | |
370 | add eax,4\r | |
371 | sub ebx,4\r | |
372 | jz NEAR L$021done\r | |
373 | mov ecx,8\r | |
374 | jmp NEAR L$022loop\r | |
375 | align 16\r | |
376 | L$024tail:\r | |
377 | mov BYTE [edi],dl\r | |
378 | lea edi,[1+edi]\r | |
379 | inc eax\r | |
380 | shr edx,8\r | |
381 | dec ebx\r | |
382 | jnz NEAR L$024tail\r | |
383 | L$021done:\r | |
384 | xor edx,edx\r | |
385 | pop ebx\r | |
386 | pop edi\r | |
387 | ret\r | |
388 | global _OPENSSL_ia32_rdseed_bytes\r | |
389 | align 16\r | |
390 | _OPENSSL_ia32_rdseed_bytes:\r | |
391 | L$_OPENSSL_ia32_rdseed_bytes_begin:\r | |
392 | push edi\r | |
393 | push ebx\r | |
394 | xor eax,eax\r | |
395 | mov edi,DWORD [12+esp]\r | |
396 | mov ebx,DWORD [16+esp]\r | |
397 | cmp ebx,0\r | |
398 | je NEAR L$025done\r | |
399 | mov ecx,8\r | |
400 | L$026loop:\r | |
401 | db 15,199,250\r | |
402 | jc NEAR L$027break\r | |
403 | loop L$026loop\r | |
404 | jmp NEAR L$025done\r | |
405 | align 16\r | |
406 | L$027break:\r | |
407 | cmp ebx,4\r | |
408 | jb NEAR L$028tail\r | |
409 | mov DWORD [edi],edx\r | |
410 | lea edi,[4+edi]\r | |
411 | add eax,4\r | |
412 | sub ebx,4\r | |
413 | jz NEAR L$025done\r | |
414 | mov ecx,8\r | |
415 | jmp NEAR L$026loop\r | |
416 | align 16\r | |
417 | L$028tail:\r | |
418 | mov BYTE [edi],dl\r | |
419 | lea edi,[1+edi]\r | |
420 | inc eax\r | |
421 | shr edx,8\r | |
422 | dec ebx\r | |
423 | jnz NEAR L$028tail\r | |
424 | L$025done:\r | |
425 | xor edx,edx\r | |
426 | pop ebx\r | |
427 | pop edi\r | |
428 | ret\r | |
429 | segment .bss\r | |
430 | common _OPENSSL_ia32cap_P 16\r | |
431 | segment .CRT$XCU data align=4\r | |
432 | extern _OPENSSL_cpuid_setup\r | |
433 | dd _OPENSSL_cpuid_setup\r |