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