]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/x86_64cpuid.S
Import Zstandard 1.2.0
[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         movq    %rbx,%r8
42
43         xorl    %eax,%eax
44         movl    %eax,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         cmpl    $7,%r11d
113         jb      .Lnocacheinfo
114
115         movl    $7,%eax
116         xorl    %ecx,%ecx
117         cpuid
118         movl    %ebx,8(%rdi)
119
120 .Lnocacheinfo:
121         movl    $1,%eax
122         cpuid
123         andl    $0xbfefffff,%edx
124         cmpl    $0,%r9d
125         jne     .Lnotintel
126         orl     $0x40000000,%edx
127         andb    $15,%ah
128         cmpb    $15,%ah
129         jne     .Lnotintel
130         orl     $0x00100000,%edx
131 .Lnotintel:
132         btl     $28,%edx
133         jnc     .Lgeneric
134         andl    $0xefffffff,%edx
135         cmpl    $0,%r10d
136         je      .Lgeneric
137
138         orl     $0x10000000,%edx
139         shrl    $16,%ebx
140         cmpb    $1,%bl
141         ja      .Lgeneric
142         andl    $0xefffffff,%edx
143 .Lgeneric:
144         andl    $0x00000800,%r9d
145         andl    $0xfffff7ff,%ecx
146         orl     %ecx,%r9d
147
148         movl    %edx,%r10d
149         btl     $27,%r9d
150         jnc     .Lclear_avx
151         xorl    %ecx,%ecx
152 .byte   0x0f,0x01,0xd0
153         andl    $6,%eax
154         cmpl    $6,%eax
155         je      .Ldone
156 .Lclear_avx:
157         movl    $0xefffe7ff,%eax
158         andl    %eax,%r9d
159         andl    $0xffffffdf,8(%rdi)
160 .Ldone:
161         shlq    $32,%r9
162         movl    %r10d,%eax
163         movq    %r8,%rbx
164         orq     %r9,%rax
165         .byte   0xf3,0xc3
166 .size   OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
167
168 .globl  OPENSSL_cleanse
169 .type   OPENSSL_cleanse,@function
170 .align  16
171 OPENSSL_cleanse:
172         xorq    %rax,%rax
173         cmpq    $15,%rsi
174         jae     .Lot
175         cmpq    $0,%rsi
176         je      .Lret
177 .Little:
178         movb    %al,(%rdi)
179         subq    $1,%rsi
180         leaq    1(%rdi),%rdi
181         jnz     .Little
182 .Lret:
183         .byte   0xf3,0xc3
184 .align  16
185 .Lot:
186         testq   $7,%rdi
187         jz      .Laligned
188         movb    %al,(%rdi)
189         leaq    -1(%rsi),%rsi
190         leaq    1(%rdi),%rdi
191         jmp     .Lot
192 .Laligned:
193         movq    %rax,(%rdi)
194         leaq    -8(%rsi),%rsi
195         testq   $-8,%rsi
196         leaq    8(%rdi),%rdi
197         jnz     .Laligned
198         cmpq    $0,%rsi
199         jne     .Little
200         .byte   0xf3,0xc3
201 .size   OPENSSL_cleanse,.-OPENSSL_cleanse
202 .globl  OPENSSL_wipe_cpu
203 .type   OPENSSL_wipe_cpu,@function
204 .align  16
205 OPENSSL_wipe_cpu:
206         pxor    %xmm0,%xmm0
207         pxor    %xmm1,%xmm1
208         pxor    %xmm2,%xmm2
209         pxor    %xmm3,%xmm3
210         pxor    %xmm4,%xmm4
211         pxor    %xmm5,%xmm5
212         pxor    %xmm6,%xmm6
213         pxor    %xmm7,%xmm7
214         pxor    %xmm8,%xmm8
215         pxor    %xmm9,%xmm9
216         pxor    %xmm10,%xmm10
217         pxor    %xmm11,%xmm11
218         pxor    %xmm12,%xmm12
219         pxor    %xmm13,%xmm13
220         pxor    %xmm14,%xmm14
221         pxor    %xmm15,%xmm15
222         xorq    %rcx,%rcx
223         xorq    %rdx,%rdx
224         xorq    %rsi,%rsi
225         xorq    %rdi,%rdi
226         xorq    %r8,%r8
227         xorq    %r9,%r9
228         xorq    %r10,%r10
229         xorq    %r11,%r11
230         leaq    8(%rsp),%rax
231         .byte   0xf3,0xc3
232 .size   OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
233 .globl  OPENSSL_ia32_rdrand
234 .type   OPENSSL_ia32_rdrand,@function
235 .align  16
236 OPENSSL_ia32_rdrand:
237         movl    $8,%ecx
238 .Loop_rdrand:
239 .byte   72,15,199,240
240         jc      .Lbreak_rdrand
241         loop    .Loop_rdrand
242 .Lbreak_rdrand:
243         cmpq    $0,%rax
244         cmoveq  %rcx,%rax
245         .byte   0xf3,0xc3
246 .size   OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand
247
248 .globl  OPENSSL_ia32_rdseed
249 .type   OPENSSL_ia32_rdseed,@function
250 .align  16
251 OPENSSL_ia32_rdseed:
252         movl    $8,%ecx
253 .Loop_rdseed:
254 .byte   72,15,199,248
255         jc      .Lbreak_rdseed
256         loop    .Loop_rdseed
257 .Lbreak_rdseed:
258         cmpq    $0,%rax
259         cmoveq  %rcx,%rax
260         .byte   0xf3,0xc3
261 .size   OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed