1238405Sjkim	# $FreeBSD$
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
17296341Sdelphij	movd	8(%rsp),%xmm5
18296341Sdelphij	leaq	.Linc(%rip),%r10
19238405Sjkim	pushq	%rbx
20238405Sjkim	pushq	%rbp
21238405Sjkim	pushq	%r12
22238405Sjkim	pushq	%r13
23238405Sjkim	pushq	%r14
24238405Sjkim	pushq	%r15
25296341Sdelphij
26296341Sdelphij.Lmul_alloca:
27238405Sjkim	movq	%rsp,%rax
28238405Sjkim	leaq	2(%r9),%r11
29238405Sjkim	negq	%r11
30296341Sdelphij	leaq	-264(%rsp,%r11,8),%rsp
31238405Sjkim	andq	$-1024,%rsp
32238405Sjkim
33238405Sjkim	movq	%rax,8(%rsp,%r9,8)
34238405Sjkim.Lmul_body:
35296341Sdelphij	leaq	128(%rdx),%r12
36296341Sdelphij	movdqa	0(%r10),%xmm0
37296341Sdelphij	movdqa	16(%r10),%xmm1
38296341Sdelphij	leaq	24-112(%rsp,%r9,8),%r10
39296341Sdelphij	andq	$-16,%r10
40238405Sjkim
41296341Sdelphij	pshufd	$0,%xmm5,%xmm5
42296341Sdelphij	movdqa	%xmm1,%xmm4
43296341Sdelphij	movdqa	%xmm1,%xmm2
44296341Sdelphij	paddd	%xmm0,%xmm1
45296341Sdelphij	pcmpeqd	%xmm5,%xmm0
46296341Sdelphij.byte	0x67
47296341Sdelphij	movdqa	%xmm4,%xmm3
48296341Sdelphij	paddd	%xmm1,%xmm2
49296341Sdelphij	pcmpeqd	%xmm5,%xmm1
50296341Sdelphij	movdqa	%xmm0,112(%r10)
51296341Sdelphij	movdqa	%xmm4,%xmm0
52296341Sdelphij
53296341Sdelphij	paddd	%xmm2,%xmm3
54296341Sdelphij	pcmpeqd	%xmm5,%xmm2
55296341Sdelphij	movdqa	%xmm1,128(%r10)
56296341Sdelphij	movdqa	%xmm4,%xmm1
57296341Sdelphij
58296341Sdelphij	paddd	%xmm3,%xmm0
59296341Sdelphij	pcmpeqd	%xmm5,%xmm3
60296341Sdelphij	movdqa	%xmm2,144(%r10)
61296341Sdelphij	movdqa	%xmm4,%xmm2
62296341Sdelphij
63296341Sdelphij	paddd	%xmm0,%xmm1
64296341Sdelphij	pcmpeqd	%xmm5,%xmm0
65296341Sdelphij	movdqa	%xmm3,160(%r10)
66296341Sdelphij	movdqa	%xmm4,%xmm3
67296341Sdelphij	paddd	%xmm1,%xmm2
68296341Sdelphij	pcmpeqd	%xmm5,%xmm1
69296341Sdelphij	movdqa	%xmm0,176(%r10)
70296341Sdelphij	movdqa	%xmm4,%xmm0
71296341Sdelphij
72296341Sdelphij	paddd	%xmm2,%xmm3
73296341Sdelphij	pcmpeqd	%xmm5,%xmm2
74296341Sdelphij	movdqa	%xmm1,192(%r10)
75296341Sdelphij	movdqa	%xmm4,%xmm1
76296341Sdelphij
77296341Sdelphij	paddd	%xmm3,%xmm0
78296341Sdelphij	pcmpeqd	%xmm5,%xmm3
79296341Sdelphij	movdqa	%xmm2,208(%r10)
80296341Sdelphij	movdqa	%xmm4,%xmm2
81296341Sdelphij
82296341Sdelphij	paddd	%xmm0,%xmm1
83296341Sdelphij	pcmpeqd	%xmm5,%xmm0
84296341Sdelphij	movdqa	%xmm3,224(%r10)
85296341Sdelphij	movdqa	%xmm4,%xmm3
86296341Sdelphij	paddd	%xmm1,%xmm2
87296341Sdelphij	pcmpeqd	%xmm5,%xmm1
88296341Sdelphij	movdqa	%xmm0,240(%r10)
89296341Sdelphij	movdqa	%xmm4,%xmm0
90296341Sdelphij
91296341Sdelphij	paddd	%xmm2,%xmm3
92296341Sdelphij	pcmpeqd	%xmm5,%xmm2
93296341Sdelphij	movdqa	%xmm1,256(%r10)
94296341Sdelphij	movdqa	%xmm4,%xmm1
95296341Sdelphij
96296341Sdelphij	paddd	%xmm3,%xmm0
97296341Sdelphij	pcmpeqd	%xmm5,%xmm3
98296341Sdelphij	movdqa	%xmm2,272(%r10)
99296341Sdelphij	movdqa	%xmm4,%xmm2
100296341Sdelphij
101296341Sdelphij	paddd	%xmm0,%xmm1
102296341Sdelphij	pcmpeqd	%xmm5,%xmm0
103296341Sdelphij	movdqa	%xmm3,288(%r10)
104296341Sdelphij	movdqa	%xmm4,%xmm3
105296341Sdelphij	paddd	%xmm1,%xmm2
106296341Sdelphij	pcmpeqd	%xmm5,%xmm1
107296341Sdelphij	movdqa	%xmm0,304(%r10)
108296341Sdelphij
109296341Sdelphij	paddd	%xmm2,%xmm3
110296341Sdelphij.byte	0x67
111296341Sdelphij	pcmpeqd	%xmm5,%xmm2
112296341Sdelphij	movdqa	%xmm1,320(%r10)
113296341Sdelphij
114296341Sdelphij	pcmpeqd	%xmm5,%xmm3
115296341Sdelphij	movdqa	%xmm2,336(%r10)
116296341Sdelphij	pand	64(%r12),%xmm0
117296341Sdelphij
118296341Sdelphij	pand	80(%r12),%xmm1
119296341Sdelphij	pand	96(%r12),%xmm2
120296341Sdelphij	movdqa	%xmm3,352(%r10)
121296341Sdelphij	pand	112(%r12),%xmm3
122296341Sdelphij	por	%xmm2,%xmm0
123296341Sdelphij	por	%xmm3,%xmm1
124296341Sdelphij	movdqa	-128(%r12),%xmm4
125296341Sdelphij	movdqa	-112(%r12),%xmm5
126296341Sdelphij	movdqa	-96(%r12),%xmm2
127296341Sdelphij	pand	112(%r10),%xmm4
128296341Sdelphij	movdqa	-80(%r12),%xmm3
129296341Sdelphij	pand	128(%r10),%xmm5
130296341Sdelphij	por	%xmm4,%xmm0
131296341Sdelphij	pand	144(%r10),%xmm2
132296341Sdelphij	por	%xmm5,%xmm1
133296341Sdelphij	pand	160(%r10),%xmm3
134296341Sdelphij	por	%xmm2,%xmm0
135296341Sdelphij	por	%xmm3,%xmm1
136296341Sdelphij	movdqa	-64(%r12),%xmm4
137296341Sdelphij	movdqa	-48(%r12),%xmm5
138296341Sdelphij	movdqa	-32(%r12),%xmm2
139296341Sdelphij	pand	176(%r10),%xmm4
140296341Sdelphij	movdqa	-16(%r12),%xmm3
141296341Sdelphij	pand	192(%r10),%xmm5
142296341Sdelphij	por	%xmm4,%xmm0
143296341Sdelphij	pand	208(%r10),%xmm2
144296341Sdelphij	por	%xmm5,%xmm1
145296341Sdelphij	pand	224(%r10),%xmm3
146296341Sdelphij	por	%xmm2,%xmm0
147296341Sdelphij	por	%xmm3,%xmm1
148296341Sdelphij	movdqa	0(%r12),%xmm4
149296341Sdelphij	movdqa	16(%r12),%xmm5
150296341Sdelphij	movdqa	32(%r12),%xmm2
151296341Sdelphij	pand	240(%r10),%xmm4
152296341Sdelphij	movdqa	48(%r12),%xmm3
153296341Sdelphij	pand	256(%r10),%xmm5
154296341Sdelphij	por	%xmm4,%xmm0
155296341Sdelphij	pand	272(%r10),%xmm2
156296341Sdelphij	por	%xmm5,%xmm1
157296341Sdelphij	pand	288(%r10),%xmm3
158296341Sdelphij	por	%xmm2,%xmm0
159296341Sdelphij	por	%xmm3,%xmm1
160238405Sjkim	por	%xmm1,%xmm0
161296341Sdelphij	pshufd	$78,%xmm0,%xmm1
162296341Sdelphij	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:
231296341Sdelphij	leaq	24+128(%rsp,%r9,8),%rdx
232296341Sdelphij	andq	$-16,%rdx
233296341Sdelphij	pxor	%xmm4,%xmm4
234296341Sdelphij	pxor	%xmm5,%xmm5
235296341Sdelphij	movdqa	-128(%r12),%xmm0
236296341Sdelphij	movdqa	-112(%r12),%xmm1
237296341Sdelphij	movdqa	-96(%r12),%xmm2
238296341Sdelphij	movdqa	-80(%r12),%xmm3
239296341Sdelphij	pand	-128(%rdx),%xmm0
240296341Sdelphij	pand	-112(%rdx),%xmm1
241296341Sdelphij	por	%xmm0,%xmm4
242296341Sdelphij	pand	-96(%rdx),%xmm2
243296341Sdelphij	por	%xmm1,%xmm5
244296341Sdelphij	pand	-80(%rdx),%xmm3
245296341Sdelphij	por	%xmm2,%xmm4
246296341Sdelphij	por	%xmm3,%xmm5
247296341Sdelphij	movdqa	-64(%r12),%xmm0
248296341Sdelphij	movdqa	-48(%r12),%xmm1
249296341Sdelphij	movdqa	-32(%r12),%xmm2
250296341Sdelphij	movdqa	-16(%r12),%xmm3
251296341Sdelphij	pand	-64(%rdx),%xmm0
252296341Sdelphij	pand	-48(%rdx),%xmm1
253296341Sdelphij	por	%xmm0,%xmm4
254296341Sdelphij	pand	-32(%rdx),%xmm2
255296341Sdelphij	por	%xmm1,%xmm5
256296341Sdelphij	pand	-16(%rdx),%xmm3
257296341Sdelphij	por	%xmm2,%xmm4
258296341Sdelphij	por	%xmm3,%xmm5
259296341Sdelphij	movdqa	0(%r12),%xmm0
260296341Sdelphij	movdqa	16(%r12),%xmm1
261296341Sdelphij	movdqa	32(%r12),%xmm2
262296341Sdelphij	movdqa	48(%r12),%xmm3
263296341Sdelphij	pand	0(%rdx),%xmm0
264296341Sdelphij	pand	16(%rdx),%xmm1
265296341Sdelphij	por	%xmm0,%xmm4
266296341Sdelphij	pand	32(%rdx),%xmm2
267296341Sdelphij	por	%xmm1,%xmm5
268296341Sdelphij	pand	48(%rdx),%xmm3
269296341Sdelphij	por	%xmm2,%xmm4
270296341Sdelphij	por	%xmm3,%xmm5
271296341Sdelphij	movdqa	64(%r12),%xmm0
272296341Sdelphij	movdqa	80(%r12),%xmm1
273296341Sdelphij	movdqa	96(%r12),%xmm2
274296341Sdelphij	movdqa	112(%r12),%xmm3
275296341Sdelphij	pand	64(%rdx),%xmm0
276296341Sdelphij	pand	80(%rdx),%xmm1
277296341Sdelphij	por	%xmm0,%xmm4
278296341Sdelphij	pand	96(%rdx),%xmm2
279296341Sdelphij	por	%xmm1,%xmm5
280296341Sdelphij	pand	112(%rdx),%xmm3
281296341Sdelphij	por	%xmm2,%xmm4
282296341Sdelphij	por	%xmm3,%xmm5
283296341Sdelphij	por	%xmm5,%xmm4
284296341Sdelphij	pshufd	$78,%xmm4,%xmm0
285296341Sdelphij	por	%xmm4,%xmm0
286296341Sdelphij	leaq	256(%r12),%r12
287296341Sdelphij.byte	102,72,15,126,195
288296341Sdelphij
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
389296341Sdelphij
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
405296341Sdelphij	movd	8(%rsp),%xmm5
406296341Sdelphij	leaq	.Linc(%rip),%r10
407238405Sjkim	pushq	%rbx
408238405Sjkim	pushq	%rbp
409238405Sjkim	pushq	%r12
410238405Sjkim	pushq	%r13
411238405Sjkim	pushq	%r14
412238405Sjkim	pushq	%r15
413296341Sdelphij
414296341Sdelphij.Lmul4x_alloca:
415238405Sjkim	movq	%rsp,%rax
416238405Sjkim	leaq	4(%r9),%r11
417238405Sjkim	negq	%r11
418296341Sdelphij	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)
424296341Sdelphij	leaq	128(%rdx),%r12
425296341Sdelphij	movdqa	0(%r10),%xmm0
426296341Sdelphij	movdqa	16(%r10),%xmm1
427296341Sdelphij	leaq	32-112(%rsp,%r9,8),%r10
428238405Sjkim
429296341Sdelphij	pshufd	$0,%xmm5,%xmm5
430296341Sdelphij	movdqa	%xmm1,%xmm4
431296341Sdelphij.byte	0x67,0x67
432296341Sdelphij	movdqa	%xmm1,%xmm2
433296341Sdelphij	paddd	%xmm0,%xmm1
434296341Sdelphij	pcmpeqd	%xmm5,%xmm0
435296341Sdelphij.byte	0x67
436296341Sdelphij	movdqa	%xmm4,%xmm3
437296341Sdelphij	paddd	%xmm1,%xmm2
438296341Sdelphij	pcmpeqd	%xmm5,%xmm1
439296341Sdelphij	movdqa	%xmm0,112(%r10)
440296341Sdelphij	movdqa	%xmm4,%xmm0
441296341Sdelphij
442296341Sdelphij	paddd	%xmm2,%xmm3
443296341Sdelphij	pcmpeqd	%xmm5,%xmm2
444296341Sdelphij	movdqa	%xmm1,128(%r10)
445296341Sdelphij	movdqa	%xmm4,%xmm1
446296341Sdelphij
447296341Sdelphij	paddd	%xmm3,%xmm0
448296341Sdelphij	pcmpeqd	%xmm5,%xmm3
449296341Sdelphij	movdqa	%xmm2,144(%r10)
450296341Sdelphij	movdqa	%xmm4,%xmm2
451296341Sdelphij
452296341Sdelphij	paddd	%xmm0,%xmm1
453296341Sdelphij	pcmpeqd	%xmm5,%xmm0
454296341Sdelphij	movdqa	%xmm3,160(%r10)
455296341Sdelphij	movdqa	%xmm4,%xmm3
456296341Sdelphij	paddd	%xmm1,%xmm2
457296341Sdelphij	pcmpeqd	%xmm5,%xmm1
458296341Sdelphij	movdqa	%xmm0,176(%r10)
459296341Sdelphij	movdqa	%xmm4,%xmm0
460296341Sdelphij
461296341Sdelphij	paddd	%xmm2,%xmm3
462296341Sdelphij	pcmpeqd	%xmm5,%xmm2
463296341Sdelphij	movdqa	%xmm1,192(%r10)
464296341Sdelphij	movdqa	%xmm4,%xmm1
465296341Sdelphij
466296341Sdelphij	paddd	%xmm3,%xmm0
467296341Sdelphij	pcmpeqd	%xmm5,%xmm3
468296341Sdelphij	movdqa	%xmm2,208(%r10)
469296341Sdelphij	movdqa	%xmm4,%xmm2
470296341Sdelphij
471296341Sdelphij	paddd	%xmm0,%xmm1
472296341Sdelphij	pcmpeqd	%xmm5,%xmm0
473296341Sdelphij	movdqa	%xmm3,224(%r10)
474296341Sdelphij	movdqa	%xmm4,%xmm3
475296341Sdelphij	paddd	%xmm1,%xmm2
476296341Sdelphij	pcmpeqd	%xmm5,%xmm1
477296341Sdelphij	movdqa	%xmm0,240(%r10)
478296341Sdelphij	movdqa	%xmm4,%xmm0
479296341Sdelphij
480296341Sdelphij	paddd	%xmm2,%xmm3
481296341Sdelphij	pcmpeqd	%xmm5,%xmm2
482296341Sdelphij	movdqa	%xmm1,256(%r10)
483296341Sdelphij	movdqa	%xmm4,%xmm1
484296341Sdelphij
485296341Sdelphij	paddd	%xmm3,%xmm0
486296341Sdelphij	pcmpeqd	%xmm5,%xmm3
487296341Sdelphij	movdqa	%xmm2,272(%r10)
488296341Sdelphij	movdqa	%xmm4,%xmm2
489296341Sdelphij
490296341Sdelphij	paddd	%xmm0,%xmm1
491296341Sdelphij	pcmpeqd	%xmm5,%xmm0
492296341Sdelphij	movdqa	%xmm3,288(%r10)
493296341Sdelphij	movdqa	%xmm4,%xmm3
494296341Sdelphij	paddd	%xmm1,%xmm2
495296341Sdelphij	pcmpeqd	%xmm5,%xmm1
496296341Sdelphij	movdqa	%xmm0,304(%r10)
497296341Sdelphij
498296341Sdelphij	paddd	%xmm2,%xmm3
499296341Sdelphij.byte	0x67
500296341Sdelphij	pcmpeqd	%xmm5,%xmm2
501296341Sdelphij	movdqa	%xmm1,320(%r10)
502296341Sdelphij
503296341Sdelphij	pcmpeqd	%xmm5,%xmm3
504296341Sdelphij	movdqa	%xmm2,336(%r10)
505296341Sdelphij	pand	64(%r12),%xmm0
506296341Sdelphij
507296341Sdelphij	pand	80(%r12),%xmm1
508296341Sdelphij	pand	96(%r12),%xmm2
509296341Sdelphij	movdqa	%xmm3,352(%r10)
510296341Sdelphij	pand	112(%r12),%xmm3
511296341Sdelphij	por	%xmm2,%xmm0
512296341Sdelphij	por	%xmm3,%xmm1
513296341Sdelphij	movdqa	-128(%r12),%xmm4
514296341Sdelphij	movdqa	-112(%r12),%xmm5
515296341Sdelphij	movdqa	-96(%r12),%xmm2
516296341Sdelphij	pand	112(%r10),%xmm4
517296341Sdelphij	movdqa	-80(%r12),%xmm3
518296341Sdelphij	pand	128(%r10),%xmm5
519296341Sdelphij	por	%xmm4,%xmm0
520296341Sdelphij	pand	144(%r10),%xmm2
521296341Sdelphij	por	%xmm5,%xmm1
522296341Sdelphij	pand	160(%r10),%xmm3
523296341Sdelphij	por	%xmm2,%xmm0
524296341Sdelphij	por	%xmm3,%xmm1
525296341Sdelphij	movdqa	-64(%r12),%xmm4
526296341Sdelphij	movdqa	-48(%r12),%xmm5
527296341Sdelphij	movdqa	-32(%r12),%xmm2
528296341Sdelphij	pand	176(%r10),%xmm4
529296341Sdelphij	movdqa	-16(%r12),%xmm3
530296341Sdelphij	pand	192(%r10),%xmm5
531296341Sdelphij	por	%xmm4,%xmm0
532296341Sdelphij	pand	208(%r10),%xmm2
533296341Sdelphij	por	%xmm5,%xmm1
534296341Sdelphij	pand	224(%r10),%xmm3
535296341Sdelphij	por	%xmm2,%xmm0
536296341Sdelphij	por	%xmm3,%xmm1
537296341Sdelphij	movdqa	0(%r12),%xmm4
538296341Sdelphij	movdqa	16(%r12),%xmm5
539296341Sdelphij	movdqa	32(%r12),%xmm2
540296341Sdelphij	pand	240(%r10),%xmm4
541296341Sdelphij	movdqa	48(%r12),%xmm3
542296341Sdelphij	pand	256(%r10),%xmm5
543296341Sdelphij	por	%xmm4,%xmm0
544296341Sdelphij	pand	272(%r10),%xmm2
545296341Sdelphij	por	%xmm5,%xmm1
546296341Sdelphij	pand	288(%r10),%xmm3
547296341Sdelphij	por	%xmm2,%xmm0
548296341Sdelphij	por	%xmm3,%xmm1
549238405Sjkim	por	%xmm1,%xmm0
550296341Sdelphij	pshufd	$78,%xmm0,%xmm1
551296341Sdelphij	por	%xmm1,%xmm0
552238405Sjkim	leaq	256(%r12),%r12
553296341Sdelphij.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:
695296341Sdelphij	leaq	32+128(%rsp,%r9,8),%rdx
696296341Sdelphij	pxor	%xmm4,%xmm4
697296341Sdelphij	pxor	%xmm5,%xmm5
698296341Sdelphij	movdqa	-128(%r12),%xmm0
699296341Sdelphij	movdqa	-112(%r12),%xmm1
700296341Sdelphij	movdqa	-96(%r12),%xmm2
701296341Sdelphij	movdqa	-80(%r12),%xmm3
702296341Sdelphij	pand	-128(%rdx),%xmm0
703296341Sdelphij	pand	-112(%rdx),%xmm1
704296341Sdelphij	por	%xmm0,%xmm4
705296341Sdelphij	pand	-96(%rdx),%xmm2
706296341Sdelphij	por	%xmm1,%xmm5
707296341Sdelphij	pand	-80(%rdx),%xmm3
708296341Sdelphij	por	%xmm2,%xmm4
709296341Sdelphij	por	%xmm3,%xmm5
710296341Sdelphij	movdqa	-64(%r12),%xmm0
711296341Sdelphij	movdqa	-48(%r12),%xmm1
712296341Sdelphij	movdqa	-32(%r12),%xmm2
713296341Sdelphij	movdqa	-16(%r12),%xmm3
714296341Sdelphij	pand	-64(%rdx),%xmm0
715296341Sdelphij	pand	-48(%rdx),%xmm1
716296341Sdelphij	por	%xmm0,%xmm4
717296341Sdelphij	pand	-32(%rdx),%xmm2
718296341Sdelphij	por	%xmm1,%xmm5
719296341Sdelphij	pand	-16(%rdx),%xmm3
720296341Sdelphij	por	%xmm2,%xmm4
721296341Sdelphij	por	%xmm3,%xmm5
722296341Sdelphij	movdqa	0(%r12),%xmm0
723296341Sdelphij	movdqa	16(%r12),%xmm1
724296341Sdelphij	movdqa	32(%r12),%xmm2
725296341Sdelphij	movdqa	48(%r12),%xmm3
726296341Sdelphij	pand	0(%rdx),%xmm0
727296341Sdelphij	pand	16(%rdx),%xmm1
728296341Sdelphij	por	%xmm0,%xmm4
729296341Sdelphij	pand	32(%rdx),%xmm2
730296341Sdelphij	por	%xmm1,%xmm5
731296341Sdelphij	pand	48(%rdx),%xmm3
732296341Sdelphij	por	%xmm2,%xmm4
733296341Sdelphij	por	%xmm3,%xmm5
734296341Sdelphij	movdqa	64(%r12),%xmm0
735296341Sdelphij	movdqa	80(%r12),%xmm1
736296341Sdelphij	movdqa	96(%r12),%xmm2
737296341Sdelphij	movdqa	112(%r12),%xmm3
738296341Sdelphij	pand	64(%rdx),%xmm0
739296341Sdelphij	pand	80(%rdx),%xmm1
740296341Sdelphij	por	%xmm0,%xmm4
741296341Sdelphij	pand	96(%rdx),%xmm2
742296341Sdelphij	por	%xmm1,%xmm5
743296341Sdelphij	pand	112(%rdx),%xmm3
744296341Sdelphij	por	%xmm2,%xmm4
745296341Sdelphij	por	%xmm3,%xmm5
746296341Sdelphij	por	%xmm5,%xmm4
747296341Sdelphij	pshufd	$78,%xmm4,%xmm0
748296341Sdelphij	por	%xmm4,%xmm0
749296341Sdelphij	leaq	256(%r12),%r12
750296341Sdelphij.byte	102,72,15,126,195
751296341Sdelphij
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
978296341Sdelphij
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:
1011296341Sdelphij.LSEH_begin_bn_gather5:
1012296341Sdelphij
1013296341Sdelphij.byte	0x4c,0x8d,0x14,0x24
1014296341Sdelphij.byte	0x48,0x81,0xec,0x08,0x01,0x00,0x00
1015296341Sdelphij	leaq	.Linc(%rip),%rax
1016296341Sdelphij	andq	$-16,%rsp
1017296341Sdelphij
1018296341Sdelphij	movd	%ecx,%xmm5
1019296341Sdelphij	movdqa	0(%rax),%xmm0
1020296341Sdelphij	movdqa	16(%rax),%xmm1
1021296341Sdelphij	leaq	128(%rdx),%r11
1022296341Sdelphij	leaq	128(%rsp),%rax
1023296341Sdelphij
1024296341Sdelphij	pshufd	$0,%xmm5,%xmm5
1025296341Sdelphij	movdqa	%xmm1,%xmm4
1026296341Sdelphij	movdqa	%xmm1,%xmm2
1027296341Sdelphij	paddd	%xmm0,%xmm1
1028296341Sdelphij	pcmpeqd	%xmm5,%xmm0
1029296341Sdelphij	movdqa	%xmm4,%xmm3
1030296341Sdelphij
1031296341Sdelphij	paddd	%xmm1,%xmm2
1032296341Sdelphij	pcmpeqd	%xmm5,%xmm1
1033296341Sdelphij	movdqa	%xmm0,-128(%rax)
1034296341Sdelphij	movdqa	%xmm4,%xmm0
1035296341Sdelphij
1036296341Sdelphij	paddd	%xmm2,%xmm3
1037296341Sdelphij	pcmpeqd	%xmm5,%xmm2
1038296341Sdelphij	movdqa	%xmm1,-112(%rax)
1039296341Sdelphij	movdqa	%xmm4,%xmm1
1040296341Sdelphij
1041296341Sdelphij	paddd	%xmm3,%xmm0
1042296341Sdelphij	pcmpeqd	%xmm5,%xmm3
1043296341Sdelphij	movdqa	%xmm2,-96(%rax)
1044296341Sdelphij	movdqa	%xmm4,%xmm2
1045296341Sdelphij	paddd	%xmm0,%xmm1
1046296341Sdelphij	pcmpeqd	%xmm5,%xmm0
1047296341Sdelphij	movdqa	%xmm3,-80(%rax)
1048296341Sdelphij	movdqa	%xmm4,%xmm3
1049296341Sdelphij
1050296341Sdelphij	paddd	%xmm1,%xmm2
1051296341Sdelphij	pcmpeqd	%xmm5,%xmm1
1052296341Sdelphij	movdqa	%xmm0,-64(%rax)
1053296341Sdelphij	movdqa	%xmm4,%xmm0
1054296341Sdelphij
1055296341Sdelphij	paddd	%xmm2,%xmm3
1056296341Sdelphij	pcmpeqd	%xmm5,%xmm2
1057296341Sdelphij	movdqa	%xmm1,-48(%rax)
1058296341Sdelphij	movdqa	%xmm4,%xmm1
1059296341Sdelphij
1060296341Sdelphij	paddd	%xmm3,%xmm0
1061296341Sdelphij	pcmpeqd	%xmm5,%xmm3
1062296341Sdelphij	movdqa	%xmm2,-32(%rax)
1063296341Sdelphij	movdqa	%xmm4,%xmm2
1064296341Sdelphij	paddd	%xmm0,%xmm1
1065296341Sdelphij	pcmpeqd	%xmm5,%xmm0
1066296341Sdelphij	movdqa	%xmm3,-16(%rax)
1067296341Sdelphij	movdqa	%xmm4,%xmm3
1068296341Sdelphij
1069296341Sdelphij	paddd	%xmm1,%xmm2
1070296341Sdelphij	pcmpeqd	%xmm5,%xmm1
1071296341Sdelphij	movdqa	%xmm0,0(%rax)
1072296341Sdelphij	movdqa	%xmm4,%xmm0
1073296341Sdelphij
1074296341Sdelphij	paddd	%xmm2,%xmm3
1075296341Sdelphij	pcmpeqd	%xmm5,%xmm2
1076296341Sdelphij	movdqa	%xmm1,16(%rax)
1077296341Sdelphij	movdqa	%xmm4,%xmm1
1078296341Sdelphij
1079296341Sdelphij	paddd	%xmm3,%xmm0
1080296341Sdelphij	pcmpeqd	%xmm5,%xmm3
1081296341Sdelphij	movdqa	%xmm2,32(%rax)
1082296341Sdelphij	movdqa	%xmm4,%xmm2
1083296341Sdelphij	paddd	%xmm0,%xmm1
1084296341Sdelphij	pcmpeqd	%xmm5,%xmm0
1085296341Sdelphij	movdqa	%xmm3,48(%rax)
1086296341Sdelphij	movdqa	%xmm4,%xmm3
1087296341Sdelphij
1088296341Sdelphij	paddd	%xmm1,%xmm2
1089296341Sdelphij	pcmpeqd	%xmm5,%xmm1
1090296341Sdelphij	movdqa	%xmm0,64(%rax)
1091296341Sdelphij	movdqa	%xmm4,%xmm0
1092296341Sdelphij
1093296341Sdelphij	paddd	%xmm2,%xmm3
1094296341Sdelphij	pcmpeqd	%xmm5,%xmm2
1095296341Sdelphij	movdqa	%xmm1,80(%rax)
1096296341Sdelphij	movdqa	%xmm4,%xmm1
1097296341Sdelphij
1098296341Sdelphij	paddd	%xmm3,%xmm0
1099296341Sdelphij	pcmpeqd	%xmm5,%xmm3
1100296341Sdelphij	movdqa	%xmm2,96(%rax)
1101296341Sdelphij	movdqa	%xmm4,%xmm2
1102296341Sdelphij	movdqa	%xmm3,112(%rax)
1103238405Sjkim	jmp	.Lgather
1104296341Sdelphij
1105296341Sdelphij.align	32
1106238405Sjkim.Lgather:
1107296341Sdelphij	pxor	%xmm4,%xmm4
1108296341Sdelphij	pxor	%xmm5,%xmm5
1109296341Sdelphij	movdqa	-128(%r11),%xmm0
1110296341Sdelphij	movdqa	-112(%r11),%xmm1
1111296341Sdelphij	movdqa	-96(%r11),%xmm2
1112296341Sdelphij	pand	-128(%rax),%xmm0
1113296341Sdelphij	movdqa	-80(%r11),%xmm3
1114296341Sdelphij	pand	-112(%rax),%xmm1
1115296341Sdelphij	por	%xmm0,%xmm4
1116296341Sdelphij	pand	-96(%rax),%xmm2
1117296341Sdelphij	por	%xmm1,%xmm5
1118296341Sdelphij	pand	-80(%rax),%xmm3
1119296341Sdelphij	por	%xmm2,%xmm4
1120296341Sdelphij	por	%xmm3,%xmm5
1121296341Sdelphij	movdqa	-64(%r11),%xmm0
1122296341Sdelphij	movdqa	-48(%r11),%xmm1
1123296341Sdelphij	movdqa	-32(%r11),%xmm2
1124296341Sdelphij	pand	-64(%rax),%xmm0
1125296341Sdelphij	movdqa	-16(%r11),%xmm3
1126296341Sdelphij	pand	-48(%rax),%xmm1
1127296341Sdelphij	por	%xmm0,%xmm4
1128296341Sdelphij	pand	-32(%rax),%xmm2
1129296341Sdelphij	por	%xmm1,%xmm5
1130296341Sdelphij	pand	-16(%rax),%xmm3
1131296341Sdelphij	por	%xmm2,%xmm4
1132296341Sdelphij	por	%xmm3,%xmm5
1133296341Sdelphij	movdqa	0(%r11),%xmm0
1134296341Sdelphij	movdqa	16(%r11),%xmm1
1135296341Sdelphij	movdqa	32(%r11),%xmm2
1136296341Sdelphij	pand	0(%rax),%xmm0
1137296341Sdelphij	movdqa	48(%r11),%xmm3
1138296341Sdelphij	pand	16(%rax),%xmm1
1139296341Sdelphij	por	%xmm0,%xmm4
1140296341Sdelphij	pand	32(%rax),%xmm2
1141296341Sdelphij	por	%xmm1,%xmm5
1142296341Sdelphij	pand	48(%rax),%xmm3
1143296341Sdelphij	por	%xmm2,%xmm4
1144296341Sdelphij	por	%xmm3,%xmm5
1145296341Sdelphij	movdqa	64(%r11),%xmm0
1146296341Sdelphij	movdqa	80(%r11),%xmm1
1147296341Sdelphij	movdqa	96(%r11),%xmm2
1148296341Sdelphij	pand	64(%rax),%xmm0
1149296341Sdelphij	movdqa	112(%r11),%xmm3
1150296341Sdelphij	pand	80(%rax),%xmm1
1151296341Sdelphij	por	%xmm0,%xmm4
1152296341Sdelphij	pand	96(%rax),%xmm2
1153296341Sdelphij	por	%xmm1,%xmm5
1154296341Sdelphij	pand	112(%rax),%xmm3
1155296341Sdelphij	por	%xmm2,%xmm4
1156296341Sdelphij	por	%xmm3,%xmm5
1157296341Sdelphij	por	%xmm5,%xmm4
1158296341Sdelphij	leaq	256(%r11),%r11
1159296341Sdelphij	pshufd	$78,%xmm4,%xmm0
1160296341Sdelphij	por	%xmm4,%xmm0
1161238405Sjkim	movq	%xmm0,(%rdi)
1162238405Sjkim	leaq	8(%rdi),%rdi
1163238405Sjkim	subq	$1,%rsi
1164238405Sjkim	jnz	.Lgather
1165296341Sdelphij
1166296341Sdelphij	leaq	(%r10),%rsp
1167238405Sjkim	.byte	0xf3,0xc3
1168238405Sjkim.LSEH_end_bn_gather5:
1169238405Sjkim.size	bn_gather5,.-bn_gather5
1170238405Sjkim.align	64
1171296341Sdelphij.Linc:
1172296341Sdelphij.long	0,0, 1,1
1173296341Sdelphij.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