xref: /freebsd/sys/crypto/openssl/amd64/ghash-x86_64.S (revision e0c4386e7e71d93b0edc0c8fa156263fc4a8b0b6)
1/* Do not modify. This file is auto-generated from ghash-x86_64.pl. */
2.text
3
4
5.globl	gcm_gmult_4bit
6.type	gcm_gmult_4bit,@function
7.align	16
8gcm_gmult_4bit:
9.cfi_startproc
10.byte	243,15,30,250
11	pushq	%rbx
12.cfi_adjust_cfa_offset	8
13.cfi_offset	%rbx,-16
14	pushq	%rbp
15.cfi_adjust_cfa_offset	8
16.cfi_offset	%rbp,-24
17	pushq	%r12
18.cfi_adjust_cfa_offset	8
19.cfi_offset	%r12,-32
20	pushq	%r13
21.cfi_adjust_cfa_offset	8
22.cfi_offset	%r13,-40
23	pushq	%r14
24.cfi_adjust_cfa_offset	8
25.cfi_offset	%r14,-48
26	pushq	%r15
27.cfi_adjust_cfa_offset	8
28.cfi_offset	%r15,-56
29	subq	$280,%rsp
30.cfi_adjust_cfa_offset	280
31.Lgmult_prologue:
32
33	movzbq	15(%rdi),%r8
34	leaq	.Lrem_4bit(%rip),%r11
35	xorq	%rax,%rax
36	xorq	%rbx,%rbx
37	movb	%r8b,%al
38	movb	%r8b,%bl
39	shlb	$4,%al
40	movq	$14,%rcx
41	movq	8(%rsi,%rax,1),%r8
42	movq	(%rsi,%rax,1),%r9
43	andb	$0xf0,%bl
44	movq	%r8,%rdx
45	jmp	.Loop1
46
47.align	16
48.Loop1:
49	shrq	$4,%r8
50	andq	$0xf,%rdx
51	movq	%r9,%r10
52	movb	(%rdi,%rcx,1),%al
53	shrq	$4,%r9
54	xorq	8(%rsi,%rbx,1),%r8
55	shlq	$60,%r10
56	xorq	(%rsi,%rbx,1),%r9
57	movb	%al,%bl
58	xorq	(%r11,%rdx,8),%r9
59	movq	%r8,%rdx
60	shlb	$4,%al
61	xorq	%r10,%r8
62	decq	%rcx
63	js	.Lbreak1
64
65	shrq	$4,%r8
66	andq	$0xf,%rdx
67	movq	%r9,%r10
68	shrq	$4,%r9
69	xorq	8(%rsi,%rax,1),%r8
70	shlq	$60,%r10
71	xorq	(%rsi,%rax,1),%r9
72	andb	$0xf0,%bl
73	xorq	(%r11,%rdx,8),%r9
74	movq	%r8,%rdx
75	xorq	%r10,%r8
76	jmp	.Loop1
77
78.align	16
79.Lbreak1:
80	shrq	$4,%r8
81	andq	$0xf,%rdx
82	movq	%r9,%r10
83	shrq	$4,%r9
84	xorq	8(%rsi,%rax,1),%r8
85	shlq	$60,%r10
86	xorq	(%rsi,%rax,1),%r9
87	andb	$0xf0,%bl
88	xorq	(%r11,%rdx,8),%r9
89	movq	%r8,%rdx
90	xorq	%r10,%r8
91
92	shrq	$4,%r8
93	andq	$0xf,%rdx
94	movq	%r9,%r10
95	shrq	$4,%r9
96	xorq	8(%rsi,%rbx,1),%r8
97	shlq	$60,%r10
98	xorq	(%rsi,%rbx,1),%r9
99	xorq	%r10,%r8
100	xorq	(%r11,%rdx,8),%r9
101
102	bswapq	%r8
103	bswapq	%r9
104	movq	%r8,8(%rdi)
105	movq	%r9,(%rdi)
106
107	leaq	280+48(%rsp),%rsi
108.cfi_def_cfa	%rsi,8
109	movq	-8(%rsi),%rbx
110.cfi_restore	%rbx
111	leaq	(%rsi),%rsp
112.cfi_def_cfa_register	%rsp
113.Lgmult_epilogue:
114	.byte	0xf3,0xc3
115.cfi_endproc
116.size	gcm_gmult_4bit,.-gcm_gmult_4bit
117.globl	gcm_ghash_4bit
118.type	gcm_ghash_4bit,@function
119.align	16
120gcm_ghash_4bit:
121.cfi_startproc
122.byte	243,15,30,250
123	pushq	%rbx
124.cfi_adjust_cfa_offset	8
125.cfi_offset	%rbx,-16
126	pushq	%rbp
127.cfi_adjust_cfa_offset	8
128.cfi_offset	%rbp,-24
129	pushq	%r12
130.cfi_adjust_cfa_offset	8
131.cfi_offset	%r12,-32
132	pushq	%r13
133.cfi_adjust_cfa_offset	8
134.cfi_offset	%r13,-40
135	pushq	%r14
136.cfi_adjust_cfa_offset	8
137.cfi_offset	%r14,-48
138	pushq	%r15
139.cfi_adjust_cfa_offset	8
140.cfi_offset	%r15,-56
141	subq	$280,%rsp
142.cfi_adjust_cfa_offset	280
143.Lghash_prologue:
144	movq	%rdx,%r14
145	movq	%rcx,%r15
146	subq	$-128,%rsi
147	leaq	16+128(%rsp),%rbp
148	xorl	%edx,%edx
149	movq	0+0-128(%rsi),%r8
150	movq	0+8-128(%rsi),%rax
151	movb	%al,%dl
152	shrq	$4,%rax
153	movq	%r8,%r10
154	shrq	$4,%r8
155	movq	16+0-128(%rsi),%r9
156	shlb	$4,%dl
157	movq	16+8-128(%rsi),%rbx
158	shlq	$60,%r10
159	movb	%dl,0(%rsp)
160	orq	%r10,%rax
161	movb	%bl,%dl
162	shrq	$4,%rbx
163	movq	%r9,%r10
164	shrq	$4,%r9
165	movq	%r8,0(%rbp)
166	movq	32+0-128(%rsi),%r8
167	shlb	$4,%dl
168	movq	%rax,0-128(%rbp)
169	movq	32+8-128(%rsi),%rax
170	shlq	$60,%r10
171	movb	%dl,1(%rsp)
172	orq	%r10,%rbx
173	movb	%al,%dl
174	shrq	$4,%rax
175	movq	%r8,%r10
176	shrq	$4,%r8
177	movq	%r9,8(%rbp)
178	movq	48+0-128(%rsi),%r9
179	shlb	$4,%dl
180	movq	%rbx,8-128(%rbp)
181	movq	48+8-128(%rsi),%rbx
182	shlq	$60,%r10
183	movb	%dl,2(%rsp)
184	orq	%r10,%rax
185	movb	%bl,%dl
186	shrq	$4,%rbx
187	movq	%r9,%r10
188	shrq	$4,%r9
189	movq	%r8,16(%rbp)
190	movq	64+0-128(%rsi),%r8
191	shlb	$4,%dl
192	movq	%rax,16-128(%rbp)
193	movq	64+8-128(%rsi),%rax
194	shlq	$60,%r10
195	movb	%dl,3(%rsp)
196	orq	%r10,%rbx
197	movb	%al,%dl
198	shrq	$4,%rax
199	movq	%r8,%r10
200	shrq	$4,%r8
201	movq	%r9,24(%rbp)
202	movq	80+0-128(%rsi),%r9
203	shlb	$4,%dl
204	movq	%rbx,24-128(%rbp)
205	movq	80+8-128(%rsi),%rbx
206	shlq	$60,%r10
207	movb	%dl,4(%rsp)
208	orq	%r10,%rax
209	movb	%bl,%dl
210	shrq	$4,%rbx
211	movq	%r9,%r10
212	shrq	$4,%r9
213	movq	%r8,32(%rbp)
214	movq	96+0-128(%rsi),%r8
215	shlb	$4,%dl
216	movq	%rax,32-128(%rbp)
217	movq	96+8-128(%rsi),%rax
218	shlq	$60,%r10
219	movb	%dl,5(%rsp)
220	orq	%r10,%rbx
221	movb	%al,%dl
222	shrq	$4,%rax
223	movq	%r8,%r10
224	shrq	$4,%r8
225	movq	%r9,40(%rbp)
226	movq	112+0-128(%rsi),%r9
227	shlb	$4,%dl
228	movq	%rbx,40-128(%rbp)
229	movq	112+8-128(%rsi),%rbx
230	shlq	$60,%r10
231	movb	%dl,6(%rsp)
232	orq	%r10,%rax
233	movb	%bl,%dl
234	shrq	$4,%rbx
235	movq	%r9,%r10
236	shrq	$4,%r9
237	movq	%r8,48(%rbp)
238	movq	128+0-128(%rsi),%r8
239	shlb	$4,%dl
240	movq	%rax,48-128(%rbp)
241	movq	128+8-128(%rsi),%rax
242	shlq	$60,%r10
243	movb	%dl,7(%rsp)
244	orq	%r10,%rbx
245	movb	%al,%dl
246	shrq	$4,%rax
247	movq	%r8,%r10
248	shrq	$4,%r8
249	movq	%r9,56(%rbp)
250	movq	144+0-128(%rsi),%r9
251	shlb	$4,%dl
252	movq	%rbx,56-128(%rbp)
253	movq	144+8-128(%rsi),%rbx
254	shlq	$60,%r10
255	movb	%dl,8(%rsp)
256	orq	%r10,%rax
257	movb	%bl,%dl
258	shrq	$4,%rbx
259	movq	%r9,%r10
260	shrq	$4,%r9
261	movq	%r8,64(%rbp)
262	movq	160+0-128(%rsi),%r8
263	shlb	$4,%dl
264	movq	%rax,64-128(%rbp)
265	movq	160+8-128(%rsi),%rax
266	shlq	$60,%r10
267	movb	%dl,9(%rsp)
268	orq	%r10,%rbx
269	movb	%al,%dl
270	shrq	$4,%rax
271	movq	%r8,%r10
272	shrq	$4,%r8
273	movq	%r9,72(%rbp)
274	movq	176+0-128(%rsi),%r9
275	shlb	$4,%dl
276	movq	%rbx,72-128(%rbp)
277	movq	176+8-128(%rsi),%rbx
278	shlq	$60,%r10
279	movb	%dl,10(%rsp)
280	orq	%r10,%rax
281	movb	%bl,%dl
282	shrq	$4,%rbx
283	movq	%r9,%r10
284	shrq	$4,%r9
285	movq	%r8,80(%rbp)
286	movq	192+0-128(%rsi),%r8
287	shlb	$4,%dl
288	movq	%rax,80-128(%rbp)
289	movq	192+8-128(%rsi),%rax
290	shlq	$60,%r10
291	movb	%dl,11(%rsp)
292	orq	%r10,%rbx
293	movb	%al,%dl
294	shrq	$4,%rax
295	movq	%r8,%r10
296	shrq	$4,%r8
297	movq	%r9,88(%rbp)
298	movq	208+0-128(%rsi),%r9
299	shlb	$4,%dl
300	movq	%rbx,88-128(%rbp)
301	movq	208+8-128(%rsi),%rbx
302	shlq	$60,%r10
303	movb	%dl,12(%rsp)
304	orq	%r10,%rax
305	movb	%bl,%dl
306	shrq	$4,%rbx
307	movq	%r9,%r10
308	shrq	$4,%r9
309	movq	%r8,96(%rbp)
310	movq	224+0-128(%rsi),%r8
311	shlb	$4,%dl
312	movq	%rax,96-128(%rbp)
313	movq	224+8-128(%rsi),%rax
314	shlq	$60,%r10
315	movb	%dl,13(%rsp)
316	orq	%r10,%rbx
317	movb	%al,%dl
318	shrq	$4,%rax
319	movq	%r8,%r10
320	shrq	$4,%r8
321	movq	%r9,104(%rbp)
322	movq	240+0-128(%rsi),%r9
323	shlb	$4,%dl
324	movq	%rbx,104-128(%rbp)
325	movq	240+8-128(%rsi),%rbx
326	shlq	$60,%r10
327	movb	%dl,14(%rsp)
328	orq	%r10,%rax
329	movb	%bl,%dl
330	shrq	$4,%rbx
331	movq	%r9,%r10
332	shrq	$4,%r9
333	movq	%r8,112(%rbp)
334	shlb	$4,%dl
335	movq	%rax,112-128(%rbp)
336	shlq	$60,%r10
337	movb	%dl,15(%rsp)
338	orq	%r10,%rbx
339	movq	%r9,120(%rbp)
340	movq	%rbx,120-128(%rbp)
341	addq	$-128,%rsi
342	movq	8(%rdi),%r8
343	movq	0(%rdi),%r9
344	addq	%r14,%r15
345	leaq	.Lrem_8bit(%rip),%r11
346	jmp	.Louter_loop
347.align	16
348.Louter_loop:
349	xorq	(%r14),%r9
350	movq	8(%r14),%rdx
351	leaq	16(%r14),%r14
352	xorq	%r8,%rdx
353	movq	%r9,(%rdi)
354	movq	%rdx,8(%rdi)
355	shrq	$32,%rdx
356	xorq	%rax,%rax
357	roll	$8,%edx
358	movb	%dl,%al
359	movzbl	%dl,%ebx
360	shlb	$4,%al
361	shrl	$4,%ebx
362	roll	$8,%edx
363	movq	8(%rsi,%rax,1),%r8
364	movq	(%rsi,%rax,1),%r9
365	movb	%dl,%al
366	movzbl	%dl,%ecx
367	shlb	$4,%al
368	movzbq	(%rsp,%rbx,1),%r12
369	shrl	$4,%ecx
370	xorq	%r8,%r12
371	movq	%r9,%r10
372	shrq	$8,%r8
373	movzbq	%r12b,%r12
374	shrq	$8,%r9
375	xorq	-128(%rbp,%rbx,8),%r8
376	shlq	$56,%r10
377	xorq	(%rbp,%rbx,8),%r9
378	roll	$8,%edx
379	xorq	8(%rsi,%rax,1),%r8
380	xorq	(%rsi,%rax,1),%r9
381	movb	%dl,%al
382	xorq	%r10,%r8
383	movzwq	(%r11,%r12,2),%r12
384	movzbl	%dl,%ebx
385	shlb	$4,%al
386	movzbq	(%rsp,%rcx,1),%r13
387	shrl	$4,%ebx
388	shlq	$48,%r12
389	xorq	%r8,%r13
390	movq	%r9,%r10
391	xorq	%r12,%r9
392	shrq	$8,%r8
393	movzbq	%r13b,%r13
394	shrq	$8,%r9
395	xorq	-128(%rbp,%rcx,8),%r8
396	shlq	$56,%r10
397	xorq	(%rbp,%rcx,8),%r9
398	roll	$8,%edx
399	xorq	8(%rsi,%rax,1),%r8
400	xorq	(%rsi,%rax,1),%r9
401	movb	%dl,%al
402	xorq	%r10,%r8
403	movzwq	(%r11,%r13,2),%r13
404	movzbl	%dl,%ecx
405	shlb	$4,%al
406	movzbq	(%rsp,%rbx,1),%r12
407	shrl	$4,%ecx
408	shlq	$48,%r13
409	xorq	%r8,%r12
410	movq	%r9,%r10
411	xorq	%r13,%r9
412	shrq	$8,%r8
413	movzbq	%r12b,%r12
414	movl	8(%rdi),%edx
415	shrq	$8,%r9
416	xorq	-128(%rbp,%rbx,8),%r8
417	shlq	$56,%r10
418	xorq	(%rbp,%rbx,8),%r9
419	roll	$8,%edx
420	xorq	8(%rsi,%rax,1),%r8
421	xorq	(%rsi,%rax,1),%r9
422	movb	%dl,%al
423	xorq	%r10,%r8
424	movzwq	(%r11,%r12,2),%r12
425	movzbl	%dl,%ebx
426	shlb	$4,%al
427	movzbq	(%rsp,%rcx,1),%r13
428	shrl	$4,%ebx
429	shlq	$48,%r12
430	xorq	%r8,%r13
431	movq	%r9,%r10
432	xorq	%r12,%r9
433	shrq	$8,%r8
434	movzbq	%r13b,%r13
435	shrq	$8,%r9
436	xorq	-128(%rbp,%rcx,8),%r8
437	shlq	$56,%r10
438	xorq	(%rbp,%rcx,8),%r9
439	roll	$8,%edx
440	xorq	8(%rsi,%rax,1),%r8
441	xorq	(%rsi,%rax,1),%r9
442	movb	%dl,%al
443	xorq	%r10,%r8
444	movzwq	(%r11,%r13,2),%r13
445	movzbl	%dl,%ecx
446	shlb	$4,%al
447	movzbq	(%rsp,%rbx,1),%r12
448	shrl	$4,%ecx
449	shlq	$48,%r13
450	xorq	%r8,%r12
451	movq	%r9,%r10
452	xorq	%r13,%r9
453	shrq	$8,%r8
454	movzbq	%r12b,%r12
455	shrq	$8,%r9
456	xorq	-128(%rbp,%rbx,8),%r8
457	shlq	$56,%r10
458	xorq	(%rbp,%rbx,8),%r9
459	roll	$8,%edx
460	xorq	8(%rsi,%rax,1),%r8
461	xorq	(%rsi,%rax,1),%r9
462	movb	%dl,%al
463	xorq	%r10,%r8
464	movzwq	(%r11,%r12,2),%r12
465	movzbl	%dl,%ebx
466	shlb	$4,%al
467	movzbq	(%rsp,%rcx,1),%r13
468	shrl	$4,%ebx
469	shlq	$48,%r12
470	xorq	%r8,%r13
471	movq	%r9,%r10
472	xorq	%r12,%r9
473	shrq	$8,%r8
474	movzbq	%r13b,%r13
475	shrq	$8,%r9
476	xorq	-128(%rbp,%rcx,8),%r8
477	shlq	$56,%r10
478	xorq	(%rbp,%rcx,8),%r9
479	roll	$8,%edx
480	xorq	8(%rsi,%rax,1),%r8
481	xorq	(%rsi,%rax,1),%r9
482	movb	%dl,%al
483	xorq	%r10,%r8
484	movzwq	(%r11,%r13,2),%r13
485	movzbl	%dl,%ecx
486	shlb	$4,%al
487	movzbq	(%rsp,%rbx,1),%r12
488	shrl	$4,%ecx
489	shlq	$48,%r13
490	xorq	%r8,%r12
491	movq	%r9,%r10
492	xorq	%r13,%r9
493	shrq	$8,%r8
494	movzbq	%r12b,%r12
495	movl	4(%rdi),%edx
496	shrq	$8,%r9
497	xorq	-128(%rbp,%rbx,8),%r8
498	shlq	$56,%r10
499	xorq	(%rbp,%rbx,8),%r9
500	roll	$8,%edx
501	xorq	8(%rsi,%rax,1),%r8
502	xorq	(%rsi,%rax,1),%r9
503	movb	%dl,%al
504	xorq	%r10,%r8
505	movzwq	(%r11,%r12,2),%r12
506	movzbl	%dl,%ebx
507	shlb	$4,%al
508	movzbq	(%rsp,%rcx,1),%r13
509	shrl	$4,%ebx
510	shlq	$48,%r12
511	xorq	%r8,%r13
512	movq	%r9,%r10
513	xorq	%r12,%r9
514	shrq	$8,%r8
515	movzbq	%r13b,%r13
516	shrq	$8,%r9
517	xorq	-128(%rbp,%rcx,8),%r8
518	shlq	$56,%r10
519	xorq	(%rbp,%rcx,8),%r9
520	roll	$8,%edx
521	xorq	8(%rsi,%rax,1),%r8
522	xorq	(%rsi,%rax,1),%r9
523	movb	%dl,%al
524	xorq	%r10,%r8
525	movzwq	(%r11,%r13,2),%r13
526	movzbl	%dl,%ecx
527	shlb	$4,%al
528	movzbq	(%rsp,%rbx,1),%r12
529	shrl	$4,%ecx
530	shlq	$48,%r13
531	xorq	%r8,%r12
532	movq	%r9,%r10
533	xorq	%r13,%r9
534	shrq	$8,%r8
535	movzbq	%r12b,%r12
536	shrq	$8,%r9
537	xorq	-128(%rbp,%rbx,8),%r8
538	shlq	$56,%r10
539	xorq	(%rbp,%rbx,8),%r9
540	roll	$8,%edx
541	xorq	8(%rsi,%rax,1),%r8
542	xorq	(%rsi,%rax,1),%r9
543	movb	%dl,%al
544	xorq	%r10,%r8
545	movzwq	(%r11,%r12,2),%r12
546	movzbl	%dl,%ebx
547	shlb	$4,%al
548	movzbq	(%rsp,%rcx,1),%r13
549	shrl	$4,%ebx
550	shlq	$48,%r12
551	xorq	%r8,%r13
552	movq	%r9,%r10
553	xorq	%r12,%r9
554	shrq	$8,%r8
555	movzbq	%r13b,%r13
556	shrq	$8,%r9
557	xorq	-128(%rbp,%rcx,8),%r8
558	shlq	$56,%r10
559	xorq	(%rbp,%rcx,8),%r9
560	roll	$8,%edx
561	xorq	8(%rsi,%rax,1),%r8
562	xorq	(%rsi,%rax,1),%r9
563	movb	%dl,%al
564	xorq	%r10,%r8
565	movzwq	(%r11,%r13,2),%r13
566	movzbl	%dl,%ecx
567	shlb	$4,%al
568	movzbq	(%rsp,%rbx,1),%r12
569	shrl	$4,%ecx
570	shlq	$48,%r13
571	xorq	%r8,%r12
572	movq	%r9,%r10
573	xorq	%r13,%r9
574	shrq	$8,%r8
575	movzbq	%r12b,%r12
576	movl	0(%rdi),%edx
577	shrq	$8,%r9
578	xorq	-128(%rbp,%rbx,8),%r8
579	shlq	$56,%r10
580	xorq	(%rbp,%rbx,8),%r9
581	roll	$8,%edx
582	xorq	8(%rsi,%rax,1),%r8
583	xorq	(%rsi,%rax,1),%r9
584	movb	%dl,%al
585	xorq	%r10,%r8
586	movzwq	(%r11,%r12,2),%r12
587	movzbl	%dl,%ebx
588	shlb	$4,%al
589	movzbq	(%rsp,%rcx,1),%r13
590	shrl	$4,%ebx
591	shlq	$48,%r12
592	xorq	%r8,%r13
593	movq	%r9,%r10
594	xorq	%r12,%r9
595	shrq	$8,%r8
596	movzbq	%r13b,%r13
597	shrq	$8,%r9
598	xorq	-128(%rbp,%rcx,8),%r8
599	shlq	$56,%r10
600	xorq	(%rbp,%rcx,8),%r9
601	roll	$8,%edx
602	xorq	8(%rsi,%rax,1),%r8
603	xorq	(%rsi,%rax,1),%r9
604	movb	%dl,%al
605	xorq	%r10,%r8
606	movzwq	(%r11,%r13,2),%r13
607	movzbl	%dl,%ecx
608	shlb	$4,%al
609	movzbq	(%rsp,%rbx,1),%r12
610	shrl	$4,%ecx
611	shlq	$48,%r13
612	xorq	%r8,%r12
613	movq	%r9,%r10
614	xorq	%r13,%r9
615	shrq	$8,%r8
616	movzbq	%r12b,%r12
617	shrq	$8,%r9
618	xorq	-128(%rbp,%rbx,8),%r8
619	shlq	$56,%r10
620	xorq	(%rbp,%rbx,8),%r9
621	roll	$8,%edx
622	xorq	8(%rsi,%rax,1),%r8
623	xorq	(%rsi,%rax,1),%r9
624	movb	%dl,%al
625	xorq	%r10,%r8
626	movzwq	(%r11,%r12,2),%r12
627	movzbl	%dl,%ebx
628	shlb	$4,%al
629	movzbq	(%rsp,%rcx,1),%r13
630	shrl	$4,%ebx
631	shlq	$48,%r12
632	xorq	%r8,%r13
633	movq	%r9,%r10
634	xorq	%r12,%r9
635	shrq	$8,%r8
636	movzbq	%r13b,%r13
637	shrq	$8,%r9
638	xorq	-128(%rbp,%rcx,8),%r8
639	shlq	$56,%r10
640	xorq	(%rbp,%rcx,8),%r9
641	roll	$8,%edx
642	xorq	8(%rsi,%rax,1),%r8
643	xorq	(%rsi,%rax,1),%r9
644	movb	%dl,%al
645	xorq	%r10,%r8
646	movzwq	(%r11,%r13,2),%r13
647	movzbl	%dl,%ecx
648	shlb	$4,%al
649	movzbq	(%rsp,%rbx,1),%r12
650	andl	$240,%ecx
651	shlq	$48,%r13
652	xorq	%r8,%r12
653	movq	%r9,%r10
654	xorq	%r13,%r9
655	shrq	$8,%r8
656	movzbq	%r12b,%r12
657	movl	-4(%rdi),%edx
658	shrq	$8,%r9
659	xorq	-128(%rbp,%rbx,8),%r8
660	shlq	$56,%r10
661	xorq	(%rbp,%rbx,8),%r9
662	movzwq	(%r11,%r12,2),%r12
663	xorq	8(%rsi,%rax,1),%r8
664	xorq	(%rsi,%rax,1),%r9
665	shlq	$48,%r12
666	xorq	%r10,%r8
667	xorq	%r12,%r9
668	movzbq	%r8b,%r13
669	shrq	$4,%r8
670	movq	%r9,%r10
671	shlb	$4,%r13b
672	shrq	$4,%r9
673	xorq	8(%rsi,%rcx,1),%r8
674	movzwq	(%r11,%r13,2),%r13
675	shlq	$60,%r10
676	xorq	(%rsi,%rcx,1),%r9
677	xorq	%r10,%r8
678	shlq	$48,%r13
679	bswapq	%r8
680	xorq	%r13,%r9
681	bswapq	%r9
682	cmpq	%r15,%r14
683	jb	.Louter_loop
684	movq	%r8,8(%rdi)
685	movq	%r9,(%rdi)
686
687	leaq	280+48(%rsp),%rsi
688.cfi_def_cfa	%rsi,8
689	movq	-48(%rsi),%r15
690.cfi_restore	%r15
691	movq	-40(%rsi),%r14
692.cfi_restore	%r14
693	movq	-32(%rsi),%r13
694.cfi_restore	%r13
695	movq	-24(%rsi),%r12
696.cfi_restore	%r12
697	movq	-16(%rsi),%rbp
698.cfi_restore	%rbp
699	movq	-8(%rsi),%rbx
700.cfi_restore	%rbx
701	leaq	0(%rsi),%rsp
702.cfi_def_cfa_register	%rsp
703.Lghash_epilogue:
704	.byte	0xf3,0xc3
705.cfi_endproc
706.size	gcm_ghash_4bit,.-gcm_ghash_4bit
707.globl	gcm_init_clmul
708.type	gcm_init_clmul,@function
709.align	16
710gcm_init_clmul:
711.cfi_startproc
712.L_init_clmul:
713	movdqu	(%rsi),%xmm2
714	pshufd	$78,%xmm2,%xmm2
715
716
717	pshufd	$255,%xmm2,%xmm4
718	movdqa	%xmm2,%xmm3
719	psllq	$1,%xmm2
720	pxor	%xmm5,%xmm5
721	psrlq	$63,%xmm3
722	pcmpgtd	%xmm4,%xmm5
723	pslldq	$8,%xmm3
724	por	%xmm3,%xmm2
725
726
727	pand	.L0x1c2_polynomial(%rip),%xmm5
728	pxor	%xmm5,%xmm2
729
730
731	pshufd	$78,%xmm2,%xmm6
732	movdqa	%xmm2,%xmm0
733	pxor	%xmm2,%xmm6
734	movdqa	%xmm0,%xmm1
735	pshufd	$78,%xmm0,%xmm3
736	pxor	%xmm0,%xmm3
737.byte	102,15,58,68,194,0
738.byte	102,15,58,68,202,17
739.byte	102,15,58,68,222,0
740	pxor	%xmm0,%xmm3
741	pxor	%xmm1,%xmm3
742
743	movdqa	%xmm3,%xmm4
744	psrldq	$8,%xmm3
745	pslldq	$8,%xmm4
746	pxor	%xmm3,%xmm1
747	pxor	%xmm4,%xmm0
748
749	movdqa	%xmm0,%xmm4
750	movdqa	%xmm0,%xmm3
751	psllq	$5,%xmm0
752	pxor	%xmm0,%xmm3
753	psllq	$1,%xmm0
754	pxor	%xmm3,%xmm0
755	psllq	$57,%xmm0
756	movdqa	%xmm0,%xmm3
757	pslldq	$8,%xmm0
758	psrldq	$8,%xmm3
759	pxor	%xmm4,%xmm0
760	pxor	%xmm3,%xmm1
761
762
763	movdqa	%xmm0,%xmm4
764	psrlq	$1,%xmm0
765	pxor	%xmm4,%xmm1
766	pxor	%xmm0,%xmm4
767	psrlq	$5,%xmm0
768	pxor	%xmm4,%xmm0
769	psrlq	$1,%xmm0
770	pxor	%xmm1,%xmm0
771	pshufd	$78,%xmm2,%xmm3
772	pshufd	$78,%xmm0,%xmm4
773	pxor	%xmm2,%xmm3
774	movdqu	%xmm2,0(%rdi)
775	pxor	%xmm0,%xmm4
776	movdqu	%xmm0,16(%rdi)
777.byte	102,15,58,15,227,8
778	movdqu	%xmm4,32(%rdi)
779	movdqa	%xmm0,%xmm1
780	pshufd	$78,%xmm0,%xmm3
781	pxor	%xmm0,%xmm3
782.byte	102,15,58,68,194,0
783.byte	102,15,58,68,202,17
784.byte	102,15,58,68,222,0
785	pxor	%xmm0,%xmm3
786	pxor	%xmm1,%xmm3
787
788	movdqa	%xmm3,%xmm4
789	psrldq	$8,%xmm3
790	pslldq	$8,%xmm4
791	pxor	%xmm3,%xmm1
792	pxor	%xmm4,%xmm0
793
794	movdqa	%xmm0,%xmm4
795	movdqa	%xmm0,%xmm3
796	psllq	$5,%xmm0
797	pxor	%xmm0,%xmm3
798	psllq	$1,%xmm0
799	pxor	%xmm3,%xmm0
800	psllq	$57,%xmm0
801	movdqa	%xmm0,%xmm3
802	pslldq	$8,%xmm0
803	psrldq	$8,%xmm3
804	pxor	%xmm4,%xmm0
805	pxor	%xmm3,%xmm1
806
807
808	movdqa	%xmm0,%xmm4
809	psrlq	$1,%xmm0
810	pxor	%xmm4,%xmm1
811	pxor	%xmm0,%xmm4
812	psrlq	$5,%xmm0
813	pxor	%xmm4,%xmm0
814	psrlq	$1,%xmm0
815	pxor	%xmm1,%xmm0
816	movdqa	%xmm0,%xmm5
817	movdqa	%xmm0,%xmm1
818	pshufd	$78,%xmm0,%xmm3
819	pxor	%xmm0,%xmm3
820.byte	102,15,58,68,194,0
821.byte	102,15,58,68,202,17
822.byte	102,15,58,68,222,0
823	pxor	%xmm0,%xmm3
824	pxor	%xmm1,%xmm3
825
826	movdqa	%xmm3,%xmm4
827	psrldq	$8,%xmm3
828	pslldq	$8,%xmm4
829	pxor	%xmm3,%xmm1
830	pxor	%xmm4,%xmm0
831
832	movdqa	%xmm0,%xmm4
833	movdqa	%xmm0,%xmm3
834	psllq	$5,%xmm0
835	pxor	%xmm0,%xmm3
836	psllq	$1,%xmm0
837	pxor	%xmm3,%xmm0
838	psllq	$57,%xmm0
839	movdqa	%xmm0,%xmm3
840	pslldq	$8,%xmm0
841	psrldq	$8,%xmm3
842	pxor	%xmm4,%xmm0
843	pxor	%xmm3,%xmm1
844
845
846	movdqa	%xmm0,%xmm4
847	psrlq	$1,%xmm0
848	pxor	%xmm4,%xmm1
849	pxor	%xmm0,%xmm4
850	psrlq	$5,%xmm0
851	pxor	%xmm4,%xmm0
852	psrlq	$1,%xmm0
853	pxor	%xmm1,%xmm0
854	pshufd	$78,%xmm5,%xmm3
855	pshufd	$78,%xmm0,%xmm4
856	pxor	%xmm5,%xmm3
857	movdqu	%xmm5,48(%rdi)
858	pxor	%xmm0,%xmm4
859	movdqu	%xmm0,64(%rdi)
860.byte	102,15,58,15,227,8
861	movdqu	%xmm4,80(%rdi)
862	.byte	0xf3,0xc3
863.cfi_endproc
864.size	gcm_init_clmul,.-gcm_init_clmul
865.globl	gcm_gmult_clmul
866.type	gcm_gmult_clmul,@function
867.align	16
868gcm_gmult_clmul:
869.cfi_startproc
870.byte	243,15,30,250
871.L_gmult_clmul:
872	movdqu	(%rdi),%xmm0
873	movdqa	.Lbswap_mask(%rip),%xmm5
874	movdqu	(%rsi),%xmm2
875	movdqu	32(%rsi),%xmm4
876.byte	102,15,56,0,197
877	movdqa	%xmm0,%xmm1
878	pshufd	$78,%xmm0,%xmm3
879	pxor	%xmm0,%xmm3
880.byte	102,15,58,68,194,0
881.byte	102,15,58,68,202,17
882.byte	102,15,58,68,220,0
883	pxor	%xmm0,%xmm3
884	pxor	%xmm1,%xmm3
885
886	movdqa	%xmm3,%xmm4
887	psrldq	$8,%xmm3
888	pslldq	$8,%xmm4
889	pxor	%xmm3,%xmm1
890	pxor	%xmm4,%xmm0
891
892	movdqa	%xmm0,%xmm4
893	movdqa	%xmm0,%xmm3
894	psllq	$5,%xmm0
895	pxor	%xmm0,%xmm3
896	psllq	$1,%xmm0
897	pxor	%xmm3,%xmm0
898	psllq	$57,%xmm0
899	movdqa	%xmm0,%xmm3
900	pslldq	$8,%xmm0
901	psrldq	$8,%xmm3
902	pxor	%xmm4,%xmm0
903	pxor	%xmm3,%xmm1
904
905
906	movdqa	%xmm0,%xmm4
907	psrlq	$1,%xmm0
908	pxor	%xmm4,%xmm1
909	pxor	%xmm0,%xmm4
910	psrlq	$5,%xmm0
911	pxor	%xmm4,%xmm0
912	psrlq	$1,%xmm0
913	pxor	%xmm1,%xmm0
914.byte	102,15,56,0,197
915	movdqu	%xmm0,(%rdi)
916	.byte	0xf3,0xc3
917.cfi_endproc
918.size	gcm_gmult_clmul,.-gcm_gmult_clmul
919.globl	gcm_ghash_clmul
920.type	gcm_ghash_clmul,@function
921.align	32
922gcm_ghash_clmul:
923.cfi_startproc
924.byte	243,15,30,250
925.L_ghash_clmul:
926	movdqa	.Lbswap_mask(%rip),%xmm10
927
928	movdqu	(%rdi),%xmm0
929	movdqu	(%rsi),%xmm2
930	movdqu	32(%rsi),%xmm7
931.byte	102,65,15,56,0,194
932
933	subq	$0x10,%rcx
934	jz	.Lodd_tail
935
936	movdqu	16(%rsi),%xmm6
937	movl	OPENSSL_ia32cap_P+4(%rip),%eax
938	cmpq	$0x30,%rcx
939	jb	.Lskip4x
940
941	andl	$71303168,%eax
942	cmpl	$4194304,%eax
943	je	.Lskip4x
944
945	subq	$0x30,%rcx
946	movq	$0xA040608020C0E000,%rax
947	movdqu	48(%rsi),%xmm14
948	movdqu	64(%rsi),%xmm15
949
950
951
952
953	movdqu	48(%rdx),%xmm3
954	movdqu	32(%rdx),%xmm11
955.byte	102,65,15,56,0,218
956.byte	102,69,15,56,0,218
957	movdqa	%xmm3,%xmm5
958	pshufd	$78,%xmm3,%xmm4
959	pxor	%xmm3,%xmm4
960.byte	102,15,58,68,218,0
961.byte	102,15,58,68,234,17
962.byte	102,15,58,68,231,0
963
964	movdqa	%xmm11,%xmm13
965	pshufd	$78,%xmm11,%xmm12
966	pxor	%xmm11,%xmm12
967.byte	102,68,15,58,68,222,0
968.byte	102,68,15,58,68,238,17
969.byte	102,68,15,58,68,231,16
970	xorps	%xmm11,%xmm3
971	xorps	%xmm13,%xmm5
972	movups	80(%rsi),%xmm7
973	xorps	%xmm12,%xmm4
974
975	movdqu	16(%rdx),%xmm11
976	movdqu	0(%rdx),%xmm8
977.byte	102,69,15,56,0,218
978.byte	102,69,15,56,0,194
979	movdqa	%xmm11,%xmm13
980	pshufd	$78,%xmm11,%xmm12
981	pxor	%xmm8,%xmm0
982	pxor	%xmm11,%xmm12
983.byte	102,69,15,58,68,222,0
984	movdqa	%xmm0,%xmm1
985	pshufd	$78,%xmm0,%xmm8
986	pxor	%xmm0,%xmm8
987.byte	102,69,15,58,68,238,17
988.byte	102,68,15,58,68,231,0
989	xorps	%xmm11,%xmm3
990	xorps	%xmm13,%xmm5
991
992	leaq	64(%rdx),%rdx
993	subq	$0x40,%rcx
994	jc	.Ltail4x
995
996	jmp	.Lmod4_loop
997.align	32
998.Lmod4_loop:
999.byte	102,65,15,58,68,199,0
1000	xorps	%xmm12,%xmm4
1001	movdqu	48(%rdx),%xmm11
1002.byte	102,69,15,56,0,218
1003.byte	102,65,15,58,68,207,17
1004	xorps	%xmm3,%xmm0
1005	movdqu	32(%rdx),%xmm3
1006	movdqa	%xmm11,%xmm13
1007.byte	102,68,15,58,68,199,16
1008	pshufd	$78,%xmm11,%xmm12
1009	xorps	%xmm5,%xmm1
1010	pxor	%xmm11,%xmm12
1011.byte	102,65,15,56,0,218
1012	movups	32(%rsi),%xmm7
1013	xorps	%xmm4,%xmm8
1014.byte	102,68,15,58,68,218,0
1015	pshufd	$78,%xmm3,%xmm4
1016
1017	pxor	%xmm0,%xmm8
1018	movdqa	%xmm3,%xmm5
1019	pxor	%xmm1,%xmm8
1020	pxor	%xmm3,%xmm4
1021	movdqa	%xmm8,%xmm9
1022.byte	102,68,15,58,68,234,17
1023	pslldq	$8,%xmm8
1024	psrldq	$8,%xmm9
1025	pxor	%xmm8,%xmm0
1026	movdqa	.L7_mask(%rip),%xmm8
1027	pxor	%xmm9,%xmm1
1028.byte	102,76,15,110,200
1029
1030	pand	%xmm0,%xmm8
1031.byte	102,69,15,56,0,200
1032	pxor	%xmm0,%xmm9
1033.byte	102,68,15,58,68,231,0
1034	psllq	$57,%xmm9
1035	movdqa	%xmm9,%xmm8
1036	pslldq	$8,%xmm9
1037.byte	102,15,58,68,222,0
1038	psrldq	$8,%xmm8
1039	pxor	%xmm9,%xmm0
1040	pxor	%xmm8,%xmm1
1041	movdqu	0(%rdx),%xmm8
1042
1043	movdqa	%xmm0,%xmm9
1044	psrlq	$1,%xmm0
1045.byte	102,15,58,68,238,17
1046	xorps	%xmm11,%xmm3
1047	movdqu	16(%rdx),%xmm11
1048.byte	102,69,15,56,0,218
1049.byte	102,15,58,68,231,16
1050	xorps	%xmm13,%xmm5
1051	movups	80(%rsi),%xmm7
1052.byte	102,69,15,56,0,194
1053	pxor	%xmm9,%xmm1
1054	pxor	%xmm0,%xmm9
1055	psrlq	$5,%xmm0
1056
1057	movdqa	%xmm11,%xmm13
1058	pxor	%xmm12,%xmm4
1059	pshufd	$78,%xmm11,%xmm12
1060	pxor	%xmm9,%xmm0
1061	pxor	%xmm8,%xmm1
1062	pxor	%xmm11,%xmm12
1063.byte	102,69,15,58,68,222,0
1064	psrlq	$1,%xmm0
1065	pxor	%xmm1,%xmm0
1066	movdqa	%xmm0,%xmm1
1067.byte	102,69,15,58,68,238,17
1068	xorps	%xmm11,%xmm3
1069	pshufd	$78,%xmm0,%xmm8
1070	pxor	%xmm0,%xmm8
1071
1072.byte	102,68,15,58,68,231,0
1073	xorps	%xmm13,%xmm5
1074
1075	leaq	64(%rdx),%rdx
1076	subq	$0x40,%rcx
1077	jnc	.Lmod4_loop
1078
1079.Ltail4x:
1080.byte	102,65,15,58,68,199,0
1081.byte	102,65,15,58,68,207,17
1082.byte	102,68,15,58,68,199,16
1083	xorps	%xmm12,%xmm4
1084	xorps	%xmm3,%xmm0
1085	xorps	%xmm5,%xmm1
1086	pxor	%xmm0,%xmm1
1087	pxor	%xmm4,%xmm8
1088
1089	pxor	%xmm1,%xmm8
1090	pxor	%xmm0,%xmm1
1091
1092	movdqa	%xmm8,%xmm9
1093	psrldq	$8,%xmm8
1094	pslldq	$8,%xmm9
1095	pxor	%xmm8,%xmm1
1096	pxor	%xmm9,%xmm0
1097
1098	movdqa	%xmm0,%xmm4
1099	movdqa	%xmm0,%xmm3
1100	psllq	$5,%xmm0
1101	pxor	%xmm0,%xmm3
1102	psllq	$1,%xmm0
1103	pxor	%xmm3,%xmm0
1104	psllq	$57,%xmm0
1105	movdqa	%xmm0,%xmm3
1106	pslldq	$8,%xmm0
1107	psrldq	$8,%xmm3
1108	pxor	%xmm4,%xmm0
1109	pxor	%xmm3,%xmm1
1110
1111
1112	movdqa	%xmm0,%xmm4
1113	psrlq	$1,%xmm0
1114	pxor	%xmm4,%xmm1
1115	pxor	%xmm0,%xmm4
1116	psrlq	$5,%xmm0
1117	pxor	%xmm4,%xmm0
1118	psrlq	$1,%xmm0
1119	pxor	%xmm1,%xmm0
1120	addq	$0x40,%rcx
1121	jz	.Ldone
1122	movdqu	32(%rsi),%xmm7
1123	subq	$0x10,%rcx
1124	jz	.Lodd_tail
1125.Lskip4x:
1126
1127
1128
1129
1130
1131	movdqu	(%rdx),%xmm8
1132	movdqu	16(%rdx),%xmm3
1133.byte	102,69,15,56,0,194
1134.byte	102,65,15,56,0,218
1135	pxor	%xmm8,%xmm0
1136
1137	movdqa	%xmm3,%xmm5
1138	pshufd	$78,%xmm3,%xmm4
1139	pxor	%xmm3,%xmm4
1140.byte	102,15,58,68,218,0
1141.byte	102,15,58,68,234,17
1142.byte	102,15,58,68,231,0
1143
1144	leaq	32(%rdx),%rdx
1145	nop
1146	subq	$0x20,%rcx
1147	jbe	.Leven_tail
1148	nop
1149	jmp	.Lmod_loop
1150
1151.align	32
1152.Lmod_loop:
1153	movdqa	%xmm0,%xmm1
1154	movdqa	%xmm4,%xmm8
1155	pshufd	$78,%xmm0,%xmm4
1156	pxor	%xmm0,%xmm4
1157
1158.byte	102,15,58,68,198,0
1159.byte	102,15,58,68,206,17
1160.byte	102,15,58,68,231,16
1161
1162	pxor	%xmm3,%xmm0
1163	pxor	%xmm5,%xmm1
1164	movdqu	(%rdx),%xmm9
1165	pxor	%xmm0,%xmm8
1166.byte	102,69,15,56,0,202
1167	movdqu	16(%rdx),%xmm3
1168
1169	pxor	%xmm1,%xmm8
1170	pxor	%xmm9,%xmm1
1171	pxor	%xmm8,%xmm4
1172.byte	102,65,15,56,0,218
1173	movdqa	%xmm4,%xmm8
1174	psrldq	$8,%xmm8
1175	pslldq	$8,%xmm4
1176	pxor	%xmm8,%xmm1
1177	pxor	%xmm4,%xmm0
1178
1179	movdqa	%xmm3,%xmm5
1180
1181	movdqa	%xmm0,%xmm9
1182	movdqa	%xmm0,%xmm8
1183	psllq	$5,%xmm0
1184	pxor	%xmm0,%xmm8
1185.byte	102,15,58,68,218,0
1186	psllq	$1,%xmm0
1187	pxor	%xmm8,%xmm0
1188	psllq	$57,%xmm0
1189	movdqa	%xmm0,%xmm8
1190	pslldq	$8,%xmm0
1191	psrldq	$8,%xmm8
1192	pxor	%xmm9,%xmm0
1193	pshufd	$78,%xmm5,%xmm4
1194	pxor	%xmm8,%xmm1
1195	pxor	%xmm5,%xmm4
1196
1197	movdqa	%xmm0,%xmm9
1198	psrlq	$1,%xmm0
1199.byte	102,15,58,68,234,17
1200	pxor	%xmm9,%xmm1
1201	pxor	%xmm0,%xmm9
1202	psrlq	$5,%xmm0
1203	pxor	%xmm9,%xmm0
1204	leaq	32(%rdx),%rdx
1205	psrlq	$1,%xmm0
1206.byte	102,15,58,68,231,0
1207	pxor	%xmm1,%xmm0
1208
1209	subq	$0x20,%rcx
1210	ja	.Lmod_loop
1211
1212.Leven_tail:
1213	movdqa	%xmm0,%xmm1
1214	movdqa	%xmm4,%xmm8
1215	pshufd	$78,%xmm0,%xmm4
1216	pxor	%xmm0,%xmm4
1217
1218.byte	102,15,58,68,198,0
1219.byte	102,15,58,68,206,17
1220.byte	102,15,58,68,231,16
1221
1222	pxor	%xmm3,%xmm0
1223	pxor	%xmm5,%xmm1
1224	pxor	%xmm0,%xmm8
1225	pxor	%xmm1,%xmm8
1226	pxor	%xmm8,%xmm4
1227	movdqa	%xmm4,%xmm8
1228	psrldq	$8,%xmm8
1229	pslldq	$8,%xmm4
1230	pxor	%xmm8,%xmm1
1231	pxor	%xmm4,%xmm0
1232
1233	movdqa	%xmm0,%xmm4
1234	movdqa	%xmm0,%xmm3
1235	psllq	$5,%xmm0
1236	pxor	%xmm0,%xmm3
1237	psllq	$1,%xmm0
1238	pxor	%xmm3,%xmm0
1239	psllq	$57,%xmm0
1240	movdqa	%xmm0,%xmm3
1241	pslldq	$8,%xmm0
1242	psrldq	$8,%xmm3
1243	pxor	%xmm4,%xmm0
1244	pxor	%xmm3,%xmm1
1245
1246
1247	movdqa	%xmm0,%xmm4
1248	psrlq	$1,%xmm0
1249	pxor	%xmm4,%xmm1
1250	pxor	%xmm0,%xmm4
1251	psrlq	$5,%xmm0
1252	pxor	%xmm4,%xmm0
1253	psrlq	$1,%xmm0
1254	pxor	%xmm1,%xmm0
1255	testq	%rcx,%rcx
1256	jnz	.Ldone
1257
1258.Lodd_tail:
1259	movdqu	(%rdx),%xmm8
1260.byte	102,69,15,56,0,194
1261	pxor	%xmm8,%xmm0
1262	movdqa	%xmm0,%xmm1
1263	pshufd	$78,%xmm0,%xmm3
1264	pxor	%xmm0,%xmm3
1265.byte	102,15,58,68,194,0
1266.byte	102,15,58,68,202,17
1267.byte	102,15,58,68,223,0
1268	pxor	%xmm0,%xmm3
1269	pxor	%xmm1,%xmm3
1270
1271	movdqa	%xmm3,%xmm4
1272	psrldq	$8,%xmm3
1273	pslldq	$8,%xmm4
1274	pxor	%xmm3,%xmm1
1275	pxor	%xmm4,%xmm0
1276
1277	movdqa	%xmm0,%xmm4
1278	movdqa	%xmm0,%xmm3
1279	psllq	$5,%xmm0
1280	pxor	%xmm0,%xmm3
1281	psllq	$1,%xmm0
1282	pxor	%xmm3,%xmm0
1283	psllq	$57,%xmm0
1284	movdqa	%xmm0,%xmm3
1285	pslldq	$8,%xmm0
1286	psrldq	$8,%xmm3
1287	pxor	%xmm4,%xmm0
1288	pxor	%xmm3,%xmm1
1289
1290
1291	movdqa	%xmm0,%xmm4
1292	psrlq	$1,%xmm0
1293	pxor	%xmm4,%xmm1
1294	pxor	%xmm0,%xmm4
1295	psrlq	$5,%xmm0
1296	pxor	%xmm4,%xmm0
1297	psrlq	$1,%xmm0
1298	pxor	%xmm1,%xmm0
1299.Ldone:
1300.byte	102,65,15,56,0,194
1301	movdqu	%xmm0,(%rdi)
1302	.byte	0xf3,0xc3
1303.cfi_endproc
1304.size	gcm_ghash_clmul,.-gcm_ghash_clmul
1305.globl	gcm_init_avx
1306.type	gcm_init_avx,@function
1307.align	32
1308gcm_init_avx:
1309.cfi_startproc
1310	vzeroupper
1311
1312	vmovdqu	(%rsi),%xmm2
1313	vpshufd	$78,%xmm2,%xmm2
1314
1315
1316	vpshufd	$255,%xmm2,%xmm4
1317	vpsrlq	$63,%xmm2,%xmm3
1318	vpsllq	$1,%xmm2,%xmm2
1319	vpxor	%xmm5,%xmm5,%xmm5
1320	vpcmpgtd	%xmm4,%xmm5,%xmm5
1321	vpslldq	$8,%xmm3,%xmm3
1322	vpor	%xmm3,%xmm2,%xmm2
1323
1324
1325	vpand	.L0x1c2_polynomial(%rip),%xmm5,%xmm5
1326	vpxor	%xmm5,%xmm2,%xmm2
1327
1328	vpunpckhqdq	%xmm2,%xmm2,%xmm6
1329	vmovdqa	%xmm2,%xmm0
1330	vpxor	%xmm2,%xmm6,%xmm6
1331	movq	$4,%r10
1332	jmp	.Linit_start_avx
1333.align	32
1334.Linit_loop_avx:
1335	vpalignr	$8,%xmm3,%xmm4,%xmm5
1336	vmovdqu	%xmm5,-16(%rdi)
1337	vpunpckhqdq	%xmm0,%xmm0,%xmm3
1338	vpxor	%xmm0,%xmm3,%xmm3
1339	vpclmulqdq	$0x11,%xmm2,%xmm0,%xmm1
1340	vpclmulqdq	$0x00,%xmm2,%xmm0,%xmm0
1341	vpclmulqdq	$0x00,%xmm6,%xmm3,%xmm3
1342	vpxor	%xmm0,%xmm1,%xmm4
1343	vpxor	%xmm4,%xmm3,%xmm3
1344
1345	vpslldq	$8,%xmm3,%xmm4
1346	vpsrldq	$8,%xmm3,%xmm3
1347	vpxor	%xmm4,%xmm0,%xmm0
1348	vpxor	%xmm3,%xmm1,%xmm1
1349	vpsllq	$57,%xmm0,%xmm3
1350	vpsllq	$62,%xmm0,%xmm4
1351	vpxor	%xmm3,%xmm4,%xmm4
1352	vpsllq	$63,%xmm0,%xmm3
1353	vpxor	%xmm3,%xmm4,%xmm4
1354	vpslldq	$8,%xmm4,%xmm3
1355	vpsrldq	$8,%xmm4,%xmm4
1356	vpxor	%xmm3,%xmm0,%xmm0
1357	vpxor	%xmm4,%xmm1,%xmm1
1358
1359	vpsrlq	$1,%xmm0,%xmm4
1360	vpxor	%xmm0,%xmm1,%xmm1
1361	vpxor	%xmm4,%xmm0,%xmm0
1362	vpsrlq	$5,%xmm4,%xmm4
1363	vpxor	%xmm4,%xmm0,%xmm0
1364	vpsrlq	$1,%xmm0,%xmm0
1365	vpxor	%xmm1,%xmm0,%xmm0
1366.Linit_start_avx:
1367	vmovdqa	%xmm0,%xmm5
1368	vpunpckhqdq	%xmm0,%xmm0,%xmm3
1369	vpxor	%xmm0,%xmm3,%xmm3
1370	vpclmulqdq	$0x11,%xmm2,%xmm0,%xmm1
1371	vpclmulqdq	$0x00,%xmm2,%xmm0,%xmm0
1372	vpclmulqdq	$0x00,%xmm6,%xmm3,%xmm3
1373	vpxor	%xmm0,%xmm1,%xmm4
1374	vpxor	%xmm4,%xmm3,%xmm3
1375
1376	vpslldq	$8,%xmm3,%xmm4
1377	vpsrldq	$8,%xmm3,%xmm3
1378	vpxor	%xmm4,%xmm0,%xmm0
1379	vpxor	%xmm3,%xmm1,%xmm1
1380	vpsllq	$57,%xmm0,%xmm3
1381	vpsllq	$62,%xmm0,%xmm4
1382	vpxor	%xmm3,%xmm4,%xmm4
1383	vpsllq	$63,%xmm0,%xmm3
1384	vpxor	%xmm3,%xmm4,%xmm4
1385	vpslldq	$8,%xmm4,%xmm3
1386	vpsrldq	$8,%xmm4,%xmm4
1387	vpxor	%xmm3,%xmm0,%xmm0
1388	vpxor	%xmm4,%xmm1,%xmm1
1389
1390	vpsrlq	$1,%xmm0,%xmm4
1391	vpxor	%xmm0,%xmm1,%xmm1
1392	vpxor	%xmm4,%xmm0,%xmm0
1393	vpsrlq	$5,%xmm4,%xmm4
1394	vpxor	%xmm4,%xmm0,%xmm0
1395	vpsrlq	$1,%xmm0,%xmm0
1396	vpxor	%xmm1,%xmm0,%xmm0
1397	vpshufd	$78,%xmm5,%xmm3
1398	vpshufd	$78,%xmm0,%xmm4
1399	vpxor	%xmm5,%xmm3,%xmm3
1400	vmovdqu	%xmm5,0(%rdi)
1401	vpxor	%xmm0,%xmm4,%xmm4
1402	vmovdqu	%xmm0,16(%rdi)
1403	leaq	48(%rdi),%rdi
1404	subq	$1,%r10
1405	jnz	.Linit_loop_avx
1406
1407	vpalignr	$8,%xmm4,%xmm3,%xmm5
1408	vmovdqu	%xmm5,-16(%rdi)
1409
1410	vzeroupper
1411	.byte	0xf3,0xc3
1412.cfi_endproc
1413.size	gcm_init_avx,.-gcm_init_avx
1414.globl	gcm_gmult_avx
1415.type	gcm_gmult_avx,@function
1416.align	32
1417gcm_gmult_avx:
1418.cfi_startproc
1419.byte	243,15,30,250
1420	jmp	.L_gmult_clmul
1421.cfi_endproc
1422.size	gcm_gmult_avx,.-gcm_gmult_avx
1423.globl	gcm_ghash_avx
1424.type	gcm_ghash_avx,@function
1425.align	32
1426gcm_ghash_avx:
1427.cfi_startproc
1428.byte	243,15,30,250
1429	vzeroupper
1430
1431	vmovdqu	(%rdi),%xmm10
1432	leaq	.L0x1c2_polynomial(%rip),%r10
1433	leaq	64(%rsi),%rsi
1434	vmovdqu	.Lbswap_mask(%rip),%xmm13
1435	vpshufb	%xmm13,%xmm10,%xmm10
1436	cmpq	$0x80,%rcx
1437	jb	.Lshort_avx
1438	subq	$0x80,%rcx
1439
1440	vmovdqu	112(%rdx),%xmm14
1441	vmovdqu	0-64(%rsi),%xmm6
1442	vpshufb	%xmm13,%xmm14,%xmm14
1443	vmovdqu	32-64(%rsi),%xmm7
1444
1445	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1446	vmovdqu	96(%rdx),%xmm15
1447	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1448	vpxor	%xmm14,%xmm9,%xmm9
1449	vpshufb	%xmm13,%xmm15,%xmm15
1450	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1451	vmovdqu	16-64(%rsi),%xmm6
1452	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1453	vmovdqu	80(%rdx),%xmm14
1454	vpclmulqdq	$0x00,%xmm7,%xmm9,%xmm2
1455	vpxor	%xmm15,%xmm8,%xmm8
1456
1457	vpshufb	%xmm13,%xmm14,%xmm14
1458	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm3
1459	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1460	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm4
1461	vmovdqu	48-64(%rsi),%xmm6
1462	vpxor	%xmm14,%xmm9,%xmm9
1463	vmovdqu	64(%rdx),%xmm15
1464	vpclmulqdq	$0x10,%xmm7,%xmm8,%xmm5
1465	vmovdqu	80-64(%rsi),%xmm7
1466
1467	vpshufb	%xmm13,%xmm15,%xmm15
1468	vpxor	%xmm0,%xmm3,%xmm3
1469	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1470	vpxor	%xmm1,%xmm4,%xmm4
1471	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1472	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1473	vmovdqu	64-64(%rsi),%xmm6
1474	vpxor	%xmm2,%xmm5,%xmm5
1475	vpclmulqdq	$0x00,%xmm7,%xmm9,%xmm2
1476	vpxor	%xmm15,%xmm8,%xmm8
1477
1478	vmovdqu	48(%rdx),%xmm14
1479	vpxor	%xmm3,%xmm0,%xmm0
1480	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm3
1481	vpxor	%xmm4,%xmm1,%xmm1
1482	vpshufb	%xmm13,%xmm14,%xmm14
1483	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm4
1484	vmovdqu	96-64(%rsi),%xmm6
1485	vpxor	%xmm5,%xmm2,%xmm2
1486	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1487	vpclmulqdq	$0x10,%xmm7,%xmm8,%xmm5
1488	vmovdqu	128-64(%rsi),%xmm7
1489	vpxor	%xmm14,%xmm9,%xmm9
1490
1491	vmovdqu	32(%rdx),%xmm15
1492	vpxor	%xmm0,%xmm3,%xmm3
1493	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1494	vpxor	%xmm1,%xmm4,%xmm4
1495	vpshufb	%xmm13,%xmm15,%xmm15
1496	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1497	vmovdqu	112-64(%rsi),%xmm6
1498	vpxor	%xmm2,%xmm5,%xmm5
1499	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1500	vpclmulqdq	$0x00,%xmm7,%xmm9,%xmm2
1501	vpxor	%xmm15,%xmm8,%xmm8
1502
1503	vmovdqu	16(%rdx),%xmm14
1504	vpxor	%xmm3,%xmm0,%xmm0
1505	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm3
1506	vpxor	%xmm4,%xmm1,%xmm1
1507	vpshufb	%xmm13,%xmm14,%xmm14
1508	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm4
1509	vmovdqu	144-64(%rsi),%xmm6
1510	vpxor	%xmm5,%xmm2,%xmm2
1511	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1512	vpclmulqdq	$0x10,%xmm7,%xmm8,%xmm5
1513	vmovdqu	176-64(%rsi),%xmm7
1514	vpxor	%xmm14,%xmm9,%xmm9
1515
1516	vmovdqu	(%rdx),%xmm15
1517	vpxor	%xmm0,%xmm3,%xmm3
1518	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1519	vpxor	%xmm1,%xmm4,%xmm4
1520	vpshufb	%xmm13,%xmm15,%xmm15
1521	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1522	vmovdqu	160-64(%rsi),%xmm6
1523	vpxor	%xmm2,%xmm5,%xmm5
1524	vpclmulqdq	$0x10,%xmm7,%xmm9,%xmm2
1525
1526	leaq	128(%rdx),%rdx
1527	cmpq	$0x80,%rcx
1528	jb	.Ltail_avx
1529
1530	vpxor	%xmm10,%xmm15,%xmm15
1531	subq	$0x80,%rcx
1532	jmp	.Loop8x_avx
1533
1534.align	32
1535.Loop8x_avx:
1536	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1537	vmovdqu	112(%rdx),%xmm14
1538	vpxor	%xmm0,%xmm3,%xmm3
1539	vpxor	%xmm15,%xmm8,%xmm8
1540	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm10
1541	vpshufb	%xmm13,%xmm14,%xmm14
1542	vpxor	%xmm1,%xmm4,%xmm4
1543	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm11
1544	vmovdqu	0-64(%rsi),%xmm6
1545	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1546	vpxor	%xmm2,%xmm5,%xmm5
1547	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm12
1548	vmovdqu	32-64(%rsi),%xmm7
1549	vpxor	%xmm14,%xmm9,%xmm9
1550
1551	vmovdqu	96(%rdx),%xmm15
1552	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1553	vpxor	%xmm3,%xmm10,%xmm10
1554	vpshufb	%xmm13,%xmm15,%xmm15
1555	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1556	vxorps	%xmm4,%xmm11,%xmm11
1557	vmovdqu	16-64(%rsi),%xmm6
1558	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1559	vpclmulqdq	$0x00,%xmm7,%xmm9,%xmm2
1560	vpxor	%xmm5,%xmm12,%xmm12
1561	vxorps	%xmm15,%xmm8,%xmm8
1562
1563	vmovdqu	80(%rdx),%xmm14
1564	vpxor	%xmm10,%xmm12,%xmm12
1565	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm3
1566	vpxor	%xmm11,%xmm12,%xmm12
1567	vpslldq	$8,%xmm12,%xmm9
1568	vpxor	%xmm0,%xmm3,%xmm3
1569	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm4
1570	vpsrldq	$8,%xmm12,%xmm12
1571	vpxor	%xmm9,%xmm10,%xmm10
1572	vmovdqu	48-64(%rsi),%xmm6
1573	vpshufb	%xmm13,%xmm14,%xmm14
1574	vxorps	%xmm12,%xmm11,%xmm11
1575	vpxor	%xmm1,%xmm4,%xmm4
1576	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1577	vpclmulqdq	$0x10,%xmm7,%xmm8,%xmm5
1578	vmovdqu	80-64(%rsi),%xmm7
1579	vpxor	%xmm14,%xmm9,%xmm9
1580	vpxor	%xmm2,%xmm5,%xmm5
1581
1582	vmovdqu	64(%rdx),%xmm15
1583	vpalignr	$8,%xmm10,%xmm10,%xmm12
1584	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1585	vpshufb	%xmm13,%xmm15,%xmm15
1586	vpxor	%xmm3,%xmm0,%xmm0
1587	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1588	vmovdqu	64-64(%rsi),%xmm6
1589	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1590	vpxor	%xmm4,%xmm1,%xmm1
1591	vpclmulqdq	$0x00,%xmm7,%xmm9,%xmm2
1592	vxorps	%xmm15,%xmm8,%xmm8
1593	vpxor	%xmm5,%xmm2,%xmm2
1594
1595	vmovdqu	48(%rdx),%xmm14
1596	vpclmulqdq	$0x10,(%r10),%xmm10,%xmm10
1597	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm3
1598	vpshufb	%xmm13,%xmm14,%xmm14
1599	vpxor	%xmm0,%xmm3,%xmm3
1600	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm4
1601	vmovdqu	96-64(%rsi),%xmm6
1602	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1603	vpxor	%xmm1,%xmm4,%xmm4
1604	vpclmulqdq	$0x10,%xmm7,%xmm8,%xmm5
1605	vmovdqu	128-64(%rsi),%xmm7
1606	vpxor	%xmm14,%xmm9,%xmm9
1607	vpxor	%xmm2,%xmm5,%xmm5
1608
1609	vmovdqu	32(%rdx),%xmm15
1610	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1611	vpshufb	%xmm13,%xmm15,%xmm15
1612	vpxor	%xmm3,%xmm0,%xmm0
1613	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1614	vmovdqu	112-64(%rsi),%xmm6
1615	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1616	vpxor	%xmm4,%xmm1,%xmm1
1617	vpclmulqdq	$0x00,%xmm7,%xmm9,%xmm2
1618	vpxor	%xmm15,%xmm8,%xmm8
1619	vpxor	%xmm5,%xmm2,%xmm2
1620	vxorps	%xmm12,%xmm10,%xmm10
1621
1622	vmovdqu	16(%rdx),%xmm14
1623	vpalignr	$8,%xmm10,%xmm10,%xmm12
1624	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm3
1625	vpshufb	%xmm13,%xmm14,%xmm14
1626	vpxor	%xmm0,%xmm3,%xmm3
1627	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm4
1628	vmovdqu	144-64(%rsi),%xmm6
1629	vpclmulqdq	$0x10,(%r10),%xmm10,%xmm10
1630	vxorps	%xmm11,%xmm12,%xmm12
1631	vpunpckhqdq	%xmm14,%xmm14,%xmm9
1632	vpxor	%xmm1,%xmm4,%xmm4
1633	vpclmulqdq	$0x10,%xmm7,%xmm8,%xmm5
1634	vmovdqu	176-64(%rsi),%xmm7
1635	vpxor	%xmm14,%xmm9,%xmm9
1636	vpxor	%xmm2,%xmm5,%xmm5
1637
1638	vmovdqu	(%rdx),%xmm15
1639	vpclmulqdq	$0x00,%xmm6,%xmm14,%xmm0
1640	vpshufb	%xmm13,%xmm15,%xmm15
1641	vpclmulqdq	$0x11,%xmm6,%xmm14,%xmm1
1642	vmovdqu	160-64(%rsi),%xmm6
1643	vpxor	%xmm12,%xmm15,%xmm15
1644	vpclmulqdq	$0x10,%xmm7,%xmm9,%xmm2
1645	vpxor	%xmm10,%xmm15,%xmm15
1646
1647	leaq	128(%rdx),%rdx
1648	subq	$0x80,%rcx
1649	jnc	.Loop8x_avx
1650
1651	addq	$0x80,%rcx
1652	jmp	.Ltail_no_xor_avx
1653
1654.align	32
1655.Lshort_avx:
1656	vmovdqu	-16(%rdx,%rcx,1),%xmm14
1657	leaq	(%rdx,%rcx,1),%rdx
1658	vmovdqu	0-64(%rsi),%xmm6
1659	vmovdqu	32-64(%rsi),%xmm7
1660	vpshufb	%xmm13,%xmm14,%xmm15
1661
1662	vmovdqa	%xmm0,%xmm3
1663	vmovdqa	%xmm1,%xmm4
1664	vmovdqa	%xmm2,%xmm5
1665	subq	$0x10,%rcx
1666	jz	.Ltail_avx
1667
1668	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1669	vpxor	%xmm0,%xmm3,%xmm3
1670	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1671	vpxor	%xmm15,%xmm8,%xmm8
1672	vmovdqu	-32(%rdx),%xmm14
1673	vpxor	%xmm1,%xmm4,%xmm4
1674	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1675	vmovdqu	16-64(%rsi),%xmm6
1676	vpshufb	%xmm13,%xmm14,%xmm15
1677	vpxor	%xmm2,%xmm5,%xmm5
1678	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1679	vpsrldq	$8,%xmm7,%xmm7
1680	subq	$0x10,%rcx
1681	jz	.Ltail_avx
1682
1683	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1684	vpxor	%xmm0,%xmm3,%xmm3
1685	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1686	vpxor	%xmm15,%xmm8,%xmm8
1687	vmovdqu	-48(%rdx),%xmm14
1688	vpxor	%xmm1,%xmm4,%xmm4
1689	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1690	vmovdqu	48-64(%rsi),%xmm6
1691	vpshufb	%xmm13,%xmm14,%xmm15
1692	vpxor	%xmm2,%xmm5,%xmm5
1693	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1694	vmovdqu	80-64(%rsi),%xmm7
1695	subq	$0x10,%rcx
1696	jz	.Ltail_avx
1697
1698	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1699	vpxor	%xmm0,%xmm3,%xmm3
1700	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1701	vpxor	%xmm15,%xmm8,%xmm8
1702	vmovdqu	-64(%rdx),%xmm14
1703	vpxor	%xmm1,%xmm4,%xmm4
1704	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1705	vmovdqu	64-64(%rsi),%xmm6
1706	vpshufb	%xmm13,%xmm14,%xmm15
1707	vpxor	%xmm2,%xmm5,%xmm5
1708	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1709	vpsrldq	$8,%xmm7,%xmm7
1710	subq	$0x10,%rcx
1711	jz	.Ltail_avx
1712
1713	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1714	vpxor	%xmm0,%xmm3,%xmm3
1715	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1716	vpxor	%xmm15,%xmm8,%xmm8
1717	vmovdqu	-80(%rdx),%xmm14
1718	vpxor	%xmm1,%xmm4,%xmm4
1719	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1720	vmovdqu	96-64(%rsi),%xmm6
1721	vpshufb	%xmm13,%xmm14,%xmm15
1722	vpxor	%xmm2,%xmm5,%xmm5
1723	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1724	vmovdqu	128-64(%rsi),%xmm7
1725	subq	$0x10,%rcx
1726	jz	.Ltail_avx
1727
1728	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1729	vpxor	%xmm0,%xmm3,%xmm3
1730	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1731	vpxor	%xmm15,%xmm8,%xmm8
1732	vmovdqu	-96(%rdx),%xmm14
1733	vpxor	%xmm1,%xmm4,%xmm4
1734	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1735	vmovdqu	112-64(%rsi),%xmm6
1736	vpshufb	%xmm13,%xmm14,%xmm15
1737	vpxor	%xmm2,%xmm5,%xmm5
1738	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1739	vpsrldq	$8,%xmm7,%xmm7
1740	subq	$0x10,%rcx
1741	jz	.Ltail_avx
1742
1743	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1744	vpxor	%xmm0,%xmm3,%xmm3
1745	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1746	vpxor	%xmm15,%xmm8,%xmm8
1747	vmovdqu	-112(%rdx),%xmm14
1748	vpxor	%xmm1,%xmm4,%xmm4
1749	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1750	vmovdqu	144-64(%rsi),%xmm6
1751	vpshufb	%xmm13,%xmm14,%xmm15
1752	vpxor	%xmm2,%xmm5,%xmm5
1753	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1754	vmovq	184-64(%rsi),%xmm7
1755	subq	$0x10,%rcx
1756	jmp	.Ltail_avx
1757
1758.align	32
1759.Ltail_avx:
1760	vpxor	%xmm10,%xmm15,%xmm15
1761.Ltail_no_xor_avx:
1762	vpunpckhqdq	%xmm15,%xmm15,%xmm8
1763	vpxor	%xmm0,%xmm3,%xmm3
1764	vpclmulqdq	$0x00,%xmm6,%xmm15,%xmm0
1765	vpxor	%xmm15,%xmm8,%xmm8
1766	vpxor	%xmm1,%xmm4,%xmm4
1767	vpclmulqdq	$0x11,%xmm6,%xmm15,%xmm1
1768	vpxor	%xmm2,%xmm5,%xmm5
1769	vpclmulqdq	$0x00,%xmm7,%xmm8,%xmm2
1770
1771	vmovdqu	(%r10),%xmm12
1772
1773	vpxor	%xmm0,%xmm3,%xmm10
1774	vpxor	%xmm1,%xmm4,%xmm11
1775	vpxor	%xmm2,%xmm5,%xmm5
1776
1777	vpxor	%xmm10,%xmm5,%xmm5
1778	vpxor	%xmm11,%xmm5,%xmm5
1779	vpslldq	$8,%xmm5,%xmm9
1780	vpsrldq	$8,%xmm5,%xmm5
1781	vpxor	%xmm9,%xmm10,%xmm10
1782	vpxor	%xmm5,%xmm11,%xmm11
1783
1784	vpclmulqdq	$0x10,%xmm12,%xmm10,%xmm9
1785	vpalignr	$8,%xmm10,%xmm10,%xmm10
1786	vpxor	%xmm9,%xmm10,%xmm10
1787
1788	vpclmulqdq	$0x10,%xmm12,%xmm10,%xmm9
1789	vpalignr	$8,%xmm10,%xmm10,%xmm10
1790	vpxor	%xmm11,%xmm10,%xmm10
1791	vpxor	%xmm9,%xmm10,%xmm10
1792
1793	cmpq	$0,%rcx
1794	jne	.Lshort_avx
1795
1796	vpshufb	%xmm13,%xmm10,%xmm10
1797	vmovdqu	%xmm10,(%rdi)
1798	vzeroupper
1799	.byte	0xf3,0xc3
1800.cfi_endproc
1801.size	gcm_ghash_avx,.-gcm_ghash_avx
1802.align	64
1803.Lbswap_mask:
1804.byte	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
1805.L0x1c2_polynomial:
1806.byte	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
1807.L7_mask:
1808.long	7,0,7,0
1809.L7_mask_poly:
1810.long	7,0,450,0
1811.align	64
1812.type	.Lrem_4bit,@object
1813.Lrem_4bit:
1814.long	0,0,0,471859200,0,943718400,0,610271232
1815.long	0,1887436800,0,1822425088,0,1220542464,0,1423966208
1816.long	0,3774873600,0,4246732800,0,3644850176,0,3311403008
1817.long	0,2441084928,0,2376073216,0,2847932416,0,3051356160
1818.type	.Lrem_8bit,@object
1819.Lrem_8bit:
1820.value	0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E
1821.value	0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E
1822.value	0x1C20,0x1DE2,0x1FA4,0x1E66,0x1B28,0x1AEA,0x18AC,0x196E
1823.value	0x1230,0x13F2,0x11B4,0x1076,0x1538,0x14FA,0x16BC,0x177E
1824.value	0x3840,0x3982,0x3BC4,0x3A06,0x3F48,0x3E8A,0x3CCC,0x3D0E
1825.value	0x3650,0x3792,0x35D4,0x3416,0x3158,0x309A,0x32DC,0x331E
1826.value	0x2460,0x25A2,0x27E4,0x2626,0x2368,0x22AA,0x20EC,0x212E
1827.value	0x2A70,0x2BB2,0x29F4,0x2836,0x2D78,0x2CBA,0x2EFC,0x2F3E
1828.value	0x7080,0x7142,0x7304,0x72C6,0x7788,0x764A,0x740C,0x75CE
1829.value	0x7E90,0x7F52,0x7D14,0x7CD6,0x7998,0x785A,0x7A1C,0x7BDE
1830.value	0x6CA0,0x6D62,0x6F24,0x6EE6,0x6BA8,0x6A6A,0x682C,0x69EE
1831.value	0x62B0,0x6372,0x6134,0x60F6,0x65B8,0x647A,0x663C,0x67FE
1832.value	0x48C0,0x4902,0x4B44,0x4A86,0x4FC8,0x4E0A,0x4C4C,0x4D8E
1833.value	0x46D0,0x4712,0x4554,0x4496,0x41D8,0x401A,0x425C,0x439E
1834.value	0x54E0,0x5522,0x5764,0x56A6,0x53E8,0x522A,0x506C,0x51AE
1835.value	0x5AF0,0x5B32,0x5974,0x58B6,0x5DF8,0x5C3A,0x5E7C,0x5FBE
1836.value	0xE100,0xE0C2,0xE284,0xE346,0xE608,0xE7CA,0xE58C,0xE44E
1837.value	0xEF10,0xEED2,0xEC94,0xED56,0xE818,0xE9DA,0xEB9C,0xEA5E
1838.value	0xFD20,0xFCE2,0xFEA4,0xFF66,0xFA28,0xFBEA,0xF9AC,0xF86E
1839.value	0xF330,0xF2F2,0xF0B4,0xF176,0xF438,0xF5FA,0xF7BC,0xF67E
1840.value	0xD940,0xD882,0xDAC4,0xDB06,0xDE48,0xDF8A,0xDDCC,0xDC0E
1841.value	0xD750,0xD692,0xD4D4,0xD516,0xD058,0xD19A,0xD3DC,0xD21E
1842.value	0xC560,0xC4A2,0xC6E4,0xC726,0xC268,0xC3AA,0xC1EC,0xC02E
1843.value	0xCB70,0xCAB2,0xC8F4,0xC936,0xCC78,0xCDBA,0xCFFC,0xCE3E
1844.value	0x9180,0x9042,0x9204,0x93C6,0x9688,0x974A,0x950C,0x94CE
1845.value	0x9F90,0x9E52,0x9C14,0x9DD6,0x9898,0x995A,0x9B1C,0x9ADE
1846.value	0x8DA0,0x8C62,0x8E24,0x8FE6,0x8AA8,0x8B6A,0x892C,0x88EE
1847.value	0x83B0,0x8272,0x8034,0x81F6,0x84B8,0x857A,0x873C,0x86FE
1848.value	0xA9C0,0xA802,0xAA44,0xAB86,0xAEC8,0xAF0A,0xAD4C,0xAC8E
1849.value	0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E
1850.value	0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE
1851.value	0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE
1852
1853.byte	71,72,65,83,72,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
1854.align	64
1855	.section ".note.gnu.property", "a"
1856	.p2align 3
1857	.long 1f - 0f
1858	.long 4f - 1f
1859	.long 5
18600:
1861	# "GNU" encoded with .byte, since .asciz isn't supported
1862	# on Solaris.
1863	.byte 0x47
1864	.byte 0x4e
1865	.byte 0x55
1866	.byte 0
18671:
1868	.p2align 3
1869	.long 0xc0000002
1870	.long 3f - 2f
18712:
1872	.long 3
18733:
1874	.p2align 3
18754:
1876