VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.1/crypto/genasm-macosx/x86_64cpuid.S@ 94081

Last change on this file since 94081 was 83531, checked in by vboxsync, 4 years ago

setting svn:sync-process=export for openssl-1.1.1f, all files except tests

File size: 6.5 KB
Line 
1
2.private_extern _OPENSSL_cpuid_setup
3.mod_init_func
4 .p2align 3
5 .quad _OPENSSL_cpuid_setup
6
7.private_extern _OPENSSL_ia32cap_P
8.comm _OPENSSL_ia32cap_P,16,2
9
10.text
11
12.globl _OPENSSL_atomic_add
13
14.p2align 4
15_OPENSSL_atomic_add:
16 movl (%rdi),%eax
17L$spin: leaq (%rsi,%rax,1),%r8
18.byte 0xf0
19 cmpxchgl %r8d,(%rdi)
20 jne L$spin
21 movl %r8d,%eax
22.byte 0x48,0x98
23 .byte 0xf3,0xc3
24
25
26.globl _OPENSSL_rdtsc
27
28.p2align 4
29_OPENSSL_rdtsc:
30 rdtsc
31 shlq $32,%rdx
32 orq %rdx,%rax
33 .byte 0xf3,0xc3
34
35
36.globl _OPENSSL_ia32_cpuid
37
38.p2align 4
39_OPENSSL_ia32_cpuid:
40
41 movq %rbx,%r8
42
43
44 xorl %eax,%eax
45 movq %rax,8(%rdi)
46 cpuid
47 movl %eax,%r11d
48
49 xorl %eax,%eax
50 cmpl $0x756e6547,%ebx
51 setne %al
52 movl %eax,%r9d
53 cmpl $0x49656e69,%edx
54 setne %al
55 orl %eax,%r9d
56 cmpl $0x6c65746e,%ecx
57 setne %al
58 orl %eax,%r9d
59 jz L$intel
60
61 cmpl $0x68747541,%ebx
62 setne %al
63 movl %eax,%r10d
64 cmpl $0x69746E65,%edx
65 setne %al
66 orl %eax,%r10d
67 cmpl $0x444D4163,%ecx
68 setne %al
69 orl %eax,%r10d
70 jnz L$intel
71
72
73 movl $0x80000000,%eax
74 cpuid
75 cmpl $0x80000001,%eax
76 jb L$intel
77 movl %eax,%r10d
78 movl $0x80000001,%eax
79 cpuid
80 orl %ecx,%r9d
81 andl $0x00000801,%r9d
82
83 cmpl $0x80000008,%r10d
84 jb L$intel
85
86 movl $0x80000008,%eax
87 cpuid
88 movzbq %cl,%r10
89 incq %r10
90
91 movl $1,%eax
92 cpuid
93 btl $28,%edx
94 jnc L$generic
95 shrl $16,%ebx
96 cmpb %r10b,%bl
97 ja L$generic
98 andl $0xefffffff,%edx
99 jmp L$generic
100
101L$intel:
102 cmpl $4,%r11d
103 movl $-1,%r10d
104 jb L$nocacheinfo
105
106 movl $4,%eax
107 movl $0,%ecx
108 cpuid
109 movl %eax,%r10d
110 shrl $14,%r10d
111 andl $0xfff,%r10d
112
113L$nocacheinfo:
114 movl $1,%eax
115 cpuid
116 movd %eax,%xmm0
117 andl $0xbfefffff,%edx
118 cmpl $0,%r9d
119 jne L$notintel
120 orl $0x40000000,%edx
121 andb $15,%ah
122 cmpb $15,%ah
123 jne L$notP4
124 orl $0x00100000,%edx
125L$notP4:
126 cmpb $6,%ah
127 jne L$notintel
128 andl $0x0fff0ff0,%eax
129 cmpl $0x00050670,%eax
130 je L$knights
131 cmpl $0x00080650,%eax
132 jne L$notintel
133L$knights:
134 andl $0xfbffffff,%ecx
135
136L$notintel:
137 btl $28,%edx
138 jnc L$generic
139 andl $0xefffffff,%edx
140 cmpl $0,%r10d
141 je L$generic
142
143 orl $0x10000000,%edx
144 shrl $16,%ebx
145 cmpb $1,%bl
146 ja L$generic
147 andl $0xefffffff,%edx
148L$generic:
149 andl $0x00000800,%r9d
150 andl $0xfffff7ff,%ecx
151 orl %ecx,%r9d
152
153 movl %edx,%r10d
154
155 cmpl $7,%r11d
156 jb L$no_extended_info
157 movl $7,%eax
158 xorl %ecx,%ecx
159 cpuid
160 btl $26,%r9d
161 jc L$notknights
162 andl $0xfff7ffff,%ebx
163L$notknights:
164 movd %xmm0,%eax
165 andl $0x0fff0ff0,%eax
166 cmpl $0x00050650,%eax
167 jne L$notskylakex
168 andl $0xfffeffff,%ebx
169
170L$notskylakex:
171 movl %ebx,8(%rdi)
172 movl %ecx,12(%rdi)
173L$no_extended_info:
174
175 btl $27,%r9d
176 jnc L$clear_avx
177 xorl %ecx,%ecx
178.byte 0x0f,0x01,0xd0
179 andl $0xe6,%eax
180 cmpl $0xe6,%eax
181 je L$done
182 andl $0x3fdeffff,8(%rdi)
183
184
185
186
187 andl $6,%eax
188 cmpl $6,%eax
189 je L$done
190L$clear_avx:
191 movl $0xefffe7ff,%eax
192 andl %eax,%r9d
193 movl $0x3fdeffdf,%eax
194 andl %eax,8(%rdi)
195L$done:
196 shlq $32,%r9
197 movl %r10d,%eax
198 movq %r8,%rbx
199
200 orq %r9,%rax
201 .byte 0xf3,0xc3
202
203
204
205.globl _OPENSSL_cleanse
206
207.p2align 4
208_OPENSSL_cleanse:
209 xorq %rax,%rax
210 cmpq $15,%rsi
211 jae L$ot
212 cmpq $0,%rsi
213 je L$ret
214L$ittle:
215 movb %al,(%rdi)
216 subq $1,%rsi
217 leaq 1(%rdi),%rdi
218 jnz L$ittle
219L$ret:
220 .byte 0xf3,0xc3
221.p2align 4
222L$ot:
223 testq $7,%rdi
224 jz L$aligned
225 movb %al,(%rdi)
226 leaq -1(%rsi),%rsi
227 leaq 1(%rdi),%rdi
228 jmp L$ot
229L$aligned:
230 movq %rax,(%rdi)
231 leaq -8(%rsi),%rsi
232 testq $-8,%rsi
233 leaq 8(%rdi),%rdi
234 jnz L$aligned
235 cmpq $0,%rsi
236 jne L$ittle
237 .byte 0xf3,0xc3
238
239
240.globl _CRYPTO_memcmp
241
242.p2align 4
243_CRYPTO_memcmp:
244 xorq %rax,%rax
245 xorq %r10,%r10
246 cmpq $0,%rdx
247 je L$no_data
248 cmpq $16,%rdx
249 jne L$oop_cmp
250 movq (%rdi),%r10
251 movq 8(%rdi),%r11
252 movq $1,%rdx
253 xorq (%rsi),%r10
254 xorq 8(%rsi),%r11
255 orq %r11,%r10
256 cmovnzq %rdx,%rax
257 .byte 0xf3,0xc3
258
259.p2align 4
260L$oop_cmp:
261 movb (%rdi),%r10b
262 leaq 1(%rdi),%rdi
263 xorb (%rsi),%r10b
264 leaq 1(%rsi),%rsi
265 orb %r10b,%al
266 decq %rdx
267 jnz L$oop_cmp
268 negq %rax
269 shrq $63,%rax
270L$no_data:
271 .byte 0xf3,0xc3
272
273.globl _OPENSSL_wipe_cpu
274
275.p2align 4
276_OPENSSL_wipe_cpu:
277 pxor %xmm0,%xmm0
278 pxor %xmm1,%xmm1
279 pxor %xmm2,%xmm2
280 pxor %xmm3,%xmm3
281 pxor %xmm4,%xmm4
282 pxor %xmm5,%xmm5
283 pxor %xmm6,%xmm6
284 pxor %xmm7,%xmm7
285 pxor %xmm8,%xmm8
286 pxor %xmm9,%xmm9
287 pxor %xmm10,%xmm10
288 pxor %xmm11,%xmm11
289 pxor %xmm12,%xmm12
290 pxor %xmm13,%xmm13
291 pxor %xmm14,%xmm14
292 pxor %xmm15,%xmm15
293 xorq %rcx,%rcx
294 xorq %rdx,%rdx
295 xorq %rsi,%rsi
296 xorq %rdi,%rdi
297 xorq %r8,%r8
298 xorq %r9,%r9
299 xorq %r10,%r10
300 xorq %r11,%r11
301 leaq 8(%rsp),%rax
302 .byte 0xf3,0xc3
303
304.globl _OPENSSL_instrument_bus
305
306.p2align 4
307_OPENSSL_instrument_bus:
308 movq %rdi,%r10
309 movq %rsi,%rcx
310 movq %rsi,%r11
311
312 rdtsc
313 movl %eax,%r8d
314 movl $0,%r9d
315 clflush (%r10)
316.byte 0xf0
317 addl %r9d,(%r10)
318 jmp L$oop
319.p2align 4
320L$oop: rdtsc
321 movl %eax,%edx
322 subl %r8d,%eax
323 movl %edx,%r8d
324 movl %eax,%r9d
325 clflush (%r10)
326.byte 0xf0
327 addl %eax,(%r10)
328 leaq 4(%r10),%r10
329 subq $1,%rcx
330 jnz L$oop
331
332 movq %r11,%rax
333 .byte 0xf3,0xc3
334
335
336.globl _OPENSSL_instrument_bus2
337
338.p2align 4
339_OPENSSL_instrument_bus2:
340 movq %rdi,%r10
341 movq %rsi,%rcx
342 movq %rdx,%r11
343 movq %rcx,8(%rsp)
344
345 rdtsc
346 movl %eax,%r8d
347 movl $0,%r9d
348
349 clflush (%r10)
350.byte 0xf0
351 addl %r9d,(%r10)
352
353 rdtsc
354 movl %eax,%edx
355 subl %r8d,%eax
356 movl %edx,%r8d
357 movl %eax,%r9d
358L$oop2:
359 clflush (%r10)
360.byte 0xf0
361 addl %eax,(%r10)
362
363 subq $1,%r11
364 jz L$done2
365
366 rdtsc
367 movl %eax,%edx
368 subl %r8d,%eax
369 movl %edx,%r8d
370 cmpl %r9d,%eax
371 movl %eax,%r9d
372 movl $0,%edx
373 setne %dl
374 subq %rdx,%rcx
375 leaq (%r10,%rdx,4),%r10
376 jnz L$oop2
377
378L$done2:
379 movq 8(%rsp),%rax
380 subq %rcx,%rax
381 .byte 0xf3,0xc3
382
383.globl _OPENSSL_ia32_rdrand_bytes
384
385.p2align 4
386_OPENSSL_ia32_rdrand_bytes:
387 xorq %rax,%rax
388 cmpq $0,%rsi
389 je L$done_rdrand_bytes
390
391 movq $8,%r11
392L$oop_rdrand_bytes:
393.byte 73,15,199,242
394 jc L$break_rdrand_bytes
395 decq %r11
396 jnz L$oop_rdrand_bytes
397 jmp L$done_rdrand_bytes
398
399.p2align 4
400L$break_rdrand_bytes:
401 cmpq $8,%rsi
402 jb L$tail_rdrand_bytes
403 movq %r10,(%rdi)
404 leaq 8(%rdi),%rdi
405 addq $8,%rax
406 subq $8,%rsi
407 jz L$done_rdrand_bytes
408 movq $8,%r11
409 jmp L$oop_rdrand_bytes
410
411.p2align 4
412L$tail_rdrand_bytes:
413 movb %r10b,(%rdi)
414 leaq 1(%rdi),%rdi
415 incq %rax
416 shrq $8,%r10
417 decq %rsi
418 jnz L$tail_rdrand_bytes
419
420L$done_rdrand_bytes:
421 xorq %r10,%r10
422 .byte 0xf3,0xc3
423
424.globl _OPENSSL_ia32_rdseed_bytes
425
426.p2align 4
427_OPENSSL_ia32_rdseed_bytes:
428 xorq %rax,%rax
429 cmpq $0,%rsi
430 je L$done_rdseed_bytes
431
432 movq $8,%r11
433L$oop_rdseed_bytes:
434.byte 73,15,199,250
435 jc L$break_rdseed_bytes
436 decq %r11
437 jnz L$oop_rdseed_bytes
438 jmp L$done_rdseed_bytes
439
440.p2align 4
441L$break_rdseed_bytes:
442 cmpq $8,%rsi
443 jb L$tail_rdseed_bytes
444 movq %r10,(%rdi)
445 leaq 8(%rdi),%rdi
446 addq $8,%rax
447 subq $8,%rsi
448 jz L$done_rdseed_bytes
449 movq $8,%r11
450 jmp L$oop_rdseed_bytes
451
452.p2align 4
453L$tail_rdseed_bytes:
454 movb %r10b,(%rdi)
455 leaq 1(%rdi),%rdi
456 incq %rax
457 shrq $8,%r10
458 decq %rsi
459 jnz L$tail_rdseed_bytes
460
461L$done_rdseed_bytes:
462 xorq %r10,%r10
463 .byte 0xf3,0xc3
464
Note: See TracBrowser for help on using the repository browser.

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