VirtualBox

source: vbox/trunk/src/libs/openssl-1.1.0g/crypto/genasm-nasm/x86cpuid.S@ 69881

Last change on this file since 69881 was 69881, checked in by vboxsync, 7 years ago

Update OpenSSL to 1.1.0g.
bugref:8070: src/libs maintenance

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

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette