if_iwm - Adjust if_iwm_sta.h prototypes, don't pass iwm_node to rm_sta().
[dragonfly.git] / secure / lib / libcrypto / asm / x86_64cpuid.s
1
2 .hidden OPENSSL_cpuid_setup
3 .section        .init
4         call    OPENSSL_cpuid_setup
5
6 .hidden OPENSSL_ia32cap_P
7 .comm   OPENSSL_ia32cap_P,16,4
8
9 .text   
10
11 .globl  OPENSSL_atomic_add
12 .type   OPENSSL_atomic_add,@function
13 .align  16
14 OPENSSL_atomic_add:
15         movl    (%rdi),%eax
16 .Lspin: leaq    (%rsi,%rax,1),%r8
17 .byte   0xf0
18         cmpxchgl        %r8d,(%rdi)
19         jne     .Lspin
20         movl    %r8d,%eax
21 .byte   0x48,0x98
22         .byte   0xf3,0xc3
23 .size   OPENSSL_atomic_add,.-OPENSSL_atomic_add
24
25 .globl  OPENSSL_rdtsc
26 .type   OPENSSL_rdtsc,@function
27 .align  16
28 OPENSSL_rdtsc:
29         rdtsc
30         shlq    $32,%rdx
31         orq     %rdx,%rax
32         .byte   0xf3,0xc3
33 .size   OPENSSL_rdtsc,.-OPENSSL_rdtsc
34
35 .globl  OPENSSL_ia32_cpuid
36 .type   OPENSSL_ia32_cpuid,@function
37 .align  16
38 OPENSSL_ia32_cpuid:
39         movq    %rbx,%r8
40
41         xorl    %eax,%eax
42         movl    %eax,8(%rdi)
43         cpuid
44         movl    %eax,%r11d
45
46         xorl    %eax,%eax
47         cmpl    $0x756e6547,%ebx
48         setne   %al
49         movl    %eax,%r9d
50         cmpl    $0x49656e69,%edx
51         setne   %al
52         orl     %eax,%r9d
53         cmpl    $0x6c65746e,%ecx
54         setne   %al
55         orl     %eax,%r9d
56         jz      .Lintel
57
58         cmpl    $0x68747541,%ebx
59         setne   %al
60         movl    %eax,%r10d
61         cmpl    $0x69746E65,%edx
62         setne   %al
63         orl     %eax,%r10d
64         cmpl    $0x444D4163,%ecx
65         setne   %al
66         orl     %eax,%r10d
67         jnz     .Lintel
68
69
70         movl    $0x80000000,%eax
71         cpuid
72         cmpl    $0x80000001,%eax
73         jb      .Lintel
74         movl    %eax,%r10d
75         movl    $0x80000001,%eax
76         cpuid
77         orl     %ecx,%r9d
78         andl    $0x00000801,%r9d
79
80         cmpl    $0x80000008,%r10d
81         jb      .Lintel
82
83         movl    $0x80000008,%eax
84         cpuid
85         movzbq  %cl,%r10
86         incq    %r10
87
88         movl    $1,%eax
89         cpuid
90         btl     $28,%edx
91         jnc     .Lgeneric
92         shrl    $16,%ebx
93         cmpb    %r10b,%bl
94         ja      .Lgeneric
95         andl    $0xefffffff,%edx
96         jmp     .Lgeneric
97
98 .Lintel:
99         cmpl    $4,%r11d
100         movl    $-1,%r10d
101         jb      .Lnocacheinfo
102
103         movl    $4,%eax
104         movl    $0,%ecx
105         cpuid
106         movl    %eax,%r10d
107         shrl    $14,%r10d
108         andl    $0xfff,%r10d
109
110         cmpl    $7,%r11d
111         jb      .Lnocacheinfo
112
113         movl    $7,%eax
114         xorl    %ecx,%ecx
115         cpuid
116         movl    %ebx,8(%rdi)
117
118 .Lnocacheinfo:
119         movl    $1,%eax
120         cpuid
121         andl    $0xbfefffff,%edx
122         cmpl    $0,%r9d
123         jne     .Lnotintel
124         orl     $0x40000000,%edx
125         andb    $15,%ah
126         cmpb    $15,%ah
127         jne     .Lnotintel
128         orl     $0x00100000,%edx
129 .Lnotintel:
130         btl     $28,%edx
131         jnc     .Lgeneric
132         andl    $0xefffffff,%edx
133         cmpl    $0,%r10d
134         je      .Lgeneric
135
136         orl     $0x10000000,%edx
137         shrl    $16,%ebx
138         cmpb    $1,%bl
139         ja      .Lgeneric
140         andl    $0xefffffff,%edx
141 .Lgeneric:
142         andl    $0x00000800,%r9d
143         andl    $0xfffff7ff,%ecx
144         orl     %ecx,%r9d
145
146         movl    %edx,%r10d
147         btl     $27,%r9d
148         jnc     .Lclear_avx
149         xorl    %ecx,%ecx
150 .byte   0x0f,0x01,0xd0
151         andl    $6,%eax
152         cmpl    $6,%eax
153         je      .Ldone
154 .Lclear_avx:
155         movl    $0xefffe7ff,%eax
156         andl    %eax,%r9d
157         andl    $0xffffffdf,8(%rdi)
158 .Ldone:
159         shlq    $32,%r9
160         movl    %r10d,%eax
161         movq    %r8,%rbx
162         orq     %r9,%rax
163         .byte   0xf3,0xc3
164 .size   OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
165
166 .globl  OPENSSL_cleanse
167 .type   OPENSSL_cleanse,@function
168 .align  16
169 OPENSSL_cleanse:
170         xorq    %rax,%rax
171         cmpq    $15,%rsi
172         jae     .Lot
173         cmpq    $0,%rsi
174         je      .Lret
175 .Little:
176         movb    %al,(%rdi)
177         subq    $1,%rsi
178         leaq    1(%rdi),%rdi
179         jnz     .Little
180 .Lret:
181         .byte   0xf3,0xc3
182 .align  16
183 .Lot:
184         testq   $7,%rdi
185         jz      .Laligned
186         movb    %al,(%rdi)
187         leaq    -1(%rsi),%rsi
188         leaq    1(%rdi),%rdi
189         jmp     .Lot
190 .Laligned:
191         movq    %rax,(%rdi)
192         leaq    -8(%rsi),%rsi
193         testq   $-8,%rsi
194         leaq    8(%rdi),%rdi
195         jnz     .Laligned
196         cmpq    $0,%rsi
197         jne     .Little
198         .byte   0xf3,0xc3
199 .size   OPENSSL_cleanse,.-OPENSSL_cleanse
200 .globl  OPENSSL_wipe_cpu
201 .type   OPENSSL_wipe_cpu,@function
202 .align  16
203 OPENSSL_wipe_cpu:
204         pxor    %xmm0,%xmm0
205         pxor    %xmm1,%xmm1
206         pxor    %xmm2,%xmm2
207         pxor    %xmm3,%xmm3
208         pxor    %xmm4,%xmm4
209         pxor    %xmm5,%xmm5
210         pxor    %xmm6,%xmm6
211         pxor    %xmm7,%xmm7
212         pxor    %xmm8,%xmm8
213         pxor    %xmm9,%xmm9
214         pxor    %xmm10,%xmm10
215         pxor    %xmm11,%xmm11
216         pxor    %xmm12,%xmm12
217         pxor    %xmm13,%xmm13
218         pxor    %xmm14,%xmm14
219         pxor    %xmm15,%xmm15
220         xorq    %rcx,%rcx
221         xorq    %rdx,%rdx
222         xorq    %rsi,%rsi
223         xorq    %rdi,%rdi
224         xorq    %r8,%r8
225         xorq    %r9,%r9
226         xorq    %r10,%r10
227         xorq    %r11,%r11
228         leaq    8(%rsp),%rax
229         .byte   0xf3,0xc3
230 .size   OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
231 .globl  OPENSSL_ia32_rdrand
232 .type   OPENSSL_ia32_rdrand,@function
233 .align  16
234 OPENSSL_ia32_rdrand:
235         movl    $8,%ecx
236 .Loop_rdrand:
237 .byte   72,15,199,240
238         jc      .Lbreak_rdrand
239         loop    .Loop_rdrand
240 .Lbreak_rdrand:
241         cmpq    $0,%rax
242         cmoveq  %rcx,%rax
243         .byte   0xf3,0xc3
244 .size   OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand
245
246 .globl  OPENSSL_ia32_rdseed
247 .type   OPENSSL_ia32_rdseed,@function
248 .align  16
249 OPENSSL_ia32_rdseed:
250         movl    $8,%ecx
251 .Loop_rdseed:
252 .byte   72,15,199,248
253         jc      .Lbreak_rdseed
254         loop    .Loop_rdseed
255 .Lbreak_rdseed:
256         cmpq    $0,%rax
257         cmoveq  %rcx,%rax
258         .byte   0xf3,0xc3
259 .size   OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed
260 .section .note.GNU-stack,"",%progbits