1238405Sjkim	# $FreeBSD: releng/10.3/secure/lib/libcrypto/amd64/x86_64-mont5.S 296317 2016-03-02 15:43:01Z delphij $
2238405Sjkim.text
3238405Sjkim
4238405Sjkim.globl	bn_mul_mont_gather5
5238405Sjkim.type	bn_mul_mont_gather5,@function
6238405Sjkim.align	64
7238405Sjkimbn_mul_mont_gather5:
8238405Sjkim	testl	$3,%r9d
9238405Sjkim	jnz	.Lmul_enter
10238405Sjkim	cmpl	$8,%r9d
11238405Sjkim	jb	.Lmul_enter
12238405Sjkim	jmp	.Lmul4x_enter
13238405Sjkim
14238405Sjkim.align	16
15238405Sjkim.Lmul_enter:
16238405Sjkim	movl	%r9d,%r9d
17296317Sdelphij	movd	8(%rsp),%xmm5
18296317Sdelphij	leaq	.Linc(%rip),%r10
19238405Sjkim	pushq	%rbx
20238405Sjkim	pushq	%rbp
21238405Sjkim	pushq	%r12
22238405Sjkim	pushq	%r13
23238405Sjkim	pushq	%r14
24238405Sjkim	pushq	%r15
25296317Sdelphij
26296317Sdelphij.Lmul_alloca:
27238405Sjkim	movq	%rsp,%rax
28238405Sjkim	leaq	2(%r9),%r11
29238405Sjkim	negq	%r11
30296317Sdelphij	leaq	-264(%rsp,%r11,8),%rsp
31238405Sjkim	andq	$-1024,%rsp
32238405Sjkim
33238405Sjkim	movq	%rax,8(%rsp,%r9,8)
34238405Sjkim.Lmul_body:
35296317Sdelphij	leaq	128(%rdx),%r12
36296317Sdelphij	movdqa	0(%r10),%xmm0
37296317Sdelphij	movdqa	16(%r10),%xmm1
38296317Sdelphij	leaq	24-112(%rsp,%r9,8),%r10
39296317Sdelphij	andq	$-16,%r10
40238405Sjkim
41296317Sdelphij	pshufd	$0,%xmm5,%xmm5
42296317Sdelphij	movdqa	%xmm1,%xmm4
43296317Sdelphij	movdqa	%xmm1,%xmm2
44296317Sdelphij	paddd	%xmm0,%xmm1
45296317Sdelphij	pcmpeqd	%xmm5,%xmm0
46296317Sdelphij.byte	0x67
47296317Sdelphij	movdqa	%xmm4,%xmm3
48296317Sdelphij	paddd	%xmm1,%xmm2
49296317Sdelphij	pcmpeqd	%xmm5,%xmm1
50296317Sdelphij	movdqa	%xmm0,112(%r10)
51296317Sdelphij	movdqa	%xmm4,%xmm0
52296317Sdelphij
53296317Sdelphij	paddd	%xmm2,%xmm3
54296317Sdelphij	pcmpeqd	%xmm5,%xmm2
55296317Sdelphij	movdqa	%xmm1,128(%r10)
56296317Sdelphij	movdqa	%xmm4,%xmm1
57296317Sdelphij
58296317Sdelphij	paddd	%xmm3,%xmm0
59296317Sdelphij	pcmpeqd	%xmm5,%xmm3
60296317Sdelphij	movdqa	%xmm2,144(%r10)
61296317Sdelphij	movdqa	%xmm4,%xmm2
62296317Sdelphij
63296317Sdelphij	paddd	%xmm0,%xmm1
64296317Sdelphij	pcmpeqd	%xmm5,%xmm0
65296317Sdelphij	movdqa	%xmm3,160(%r10)
66296317Sdelphij	movdqa	%xmm4,%xmm3
67296317Sdelphij	paddd	%xmm1,%xmm2
68296317Sdelphij	pcmpeqd	%xmm5,%xmm1
69296317Sdelphij	movdqa	%xmm0,176(%r10)
70296317Sdelphij	movdqa	%xmm4,%xmm0
71296317Sdelphij
72296317Sdelphij	paddd	%xmm2,%xmm3
73296317Sdelphij	pcmpeqd	%xmm5,%xmm2
74296317Sdelphij	movdqa	%xmm1,192(%r10)
75296317Sdelphij	movdqa	%xmm4,%xmm1
76296317Sdelphij
77296317Sdelphij	paddd	%xmm3,%xmm0
78296317Sdelphij	pcmpeqd	%xmm5,%xmm3
79296317Sdelphij	movdqa	%xmm2,208(%r10)
80296317Sdelphij	movdqa	%xmm4,%xmm2
81296317Sdelphij
82296317Sdelphij	paddd	%xmm0,%xmm1
83296317Sdelphij	pcmpeqd	%xmm5,%xmm0
84296317Sdelphij	movdqa	%xmm3,224(%r10)
85296317Sdelphij	movdqa	%xmm4,%xmm3
86296317Sdelphij	paddd	%xmm1,%xmm2
87296317Sdelphij	pcmpeqd	%xmm5,%xmm1
88296317Sdelphij	movdqa	%xmm0,240(%r10)
89296317Sdelphij	movdqa	%xmm4,%xmm0
90296317Sdelphij
91296317Sdelphij	paddd	%xmm2,%xmm3
92296317Sdelphij	pcmpeqd	%xmm5,%xmm2
93296317Sdelphij	movdqa	%xmm1,256(%r10)
94296317Sdelphij	movdqa	%xmm4,%xmm1
95296317Sdelphij
96296317Sdelphij	paddd	%xmm3,%xmm0
97296317Sdelphij	pcmpeqd	%xmm5,%xmm3
98296317Sdelphij	movdqa	%xmm2,272(%r10)
99296317Sdelphij	movdqa	%xmm4,%xmm2
100296317Sdelphij
101296317Sdelphij	paddd	%xmm0,%xmm1
102296317Sdelphij	pcmpeqd	%xmm5,%xmm0
103296317Sdelphij	movdqa	%xmm3,288(%r10)
104296317Sdelphij	movdqa	%xmm4,%xmm3
105296317Sdelphij	paddd	%xmm1,%xmm2
106296317Sdelphij	pcmpeqd	%xmm5,%xmm1
107296317Sdelphij	movdqa	%xmm0,304(%r10)
108296317Sdelphij
109296317Sdelphij	paddd	%xmm2,%xmm3
110296317Sdelphij.byte	0x67
111296317Sdelphij	pcmpeqd	%xmm5,%xmm2
112296317Sdelphij	movdqa	%xmm1,320(%r10)
113296317Sdelphij
114296317Sdelphij	pcmpeqd	%xmm5,%xmm3
115296317Sdelphij	movdqa	%xmm2,336(%r10)
116296317Sdelphij	pand	64(%r12),%xmm0
117296317Sdelphij
118296317Sdelphij	pand	80(%r12),%xmm1
119296317Sdelphij	pand	96(%r12),%xmm2
120296317Sdelphij	movdqa	%xmm3,352(%r10)
121296317Sdelphij	pand	112(%r12),%xmm3
122296317Sdelphij	por	%xmm2,%xmm0
123296317Sdelphij	por	%xmm3,%xmm1
124296317Sdelphij	movdqa	-128(%r12),%xmm4
125296317Sdelphij	movdqa	-112(%r12),%xmm5
126296317Sdelphij	movdqa	-96(%r12),%xmm2
127296317Sdelphij	pand	112(%r10),%xmm4
128296317Sdelphij	movdqa	-80(%r12),%xmm3
129296317Sdelphij	pand	128(%r10),%xmm5
130296317Sdelphij	por	%xmm4,%xmm0
131296317Sdelphij	pand	144(%r10),%xmm2
132296317Sdelphij	por	%xmm5,%xmm1
133296317Sdelphij	pand	160(%r10),%xmm3
134296317Sdelphij	por	%xmm2,%xmm0
135296317Sdelphij	por	%xmm3,%xmm1
136296317Sdelphij	movdqa	-64(%r12),%xmm4
137296317Sdelphij	movdqa	-48(%r12),%xmm5
138296317Sdelphij	movdqa	-32(%r12),%xmm2
139296317Sdelphij	pand	176(%r10),%xmm4
140296317Sdelphij	movdqa	-16(%r12),%xmm3
141296317Sdelphij	pand	192(%r10),%xmm5
142296317Sdelphij	por	%xmm4,%xmm0
143296317Sdelphij	pand	208(%r10),%xmm2
144296317Sdelphij	por	%xmm5,%xmm1
145296317Sdelphij	pand	224(%r10),%xmm3
146296317Sdelphij	por	%xmm2,%xmm0
147296317Sdelphij	por	%xmm3,%xmm1
148296317Sdelphij	movdqa	0(%r12),%xmm4
149296317Sdelphij	movdqa	16(%r12),%xmm5
150296317Sdelphij	movdqa	32(%r12),%xmm2
151296317Sdelphij	pand	240(%r10),%xmm4
152296317Sdelphij	movdqa	48(%r12),%xmm3
153296317Sdelphij	pand	256(%r10),%xmm5
154296317Sdelphij	por	%xmm4,%xmm0
155296317Sdelphij	pand	272(%r10),%xmm2
156296317Sdelphij	por	%xmm5,%xmm1
157296317Sdelphij	pand	288(%r10),%xmm3
158296317Sdelphij	por	%xmm2,%xmm0
159296317Sdelphij	por	%xmm3,%xmm1
160238405Sjkim	por	%xmm1,%xmm0
161296317Sdelphij	pshufd	$78,%xmm0,%xmm1
162296317Sdelphij	por	%xmm1,%xmm0
163238405Sjkim	leaq	256(%r12),%r12
164238405Sjkim.byte	102,72,15,126,195
165238405Sjkim
166238405Sjkim	movq	(%r8),%r8
167238405Sjkim	movq	(%rsi),%rax
168238405Sjkim
169238405Sjkim	xorq	%r14,%r14
170238405Sjkim	xorq	%r15,%r15
171238405Sjkim
172238405Sjkim	movq	%r8,%rbp
173238405Sjkim	mulq	%rbx
174238405Sjkim	movq	%rax,%r10
175238405Sjkim	movq	(%rcx),%rax
176238405Sjkim
177238405Sjkim	imulq	%r10,%rbp
178238405Sjkim	movq	%rdx,%r11
179238405Sjkim
180238405Sjkim	mulq	%rbp
181238405Sjkim	addq	%rax,%r10
182238405Sjkim	movq	8(%rsi),%rax
183238405Sjkim	adcq	$0,%rdx
184238405Sjkim	movq	%rdx,%r13
185238405Sjkim
186238405Sjkim	leaq	1(%r15),%r15
187238405Sjkim	jmp	.L1st_enter
188238405Sjkim
189238405Sjkim.align	16
190238405Sjkim.L1st:
191238405Sjkim	addq	%rax,%r13
192238405Sjkim	movq	(%rsi,%r15,8),%rax
193238405Sjkim	adcq	$0,%rdx
194238405Sjkim	addq	%r11,%r13
195238405Sjkim	movq	%r10,%r11
196238405Sjkim	adcq	$0,%rdx
197238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
198238405Sjkim	movq	%rdx,%r13
199238405Sjkim
200238405Sjkim.L1st_enter:
201238405Sjkim	mulq	%rbx
202238405Sjkim	addq	%rax,%r11
203238405Sjkim	movq	(%rcx,%r15,8),%rax
204238405Sjkim	adcq	$0,%rdx
205238405Sjkim	leaq	1(%r15),%r15
206238405Sjkim	movq	%rdx,%r10
207238405Sjkim
208238405Sjkim	mulq	%rbp
209238405Sjkim	cmpq	%r9,%r15
210238405Sjkim	jne	.L1st
211238405Sjkim
212238405Sjkim	addq	%rax,%r13
213238405Sjkim	movq	(%rsi),%rax
214238405Sjkim	adcq	$0,%rdx
215238405Sjkim	addq	%r11,%r13
216238405Sjkim	adcq	$0,%rdx
217238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
218238405Sjkim	movq	%rdx,%r13
219238405Sjkim	movq	%r10,%r11
220238405Sjkim
221238405Sjkim	xorq	%rdx,%rdx
222238405Sjkim	addq	%r11,%r13
223238405Sjkim	adcq	$0,%rdx
224238405Sjkim	movq	%r13,-8(%rsp,%r9,8)
225238405Sjkim	movq	%rdx,(%rsp,%r9,8)
226238405Sjkim
227238405Sjkim	leaq	1(%r14),%r14
228238405Sjkim	jmp	.Louter
229238405Sjkim.align	16
230238405Sjkim.Louter:
231296317Sdelphij	leaq	24+128(%rsp,%r9,8),%rdx
232296317Sdelphij	andq	$-16,%rdx
233296317Sdelphij	pxor	%xmm4,%xmm4
234296317Sdelphij	pxor	%xmm5,%xmm5
235296317Sdelphij	movdqa	-128(%r12),%xmm0
236296317Sdelphij	movdqa	-112(%r12),%xmm1
237296317Sdelphij	movdqa	-96(%r12),%xmm2
238296317Sdelphij	movdqa	-80(%r12),%xmm3
239296317Sdelphij	pand	-128(%rdx),%xmm0
240296317Sdelphij	pand	-112(%rdx),%xmm1
241296317Sdelphij	por	%xmm0,%xmm4
242296317Sdelphij	pand	-96(%rdx),%xmm2
243296317Sdelphij	por	%xmm1,%xmm5
244296317Sdelphij	pand	-80(%rdx),%xmm3
245296317Sdelphij	por	%xmm2,%xmm4
246296317Sdelphij	por	%xmm3,%xmm5
247296317Sdelphij	movdqa	-64(%r12),%xmm0
248296317Sdelphij	movdqa	-48(%r12),%xmm1
249296317Sdelphij	movdqa	-32(%r12),%xmm2
250296317Sdelphij	movdqa	-16(%r12),%xmm3
251296317Sdelphij	pand	-64(%rdx),%xmm0
252296317Sdelphij	pand	-48(%rdx),%xmm1
253296317Sdelphij	por	%xmm0,%xmm4
254296317Sdelphij	pand	-32(%rdx),%xmm2
255296317Sdelphij	por	%xmm1,%xmm5
256296317Sdelphij	pand	-16(%rdx),%xmm3
257296317Sdelphij	por	%xmm2,%xmm4
258296317Sdelphij	por	%xmm3,%xmm5
259296317Sdelphij	movdqa	0(%r12),%xmm0
260296317Sdelphij	movdqa	16(%r12),%xmm1
261296317Sdelphij	movdqa	32(%r12),%xmm2
262296317Sdelphij	movdqa	48(%r12),%xmm3
263296317Sdelphij	pand	0(%rdx),%xmm0
264296317Sdelphij	pand	16(%rdx),%xmm1
265296317Sdelphij	por	%xmm0,%xmm4
266296317Sdelphij	pand	32(%rdx),%xmm2
267296317Sdelphij	por	%xmm1,%xmm5
268296317Sdelphij	pand	48(%rdx),%xmm3
269296317Sdelphij	por	%xmm2,%xmm4
270296317Sdelphij	por	%xmm3,%xmm5
271296317Sdelphij	movdqa	64(%r12),%xmm0
272296317Sdelphij	movdqa	80(%r12),%xmm1
273296317Sdelphij	movdqa	96(%r12),%xmm2
274296317Sdelphij	movdqa	112(%r12),%xmm3
275296317Sdelphij	pand	64(%rdx),%xmm0
276296317Sdelphij	pand	80(%rdx),%xmm1
277296317Sdelphij	por	%xmm0,%xmm4
278296317Sdelphij	pand	96(%rdx),%xmm2
279296317Sdelphij	por	%xmm1,%xmm5
280296317Sdelphij	pand	112(%rdx),%xmm3
281296317Sdelphij	por	%xmm2,%xmm4
282296317Sdelphij	por	%xmm3,%xmm5
283296317Sdelphij	por	%xmm5,%xmm4
284296317Sdelphij	pshufd	$78,%xmm4,%xmm0
285296317Sdelphij	por	%xmm4,%xmm0
286296317Sdelphij	leaq	256(%r12),%r12
287296317Sdelphij.byte	102,72,15,126,195
288296317Sdelphij
289238405Sjkim	xorq	%r15,%r15
290238405Sjkim	movq	%r8,%rbp
291238405Sjkim	movq	(%rsp),%r10
292238405Sjkim
293238405Sjkim	mulq	%rbx
294238405Sjkim	addq	%rax,%r10
295238405Sjkim	movq	(%rcx),%rax
296238405Sjkim	adcq	$0,%rdx
297238405Sjkim
298238405Sjkim	imulq	%r10,%rbp
299238405Sjkim	movq	%rdx,%r11
300238405Sjkim
301238405Sjkim	mulq	%rbp
302238405Sjkim	addq	%rax,%r10
303238405Sjkim	movq	8(%rsi),%rax
304238405Sjkim	adcq	$0,%rdx
305238405Sjkim	movq	8(%rsp),%r10
306238405Sjkim	movq	%rdx,%r13
307238405Sjkim
308238405Sjkim	leaq	1(%r15),%r15
309238405Sjkim	jmp	.Linner_enter
310238405Sjkim
311238405Sjkim.align	16
312238405Sjkim.Linner:
313238405Sjkim	addq	%rax,%r13
314238405Sjkim	movq	(%rsi,%r15,8),%rax
315238405Sjkim	adcq	$0,%rdx
316238405Sjkim	addq	%r10,%r13
317238405Sjkim	movq	(%rsp,%r15,8),%r10
318238405Sjkim	adcq	$0,%rdx
319238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
320238405Sjkim	movq	%rdx,%r13
321238405Sjkim
322238405Sjkim.Linner_enter:
323238405Sjkim	mulq	%rbx
324238405Sjkim	addq	%rax,%r11
325238405Sjkim	movq	(%rcx,%r15,8),%rax
326238405Sjkim	adcq	$0,%rdx
327238405Sjkim	addq	%r11,%r10
328238405Sjkim	movq	%rdx,%r11
329238405Sjkim	adcq	$0,%r11
330238405Sjkim	leaq	1(%r15),%r15
331238405Sjkim
332238405Sjkim	mulq	%rbp
333238405Sjkim	cmpq	%r9,%r15
334238405Sjkim	jne	.Linner
335238405Sjkim
336238405Sjkim	addq	%rax,%r13
337238405Sjkim	movq	(%rsi),%rax
338238405Sjkim	adcq	$0,%rdx
339238405Sjkim	addq	%r10,%r13
340238405Sjkim	movq	(%rsp,%r15,8),%r10
341238405Sjkim	adcq	$0,%rdx
342238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
343238405Sjkim	movq	%rdx,%r13
344238405Sjkim
345238405Sjkim	xorq	%rdx,%rdx
346238405Sjkim	addq	%r11,%r13
347238405Sjkim	adcq	$0,%rdx
348238405Sjkim	addq	%r10,%r13
349238405Sjkim	adcq	$0,%rdx
350238405Sjkim	movq	%r13,-8(%rsp,%r9,8)
351238405Sjkim	movq	%rdx,(%rsp,%r9,8)
352238405Sjkim
353238405Sjkim	leaq	1(%r14),%r14
354238405Sjkim	cmpq	%r9,%r14
355238405Sjkim	jl	.Louter
356238405Sjkim
357238405Sjkim	xorq	%r14,%r14
358238405Sjkim	movq	(%rsp),%rax
359238405Sjkim	leaq	(%rsp),%rsi
360238405Sjkim	movq	%r9,%r15
361238405Sjkim	jmp	.Lsub
362238405Sjkim.align	16
363238405Sjkim.Lsub:	sbbq	(%rcx,%r14,8),%rax
364238405Sjkim	movq	%rax,(%rdi,%r14,8)
365238405Sjkim	movq	8(%rsi,%r14,8),%rax
366238405Sjkim	leaq	1(%r14),%r14
367238405Sjkim	decq	%r15
368238405Sjkim	jnz	.Lsub
369238405Sjkim
370238405Sjkim	sbbq	$0,%rax
371238405Sjkim	xorq	%r14,%r14
372238405Sjkim	andq	%rax,%rsi
373238405Sjkim	notq	%rax
374238405Sjkim	movq	%rdi,%rcx
375238405Sjkim	andq	%rax,%rcx
376238405Sjkim	movq	%r9,%r15
377238405Sjkim	orq	%rcx,%rsi
378238405Sjkim.align	16
379238405Sjkim.Lcopy:
380238405Sjkim	movq	(%rsi,%r14,8),%rax
381238405Sjkim	movq	%r14,(%rsp,%r14,8)
382238405Sjkim	movq	%rax,(%rdi,%r14,8)
383238405Sjkim	leaq	1(%r14),%r14
384238405Sjkim	subq	$1,%r15
385238405Sjkim	jnz	.Lcopy
386238405Sjkim
387238405Sjkim	movq	8(%rsp,%r9,8),%rsi
388238405Sjkim	movq	$1,%rax
389296317Sdelphij
390238405Sjkim	movq	(%rsi),%r15
391238405Sjkim	movq	8(%rsi),%r14
392238405Sjkim	movq	16(%rsi),%r13
393238405Sjkim	movq	24(%rsi),%r12
394238405Sjkim	movq	32(%rsi),%rbp
395238405Sjkim	movq	40(%rsi),%rbx
396238405Sjkim	leaq	48(%rsi),%rsp
397238405Sjkim.Lmul_epilogue:
398238405Sjkim	.byte	0xf3,0xc3
399238405Sjkim.size	bn_mul_mont_gather5,.-bn_mul_mont_gather5
400238405Sjkim.type	bn_mul4x_mont_gather5,@function
401238405Sjkim.align	16
402238405Sjkimbn_mul4x_mont_gather5:
403238405Sjkim.Lmul4x_enter:
404238405Sjkim	movl	%r9d,%r9d
405296317Sdelphij	movd	8(%rsp),%xmm5
406296317Sdelphij	leaq	.Linc(%rip),%r10
407238405Sjkim	pushq	%rbx
408238405Sjkim	pushq	%rbp
409238405Sjkim	pushq	%r12
410238405Sjkim	pushq	%r13
411238405Sjkim	pushq	%r14
412238405Sjkim	pushq	%r15
413296317Sdelphij
414296317Sdelphij.Lmul4x_alloca:
415238405Sjkim	movq	%rsp,%rax
416238405Sjkim	leaq	4(%r9),%r11
417238405Sjkim	negq	%r11
418296317Sdelphij	leaq	-256(%rsp,%r11,8),%rsp
419238405Sjkim	andq	$-1024,%rsp
420238405Sjkim
421238405Sjkim	movq	%rax,8(%rsp,%r9,8)
422238405Sjkim.Lmul4x_body:
423238405Sjkim	movq	%rdi,16(%rsp,%r9,8)
424296317Sdelphij	leaq	128(%rdx),%r12
425296317Sdelphij	movdqa	0(%r10),%xmm0
426296317Sdelphij	movdqa	16(%r10),%xmm1
427296317Sdelphij	leaq	32-112(%rsp,%r9,8),%r10
428238405Sjkim
429296317Sdelphij	pshufd	$0,%xmm5,%xmm5
430296317Sdelphij	movdqa	%xmm1,%xmm4
431296317Sdelphij.byte	0x67,0x67
432296317Sdelphij	movdqa	%xmm1,%xmm2
433296317Sdelphij	paddd	%xmm0,%xmm1
434296317Sdelphij	pcmpeqd	%xmm5,%xmm0
435296317Sdelphij.byte	0x67
436296317Sdelphij	movdqa	%xmm4,%xmm3
437296317Sdelphij	paddd	%xmm1,%xmm2
438296317Sdelphij	pcmpeqd	%xmm5,%xmm1
439296317Sdelphij	movdqa	%xmm0,112(%r10)
440296317Sdelphij	movdqa	%xmm4,%xmm0
441296317Sdelphij
442296317Sdelphij	paddd	%xmm2,%xmm3
443296317Sdelphij	pcmpeqd	%xmm5,%xmm2
444296317Sdelphij	movdqa	%xmm1,128(%r10)
445296317Sdelphij	movdqa	%xmm4,%xmm1
446296317Sdelphij
447296317Sdelphij	paddd	%xmm3,%xmm0
448296317Sdelphij	pcmpeqd	%xmm5,%xmm3
449296317Sdelphij	movdqa	%xmm2,144(%r10)
450296317Sdelphij	movdqa	%xmm4,%xmm2
451296317Sdelphij
452296317Sdelphij	paddd	%xmm0,%xmm1
453296317Sdelphij	pcmpeqd	%xmm5,%xmm0
454296317Sdelphij	movdqa	%xmm3,160(%r10)
455296317Sdelphij	movdqa	%xmm4,%xmm3
456296317Sdelphij	paddd	%xmm1,%xmm2
457296317Sdelphij	pcmpeqd	%xmm5,%xmm1
458296317Sdelphij	movdqa	%xmm0,176(%r10)
459296317Sdelphij	movdqa	%xmm4,%xmm0
460296317Sdelphij
461296317Sdelphij	paddd	%xmm2,%xmm3
462296317Sdelphij	pcmpeqd	%xmm5,%xmm2
463296317Sdelphij	movdqa	%xmm1,192(%r10)
464296317Sdelphij	movdqa	%xmm4,%xmm1
465296317Sdelphij
466296317Sdelphij	paddd	%xmm3,%xmm0
467296317Sdelphij	pcmpeqd	%xmm5,%xmm3
468296317Sdelphij	movdqa	%xmm2,208(%r10)
469296317Sdelphij	movdqa	%xmm4,%xmm2
470296317Sdelphij
471296317Sdelphij	paddd	%xmm0,%xmm1
472296317Sdelphij	pcmpeqd	%xmm5,%xmm0
473296317Sdelphij	movdqa	%xmm3,224(%r10)
474296317Sdelphij	movdqa	%xmm4,%xmm3
475296317Sdelphij	paddd	%xmm1,%xmm2
476296317Sdelphij	pcmpeqd	%xmm5,%xmm1
477296317Sdelphij	movdqa	%xmm0,240(%r10)
478296317Sdelphij	movdqa	%xmm4,%xmm0
479296317Sdelphij
480296317Sdelphij	paddd	%xmm2,%xmm3
481296317Sdelphij	pcmpeqd	%xmm5,%xmm2
482296317Sdelphij	movdqa	%xmm1,256(%r10)
483296317Sdelphij	movdqa	%xmm4,%xmm1
484296317Sdelphij
485296317Sdelphij	paddd	%xmm3,%xmm0
486296317Sdelphij	pcmpeqd	%xmm5,%xmm3
487296317Sdelphij	movdqa	%xmm2,272(%r10)
488296317Sdelphij	movdqa	%xmm4,%xmm2
489296317Sdelphij
490296317Sdelphij	paddd	%xmm0,%xmm1
491296317Sdelphij	pcmpeqd	%xmm5,%xmm0
492296317Sdelphij	movdqa	%xmm3,288(%r10)
493296317Sdelphij	movdqa	%xmm4,%xmm3
494296317Sdelphij	paddd	%xmm1,%xmm2
495296317Sdelphij	pcmpeqd	%xmm5,%xmm1
496296317Sdelphij	movdqa	%xmm0,304(%r10)
497296317Sdelphij
498296317Sdelphij	paddd	%xmm2,%xmm3
499296317Sdelphij.byte	0x67
500296317Sdelphij	pcmpeqd	%xmm5,%xmm2
501296317Sdelphij	movdqa	%xmm1,320(%r10)
502296317Sdelphij
503296317Sdelphij	pcmpeqd	%xmm5,%xmm3
504296317Sdelphij	movdqa	%xmm2,336(%r10)
505296317Sdelphij	pand	64(%r12),%xmm0
506296317Sdelphij
507296317Sdelphij	pand	80(%r12),%xmm1
508296317Sdelphij	pand	96(%r12),%xmm2
509296317Sdelphij	movdqa	%xmm3,352(%r10)
510296317Sdelphij	pand	112(%r12),%xmm3
511296317Sdelphij	por	%xmm2,%xmm0
512296317Sdelphij	por	%xmm3,%xmm1
513296317Sdelphij	movdqa	-128(%r12),%xmm4
514296317Sdelphij	movdqa	-112(%r12),%xmm5
515296317Sdelphij	movdqa	-96(%r12),%xmm2
516296317Sdelphij	pand	112(%r10),%xmm4
517296317Sdelphij	movdqa	-80(%r12),%xmm3
518296317Sdelphij	pand	128(%r10),%xmm5
519296317Sdelphij	por	%xmm4,%xmm0
520296317Sdelphij	pand	144(%r10),%xmm2
521296317Sdelphij	por	%xmm5,%xmm1
522296317Sdelphij	pand	160(%r10),%xmm3
523296317Sdelphij	por	%xmm2,%xmm0
524296317Sdelphij	por	%xmm3,%xmm1
525296317Sdelphij	movdqa	-64(%r12),%xmm4
526296317Sdelphij	movdqa	-48(%r12),%xmm5
527296317Sdelphij	movdqa	-32(%r12),%xmm2
528296317Sdelphij	pand	176(%r10),%xmm4
529296317Sdelphij	movdqa	-16(%r12),%xmm3
530296317Sdelphij	pand	192(%r10),%xmm5
531296317Sdelphij	por	%xmm4,%xmm0
532296317Sdelphij	pand	208(%r10),%xmm2
533296317Sdelphij	por	%xmm5,%xmm1
534296317Sdelphij	pand	224(%r10),%xmm3
535296317Sdelphij	por	%xmm2,%xmm0
536296317Sdelphij	por	%xmm3,%xmm1
537296317Sdelphij	movdqa	0(%r12),%xmm4
538296317Sdelphij	movdqa	16(%r12),%xmm5
539296317Sdelphij	movdqa	32(%r12),%xmm2
540296317Sdelphij	pand	240(%r10),%xmm4
541296317Sdelphij	movdqa	48(%r12),%xmm3
542296317Sdelphij	pand	256(%r10),%xmm5
543296317Sdelphij	por	%xmm4,%xmm0
544296317Sdelphij	pand	272(%r10),%xmm2
545296317Sdelphij	por	%xmm5,%xmm1
546296317Sdelphij	pand	288(%r10),%xmm3
547296317Sdelphij	por	%xmm2,%xmm0
548296317Sdelphij	por	%xmm3,%xmm1
549238405Sjkim	por	%xmm1,%xmm0
550296317Sdelphij	pshufd	$78,%xmm0,%xmm1
551296317Sdelphij	por	%xmm1,%xmm0
552238405Sjkim	leaq	256(%r12),%r12
553296317Sdelphij.byte	102,72,15,126,195
554238405Sjkim
555238405Sjkim	movq	(%r8),%r8
556238405Sjkim	movq	(%rsi),%rax
557238405Sjkim
558238405Sjkim	xorq	%r14,%r14
559238405Sjkim	xorq	%r15,%r15
560238405Sjkim
561238405Sjkim	movq	%r8,%rbp
562238405Sjkim	mulq	%rbx
563238405Sjkim	movq	%rax,%r10
564238405Sjkim	movq	(%rcx),%rax
565238405Sjkim
566238405Sjkim	imulq	%r10,%rbp
567238405Sjkim	movq	%rdx,%r11
568238405Sjkim
569238405Sjkim	mulq	%rbp
570238405Sjkim	addq	%rax,%r10
571238405Sjkim	movq	8(%rsi),%rax
572238405Sjkim	adcq	$0,%rdx
573238405Sjkim	movq	%rdx,%rdi
574238405Sjkim
575238405Sjkim	mulq	%rbx
576238405Sjkim	addq	%rax,%r11
577238405Sjkim	movq	8(%rcx),%rax
578238405Sjkim	adcq	$0,%rdx
579238405Sjkim	movq	%rdx,%r10
580238405Sjkim
581238405Sjkim	mulq	%rbp
582238405Sjkim	addq	%rax,%rdi
583238405Sjkim	movq	16(%rsi),%rax
584238405Sjkim	adcq	$0,%rdx
585238405Sjkim	addq	%r11,%rdi
586238405Sjkim	leaq	4(%r15),%r15
587238405Sjkim	adcq	$0,%rdx
588238405Sjkim	movq	%rdi,(%rsp)
589238405Sjkim	movq	%rdx,%r13
590238405Sjkim	jmp	.L1st4x
591238405Sjkim.align	16
592238405Sjkim.L1st4x:
593238405Sjkim	mulq	%rbx
594238405Sjkim	addq	%rax,%r10
595238405Sjkim	movq	-16(%rcx,%r15,8),%rax
596238405Sjkim	adcq	$0,%rdx
597238405Sjkim	movq	%rdx,%r11
598238405Sjkim
599238405Sjkim	mulq	%rbp
600238405Sjkim	addq	%rax,%r13
601238405Sjkim	movq	-8(%rsi,%r15,8),%rax
602238405Sjkim	adcq	$0,%rdx
603238405Sjkim	addq	%r10,%r13
604238405Sjkim	adcq	$0,%rdx
605238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
606238405Sjkim	movq	%rdx,%rdi
607238405Sjkim
608238405Sjkim	mulq	%rbx
609238405Sjkim	addq	%rax,%r11
610238405Sjkim	movq	-8(%rcx,%r15,8),%rax
611238405Sjkim	adcq	$0,%rdx
612238405Sjkim	movq	%rdx,%r10
613238405Sjkim
614238405Sjkim	mulq	%rbp
615238405Sjkim	addq	%rax,%rdi
616238405Sjkim	movq	(%rsi,%r15,8),%rax
617238405Sjkim	adcq	$0,%rdx
618238405Sjkim	addq	%r11,%rdi
619238405Sjkim	adcq	$0,%rdx
620238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
621238405Sjkim	movq	%rdx,%r13
622238405Sjkim
623238405Sjkim	mulq	%rbx
624238405Sjkim	addq	%rax,%r10
625238405Sjkim	movq	(%rcx,%r15,8),%rax
626238405Sjkim	adcq	$0,%rdx
627238405Sjkim	movq	%rdx,%r11
628238405Sjkim
629238405Sjkim	mulq	%rbp
630238405Sjkim	addq	%rax,%r13
631238405Sjkim	movq	8(%rsi,%r15,8),%rax
632238405Sjkim	adcq	$0,%rdx
633238405Sjkim	addq	%r10,%r13
634238405Sjkim	adcq	$0,%rdx
635238405Sjkim	movq	%r13,-8(%rsp,%r15,8)
636238405Sjkim	movq	%rdx,%rdi
637238405Sjkim
638238405Sjkim	mulq	%rbx
639238405Sjkim	addq	%rax,%r11
640238405Sjkim	movq	8(%rcx,%r15,8),%rax
641238405Sjkim	adcq	$0,%rdx
642238405Sjkim	leaq	4(%r15),%r15
643238405Sjkim	movq	%rdx,%r10
644238405Sjkim
645238405Sjkim	mulq	%rbp
646238405Sjkim	addq	%rax,%rdi
647238405Sjkim	movq	-16(%rsi,%r15,8),%rax
648238405Sjkim	adcq	$0,%rdx
649238405Sjkim	addq	%r11,%rdi
650238405Sjkim	adcq	$0,%rdx
651238405Sjkim	movq	%rdi,-32(%rsp,%r15,8)
652238405Sjkim	movq	%rdx,%r13
653238405Sjkim	cmpq	%r9,%r15
654238405Sjkim	jl	.L1st4x
655238405Sjkim
656238405Sjkim	mulq	%rbx
657238405Sjkim	addq	%rax,%r10
658238405Sjkim	movq	-16(%rcx,%r15,8),%rax
659238405Sjkim	adcq	$0,%rdx
660238405Sjkim	movq	%rdx,%r11
661238405Sjkim
662238405Sjkim	mulq	%rbp
663238405Sjkim	addq	%rax,%r13
664238405Sjkim	movq	-8(%rsi,%r15,8),%rax
665238405Sjkim	adcq	$0,%rdx
666238405Sjkim	addq	%r10,%r13
667238405Sjkim	adcq	$0,%rdx
668238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
669238405Sjkim	movq	%rdx,%rdi
670238405Sjkim
671238405Sjkim	mulq	%rbx
672238405Sjkim	addq	%rax,%r11
673238405Sjkim	movq	-8(%rcx,%r15,8),%rax
674238405Sjkim	adcq	$0,%rdx
675238405Sjkim	movq	%rdx,%r10
676238405Sjkim
677238405Sjkim	mulq	%rbp
678238405Sjkim	addq	%rax,%rdi
679238405Sjkim	movq	(%rsi),%rax
680238405Sjkim	adcq	$0,%rdx
681238405Sjkim	addq	%r11,%rdi
682238405Sjkim	adcq	$0,%rdx
683238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
684238405Sjkim	movq	%rdx,%r13
685238405Sjkim
686238405Sjkim	xorq	%rdi,%rdi
687238405Sjkim	addq	%r10,%r13
688238405Sjkim	adcq	$0,%rdi
689238405Sjkim	movq	%r13,-8(%rsp,%r15,8)
690238405Sjkim	movq	%rdi,(%rsp,%r15,8)
691238405Sjkim
692238405Sjkim	leaq	1(%r14),%r14
693238405Sjkim.align	4
694238405Sjkim.Louter4x:
695296317Sdelphij	leaq	32+128(%rsp,%r9,8),%rdx
696296317Sdelphij	pxor	%xmm4,%xmm4
697296317Sdelphij	pxor	%xmm5,%xmm5
698296317Sdelphij	movdqa	-128(%r12),%xmm0
699296317Sdelphij	movdqa	-112(%r12),%xmm1
700296317Sdelphij	movdqa	-96(%r12),%xmm2
701296317Sdelphij	movdqa	-80(%r12),%xmm3
702296317Sdelphij	pand	-128(%rdx),%xmm0
703296317Sdelphij	pand	-112(%rdx),%xmm1
704296317Sdelphij	por	%xmm0,%xmm4
705296317Sdelphij	pand	-96(%rdx),%xmm2
706296317Sdelphij	por	%xmm1,%xmm5
707296317Sdelphij	pand	-80(%rdx),%xmm3
708296317Sdelphij	por	%xmm2,%xmm4
709296317Sdelphij	por	%xmm3,%xmm5
710296317Sdelphij	movdqa	-64(%r12),%xmm0
711296317Sdelphij	movdqa	-48(%r12),%xmm1
712296317Sdelphij	movdqa	-32(%r12),%xmm2
713296317Sdelphij	movdqa	-16(%r12),%xmm3
714296317Sdelphij	pand	-64(%rdx),%xmm0
715296317Sdelphij	pand	-48(%rdx),%xmm1
716296317Sdelphij	por	%xmm0,%xmm4
717296317Sdelphij	pand	-32(%rdx),%xmm2
718296317Sdelphij	por	%xmm1,%xmm5
719296317Sdelphij	pand	-16(%rdx),%xmm3
720296317Sdelphij	por	%xmm2,%xmm4
721296317Sdelphij	por	%xmm3,%xmm5
722296317Sdelphij	movdqa	0(%r12),%xmm0
723296317Sdelphij	movdqa	16(%r12),%xmm1
724296317Sdelphij	movdqa	32(%r12),%xmm2
725296317Sdelphij	movdqa	48(%r12),%xmm3
726296317Sdelphij	pand	0(%rdx),%xmm0
727296317Sdelphij	pand	16(%rdx),%xmm1
728296317Sdelphij	por	%xmm0,%xmm4
729296317Sdelphij	pand	32(%rdx),%xmm2
730296317Sdelphij	por	%xmm1,%xmm5
731296317Sdelphij	pand	48(%rdx),%xmm3
732296317Sdelphij	por	%xmm2,%xmm4
733296317Sdelphij	por	%xmm3,%xmm5
734296317Sdelphij	movdqa	64(%r12),%xmm0
735296317Sdelphij	movdqa	80(%r12),%xmm1
736296317Sdelphij	movdqa	96(%r12),%xmm2
737296317Sdelphij	movdqa	112(%r12),%xmm3
738296317Sdelphij	pand	64(%rdx),%xmm0
739296317Sdelphij	pand	80(%rdx),%xmm1
740296317Sdelphij	por	%xmm0,%xmm4
741296317Sdelphij	pand	96(%rdx),%xmm2
742296317Sdelphij	por	%xmm1,%xmm5
743296317Sdelphij	pand	112(%rdx),%xmm3
744296317Sdelphij	por	%xmm2,%xmm4
745296317Sdelphij	por	%xmm3,%xmm5
746296317Sdelphij	por	%xmm5,%xmm4
747296317Sdelphij	pshufd	$78,%xmm4,%xmm0
748296317Sdelphij	por	%xmm4,%xmm0
749296317Sdelphij	leaq	256(%r12),%r12
750296317Sdelphij.byte	102,72,15,126,195
751296317Sdelphij
752238405Sjkim	xorq	%r15,%r15
753238405Sjkim
754238405Sjkim	movq	(%rsp),%r10
755238405Sjkim	movq	%r8,%rbp
756238405Sjkim	mulq	%rbx
757238405Sjkim	addq	%rax,%r10
758238405Sjkim	movq	(%rcx),%rax
759238405Sjkim	adcq	$0,%rdx
760238405Sjkim
761238405Sjkim	imulq	%r10,%rbp
762238405Sjkim	movq	%rdx,%r11
763238405Sjkim
764238405Sjkim	mulq	%rbp
765238405Sjkim	addq	%rax,%r10
766238405Sjkim	movq	8(%rsi),%rax
767238405Sjkim	adcq	$0,%rdx
768238405Sjkim	movq	%rdx,%rdi
769238405Sjkim
770238405Sjkim	mulq	%rbx
771238405Sjkim	addq	%rax,%r11
772238405Sjkim	movq	8(%rcx),%rax
773238405Sjkim	adcq	$0,%rdx
774238405Sjkim	addq	8(%rsp),%r11
775238405Sjkim	adcq	$0,%rdx
776238405Sjkim	movq	%rdx,%r10
777238405Sjkim
778238405Sjkim	mulq	%rbp
779238405Sjkim	addq	%rax,%rdi
780238405Sjkim	movq	16(%rsi),%rax
781238405Sjkim	adcq	$0,%rdx
782238405Sjkim	addq	%r11,%rdi
783238405Sjkim	leaq	4(%r15),%r15
784238405Sjkim	adcq	$0,%rdx
785238405Sjkim	movq	%rdx,%r13
786238405Sjkim	jmp	.Linner4x
787238405Sjkim.align	16
788238405Sjkim.Linner4x:
789238405Sjkim	mulq	%rbx
790238405Sjkim	addq	%rax,%r10
791238405Sjkim	movq	-16(%rcx,%r15,8),%rax
792238405Sjkim	adcq	$0,%rdx
793238405Sjkim	addq	-16(%rsp,%r15,8),%r10
794238405Sjkim	adcq	$0,%rdx
795238405Sjkim	movq	%rdx,%r11
796238405Sjkim
797238405Sjkim	mulq	%rbp
798238405Sjkim	addq	%rax,%r13
799238405Sjkim	movq	-8(%rsi,%r15,8),%rax
800238405Sjkim	adcq	$0,%rdx
801238405Sjkim	addq	%r10,%r13
802238405Sjkim	adcq	$0,%rdx
803238405Sjkim	movq	%rdi,-32(%rsp,%r15,8)
804238405Sjkim	movq	%rdx,%rdi
805238405Sjkim
806238405Sjkim	mulq	%rbx
807238405Sjkim	addq	%rax,%r11
808238405Sjkim	movq	-8(%rcx,%r15,8),%rax
809238405Sjkim	adcq	$0,%rdx
810238405Sjkim	addq	-8(%rsp,%r15,8),%r11
811238405Sjkim	adcq	$0,%rdx
812238405Sjkim	movq	%rdx,%r10
813238405Sjkim
814238405Sjkim	mulq	%rbp
815238405Sjkim	addq	%rax,%rdi
816238405Sjkim	movq	(%rsi,%r15,8),%rax
817238405Sjkim	adcq	$0,%rdx
818238405Sjkim	addq	%r11,%rdi
819238405Sjkim	adcq	$0,%rdx
820238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
821238405Sjkim	movq	%rdx,%r13
822238405Sjkim
823238405Sjkim	mulq	%rbx
824238405Sjkim	addq	%rax,%r10
825238405Sjkim	movq	(%rcx,%r15,8),%rax
826238405Sjkim	adcq	$0,%rdx
827238405Sjkim	addq	(%rsp,%r15,8),%r10
828238405Sjkim	adcq	$0,%rdx
829238405Sjkim	movq	%rdx,%r11
830238405Sjkim
831238405Sjkim	mulq	%rbp
832238405Sjkim	addq	%rax,%r13
833238405Sjkim	movq	8(%rsi,%r15,8),%rax
834238405Sjkim	adcq	$0,%rdx
835238405Sjkim	addq	%r10,%r13
836238405Sjkim	adcq	$0,%rdx
837238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
838238405Sjkim	movq	%rdx,%rdi
839238405Sjkim
840238405Sjkim	mulq	%rbx
841238405Sjkim	addq	%rax,%r11
842238405Sjkim	movq	8(%rcx,%r15,8),%rax
843238405Sjkim	adcq	$0,%rdx
844238405Sjkim	addq	8(%rsp,%r15,8),%r11
845238405Sjkim	adcq	$0,%rdx
846238405Sjkim	leaq	4(%r15),%r15
847238405Sjkim	movq	%rdx,%r10
848238405Sjkim
849238405Sjkim	mulq	%rbp
850238405Sjkim	addq	%rax,%rdi
851238405Sjkim	movq	-16(%rsi,%r15,8),%rax
852238405Sjkim	adcq	$0,%rdx
853238405Sjkim	addq	%r11,%rdi
854238405Sjkim	adcq	$0,%rdx
855238405Sjkim	movq	%r13,-40(%rsp,%r15,8)
856238405Sjkim	movq	%rdx,%r13
857238405Sjkim	cmpq	%r9,%r15
858238405Sjkim	jl	.Linner4x
859238405Sjkim
860238405Sjkim	mulq	%rbx
861238405Sjkim	addq	%rax,%r10
862238405Sjkim	movq	-16(%rcx,%r15,8),%rax
863238405Sjkim	adcq	$0,%rdx
864238405Sjkim	addq	-16(%rsp,%r15,8),%r10
865238405Sjkim	adcq	$0,%rdx
866238405Sjkim	movq	%rdx,%r11
867238405Sjkim
868238405Sjkim	mulq	%rbp
869238405Sjkim	addq	%rax,%r13
870238405Sjkim	movq	-8(%rsi,%r15,8),%rax
871238405Sjkim	adcq	$0,%rdx
872238405Sjkim	addq	%r10,%r13
873238405Sjkim	adcq	$0,%rdx
874238405Sjkim	movq	%rdi,-32(%rsp,%r15,8)
875238405Sjkim	movq	%rdx,%rdi
876238405Sjkim
877238405Sjkim	mulq	%rbx
878238405Sjkim	addq	%rax,%r11
879238405Sjkim	movq	-8(%rcx,%r15,8),%rax
880238405Sjkim	adcq	$0,%rdx
881238405Sjkim	addq	-8(%rsp,%r15,8),%r11
882238405Sjkim	adcq	$0,%rdx
883238405Sjkim	leaq	1(%r14),%r14
884238405Sjkim	movq	%rdx,%r10
885238405Sjkim
886238405Sjkim	mulq	%rbp
887238405Sjkim	addq	%rax,%rdi
888238405Sjkim	movq	(%rsi),%rax
889238405Sjkim	adcq	$0,%rdx
890238405Sjkim	addq	%r11,%rdi
891238405Sjkim	adcq	$0,%rdx
892238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
893238405Sjkim	movq	%rdx,%r13
894238405Sjkim
895238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
896238405Sjkim
897238405Sjkim	xorq	%rdi,%rdi
898238405Sjkim	addq	%r10,%r13
899238405Sjkim	adcq	$0,%rdi
900238405Sjkim	addq	(%rsp,%r9,8),%r13
901238405Sjkim	adcq	$0,%rdi
902238405Sjkim	movq	%r13,-8(%rsp,%r15,8)
903238405Sjkim	movq	%rdi,(%rsp,%r15,8)
904238405Sjkim
905238405Sjkim	cmpq	%r9,%r14
906238405Sjkim	jl	.Louter4x
907238405Sjkim	movq	16(%rsp,%r9,8),%rdi
908238405Sjkim	movq	0(%rsp),%rax
909238405Sjkim	pxor	%xmm0,%xmm0
910238405Sjkim	movq	8(%rsp),%rdx
911238405Sjkim	shrq	$2,%r9
912238405Sjkim	leaq	(%rsp),%rsi
913238405Sjkim	xorq	%r14,%r14
914238405Sjkim
915238405Sjkim	subq	0(%rcx),%rax
916238405Sjkim	movq	16(%rsi),%rbx
917238405Sjkim	movq	24(%rsi),%rbp
918238405Sjkim	sbbq	8(%rcx),%rdx
919238405Sjkim	leaq	-1(%r9),%r15
920238405Sjkim	jmp	.Lsub4x
921238405Sjkim.align	16
922238405Sjkim.Lsub4x:
923238405Sjkim	movq	%rax,0(%rdi,%r14,8)
924238405Sjkim	movq	%rdx,8(%rdi,%r14,8)
925238405Sjkim	sbbq	16(%rcx,%r14,8),%rbx
926238405Sjkim	movq	32(%rsi,%r14,8),%rax
927238405Sjkim	movq	40(%rsi,%r14,8),%rdx
928238405Sjkim	sbbq	24(%rcx,%r14,8),%rbp
929238405Sjkim	movq	%rbx,16(%rdi,%r14,8)
930238405Sjkim	movq	%rbp,24(%rdi,%r14,8)
931238405Sjkim	sbbq	32(%rcx,%r14,8),%rax
932238405Sjkim	movq	48(%rsi,%r14,8),%rbx
933238405Sjkim	movq	56(%rsi,%r14,8),%rbp
934238405Sjkim	sbbq	40(%rcx,%r14,8),%rdx
935238405Sjkim	leaq	4(%r14),%r14
936238405Sjkim	decq	%r15
937238405Sjkim	jnz	.Lsub4x
938238405Sjkim
939238405Sjkim	movq	%rax,0(%rdi,%r14,8)
940238405Sjkim	movq	32(%rsi,%r14,8),%rax
941238405Sjkim	sbbq	16(%rcx,%r14,8),%rbx
942238405Sjkim	movq	%rdx,8(%rdi,%r14,8)
943238405Sjkim	sbbq	24(%rcx,%r14,8),%rbp
944238405Sjkim	movq	%rbx,16(%rdi,%r14,8)
945238405Sjkim
946238405Sjkim	sbbq	$0,%rax
947238405Sjkim	movq	%rbp,24(%rdi,%r14,8)
948238405Sjkim	xorq	%r14,%r14
949238405Sjkim	andq	%rax,%rsi
950238405Sjkim	notq	%rax
951238405Sjkim	movq	%rdi,%rcx
952238405Sjkim	andq	%rax,%rcx
953238405Sjkim	leaq	-1(%r9),%r15
954238405Sjkim	orq	%rcx,%rsi
955238405Sjkim
956238405Sjkim	movdqu	(%rsi),%xmm1
957238405Sjkim	movdqa	%xmm0,(%rsp)
958238405Sjkim	movdqu	%xmm1,(%rdi)
959238405Sjkim	jmp	.Lcopy4x
960238405Sjkim.align	16
961238405Sjkim.Lcopy4x:
962238405Sjkim	movdqu	16(%rsi,%r14,1),%xmm2
963238405Sjkim	movdqu	32(%rsi,%r14,1),%xmm1
964238405Sjkim	movdqa	%xmm0,16(%rsp,%r14,1)
965238405Sjkim	movdqu	%xmm2,16(%rdi,%r14,1)
966238405Sjkim	movdqa	%xmm0,32(%rsp,%r14,1)
967238405Sjkim	movdqu	%xmm1,32(%rdi,%r14,1)
968238405Sjkim	leaq	32(%r14),%r14
969238405Sjkim	decq	%r15
970238405Sjkim	jnz	.Lcopy4x
971238405Sjkim
972238405Sjkim	shlq	$2,%r9
973238405Sjkim	movdqu	16(%rsi,%r14,1),%xmm2
974238405Sjkim	movdqa	%xmm0,16(%rsp,%r14,1)
975238405Sjkim	movdqu	%xmm2,16(%rdi,%r14,1)
976238405Sjkim	movq	8(%rsp,%r9,8),%rsi
977238405Sjkim	movq	$1,%rax
978296317Sdelphij
979238405Sjkim	movq	(%rsi),%r15
980238405Sjkim	movq	8(%rsi),%r14
981238405Sjkim	movq	16(%rsi),%r13
982238405Sjkim	movq	24(%rsi),%r12
983238405Sjkim	movq	32(%rsi),%rbp
984238405Sjkim	movq	40(%rsi),%rbx
985238405Sjkim	leaq	48(%rsi),%rsp
986238405Sjkim.Lmul4x_epilogue:
987238405Sjkim	.byte	0xf3,0xc3
988238405Sjkim.size	bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5
989238405Sjkim.globl	bn_scatter5
990238405Sjkim.type	bn_scatter5,@function
991238405Sjkim.align	16
992238405Sjkimbn_scatter5:
993238405Sjkim	cmpq	$0,%rsi
994238405Sjkim	jz	.Lscatter_epilogue
995238405Sjkim	leaq	(%rdx,%rcx,8),%rdx
996238405Sjkim.Lscatter:
997238405Sjkim	movq	(%rdi),%rax
998238405Sjkim	leaq	8(%rdi),%rdi
999238405Sjkim	movq	%rax,(%rdx)
1000238405Sjkim	leaq	256(%rdx),%rdx
1001238405Sjkim	subq	$1,%rsi
1002238405Sjkim	jnz	.Lscatter
1003238405Sjkim.Lscatter_epilogue:
1004238405Sjkim	.byte	0xf3,0xc3
1005238405Sjkim.size	bn_scatter5,.-bn_scatter5
1006238405Sjkim
1007238405Sjkim.globl	bn_gather5
1008238405Sjkim.type	bn_gather5,@function
1009238405Sjkim.align	16
1010238405Sjkimbn_gather5:
1011296317Sdelphij.LSEH_begin_bn_gather5:
1012296317Sdelphij
1013296317Sdelphij.byte	0x4c,0x8d,0x14,0x24
1014296317Sdelphij.byte	0x48,0x81,0xec,0x08,0x01,0x00,0x00
1015296317Sdelphij	leaq	.Linc(%rip),%rax
1016296317Sdelphij	andq	$-16,%rsp
1017296317Sdelphij
1018296317Sdelphij	movd	%ecx,%xmm5
1019296317Sdelphij	movdqa	0(%rax),%xmm0
1020296317Sdelphij	movdqa	16(%rax),%xmm1
1021296317Sdelphij	leaq	128(%rdx),%r11
1022296317Sdelphij	leaq	128(%rsp),%rax
1023296317Sdelphij
1024296317Sdelphij	pshufd	$0,%xmm5,%xmm5
1025296317Sdelphij	movdqa	%xmm1,%xmm4
1026296317Sdelphij	movdqa	%xmm1,%xmm2
1027296317Sdelphij	paddd	%xmm0,%xmm1
1028296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1029296317Sdelphij	movdqa	%xmm4,%xmm3
1030296317Sdelphij
1031296317Sdelphij	paddd	%xmm1,%xmm2
1032296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1033296317Sdelphij	movdqa	%xmm0,-128(%rax)
1034296317Sdelphij	movdqa	%xmm4,%xmm0
1035296317Sdelphij
1036296317Sdelphij	paddd	%xmm2,%xmm3
1037296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1038296317Sdelphij	movdqa	%xmm1,-112(%rax)
1039296317Sdelphij	movdqa	%xmm4,%xmm1
1040296317Sdelphij
1041296317Sdelphij	paddd	%xmm3,%xmm0
1042296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1043296317Sdelphij	movdqa	%xmm2,-96(%rax)
1044296317Sdelphij	movdqa	%xmm4,%xmm2
1045296317Sdelphij	paddd	%xmm0,%xmm1
1046296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1047296317Sdelphij	movdqa	%xmm3,-80(%rax)
1048296317Sdelphij	movdqa	%xmm4,%xmm3
1049296317Sdelphij
1050296317Sdelphij	paddd	%xmm1,%xmm2
1051296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1052296317Sdelphij	movdqa	%xmm0,-64(%rax)
1053296317Sdelphij	movdqa	%xmm4,%xmm0
1054296317Sdelphij
1055296317Sdelphij	paddd	%xmm2,%xmm3
1056296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1057296317Sdelphij	movdqa	%xmm1,-48(%rax)
1058296317Sdelphij	movdqa	%xmm4,%xmm1
1059296317Sdelphij
1060296317Sdelphij	paddd	%xmm3,%xmm0
1061296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1062296317Sdelphij	movdqa	%xmm2,-32(%rax)
1063296317Sdelphij	movdqa	%xmm4,%xmm2
1064296317Sdelphij	paddd	%xmm0,%xmm1
1065296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1066296317Sdelphij	movdqa	%xmm3,-16(%rax)
1067296317Sdelphij	movdqa	%xmm4,%xmm3
1068296317Sdelphij
1069296317Sdelphij	paddd	%xmm1,%xmm2
1070296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1071296317Sdelphij	movdqa	%xmm0,0(%rax)
1072296317Sdelphij	movdqa	%xmm4,%xmm0
1073296317Sdelphij
1074296317Sdelphij	paddd	%xmm2,%xmm3
1075296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1076296317Sdelphij	movdqa	%xmm1,16(%rax)
1077296317Sdelphij	movdqa	%xmm4,%xmm1
1078296317Sdelphij
1079296317Sdelphij	paddd	%xmm3,%xmm0
1080296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1081296317Sdelphij	movdqa	%xmm2,32(%rax)
1082296317Sdelphij	movdqa	%xmm4,%xmm2
1083296317Sdelphij	paddd	%xmm0,%xmm1
1084296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1085296317Sdelphij	movdqa	%xmm3,48(%rax)
1086296317Sdelphij	movdqa	%xmm4,%xmm3
1087296317Sdelphij
1088296317Sdelphij	paddd	%xmm1,%xmm2
1089296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1090296317Sdelphij	movdqa	%xmm0,64(%rax)
1091296317Sdelphij	movdqa	%xmm4,%xmm0
1092296317Sdelphij
1093296317Sdelphij	paddd	%xmm2,%xmm3
1094296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1095296317Sdelphij	movdqa	%xmm1,80(%rax)
1096296317Sdelphij	movdqa	%xmm4,%xmm1
1097296317Sdelphij
1098296317Sdelphij	paddd	%xmm3,%xmm0
1099296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1100296317Sdelphij	movdqa	%xmm2,96(%rax)
1101296317Sdelphij	movdqa	%xmm4,%xmm2
1102296317Sdelphij	movdqa	%xmm3,112(%rax)
1103238405Sjkim	jmp	.Lgather
1104296317Sdelphij
1105296317Sdelphij.align	32
1106238405Sjkim.Lgather:
1107296317Sdelphij	pxor	%xmm4,%xmm4
1108296317Sdelphij	pxor	%xmm5,%xmm5
1109296317Sdelphij	movdqa	-128(%r11),%xmm0
1110296317Sdelphij	movdqa	-112(%r11),%xmm1
1111296317Sdelphij	movdqa	-96(%r11),%xmm2
1112296317Sdelphij	pand	-128(%rax),%xmm0
1113296317Sdelphij	movdqa	-80(%r11),%xmm3
1114296317Sdelphij	pand	-112(%rax),%xmm1
1115296317Sdelphij	por	%xmm0,%xmm4
1116296317Sdelphij	pand	-96(%rax),%xmm2
1117296317Sdelphij	por	%xmm1,%xmm5
1118296317Sdelphij	pand	-80(%rax),%xmm3
1119296317Sdelphij	por	%xmm2,%xmm4
1120296317Sdelphij	por	%xmm3,%xmm5
1121296317Sdelphij	movdqa	-64(%r11),%xmm0
1122296317Sdelphij	movdqa	-48(%r11),%xmm1
1123296317Sdelphij	movdqa	-32(%r11),%xmm2
1124296317Sdelphij	pand	-64(%rax),%xmm0
1125296317Sdelphij	movdqa	-16(%r11),%xmm3
1126296317Sdelphij	pand	-48(%rax),%xmm1
1127296317Sdelphij	por	%xmm0,%xmm4
1128296317Sdelphij	pand	-32(%rax),%xmm2
1129296317Sdelphij	por	%xmm1,%xmm5
1130296317Sdelphij	pand	-16(%rax),%xmm3
1131296317Sdelphij	por	%xmm2,%xmm4
1132296317Sdelphij	por	%xmm3,%xmm5
1133296317Sdelphij	movdqa	0(%r11),%xmm0
1134296317Sdelphij	movdqa	16(%r11),%xmm1
1135296317Sdelphij	movdqa	32(%r11),%xmm2
1136296317Sdelphij	pand	0(%rax),%xmm0
1137296317Sdelphij	movdqa	48(%r11),%xmm3
1138296317Sdelphij	pand	16(%rax),%xmm1
1139296317Sdelphij	por	%xmm0,%xmm4
1140296317Sdelphij	pand	32(%rax),%xmm2
1141296317Sdelphij	por	%xmm1,%xmm5
1142296317Sdelphij	pand	48(%rax),%xmm3
1143296317Sdelphij	por	%xmm2,%xmm4
1144296317Sdelphij	por	%xmm3,%xmm5
1145296317Sdelphij	movdqa	64(%r11),%xmm0
1146296317Sdelphij	movdqa	80(%r11),%xmm1
1147296317Sdelphij	movdqa	96(%r11),%xmm2
1148296317Sdelphij	pand	64(%rax),%xmm0
1149296317Sdelphij	movdqa	112(%r11),%xmm3
1150296317Sdelphij	pand	80(%rax),%xmm1
1151296317Sdelphij	por	%xmm0,%xmm4
1152296317Sdelphij	pand	96(%rax),%xmm2
1153296317Sdelphij	por	%xmm1,%xmm5
1154296317Sdelphij	pand	112(%rax),%xmm3
1155296317Sdelphij	por	%xmm2,%xmm4
1156296317Sdelphij	por	%xmm3,%xmm5
1157296317Sdelphij	por	%xmm5,%xmm4
1158296317Sdelphij	leaq	256(%r11),%r11
1159296317Sdelphij	pshufd	$78,%xmm4,%xmm0
1160296317Sdelphij	por	%xmm4,%xmm0
1161238405Sjkim	movq	%xmm0,(%rdi)
1162238405Sjkim	leaq	8(%rdi),%rdi
1163238405Sjkim	subq	$1,%rsi
1164238405Sjkim	jnz	.Lgather
1165296317Sdelphij
1166296317Sdelphij	leaq	(%r10),%rsp
1167238405Sjkim	.byte	0xf3,0xc3
1168238405Sjkim.LSEH_end_bn_gather5:
1169238405Sjkim.size	bn_gather5,.-bn_gather5
1170238405Sjkim.align	64
1171296317Sdelphij.Linc:
1172296317Sdelphij.long	0,0, 1,1
1173296317Sdelphij.long	2,2, 2,2
1174238405Sjkim.byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115,99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1175