if_iwm - Recognize IWM_FW_PAGING_BLOCK_CMD wide cmd response correctly.
[dragonfly.git] / lib / libcrypto / asm / x86_64cpuid.s
blobe5ce3c49d281a3acdf9a3f483333d02e2620c9b7
2 .hidden OPENSSL_cpuid_setup
3 .section .init
4 call OPENSSL_cpuid_setup
6 .hidden OPENSSL_ia32cap_P
7 .comm OPENSSL_ia32cap_P,16,4
9 .text
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
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
35 .globl OPENSSL_ia32_cpuid
36 .type OPENSSL_ia32_cpuid,@function
37 .align 16
38 OPENSSL_ia32_cpuid:
39 movq %rbx,%r8
41 xorl %eax,%eax
42 movl %eax,8(%rdi)
43 cpuid
44 movl %eax,%r11d
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
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
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
80 cmpl $0x80000008,%r10d
81 jb .Lintel
83 movl $0x80000008,%eax
84 cpuid
85 movzbq %cl,%r10
86 incq %r10
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
98 .Lintel:
99 cmpl $4,%r11d
100 movl $-1,%r10d
101 jb .Lnocacheinfo
103 movl $4,%eax
104 movl $0,%ecx
105 cpuid
106 movl %eax,%r10d
107 shrl $14,%r10d
108 andl $0xfff,%r10d
110 cmpl $7,%r11d
111 jb .Lnocacheinfo
113 movl $7,%eax
114 xorl %ecx,%ecx
115 cpuid
116 movl %ebx,8(%rdi)
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
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
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
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
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