• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.text
2.globl	_OPENSSL_ia32_cpuid
3.type	_OPENSSL_ia32_cpuid,@function
4.align	4
5_OPENSSL_ia32_cpuid:
6L_OPENSSL_ia32_cpuid_begin:
7	%ifdef __CET__
8
9.byte	243,15,30,251
10	%endif
11
12	pushl	%ebp
13	pushl	%ebx
14	pushl	%esi
15	pushl	%edi
16	xorl	%edx,%edx
17	pushfl
18	popl	%eax
19	movl	%eax,%ecx
20	xorl	$2097152,%eax
21	pushl	%eax
22	popfl
23	pushfl
24	popl	%eax
25	xorl	%eax,%ecx
26	xorl	%eax,%eax
27	movl	20(%esp),%esi
28	movl	%eax,8(%esi)
29	btl	$21,%ecx
30	jnc	L000nocpuid
31	.byte	0x0f,0xa2
32	movl	%eax,%edi
33	xorl	%eax,%eax
34	cmpl	$1970169159,%ebx
35	setne	%al
36	movl	%eax,%ebp
37	cmpl	$1231384169,%edx
38	setne	%al
39	orl	%eax,%ebp
40	cmpl	$1818588270,%ecx
41	setne	%al
42	orl	%eax,%ebp
43	jz	L001intel
44	cmpl	$1752462657,%ebx
45	setne	%al
46	movl	%eax,%esi
47	cmpl	$1769238117,%edx
48	setne	%al
49	orl	%eax,%esi
50	cmpl	$1145913699,%ecx
51	setne	%al
52	orl	%eax,%esi
53	jnz	L001intel
54	movl	$2147483648,%eax
55	.byte	0x0f,0xa2
56	cmpl	$2147483649,%eax
57	jb	L001intel
58	movl	%eax,%esi
59	movl	$2147483649,%eax
60	.byte	0x0f,0xa2
61	orl	%ecx,%ebp
62	andl	$2049,%ebp
63	cmpl	$2147483656,%esi
64	jb	L001intel
65	movl	$2147483656,%eax
66	.byte	0x0f,0xa2
67	movzbl	%cl,%esi
68	incl	%esi
69	movl	$1,%eax
70	xorl	%ecx,%ecx
71	.byte	0x0f,0xa2
72	btl	$28,%edx
73	jnc	L002generic
74	shrl	$16,%ebx
75	andl	$255,%ebx
76	cmpl	%esi,%ebx
77	ja	L002generic
78	andl	$4026531839,%edx
79	jmp	L002generic
80L001intel:
81	cmpl	$4,%edi
82	movl	$-1,%esi
83	jb	L003nocacheinfo
84	movl	$4,%eax
85	movl	$0,%ecx
86	.byte	0x0f,0xa2
87	movl	%eax,%esi
88	shrl	$14,%esi
89	andl	$4095,%esi
90L003nocacheinfo:
91	movl	$1,%eax
92	xorl	%ecx,%ecx
93	.byte	0x0f,0xa2
94	andl	$3220176895,%edx
95	cmpl	$0,%ebp
96	jne	L004notintel
97	orl	$1073741824,%edx
98	andb	$15,%ah
99	cmpb	$15,%ah
100	jne	L004notintel
101	orl	$1048576,%edx
102L004notintel:
103	btl	$28,%edx
104	jnc	L002generic
105	andl	$4026531839,%edx
106	cmpl	$0,%esi
107	je	L002generic
108	orl	$268435456,%edx
109	shrl	$16,%ebx
110	cmpb	$1,%bl
111	ja	L002generic
112	andl	$4026531839,%edx
113L002generic:
114	andl	$2048,%ebp
115	andl	$4294965247,%ecx
116	movl	%edx,%esi
117	orl	%ecx,%ebp
118	cmpl	$7,%edi
119	movl	20(%esp),%edi
120	jb	L005no_extended_info
121	movl	$7,%eax
122	xorl	%ecx,%ecx
123	.byte	0x0f,0xa2
124	movl	%ebx,8(%edi)
125L005no_extended_info:
126	btl	$27,%ebp
127	jnc	L006clear_avx
128	xorl	%ecx,%ecx
129.byte	15,1,208
130	andl	$6,%eax
131	cmpl	$6,%eax
132	je	L007done
133	cmpl	$2,%eax
134	je	L006clear_avx
135L008clear_xmm:
136	andl	$4261412861,%ebp
137	andl	$4278190079,%esi
138L006clear_avx:
139	andl	$4026525695,%ebp
140	andl	$4294967263,8(%edi)
141L007done:
142	movl	%esi,%eax
143	movl	%ebp,%edx
144L000nocpuid:
145	popl	%edi
146	popl	%esi
147	popl	%ebx
148	popl	%ebp
149	ret
150.globl	_OPENSSL_rdtsc
151.type	_OPENSSL_rdtsc,@function
152.align	4
153_OPENSSL_rdtsc:
154L_OPENSSL_rdtsc_begin:
155	%ifdef __CET__
156
157.byte	243,15,30,251
158	%endif
159
160	xorl	%eax,%eax
161	xorl	%edx,%edx
162	call	L009PIC_me_up
163L009PIC_me_up:
164	popl	%ecx
165	leal	__GLOBAL_OFFSET_TABLE_+[.-L009PIC_me_up](%ecx),%ecx
166	movl	_OPENSSL_ia32cap_P@GOT(%ecx),%ecx
167	btl	$4,(%ecx)
168	jnc	L010notsc
169	.byte	0x0f,0x31
170L010notsc:
171	ret
172.globl	_OPENSSL_instrument_halt
173.type	_OPENSSL_instrument_halt,@function
174.align	4
175_OPENSSL_instrument_halt:
176L_OPENSSL_instrument_halt_begin:
177	%ifdef __CET__
178
179.byte	243,15,30,251
180	%endif
181
182	call	L011PIC_me_up
183L011PIC_me_up:
184	popl	%ecx
185	leal	__GLOBAL_OFFSET_TABLE_+[.-L011PIC_me_up](%ecx),%ecx
186	movl	_OPENSSL_ia32cap_P@GOT(%ecx),%ecx
187	btl	$4,(%ecx)
188	jnc	L012nohalt
189.long	2421723150
190	andl	$3,%eax
191	jnz	L012nohalt
192	pushfl
193	popl	%eax
194	btl	$9,%eax
195	jnc	L012nohalt
196	.byte	0x0f,0x31
197	pushl	%edx
198	pushl	%eax
199	hlt
200	.byte	0x0f,0x31
201	subl	(%esp),%eax
202	sbbl	4(%esp),%edx
203	addl	$8,%esp
204	ret
205L012nohalt:
206	xorl	%eax,%eax
207	xorl	%edx,%edx
208	ret
209.globl	_OPENSSL_far_spin
210.type	_OPENSSL_far_spin,@function
211.align	4
212_OPENSSL_far_spin:
213L_OPENSSL_far_spin_begin:
214	%ifdef __CET__
215
216.byte	243,15,30,251
217	%endif
218
219	pushfl
220	popl	%eax
221	btl	$9,%eax
222	jnc	L013nospin
223	movl	4(%esp),%eax
224	movl	8(%esp),%ecx
225.long	2430111262
226	xorl	%eax,%eax
227	movl	(%ecx),%edx
228	jmp	L014spin
229.align	4,0x90
230L014spin:
231	incl	%eax
232	cmpl	(%ecx),%edx
233	je	L014spin
234.long	529567888
235	ret
236L013nospin:
237	xorl	%eax,%eax
238	xorl	%edx,%edx
239	ret
240.globl	_OPENSSL_wipe_cpu
241.type	_OPENSSL_wipe_cpu,@function
242.align	4
243_OPENSSL_wipe_cpu:
244L_OPENSSL_wipe_cpu_begin:
245	%ifdef __CET__
246
247.byte	243,15,30,251
248	%endif
249
250	xorl	%eax,%eax
251	xorl	%edx,%edx
252	call	L015PIC_me_up
253L015PIC_me_up:
254	popl	%ecx
255	leal	__GLOBAL_OFFSET_TABLE_+[.-L015PIC_me_up](%ecx),%ecx
256	movl	_OPENSSL_ia32cap_P@GOT(%ecx),%ecx
257	movl	(%ecx),%ecx
258	btl	$1,(%ecx)
259	jnc	L016no_x87
260	andl	$83886080,%ecx
261	cmpl	$83886080,%ecx
262	jne	L017no_sse2
263	pxor	%xmm0,%xmm0
264	pxor	%xmm1,%xmm1
265	pxor	%xmm2,%xmm2
266	pxor	%xmm3,%xmm3
267	pxor	%xmm4,%xmm4
268	pxor	%xmm5,%xmm5
269	pxor	%xmm6,%xmm6
270	pxor	%xmm7,%xmm7
271L017no_sse2:
272.long	4007259865,4007259865,4007259865,4007259865,2430851995
273L016no_x87:
274	leal	4(%esp),%eax
275	ret
276.globl	_OPENSSL_atomic_add
277.type	_OPENSSL_atomic_add,@function
278.align	4
279_OPENSSL_atomic_add:
280L_OPENSSL_atomic_add_begin:
281	%ifdef __CET__
282
283.byte	243,15,30,251
284	%endif
285
286	movl	4(%esp),%edx
287	movl	8(%esp),%ecx
288	pushl	%ebx
289	nop
290	movl	(%edx),%eax
291L018spin:
292	leal	(%eax,%ecx,1),%ebx
293	nop
294.long	447811568
295	jne	L018spin
296	movl	%ebx,%eax
297	popl	%ebx
298	ret
299.globl	_OPENSSL_cleanse
300.type	_OPENSSL_cleanse,@function
301.align	4
302_OPENSSL_cleanse:
303L_OPENSSL_cleanse_begin:
304	%ifdef __CET__
305
306.byte	243,15,30,251
307	%endif
308
309	movl	4(%esp),%edx
310	movl	8(%esp),%ecx
311	xorl	%eax,%eax
312	cmpl	$7,%ecx
313	jae	L019lot
314	cmpl	$0,%ecx
315	je	L020ret
316L021little:
317	movb	%al,(%edx)
318	subl	$1,%ecx
319	leal	1(%edx),%edx
320	jnz	L021little
321L020ret:
322	ret
323.align	4,0x90
324L019lot:
325	testl	$3,%edx
326	jz	L022aligned
327	movb	%al,(%edx)
328	leal	-1(%ecx),%ecx
329	leal	1(%edx),%edx
330	jmp	L019lot
331L022aligned:
332	movl	%eax,(%edx)
333	leal	-4(%ecx),%ecx
334	testl	$-4,%ecx
335	leal	4(%edx),%edx
336	jnz	L022aligned
337	cmpl	$0,%ecx
338	jne	L021little
339	ret
340.globl	_CRYPTO_memcmp
341.type	_CRYPTO_memcmp,@function
342.align	4
343_CRYPTO_memcmp:
344L_CRYPTO_memcmp_begin:
345	%ifdef __CET__
346
347.byte	243,15,30,251
348	%endif
349
350	pushl	%esi
351	pushl	%edi
352	movl	12(%esp),%esi
353	movl	16(%esp),%edi
354	movl	20(%esp),%ecx
355	xorl	%eax,%eax
356	xorl	%edx,%edx
357	cmpl	$0,%ecx
358	je	L023no_data
359L024loop:
360	movb	(%esi),%dl
361	leal	1(%esi),%esi
362	xorb	(%edi),%dl
363	leal	1(%edi),%edi
364	orb	%dl,%al
365	decl	%ecx
366	jnz	L024loop
367	negl	%eax
368	shrl	$31,%eax
369L023no_data:
370	popl	%edi
371	popl	%esi
372	ret
373.globl	_OPENSSL_instrument_bus
374.type	_OPENSSL_instrument_bus,@function
375.align	4
376_OPENSSL_instrument_bus:
377L_OPENSSL_instrument_bus_begin:
378	%ifdef __CET__
379
380.byte	243,15,30,251
381	%endif
382
383	pushl	%ebp
384	pushl	%ebx
385	pushl	%esi
386	pushl	%edi
387	movl	$0,%eax
388	call	L025PIC_me_up
389L025PIC_me_up:
390	popl	%edx
391	leal	__GLOBAL_OFFSET_TABLE_+[.-L025PIC_me_up](%edx),%edx
392	movl	_OPENSSL_ia32cap_P@GOT(%edx),%edx
393	btl	$4,(%edx)
394	jnc	L026nogo
395	btl	$19,(%edx)
396	jnc	L026nogo
397	movl	20(%esp),%edi
398	movl	24(%esp),%ecx
399	.byte	0x0f,0x31
400	movl	%eax,%esi
401	movl	$0,%ebx
402	clflush	(%edi)
403.byte	240
404	addl	%ebx,(%edi)
405	jmp	L027loop
406.align	4,0x90
407L027loop:
408	.byte	0x0f,0x31
409	movl	%eax,%edx
410	subl	%esi,%eax
411	movl	%edx,%esi
412	movl	%eax,%ebx
413	clflush	(%edi)
414.byte	240
415	addl	%eax,(%edi)
416	leal	4(%edi),%edi
417	subl	$1,%ecx
418	jnz	L027loop
419	movl	24(%esp),%eax
420L026nogo:
421	popl	%edi
422	popl	%esi
423	popl	%ebx
424	popl	%ebp
425	ret
426.globl	_OPENSSL_instrument_bus2
427.type	_OPENSSL_instrument_bus2,@function
428.align	4
429_OPENSSL_instrument_bus2:
430L_OPENSSL_instrument_bus2_begin:
431	%ifdef __CET__
432
433.byte	243,15,30,251
434	%endif
435
436	pushl	%ebp
437	pushl	%ebx
438	pushl	%esi
439	pushl	%edi
440	movl	$0,%eax
441	call	L028PIC_me_up
442L028PIC_me_up:
443	popl	%edx
444	leal	__GLOBAL_OFFSET_TABLE_+[.-L028PIC_me_up](%edx),%edx
445	movl	_OPENSSL_ia32cap_P@GOT(%edx),%edx
446	btl	$4,(%edx)
447	jnc	L029nogo
448	btl	$19,(%edx)
449	jnc	L029nogo
450	movl	20(%esp),%edi
451	movl	24(%esp),%ecx
452	movl	28(%esp),%ebp
453	.byte	0x0f,0x31
454	movl	%eax,%esi
455	movl	$0,%ebx
456	clflush	(%edi)
457.byte	240
458	addl	%ebx,(%edi)
459	.byte	0x0f,0x31
460	movl	%eax,%edx
461	subl	%esi,%eax
462	movl	%edx,%esi
463	movl	%eax,%ebx
464	jmp	L030loop2
465.align	4,0x90
466L030loop2:
467	clflush	(%edi)
468.byte	240
469	addl	%eax,(%edi)
470	subl	$1,%ebp
471	jz	L031done2
472	.byte	0x0f,0x31
473	movl	%eax,%edx
474	subl	%esi,%eax
475	movl	%edx,%esi
476	cmpl	%ebx,%eax
477	movl	%eax,%ebx
478	movl	$0,%edx
479	setne	%dl
480	subl	%edx,%ecx
481	leal	(%edi,%edx,4),%edi
482	jnz	L030loop2
483L031done2:
484	movl	24(%esp),%eax
485	subl	%ecx,%eax
486L029nogo:
487	popl	%edi
488	popl	%esi
489	popl	%ebx
490	popl	%ebp
491	ret
492.globl	_OPENSSL_ia32_rdrand_bytes
493.type	_OPENSSL_ia32_rdrand_bytes,@function
494.align	4
495_OPENSSL_ia32_rdrand_bytes:
496L_OPENSSL_ia32_rdrand_bytes_begin:
497	%ifdef __CET__
498
499.byte	243,15,30,251
500	%endif
501
502	pushl	%edi
503	pushl	%ebx
504	xorl	%eax,%eax
505	movl	12(%esp),%edi
506	movl	16(%esp),%ebx
507	cmpl	$0,%ebx
508	je	L032done
509	movl	$8,%ecx
510L033loop:
511.byte	15,199,242
512	jc	L034break
513	loop	L033loop
514	jmp	L032done
515.align	4,0x90
516L034break:
517	cmpl	$4,%ebx
518	jb	L035tail
519	movl	%edx,(%edi)
520	leal	4(%edi),%edi
521	addl	$4,%eax
522	subl	$4,%ebx
523	jz	L032done
524	movl	$8,%ecx
525	jmp	L033loop
526.align	4,0x90
527L035tail:
528	movb	%dl,(%edi)
529	leal	1(%edi),%edi
530	incl	%eax
531	shrl	$8,%edx
532	decl	%ebx
533	jnz	L035tail
534L032done:
535	xorl	%edx,%edx
536	popl	%ebx
537	popl	%edi
538	ret
539.globl	_OPENSSL_ia32_rdseed_bytes
540.type	_OPENSSL_ia32_rdseed_bytes,@function
541.align	4
542_OPENSSL_ia32_rdseed_bytes:
543L_OPENSSL_ia32_rdseed_bytes_begin:
544	%ifdef __CET__
545
546.byte	243,15,30,251
547	%endif
548
549	pushl	%edi
550	pushl	%ebx
551	xorl	%eax,%eax
552	movl	12(%esp),%edi
553	movl	16(%esp),%ebx
554	cmpl	$0,%ebx
555	je	L036done
556	movl	$8,%ecx
557L037loop:
558.byte	15,199,250
559	jc	L038break
560	loop	L037loop
561	jmp	L036done
562.align	4,0x90
563L038break:
564	cmpl	$4,%ebx
565	jb	L039tail
566	movl	%edx,(%edi)
567	leal	4(%edi),%edi
568	addl	$4,%eax
569	subl	$4,%ebx
570	jz	L036done
571	movl	$8,%ecx
572	jmp	L037loop
573.align	4,0x90
574L039tail:
575	movb	%dl,(%edi)
576	leal	1(%edi),%edi
577	incl	%eax
578	shrl	$8,%edx
579	decl	%ebx
580	jnz	L039tail
581L036done:
582	xorl	%edx,%edx
583	popl	%ebx
584	popl	%edi
585	ret
586.comm	_OPENSSL_ia32cap_P,16
587.text
588.type	__GLOBAL_$I$_OPENSSL_cpuid_setup,@function
589.globl	__GLOBAL_$I$_OPENSSL_cpuid_setup
590.align	2
591__GLOBAL_$I$_OPENSSL_cpuid_setup:
592	jmp	_OPENSSL_cpuid_setup
593