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