]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/x86_64cpuid.S
Regen amd64 assembly files for OpenSSL 1.1.1.
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / amd64 / x86_64cpuid.S
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