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