1238405Sjkim	# $FreeBSD$
2238405Sjkim.file	"x86-gf2m.s"
3238405Sjkim.text
4238405Sjkim.type	_mul_1x1_mmx,@function
5238405Sjkim.align	16
6238405Sjkim_mul_1x1_mmx:
7238405Sjkim	subl	$36,%esp
8238405Sjkim	movl	%eax,%ecx
9238405Sjkim	leal	(%eax,%eax,1),%edx
10238405Sjkim	andl	$1073741823,%ecx
11238405Sjkim	leal	(%edx,%edx,1),%ebp
12238405Sjkim	movl	$0,(%esp)
13238405Sjkim	andl	$2147483647,%edx
14238405Sjkim	movd	%eax,%mm2
15238405Sjkim	movd	%ebx,%mm3
16238405Sjkim	movl	%ecx,4(%esp)
17238405Sjkim	xorl	%edx,%ecx
18238405Sjkim	pxor	%mm5,%mm5
19238405Sjkim	pxor	%mm4,%mm4
20238405Sjkim	movl	%edx,8(%esp)
21238405Sjkim	xorl	%ebp,%edx
22238405Sjkim	movl	%ecx,12(%esp)
23238405Sjkim	pcmpgtd	%mm2,%mm5
24238405Sjkim	paddd	%mm2,%mm2
25238405Sjkim	xorl	%edx,%ecx
26238405Sjkim	movl	%ebp,16(%esp)
27238405Sjkim	xorl	%edx,%ebp
28238405Sjkim	pand	%mm3,%mm5
29238405Sjkim	pcmpgtd	%mm2,%mm4
30238405Sjkim	movl	%ecx,20(%esp)
31238405Sjkim	xorl	%ecx,%ebp
32238405Sjkim	psllq	$31,%mm5
33238405Sjkim	pand	%mm3,%mm4
34238405Sjkim	movl	%edx,24(%esp)
35238405Sjkim	movl	$7,%esi
36238405Sjkim	movl	%ebp,28(%esp)
37238405Sjkim	movl	%esi,%ebp
38238405Sjkim	andl	%ebx,%esi
39238405Sjkim	shrl	$3,%ebx
40238405Sjkim	movl	%ebp,%edi
41238405Sjkim	psllq	$30,%mm4
42238405Sjkim	andl	%ebx,%edi
43238405Sjkim	shrl	$3,%ebx
44238405Sjkim	movd	(%esp,%esi,4),%mm0
45238405Sjkim	movl	%ebp,%esi
46238405Sjkim	andl	%ebx,%esi
47238405Sjkim	shrl	$3,%ebx
48238405Sjkim	movd	(%esp,%edi,4),%mm2
49238405Sjkim	movl	%ebp,%edi
50238405Sjkim	psllq	$3,%mm2
51238405Sjkim	andl	%ebx,%edi
52238405Sjkim	shrl	$3,%ebx
53238405Sjkim	pxor	%mm2,%mm0
54238405Sjkim	movd	(%esp,%esi,4),%mm1
55238405Sjkim	movl	%ebp,%esi
56238405Sjkim	psllq	$6,%mm1
57238405Sjkim	andl	%ebx,%esi
58238405Sjkim	shrl	$3,%ebx
59238405Sjkim	pxor	%mm1,%mm0
60238405Sjkim	movd	(%esp,%edi,4),%mm2
61238405Sjkim	movl	%ebp,%edi
62238405Sjkim	psllq	$9,%mm2
63238405Sjkim	andl	%ebx,%edi
64238405Sjkim	shrl	$3,%ebx
65238405Sjkim	pxor	%mm2,%mm0
66238405Sjkim	movd	(%esp,%esi,4),%mm1
67238405Sjkim	movl	%ebp,%esi
68238405Sjkim	psllq	$12,%mm1
69238405Sjkim	andl	%ebx,%esi
70238405Sjkim	shrl	$3,%ebx
71238405Sjkim	pxor	%mm1,%mm0
72238405Sjkim	movd	(%esp,%edi,4),%mm2
73238405Sjkim	movl	%ebp,%edi
74238405Sjkim	psllq	$15,%mm2
75238405Sjkim	andl	%ebx,%edi
76238405Sjkim	shrl	$3,%ebx
77238405Sjkim	pxor	%mm2,%mm0
78238405Sjkim	movd	(%esp,%esi,4),%mm1
79238405Sjkim	movl	%ebp,%esi
80238405Sjkim	psllq	$18,%mm1
81238405Sjkim	andl	%ebx,%esi
82238405Sjkim	shrl	$3,%ebx
83238405Sjkim	pxor	%mm1,%mm0
84238405Sjkim	movd	(%esp,%edi,4),%mm2
85238405Sjkim	movl	%ebp,%edi
86238405Sjkim	psllq	$21,%mm2
87238405Sjkim	andl	%ebx,%edi
88238405Sjkim	shrl	$3,%ebx
89238405Sjkim	pxor	%mm2,%mm0
90238405Sjkim	movd	(%esp,%esi,4),%mm1
91238405Sjkim	movl	%ebp,%esi
92238405Sjkim	psllq	$24,%mm1
93238405Sjkim	andl	%ebx,%esi
94238405Sjkim	shrl	$3,%ebx
95238405Sjkim	pxor	%mm1,%mm0
96238405Sjkim	movd	(%esp,%edi,4),%mm2
97238405Sjkim	pxor	%mm4,%mm0
98238405Sjkim	psllq	$27,%mm2
99238405Sjkim	pxor	%mm2,%mm0
100238405Sjkim	movd	(%esp,%esi,4),%mm1
101238405Sjkim	pxor	%mm5,%mm0
102238405Sjkim	psllq	$30,%mm1
103238405Sjkim	addl	$36,%esp
104238405Sjkim	pxor	%mm1,%mm0
105238405Sjkim	ret
106238405Sjkim.size	_mul_1x1_mmx,.-_mul_1x1_mmx
107238405Sjkim.type	_mul_1x1_ialu,@function
108238405Sjkim.align	16
109238405Sjkim_mul_1x1_ialu:
110238405Sjkim	subl	$36,%esp
111238405Sjkim	movl	%eax,%ecx
112238405Sjkim	leal	(%eax,%eax,1),%edx
113238405Sjkim	leal	(,%eax,4),%ebp
114238405Sjkim	andl	$1073741823,%ecx
115238405Sjkim	leal	(%eax,%eax,1),%edi
116238405Sjkim	sarl	$31,%eax
117238405Sjkim	movl	$0,(%esp)
118238405Sjkim	andl	$2147483647,%edx
119238405Sjkim	movl	%ecx,4(%esp)
120238405Sjkim	xorl	%edx,%ecx
121238405Sjkim	movl	%edx,8(%esp)
122238405Sjkim	xorl	%ebp,%edx
123238405Sjkim	movl	%ecx,12(%esp)
124238405Sjkim	xorl	%edx,%ecx
125238405Sjkim	movl	%ebp,16(%esp)
126238405Sjkim	xorl	%edx,%ebp
127238405Sjkim	movl	%ecx,20(%esp)
128238405Sjkim	xorl	%ecx,%ebp
129238405Sjkim	sarl	$31,%edi
130238405Sjkim	andl	%ebx,%eax
131238405Sjkim	movl	%edx,24(%esp)
132238405Sjkim	andl	%ebx,%edi
133238405Sjkim	movl	%ebp,28(%esp)
134238405Sjkim	movl	%eax,%edx
135238405Sjkim	shll	$31,%eax
136238405Sjkim	movl	%edi,%ecx
137238405Sjkim	shrl	$1,%edx
138238405Sjkim	movl	$7,%esi
139238405Sjkim	shll	$30,%edi
140238405Sjkim	andl	%ebx,%esi
141238405Sjkim	shrl	$2,%ecx
142238405Sjkim	xorl	%edi,%eax
143238405Sjkim	shrl	$3,%ebx
144238405Sjkim	movl	$7,%edi
145238405Sjkim	andl	%ebx,%edi
146238405Sjkim	shrl	$3,%ebx
147238405Sjkim	xorl	%ecx,%edx
148238405Sjkim	xorl	(%esp,%esi,4),%eax
149238405Sjkim	movl	$7,%esi
150238405Sjkim	andl	%ebx,%esi
151238405Sjkim	shrl	$3,%ebx
152238405Sjkim	movl	(%esp,%edi,4),%ebp
153238405Sjkim	movl	$7,%edi
154238405Sjkim	movl	%ebp,%ecx
155238405Sjkim	shll	$3,%ebp
156238405Sjkim	andl	%ebx,%edi
157238405Sjkim	shrl	$29,%ecx
158238405Sjkim	xorl	%ebp,%eax
159238405Sjkim	shrl	$3,%ebx
160238405Sjkim	xorl	%ecx,%edx
161238405Sjkim	movl	(%esp,%esi,4),%ecx
162238405Sjkim	movl	$7,%esi
163238405Sjkim	movl	%ecx,%ebp
164238405Sjkim	shll	$6,%ecx
165238405Sjkim	andl	%ebx,%esi
166238405Sjkim	shrl	$26,%ebp
167238405Sjkim	xorl	%ecx,%eax
168238405Sjkim	shrl	$3,%ebx
169238405Sjkim	xorl	%ebp,%edx
170238405Sjkim	movl	(%esp,%edi,4),%ebp
171238405Sjkim	movl	$7,%edi
172238405Sjkim	movl	%ebp,%ecx
173238405Sjkim	shll	$9,%ebp
174238405Sjkim	andl	%ebx,%edi
175238405Sjkim	shrl	$23,%ecx
176238405Sjkim	xorl	%ebp,%eax
177238405Sjkim	shrl	$3,%ebx
178238405Sjkim	xorl	%ecx,%edx
179238405Sjkim	movl	(%esp,%esi,4),%ecx
180238405Sjkim	movl	$7,%esi
181238405Sjkim	movl	%ecx,%ebp
182238405Sjkim	shll	$12,%ecx
183238405Sjkim	andl	%ebx,%esi
184238405Sjkim	shrl	$20,%ebp
185238405Sjkim	xorl	%ecx,%eax
186238405Sjkim	shrl	$3,%ebx
187238405Sjkim	xorl	%ebp,%edx
188238405Sjkim	movl	(%esp,%edi,4),%ebp
189238405Sjkim	movl	$7,%edi
190238405Sjkim	movl	%ebp,%ecx
191238405Sjkim	shll	$15,%ebp
192238405Sjkim	andl	%ebx,%edi
193238405Sjkim	shrl	$17,%ecx
194238405Sjkim	xorl	%ebp,%eax
195238405Sjkim	shrl	$3,%ebx
196238405Sjkim	xorl	%ecx,%edx
197238405Sjkim	movl	(%esp,%esi,4),%ecx
198238405Sjkim	movl	$7,%esi
199238405Sjkim	movl	%ecx,%ebp
200238405Sjkim	shll	$18,%ecx
201238405Sjkim	andl	%ebx,%esi
202238405Sjkim	shrl	$14,%ebp
203238405Sjkim	xorl	%ecx,%eax
204238405Sjkim	shrl	$3,%ebx
205238405Sjkim	xorl	%ebp,%edx
206238405Sjkim	movl	(%esp,%edi,4),%ebp
207238405Sjkim	movl	$7,%edi
208238405Sjkim	movl	%ebp,%ecx
209238405Sjkim	shll	$21,%ebp
210238405Sjkim	andl	%ebx,%edi
211238405Sjkim	shrl	$11,%ecx
212238405Sjkim	xorl	%ebp,%eax
213238405Sjkim	shrl	$3,%ebx
214238405Sjkim	xorl	%ecx,%edx
215238405Sjkim	movl	(%esp,%esi,4),%ecx
216238405Sjkim	movl	$7,%esi
217238405Sjkim	movl	%ecx,%ebp
218238405Sjkim	shll	$24,%ecx
219238405Sjkim	andl	%ebx,%esi
220238405Sjkim	shrl	$8,%ebp
221238405Sjkim	xorl	%ecx,%eax
222238405Sjkim	shrl	$3,%ebx
223238405Sjkim	xorl	%ebp,%edx
224238405Sjkim	movl	(%esp,%edi,4),%ebp
225238405Sjkim	movl	%ebp,%ecx
226238405Sjkim	shll	$27,%ebp
227238405Sjkim	movl	(%esp,%esi,4),%edi
228238405Sjkim	shrl	$5,%ecx
229238405Sjkim	movl	%edi,%esi
230238405Sjkim	xorl	%ebp,%eax
231238405Sjkim	shll	$30,%edi
232238405Sjkim	xorl	%ecx,%edx
233238405Sjkim	shrl	$2,%esi
234238405Sjkim	xorl	%edi,%eax
235238405Sjkim	xorl	%esi,%edx
236238405Sjkim	addl	$36,%esp
237238405Sjkim	ret
238238405Sjkim.size	_mul_1x1_ialu,.-_mul_1x1_ialu
239238405Sjkim.globl	bn_GF2m_mul_2x2
240238405Sjkim.type	bn_GF2m_mul_2x2,@function
241238405Sjkim.align	16
242238405Sjkimbn_GF2m_mul_2x2:
243238405Sjkim.L_bn_GF2m_mul_2x2_begin:
244238405Sjkim	leal	OPENSSL_ia32cap_P,%edx
245238405Sjkim	movl	(%edx),%eax
246238405Sjkim	movl	4(%edx),%edx
247238405Sjkim	testl	$8388608,%eax
248238405Sjkim	jz	.L000ialu
249238405Sjkim	testl	$16777216,%eax
250238405Sjkim	jz	.L001mmx
251238405Sjkim	testl	$2,%edx
252238405Sjkim	jz	.L001mmx
253238405Sjkim	movups	8(%esp),%xmm0
254238405Sjkim	shufps	$177,%xmm0,%xmm0
255238405Sjkim.byte	102,15,58,68,192,1
256238405Sjkim	movl	4(%esp),%eax
257238405Sjkim	movups	%xmm0,(%eax)
258238405Sjkim	ret
259238405Sjkim.align	16
260238405Sjkim.L001mmx:
261238405Sjkim	pushl	%ebp
262238405Sjkim	pushl	%ebx
263238405Sjkim	pushl	%esi
264238405Sjkim	pushl	%edi
265238405Sjkim	movl	24(%esp),%eax
266238405Sjkim	movl	32(%esp),%ebx
267238405Sjkim	call	_mul_1x1_mmx
268238405Sjkim	movq	%mm0,%mm7
269238405Sjkim	movl	28(%esp),%eax
270238405Sjkim	movl	36(%esp),%ebx
271238405Sjkim	call	_mul_1x1_mmx
272238405Sjkim	movq	%mm0,%mm6
273238405Sjkim	movl	24(%esp),%eax
274238405Sjkim	movl	32(%esp),%ebx
275238405Sjkim	xorl	28(%esp),%eax
276238405Sjkim	xorl	36(%esp),%ebx
277238405Sjkim	call	_mul_1x1_mmx
278238405Sjkim	pxor	%mm7,%mm0
279238405Sjkim	movl	20(%esp),%eax
280238405Sjkim	pxor	%mm6,%mm0
281238405Sjkim	movq	%mm0,%mm2
282238405Sjkim	psllq	$32,%mm0
283238405Sjkim	popl	%edi
284238405Sjkim	psrlq	$32,%mm2
285238405Sjkim	popl	%esi
286238405Sjkim	pxor	%mm6,%mm0
287238405Sjkim	popl	%ebx
288238405Sjkim	pxor	%mm7,%mm2
289238405Sjkim	movq	%mm0,(%eax)
290238405Sjkim	popl	%ebp
291238405Sjkim	movq	%mm2,8(%eax)
292238405Sjkim	emms
293238405Sjkim	ret
294238405Sjkim.align	16
295238405Sjkim.L000ialu:
296238405Sjkim	pushl	%ebp
297238405Sjkim	pushl	%ebx
298238405Sjkim	pushl	%esi
299238405Sjkim	pushl	%edi
300238405Sjkim	subl	$20,%esp
301238405Sjkim	movl	44(%esp),%eax
302238405Sjkim	movl	52(%esp),%ebx
303238405Sjkim	call	_mul_1x1_ialu
304238405Sjkim	movl	%eax,8(%esp)
305238405Sjkim	movl	%edx,12(%esp)
306238405Sjkim	movl	48(%esp),%eax
307238405Sjkim	movl	56(%esp),%ebx
308238405Sjkim	call	_mul_1x1_ialu
309238405Sjkim	movl	%eax,(%esp)
310238405Sjkim	movl	%edx,4(%esp)
311238405Sjkim	movl	44(%esp),%eax
312238405Sjkim	movl	52(%esp),%ebx
313238405Sjkim	xorl	48(%esp),%eax
314238405Sjkim	xorl	56(%esp),%ebx
315238405Sjkim	call	_mul_1x1_ialu
316238405Sjkim	movl	40(%esp),%ebp
317238405Sjkim	movl	(%esp),%ebx
318238405Sjkim	movl	4(%esp),%ecx
319238405Sjkim	movl	8(%esp),%edi
320238405Sjkim	movl	12(%esp),%esi
321238405Sjkim	xorl	%edx,%eax
322238405Sjkim	xorl	%ecx,%edx
323238405Sjkim	xorl	%ebx,%eax
324238405Sjkim	movl	%ebx,(%ebp)
325238405Sjkim	xorl	%edi,%edx
326238405Sjkim	movl	%esi,12(%ebp)
327238405Sjkim	xorl	%esi,%eax
328238405Sjkim	addl	$20,%esp
329238405Sjkim	xorl	%esi,%edx
330238405Sjkim	popl	%edi
331238405Sjkim	xorl	%edx,%eax
332238405Sjkim	popl	%esi
333238405Sjkim	movl	%edx,8(%ebp)
334238405Sjkim	popl	%ebx
335238405Sjkim	movl	%eax,4(%ebp)
336238405Sjkim	popl	%ebp
337238405Sjkim	ret
338238405Sjkim.size	bn_GF2m_mul_2x2,.-.L_bn_GF2m_mul_2x2_begin
339238405Sjkim.byte	71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
340238405Sjkim.byte	99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
341238405Sjkim.byte	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
342238405Sjkim.byte	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
343238405Sjkim.byte	62,0
344238405Sjkim.comm	OPENSSL_ia32cap_P,8,4
345