]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Library/OpensslLib/IA32/crypto/x86cpuid.nasm
CryptoPkg/OpensslLib: Commit the auto-generated assembly files for IA32
[mirror_edk2.git] / CryptoPkg / Library / OpensslLib / IA32 / crypto / x86cpuid.nasm
CommitLineData
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
12section code use32 class=code align=64\r
13%elifidn __OUTPUT_FORMAT__,win32\r
14$@feat.00 equ 1\r
15section .text code align=64\r
16%else\r
17section .text code\r
18%endif\r
19global _OPENSSL_ia32_cpuid\r
20align 16\r
21_OPENSSL_ia32_cpuid:\r
22L$_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
91L$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
101L$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
113L$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
124L$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
136L$005no_extended_info:\r
137 bt ebp,27\r
138 jnc NEAR L$006clear_avx\r
139 xor ecx,ecx\r
140db 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
146L$008clear_xmm:\r
147 and ebp,4261412861\r
148 and esi,4278190079\r
149L$006clear_avx:\r
150 and ebp,4026525695\r
151 and DWORD [8+edi],4294967263\r
152L$007done:\r
153 mov eax,esi\r
154 mov edx,ebp\r
155L$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
162global _OPENSSL_rdtsc\r
163align 16\r
164_OPENSSL_rdtsc:\r
165L$_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
172L$009notsc:\r
173 ret\r
174global _OPENSSL_instrument_halt\r
175align 16\r
176_OPENSSL_instrument_halt:\r
177L$_OPENSSL_instrument_halt_begin:\r
178 lea ecx,[_OPENSSL_ia32cap_P]\r
179 bt DWORD [ecx],4\r
180 jnc NEAR L$010nohalt\r
181dd 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
197L$010nohalt:\r
198 xor eax,eax\r
199 xor edx,edx\r
200 ret\r
201global _OPENSSL_far_spin\r
202align 16\r
203_OPENSSL_far_spin:\r
204L$_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
211dd 2430111262\r
212 xor eax,eax\r
213 mov edx,DWORD [ecx]\r
214 jmp NEAR L$012spin\r
215align 16\r
216L$012spin:\r
217 inc eax\r
218 cmp edx,DWORD [ecx]\r
219 je NEAR L$012spin\r
220dd 529567888\r
221 ret\r
222L$011nospin:\r
223 xor eax,eax\r
224 xor edx,edx\r
225 ret\r
226global _OPENSSL_wipe_cpu\r
227align 16\r
228_OPENSSL_wipe_cpu:\r
229L$_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
236dd 4007259865,4007259865,4007259865,4007259865,2430851995\r
237L$013no_x87:\r
238 lea eax,[4+esp]\r
239 ret\r
240global _OPENSSL_atomic_add\r
241align 16\r
242_OPENSSL_atomic_add:\r
243L$_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
249L$014spin:\r
250 lea ebx,[ecx*1+eax]\r
251 nop\r
252dd 447811568\r
253 jne NEAR L$014spin\r
254 mov eax,ebx\r
255 pop ebx\r
256 ret\r
257global _OPENSSL_cleanse\r
258align 16\r
259_OPENSSL_cleanse:\r
260L$_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
268L$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
273L$016ret:\r
274 ret\r
275align 16\r
276L$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
283L$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
292global _CRYPTO_memcmp\r
293align 16\r
294_CRYPTO_memcmp:\r
295L$_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
305L$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
315L$019no_data:\r
316 pop edi\r
317 pop esi\r
318 ret\r
319global _OPENSSL_instrument_bus\r
320align 16\r
321_OPENSSL_instrument_bus:\r
322L$_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
333global _OPENSSL_instrument_bus2\r
334align 16\r
335_OPENSSL_instrument_bus2:\r
336L$_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
347global _OPENSSL_ia32_rdrand_bytes\r
348align 16\r
349_OPENSSL_ia32_rdrand_bytes:\r
350L$_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
359L$022loop:\r
360db 15,199,242\r
361 jc NEAR L$023break\r
362 loop L$022loop\r
363 jmp NEAR L$021done\r
364align 16\r
365L$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
375align 16\r
376L$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
383L$021done:\r
384 xor edx,edx\r
385 pop ebx\r
386 pop edi\r
387 ret\r
388global _OPENSSL_ia32_rdseed_bytes\r
389align 16\r
390_OPENSSL_ia32_rdseed_bytes:\r
391L$_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
400L$026loop:\r
401db 15,199,250\r
402 jc NEAR L$027break\r
403 loop L$026loop\r
404 jmp NEAR L$025done\r
405align 16\r
406L$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
416align 16\r
417L$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
424L$025done:\r
425 xor edx,edx\r
426 pop ebx\r
427 pop edi\r
428 ret\r
429segment .bss\r
430common _OPENSSL_ia32cap_P 16\r
431segment .CRT$XCU data align=4\r
432extern _OPENSSL_cpuid_setup\r
433dd _OPENSSL_cpuid_setup\r