1 .text
2 .type	_mul_1x1_mmx,@function
3 .align	16
4 _mul_1x1_mmx:
5 	%ifdef __CET__
6 
7 .byte	243,15,30,251
8 	%endif
9 
10 	subl	$36,%esp
11 	movl	%eax,%ecx
12 	leal	(%eax,%eax,1),%edx
13 	andl	$1073741823,%ecx
14 	leal	(%edx,%edx,1),%ebp
15 	movl	$0,(%esp)
16 	andl	$2147483647,%edx
17 	movd	%eax,%mm2
18 	movd	%ebx,%mm3
19 	movl	%ecx,4(%esp)
20 	xorl	%edx,%ecx
21 	pxor	%mm5,%mm5
22 	pxor	%mm4,%mm4
23 	movl	%edx,8(%esp)
24 	xorl	%ebp,%edx
25 	movl	%ecx,12(%esp)
26 	pcmpgtd	%mm2,%mm5
27 	paddd	%mm2,%mm2
28 	xorl	%edx,%ecx
29 	movl	%ebp,16(%esp)
30 	xorl	%edx,%ebp
31 	pand	%mm3,%mm5
32 	pcmpgtd	%mm2,%mm4
33 	movl	%ecx,20(%esp)
34 	xorl	%ecx,%ebp
35 	psllq	$31,%mm5
36 	pand	%mm3,%mm4
37 	movl	%edx,24(%esp)
38 	movl	$7,%esi
39 	movl	%ebp,28(%esp)
40 	movl	%esi,%ebp
41 	andl	%ebx,%esi
42 	shrl	$3,%ebx
43 	movl	%ebp,%edi
44 	psllq	$30,%mm4
45 	andl	%ebx,%edi
46 	shrl	$3,%ebx
47 	movd	(%esp,%esi,4),%mm0
48 	movl	%ebp,%esi
49 	andl	%ebx,%esi
50 	shrl	$3,%ebx
51 	movd	(%esp,%edi,4),%mm2
52 	movl	%ebp,%edi
53 	psllq	$3,%mm2
54 	andl	%ebx,%edi
55 	shrl	$3,%ebx
56 	pxor	%mm2,%mm0
57 	movd	(%esp,%esi,4),%mm1
58 	movl	%ebp,%esi
59 	psllq	$6,%mm1
60 	andl	%ebx,%esi
61 	shrl	$3,%ebx
62 	pxor	%mm1,%mm0
63 	movd	(%esp,%edi,4),%mm2
64 	movl	%ebp,%edi
65 	psllq	$9,%mm2
66 	andl	%ebx,%edi
67 	shrl	$3,%ebx
68 	pxor	%mm2,%mm0
69 	movd	(%esp,%esi,4),%mm1
70 	movl	%ebp,%esi
71 	psllq	$12,%mm1
72 	andl	%ebx,%esi
73 	shrl	$3,%ebx
74 	pxor	%mm1,%mm0
75 	movd	(%esp,%edi,4),%mm2
76 	movl	%ebp,%edi
77 	psllq	$15,%mm2
78 	andl	%ebx,%edi
79 	shrl	$3,%ebx
80 	pxor	%mm2,%mm0
81 	movd	(%esp,%esi,4),%mm1
82 	movl	%ebp,%esi
83 	psllq	$18,%mm1
84 	andl	%ebx,%esi
85 	shrl	$3,%ebx
86 	pxor	%mm1,%mm0
87 	movd	(%esp,%edi,4),%mm2
88 	movl	%ebp,%edi
89 	psllq	$21,%mm2
90 	andl	%ebx,%edi
91 	shrl	$3,%ebx
92 	pxor	%mm2,%mm0
93 	movd	(%esp,%esi,4),%mm1
94 	movl	%ebp,%esi
95 	psllq	$24,%mm1
96 	andl	%ebx,%esi
97 	shrl	$3,%ebx
98 	pxor	%mm1,%mm0
99 	movd	(%esp,%edi,4),%mm2
100 	pxor	%mm4,%mm0
101 	psllq	$27,%mm2
102 	pxor	%mm2,%mm0
103 	movd	(%esp,%esi,4),%mm1
104 	pxor	%mm5,%mm0
105 	psllq	$30,%mm1
106 	addl	$36,%esp
107 	pxor	%mm1,%mm0
108 	ret
109 .size	_mul_1x1_mmx,.-_mul_1x1_mmx
110 .type	_mul_1x1_ialu,@function
111 .align	16
112 _mul_1x1_ialu:
113 	%ifdef __CET__
114 
115 .byte	243,15,30,251
116 	%endif
117 
118 	subl	$36,%esp
119 	movl	%eax,%ecx
120 	leal	(%eax,%eax,1),%edx
121 	leal	(,%eax,4),%ebp
122 	andl	$1073741823,%ecx
123 	leal	(%eax,%eax,1),%edi
124 	sarl	$31,%eax
125 	movl	$0,(%esp)
126 	andl	$2147483647,%edx
127 	movl	%ecx,4(%esp)
128 	xorl	%edx,%ecx
129 	movl	%edx,8(%esp)
130 	xorl	%ebp,%edx
131 	movl	%ecx,12(%esp)
132 	xorl	%edx,%ecx
133 	movl	%ebp,16(%esp)
134 	xorl	%edx,%ebp
135 	movl	%ecx,20(%esp)
136 	xorl	%ecx,%ebp
137 	sarl	$31,%edi
138 	andl	%ebx,%eax
139 	movl	%edx,24(%esp)
140 	andl	%ebx,%edi
141 	movl	%ebp,28(%esp)
142 	movl	%eax,%edx
143 	shll	$31,%eax
144 	movl	%edi,%ecx
145 	shrl	$1,%edx
146 	movl	$7,%esi
147 	shll	$30,%edi
148 	andl	%ebx,%esi
149 	shrl	$2,%ecx
150 	xorl	%edi,%eax
151 	shrl	$3,%ebx
152 	movl	$7,%edi
153 	andl	%ebx,%edi
154 	shrl	$3,%ebx
155 	xorl	%ecx,%edx
156 	xorl	(%esp,%esi,4),%eax
157 	movl	$7,%esi
158 	andl	%ebx,%esi
159 	shrl	$3,%ebx
160 	movl	(%esp,%edi,4),%ebp
161 	movl	$7,%edi
162 	movl	%ebp,%ecx
163 	shll	$3,%ebp
164 	andl	%ebx,%edi
165 	shrl	$29,%ecx
166 	xorl	%ebp,%eax
167 	shrl	$3,%ebx
168 	xorl	%ecx,%edx
169 	movl	(%esp,%esi,4),%ecx
170 	movl	$7,%esi
171 	movl	%ecx,%ebp
172 	shll	$6,%ecx
173 	andl	%ebx,%esi
174 	shrl	$26,%ebp
175 	xorl	%ecx,%eax
176 	shrl	$3,%ebx
177 	xorl	%ebp,%edx
178 	movl	(%esp,%edi,4),%ebp
179 	movl	$7,%edi
180 	movl	%ebp,%ecx
181 	shll	$9,%ebp
182 	andl	%ebx,%edi
183 	shrl	$23,%ecx
184 	xorl	%ebp,%eax
185 	shrl	$3,%ebx
186 	xorl	%ecx,%edx
187 	movl	(%esp,%esi,4),%ecx
188 	movl	$7,%esi
189 	movl	%ecx,%ebp
190 	shll	$12,%ecx
191 	andl	%ebx,%esi
192 	shrl	$20,%ebp
193 	xorl	%ecx,%eax
194 	shrl	$3,%ebx
195 	xorl	%ebp,%edx
196 	movl	(%esp,%edi,4),%ebp
197 	movl	$7,%edi
198 	movl	%ebp,%ecx
199 	shll	$15,%ebp
200 	andl	%ebx,%edi
201 	shrl	$17,%ecx
202 	xorl	%ebp,%eax
203 	shrl	$3,%ebx
204 	xorl	%ecx,%edx
205 	movl	(%esp,%esi,4),%ecx
206 	movl	$7,%esi
207 	movl	%ecx,%ebp
208 	shll	$18,%ecx
209 	andl	%ebx,%esi
210 	shrl	$14,%ebp
211 	xorl	%ecx,%eax
212 	shrl	$3,%ebx
213 	xorl	%ebp,%edx
214 	movl	(%esp,%edi,4),%ebp
215 	movl	$7,%edi
216 	movl	%ebp,%ecx
217 	shll	$21,%ebp
218 	andl	%ebx,%edi
219 	shrl	$11,%ecx
220 	xorl	%ebp,%eax
221 	shrl	$3,%ebx
222 	xorl	%ecx,%edx
223 	movl	(%esp,%esi,4),%ecx
224 	movl	$7,%esi
225 	movl	%ecx,%ebp
226 	shll	$24,%ecx
227 	andl	%ebx,%esi
228 	shrl	$8,%ebp
229 	xorl	%ecx,%eax
230 	shrl	$3,%ebx
231 	xorl	%ebp,%edx
232 	movl	(%esp,%edi,4),%ebp
233 	movl	%ebp,%ecx
234 	shll	$27,%ebp
235 	movl	(%esp,%esi,4),%edi
236 	shrl	$5,%ecx
237 	movl	%edi,%esi
238 	xorl	%ebp,%eax
239 	shll	$30,%edi
240 	xorl	%ecx,%edx
241 	shrl	$2,%esi
242 	xorl	%edi,%eax
243 	xorl	%esi,%edx
244 	addl	$36,%esp
245 	ret
246 .size	_mul_1x1_ialu,.-_mul_1x1_ialu
247 .globl	bn_GF2m_mul_2x2
248 .type	bn_GF2m_mul_2x2,@function
249 .align	16
250 bn_GF2m_mul_2x2:
251 .L_bn_GF2m_mul_2x2_begin:
252 	%ifdef __CET__
253 
254 .byte	243,15,30,251
255 	%endif
256 
257 	call	.L000PIC_me_up
258 .L000PIC_me_up:
259 	popl	%edx
260 	leal	OPENSSL_ia32cap_P-.L000PIC_me_up(%edx),%edx
261 	movl	(%edx),%eax
262 	movl	4(%edx),%edx
263 	testl	$8388608,%eax
264 	jz	.L001ialu
265 	testl	$16777216,%eax
266 	jz	.L002mmx
267 	testl	$2,%edx
268 	jz	.L002mmx
269 	movups	8(%esp),%xmm0
270 	shufps	$177,%xmm0,%xmm0
271 .byte	102,15,58,68,192,1
272 	movl	4(%esp),%eax
273 	movups	%xmm0,(%eax)
274 	ret
275 .align	16
276 .L002mmx:
277 	pushl	%ebp
278 	pushl	%ebx
279 	pushl	%esi
280 	pushl	%edi
281 	movl	24(%esp),%eax
282 	movl	32(%esp),%ebx
283 	call	_mul_1x1_mmx
284 	movq	%mm0,%mm7
285 	movl	28(%esp),%eax
286 	movl	36(%esp),%ebx
287 	call	_mul_1x1_mmx
288 	movq	%mm0,%mm6
289 	movl	24(%esp),%eax
290 	movl	32(%esp),%ebx
291 	xorl	28(%esp),%eax
292 	xorl	36(%esp),%ebx
293 	call	_mul_1x1_mmx
294 	pxor	%mm7,%mm0
295 	movl	20(%esp),%eax
296 	pxor	%mm6,%mm0
297 	movq	%mm0,%mm2
298 	psllq	$32,%mm0
299 	popl	%edi
300 	psrlq	$32,%mm2
301 	popl	%esi
302 	pxor	%mm6,%mm0
303 	popl	%ebx
304 	pxor	%mm7,%mm2
305 	movq	%mm0,(%eax)
306 	popl	%ebp
307 	movq	%mm2,8(%eax)
308 	emms
309 	ret
310 .align	16
311 .L001ialu:
312 	pushl	%ebp
313 	pushl	%ebx
314 	pushl	%esi
315 	pushl	%edi
316 	subl	$20,%esp
317 	movl	44(%esp),%eax
318 	movl	52(%esp),%ebx
319 	call	_mul_1x1_ialu
320 	movl	%eax,8(%esp)
321 	movl	%edx,12(%esp)
322 	movl	48(%esp),%eax
323 	movl	56(%esp),%ebx
324 	call	_mul_1x1_ialu
325 	movl	%eax,(%esp)
326 	movl	%edx,4(%esp)
327 	movl	44(%esp),%eax
328 	movl	52(%esp),%ebx
329 	xorl	48(%esp),%eax
330 	xorl	56(%esp),%ebx
331 	call	_mul_1x1_ialu
332 	movl	40(%esp),%ebp
333 	movl	(%esp),%ebx
334 	movl	4(%esp),%ecx
335 	movl	8(%esp),%edi
336 	movl	12(%esp),%esi
337 	xorl	%edx,%eax
338 	xorl	%ecx,%edx
339 	xorl	%ebx,%eax
340 	movl	%ebx,(%ebp)
341 	xorl	%edi,%edx
342 	movl	%esi,12(%ebp)
343 	xorl	%esi,%eax
344 	addl	$20,%esp
345 	xorl	%esi,%edx
346 	popl	%edi
347 	xorl	%edx,%eax
348 	popl	%esi
349 	movl	%edx,8(%ebp)
350 	popl	%ebx
351 	movl	%eax,4(%ebp)
352 	popl	%ebp
353 	ret
354 .size	bn_GF2m_mul_2x2,.-.L_bn_GF2m_mul_2x2_begin
355 .byte	71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
356 .byte	99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
357 .byte	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
358 .byte	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
359 .byte	62,0
360 .comm	OPENSSL_ia32cap_P,16,4
361 
362 	.section ".note.gnu.property", "a"
363 	.p2align 2
364 	.long 1f - 0f
365 	.long 4f - 1f
366 	.long 5
367 0:
368 	.asciz "GNU"
369 1:
370 	.p2align 2
371 	.long 0xc0000002
372 	.long 3f - 2f
373 2:
374 	.long 3
375 3:
376 	.p2align 2
377 4:
378