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