xref: /netbsd-src/crypto/external/bsd/openssl.old/lib/libcrypto/arch/i386/poly1305-x86.S (revision 4724848cf0da353df257f730694b7882798e5daf)
1*4724848cSchristos#include <machine/asm.h>
2*4724848cSchristos.text
3*4724848cSchristos.align	64
4*4724848cSchristos.globl	poly1305_init
5*4724848cSchristos.type	poly1305_init,@function
6*4724848cSchristos.align	16
7*4724848cSchristospoly1305_init:
8*4724848cSchristos.L_poly1305_init_begin:
9*4724848cSchristos	pushl	%ebp
10*4724848cSchristos	pushl	%ebx
11*4724848cSchristos	pushl	%esi
12*4724848cSchristos	pushl	%edi
13*4724848cSchristos	movl	20(%esp),%edi
14*4724848cSchristos	movl	24(%esp),%esi
15*4724848cSchristos	movl	28(%esp),%ebp
16*4724848cSchristos	xorl	%eax,%eax
17*4724848cSchristos	movl	%eax,(%edi)
18*4724848cSchristos	movl	%eax,4(%edi)
19*4724848cSchristos	movl	%eax,8(%edi)
20*4724848cSchristos	movl	%eax,12(%edi)
21*4724848cSchristos	movl	%eax,16(%edi)
22*4724848cSchristos	movl	%eax,20(%edi)
23*4724848cSchristos	cmpl	$0,%esi
24*4724848cSchristos	je	.L000nokey
25*4724848cSchristos	call	.L001pic_point
26*4724848cSchristos.L001pic_point:
27*4724848cSchristos	popl	%ebx
28*4724848cSchristos	leal	poly1305_blocks-.L001pic_point(%ebx),%eax
29*4724848cSchristos	leal	poly1305_emit-.L001pic_point(%ebx),%edx
30*4724848cSchristos	leal	OPENSSL_ia32cap_P-.L001pic_point(%ebx),%edi
31*4724848cSchristos	movl	(%edi),%ecx
32*4724848cSchristos	andl	$83886080,%ecx
33*4724848cSchristos	cmpl	$83886080,%ecx
34*4724848cSchristos	jne	.L002no_sse2
35*4724848cSchristos	leal	_poly1305_blocks_sse2-.L001pic_point(%ebx),%eax
36*4724848cSchristos	leal	_poly1305_emit_sse2-.L001pic_point(%ebx),%edx
37*4724848cSchristos.L002no_sse2:
38*4724848cSchristos	movl	20(%esp),%edi
39*4724848cSchristos	movl	%eax,(%ebp)
40*4724848cSchristos	movl	%edx,4(%ebp)
41*4724848cSchristos	movl	(%esi),%eax
42*4724848cSchristos	movl	4(%esi),%ebx
43*4724848cSchristos	movl	8(%esi),%ecx
44*4724848cSchristos	movl	12(%esi),%edx
45*4724848cSchristos	andl	$268435455,%eax
46*4724848cSchristos	andl	$268435452,%ebx
47*4724848cSchristos	andl	$268435452,%ecx
48*4724848cSchristos	andl	$268435452,%edx
49*4724848cSchristos	movl	%eax,24(%edi)
50*4724848cSchristos	movl	%ebx,28(%edi)
51*4724848cSchristos	movl	%ecx,32(%edi)
52*4724848cSchristos	movl	%edx,36(%edi)
53*4724848cSchristos	movl	$1,%eax
54*4724848cSchristos.L000nokey:
55*4724848cSchristos	popl	%edi
56*4724848cSchristos	popl	%esi
57*4724848cSchristos	popl	%ebx
58*4724848cSchristos	popl	%ebp
59*4724848cSchristos	ret
60*4724848cSchristos.size	poly1305_init,.-.L_poly1305_init_begin
61*4724848cSchristos.globl	poly1305_blocks
62*4724848cSchristos.type	poly1305_blocks,@function
63*4724848cSchristos.align	16
64*4724848cSchristospoly1305_blocks:
65*4724848cSchristos.L_poly1305_blocks_begin:
66*4724848cSchristos	pushl	%ebp
67*4724848cSchristos	pushl	%ebx
68*4724848cSchristos	pushl	%esi
69*4724848cSchristos	pushl	%edi
70*4724848cSchristos	movl	20(%esp),%edi
71*4724848cSchristos	movl	24(%esp),%esi
72*4724848cSchristos	movl	28(%esp),%ecx
73*4724848cSchristos.Lenter_blocks:
74*4724848cSchristos	andl	$-15,%ecx
75*4724848cSchristos	jz	.L003nodata
76*4724848cSchristos	subl	$64,%esp
77*4724848cSchristos	movl	24(%edi),%eax
78*4724848cSchristos	movl	28(%edi),%ebx
79*4724848cSchristos	leal	(%esi,%ecx,1),%ebp
80*4724848cSchristos	movl	32(%edi),%ecx
81*4724848cSchristos	movl	36(%edi),%edx
82*4724848cSchristos	movl	%ebp,92(%esp)
83*4724848cSchristos	movl	%esi,%ebp
84*4724848cSchristos	movl	%eax,36(%esp)
85*4724848cSchristos	movl	%ebx,%eax
86*4724848cSchristos	shrl	$2,%eax
87*4724848cSchristos	movl	%ebx,40(%esp)
88*4724848cSchristos	addl	%ebx,%eax
89*4724848cSchristos	movl	%ecx,%ebx
90*4724848cSchristos	shrl	$2,%ebx
91*4724848cSchristos	movl	%ecx,44(%esp)
92*4724848cSchristos	addl	%ecx,%ebx
93*4724848cSchristos	movl	%edx,%ecx
94*4724848cSchristos	shrl	$2,%ecx
95*4724848cSchristos	movl	%edx,48(%esp)
96*4724848cSchristos	addl	%edx,%ecx
97*4724848cSchristos	movl	%eax,52(%esp)
98*4724848cSchristos	movl	%ebx,56(%esp)
99*4724848cSchristos	movl	%ecx,60(%esp)
100*4724848cSchristos	movl	(%edi),%eax
101*4724848cSchristos	movl	4(%edi),%ebx
102*4724848cSchristos	movl	8(%edi),%ecx
103*4724848cSchristos	movl	12(%edi),%esi
104*4724848cSchristos	movl	16(%edi),%edi
105*4724848cSchristos	jmp	.L004loop
106*4724848cSchristos.align	32
107*4724848cSchristos.L004loop:
108*4724848cSchristos	addl	(%ebp),%eax
109*4724848cSchristos	adcl	4(%ebp),%ebx
110*4724848cSchristos	adcl	8(%ebp),%ecx
111*4724848cSchristos	adcl	12(%ebp),%esi
112*4724848cSchristos	leal	16(%ebp),%ebp
113*4724848cSchristos	adcl	96(%esp),%edi
114*4724848cSchristos	movl	%eax,(%esp)
115*4724848cSchristos	movl	%esi,12(%esp)
116*4724848cSchristos	mull	36(%esp)
117*4724848cSchristos	movl	%edi,16(%esp)
118*4724848cSchristos	movl	%eax,%edi
119*4724848cSchristos	movl	%ebx,%eax
120*4724848cSchristos	movl	%edx,%esi
121*4724848cSchristos	mull	60(%esp)
122*4724848cSchristos	addl	%eax,%edi
123*4724848cSchristos	movl	%ecx,%eax
124*4724848cSchristos	adcl	%edx,%esi
125*4724848cSchristos	mull	56(%esp)
126*4724848cSchristos	addl	%eax,%edi
127*4724848cSchristos	movl	12(%esp),%eax
128*4724848cSchristos	adcl	%edx,%esi
129*4724848cSchristos	mull	52(%esp)
130*4724848cSchristos	addl	%eax,%edi
131*4724848cSchristos	movl	(%esp),%eax
132*4724848cSchristos	adcl	%edx,%esi
133*4724848cSchristos	mull	40(%esp)
134*4724848cSchristos	movl	%edi,20(%esp)
135*4724848cSchristos	xorl	%edi,%edi
136*4724848cSchristos	addl	%eax,%esi
137*4724848cSchristos	movl	%ebx,%eax
138*4724848cSchristos	adcl	%edx,%edi
139*4724848cSchristos	mull	36(%esp)
140*4724848cSchristos	addl	%eax,%esi
141*4724848cSchristos	movl	%ecx,%eax
142*4724848cSchristos	adcl	%edx,%edi
143*4724848cSchristos	mull	60(%esp)
144*4724848cSchristos	addl	%eax,%esi
145*4724848cSchristos	movl	12(%esp),%eax
146*4724848cSchristos	adcl	%edx,%edi
147*4724848cSchristos	mull	56(%esp)
148*4724848cSchristos	addl	%eax,%esi
149*4724848cSchristos	movl	16(%esp),%eax
150*4724848cSchristos	adcl	%edx,%edi
151*4724848cSchristos	imull	52(%esp),%eax
152*4724848cSchristos	addl	%eax,%esi
153*4724848cSchristos	movl	(%esp),%eax
154*4724848cSchristos	adcl	$0,%edi
155*4724848cSchristos	mull	44(%esp)
156*4724848cSchristos	movl	%esi,24(%esp)
157*4724848cSchristos	xorl	%esi,%esi
158*4724848cSchristos	addl	%eax,%edi
159*4724848cSchristos	movl	%ebx,%eax
160*4724848cSchristos	adcl	%edx,%esi
161*4724848cSchristos	mull	40(%esp)
162*4724848cSchristos	addl	%eax,%edi
163*4724848cSchristos	movl	%ecx,%eax
164*4724848cSchristos	adcl	%edx,%esi
165*4724848cSchristos	mull	36(%esp)
166*4724848cSchristos	addl	%eax,%edi
167*4724848cSchristos	movl	12(%esp),%eax
168*4724848cSchristos	adcl	%edx,%esi
169*4724848cSchristos	mull	60(%esp)
170*4724848cSchristos	addl	%eax,%edi
171*4724848cSchristos	movl	16(%esp),%eax
172*4724848cSchristos	adcl	%edx,%esi
173*4724848cSchristos	imull	56(%esp),%eax
174*4724848cSchristos	addl	%eax,%edi
175*4724848cSchristos	movl	(%esp),%eax
176*4724848cSchristos	adcl	$0,%esi
177*4724848cSchristos	mull	48(%esp)
178*4724848cSchristos	movl	%edi,28(%esp)
179*4724848cSchristos	xorl	%edi,%edi
180*4724848cSchristos	addl	%eax,%esi
181*4724848cSchristos	movl	%ebx,%eax
182*4724848cSchristos	adcl	%edx,%edi
183*4724848cSchristos	mull	44(%esp)
184*4724848cSchristos	addl	%eax,%esi
185*4724848cSchristos	movl	%ecx,%eax
186*4724848cSchristos	adcl	%edx,%edi
187*4724848cSchristos	mull	40(%esp)
188*4724848cSchristos	addl	%eax,%esi
189*4724848cSchristos	movl	12(%esp),%eax
190*4724848cSchristos	adcl	%edx,%edi
191*4724848cSchristos	mull	36(%esp)
192*4724848cSchristos	addl	%eax,%esi
193*4724848cSchristos	movl	16(%esp),%ecx
194*4724848cSchristos	adcl	%edx,%edi
195*4724848cSchristos	movl	%ecx,%edx
196*4724848cSchristos	imull	60(%esp),%ecx
197*4724848cSchristos	addl	%ecx,%esi
198*4724848cSchristos	movl	20(%esp),%eax
199*4724848cSchristos	adcl	$0,%edi
200*4724848cSchristos	imull	36(%esp),%edx
201*4724848cSchristos	addl	%edi,%edx
202*4724848cSchristos	movl	24(%esp),%ebx
203*4724848cSchristos	movl	28(%esp),%ecx
204*4724848cSchristos	movl	%edx,%edi
205*4724848cSchristos	shrl	$2,%edx
206*4724848cSchristos	andl	$3,%edi
207*4724848cSchristos	leal	(%edx,%edx,4),%edx
208*4724848cSchristos	addl	%edx,%eax
209*4724848cSchristos	adcl	$0,%ebx
210*4724848cSchristos	adcl	$0,%ecx
211*4724848cSchristos	adcl	$0,%esi
212*4724848cSchristos	adcl	$0,%edi
213*4724848cSchristos	cmpl	92(%esp),%ebp
214*4724848cSchristos	jne	.L004loop
215*4724848cSchristos	movl	84(%esp),%edx
216*4724848cSchristos	addl	$64,%esp
217*4724848cSchristos	movl	%eax,(%edx)
218*4724848cSchristos	movl	%ebx,4(%edx)
219*4724848cSchristos	movl	%ecx,8(%edx)
220*4724848cSchristos	movl	%esi,12(%edx)
221*4724848cSchristos	movl	%edi,16(%edx)
222*4724848cSchristos.L003nodata:
223*4724848cSchristos	popl	%edi
224*4724848cSchristos	popl	%esi
225*4724848cSchristos	popl	%ebx
226*4724848cSchristos	popl	%ebp
227*4724848cSchristos	ret
228*4724848cSchristos.size	poly1305_blocks,.-.L_poly1305_blocks_begin
229*4724848cSchristos.globl	poly1305_emit
230*4724848cSchristos.type	poly1305_emit,@function
231*4724848cSchristos.align	16
232*4724848cSchristospoly1305_emit:
233*4724848cSchristos.L_poly1305_emit_begin:
234*4724848cSchristos	pushl	%ebp
235*4724848cSchristos	pushl	%ebx
236*4724848cSchristos	pushl	%esi
237*4724848cSchristos	pushl	%edi
238*4724848cSchristos	movl	20(%esp),%ebp
239*4724848cSchristos.Lenter_emit:
240*4724848cSchristos	movl	24(%esp),%edi
241*4724848cSchristos	movl	(%ebp),%eax
242*4724848cSchristos	movl	4(%ebp),%ebx
243*4724848cSchristos	movl	8(%ebp),%ecx
244*4724848cSchristos	movl	12(%ebp),%edx
245*4724848cSchristos	movl	16(%ebp),%esi
246*4724848cSchristos	addl	$5,%eax
247*4724848cSchristos	adcl	$0,%ebx
248*4724848cSchristos	adcl	$0,%ecx
249*4724848cSchristos	adcl	$0,%edx
250*4724848cSchristos	adcl	$0,%esi
251*4724848cSchristos	shrl	$2,%esi
252*4724848cSchristos	negl	%esi
253*4724848cSchristos	andl	%esi,%eax
254*4724848cSchristos	andl	%esi,%ebx
255*4724848cSchristos	andl	%esi,%ecx
256*4724848cSchristos	andl	%esi,%edx
257*4724848cSchristos	movl	%eax,(%edi)
258*4724848cSchristos	movl	%ebx,4(%edi)
259*4724848cSchristos	movl	%ecx,8(%edi)
260*4724848cSchristos	movl	%edx,12(%edi)
261*4724848cSchristos	notl	%esi
262*4724848cSchristos	movl	(%ebp),%eax
263*4724848cSchristos	movl	4(%ebp),%ebx
264*4724848cSchristos	movl	8(%ebp),%ecx
265*4724848cSchristos	movl	12(%ebp),%edx
266*4724848cSchristos	movl	28(%esp),%ebp
267*4724848cSchristos	andl	%esi,%eax
268*4724848cSchristos	andl	%esi,%ebx
269*4724848cSchristos	andl	%esi,%ecx
270*4724848cSchristos	andl	%esi,%edx
271*4724848cSchristos	orl	(%edi),%eax
272*4724848cSchristos	orl	4(%edi),%ebx
273*4724848cSchristos	orl	8(%edi),%ecx
274*4724848cSchristos	orl	12(%edi),%edx
275*4724848cSchristos	addl	(%ebp),%eax
276*4724848cSchristos	adcl	4(%ebp),%ebx
277*4724848cSchristos	adcl	8(%ebp),%ecx
278*4724848cSchristos	adcl	12(%ebp),%edx
279*4724848cSchristos	movl	%eax,(%edi)
280*4724848cSchristos	movl	%ebx,4(%edi)
281*4724848cSchristos	movl	%ecx,8(%edi)
282*4724848cSchristos	movl	%edx,12(%edi)
283*4724848cSchristos	popl	%edi
284*4724848cSchristos	popl	%esi
285*4724848cSchristos	popl	%ebx
286*4724848cSchristos	popl	%ebp
287*4724848cSchristos	ret
288*4724848cSchristos.size	poly1305_emit,.-.L_poly1305_emit_begin
289*4724848cSchristos.align	32
290*4724848cSchristos.type	_poly1305_init_sse2,@function
291*4724848cSchristos.align	16
292*4724848cSchristos_poly1305_init_sse2:
293*4724848cSchristos	movdqu	24(%edi),%xmm4
294*4724848cSchristos	leal	48(%edi),%edi
295*4724848cSchristos	movl	%esp,%ebp
296*4724848cSchristos	subl	$224,%esp
297*4724848cSchristos	andl	$-16,%esp
298*4724848cSchristos	movq	64(%ebx),%xmm7
299*4724848cSchristos	movdqa	%xmm4,%xmm0
300*4724848cSchristos	movdqa	%xmm4,%xmm1
301*4724848cSchristos	movdqa	%xmm4,%xmm2
302*4724848cSchristos	pand	%xmm7,%xmm0
303*4724848cSchristos	psrlq	$26,%xmm1
304*4724848cSchristos	psrldq	$6,%xmm2
305*4724848cSchristos	pand	%xmm7,%xmm1
306*4724848cSchristos	movdqa	%xmm2,%xmm3
307*4724848cSchristos	psrlq	$4,%xmm2
308*4724848cSchristos	psrlq	$30,%xmm3
309*4724848cSchristos	pand	%xmm7,%xmm2
310*4724848cSchristos	pand	%xmm7,%xmm3
311*4724848cSchristos	psrldq	$13,%xmm4
312*4724848cSchristos	leal	144(%esp),%edx
313*4724848cSchristos	movl	$2,%ecx
314*4724848cSchristos.L005square:
315*4724848cSchristos	movdqa	%xmm0,(%esp)
316*4724848cSchristos	movdqa	%xmm1,16(%esp)
317*4724848cSchristos	movdqa	%xmm2,32(%esp)
318*4724848cSchristos	movdqa	%xmm3,48(%esp)
319*4724848cSchristos	movdqa	%xmm4,64(%esp)
320*4724848cSchristos	movdqa	%xmm1,%xmm6
321*4724848cSchristos	movdqa	%xmm2,%xmm5
322*4724848cSchristos	pslld	$2,%xmm6
323*4724848cSchristos	pslld	$2,%xmm5
324*4724848cSchristos	paddd	%xmm1,%xmm6
325*4724848cSchristos	paddd	%xmm2,%xmm5
326*4724848cSchristos	movdqa	%xmm6,80(%esp)
327*4724848cSchristos	movdqa	%xmm5,96(%esp)
328*4724848cSchristos	movdqa	%xmm3,%xmm6
329*4724848cSchristos	movdqa	%xmm4,%xmm5
330*4724848cSchristos	pslld	$2,%xmm6
331*4724848cSchristos	pslld	$2,%xmm5
332*4724848cSchristos	paddd	%xmm3,%xmm6
333*4724848cSchristos	paddd	%xmm4,%xmm5
334*4724848cSchristos	movdqa	%xmm6,112(%esp)
335*4724848cSchristos	movdqa	%xmm5,128(%esp)
336*4724848cSchristos	pshufd	$68,%xmm0,%xmm6
337*4724848cSchristos	movdqa	%xmm1,%xmm5
338*4724848cSchristos	pshufd	$68,%xmm1,%xmm1
339*4724848cSchristos	pshufd	$68,%xmm2,%xmm2
340*4724848cSchristos	pshufd	$68,%xmm3,%xmm3
341*4724848cSchristos	pshufd	$68,%xmm4,%xmm4
342*4724848cSchristos	movdqa	%xmm6,(%edx)
343*4724848cSchristos	movdqa	%xmm1,16(%edx)
344*4724848cSchristos	movdqa	%xmm2,32(%edx)
345*4724848cSchristos	movdqa	%xmm3,48(%edx)
346*4724848cSchristos	movdqa	%xmm4,64(%edx)
347*4724848cSchristos	pmuludq	%xmm0,%xmm4
348*4724848cSchristos	pmuludq	%xmm0,%xmm3
349*4724848cSchristos	pmuludq	%xmm0,%xmm2
350*4724848cSchristos	pmuludq	%xmm0,%xmm1
351*4724848cSchristos	pmuludq	%xmm6,%xmm0
352*4724848cSchristos	movdqa	%xmm5,%xmm6
353*4724848cSchristos	pmuludq	48(%edx),%xmm5
354*4724848cSchristos	movdqa	%xmm6,%xmm7
355*4724848cSchristos	pmuludq	32(%edx),%xmm6
356*4724848cSchristos	paddq	%xmm5,%xmm4
357*4724848cSchristos	movdqa	%xmm7,%xmm5
358*4724848cSchristos	pmuludq	16(%edx),%xmm7
359*4724848cSchristos	paddq	%xmm6,%xmm3
360*4724848cSchristos	movdqa	80(%esp),%xmm6
361*4724848cSchristos	pmuludq	(%edx),%xmm5
362*4724848cSchristos	paddq	%xmm7,%xmm2
363*4724848cSchristos	pmuludq	64(%edx),%xmm6
364*4724848cSchristos	movdqa	32(%esp),%xmm7
365*4724848cSchristos	paddq	%xmm5,%xmm1
366*4724848cSchristos	movdqa	%xmm7,%xmm5
367*4724848cSchristos	pmuludq	32(%edx),%xmm7
368*4724848cSchristos	paddq	%xmm6,%xmm0
369*4724848cSchristos	movdqa	%xmm5,%xmm6
370*4724848cSchristos	pmuludq	16(%edx),%xmm5
371*4724848cSchristos	paddq	%xmm7,%xmm4
372*4724848cSchristos	movdqa	96(%esp),%xmm7
373*4724848cSchristos	pmuludq	(%edx),%xmm6
374*4724848cSchristos	paddq	%xmm5,%xmm3
375*4724848cSchristos	movdqa	%xmm7,%xmm5
376*4724848cSchristos	pmuludq	64(%edx),%xmm7
377*4724848cSchristos	paddq	%xmm6,%xmm2
378*4724848cSchristos	pmuludq	48(%edx),%xmm5
379*4724848cSchristos	movdqa	48(%esp),%xmm6
380*4724848cSchristos	paddq	%xmm7,%xmm1
381*4724848cSchristos	movdqa	%xmm6,%xmm7
382*4724848cSchristos	pmuludq	16(%edx),%xmm6
383*4724848cSchristos	paddq	%xmm5,%xmm0
384*4724848cSchristos	movdqa	112(%esp),%xmm5
385*4724848cSchristos	pmuludq	(%edx),%xmm7
386*4724848cSchristos	paddq	%xmm6,%xmm4
387*4724848cSchristos	movdqa	%xmm5,%xmm6
388*4724848cSchristos	pmuludq	64(%edx),%xmm5
389*4724848cSchristos	paddq	%xmm7,%xmm3
390*4724848cSchristos	movdqa	%xmm6,%xmm7
391*4724848cSchristos	pmuludq	48(%edx),%xmm6
392*4724848cSchristos	paddq	%xmm5,%xmm2
393*4724848cSchristos	pmuludq	32(%edx),%xmm7
394*4724848cSchristos	movdqa	64(%esp),%xmm5
395*4724848cSchristos	paddq	%xmm6,%xmm1
396*4724848cSchristos	movdqa	128(%esp),%xmm6
397*4724848cSchristos	pmuludq	(%edx),%xmm5
398*4724848cSchristos	paddq	%xmm7,%xmm0
399*4724848cSchristos	movdqa	%xmm6,%xmm7
400*4724848cSchristos	pmuludq	64(%edx),%xmm6
401*4724848cSchristos	paddq	%xmm5,%xmm4
402*4724848cSchristos	movdqa	%xmm7,%xmm5
403*4724848cSchristos	pmuludq	16(%edx),%xmm7
404*4724848cSchristos	paddq	%xmm6,%xmm3
405*4724848cSchristos	movdqa	%xmm5,%xmm6
406*4724848cSchristos	pmuludq	32(%edx),%xmm5
407*4724848cSchristos	paddq	%xmm7,%xmm0
408*4724848cSchristos	pmuludq	48(%edx),%xmm6
409*4724848cSchristos	movdqa	64(%ebx),%xmm7
410*4724848cSchristos	paddq	%xmm5,%xmm1
411*4724848cSchristos	paddq	%xmm6,%xmm2
412*4724848cSchristos	movdqa	%xmm3,%xmm5
413*4724848cSchristos	pand	%xmm7,%xmm3
414*4724848cSchristos	psrlq	$26,%xmm5
415*4724848cSchristos	paddq	%xmm4,%xmm5
416*4724848cSchristos	movdqa	%xmm0,%xmm6
417*4724848cSchristos	pand	%xmm7,%xmm0
418*4724848cSchristos	psrlq	$26,%xmm6
419*4724848cSchristos	movdqa	%xmm5,%xmm4
420*4724848cSchristos	paddq	%xmm1,%xmm6
421*4724848cSchristos	psrlq	$26,%xmm5
422*4724848cSchristos	pand	%xmm7,%xmm4
423*4724848cSchristos	movdqa	%xmm6,%xmm1
424*4724848cSchristos	psrlq	$26,%xmm6
425*4724848cSchristos	paddd	%xmm5,%xmm0
426*4724848cSchristos	psllq	$2,%xmm5
427*4724848cSchristos	paddq	%xmm2,%xmm6
428*4724848cSchristos	paddq	%xmm0,%xmm5
429*4724848cSchristos	pand	%xmm7,%xmm1
430*4724848cSchristos	movdqa	%xmm6,%xmm2
431*4724848cSchristos	psrlq	$26,%xmm6
432*4724848cSchristos	pand	%xmm7,%xmm2
433*4724848cSchristos	paddd	%xmm3,%xmm6
434*4724848cSchristos	movdqa	%xmm5,%xmm0
435*4724848cSchristos	psrlq	$26,%xmm5
436*4724848cSchristos	movdqa	%xmm6,%xmm3
437*4724848cSchristos	psrlq	$26,%xmm6
438*4724848cSchristos	pand	%xmm7,%xmm0
439*4724848cSchristos	paddd	%xmm5,%xmm1
440*4724848cSchristos	pand	%xmm7,%xmm3
441*4724848cSchristos	paddd	%xmm6,%xmm4
442*4724848cSchristos	decl	%ecx
443*4724848cSchristos	jz	.L006square_break
444*4724848cSchristos	punpcklqdq	(%esp),%xmm0
445*4724848cSchristos	punpcklqdq	16(%esp),%xmm1
446*4724848cSchristos	punpcklqdq	32(%esp),%xmm2
447*4724848cSchristos	punpcklqdq	48(%esp),%xmm3
448*4724848cSchristos	punpcklqdq	64(%esp),%xmm4
449*4724848cSchristos	jmp	.L005square
450*4724848cSchristos.L006square_break:
451*4724848cSchristos	psllq	$32,%xmm0
452*4724848cSchristos	psllq	$32,%xmm1
453*4724848cSchristos	psllq	$32,%xmm2
454*4724848cSchristos	psllq	$32,%xmm3
455*4724848cSchristos	psllq	$32,%xmm4
456*4724848cSchristos	por	(%esp),%xmm0
457*4724848cSchristos	por	16(%esp),%xmm1
458*4724848cSchristos	por	32(%esp),%xmm2
459*4724848cSchristos	por	48(%esp),%xmm3
460*4724848cSchristos	por	64(%esp),%xmm4
461*4724848cSchristos	pshufd	$141,%xmm0,%xmm0
462*4724848cSchristos	pshufd	$141,%xmm1,%xmm1
463*4724848cSchristos	pshufd	$141,%xmm2,%xmm2
464*4724848cSchristos	pshufd	$141,%xmm3,%xmm3
465*4724848cSchristos	pshufd	$141,%xmm4,%xmm4
466*4724848cSchristos	movdqu	%xmm0,(%edi)
467*4724848cSchristos	movdqu	%xmm1,16(%edi)
468*4724848cSchristos	movdqu	%xmm2,32(%edi)
469*4724848cSchristos	movdqu	%xmm3,48(%edi)
470*4724848cSchristos	movdqu	%xmm4,64(%edi)
471*4724848cSchristos	movdqa	%xmm1,%xmm6
472*4724848cSchristos	movdqa	%xmm2,%xmm5
473*4724848cSchristos	pslld	$2,%xmm6
474*4724848cSchristos	pslld	$2,%xmm5
475*4724848cSchristos	paddd	%xmm1,%xmm6
476*4724848cSchristos	paddd	%xmm2,%xmm5
477*4724848cSchristos	movdqu	%xmm6,80(%edi)
478*4724848cSchristos	movdqu	%xmm5,96(%edi)
479*4724848cSchristos	movdqa	%xmm3,%xmm6
480*4724848cSchristos	movdqa	%xmm4,%xmm5
481*4724848cSchristos	pslld	$2,%xmm6
482*4724848cSchristos	pslld	$2,%xmm5
483*4724848cSchristos	paddd	%xmm3,%xmm6
484*4724848cSchristos	paddd	%xmm4,%xmm5
485*4724848cSchristos	movdqu	%xmm6,112(%edi)
486*4724848cSchristos	movdqu	%xmm5,128(%edi)
487*4724848cSchristos	movl	%ebp,%esp
488*4724848cSchristos	leal	-48(%edi),%edi
489*4724848cSchristos	ret
490*4724848cSchristos.size	_poly1305_init_sse2,.-_poly1305_init_sse2
491*4724848cSchristos.align	32
492*4724848cSchristos.type	_poly1305_blocks_sse2,@function
493*4724848cSchristos.align	16
494*4724848cSchristos_poly1305_blocks_sse2:
495*4724848cSchristos	pushl	%ebp
496*4724848cSchristos	pushl	%ebx
497*4724848cSchristos	pushl	%esi
498*4724848cSchristos	pushl	%edi
499*4724848cSchristos	movl	20(%esp),%edi
500*4724848cSchristos	movl	24(%esp),%esi
501*4724848cSchristos	movl	28(%esp),%ecx
502*4724848cSchristos	movl	20(%edi),%eax
503*4724848cSchristos	andl	$-16,%ecx
504*4724848cSchristos	jz	.L007nodata
505*4724848cSchristos	cmpl	$64,%ecx
506*4724848cSchristos	jae	.L008enter_sse2
507*4724848cSchristos	testl	%eax,%eax
508*4724848cSchristos	jz	.Lenter_blocks
509*4724848cSchristos.align	16
510*4724848cSchristos.L008enter_sse2:
511*4724848cSchristos	call	.L009pic_point
512*4724848cSchristos.L009pic_point:
513*4724848cSchristos	popl	%ebx
514*4724848cSchristos	leal	.Lconst_sse2-.L009pic_point(%ebx),%ebx
515*4724848cSchristos	testl	%eax,%eax
516*4724848cSchristos	jnz	.L010base2_26
517*4724848cSchristos	call	_poly1305_init_sse2
518*4724848cSchristos	movl	(%edi),%eax
519*4724848cSchristos	movl	3(%edi),%ecx
520*4724848cSchristos	movl	6(%edi),%edx
521*4724848cSchristos	movl	9(%edi),%esi
522*4724848cSchristos	movl	13(%edi),%ebp
523*4724848cSchristos	movl	$1,20(%edi)
524*4724848cSchristos	shrl	$2,%ecx
525*4724848cSchristos	andl	$67108863,%eax
526*4724848cSchristos	shrl	$4,%edx
527*4724848cSchristos	andl	$67108863,%ecx
528*4724848cSchristos	shrl	$6,%esi
529*4724848cSchristos	andl	$67108863,%edx
530*4724848cSchristos	movd	%eax,%xmm0
531*4724848cSchristos	movd	%ecx,%xmm1
532*4724848cSchristos	movd	%edx,%xmm2
533*4724848cSchristos	movd	%esi,%xmm3
534*4724848cSchristos	movd	%ebp,%xmm4
535*4724848cSchristos	movl	24(%esp),%esi
536*4724848cSchristos	movl	28(%esp),%ecx
537*4724848cSchristos	jmp	.L011base2_32
538*4724848cSchristos.align	16
539*4724848cSchristos.L010base2_26:
540*4724848cSchristos	movd	(%edi),%xmm0
541*4724848cSchristos	movd	4(%edi),%xmm1
542*4724848cSchristos	movd	8(%edi),%xmm2
543*4724848cSchristos	movd	12(%edi),%xmm3
544*4724848cSchristos	movd	16(%edi),%xmm4
545*4724848cSchristos	movdqa	64(%ebx),%xmm7
546*4724848cSchristos.L011base2_32:
547*4724848cSchristos	movl	32(%esp),%eax
548*4724848cSchristos	movl	%esp,%ebp
549*4724848cSchristos	subl	$528,%esp
550*4724848cSchristos	andl	$-16,%esp
551*4724848cSchristos	leal	48(%edi),%edi
552*4724848cSchristos	shll	$24,%eax
553*4724848cSchristos	testl	$31,%ecx
554*4724848cSchristos	jz	.L012even
555*4724848cSchristos	movdqu	(%esi),%xmm6
556*4724848cSchristos	leal	16(%esi),%esi
557*4724848cSchristos	movdqa	%xmm6,%xmm5
558*4724848cSchristos	pand	%xmm7,%xmm6
559*4724848cSchristos	paddd	%xmm6,%xmm0
560*4724848cSchristos	movdqa	%xmm5,%xmm6
561*4724848cSchristos	psrlq	$26,%xmm5
562*4724848cSchristos	psrldq	$6,%xmm6
563*4724848cSchristos	pand	%xmm7,%xmm5
564*4724848cSchristos	paddd	%xmm5,%xmm1
565*4724848cSchristos	movdqa	%xmm6,%xmm5
566*4724848cSchristos	psrlq	$4,%xmm6
567*4724848cSchristos	pand	%xmm7,%xmm6
568*4724848cSchristos	paddd	%xmm6,%xmm2
569*4724848cSchristos	movdqa	%xmm5,%xmm6
570*4724848cSchristos	psrlq	$30,%xmm5
571*4724848cSchristos	pand	%xmm7,%xmm5
572*4724848cSchristos	psrldq	$7,%xmm6
573*4724848cSchristos	paddd	%xmm5,%xmm3
574*4724848cSchristos	movd	%eax,%xmm5
575*4724848cSchristos	paddd	%xmm6,%xmm4
576*4724848cSchristos	movd	12(%edi),%xmm6
577*4724848cSchristos	paddd	%xmm5,%xmm4
578*4724848cSchristos	movdqa	%xmm0,(%esp)
579*4724848cSchristos	movdqa	%xmm1,16(%esp)
580*4724848cSchristos	movdqa	%xmm2,32(%esp)
581*4724848cSchristos	movdqa	%xmm3,48(%esp)
582*4724848cSchristos	movdqa	%xmm4,64(%esp)
583*4724848cSchristos	pmuludq	%xmm6,%xmm0
584*4724848cSchristos	pmuludq	%xmm6,%xmm1
585*4724848cSchristos	pmuludq	%xmm6,%xmm2
586*4724848cSchristos	movd	28(%edi),%xmm5
587*4724848cSchristos	pmuludq	%xmm6,%xmm3
588*4724848cSchristos	pmuludq	%xmm6,%xmm4
589*4724848cSchristos	movdqa	%xmm5,%xmm6
590*4724848cSchristos	pmuludq	48(%esp),%xmm5
591*4724848cSchristos	movdqa	%xmm6,%xmm7
592*4724848cSchristos	pmuludq	32(%esp),%xmm6
593*4724848cSchristos	paddq	%xmm5,%xmm4
594*4724848cSchristos	movdqa	%xmm7,%xmm5
595*4724848cSchristos	pmuludq	16(%esp),%xmm7
596*4724848cSchristos	paddq	%xmm6,%xmm3
597*4724848cSchristos	movd	92(%edi),%xmm6
598*4724848cSchristos	pmuludq	(%esp),%xmm5
599*4724848cSchristos	paddq	%xmm7,%xmm2
600*4724848cSchristos	pmuludq	64(%esp),%xmm6
601*4724848cSchristos	movd	44(%edi),%xmm7
602*4724848cSchristos	paddq	%xmm5,%xmm1
603*4724848cSchristos	movdqa	%xmm7,%xmm5
604*4724848cSchristos	pmuludq	32(%esp),%xmm7
605*4724848cSchristos	paddq	%xmm6,%xmm0
606*4724848cSchristos	movdqa	%xmm5,%xmm6
607*4724848cSchristos	pmuludq	16(%esp),%xmm5
608*4724848cSchristos	paddq	%xmm7,%xmm4
609*4724848cSchristos	movd	108(%edi),%xmm7
610*4724848cSchristos	pmuludq	(%esp),%xmm6
611*4724848cSchristos	paddq	%xmm5,%xmm3
612*4724848cSchristos	movdqa	%xmm7,%xmm5
613*4724848cSchristos	pmuludq	64(%esp),%xmm7
614*4724848cSchristos	paddq	%xmm6,%xmm2
615*4724848cSchristos	pmuludq	48(%esp),%xmm5
616*4724848cSchristos	movd	60(%edi),%xmm6
617*4724848cSchristos	paddq	%xmm7,%xmm1
618*4724848cSchristos	movdqa	%xmm6,%xmm7
619*4724848cSchristos	pmuludq	16(%esp),%xmm6
620*4724848cSchristos	paddq	%xmm5,%xmm0
621*4724848cSchristos	movd	124(%edi),%xmm5
622*4724848cSchristos	pmuludq	(%esp),%xmm7
623*4724848cSchristos	paddq	%xmm6,%xmm4
624*4724848cSchristos	movdqa	%xmm5,%xmm6
625*4724848cSchristos	pmuludq	64(%esp),%xmm5
626*4724848cSchristos	paddq	%xmm7,%xmm3
627*4724848cSchristos	movdqa	%xmm6,%xmm7
628*4724848cSchristos	pmuludq	48(%esp),%xmm6
629*4724848cSchristos	paddq	%xmm5,%xmm2
630*4724848cSchristos	pmuludq	32(%esp),%xmm7
631*4724848cSchristos	movd	76(%edi),%xmm5
632*4724848cSchristos	paddq	%xmm6,%xmm1
633*4724848cSchristos	movd	140(%edi),%xmm6
634*4724848cSchristos	pmuludq	(%esp),%xmm5
635*4724848cSchristos	paddq	%xmm7,%xmm0
636*4724848cSchristos	movdqa	%xmm6,%xmm7
637*4724848cSchristos	pmuludq	64(%esp),%xmm6
638*4724848cSchristos	paddq	%xmm5,%xmm4
639*4724848cSchristos	movdqa	%xmm7,%xmm5
640*4724848cSchristos	pmuludq	16(%esp),%xmm7
641*4724848cSchristos	paddq	%xmm6,%xmm3
642*4724848cSchristos	movdqa	%xmm5,%xmm6
643*4724848cSchristos	pmuludq	32(%esp),%xmm5
644*4724848cSchristos	paddq	%xmm7,%xmm0
645*4724848cSchristos	pmuludq	48(%esp),%xmm6
646*4724848cSchristos	movdqa	64(%ebx),%xmm7
647*4724848cSchristos	paddq	%xmm5,%xmm1
648*4724848cSchristos	paddq	%xmm6,%xmm2
649*4724848cSchristos	movdqa	%xmm3,%xmm5
650*4724848cSchristos	pand	%xmm7,%xmm3
651*4724848cSchristos	psrlq	$26,%xmm5
652*4724848cSchristos	paddq	%xmm4,%xmm5
653*4724848cSchristos	movdqa	%xmm0,%xmm6
654*4724848cSchristos	pand	%xmm7,%xmm0
655*4724848cSchristos	psrlq	$26,%xmm6
656*4724848cSchristos	movdqa	%xmm5,%xmm4
657*4724848cSchristos	paddq	%xmm1,%xmm6
658*4724848cSchristos	psrlq	$26,%xmm5
659*4724848cSchristos	pand	%xmm7,%xmm4
660*4724848cSchristos	movdqa	%xmm6,%xmm1
661*4724848cSchristos	psrlq	$26,%xmm6
662*4724848cSchristos	paddd	%xmm5,%xmm0
663*4724848cSchristos	psllq	$2,%xmm5
664*4724848cSchristos	paddq	%xmm2,%xmm6
665*4724848cSchristos	paddq	%xmm0,%xmm5
666*4724848cSchristos	pand	%xmm7,%xmm1
667*4724848cSchristos	movdqa	%xmm6,%xmm2
668*4724848cSchristos	psrlq	$26,%xmm6
669*4724848cSchristos	pand	%xmm7,%xmm2
670*4724848cSchristos	paddd	%xmm3,%xmm6
671*4724848cSchristos	movdqa	%xmm5,%xmm0
672*4724848cSchristos	psrlq	$26,%xmm5
673*4724848cSchristos	movdqa	%xmm6,%xmm3
674*4724848cSchristos	psrlq	$26,%xmm6
675*4724848cSchristos	pand	%xmm7,%xmm0
676*4724848cSchristos	paddd	%xmm5,%xmm1
677*4724848cSchristos	pand	%xmm7,%xmm3
678*4724848cSchristos	paddd	%xmm6,%xmm4
679*4724848cSchristos	subl	$16,%ecx
680*4724848cSchristos	jz	.L013done
681*4724848cSchristos.L012even:
682*4724848cSchristos	leal	384(%esp),%edx
683*4724848cSchristos	leal	-32(%esi),%eax
684*4724848cSchristos	subl	$64,%ecx
685*4724848cSchristos	movdqu	(%edi),%xmm5
686*4724848cSchristos	pshufd	$68,%xmm5,%xmm6
687*4724848cSchristos	cmovbl	%eax,%esi
688*4724848cSchristos	pshufd	$238,%xmm5,%xmm5
689*4724848cSchristos	movdqa	%xmm6,(%edx)
690*4724848cSchristos	leal	160(%esp),%eax
691*4724848cSchristos	movdqu	16(%edi),%xmm6
692*4724848cSchristos	movdqa	%xmm5,-144(%edx)
693*4724848cSchristos	pshufd	$68,%xmm6,%xmm5
694*4724848cSchristos	pshufd	$238,%xmm6,%xmm6
695*4724848cSchristos	movdqa	%xmm5,16(%edx)
696*4724848cSchristos	movdqu	32(%edi),%xmm5
697*4724848cSchristos	movdqa	%xmm6,-128(%edx)
698*4724848cSchristos	pshufd	$68,%xmm5,%xmm6
699*4724848cSchristos	pshufd	$238,%xmm5,%xmm5
700*4724848cSchristos	movdqa	%xmm6,32(%edx)
701*4724848cSchristos	movdqu	48(%edi),%xmm6
702*4724848cSchristos	movdqa	%xmm5,-112(%edx)
703*4724848cSchristos	pshufd	$68,%xmm6,%xmm5
704*4724848cSchristos	pshufd	$238,%xmm6,%xmm6
705*4724848cSchristos	movdqa	%xmm5,48(%edx)
706*4724848cSchristos	movdqu	64(%edi),%xmm5
707*4724848cSchristos	movdqa	%xmm6,-96(%edx)
708*4724848cSchristos	pshufd	$68,%xmm5,%xmm6
709*4724848cSchristos	pshufd	$238,%xmm5,%xmm5
710*4724848cSchristos	movdqa	%xmm6,64(%edx)
711*4724848cSchristos	movdqu	80(%edi),%xmm6
712*4724848cSchristos	movdqa	%xmm5,-80(%edx)
713*4724848cSchristos	pshufd	$68,%xmm6,%xmm5
714*4724848cSchristos	pshufd	$238,%xmm6,%xmm6
715*4724848cSchristos	movdqa	%xmm5,80(%edx)
716*4724848cSchristos	movdqu	96(%edi),%xmm5
717*4724848cSchristos	movdqa	%xmm6,-64(%edx)
718*4724848cSchristos	pshufd	$68,%xmm5,%xmm6
719*4724848cSchristos	pshufd	$238,%xmm5,%xmm5
720*4724848cSchristos	movdqa	%xmm6,96(%edx)
721*4724848cSchristos	movdqu	112(%edi),%xmm6
722*4724848cSchristos	movdqa	%xmm5,-48(%edx)
723*4724848cSchristos	pshufd	$68,%xmm6,%xmm5
724*4724848cSchristos	pshufd	$238,%xmm6,%xmm6
725*4724848cSchristos	movdqa	%xmm5,112(%edx)
726*4724848cSchristos	movdqu	128(%edi),%xmm5
727*4724848cSchristos	movdqa	%xmm6,-32(%edx)
728*4724848cSchristos	pshufd	$68,%xmm5,%xmm6
729*4724848cSchristos	pshufd	$238,%xmm5,%xmm5
730*4724848cSchristos	movdqa	%xmm6,128(%edx)
731*4724848cSchristos	movdqa	%xmm5,-16(%edx)
732*4724848cSchristos	movdqu	32(%esi),%xmm5
733*4724848cSchristos	movdqu	48(%esi),%xmm6
734*4724848cSchristos	leal	32(%esi),%esi
735*4724848cSchristos	movdqa	%xmm2,112(%esp)
736*4724848cSchristos	movdqa	%xmm3,128(%esp)
737*4724848cSchristos	movdqa	%xmm4,144(%esp)
738*4724848cSchristos	movdqa	%xmm5,%xmm2
739*4724848cSchristos	movdqa	%xmm6,%xmm3
740*4724848cSchristos	psrldq	$6,%xmm2
741*4724848cSchristos	psrldq	$6,%xmm3
742*4724848cSchristos	movdqa	%xmm5,%xmm4
743*4724848cSchristos	punpcklqdq	%xmm3,%xmm2
744*4724848cSchristos	punpckhqdq	%xmm6,%xmm4
745*4724848cSchristos	punpcklqdq	%xmm6,%xmm5
746*4724848cSchristos	movdqa	%xmm2,%xmm3
747*4724848cSchristos	psrlq	$4,%xmm2
748*4724848cSchristos	psrlq	$30,%xmm3
749*4724848cSchristos	movdqa	%xmm5,%xmm6
750*4724848cSchristos	psrlq	$40,%xmm4
751*4724848cSchristos	psrlq	$26,%xmm6
752*4724848cSchristos	pand	%xmm7,%xmm5
753*4724848cSchristos	pand	%xmm7,%xmm6
754*4724848cSchristos	pand	%xmm7,%xmm2
755*4724848cSchristos	pand	%xmm7,%xmm3
756*4724848cSchristos	por	(%ebx),%xmm4
757*4724848cSchristos	movdqa	%xmm0,80(%esp)
758*4724848cSchristos	movdqa	%xmm1,96(%esp)
759*4724848cSchristos	jbe	.L014skip_loop
760*4724848cSchristos	jmp	.L015loop
761*4724848cSchristos.align	32
762*4724848cSchristos.L015loop:
763*4724848cSchristos	movdqa	-144(%edx),%xmm7
764*4724848cSchristos	movdqa	%xmm6,16(%eax)
765*4724848cSchristos	movdqa	%xmm2,32(%eax)
766*4724848cSchristos	movdqa	%xmm3,48(%eax)
767*4724848cSchristos	movdqa	%xmm4,64(%eax)
768*4724848cSchristos	movdqa	%xmm5,%xmm1
769*4724848cSchristos	pmuludq	%xmm7,%xmm5
770*4724848cSchristos	movdqa	%xmm6,%xmm0
771*4724848cSchristos	pmuludq	%xmm7,%xmm6
772*4724848cSchristos	pmuludq	%xmm7,%xmm2
773*4724848cSchristos	pmuludq	%xmm7,%xmm3
774*4724848cSchristos	pmuludq	%xmm7,%xmm4
775*4724848cSchristos	pmuludq	-16(%edx),%xmm0
776*4724848cSchristos	movdqa	%xmm1,%xmm7
777*4724848cSchristos	pmuludq	-128(%edx),%xmm1
778*4724848cSchristos	paddq	%xmm5,%xmm0
779*4724848cSchristos	movdqa	%xmm7,%xmm5
780*4724848cSchristos	pmuludq	-112(%edx),%xmm7
781*4724848cSchristos	paddq	%xmm6,%xmm1
782*4724848cSchristos	movdqa	%xmm5,%xmm6
783*4724848cSchristos	pmuludq	-96(%edx),%xmm5
784*4724848cSchristos	paddq	%xmm7,%xmm2
785*4724848cSchristos	movdqa	16(%eax),%xmm7
786*4724848cSchristos	pmuludq	-80(%edx),%xmm6
787*4724848cSchristos	paddq	%xmm5,%xmm3
788*4724848cSchristos	movdqa	%xmm7,%xmm5
789*4724848cSchristos	pmuludq	-128(%edx),%xmm7
790*4724848cSchristos	paddq	%xmm6,%xmm4
791*4724848cSchristos	movdqa	%xmm5,%xmm6
792*4724848cSchristos	pmuludq	-112(%edx),%xmm5
793*4724848cSchristos	paddq	%xmm7,%xmm2
794*4724848cSchristos	movdqa	32(%eax),%xmm7
795*4724848cSchristos	pmuludq	-96(%edx),%xmm6
796*4724848cSchristos	paddq	%xmm5,%xmm3
797*4724848cSchristos	movdqa	%xmm7,%xmm5
798*4724848cSchristos	pmuludq	-32(%edx),%xmm7
799*4724848cSchristos	paddq	%xmm6,%xmm4
800*4724848cSchristos	movdqa	%xmm5,%xmm6
801*4724848cSchristos	pmuludq	-16(%edx),%xmm5
802*4724848cSchristos	paddq	%xmm7,%xmm0
803*4724848cSchristos	movdqa	%xmm6,%xmm7
804*4724848cSchristos	pmuludq	-128(%edx),%xmm6
805*4724848cSchristos	paddq	%xmm5,%xmm1
806*4724848cSchristos	movdqa	48(%eax),%xmm5
807*4724848cSchristos	pmuludq	-112(%edx),%xmm7
808*4724848cSchristos	paddq	%xmm6,%xmm3
809*4724848cSchristos	movdqa	%xmm5,%xmm6
810*4724848cSchristos	pmuludq	-48(%edx),%xmm5
811*4724848cSchristos	paddq	%xmm7,%xmm4
812*4724848cSchristos	movdqa	%xmm6,%xmm7
813*4724848cSchristos	pmuludq	-32(%edx),%xmm6
814*4724848cSchristos	paddq	%xmm5,%xmm0
815*4724848cSchristos	movdqa	%xmm7,%xmm5
816*4724848cSchristos	pmuludq	-16(%edx),%xmm7
817*4724848cSchristos	paddq	%xmm6,%xmm1
818*4724848cSchristos	movdqa	64(%eax),%xmm6
819*4724848cSchristos	pmuludq	-128(%edx),%xmm5
820*4724848cSchristos	paddq	%xmm7,%xmm2
821*4724848cSchristos	movdqa	%xmm6,%xmm7
822*4724848cSchristos	pmuludq	-16(%edx),%xmm6
823*4724848cSchristos	paddq	%xmm5,%xmm4
824*4724848cSchristos	movdqa	%xmm7,%xmm5
825*4724848cSchristos	pmuludq	-64(%edx),%xmm7
826*4724848cSchristos	paddq	%xmm6,%xmm3
827*4724848cSchristos	movdqa	%xmm5,%xmm6
828*4724848cSchristos	pmuludq	-48(%edx),%xmm5
829*4724848cSchristos	paddq	%xmm7,%xmm0
830*4724848cSchristos	movdqa	64(%ebx),%xmm7
831*4724848cSchristos	pmuludq	-32(%edx),%xmm6
832*4724848cSchristos	paddq	%xmm5,%xmm1
833*4724848cSchristos	paddq	%xmm6,%xmm2
834*4724848cSchristos	movdqu	-32(%esi),%xmm5
835*4724848cSchristos	movdqu	-16(%esi),%xmm6
836*4724848cSchristos	leal	32(%esi),%esi
837*4724848cSchristos	movdqa	%xmm2,32(%esp)
838*4724848cSchristos	movdqa	%xmm3,48(%esp)
839*4724848cSchristos	movdqa	%xmm4,64(%esp)
840*4724848cSchristos	movdqa	%xmm5,%xmm2
841*4724848cSchristos	movdqa	%xmm6,%xmm3
842*4724848cSchristos	psrldq	$6,%xmm2
843*4724848cSchristos	psrldq	$6,%xmm3
844*4724848cSchristos	movdqa	%xmm5,%xmm4
845*4724848cSchristos	punpcklqdq	%xmm3,%xmm2
846*4724848cSchristos	punpckhqdq	%xmm6,%xmm4
847*4724848cSchristos	punpcklqdq	%xmm6,%xmm5
848*4724848cSchristos	movdqa	%xmm2,%xmm3
849*4724848cSchristos	psrlq	$4,%xmm2
850*4724848cSchristos	psrlq	$30,%xmm3
851*4724848cSchristos	movdqa	%xmm5,%xmm6
852*4724848cSchristos	psrlq	$40,%xmm4
853*4724848cSchristos	psrlq	$26,%xmm6
854*4724848cSchristos	pand	%xmm7,%xmm5
855*4724848cSchristos	pand	%xmm7,%xmm6
856*4724848cSchristos	pand	%xmm7,%xmm2
857*4724848cSchristos	pand	%xmm7,%xmm3
858*4724848cSchristos	por	(%ebx),%xmm4
859*4724848cSchristos	leal	-32(%esi),%eax
860*4724848cSchristos	subl	$64,%ecx
861*4724848cSchristos	paddd	80(%esp),%xmm5
862*4724848cSchristos	paddd	96(%esp),%xmm6
863*4724848cSchristos	paddd	112(%esp),%xmm2
864*4724848cSchristos	paddd	128(%esp),%xmm3
865*4724848cSchristos	paddd	144(%esp),%xmm4
866*4724848cSchristos	cmovbl	%eax,%esi
867*4724848cSchristos	leal	160(%esp),%eax
868*4724848cSchristos	movdqa	(%edx),%xmm7
869*4724848cSchristos	movdqa	%xmm1,16(%esp)
870*4724848cSchristos	movdqa	%xmm6,16(%eax)
871*4724848cSchristos	movdqa	%xmm2,32(%eax)
872*4724848cSchristos	movdqa	%xmm3,48(%eax)
873*4724848cSchristos	movdqa	%xmm4,64(%eax)
874*4724848cSchristos	movdqa	%xmm5,%xmm1
875*4724848cSchristos	pmuludq	%xmm7,%xmm5
876*4724848cSchristos	paddq	%xmm0,%xmm5
877*4724848cSchristos	movdqa	%xmm6,%xmm0
878*4724848cSchristos	pmuludq	%xmm7,%xmm6
879*4724848cSchristos	pmuludq	%xmm7,%xmm2
880*4724848cSchristos	pmuludq	%xmm7,%xmm3
881*4724848cSchristos	pmuludq	%xmm7,%xmm4
882*4724848cSchristos	paddq	16(%esp),%xmm6
883*4724848cSchristos	paddq	32(%esp),%xmm2
884*4724848cSchristos	paddq	48(%esp),%xmm3
885*4724848cSchristos	paddq	64(%esp),%xmm4
886*4724848cSchristos	pmuludq	128(%edx),%xmm0
887*4724848cSchristos	movdqa	%xmm1,%xmm7
888*4724848cSchristos	pmuludq	16(%edx),%xmm1
889*4724848cSchristos	paddq	%xmm5,%xmm0
890*4724848cSchristos	movdqa	%xmm7,%xmm5
891*4724848cSchristos	pmuludq	32(%edx),%xmm7
892*4724848cSchristos	paddq	%xmm6,%xmm1
893*4724848cSchristos	movdqa	%xmm5,%xmm6
894*4724848cSchristos	pmuludq	48(%edx),%xmm5
895*4724848cSchristos	paddq	%xmm7,%xmm2
896*4724848cSchristos	movdqa	16(%eax),%xmm7
897*4724848cSchristos	pmuludq	64(%edx),%xmm6
898*4724848cSchristos	paddq	%xmm5,%xmm3
899*4724848cSchristos	movdqa	%xmm7,%xmm5
900*4724848cSchristos	pmuludq	16(%edx),%xmm7
901*4724848cSchristos	paddq	%xmm6,%xmm4
902*4724848cSchristos	movdqa	%xmm5,%xmm6
903*4724848cSchristos	pmuludq	32(%edx),%xmm5
904*4724848cSchristos	paddq	%xmm7,%xmm2
905*4724848cSchristos	movdqa	32(%eax),%xmm7
906*4724848cSchristos	pmuludq	48(%edx),%xmm6
907*4724848cSchristos	paddq	%xmm5,%xmm3
908*4724848cSchristos	movdqa	%xmm7,%xmm5
909*4724848cSchristos	pmuludq	112(%edx),%xmm7
910*4724848cSchristos	paddq	%xmm6,%xmm4
911*4724848cSchristos	movdqa	%xmm5,%xmm6
912*4724848cSchristos	pmuludq	128(%edx),%xmm5
913*4724848cSchristos	paddq	%xmm7,%xmm0
914*4724848cSchristos	movdqa	%xmm6,%xmm7
915*4724848cSchristos	pmuludq	16(%edx),%xmm6
916*4724848cSchristos	paddq	%xmm5,%xmm1
917*4724848cSchristos	movdqa	48(%eax),%xmm5
918*4724848cSchristos	pmuludq	32(%edx),%xmm7
919*4724848cSchristos	paddq	%xmm6,%xmm3
920*4724848cSchristos	movdqa	%xmm5,%xmm6
921*4724848cSchristos	pmuludq	96(%edx),%xmm5
922*4724848cSchristos	paddq	%xmm7,%xmm4
923*4724848cSchristos	movdqa	%xmm6,%xmm7
924*4724848cSchristos	pmuludq	112(%edx),%xmm6
925*4724848cSchristos	paddq	%xmm5,%xmm0
926*4724848cSchristos	movdqa	%xmm7,%xmm5
927*4724848cSchristos	pmuludq	128(%edx),%xmm7
928*4724848cSchristos	paddq	%xmm6,%xmm1
929*4724848cSchristos	movdqa	64(%eax),%xmm6
930*4724848cSchristos	pmuludq	16(%edx),%xmm5
931*4724848cSchristos	paddq	%xmm7,%xmm2
932*4724848cSchristos	movdqa	%xmm6,%xmm7
933*4724848cSchristos	pmuludq	128(%edx),%xmm6
934*4724848cSchristos	paddq	%xmm5,%xmm4
935*4724848cSchristos	movdqa	%xmm7,%xmm5
936*4724848cSchristos	pmuludq	80(%edx),%xmm7
937*4724848cSchristos	paddq	%xmm6,%xmm3
938*4724848cSchristos	movdqa	%xmm5,%xmm6
939*4724848cSchristos	pmuludq	96(%edx),%xmm5
940*4724848cSchristos	paddq	%xmm7,%xmm0
941*4724848cSchristos	movdqa	64(%ebx),%xmm7
942*4724848cSchristos	pmuludq	112(%edx),%xmm6
943*4724848cSchristos	paddq	%xmm5,%xmm1
944*4724848cSchristos	paddq	%xmm6,%xmm2
945*4724848cSchristos	movdqa	%xmm3,%xmm5
946*4724848cSchristos	pand	%xmm7,%xmm3
947*4724848cSchristos	psrlq	$26,%xmm5
948*4724848cSchristos	paddq	%xmm4,%xmm5
949*4724848cSchristos	movdqa	%xmm0,%xmm6
950*4724848cSchristos	pand	%xmm7,%xmm0
951*4724848cSchristos	psrlq	$26,%xmm6
952*4724848cSchristos	movdqa	%xmm5,%xmm4
953*4724848cSchristos	paddq	%xmm1,%xmm6
954*4724848cSchristos	psrlq	$26,%xmm5
955*4724848cSchristos	pand	%xmm7,%xmm4
956*4724848cSchristos	movdqa	%xmm6,%xmm1
957*4724848cSchristos	psrlq	$26,%xmm6
958*4724848cSchristos	paddd	%xmm5,%xmm0
959*4724848cSchristos	psllq	$2,%xmm5
960*4724848cSchristos	paddq	%xmm2,%xmm6
961*4724848cSchristos	paddq	%xmm0,%xmm5
962*4724848cSchristos	pand	%xmm7,%xmm1
963*4724848cSchristos	movdqa	%xmm6,%xmm2
964*4724848cSchristos	psrlq	$26,%xmm6
965*4724848cSchristos	pand	%xmm7,%xmm2
966*4724848cSchristos	paddd	%xmm3,%xmm6
967*4724848cSchristos	movdqa	%xmm5,%xmm0
968*4724848cSchristos	psrlq	$26,%xmm5
969*4724848cSchristos	movdqa	%xmm6,%xmm3
970*4724848cSchristos	psrlq	$26,%xmm6
971*4724848cSchristos	pand	%xmm7,%xmm0
972*4724848cSchristos	paddd	%xmm5,%xmm1
973*4724848cSchristos	pand	%xmm7,%xmm3
974*4724848cSchristos	paddd	%xmm6,%xmm4
975*4724848cSchristos	movdqu	32(%esi),%xmm5
976*4724848cSchristos	movdqu	48(%esi),%xmm6
977*4724848cSchristos	leal	32(%esi),%esi
978*4724848cSchristos	movdqa	%xmm2,112(%esp)
979*4724848cSchristos	movdqa	%xmm3,128(%esp)
980*4724848cSchristos	movdqa	%xmm4,144(%esp)
981*4724848cSchristos	movdqa	%xmm5,%xmm2
982*4724848cSchristos	movdqa	%xmm6,%xmm3
983*4724848cSchristos	psrldq	$6,%xmm2
984*4724848cSchristos	psrldq	$6,%xmm3
985*4724848cSchristos	movdqa	%xmm5,%xmm4
986*4724848cSchristos	punpcklqdq	%xmm3,%xmm2
987*4724848cSchristos	punpckhqdq	%xmm6,%xmm4
988*4724848cSchristos	punpcklqdq	%xmm6,%xmm5
989*4724848cSchristos	movdqa	%xmm2,%xmm3
990*4724848cSchristos	psrlq	$4,%xmm2
991*4724848cSchristos	psrlq	$30,%xmm3
992*4724848cSchristos	movdqa	%xmm5,%xmm6
993*4724848cSchristos	psrlq	$40,%xmm4
994*4724848cSchristos	psrlq	$26,%xmm6
995*4724848cSchristos	pand	%xmm7,%xmm5
996*4724848cSchristos	pand	%xmm7,%xmm6
997*4724848cSchristos	pand	%xmm7,%xmm2
998*4724848cSchristos	pand	%xmm7,%xmm3
999*4724848cSchristos	por	(%ebx),%xmm4
1000*4724848cSchristos	movdqa	%xmm0,80(%esp)
1001*4724848cSchristos	movdqa	%xmm1,96(%esp)
1002*4724848cSchristos	ja	.L015loop
1003*4724848cSchristos.L014skip_loop:
1004*4724848cSchristos	pshufd	$16,-144(%edx),%xmm7
1005*4724848cSchristos	addl	$32,%ecx
1006*4724848cSchristos	jnz	.L016long_tail
1007*4724848cSchristos	paddd	%xmm0,%xmm5
1008*4724848cSchristos	paddd	%xmm1,%xmm6
1009*4724848cSchristos	paddd	112(%esp),%xmm2
1010*4724848cSchristos	paddd	128(%esp),%xmm3
1011*4724848cSchristos	paddd	144(%esp),%xmm4
1012*4724848cSchristos.L016long_tail:
1013*4724848cSchristos	movdqa	%xmm5,(%eax)
1014*4724848cSchristos	movdqa	%xmm6,16(%eax)
1015*4724848cSchristos	movdqa	%xmm2,32(%eax)
1016*4724848cSchristos	movdqa	%xmm3,48(%eax)
1017*4724848cSchristos	movdqa	%xmm4,64(%eax)
1018*4724848cSchristos	pmuludq	%xmm7,%xmm5
1019*4724848cSchristos	pmuludq	%xmm7,%xmm6
1020*4724848cSchristos	pmuludq	%xmm7,%xmm2
1021*4724848cSchristos	movdqa	%xmm5,%xmm0
1022*4724848cSchristos	pshufd	$16,-128(%edx),%xmm5
1023*4724848cSchristos	pmuludq	%xmm7,%xmm3
1024*4724848cSchristos	movdqa	%xmm6,%xmm1
1025*4724848cSchristos	pmuludq	%xmm7,%xmm4
1026*4724848cSchristos	movdqa	%xmm5,%xmm6
1027*4724848cSchristos	pmuludq	48(%eax),%xmm5
1028*4724848cSchristos	movdqa	%xmm6,%xmm7
1029*4724848cSchristos	pmuludq	32(%eax),%xmm6
1030*4724848cSchristos	paddq	%xmm5,%xmm4
1031*4724848cSchristos	movdqa	%xmm7,%xmm5
1032*4724848cSchristos	pmuludq	16(%eax),%xmm7
1033*4724848cSchristos	paddq	%xmm6,%xmm3
1034*4724848cSchristos	pshufd	$16,-64(%edx),%xmm6
1035*4724848cSchristos	pmuludq	(%eax),%xmm5
1036*4724848cSchristos	paddq	%xmm7,%xmm2
1037*4724848cSchristos	pmuludq	64(%eax),%xmm6
1038*4724848cSchristos	pshufd	$16,-112(%edx),%xmm7
1039*4724848cSchristos	paddq	%xmm5,%xmm1
1040*4724848cSchristos	movdqa	%xmm7,%xmm5
1041*4724848cSchristos	pmuludq	32(%eax),%xmm7
1042*4724848cSchristos	paddq	%xmm6,%xmm0
1043*4724848cSchristos	movdqa	%xmm5,%xmm6
1044*4724848cSchristos	pmuludq	16(%eax),%xmm5
1045*4724848cSchristos	paddq	%xmm7,%xmm4
1046*4724848cSchristos	pshufd	$16,-48(%edx),%xmm7
1047*4724848cSchristos	pmuludq	(%eax),%xmm6
1048*4724848cSchristos	paddq	%xmm5,%xmm3
1049*4724848cSchristos	movdqa	%xmm7,%xmm5
1050*4724848cSchristos	pmuludq	64(%eax),%xmm7
1051*4724848cSchristos	paddq	%xmm6,%xmm2
1052*4724848cSchristos	pmuludq	48(%eax),%xmm5
1053*4724848cSchristos	pshufd	$16,-96(%edx),%xmm6
1054*4724848cSchristos	paddq	%xmm7,%xmm1
1055*4724848cSchristos	movdqa	%xmm6,%xmm7
1056*4724848cSchristos	pmuludq	16(%eax),%xmm6
1057*4724848cSchristos	paddq	%xmm5,%xmm0
1058*4724848cSchristos	pshufd	$16,-32(%edx),%xmm5
1059*4724848cSchristos	pmuludq	(%eax),%xmm7
1060*4724848cSchristos	paddq	%xmm6,%xmm4
1061*4724848cSchristos	movdqa	%xmm5,%xmm6
1062*4724848cSchristos	pmuludq	64(%eax),%xmm5
1063*4724848cSchristos	paddq	%xmm7,%xmm3
1064*4724848cSchristos	movdqa	%xmm6,%xmm7
1065*4724848cSchristos	pmuludq	48(%eax),%xmm6
1066*4724848cSchristos	paddq	%xmm5,%xmm2
1067*4724848cSchristos	pmuludq	32(%eax),%xmm7
1068*4724848cSchristos	pshufd	$16,-80(%edx),%xmm5
1069*4724848cSchristos	paddq	%xmm6,%xmm1
1070*4724848cSchristos	pshufd	$16,-16(%edx),%xmm6
1071*4724848cSchristos	pmuludq	(%eax),%xmm5
1072*4724848cSchristos	paddq	%xmm7,%xmm0
1073*4724848cSchristos	movdqa	%xmm6,%xmm7
1074*4724848cSchristos	pmuludq	64(%eax),%xmm6
1075*4724848cSchristos	paddq	%xmm5,%xmm4
1076*4724848cSchristos	movdqa	%xmm7,%xmm5
1077*4724848cSchristos	pmuludq	16(%eax),%xmm7
1078*4724848cSchristos	paddq	%xmm6,%xmm3
1079*4724848cSchristos	movdqa	%xmm5,%xmm6
1080*4724848cSchristos	pmuludq	32(%eax),%xmm5
1081*4724848cSchristos	paddq	%xmm7,%xmm0
1082*4724848cSchristos	pmuludq	48(%eax),%xmm6
1083*4724848cSchristos	movdqa	64(%ebx),%xmm7
1084*4724848cSchristos	paddq	%xmm5,%xmm1
1085*4724848cSchristos	paddq	%xmm6,%xmm2
1086*4724848cSchristos	jz	.L017short_tail
1087*4724848cSchristos	movdqu	-32(%esi),%xmm5
1088*4724848cSchristos	movdqu	-16(%esi),%xmm6
1089*4724848cSchristos	leal	32(%esi),%esi
1090*4724848cSchristos	movdqa	%xmm2,32(%esp)
1091*4724848cSchristos	movdqa	%xmm3,48(%esp)
1092*4724848cSchristos	movdqa	%xmm4,64(%esp)
1093*4724848cSchristos	movdqa	%xmm5,%xmm2
1094*4724848cSchristos	movdqa	%xmm6,%xmm3
1095*4724848cSchristos	psrldq	$6,%xmm2
1096*4724848cSchristos	psrldq	$6,%xmm3
1097*4724848cSchristos	movdqa	%xmm5,%xmm4
1098*4724848cSchristos	punpcklqdq	%xmm3,%xmm2
1099*4724848cSchristos	punpckhqdq	%xmm6,%xmm4
1100*4724848cSchristos	punpcklqdq	%xmm6,%xmm5
1101*4724848cSchristos	movdqa	%xmm2,%xmm3
1102*4724848cSchristos	psrlq	$4,%xmm2
1103*4724848cSchristos	psrlq	$30,%xmm3
1104*4724848cSchristos	movdqa	%xmm5,%xmm6
1105*4724848cSchristos	psrlq	$40,%xmm4
1106*4724848cSchristos	psrlq	$26,%xmm6
1107*4724848cSchristos	pand	%xmm7,%xmm5
1108*4724848cSchristos	pand	%xmm7,%xmm6
1109*4724848cSchristos	pand	%xmm7,%xmm2
1110*4724848cSchristos	pand	%xmm7,%xmm3
1111*4724848cSchristos	por	(%ebx),%xmm4
1112*4724848cSchristos	pshufd	$16,(%edx),%xmm7
1113*4724848cSchristos	paddd	80(%esp),%xmm5
1114*4724848cSchristos	paddd	96(%esp),%xmm6
1115*4724848cSchristos	paddd	112(%esp),%xmm2
1116*4724848cSchristos	paddd	128(%esp),%xmm3
1117*4724848cSchristos	paddd	144(%esp),%xmm4
1118*4724848cSchristos	movdqa	%xmm5,(%esp)
1119*4724848cSchristos	pmuludq	%xmm7,%xmm5
1120*4724848cSchristos	movdqa	%xmm6,16(%esp)
1121*4724848cSchristos	pmuludq	%xmm7,%xmm6
1122*4724848cSchristos	paddq	%xmm5,%xmm0
1123*4724848cSchristos	movdqa	%xmm2,%xmm5
1124*4724848cSchristos	pmuludq	%xmm7,%xmm2
1125*4724848cSchristos	paddq	%xmm6,%xmm1
1126*4724848cSchristos	movdqa	%xmm3,%xmm6
1127*4724848cSchristos	pmuludq	%xmm7,%xmm3
1128*4724848cSchristos	paddq	32(%esp),%xmm2
1129*4724848cSchristos	movdqa	%xmm5,32(%esp)
1130*4724848cSchristos	pshufd	$16,16(%edx),%xmm5
1131*4724848cSchristos	paddq	48(%esp),%xmm3
1132*4724848cSchristos	movdqa	%xmm6,48(%esp)
1133*4724848cSchristos	movdqa	%xmm4,%xmm6
1134*4724848cSchristos	pmuludq	%xmm7,%xmm4
1135*4724848cSchristos	paddq	64(%esp),%xmm4
1136*4724848cSchristos	movdqa	%xmm6,64(%esp)
1137*4724848cSchristos	movdqa	%xmm5,%xmm6
1138*4724848cSchristos	pmuludq	48(%esp),%xmm5
1139*4724848cSchristos	movdqa	%xmm6,%xmm7
1140*4724848cSchristos	pmuludq	32(%esp),%xmm6
1141*4724848cSchristos	paddq	%xmm5,%xmm4
1142*4724848cSchristos	movdqa	%xmm7,%xmm5
1143*4724848cSchristos	pmuludq	16(%esp),%xmm7
1144*4724848cSchristos	paddq	%xmm6,%xmm3
1145*4724848cSchristos	pshufd	$16,80(%edx),%xmm6
1146*4724848cSchristos	pmuludq	(%esp),%xmm5
1147*4724848cSchristos	paddq	%xmm7,%xmm2
1148*4724848cSchristos	pmuludq	64(%esp),%xmm6
1149*4724848cSchristos	pshufd	$16,32(%edx),%xmm7
1150*4724848cSchristos	paddq	%xmm5,%xmm1
1151*4724848cSchristos	movdqa	%xmm7,%xmm5
1152*4724848cSchristos	pmuludq	32(%esp),%xmm7
1153*4724848cSchristos	paddq	%xmm6,%xmm0
1154*4724848cSchristos	movdqa	%xmm5,%xmm6
1155*4724848cSchristos	pmuludq	16(%esp),%xmm5
1156*4724848cSchristos	paddq	%xmm7,%xmm4
1157*4724848cSchristos	pshufd	$16,96(%edx),%xmm7
1158*4724848cSchristos	pmuludq	(%esp),%xmm6
1159*4724848cSchristos	paddq	%xmm5,%xmm3
1160*4724848cSchristos	movdqa	%xmm7,%xmm5
1161*4724848cSchristos	pmuludq	64(%esp),%xmm7
1162*4724848cSchristos	paddq	%xmm6,%xmm2
1163*4724848cSchristos	pmuludq	48(%esp),%xmm5
1164*4724848cSchristos	pshufd	$16,48(%edx),%xmm6
1165*4724848cSchristos	paddq	%xmm7,%xmm1
1166*4724848cSchristos	movdqa	%xmm6,%xmm7
1167*4724848cSchristos	pmuludq	16(%esp),%xmm6
1168*4724848cSchristos	paddq	%xmm5,%xmm0
1169*4724848cSchristos	pshufd	$16,112(%edx),%xmm5
1170*4724848cSchristos	pmuludq	(%esp),%xmm7
1171*4724848cSchristos	paddq	%xmm6,%xmm4
1172*4724848cSchristos	movdqa	%xmm5,%xmm6
1173*4724848cSchristos	pmuludq	64(%esp),%xmm5
1174*4724848cSchristos	paddq	%xmm7,%xmm3
1175*4724848cSchristos	movdqa	%xmm6,%xmm7
1176*4724848cSchristos	pmuludq	48(%esp),%xmm6
1177*4724848cSchristos	paddq	%xmm5,%xmm2
1178*4724848cSchristos	pmuludq	32(%esp),%xmm7
1179*4724848cSchristos	pshufd	$16,64(%edx),%xmm5
1180*4724848cSchristos	paddq	%xmm6,%xmm1
1181*4724848cSchristos	pshufd	$16,128(%edx),%xmm6
1182*4724848cSchristos	pmuludq	(%esp),%xmm5
1183*4724848cSchristos	paddq	%xmm7,%xmm0
1184*4724848cSchristos	movdqa	%xmm6,%xmm7
1185*4724848cSchristos	pmuludq	64(%esp),%xmm6
1186*4724848cSchristos	paddq	%xmm5,%xmm4
1187*4724848cSchristos	movdqa	%xmm7,%xmm5
1188*4724848cSchristos	pmuludq	16(%esp),%xmm7
1189*4724848cSchristos	paddq	%xmm6,%xmm3
1190*4724848cSchristos	movdqa	%xmm5,%xmm6
1191*4724848cSchristos	pmuludq	32(%esp),%xmm5
1192*4724848cSchristos	paddq	%xmm7,%xmm0
1193*4724848cSchristos	pmuludq	48(%esp),%xmm6
1194*4724848cSchristos	movdqa	64(%ebx),%xmm7
1195*4724848cSchristos	paddq	%xmm5,%xmm1
1196*4724848cSchristos	paddq	%xmm6,%xmm2
1197*4724848cSchristos.L017short_tail:
1198*4724848cSchristos	pshufd	$78,%xmm4,%xmm6
1199*4724848cSchristos	pshufd	$78,%xmm3,%xmm5
1200*4724848cSchristos	paddq	%xmm6,%xmm4
1201*4724848cSchristos	paddq	%xmm5,%xmm3
1202*4724848cSchristos	pshufd	$78,%xmm0,%xmm6
1203*4724848cSchristos	pshufd	$78,%xmm1,%xmm5
1204*4724848cSchristos	paddq	%xmm6,%xmm0
1205*4724848cSchristos	paddq	%xmm5,%xmm1
1206*4724848cSchristos	pshufd	$78,%xmm2,%xmm6
1207*4724848cSchristos	movdqa	%xmm3,%xmm5
1208*4724848cSchristos	pand	%xmm7,%xmm3
1209*4724848cSchristos	psrlq	$26,%xmm5
1210*4724848cSchristos	paddq	%xmm6,%xmm2
1211*4724848cSchristos	paddq	%xmm4,%xmm5
1212*4724848cSchristos	movdqa	%xmm0,%xmm6
1213*4724848cSchristos	pand	%xmm7,%xmm0
1214*4724848cSchristos	psrlq	$26,%xmm6
1215*4724848cSchristos	movdqa	%xmm5,%xmm4
1216*4724848cSchristos	paddq	%xmm1,%xmm6
1217*4724848cSchristos	psrlq	$26,%xmm5
1218*4724848cSchristos	pand	%xmm7,%xmm4
1219*4724848cSchristos	movdqa	%xmm6,%xmm1
1220*4724848cSchristos	psrlq	$26,%xmm6
1221*4724848cSchristos	paddd	%xmm5,%xmm0
1222*4724848cSchristos	psllq	$2,%xmm5
1223*4724848cSchristos	paddq	%xmm2,%xmm6
1224*4724848cSchristos	paddq	%xmm0,%xmm5
1225*4724848cSchristos	pand	%xmm7,%xmm1
1226*4724848cSchristos	movdqa	%xmm6,%xmm2
1227*4724848cSchristos	psrlq	$26,%xmm6
1228*4724848cSchristos	pand	%xmm7,%xmm2
1229*4724848cSchristos	paddd	%xmm3,%xmm6
1230*4724848cSchristos	movdqa	%xmm5,%xmm0
1231*4724848cSchristos	psrlq	$26,%xmm5
1232*4724848cSchristos	movdqa	%xmm6,%xmm3
1233*4724848cSchristos	psrlq	$26,%xmm6
1234*4724848cSchristos	pand	%xmm7,%xmm0
1235*4724848cSchristos	paddd	%xmm5,%xmm1
1236*4724848cSchristos	pand	%xmm7,%xmm3
1237*4724848cSchristos	paddd	%xmm6,%xmm4
1238*4724848cSchristos.L013done:
1239*4724848cSchristos	movd	%xmm0,-48(%edi)
1240*4724848cSchristos	movd	%xmm1,-44(%edi)
1241*4724848cSchristos	movd	%xmm2,-40(%edi)
1242*4724848cSchristos	movd	%xmm3,-36(%edi)
1243*4724848cSchristos	movd	%xmm4,-32(%edi)
1244*4724848cSchristos	movl	%ebp,%esp
1245*4724848cSchristos.L007nodata:
1246*4724848cSchristos	popl	%edi
1247*4724848cSchristos	popl	%esi
1248*4724848cSchristos	popl	%ebx
1249*4724848cSchristos	popl	%ebp
1250*4724848cSchristos	ret
1251*4724848cSchristos.size	_poly1305_blocks_sse2,.-_poly1305_blocks_sse2
1252*4724848cSchristos.align	32
1253*4724848cSchristos.type	_poly1305_emit_sse2,@function
1254*4724848cSchristos.align	16
1255*4724848cSchristos_poly1305_emit_sse2:
1256*4724848cSchristos	pushl	%ebp
1257*4724848cSchristos	pushl	%ebx
1258*4724848cSchristos	pushl	%esi
1259*4724848cSchristos	pushl	%edi
1260*4724848cSchristos	movl	20(%esp),%ebp
1261*4724848cSchristos	cmpl	$0,20(%ebp)
1262*4724848cSchristos	je	.Lenter_emit
1263*4724848cSchristos	movl	(%ebp),%eax
1264*4724848cSchristos	movl	4(%ebp),%edi
1265*4724848cSchristos	movl	8(%ebp),%ecx
1266*4724848cSchristos	movl	12(%ebp),%edx
1267*4724848cSchristos	movl	16(%ebp),%esi
1268*4724848cSchristos	movl	%edi,%ebx
1269*4724848cSchristos	shll	$26,%edi
1270*4724848cSchristos	shrl	$6,%ebx
1271*4724848cSchristos	addl	%edi,%eax
1272*4724848cSchristos	movl	%ecx,%edi
1273*4724848cSchristos	adcl	$0,%ebx
1274*4724848cSchristos	shll	$20,%edi
1275*4724848cSchristos	shrl	$12,%ecx
1276*4724848cSchristos	addl	%edi,%ebx
1277*4724848cSchristos	movl	%edx,%edi
1278*4724848cSchristos	adcl	$0,%ecx
1279*4724848cSchristos	shll	$14,%edi
1280*4724848cSchristos	shrl	$18,%edx
1281*4724848cSchristos	addl	%edi,%ecx
1282*4724848cSchristos	movl	%esi,%edi
1283*4724848cSchristos	adcl	$0,%edx
1284*4724848cSchristos	shll	$8,%edi
1285*4724848cSchristos	shrl	$24,%esi
1286*4724848cSchristos	addl	%edi,%edx
1287*4724848cSchristos	adcl	$0,%esi
1288*4724848cSchristos	movl	%esi,%edi
1289*4724848cSchristos	andl	$3,%esi
1290*4724848cSchristos	shrl	$2,%edi
1291*4724848cSchristos	leal	(%edi,%edi,4),%ebp
1292*4724848cSchristos	movl	24(%esp),%edi
1293*4724848cSchristos	addl	%ebp,%eax
1294*4724848cSchristos	movl	28(%esp),%ebp
1295*4724848cSchristos	adcl	$0,%ebx
1296*4724848cSchristos	adcl	$0,%ecx
1297*4724848cSchristos	adcl	$0,%edx
1298*4724848cSchristos	adcl	$0,%esi
1299*4724848cSchristos	movd	%eax,%xmm0
1300*4724848cSchristos	addl	$5,%eax
1301*4724848cSchristos	movd	%ebx,%xmm1
1302*4724848cSchristos	adcl	$0,%ebx
1303*4724848cSchristos	movd	%ecx,%xmm2
1304*4724848cSchristos	adcl	$0,%ecx
1305*4724848cSchristos	movd	%edx,%xmm3
1306*4724848cSchristos	adcl	$0,%edx
1307*4724848cSchristos	adcl	$0,%esi
1308*4724848cSchristos	shrl	$2,%esi
1309*4724848cSchristos	negl	%esi
1310*4724848cSchristos	andl	%esi,%eax
1311*4724848cSchristos	andl	%esi,%ebx
1312*4724848cSchristos	andl	%esi,%ecx
1313*4724848cSchristos	andl	%esi,%edx
1314*4724848cSchristos	movl	%eax,(%edi)
1315*4724848cSchristos	movd	%xmm0,%eax
1316*4724848cSchristos	movl	%ebx,4(%edi)
1317*4724848cSchristos	movd	%xmm1,%ebx
1318*4724848cSchristos	movl	%ecx,8(%edi)
1319*4724848cSchristos	movd	%xmm2,%ecx
1320*4724848cSchristos	movl	%edx,12(%edi)
1321*4724848cSchristos	movd	%xmm3,%edx
1322*4724848cSchristos	notl	%esi
1323*4724848cSchristos	andl	%esi,%eax
1324*4724848cSchristos	andl	%esi,%ebx
1325*4724848cSchristos	orl	(%edi),%eax
1326*4724848cSchristos	andl	%esi,%ecx
1327*4724848cSchristos	orl	4(%edi),%ebx
1328*4724848cSchristos	andl	%esi,%edx
1329*4724848cSchristos	orl	8(%edi),%ecx
1330*4724848cSchristos	orl	12(%edi),%edx
1331*4724848cSchristos	addl	(%ebp),%eax
1332*4724848cSchristos	adcl	4(%ebp),%ebx
1333*4724848cSchristos	movl	%eax,(%edi)
1334*4724848cSchristos	adcl	8(%ebp),%ecx
1335*4724848cSchristos	movl	%ebx,4(%edi)
1336*4724848cSchristos	adcl	12(%ebp),%edx
1337*4724848cSchristos	movl	%ecx,8(%edi)
1338*4724848cSchristos	movl	%edx,12(%edi)
1339*4724848cSchristos	popl	%edi
1340*4724848cSchristos	popl	%esi
1341*4724848cSchristos	popl	%ebx
1342*4724848cSchristos	popl	%ebp
1343*4724848cSchristos	ret
1344*4724848cSchristos.size	_poly1305_emit_sse2,.-_poly1305_emit_sse2
1345*4724848cSchristos.align	64
1346*4724848cSchristos.Lconst_sse2:
1347*4724848cSchristos.long	16777216,0,16777216,0,16777216,0,16777216,0
1348*4724848cSchristos.long	0,0,0,0,0,0,0,0
1349*4724848cSchristos.long	67108863,0,67108863,0,67108863,0,67108863,0
1350*4724848cSchristos.long	268435455,268435452,268435452,268435452
1351*4724848cSchristos.byte	80,111,108,121,49,51,48,53,32,102,111,114,32,120,56,54
1352*4724848cSchristos.byte	44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
1353*4724848cSchristos.byte	60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
1354*4724848cSchristos.byte	114,103,62,0
1355*4724848cSchristos.align	4
1356*4724848cSchristos.comm	OPENSSL_ia32cap_P,16,4
1357