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