Finish refactoring of DomCodeToUsLayoutKeyboardCode().
[chromium-blink-merge.git] / third_party / boringssl / linux-x86 / crypto / cpu-x86-asm.S
blob24a8dd4d4247fdc533dffa6871be19eaf0bd44de
1 #if defined(__i386__)
2 .file   "crypto/cpu-x86-asm.S"
3 .text
4 .globl  OPENSSL_ia32_cpuid
5 .hidden OPENSSL_ia32_cpuid
6 .type   OPENSSL_ia32_cpuid,@function
7 .align  16
8 OPENSSL_ia32_cpuid:
9 .L_OPENSSL_ia32_cpuid_begin:
10         pushl   %ebp
11         pushl   %ebx
12         pushl   %esi
13         pushl   %edi
14         xorl    %edx,%edx
15         pushfl
16         popl    %eax
17         movl    %eax,%ecx
18         xorl    $2097152,%eax
19         pushl   %eax
20         popfl
21         pushfl
22         popl    %eax
23         xorl    %eax,%ecx
24         xorl    %eax,%eax
25         btl     $21,%ecx
26         jnc     .L000nocpuid
27         movl    20(%esp),%esi
28         movl    %eax,8(%esi)
29         .byte   0x0f,0xa2
30         movl    %eax,%edi
31         xorl    %eax,%eax
32         cmpl    $1970169159,%ebx
33         setne   %al
34         movl    %eax,%ebp
35         cmpl    $1231384169,%edx
36         setne   %al
37         orl     %eax,%ebp
38         cmpl    $1818588270,%ecx
39         setne   %al
40         orl     %eax,%ebp
41         jz      .L001intel
42         cmpl    $1752462657,%ebx
43         setne   %al
44         movl    %eax,%esi
45         cmpl    $1769238117,%edx
46         setne   %al
47         orl     %eax,%esi
48         cmpl    $1145913699,%ecx
49         setne   %al
50         orl     %eax,%esi
51         jnz     .L001intel
52         movl    $2147483648,%eax
53         .byte   0x0f,0xa2
54         cmpl    $2147483649,%eax
55         jb      .L001intel
56         movl    %eax,%esi
57         movl    $2147483649,%eax
58         .byte   0x0f,0xa2
59         orl     %ecx,%ebp
60         andl    $2049,%ebp
61         cmpl    $2147483656,%esi
62         jb      .L001intel
63         movl    $2147483656,%eax
64         .byte   0x0f,0xa2
65         movzbl  %cl,%esi
66         incl    %esi
67         movl    $1,%eax
68         xorl    %ecx,%ecx
69         .byte   0x0f,0xa2
70         btl     $28,%edx
71         jnc     .L002generic
72         shrl    $16,%ebx
73         andl    $255,%ebx
74         cmpl    %esi,%ebx
75         ja      .L002generic
76         andl    $4026531839,%edx
77         jmp     .L002generic
78 .L001intel:
79         cmpl    $7,%edi
80         jb      .L003cacheinfo
81         movl    20(%esp),%esi
82         movl    $7,%eax
83         xorl    %ecx,%ecx
84         .byte   0x0f,0xa2
85         movl    %ebx,8(%esi)
86 .L003cacheinfo:
87         cmpl    $4,%edi
88         movl    $-1,%edi
89         jb      .L004nocacheinfo
90         movl    $4,%eax
91         movl    $0,%ecx
92         .byte   0x0f,0xa2
93         movl    %eax,%edi
94         shrl    $14,%edi
95         andl    $4095,%edi
96 .L004nocacheinfo:
97         movl    $1,%eax
98         xorl    %ecx,%ecx
99         .byte   0x0f,0xa2
100         andl    $3220176895,%edx
101         cmpl    $0,%ebp
102         jne     .L005notintel
103         orl     $1073741824,%edx
104 .L005notintel:
105         btl     $28,%edx
106         jnc     .L002generic
107         andl    $4026531839,%edx
108         cmpl    $0,%edi
109         je      .L002generic
110         orl     $268435456,%edx
111         shrl    $16,%ebx
112         cmpb    $1,%bl
113         ja      .L002generic
114         andl    $4026531839,%edx
115 .L002generic:
116         andl    $2048,%ebp
117         andl    $4294965247,%ecx
118         movl    %edx,%esi
119         orl     %ecx,%ebp
120         btl     $27,%ecx
121         jnc     .L006clear_avx
122         xorl    %ecx,%ecx
123 .byte   15,1,208
124         andl    $6,%eax
125         cmpl    $6,%eax
126         je      .L007done
127         cmpl    $2,%eax
128         je      .L006clear_avx
129 .L008clear_xmm:
130         andl    $4261412861,%ebp
131         andl    $4278190079,%esi
132 .L006clear_avx:
133         andl    $4026525695,%ebp
134         movl    20(%esp),%edi
135         andl    $4294967263,8(%edi)
136 .L007done:
137         movl    %esi,%eax
138         movl    %ebp,%edx
139 .L000nocpuid:
140         popl    %edi
141         popl    %esi
142         popl    %ebx
143         popl    %ebp
144         ret
145 .size   OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
146 .globl  OPENSSL_rdtsc
147 .hidden OPENSSL_rdtsc
148 .type   OPENSSL_rdtsc,@function
149 .align  16
150 OPENSSL_rdtsc:
151 .L_OPENSSL_rdtsc_begin:
152         xorl    %eax,%eax
153         xorl    %edx,%edx
154         call    .L009PIC_me_up
155 .L009PIC_me_up:
156         popl    %ecx
157         leal    OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx
158         btl     $4,(%ecx)
159         jnc     .L010notsc
160         .byte   0x0f,0x31
161 .L010notsc:
162         ret
163 .size   OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
164 .globl  OPENSSL_instrument_halt
165 .hidden OPENSSL_instrument_halt
166 .type   OPENSSL_instrument_halt,@function
167 .align  16
168 OPENSSL_instrument_halt:
169 .L_OPENSSL_instrument_halt_begin:
170         call    .L011PIC_me_up
171 .L011PIC_me_up:
172         popl    %ecx
173         leal    OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx
174         btl     $4,(%ecx)
175         jnc     .L012nohalt
176 .long   2421723150
177         andl    $3,%eax
178         jnz     .L012nohalt
179         pushfl
180         popl    %eax
181         btl     $9,%eax
182         jnc     .L012nohalt
183         .byte   0x0f,0x31
184         pushl   %edx
185         pushl   %eax
186         hlt
187         .byte   0x0f,0x31
188         subl    (%esp),%eax
189         sbbl    4(%esp),%edx
190         addl    $8,%esp
191         ret
192 .L012nohalt:
193         xorl    %eax,%eax
194         xorl    %edx,%edx
195         ret
196 .size   OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
197 .globl  OPENSSL_far_spin
198 .hidden OPENSSL_far_spin
199 .type   OPENSSL_far_spin,@function
200 .align  16
201 OPENSSL_far_spin:
202 .L_OPENSSL_far_spin_begin:
203         pushfl
204         popl    %eax
205         btl     $9,%eax
206         jnc     .L013nospin
207         movl    4(%esp),%eax
208         movl    8(%esp),%ecx
209 .long   2430111262
210         xorl    %eax,%eax
211         movl    (%ecx),%edx
212         jmp     .L014spin
213 .align  16
214 .L014spin:
215         incl    %eax
216         cmpl    (%ecx),%edx
217         je      .L014spin
218 .long   529567888
219         ret
220 .L013nospin:
221         xorl    %eax,%eax
222         xorl    %edx,%edx
223         ret
224 .size   OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
225 .globl  OPENSSL_wipe_cpu
226 .hidden OPENSSL_wipe_cpu
227 .type   OPENSSL_wipe_cpu,@function
228 .align  16
229 OPENSSL_wipe_cpu:
230 .L_OPENSSL_wipe_cpu_begin:
231         xorl    %eax,%eax
232         xorl    %edx,%edx
233         call    .L015PIC_me_up
234 .L015PIC_me_up:
235         popl    %ecx
236         leal    OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx
237         movl    (%ecx),%ecx
238         btl     $1,(%ecx)
239         jnc     .L016no_x87
240         andl    $83886080,%ecx
241         cmpl    $83886080,%ecx
242         jne     .L017no_sse2
243         pxor    %xmm0,%xmm0
244         pxor    %xmm1,%xmm1
245         pxor    %xmm2,%xmm2
246         pxor    %xmm3,%xmm3
247         pxor    %xmm4,%xmm4
248         pxor    %xmm5,%xmm5
249         pxor    %xmm6,%xmm6
250         pxor    %xmm7,%xmm7
251 .L017no_sse2:
252 .long   4007259865,4007259865,4007259865,4007259865,2430851995
253 .L016no_x87:
254         leal    4(%esp),%eax
255         ret
256 .size   OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
257 .globl  OPENSSL_atomic_add
258 .hidden OPENSSL_atomic_add
259 .type   OPENSSL_atomic_add,@function
260 .align  16
261 OPENSSL_atomic_add:
262 .L_OPENSSL_atomic_add_begin:
263         movl    4(%esp),%edx
264         movl    8(%esp),%ecx
265         pushl   %ebx
266         nop
267         movl    (%edx),%eax
268 .L018spin:
269         leal    (%eax,%ecx,1),%ebx
270         nop
271 .long   447811568
272         jne     .L018spin
273         movl    %ebx,%eax
274         popl    %ebx
275         ret
276 .size   OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
277 .globl  OPENSSL_indirect_call
278 .hidden OPENSSL_indirect_call
279 .type   OPENSSL_indirect_call,@function
280 .align  16
281 OPENSSL_indirect_call:
282 .L_OPENSSL_indirect_call_begin:
283         pushl   %ebp
284         movl    %esp,%ebp
285         subl    $28,%esp
286         movl    12(%ebp),%ecx
287         movl    %ecx,(%esp)
288         movl    16(%ebp),%edx
289         movl    %edx,4(%esp)
290         movl    20(%ebp),%eax
291         movl    %eax,8(%esp)
292         movl    24(%ebp),%eax
293         movl    %eax,12(%esp)
294         movl    28(%ebp),%eax
295         movl    %eax,16(%esp)
296         movl    32(%ebp),%eax
297         movl    %eax,20(%esp)
298         movl    36(%ebp),%eax
299         movl    %eax,24(%esp)
300         call    *8(%ebp)
301         movl    %ebp,%esp
302         popl    %ebp
303         ret
304 .size   OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin
305 .globl  OPENSSL_ia32_rdrand
306 .hidden OPENSSL_ia32_rdrand
307 .type   OPENSSL_ia32_rdrand,@function
308 .align  16
309 OPENSSL_ia32_rdrand:
310 .L_OPENSSL_ia32_rdrand_begin:
311         movl    $8,%ecx
312 .L019loop:
313 .byte   15,199,240
314         jc      .L020break
315         loop    .L019loop
316 .L020break:
317         cmpl    $0,%eax
318         cmovel  %ecx,%eax
319         ret
320 .size   OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin
321 .hidden OPENSSL_ia32cap_P
322 #endif