VirtualBox

source: vbox/trunk/src/libs/openssl-1.1.1l/crypto/genasm-elf/x86_64cpuid.S@ 94677

最後變更 在這個檔案從94677是 83531,由 vboxsync 提交於 5 年 前

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

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

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