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