1299966Sjkim# $FreeBSD$
2299966Sjkim# Do not modify. This file is auto-generated from x86_64-mont5.pl.
3238405Sjkim.text
4238405Sjkim
5238405Sjkim.globl	bn_mul_mont_gather5
6238405Sjkim.type	bn_mul_mont_gather5,@function
7238405Sjkim.align	64
8238405Sjkimbn_mul_mont_gather5:
9238405Sjkim	testl	$3,%r9d
10238405Sjkim	jnz	.Lmul_enter
11238405Sjkim	cmpl	$8,%r9d
12238405Sjkim	jb	.Lmul_enter
13238405Sjkim	jmp	.Lmul4x_enter
14238405Sjkim
15238405Sjkim.align	16
16238405Sjkim.Lmul_enter:
17238405Sjkim	movl	%r9d,%r9d
18296317Sdelphij	movd	8(%rsp),%xmm5
19296317Sdelphij	leaq	.Linc(%rip),%r10
20238405Sjkim	pushq	%rbx
21238405Sjkim	pushq	%rbp
22238405Sjkim	pushq	%r12
23238405Sjkim	pushq	%r13
24238405Sjkim	pushq	%r14
25238405Sjkim	pushq	%r15
26296317Sdelphij
27296317Sdelphij.Lmul_alloca:
28238405Sjkim	movq	%rsp,%rax
29238405Sjkim	leaq	2(%r9),%r11
30238405Sjkim	negq	%r11
31296317Sdelphij	leaq	-264(%rsp,%r11,8),%rsp
32238405Sjkim	andq	$-1024,%rsp
33238405Sjkim
34238405Sjkim	movq	%rax,8(%rsp,%r9,8)
35238405Sjkim.Lmul_body:
36298999Sjkim
37298999Sjkim
38298999Sjkim
39298999Sjkim
40298999Sjkim
41298999Sjkim
42298999Sjkim	subq	%rsp,%rax
43298999Sjkim	andq	$-4096,%rax
44298999Sjkim.Lmul_page_walk:
45298999Sjkim	movq	(%rsp,%rax,1),%r11
46298999Sjkim	subq	$4096,%rax
47298999Sjkim.byte	0x2e
48298999Sjkim	jnc	.Lmul_page_walk
49298999Sjkim
50296317Sdelphij	leaq	128(%rdx),%r12
51296317Sdelphij	movdqa	0(%r10),%xmm0
52296317Sdelphij	movdqa	16(%r10),%xmm1
53296317Sdelphij	leaq	24-112(%rsp,%r9,8),%r10
54296317Sdelphij	andq	$-16,%r10
55238405Sjkim
56296317Sdelphij	pshufd	$0,%xmm5,%xmm5
57296317Sdelphij	movdqa	%xmm1,%xmm4
58296317Sdelphij	movdqa	%xmm1,%xmm2
59296317Sdelphij	paddd	%xmm0,%xmm1
60296317Sdelphij	pcmpeqd	%xmm5,%xmm0
61296317Sdelphij.byte	0x67
62296317Sdelphij	movdqa	%xmm4,%xmm3
63296317Sdelphij	paddd	%xmm1,%xmm2
64296317Sdelphij	pcmpeqd	%xmm5,%xmm1
65296317Sdelphij	movdqa	%xmm0,112(%r10)
66296317Sdelphij	movdqa	%xmm4,%xmm0
67296317Sdelphij
68296317Sdelphij	paddd	%xmm2,%xmm3
69296317Sdelphij	pcmpeqd	%xmm5,%xmm2
70296317Sdelphij	movdqa	%xmm1,128(%r10)
71296317Sdelphij	movdqa	%xmm4,%xmm1
72296317Sdelphij
73296317Sdelphij	paddd	%xmm3,%xmm0
74296317Sdelphij	pcmpeqd	%xmm5,%xmm3
75296317Sdelphij	movdqa	%xmm2,144(%r10)
76296317Sdelphij	movdqa	%xmm4,%xmm2
77296317Sdelphij
78296317Sdelphij	paddd	%xmm0,%xmm1
79296317Sdelphij	pcmpeqd	%xmm5,%xmm0
80296317Sdelphij	movdqa	%xmm3,160(%r10)
81296317Sdelphij	movdqa	%xmm4,%xmm3
82296317Sdelphij	paddd	%xmm1,%xmm2
83296317Sdelphij	pcmpeqd	%xmm5,%xmm1
84296317Sdelphij	movdqa	%xmm0,176(%r10)
85296317Sdelphij	movdqa	%xmm4,%xmm0
86296317Sdelphij
87296317Sdelphij	paddd	%xmm2,%xmm3
88296317Sdelphij	pcmpeqd	%xmm5,%xmm2
89296317Sdelphij	movdqa	%xmm1,192(%r10)
90296317Sdelphij	movdqa	%xmm4,%xmm1
91296317Sdelphij
92296317Sdelphij	paddd	%xmm3,%xmm0
93296317Sdelphij	pcmpeqd	%xmm5,%xmm3
94296317Sdelphij	movdqa	%xmm2,208(%r10)
95296317Sdelphij	movdqa	%xmm4,%xmm2
96296317Sdelphij
97296317Sdelphij	paddd	%xmm0,%xmm1
98296317Sdelphij	pcmpeqd	%xmm5,%xmm0
99296317Sdelphij	movdqa	%xmm3,224(%r10)
100296317Sdelphij	movdqa	%xmm4,%xmm3
101296317Sdelphij	paddd	%xmm1,%xmm2
102296317Sdelphij	pcmpeqd	%xmm5,%xmm1
103296317Sdelphij	movdqa	%xmm0,240(%r10)
104296317Sdelphij	movdqa	%xmm4,%xmm0
105296317Sdelphij
106296317Sdelphij	paddd	%xmm2,%xmm3
107296317Sdelphij	pcmpeqd	%xmm5,%xmm2
108296317Sdelphij	movdqa	%xmm1,256(%r10)
109296317Sdelphij	movdqa	%xmm4,%xmm1
110296317Sdelphij
111296317Sdelphij	paddd	%xmm3,%xmm0
112296317Sdelphij	pcmpeqd	%xmm5,%xmm3
113296317Sdelphij	movdqa	%xmm2,272(%r10)
114296317Sdelphij	movdqa	%xmm4,%xmm2
115296317Sdelphij
116296317Sdelphij	paddd	%xmm0,%xmm1
117296317Sdelphij	pcmpeqd	%xmm5,%xmm0
118296317Sdelphij	movdqa	%xmm3,288(%r10)
119296317Sdelphij	movdqa	%xmm4,%xmm3
120296317Sdelphij	paddd	%xmm1,%xmm2
121296317Sdelphij	pcmpeqd	%xmm5,%xmm1
122296317Sdelphij	movdqa	%xmm0,304(%r10)
123296317Sdelphij
124296317Sdelphij	paddd	%xmm2,%xmm3
125296317Sdelphij.byte	0x67
126296317Sdelphij	pcmpeqd	%xmm5,%xmm2
127296317Sdelphij	movdqa	%xmm1,320(%r10)
128296317Sdelphij
129296317Sdelphij	pcmpeqd	%xmm5,%xmm3
130296317Sdelphij	movdqa	%xmm2,336(%r10)
131296317Sdelphij	pand	64(%r12),%xmm0
132296317Sdelphij
133296317Sdelphij	pand	80(%r12),%xmm1
134296317Sdelphij	pand	96(%r12),%xmm2
135296317Sdelphij	movdqa	%xmm3,352(%r10)
136296317Sdelphij	pand	112(%r12),%xmm3
137296317Sdelphij	por	%xmm2,%xmm0
138296317Sdelphij	por	%xmm3,%xmm1
139296317Sdelphij	movdqa	-128(%r12),%xmm4
140296317Sdelphij	movdqa	-112(%r12),%xmm5
141296317Sdelphij	movdqa	-96(%r12),%xmm2
142296317Sdelphij	pand	112(%r10),%xmm4
143296317Sdelphij	movdqa	-80(%r12),%xmm3
144296317Sdelphij	pand	128(%r10),%xmm5
145296317Sdelphij	por	%xmm4,%xmm0
146296317Sdelphij	pand	144(%r10),%xmm2
147296317Sdelphij	por	%xmm5,%xmm1
148296317Sdelphij	pand	160(%r10),%xmm3
149296317Sdelphij	por	%xmm2,%xmm0
150296317Sdelphij	por	%xmm3,%xmm1
151296317Sdelphij	movdqa	-64(%r12),%xmm4
152296317Sdelphij	movdqa	-48(%r12),%xmm5
153296317Sdelphij	movdqa	-32(%r12),%xmm2
154296317Sdelphij	pand	176(%r10),%xmm4
155296317Sdelphij	movdqa	-16(%r12),%xmm3
156296317Sdelphij	pand	192(%r10),%xmm5
157296317Sdelphij	por	%xmm4,%xmm0
158296317Sdelphij	pand	208(%r10),%xmm2
159296317Sdelphij	por	%xmm5,%xmm1
160296317Sdelphij	pand	224(%r10),%xmm3
161296317Sdelphij	por	%xmm2,%xmm0
162296317Sdelphij	por	%xmm3,%xmm1
163296317Sdelphij	movdqa	0(%r12),%xmm4
164296317Sdelphij	movdqa	16(%r12),%xmm5
165296317Sdelphij	movdqa	32(%r12),%xmm2
166296317Sdelphij	pand	240(%r10),%xmm4
167296317Sdelphij	movdqa	48(%r12),%xmm3
168296317Sdelphij	pand	256(%r10),%xmm5
169296317Sdelphij	por	%xmm4,%xmm0
170296317Sdelphij	pand	272(%r10),%xmm2
171296317Sdelphij	por	%xmm5,%xmm1
172296317Sdelphij	pand	288(%r10),%xmm3
173296317Sdelphij	por	%xmm2,%xmm0
174296317Sdelphij	por	%xmm3,%xmm1
175238405Sjkim	por	%xmm1,%xmm0
176296317Sdelphij	pshufd	$78,%xmm0,%xmm1
177296317Sdelphij	por	%xmm1,%xmm0
178238405Sjkim	leaq	256(%r12),%r12
179238405Sjkim.byte	102,72,15,126,195
180238405Sjkim
181238405Sjkim	movq	(%r8),%r8
182238405Sjkim	movq	(%rsi),%rax
183238405Sjkim
184238405Sjkim	xorq	%r14,%r14
185238405Sjkim	xorq	%r15,%r15
186238405Sjkim
187238405Sjkim	movq	%r8,%rbp
188238405Sjkim	mulq	%rbx
189238405Sjkim	movq	%rax,%r10
190238405Sjkim	movq	(%rcx),%rax
191238405Sjkim
192238405Sjkim	imulq	%r10,%rbp
193238405Sjkim	movq	%rdx,%r11
194238405Sjkim
195238405Sjkim	mulq	%rbp
196238405Sjkim	addq	%rax,%r10
197238405Sjkim	movq	8(%rsi),%rax
198238405Sjkim	adcq	$0,%rdx
199238405Sjkim	movq	%rdx,%r13
200238405Sjkim
201238405Sjkim	leaq	1(%r15),%r15
202238405Sjkim	jmp	.L1st_enter
203238405Sjkim
204238405Sjkim.align	16
205238405Sjkim.L1st:
206238405Sjkim	addq	%rax,%r13
207238405Sjkim	movq	(%rsi,%r15,8),%rax
208238405Sjkim	adcq	$0,%rdx
209238405Sjkim	addq	%r11,%r13
210238405Sjkim	movq	%r10,%r11
211238405Sjkim	adcq	$0,%rdx
212238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
213238405Sjkim	movq	%rdx,%r13
214238405Sjkim
215238405Sjkim.L1st_enter:
216238405Sjkim	mulq	%rbx
217238405Sjkim	addq	%rax,%r11
218238405Sjkim	movq	(%rcx,%r15,8),%rax
219238405Sjkim	adcq	$0,%rdx
220238405Sjkim	leaq	1(%r15),%r15
221238405Sjkim	movq	%rdx,%r10
222238405Sjkim
223238405Sjkim	mulq	%rbp
224238405Sjkim	cmpq	%r9,%r15
225238405Sjkim	jne	.L1st
226238405Sjkim
227238405Sjkim	addq	%rax,%r13
228238405Sjkim	movq	(%rsi),%rax
229238405Sjkim	adcq	$0,%rdx
230238405Sjkim	addq	%r11,%r13
231238405Sjkim	adcq	$0,%rdx
232238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
233238405Sjkim	movq	%rdx,%r13
234238405Sjkim	movq	%r10,%r11
235238405Sjkim
236238405Sjkim	xorq	%rdx,%rdx
237238405Sjkim	addq	%r11,%r13
238238405Sjkim	adcq	$0,%rdx
239238405Sjkim	movq	%r13,-8(%rsp,%r9,8)
240238405Sjkim	movq	%rdx,(%rsp,%r9,8)
241238405Sjkim
242238405Sjkim	leaq	1(%r14),%r14
243238405Sjkim	jmp	.Louter
244238405Sjkim.align	16
245238405Sjkim.Louter:
246296317Sdelphij	leaq	24+128(%rsp,%r9,8),%rdx
247296317Sdelphij	andq	$-16,%rdx
248296317Sdelphij	pxor	%xmm4,%xmm4
249296317Sdelphij	pxor	%xmm5,%xmm5
250296317Sdelphij	movdqa	-128(%r12),%xmm0
251296317Sdelphij	movdqa	-112(%r12),%xmm1
252296317Sdelphij	movdqa	-96(%r12),%xmm2
253296317Sdelphij	movdqa	-80(%r12),%xmm3
254296317Sdelphij	pand	-128(%rdx),%xmm0
255296317Sdelphij	pand	-112(%rdx),%xmm1
256296317Sdelphij	por	%xmm0,%xmm4
257296317Sdelphij	pand	-96(%rdx),%xmm2
258296317Sdelphij	por	%xmm1,%xmm5
259296317Sdelphij	pand	-80(%rdx),%xmm3
260296317Sdelphij	por	%xmm2,%xmm4
261296317Sdelphij	por	%xmm3,%xmm5
262296317Sdelphij	movdqa	-64(%r12),%xmm0
263296317Sdelphij	movdqa	-48(%r12),%xmm1
264296317Sdelphij	movdqa	-32(%r12),%xmm2
265296317Sdelphij	movdqa	-16(%r12),%xmm3
266296317Sdelphij	pand	-64(%rdx),%xmm0
267296317Sdelphij	pand	-48(%rdx),%xmm1
268296317Sdelphij	por	%xmm0,%xmm4
269296317Sdelphij	pand	-32(%rdx),%xmm2
270296317Sdelphij	por	%xmm1,%xmm5
271296317Sdelphij	pand	-16(%rdx),%xmm3
272296317Sdelphij	por	%xmm2,%xmm4
273296317Sdelphij	por	%xmm3,%xmm5
274296317Sdelphij	movdqa	0(%r12),%xmm0
275296317Sdelphij	movdqa	16(%r12),%xmm1
276296317Sdelphij	movdqa	32(%r12),%xmm2
277296317Sdelphij	movdqa	48(%r12),%xmm3
278296317Sdelphij	pand	0(%rdx),%xmm0
279296317Sdelphij	pand	16(%rdx),%xmm1
280296317Sdelphij	por	%xmm0,%xmm4
281296317Sdelphij	pand	32(%rdx),%xmm2
282296317Sdelphij	por	%xmm1,%xmm5
283296317Sdelphij	pand	48(%rdx),%xmm3
284296317Sdelphij	por	%xmm2,%xmm4
285296317Sdelphij	por	%xmm3,%xmm5
286296317Sdelphij	movdqa	64(%r12),%xmm0
287296317Sdelphij	movdqa	80(%r12),%xmm1
288296317Sdelphij	movdqa	96(%r12),%xmm2
289296317Sdelphij	movdqa	112(%r12),%xmm3
290296317Sdelphij	pand	64(%rdx),%xmm0
291296317Sdelphij	pand	80(%rdx),%xmm1
292296317Sdelphij	por	%xmm0,%xmm4
293296317Sdelphij	pand	96(%rdx),%xmm2
294296317Sdelphij	por	%xmm1,%xmm5
295296317Sdelphij	pand	112(%rdx),%xmm3
296296317Sdelphij	por	%xmm2,%xmm4
297296317Sdelphij	por	%xmm3,%xmm5
298296317Sdelphij	por	%xmm5,%xmm4
299296317Sdelphij	pshufd	$78,%xmm4,%xmm0
300296317Sdelphij	por	%xmm4,%xmm0
301296317Sdelphij	leaq	256(%r12),%r12
302296317Sdelphij.byte	102,72,15,126,195
303296317Sdelphij
304238405Sjkim	xorq	%r15,%r15
305238405Sjkim	movq	%r8,%rbp
306238405Sjkim	movq	(%rsp),%r10
307238405Sjkim
308238405Sjkim	mulq	%rbx
309238405Sjkim	addq	%rax,%r10
310238405Sjkim	movq	(%rcx),%rax
311238405Sjkim	adcq	$0,%rdx
312238405Sjkim
313238405Sjkim	imulq	%r10,%rbp
314238405Sjkim	movq	%rdx,%r11
315238405Sjkim
316238405Sjkim	mulq	%rbp
317238405Sjkim	addq	%rax,%r10
318238405Sjkim	movq	8(%rsi),%rax
319238405Sjkim	adcq	$0,%rdx
320238405Sjkim	movq	8(%rsp),%r10
321238405Sjkim	movq	%rdx,%r13
322238405Sjkim
323238405Sjkim	leaq	1(%r15),%r15
324238405Sjkim	jmp	.Linner_enter
325238405Sjkim
326238405Sjkim.align	16
327238405Sjkim.Linner:
328238405Sjkim	addq	%rax,%r13
329238405Sjkim	movq	(%rsi,%r15,8),%rax
330238405Sjkim	adcq	$0,%rdx
331238405Sjkim	addq	%r10,%r13
332238405Sjkim	movq	(%rsp,%r15,8),%r10
333238405Sjkim	adcq	$0,%rdx
334238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
335238405Sjkim	movq	%rdx,%r13
336238405Sjkim
337238405Sjkim.Linner_enter:
338238405Sjkim	mulq	%rbx
339238405Sjkim	addq	%rax,%r11
340238405Sjkim	movq	(%rcx,%r15,8),%rax
341238405Sjkim	adcq	$0,%rdx
342238405Sjkim	addq	%r11,%r10
343238405Sjkim	movq	%rdx,%r11
344238405Sjkim	adcq	$0,%r11
345238405Sjkim	leaq	1(%r15),%r15
346238405Sjkim
347238405Sjkim	mulq	%rbp
348238405Sjkim	cmpq	%r9,%r15
349238405Sjkim	jne	.Linner
350238405Sjkim
351238405Sjkim	addq	%rax,%r13
352238405Sjkim	movq	(%rsi),%rax
353238405Sjkim	adcq	$0,%rdx
354238405Sjkim	addq	%r10,%r13
355238405Sjkim	movq	(%rsp,%r15,8),%r10
356238405Sjkim	adcq	$0,%rdx
357238405Sjkim	movq	%r13,-16(%rsp,%r15,8)
358238405Sjkim	movq	%rdx,%r13
359238405Sjkim
360238405Sjkim	xorq	%rdx,%rdx
361238405Sjkim	addq	%r11,%r13
362238405Sjkim	adcq	$0,%rdx
363238405Sjkim	addq	%r10,%r13
364238405Sjkim	adcq	$0,%rdx
365238405Sjkim	movq	%r13,-8(%rsp,%r9,8)
366238405Sjkim	movq	%rdx,(%rsp,%r9,8)
367238405Sjkim
368238405Sjkim	leaq	1(%r14),%r14
369238405Sjkim	cmpq	%r9,%r14
370238405Sjkim	jl	.Louter
371238405Sjkim
372238405Sjkim	xorq	%r14,%r14
373238405Sjkim	movq	(%rsp),%rax
374238405Sjkim	leaq	(%rsp),%rsi
375238405Sjkim	movq	%r9,%r15
376238405Sjkim	jmp	.Lsub
377238405Sjkim.align	16
378238405Sjkim.Lsub:	sbbq	(%rcx,%r14,8),%rax
379238405Sjkim	movq	%rax,(%rdi,%r14,8)
380238405Sjkim	movq	8(%rsi,%r14,8),%rax
381238405Sjkim	leaq	1(%r14),%r14
382238405Sjkim	decq	%r15
383238405Sjkim	jnz	.Lsub
384238405Sjkim
385238405Sjkim	sbbq	$0,%rax
386238405Sjkim	xorq	%r14,%r14
387238405Sjkim	andq	%rax,%rsi
388238405Sjkim	notq	%rax
389238405Sjkim	movq	%rdi,%rcx
390238405Sjkim	andq	%rax,%rcx
391238405Sjkim	movq	%r9,%r15
392238405Sjkim	orq	%rcx,%rsi
393238405Sjkim.align	16
394238405Sjkim.Lcopy:
395238405Sjkim	movq	(%rsi,%r14,8),%rax
396238405Sjkim	movq	%r14,(%rsp,%r14,8)
397238405Sjkim	movq	%rax,(%rdi,%r14,8)
398238405Sjkim	leaq	1(%r14),%r14
399238405Sjkim	subq	$1,%r15
400238405Sjkim	jnz	.Lcopy
401238405Sjkim
402238405Sjkim	movq	8(%rsp,%r9,8),%rsi
403238405Sjkim	movq	$1,%rax
404296317Sdelphij
405238405Sjkim	movq	(%rsi),%r15
406238405Sjkim	movq	8(%rsi),%r14
407238405Sjkim	movq	16(%rsi),%r13
408238405Sjkim	movq	24(%rsi),%r12
409238405Sjkim	movq	32(%rsi),%rbp
410238405Sjkim	movq	40(%rsi),%rbx
411238405Sjkim	leaq	48(%rsi),%rsp
412238405Sjkim.Lmul_epilogue:
413238405Sjkim	.byte	0xf3,0xc3
414238405Sjkim.size	bn_mul_mont_gather5,.-bn_mul_mont_gather5
415238405Sjkim.type	bn_mul4x_mont_gather5,@function
416238405Sjkim.align	16
417238405Sjkimbn_mul4x_mont_gather5:
418238405Sjkim.Lmul4x_enter:
419238405Sjkim	movl	%r9d,%r9d
420296317Sdelphij	movd	8(%rsp),%xmm5
421296317Sdelphij	leaq	.Linc(%rip),%r10
422238405Sjkim	pushq	%rbx
423238405Sjkim	pushq	%rbp
424238405Sjkim	pushq	%r12
425238405Sjkim	pushq	%r13
426238405Sjkim	pushq	%r14
427238405Sjkim	pushq	%r15
428296317Sdelphij
429296317Sdelphij.Lmul4x_alloca:
430238405Sjkim	movq	%rsp,%rax
431238405Sjkim	leaq	4(%r9),%r11
432238405Sjkim	negq	%r11
433296317Sdelphij	leaq	-256(%rsp,%r11,8),%rsp
434238405Sjkim	andq	$-1024,%rsp
435238405Sjkim
436238405Sjkim	movq	%rax,8(%rsp,%r9,8)
437238405Sjkim.Lmul4x_body:
438298999Sjkim	subq	%rsp,%rax
439298999Sjkim	andq	$-4096,%rax
440298999Sjkim.Lmul4x_page_walk:
441298999Sjkim	movq	(%rsp,%rax,1),%r11
442298999Sjkim	subq	$4096,%rax
443298999Sjkim.byte	0x2e
444298999Sjkim	jnc	.Lmul4x_page_walk
445298999Sjkim
446238405Sjkim	movq	%rdi,16(%rsp,%r9,8)
447296317Sdelphij	leaq	128(%rdx),%r12
448296317Sdelphij	movdqa	0(%r10),%xmm0
449296317Sdelphij	movdqa	16(%r10),%xmm1
450296317Sdelphij	leaq	32-112(%rsp,%r9,8),%r10
451238405Sjkim
452296317Sdelphij	pshufd	$0,%xmm5,%xmm5
453296317Sdelphij	movdqa	%xmm1,%xmm4
454296317Sdelphij.byte	0x67,0x67
455296317Sdelphij	movdqa	%xmm1,%xmm2
456296317Sdelphij	paddd	%xmm0,%xmm1
457296317Sdelphij	pcmpeqd	%xmm5,%xmm0
458296317Sdelphij.byte	0x67
459296317Sdelphij	movdqa	%xmm4,%xmm3
460296317Sdelphij	paddd	%xmm1,%xmm2
461296317Sdelphij	pcmpeqd	%xmm5,%xmm1
462296317Sdelphij	movdqa	%xmm0,112(%r10)
463296317Sdelphij	movdqa	%xmm4,%xmm0
464296317Sdelphij
465296317Sdelphij	paddd	%xmm2,%xmm3
466296317Sdelphij	pcmpeqd	%xmm5,%xmm2
467296317Sdelphij	movdqa	%xmm1,128(%r10)
468296317Sdelphij	movdqa	%xmm4,%xmm1
469296317Sdelphij
470296317Sdelphij	paddd	%xmm3,%xmm0
471296317Sdelphij	pcmpeqd	%xmm5,%xmm3
472296317Sdelphij	movdqa	%xmm2,144(%r10)
473296317Sdelphij	movdqa	%xmm4,%xmm2
474296317Sdelphij
475296317Sdelphij	paddd	%xmm0,%xmm1
476296317Sdelphij	pcmpeqd	%xmm5,%xmm0
477296317Sdelphij	movdqa	%xmm3,160(%r10)
478296317Sdelphij	movdqa	%xmm4,%xmm3
479296317Sdelphij	paddd	%xmm1,%xmm2
480296317Sdelphij	pcmpeqd	%xmm5,%xmm1
481296317Sdelphij	movdqa	%xmm0,176(%r10)
482296317Sdelphij	movdqa	%xmm4,%xmm0
483296317Sdelphij
484296317Sdelphij	paddd	%xmm2,%xmm3
485296317Sdelphij	pcmpeqd	%xmm5,%xmm2
486296317Sdelphij	movdqa	%xmm1,192(%r10)
487296317Sdelphij	movdqa	%xmm4,%xmm1
488296317Sdelphij
489296317Sdelphij	paddd	%xmm3,%xmm0
490296317Sdelphij	pcmpeqd	%xmm5,%xmm3
491296317Sdelphij	movdqa	%xmm2,208(%r10)
492296317Sdelphij	movdqa	%xmm4,%xmm2
493296317Sdelphij
494296317Sdelphij	paddd	%xmm0,%xmm1
495296317Sdelphij	pcmpeqd	%xmm5,%xmm0
496296317Sdelphij	movdqa	%xmm3,224(%r10)
497296317Sdelphij	movdqa	%xmm4,%xmm3
498296317Sdelphij	paddd	%xmm1,%xmm2
499296317Sdelphij	pcmpeqd	%xmm5,%xmm1
500296317Sdelphij	movdqa	%xmm0,240(%r10)
501296317Sdelphij	movdqa	%xmm4,%xmm0
502296317Sdelphij
503296317Sdelphij	paddd	%xmm2,%xmm3
504296317Sdelphij	pcmpeqd	%xmm5,%xmm2
505296317Sdelphij	movdqa	%xmm1,256(%r10)
506296317Sdelphij	movdqa	%xmm4,%xmm1
507296317Sdelphij
508296317Sdelphij	paddd	%xmm3,%xmm0
509296317Sdelphij	pcmpeqd	%xmm5,%xmm3
510296317Sdelphij	movdqa	%xmm2,272(%r10)
511296317Sdelphij	movdqa	%xmm4,%xmm2
512296317Sdelphij
513296317Sdelphij	paddd	%xmm0,%xmm1
514296317Sdelphij	pcmpeqd	%xmm5,%xmm0
515296317Sdelphij	movdqa	%xmm3,288(%r10)
516296317Sdelphij	movdqa	%xmm4,%xmm3
517296317Sdelphij	paddd	%xmm1,%xmm2
518296317Sdelphij	pcmpeqd	%xmm5,%xmm1
519296317Sdelphij	movdqa	%xmm0,304(%r10)
520296317Sdelphij
521296317Sdelphij	paddd	%xmm2,%xmm3
522296317Sdelphij.byte	0x67
523296317Sdelphij	pcmpeqd	%xmm5,%xmm2
524296317Sdelphij	movdqa	%xmm1,320(%r10)
525296317Sdelphij
526296317Sdelphij	pcmpeqd	%xmm5,%xmm3
527296317Sdelphij	movdqa	%xmm2,336(%r10)
528296317Sdelphij	pand	64(%r12),%xmm0
529296317Sdelphij
530296317Sdelphij	pand	80(%r12),%xmm1
531296317Sdelphij	pand	96(%r12),%xmm2
532296317Sdelphij	movdqa	%xmm3,352(%r10)
533296317Sdelphij	pand	112(%r12),%xmm3
534296317Sdelphij	por	%xmm2,%xmm0
535296317Sdelphij	por	%xmm3,%xmm1
536296317Sdelphij	movdqa	-128(%r12),%xmm4
537296317Sdelphij	movdqa	-112(%r12),%xmm5
538296317Sdelphij	movdqa	-96(%r12),%xmm2
539296317Sdelphij	pand	112(%r10),%xmm4
540296317Sdelphij	movdqa	-80(%r12),%xmm3
541296317Sdelphij	pand	128(%r10),%xmm5
542296317Sdelphij	por	%xmm4,%xmm0
543296317Sdelphij	pand	144(%r10),%xmm2
544296317Sdelphij	por	%xmm5,%xmm1
545296317Sdelphij	pand	160(%r10),%xmm3
546296317Sdelphij	por	%xmm2,%xmm0
547296317Sdelphij	por	%xmm3,%xmm1
548296317Sdelphij	movdqa	-64(%r12),%xmm4
549296317Sdelphij	movdqa	-48(%r12),%xmm5
550296317Sdelphij	movdqa	-32(%r12),%xmm2
551296317Sdelphij	pand	176(%r10),%xmm4
552296317Sdelphij	movdqa	-16(%r12),%xmm3
553296317Sdelphij	pand	192(%r10),%xmm5
554296317Sdelphij	por	%xmm4,%xmm0
555296317Sdelphij	pand	208(%r10),%xmm2
556296317Sdelphij	por	%xmm5,%xmm1
557296317Sdelphij	pand	224(%r10),%xmm3
558296317Sdelphij	por	%xmm2,%xmm0
559296317Sdelphij	por	%xmm3,%xmm1
560296317Sdelphij	movdqa	0(%r12),%xmm4
561296317Sdelphij	movdqa	16(%r12),%xmm5
562296317Sdelphij	movdqa	32(%r12),%xmm2
563296317Sdelphij	pand	240(%r10),%xmm4
564296317Sdelphij	movdqa	48(%r12),%xmm3
565296317Sdelphij	pand	256(%r10),%xmm5
566296317Sdelphij	por	%xmm4,%xmm0
567296317Sdelphij	pand	272(%r10),%xmm2
568296317Sdelphij	por	%xmm5,%xmm1
569296317Sdelphij	pand	288(%r10),%xmm3
570296317Sdelphij	por	%xmm2,%xmm0
571296317Sdelphij	por	%xmm3,%xmm1
572238405Sjkim	por	%xmm1,%xmm0
573296317Sdelphij	pshufd	$78,%xmm0,%xmm1
574296317Sdelphij	por	%xmm1,%xmm0
575238405Sjkim	leaq	256(%r12),%r12
576296317Sdelphij.byte	102,72,15,126,195
577238405Sjkim
578238405Sjkim	movq	(%r8),%r8
579238405Sjkim	movq	(%rsi),%rax
580238405Sjkim
581238405Sjkim	xorq	%r14,%r14
582238405Sjkim	xorq	%r15,%r15
583238405Sjkim
584238405Sjkim	movq	%r8,%rbp
585238405Sjkim	mulq	%rbx
586238405Sjkim	movq	%rax,%r10
587238405Sjkim	movq	(%rcx),%rax
588238405Sjkim
589238405Sjkim	imulq	%r10,%rbp
590238405Sjkim	movq	%rdx,%r11
591238405Sjkim
592238405Sjkim	mulq	%rbp
593238405Sjkim	addq	%rax,%r10
594238405Sjkim	movq	8(%rsi),%rax
595238405Sjkim	adcq	$0,%rdx
596238405Sjkim	movq	%rdx,%rdi
597238405Sjkim
598238405Sjkim	mulq	%rbx
599238405Sjkim	addq	%rax,%r11
600238405Sjkim	movq	8(%rcx),%rax
601238405Sjkim	adcq	$0,%rdx
602238405Sjkim	movq	%rdx,%r10
603238405Sjkim
604238405Sjkim	mulq	%rbp
605238405Sjkim	addq	%rax,%rdi
606238405Sjkim	movq	16(%rsi),%rax
607238405Sjkim	adcq	$0,%rdx
608238405Sjkim	addq	%r11,%rdi
609238405Sjkim	leaq	4(%r15),%r15
610238405Sjkim	adcq	$0,%rdx
611238405Sjkim	movq	%rdi,(%rsp)
612238405Sjkim	movq	%rdx,%r13
613238405Sjkim	jmp	.L1st4x
614238405Sjkim.align	16
615238405Sjkim.L1st4x:
616238405Sjkim	mulq	%rbx
617238405Sjkim	addq	%rax,%r10
618238405Sjkim	movq	-16(%rcx,%r15,8),%rax
619238405Sjkim	adcq	$0,%rdx
620238405Sjkim	movq	%rdx,%r11
621238405Sjkim
622238405Sjkim	mulq	%rbp
623238405Sjkim	addq	%rax,%r13
624238405Sjkim	movq	-8(%rsi,%r15,8),%rax
625238405Sjkim	adcq	$0,%rdx
626238405Sjkim	addq	%r10,%r13
627238405Sjkim	adcq	$0,%rdx
628238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
629238405Sjkim	movq	%rdx,%rdi
630238405Sjkim
631238405Sjkim	mulq	%rbx
632238405Sjkim	addq	%rax,%r11
633238405Sjkim	movq	-8(%rcx,%r15,8),%rax
634238405Sjkim	adcq	$0,%rdx
635238405Sjkim	movq	%rdx,%r10
636238405Sjkim
637238405Sjkim	mulq	%rbp
638238405Sjkim	addq	%rax,%rdi
639238405Sjkim	movq	(%rsi,%r15,8),%rax
640238405Sjkim	adcq	$0,%rdx
641238405Sjkim	addq	%r11,%rdi
642238405Sjkim	adcq	$0,%rdx
643238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
644238405Sjkim	movq	%rdx,%r13
645238405Sjkim
646238405Sjkim	mulq	%rbx
647238405Sjkim	addq	%rax,%r10
648238405Sjkim	movq	(%rcx,%r15,8),%rax
649238405Sjkim	adcq	$0,%rdx
650238405Sjkim	movq	%rdx,%r11
651238405Sjkim
652238405Sjkim	mulq	%rbp
653238405Sjkim	addq	%rax,%r13
654238405Sjkim	movq	8(%rsi,%r15,8),%rax
655238405Sjkim	adcq	$0,%rdx
656238405Sjkim	addq	%r10,%r13
657238405Sjkim	adcq	$0,%rdx
658238405Sjkim	movq	%r13,-8(%rsp,%r15,8)
659238405Sjkim	movq	%rdx,%rdi
660238405Sjkim
661238405Sjkim	mulq	%rbx
662238405Sjkim	addq	%rax,%r11
663238405Sjkim	movq	8(%rcx,%r15,8),%rax
664238405Sjkim	adcq	$0,%rdx
665238405Sjkim	leaq	4(%r15),%r15
666238405Sjkim	movq	%rdx,%r10
667238405Sjkim
668238405Sjkim	mulq	%rbp
669238405Sjkim	addq	%rax,%rdi
670238405Sjkim	movq	-16(%rsi,%r15,8),%rax
671238405Sjkim	adcq	$0,%rdx
672238405Sjkim	addq	%r11,%rdi
673238405Sjkim	adcq	$0,%rdx
674238405Sjkim	movq	%rdi,-32(%rsp,%r15,8)
675238405Sjkim	movq	%rdx,%r13
676238405Sjkim	cmpq	%r9,%r15
677238405Sjkim	jl	.L1st4x
678238405Sjkim
679238405Sjkim	mulq	%rbx
680238405Sjkim	addq	%rax,%r10
681238405Sjkim	movq	-16(%rcx,%r15,8),%rax
682238405Sjkim	adcq	$0,%rdx
683238405Sjkim	movq	%rdx,%r11
684238405Sjkim
685238405Sjkim	mulq	%rbp
686238405Sjkim	addq	%rax,%r13
687238405Sjkim	movq	-8(%rsi,%r15,8),%rax
688238405Sjkim	adcq	$0,%rdx
689238405Sjkim	addq	%r10,%r13
690238405Sjkim	adcq	$0,%rdx
691238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
692238405Sjkim	movq	%rdx,%rdi
693238405Sjkim
694238405Sjkim	mulq	%rbx
695238405Sjkim	addq	%rax,%r11
696238405Sjkim	movq	-8(%rcx,%r15,8),%rax
697238405Sjkim	adcq	$0,%rdx
698238405Sjkim	movq	%rdx,%r10
699238405Sjkim
700238405Sjkim	mulq	%rbp
701238405Sjkim	addq	%rax,%rdi
702238405Sjkim	movq	(%rsi),%rax
703238405Sjkim	adcq	$0,%rdx
704238405Sjkim	addq	%r11,%rdi
705238405Sjkim	adcq	$0,%rdx
706238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
707238405Sjkim	movq	%rdx,%r13
708238405Sjkim
709238405Sjkim	xorq	%rdi,%rdi
710238405Sjkim	addq	%r10,%r13
711238405Sjkim	adcq	$0,%rdi
712238405Sjkim	movq	%r13,-8(%rsp,%r15,8)
713238405Sjkim	movq	%rdi,(%rsp,%r15,8)
714238405Sjkim
715238405Sjkim	leaq	1(%r14),%r14
716238405Sjkim.align	4
717238405Sjkim.Louter4x:
718296317Sdelphij	leaq	32+128(%rsp,%r9,8),%rdx
719296317Sdelphij	pxor	%xmm4,%xmm4
720296317Sdelphij	pxor	%xmm5,%xmm5
721296317Sdelphij	movdqa	-128(%r12),%xmm0
722296317Sdelphij	movdqa	-112(%r12),%xmm1
723296317Sdelphij	movdqa	-96(%r12),%xmm2
724296317Sdelphij	movdqa	-80(%r12),%xmm3
725296317Sdelphij	pand	-128(%rdx),%xmm0
726296317Sdelphij	pand	-112(%rdx),%xmm1
727296317Sdelphij	por	%xmm0,%xmm4
728296317Sdelphij	pand	-96(%rdx),%xmm2
729296317Sdelphij	por	%xmm1,%xmm5
730296317Sdelphij	pand	-80(%rdx),%xmm3
731296317Sdelphij	por	%xmm2,%xmm4
732296317Sdelphij	por	%xmm3,%xmm5
733296317Sdelphij	movdqa	-64(%r12),%xmm0
734296317Sdelphij	movdqa	-48(%r12),%xmm1
735296317Sdelphij	movdqa	-32(%r12),%xmm2
736296317Sdelphij	movdqa	-16(%r12),%xmm3
737296317Sdelphij	pand	-64(%rdx),%xmm0
738296317Sdelphij	pand	-48(%rdx),%xmm1
739296317Sdelphij	por	%xmm0,%xmm4
740296317Sdelphij	pand	-32(%rdx),%xmm2
741296317Sdelphij	por	%xmm1,%xmm5
742296317Sdelphij	pand	-16(%rdx),%xmm3
743296317Sdelphij	por	%xmm2,%xmm4
744296317Sdelphij	por	%xmm3,%xmm5
745296317Sdelphij	movdqa	0(%r12),%xmm0
746296317Sdelphij	movdqa	16(%r12),%xmm1
747296317Sdelphij	movdqa	32(%r12),%xmm2
748296317Sdelphij	movdqa	48(%r12),%xmm3
749296317Sdelphij	pand	0(%rdx),%xmm0
750296317Sdelphij	pand	16(%rdx),%xmm1
751296317Sdelphij	por	%xmm0,%xmm4
752296317Sdelphij	pand	32(%rdx),%xmm2
753296317Sdelphij	por	%xmm1,%xmm5
754296317Sdelphij	pand	48(%rdx),%xmm3
755296317Sdelphij	por	%xmm2,%xmm4
756296317Sdelphij	por	%xmm3,%xmm5
757296317Sdelphij	movdqa	64(%r12),%xmm0
758296317Sdelphij	movdqa	80(%r12),%xmm1
759296317Sdelphij	movdqa	96(%r12),%xmm2
760296317Sdelphij	movdqa	112(%r12),%xmm3
761296317Sdelphij	pand	64(%rdx),%xmm0
762296317Sdelphij	pand	80(%rdx),%xmm1
763296317Sdelphij	por	%xmm0,%xmm4
764296317Sdelphij	pand	96(%rdx),%xmm2
765296317Sdelphij	por	%xmm1,%xmm5
766296317Sdelphij	pand	112(%rdx),%xmm3
767296317Sdelphij	por	%xmm2,%xmm4
768296317Sdelphij	por	%xmm3,%xmm5
769296317Sdelphij	por	%xmm5,%xmm4
770296317Sdelphij	pshufd	$78,%xmm4,%xmm0
771296317Sdelphij	por	%xmm4,%xmm0
772296317Sdelphij	leaq	256(%r12),%r12
773296317Sdelphij.byte	102,72,15,126,195
774296317Sdelphij
775238405Sjkim	xorq	%r15,%r15
776238405Sjkim
777238405Sjkim	movq	(%rsp),%r10
778238405Sjkim	movq	%r8,%rbp
779238405Sjkim	mulq	%rbx
780238405Sjkim	addq	%rax,%r10
781238405Sjkim	movq	(%rcx),%rax
782238405Sjkim	adcq	$0,%rdx
783238405Sjkim
784238405Sjkim	imulq	%r10,%rbp
785238405Sjkim	movq	%rdx,%r11
786238405Sjkim
787238405Sjkim	mulq	%rbp
788238405Sjkim	addq	%rax,%r10
789238405Sjkim	movq	8(%rsi),%rax
790238405Sjkim	adcq	$0,%rdx
791238405Sjkim	movq	%rdx,%rdi
792238405Sjkim
793238405Sjkim	mulq	%rbx
794238405Sjkim	addq	%rax,%r11
795238405Sjkim	movq	8(%rcx),%rax
796238405Sjkim	adcq	$0,%rdx
797238405Sjkim	addq	8(%rsp),%r11
798238405Sjkim	adcq	$0,%rdx
799238405Sjkim	movq	%rdx,%r10
800238405Sjkim
801238405Sjkim	mulq	%rbp
802238405Sjkim	addq	%rax,%rdi
803238405Sjkim	movq	16(%rsi),%rax
804238405Sjkim	adcq	$0,%rdx
805238405Sjkim	addq	%r11,%rdi
806238405Sjkim	leaq	4(%r15),%r15
807238405Sjkim	adcq	$0,%rdx
808238405Sjkim	movq	%rdx,%r13
809238405Sjkim	jmp	.Linner4x
810238405Sjkim.align	16
811238405Sjkim.Linner4x:
812238405Sjkim	mulq	%rbx
813238405Sjkim	addq	%rax,%r10
814238405Sjkim	movq	-16(%rcx,%r15,8),%rax
815238405Sjkim	adcq	$0,%rdx
816238405Sjkim	addq	-16(%rsp,%r15,8),%r10
817238405Sjkim	adcq	$0,%rdx
818238405Sjkim	movq	%rdx,%r11
819238405Sjkim
820238405Sjkim	mulq	%rbp
821238405Sjkim	addq	%rax,%r13
822238405Sjkim	movq	-8(%rsi,%r15,8),%rax
823238405Sjkim	adcq	$0,%rdx
824238405Sjkim	addq	%r10,%r13
825238405Sjkim	adcq	$0,%rdx
826238405Sjkim	movq	%rdi,-32(%rsp,%r15,8)
827238405Sjkim	movq	%rdx,%rdi
828238405Sjkim
829238405Sjkim	mulq	%rbx
830238405Sjkim	addq	%rax,%r11
831238405Sjkim	movq	-8(%rcx,%r15,8),%rax
832238405Sjkim	adcq	$0,%rdx
833238405Sjkim	addq	-8(%rsp,%r15,8),%r11
834238405Sjkim	adcq	$0,%rdx
835238405Sjkim	movq	%rdx,%r10
836238405Sjkim
837238405Sjkim	mulq	%rbp
838238405Sjkim	addq	%rax,%rdi
839238405Sjkim	movq	(%rsi,%r15,8),%rax
840238405Sjkim	adcq	$0,%rdx
841238405Sjkim	addq	%r11,%rdi
842238405Sjkim	adcq	$0,%rdx
843238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
844238405Sjkim	movq	%rdx,%r13
845238405Sjkim
846238405Sjkim	mulq	%rbx
847238405Sjkim	addq	%rax,%r10
848238405Sjkim	movq	(%rcx,%r15,8),%rax
849238405Sjkim	adcq	$0,%rdx
850238405Sjkim	addq	(%rsp,%r15,8),%r10
851238405Sjkim	adcq	$0,%rdx
852238405Sjkim	movq	%rdx,%r11
853238405Sjkim
854238405Sjkim	mulq	%rbp
855238405Sjkim	addq	%rax,%r13
856238405Sjkim	movq	8(%rsi,%r15,8),%rax
857238405Sjkim	adcq	$0,%rdx
858238405Sjkim	addq	%r10,%r13
859238405Sjkim	adcq	$0,%rdx
860238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
861238405Sjkim	movq	%rdx,%rdi
862238405Sjkim
863238405Sjkim	mulq	%rbx
864238405Sjkim	addq	%rax,%r11
865238405Sjkim	movq	8(%rcx,%r15,8),%rax
866238405Sjkim	adcq	$0,%rdx
867238405Sjkim	addq	8(%rsp,%r15,8),%r11
868238405Sjkim	adcq	$0,%rdx
869238405Sjkim	leaq	4(%r15),%r15
870238405Sjkim	movq	%rdx,%r10
871238405Sjkim
872238405Sjkim	mulq	%rbp
873238405Sjkim	addq	%rax,%rdi
874238405Sjkim	movq	-16(%rsi,%r15,8),%rax
875238405Sjkim	adcq	$0,%rdx
876238405Sjkim	addq	%r11,%rdi
877238405Sjkim	adcq	$0,%rdx
878238405Sjkim	movq	%r13,-40(%rsp,%r15,8)
879238405Sjkim	movq	%rdx,%r13
880238405Sjkim	cmpq	%r9,%r15
881238405Sjkim	jl	.Linner4x
882238405Sjkim
883238405Sjkim	mulq	%rbx
884238405Sjkim	addq	%rax,%r10
885238405Sjkim	movq	-16(%rcx,%r15,8),%rax
886238405Sjkim	adcq	$0,%rdx
887238405Sjkim	addq	-16(%rsp,%r15,8),%r10
888238405Sjkim	adcq	$0,%rdx
889238405Sjkim	movq	%rdx,%r11
890238405Sjkim
891238405Sjkim	mulq	%rbp
892238405Sjkim	addq	%rax,%r13
893238405Sjkim	movq	-8(%rsi,%r15,8),%rax
894238405Sjkim	adcq	$0,%rdx
895238405Sjkim	addq	%r10,%r13
896238405Sjkim	adcq	$0,%rdx
897238405Sjkim	movq	%rdi,-32(%rsp,%r15,8)
898238405Sjkim	movq	%rdx,%rdi
899238405Sjkim
900238405Sjkim	mulq	%rbx
901238405Sjkim	addq	%rax,%r11
902238405Sjkim	movq	-8(%rcx,%r15,8),%rax
903238405Sjkim	adcq	$0,%rdx
904238405Sjkim	addq	-8(%rsp,%r15,8),%r11
905238405Sjkim	adcq	$0,%rdx
906238405Sjkim	leaq	1(%r14),%r14
907238405Sjkim	movq	%rdx,%r10
908238405Sjkim
909238405Sjkim	mulq	%rbp
910238405Sjkim	addq	%rax,%rdi
911238405Sjkim	movq	(%rsi),%rax
912238405Sjkim	adcq	$0,%rdx
913238405Sjkim	addq	%r11,%rdi
914238405Sjkim	adcq	$0,%rdx
915238405Sjkim	movq	%r13,-24(%rsp,%r15,8)
916238405Sjkim	movq	%rdx,%r13
917238405Sjkim
918238405Sjkim	movq	%rdi,-16(%rsp,%r15,8)
919238405Sjkim
920238405Sjkim	xorq	%rdi,%rdi
921238405Sjkim	addq	%r10,%r13
922238405Sjkim	adcq	$0,%rdi
923238405Sjkim	addq	(%rsp,%r9,8),%r13
924238405Sjkim	adcq	$0,%rdi
925238405Sjkim	movq	%r13,-8(%rsp,%r15,8)
926238405Sjkim	movq	%rdi,(%rsp,%r15,8)
927238405Sjkim
928238405Sjkim	cmpq	%r9,%r14
929238405Sjkim	jl	.Louter4x
930238405Sjkim	movq	16(%rsp,%r9,8),%rdi
931238405Sjkim	movq	0(%rsp),%rax
932238405Sjkim	pxor	%xmm0,%xmm0
933238405Sjkim	movq	8(%rsp),%rdx
934238405Sjkim	shrq	$2,%r9
935238405Sjkim	leaq	(%rsp),%rsi
936238405Sjkim	xorq	%r14,%r14
937238405Sjkim
938238405Sjkim	subq	0(%rcx),%rax
939238405Sjkim	movq	16(%rsi),%rbx
940238405Sjkim	movq	24(%rsi),%rbp
941238405Sjkim	sbbq	8(%rcx),%rdx
942238405Sjkim	leaq	-1(%r9),%r15
943238405Sjkim	jmp	.Lsub4x
944238405Sjkim.align	16
945238405Sjkim.Lsub4x:
946238405Sjkim	movq	%rax,0(%rdi,%r14,8)
947238405Sjkim	movq	%rdx,8(%rdi,%r14,8)
948238405Sjkim	sbbq	16(%rcx,%r14,8),%rbx
949238405Sjkim	movq	32(%rsi,%r14,8),%rax
950238405Sjkim	movq	40(%rsi,%r14,8),%rdx
951238405Sjkim	sbbq	24(%rcx,%r14,8),%rbp
952238405Sjkim	movq	%rbx,16(%rdi,%r14,8)
953238405Sjkim	movq	%rbp,24(%rdi,%r14,8)
954238405Sjkim	sbbq	32(%rcx,%r14,8),%rax
955238405Sjkim	movq	48(%rsi,%r14,8),%rbx
956238405Sjkim	movq	56(%rsi,%r14,8),%rbp
957238405Sjkim	sbbq	40(%rcx,%r14,8),%rdx
958238405Sjkim	leaq	4(%r14),%r14
959238405Sjkim	decq	%r15
960238405Sjkim	jnz	.Lsub4x
961238405Sjkim
962238405Sjkim	movq	%rax,0(%rdi,%r14,8)
963238405Sjkim	movq	32(%rsi,%r14,8),%rax
964238405Sjkim	sbbq	16(%rcx,%r14,8),%rbx
965238405Sjkim	movq	%rdx,8(%rdi,%r14,8)
966238405Sjkim	sbbq	24(%rcx,%r14,8),%rbp
967238405Sjkim	movq	%rbx,16(%rdi,%r14,8)
968238405Sjkim
969238405Sjkim	sbbq	$0,%rax
970238405Sjkim	movq	%rbp,24(%rdi,%r14,8)
971238405Sjkim	xorq	%r14,%r14
972238405Sjkim	andq	%rax,%rsi
973238405Sjkim	notq	%rax
974238405Sjkim	movq	%rdi,%rcx
975238405Sjkim	andq	%rax,%rcx
976238405Sjkim	leaq	-1(%r9),%r15
977238405Sjkim	orq	%rcx,%rsi
978238405Sjkim
979238405Sjkim	movdqu	(%rsi),%xmm1
980238405Sjkim	movdqa	%xmm0,(%rsp)
981238405Sjkim	movdqu	%xmm1,(%rdi)
982238405Sjkim	jmp	.Lcopy4x
983238405Sjkim.align	16
984238405Sjkim.Lcopy4x:
985238405Sjkim	movdqu	16(%rsi,%r14,1),%xmm2
986238405Sjkim	movdqu	32(%rsi,%r14,1),%xmm1
987238405Sjkim	movdqa	%xmm0,16(%rsp,%r14,1)
988238405Sjkim	movdqu	%xmm2,16(%rdi,%r14,1)
989238405Sjkim	movdqa	%xmm0,32(%rsp,%r14,1)
990238405Sjkim	movdqu	%xmm1,32(%rdi,%r14,1)
991238405Sjkim	leaq	32(%r14),%r14
992238405Sjkim	decq	%r15
993238405Sjkim	jnz	.Lcopy4x
994238405Sjkim
995238405Sjkim	shlq	$2,%r9
996238405Sjkim	movdqu	16(%rsi,%r14,1),%xmm2
997238405Sjkim	movdqa	%xmm0,16(%rsp,%r14,1)
998238405Sjkim	movdqu	%xmm2,16(%rdi,%r14,1)
999238405Sjkim	movq	8(%rsp,%r9,8),%rsi
1000238405Sjkim	movq	$1,%rax
1001296317Sdelphij
1002238405Sjkim	movq	(%rsi),%r15
1003238405Sjkim	movq	8(%rsi),%r14
1004238405Sjkim	movq	16(%rsi),%r13
1005238405Sjkim	movq	24(%rsi),%r12
1006238405Sjkim	movq	32(%rsi),%rbp
1007238405Sjkim	movq	40(%rsi),%rbx
1008238405Sjkim	leaq	48(%rsi),%rsp
1009238405Sjkim.Lmul4x_epilogue:
1010238405Sjkim	.byte	0xf3,0xc3
1011238405Sjkim.size	bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5
1012238405Sjkim.globl	bn_scatter5
1013238405Sjkim.type	bn_scatter5,@function
1014238405Sjkim.align	16
1015238405Sjkimbn_scatter5:
1016238405Sjkim	cmpq	$0,%rsi
1017238405Sjkim	jz	.Lscatter_epilogue
1018238405Sjkim	leaq	(%rdx,%rcx,8),%rdx
1019238405Sjkim.Lscatter:
1020238405Sjkim	movq	(%rdi),%rax
1021238405Sjkim	leaq	8(%rdi),%rdi
1022238405Sjkim	movq	%rax,(%rdx)
1023238405Sjkim	leaq	256(%rdx),%rdx
1024238405Sjkim	subq	$1,%rsi
1025238405Sjkim	jnz	.Lscatter
1026238405Sjkim.Lscatter_epilogue:
1027238405Sjkim	.byte	0xf3,0xc3
1028238405Sjkim.size	bn_scatter5,.-bn_scatter5
1029238405Sjkim
1030238405Sjkim.globl	bn_gather5
1031238405Sjkim.type	bn_gather5,@function
1032238405Sjkim.align	16
1033238405Sjkimbn_gather5:
1034296317Sdelphij.LSEH_begin_bn_gather5:
1035296317Sdelphij
1036296317Sdelphij.byte	0x4c,0x8d,0x14,0x24
1037296317Sdelphij.byte	0x48,0x81,0xec,0x08,0x01,0x00,0x00
1038296317Sdelphij	leaq	.Linc(%rip),%rax
1039296317Sdelphij	andq	$-16,%rsp
1040296317Sdelphij
1041296317Sdelphij	movd	%ecx,%xmm5
1042296317Sdelphij	movdqa	0(%rax),%xmm0
1043296317Sdelphij	movdqa	16(%rax),%xmm1
1044296317Sdelphij	leaq	128(%rdx),%r11
1045296317Sdelphij	leaq	128(%rsp),%rax
1046296317Sdelphij
1047296317Sdelphij	pshufd	$0,%xmm5,%xmm5
1048296317Sdelphij	movdqa	%xmm1,%xmm4
1049296317Sdelphij	movdqa	%xmm1,%xmm2
1050296317Sdelphij	paddd	%xmm0,%xmm1
1051296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1052296317Sdelphij	movdqa	%xmm4,%xmm3
1053296317Sdelphij
1054296317Sdelphij	paddd	%xmm1,%xmm2
1055296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1056296317Sdelphij	movdqa	%xmm0,-128(%rax)
1057296317Sdelphij	movdqa	%xmm4,%xmm0
1058296317Sdelphij
1059296317Sdelphij	paddd	%xmm2,%xmm3
1060296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1061296317Sdelphij	movdqa	%xmm1,-112(%rax)
1062296317Sdelphij	movdqa	%xmm4,%xmm1
1063296317Sdelphij
1064296317Sdelphij	paddd	%xmm3,%xmm0
1065296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1066296317Sdelphij	movdqa	%xmm2,-96(%rax)
1067296317Sdelphij	movdqa	%xmm4,%xmm2
1068296317Sdelphij	paddd	%xmm0,%xmm1
1069296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1070296317Sdelphij	movdqa	%xmm3,-80(%rax)
1071296317Sdelphij	movdqa	%xmm4,%xmm3
1072296317Sdelphij
1073296317Sdelphij	paddd	%xmm1,%xmm2
1074296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1075296317Sdelphij	movdqa	%xmm0,-64(%rax)
1076296317Sdelphij	movdqa	%xmm4,%xmm0
1077296317Sdelphij
1078296317Sdelphij	paddd	%xmm2,%xmm3
1079296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1080296317Sdelphij	movdqa	%xmm1,-48(%rax)
1081296317Sdelphij	movdqa	%xmm4,%xmm1
1082296317Sdelphij
1083296317Sdelphij	paddd	%xmm3,%xmm0
1084296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1085296317Sdelphij	movdqa	%xmm2,-32(%rax)
1086296317Sdelphij	movdqa	%xmm4,%xmm2
1087296317Sdelphij	paddd	%xmm0,%xmm1
1088296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1089296317Sdelphij	movdqa	%xmm3,-16(%rax)
1090296317Sdelphij	movdqa	%xmm4,%xmm3
1091296317Sdelphij
1092296317Sdelphij	paddd	%xmm1,%xmm2
1093296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1094296317Sdelphij	movdqa	%xmm0,0(%rax)
1095296317Sdelphij	movdqa	%xmm4,%xmm0
1096296317Sdelphij
1097296317Sdelphij	paddd	%xmm2,%xmm3
1098296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1099296317Sdelphij	movdqa	%xmm1,16(%rax)
1100296317Sdelphij	movdqa	%xmm4,%xmm1
1101296317Sdelphij
1102296317Sdelphij	paddd	%xmm3,%xmm0
1103296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1104296317Sdelphij	movdqa	%xmm2,32(%rax)
1105296317Sdelphij	movdqa	%xmm4,%xmm2
1106296317Sdelphij	paddd	%xmm0,%xmm1
1107296317Sdelphij	pcmpeqd	%xmm5,%xmm0
1108296317Sdelphij	movdqa	%xmm3,48(%rax)
1109296317Sdelphij	movdqa	%xmm4,%xmm3
1110296317Sdelphij
1111296317Sdelphij	paddd	%xmm1,%xmm2
1112296317Sdelphij	pcmpeqd	%xmm5,%xmm1
1113296317Sdelphij	movdqa	%xmm0,64(%rax)
1114296317Sdelphij	movdqa	%xmm4,%xmm0
1115296317Sdelphij
1116296317Sdelphij	paddd	%xmm2,%xmm3
1117296317Sdelphij	pcmpeqd	%xmm5,%xmm2
1118296317Sdelphij	movdqa	%xmm1,80(%rax)
1119296317Sdelphij	movdqa	%xmm4,%xmm1
1120296317Sdelphij
1121296317Sdelphij	paddd	%xmm3,%xmm0
1122296317Sdelphij	pcmpeqd	%xmm5,%xmm3
1123296317Sdelphij	movdqa	%xmm2,96(%rax)
1124296317Sdelphij	movdqa	%xmm4,%xmm2
1125296317Sdelphij	movdqa	%xmm3,112(%rax)
1126238405Sjkim	jmp	.Lgather
1127296317Sdelphij
1128296317Sdelphij.align	32
1129238405Sjkim.Lgather:
1130296317Sdelphij	pxor	%xmm4,%xmm4
1131296317Sdelphij	pxor	%xmm5,%xmm5
1132296317Sdelphij	movdqa	-128(%r11),%xmm0
1133296317Sdelphij	movdqa	-112(%r11),%xmm1
1134296317Sdelphij	movdqa	-96(%r11),%xmm2
1135296317Sdelphij	pand	-128(%rax),%xmm0
1136296317Sdelphij	movdqa	-80(%r11),%xmm3
1137296317Sdelphij	pand	-112(%rax),%xmm1
1138296317Sdelphij	por	%xmm0,%xmm4
1139296317Sdelphij	pand	-96(%rax),%xmm2
1140296317Sdelphij	por	%xmm1,%xmm5
1141296317Sdelphij	pand	-80(%rax),%xmm3
1142296317Sdelphij	por	%xmm2,%xmm4
1143296317Sdelphij	por	%xmm3,%xmm5
1144296317Sdelphij	movdqa	-64(%r11),%xmm0
1145296317Sdelphij	movdqa	-48(%r11),%xmm1
1146296317Sdelphij	movdqa	-32(%r11),%xmm2
1147296317Sdelphij	pand	-64(%rax),%xmm0
1148296317Sdelphij	movdqa	-16(%r11),%xmm3
1149296317Sdelphij	pand	-48(%rax),%xmm1
1150296317Sdelphij	por	%xmm0,%xmm4
1151296317Sdelphij	pand	-32(%rax),%xmm2
1152296317Sdelphij	por	%xmm1,%xmm5
1153296317Sdelphij	pand	-16(%rax),%xmm3
1154296317Sdelphij	por	%xmm2,%xmm4
1155296317Sdelphij	por	%xmm3,%xmm5
1156296317Sdelphij	movdqa	0(%r11),%xmm0
1157296317Sdelphij	movdqa	16(%r11),%xmm1
1158296317Sdelphij	movdqa	32(%r11),%xmm2
1159296317Sdelphij	pand	0(%rax),%xmm0
1160296317Sdelphij	movdqa	48(%r11),%xmm3
1161296317Sdelphij	pand	16(%rax),%xmm1
1162296317Sdelphij	por	%xmm0,%xmm4
1163296317Sdelphij	pand	32(%rax),%xmm2
1164296317Sdelphij	por	%xmm1,%xmm5
1165296317Sdelphij	pand	48(%rax),%xmm3
1166296317Sdelphij	por	%xmm2,%xmm4
1167296317Sdelphij	por	%xmm3,%xmm5
1168296317Sdelphij	movdqa	64(%r11),%xmm0
1169296317Sdelphij	movdqa	80(%r11),%xmm1
1170296317Sdelphij	movdqa	96(%r11),%xmm2
1171296317Sdelphij	pand	64(%rax),%xmm0
1172296317Sdelphij	movdqa	112(%r11),%xmm3
1173296317Sdelphij	pand	80(%rax),%xmm1
1174296317Sdelphij	por	%xmm0,%xmm4
1175296317Sdelphij	pand	96(%rax),%xmm2
1176296317Sdelphij	por	%xmm1,%xmm5
1177296317Sdelphij	pand	112(%rax),%xmm3
1178296317Sdelphij	por	%xmm2,%xmm4
1179296317Sdelphij	por	%xmm3,%xmm5
1180296317Sdelphij	por	%xmm5,%xmm4
1181296317Sdelphij	leaq	256(%r11),%r11
1182296317Sdelphij	pshufd	$78,%xmm4,%xmm0
1183296317Sdelphij	por	%xmm4,%xmm0
1184238405Sjkim	movq	%xmm0,(%rdi)
1185238405Sjkim	leaq	8(%rdi),%rdi
1186238405Sjkim	subq	$1,%rsi
1187238405Sjkim	jnz	.Lgather
1188296317Sdelphij
1189296317Sdelphij	leaq	(%r10),%rsp
1190238405Sjkim	.byte	0xf3,0xc3
1191238405Sjkim.LSEH_end_bn_gather5:
1192238405Sjkim.size	bn_gather5,.-bn_gather5
1193238405Sjkim.align	64
1194296317Sdelphij.Linc:
1195296317Sdelphij.long	0,0, 1,1
1196296317Sdelphij.long	2,2, 2,2
1197238405Sjkim.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
1198