ghash-x86_64.S revision d9e397b599b13d642138480a28c14db7a136bf0
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
13d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$gmult_prologue:
14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	15(%rdi),%r8
16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	L$rem_4bit(%rip),%r11
17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%rax,%rax
18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%rbx,%rbx
19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%r8b,%al
20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%r8b,%bl
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	$14,%rcx
23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi,%rax,1),%r8
24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi,%rax,1),%r9
25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andb	$240,%bl
26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rdx
27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$oop1
28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	4
30d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$oop1:
31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	$15,%rdx
33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	(%rdi,%rcx,1),%al
35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rbx,1),%r8
37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rbx,1),%r9
39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%bl
40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%r11,%rdx,8),%r9
41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rdx
42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decq	%rcx
45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	js	L$break1
46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	$15,%rdx
49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andb	$240,%bl
55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%r11,%rdx,8),%r9
56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rdx
57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$oop1
59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	4
61d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$break1:
62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	$15,%rdx
64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andb	$240,%bl
70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%r11,%rdx,8),%r9
71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rdx
72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	$15,%rdx
76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rbx,1),%r8
79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rbx,1),%r9
81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%r11,%rdx,8),%r9
83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bswapq	%r8
85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bswapq	%r9
86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,8(%rdi)
87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,(%rdi)
88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsp),%rbx
90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	24(%rsp),%rsp
91d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$gmult_epilogue:
92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_ghash_4bit
95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_ghash_4bit
96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	4
98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_ghash_4bit:
99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbx
100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbp
101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r12
102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r13
103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r14
104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r15
105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$280,%rsp
106d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$ghash_prologue:
107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rcx,%r15
109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$-128,%rsi
110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	16+128(%rsp),%rbp
111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorl	%edx,%edx
112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0+0-128(%rsi),%r8
113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0+8-128(%rsi),%rax
114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16+0-128(%rsi),%r9
119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16+8-128(%rsi),%rbx
121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,0(%rsp)
123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,0(%rbp)
129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32+0-128(%rsi),%r8
130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,0-128(%rbp)
132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32+8-128(%rsi),%rax
133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,1(%rsp)
135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,8(%rbp)
141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48+0-128(%rsi),%r9
142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,8-128(%rbp)
144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48+8-128(%rsi),%rbx
145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,2(%rsp)
147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,16(%rbp)
153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	64+0-128(%rsi),%r8
154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,16-128(%rbp)
156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	64+8-128(%rsi),%rax
157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,3(%rsp)
159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,24(%rbp)
165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	80+0-128(%rsi),%r9
166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,24-128(%rbp)
168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	80+8-128(%rsi),%rbx
169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,4(%rsp)
171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,32(%rbp)
177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	96+0-128(%rsi),%r8
178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,32-128(%rbp)
180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	96+8-128(%rsi),%rax
181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,5(%rsp)
183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,40(%rbp)
189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	112+0-128(%rsi),%r9
190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,40-128(%rbp)
192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	112+8-128(%rsi),%rbx
193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,6(%rsp)
195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,48(%rbp)
201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	128+0-128(%rsi),%r8
202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,48-128(%rbp)
204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	128+8-128(%rsi),%rax
205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,7(%rsp)
207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,56(%rbp)
213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	144+0-128(%rsi),%r9
214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,56-128(%rbp)
216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	144+8-128(%rsi),%rbx
217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,8(%rsp)
219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,64(%rbp)
225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	160+0-128(%rsi),%r8
226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,64-128(%rbp)
228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	160+8-128(%rsi),%rax
229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,9(%rsp)
231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,72(%rbp)
237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	176+0-128(%rsi),%r9
238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,72-128(%rbp)
240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	176+8-128(%rsi),%rbx
241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,10(%rsp)
243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,80(%rbp)
249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	192+0-128(%rsi),%r8
250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,80-128(%rbp)
252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	192+8-128(%rsi),%rax
253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,11(%rsp)
255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,88(%rbp)
261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	208+0-128(%rsi),%r9
262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,88-128(%rbp)
264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	208+8-128(%rsi),%rbx
265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,12(%rsp)
267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,96(%rbp)
273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	224+0-128(%rsi),%r8
274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,96-128(%rbp)
276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	224+8-128(%rsi),%rax
277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
278d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,13(%rsp)
279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%al,%dl
281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rax
282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r10
283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,104(%rbp)
285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	240+0-128(%rsi),%r9
286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,104-128(%rbp)
288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	240+8-128(%rsi),%rbx
289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,14(%rsp)
291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rax
292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%bl,%dl
293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%rbx
294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,112(%rbp)
297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%dl
298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,112-128(%rbp)
299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,15(%rsp)
301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r10,%rbx
302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,120(%rbp)
303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,120-128(%rbp)
304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	$-128,%rsi
305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rdi),%r8
306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0(%rdi),%r9
307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r14,%r15
308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	L$rem_8bit(%rip),%r11
309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$outer_loop
310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	4
311d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$outer_loop:
312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%r14),%r9
313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%r14),%rdx
314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	16(%r14),%r14
315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%rdx
316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,(%rdi)
317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,8(%rdi)
318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%rdx
319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%rax,%rax
320d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi,%rax,1),%r8
327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi,%rax,1),%r9
328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
329d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
336d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
342d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
343d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
345d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
348d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
349d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
350d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
354d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
355d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
357d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
358d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
359d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
360d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
361d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
362d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
363d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
364d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
366d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
367d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
368d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
369d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
371d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
372d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
373d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
374d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
376d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
377d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	8(%rdi),%edx
378d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
379d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
381d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
382d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
383d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
384d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
386d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
387d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
388d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
389d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
391d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
392d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
393d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
394d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
396d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
397d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
398d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
399d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
400d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
401d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
402d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
403d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
404d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
406d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
407d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
408d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
409d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
410d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
411d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
412d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
413d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
414d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
416d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
417d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
418d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
419d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
420d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
421d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
422d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
423d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
424d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
426d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
427d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
428d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
429d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
431d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
432d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
433d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
434d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
436d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
437d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
438d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
439d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
441d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
442d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
444d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
445d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
447d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
449d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
450d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
451d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
452d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
454d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
457d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
458d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	4(%rdi),%edx
459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
460d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
461d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
462d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
463d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
464d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
465d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
466d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
467d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
468d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
469d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
470d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
471d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
472d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
473d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
474d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
475d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
476d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
477d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
478d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
479d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
480d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
481d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
482d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
483d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
484d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
485d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
486d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
487d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
488d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
489d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
490d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
491d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
492d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
493d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
494d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
495d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
496d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
497d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
498d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
499d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
500d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
501d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
502d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
503d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
504d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
505d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
506d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
507d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
508d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
509d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
510d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
511d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
512d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
513d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
514d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
515d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
516d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
517d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
518d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
519d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
520d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
521d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
522d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
523d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
524d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
525d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
526d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
527d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
528d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
529d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
530d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
531d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
532d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
533d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
534d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
535d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
536d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
537d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
538d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
539d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	0(%rdi),%edx
540d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
541d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
542d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
543d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
544d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
545d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
546d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
547d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
548d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
549d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
550d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
551d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
552d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
553d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
554d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
555d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
556d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
557d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
558d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
559d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
560d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
561d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
562d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
563d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
564d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
565d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
566d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
567d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
568d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
569d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
570d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
571d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
572d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
573d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ecx
574d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
575d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
576d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
577d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
578d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
579d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
580d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
581d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
582d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
583d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
584d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
585d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
586d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
587d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
588d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
589d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
590d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ebx
591d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
592d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rcx,1),%r13
593d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrl	$4,%ebx
594d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
595d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r13
596d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
597d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
598d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
599d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r13b,%r13
600d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
601d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rcx,8),%r8
602d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
603d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rcx,8),%r9
604d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	roll	$8,%edx
605d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
606d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
607d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movb	%dl,%al
608d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
609d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
610d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbl	%dl,%ecx
611d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%al
612d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	(%rsp,%rbx,1),%r12
613d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$240,%ecx
614d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
615d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r8,%r12
616d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
617d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
618d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r8
619d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r12b,%r12
620d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	-4(%rdi),%edx
621d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$8,%r9
622d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	-128(%rbp,%rbx,8),%r8
623d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$56,%r10
624d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rbp,%rbx,8),%r9
625d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r12,2),%r12
626d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rax,1),%r8
627d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rax,1),%r9
628d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r12
629d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
630d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r12,%r9
631d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzbq	%r8b,%r13
632d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r8
633d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%r10
634d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlb	$4,%r13b
635d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$4,%r9
636d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	8(%rsi,%rcx,1),%r8
637d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movzwq	(%r11,%r13,2),%r13
638d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$60,%r10
639d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	(%rsi,%rcx,1),%r9
640d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r10,%r8
641d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$48,%r13
642d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bswapq	%r8
643d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r13,%r9
644d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bswapq	%r9
645d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmpq	%r15,%r14
646d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jb	L$outer_loop
647d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,8(%rdi)
648d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,(%rdi)
649d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
650d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	280(%rsp),%rsi
651d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0(%rsi),%r15
652d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%r14
653d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%r13
654d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%r12
655d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rbp
656d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rbx
657d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	48(%rsi),%rsp
658d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$ghash_epilogue:
659d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
660d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
661d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_init_clmul
662d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_init_clmul
663d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
664d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	4
665d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_init_clmul:
666d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$_init_clmul:
667d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rsi),%xmm2
668d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm2,%xmm2
669d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
670d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
671d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$255,%xmm2,%xmm4
672d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm2,%xmm3
673d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm2
674d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm5
675d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$63,%xmm3
676d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pcmpgtd	%xmm4,%xmm5
677d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm3
678d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	por	%xmm3,%xmm2
679d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
680d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
681d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	L$0x1c2_polynomial(%rip),%xmm5
682d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm2
683d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
684d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
685d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm2,%xmm6
686d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm2,%xmm0
687d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm6
688d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
689d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm3
690d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
691d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,194,0
692d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,202,17
693d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,222,0
694d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
695d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
696d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
697d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm4
698d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
699d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
700d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
701d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
702d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
703d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
704d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
705d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
706d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
707d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
708d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
709d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
710d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
711d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
712d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
713d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
714d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
715d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
716d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
717d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
718d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
719d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
720d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
721d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
722d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
723d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
724d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
725d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm2,%xmm3
726d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm4
727d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm2,%xmm3
728d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm2,0(%rdi)
729d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
730d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,16(%rdi)
731d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,227,8
732d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm4,32(%rdi)
733d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
734d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm3
735d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
736d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,194,0
737d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,202,17
738d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,222,0
739d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
740d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
741d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
742d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm4
743d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
744d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
745d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
746d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
747d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
748d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
749d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
750d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
751d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
752d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
753d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
754d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
755d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
756d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
757d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
758d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
759d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
760d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
761d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
762d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
763d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
764d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
765d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
766d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
767d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
768d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
769d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
770d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm5
771d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
772d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm3
773d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
774d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,194,0
775d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,202,17
776d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,222,0
777d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
778d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
779d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
780d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm4
781d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
782d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
783d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
784d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
785d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
786d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
787d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
788d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
789d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
790d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
791d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
792d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
793d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
794d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
795d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
796d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
797d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
798d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
799d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
800d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
801d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
802d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
803d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
804d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
805d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
806d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
807d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
808d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm5,%xmm3
809d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm4
810d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm3
811d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm5,48(%rdi)
812d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
813d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,64(%rdi)
814d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,15,227,8
815d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm4,80(%rdi)
816d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
817d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
818d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_gmult_clmul
819d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_gmult_clmul
820d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
821d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	4
822d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_gmult_clmul:
823d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$_gmult_clmul:
824d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rdi),%xmm0
825d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	L$bswap_mask(%rip),%xmm5
826d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rsi),%xmm2
827d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	32(%rsi),%xmm4
828d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,197
829d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
830d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm3
831d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
832d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,194,0
833d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,202,17
834d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,220,0
835d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
836d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
837d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
838d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm4
839d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
840d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
841d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
842d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
843d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
844d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
845d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
846d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
847d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
848d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
849d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
850d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
851d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
852d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
853d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
854d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
855d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
856d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
857d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
858d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
859d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
860d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
861d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
862d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
863d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
864d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
865d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
866d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,56,0,197
867d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%rdi)
868d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
869d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
870d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_ghash_clmul
871d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_ghash_clmul
872d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
873d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	5
874d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_ghash_clmul:
875d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$_ghash_clmul:
876d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	L$bswap_mask(%rip),%xmm10
877d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
878d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rdi),%xmm0
879d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rsi),%xmm2
880d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	32(%rsi),%xmm7
881d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,56,0,194
882d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
883d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$16,%rcx
884d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jz	L$odd_tail
885d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
886d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	16(%rsi),%xmm6
887d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	_OPENSSL_ia32cap_P+4(%rip),%eax
888d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmpq	$48,%rcx
889d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jb	L$skip4x
890d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
891d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andl	$71303168,%eax
892d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmpl	$4194304,%eax
893d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	je	L$skip4x
894d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
895d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$48,%rcx
896d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	$11547335547999543296,%rax
897d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	48(%rsi),%xmm14
898d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	64(%rsi),%xmm15
899d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
900d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
901d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
902d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
903d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	48(%rdx),%xmm3
904d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	32(%rdx),%xmm11
905d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,56,0,218
906d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,218
907d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm5
908d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm3,%xmm4
909d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm4
910d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,218,0
911d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,234,17
912d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,231,0
913d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
914d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm11,%xmm13
915d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm11,%xmm12
916d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm11,%xmm12
917d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,222,0
918d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,238,17
919d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,231,16
920d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm11,%xmm3
921d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm13,%xmm5
922d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movups	80(%rsi),%xmm7
923d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm12,%xmm4
924d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
925d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	16(%rdx),%xmm11
926d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	0(%rdx),%xmm8
927d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,218
928d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,194
929d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm11,%xmm13
930d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm11,%xmm12
931d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm0
932d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm11,%xmm12
933d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,58,68,222,0
934d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
935d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm8
936d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm8
937d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,58,68,238,17
938d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,231,0
939d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm11,%xmm3
940d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm13,%xmm5
941d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
942d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	64(%rdx),%rdx
943d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$64,%rcx
944d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jc	L$tail4x
945d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
946d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$mod4_loop
947d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	5
948d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$mod4_loop:
949d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,58,68,199,0
950d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm12,%xmm4
951d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	48(%rdx),%xmm11
952d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,218
953d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,58,68,207,17
954d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm3,%xmm0
955d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	32(%rdx),%xmm3
956d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm11,%xmm13
957d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,199,16
958d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm11,%xmm12
959d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm5,%xmm1
960d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm11,%xmm12
961d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,56,0,218
962d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movups	32(%rsi),%xmm7
963d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm4,%xmm8
964d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,218,0
965d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm3,%xmm4
966d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
967d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm8
968d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm5
969d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm8
970d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm4
971d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm8,%xmm9
972d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,234,17
973d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm8
974d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm9
975d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm0
976d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	L$7_mask(%rip),%xmm8
977d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm1
978d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,76,15,110,200
979d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
980d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pand	%xmm0,%xmm8
981d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,200
982d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm9
983d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,231,0
984d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm9
985d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm9,%xmm8
986d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm9
987d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,222,0
988d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm8
989d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm0
990d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm1
991d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	0(%rdx),%xmm8
992d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
993d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm9
994d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
995d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,238,17
996d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm11,%xmm3
997d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	16(%rdx),%xmm11
998d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,218
999d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,231,16
1000d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm13,%xmm5
1001d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movups	80(%rsi),%xmm7
1002d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,194
1003d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm1
1004d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm9
1005d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
1006d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1007d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm11,%xmm13
1008d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm12,%xmm4
1009d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm11,%xmm12
1010d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm0
1011d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm1
1012d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm11,%xmm12
1013d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,58,68,222,0
1014d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1015d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
1016d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
1017d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,58,68,238,17
1018d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm11,%xmm3
1019d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm8
1020d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm8
1021d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1022d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,231,0
1023d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm13,%xmm5
1024d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1025d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	64(%rdx),%rdx
1026d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$64,%rcx
1027d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnc	L$mod4_loop
1028d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1029d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$tail4x:
1030d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,58,68,199,0
1031d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,58,68,207,17
1032d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,68,15,58,68,199,16
1033d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm12,%xmm4
1034d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm3,%xmm0
1035d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorps	%xmm5,%xmm1
1036d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm1
1037d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm8
1038d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1039d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm8
1040d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm1
1041d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1042d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm8,%xmm9
1043d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm8
1044d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm9
1045d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm1
1046d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm0
1047d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1048d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
1049d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
1050d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
1051d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
1052d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
1053d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
1054d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
1055d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
1056d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
1057d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
1058d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1059d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
1060d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1061d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1062d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
1063d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1064d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
1065d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
1066d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
1067d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1068d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1069d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
1070d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	$64,%rcx
1071d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jz	L$done
1072d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	32(%rsi),%xmm7
1073d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$16,%rcx
1074d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jz	L$odd_tail
1075d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$skip4x:
1076d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1077d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1078d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1079d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1080d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1081d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rdx),%xmm8
1082d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	16(%rdx),%xmm3
1083d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,194
1084d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,56,0,218
1085d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm0
1086d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1087d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm5
1088d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm3,%xmm4
1089d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm4
1090d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,218,0
1091d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,234,17
1092d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,231,0
1093d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1094d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	32(%rdx),%rdx
1095d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	nop
1096d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$32,%rcx
1097d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jbe	L$even_tail
1098d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	nop
1099d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$mod_loop
1100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	5
1102d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$mod_loop:
1103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
1104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm4,%xmm8
1105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm4
1106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
1107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,198,0
1109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,206,17
1110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,231,16
1111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
1113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm1
1114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rdx),%xmm9
1115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm8
1116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,202
1117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	16(%rdx),%xmm3
1118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm8
1120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm1
1121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm4
1122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,56,0,218
1123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm4,%xmm8
1124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm8
1125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
1126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm1
1127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm5
1130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm9
1132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm8
1133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
1134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm8
1135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,218,0
1136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
1137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm0
1138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
1139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm8
1140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
1141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm8
1142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm0
1143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm5,%xmm4
1144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm1
1145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm4
1146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm9
1148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,234,17
1150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm1
1151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm9
1152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
1153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm9,%xmm0
1154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	32(%rdx),%rdx
1155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,231,0
1157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
1158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$32,%rcx
1160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ja	L$mod_loop
1161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1162d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$even_tail:
1163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
1164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm4,%xmm8
1165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm4
1166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
1167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,198,0
1169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,206,17
1170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,231,16
1171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
1173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm5,%xmm1
1174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm8
1175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm8
1176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm4
1177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm4,%xmm8
1178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm8
1179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
1180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm1
1181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
1184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
1185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
1186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
1187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
1188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
1189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
1190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
1191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
1192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
1193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
1195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
1198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
1200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
1201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
1202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
1205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	testq	%rcx,%rcx
1206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	L$done
1207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1208d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$odd_tail:
1209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	(%rdx),%xmm8
1210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,69,15,56,0,194
1211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm8,%xmm0
1212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm1
1213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pshufd	$78,%xmm0,%xmm3
1214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
1215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,194,0
1216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,202,17
1217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,15,58,68,223,0
1218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
1219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm3
1220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm3,%xmm4
1222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
1223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm4
1224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
1225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
1228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
1229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$5,%xmm0
1230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm3
1231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$1,%xmm0
1232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm0
1233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psllq	$57,%xmm0
1234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm3
1235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$8,%xmm0
1236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrldq	$8,%xmm3
1237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm3,%xmm1
1239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,%xmm4
1242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm1
1244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm4
1245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$5,%xmm0
1246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm4,%xmm0
1247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	psrlq	$1,%xmm0
1248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm1,%xmm0
1249d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$done:
1250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,65,15,56,0,194
1251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqu	%xmm0,(%rdi)
1252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
1253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_init_avx
1255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_init_avx
1256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	5
1258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_init_avx:
1259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$_init_clmul
1260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_gmult_avx
1262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_gmult_avx
1263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	5
1265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_gmult_avx:
1266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$_gmult_clmul
1267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	_gcm_ghash_avx
1269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.private_extern _gcm_ghash_avx
1270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	5
1272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley_gcm_ghash_avx:
1273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	L$_ghash_clmul
1274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	6
1276d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$bswap_mask:
1277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
1278d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$0x1c2_polynomial:
1279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
1280d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$7_mask:
1281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	7,0,7,0
1282d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$7_mask_poly:
1283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	7,0,450,0
1284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	6
1285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1286d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$rem_4bit:
1287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	0,0,0,471859200,0,943718400,0,610271232
1288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	0,1887436800,0,1822425088,0,1220542464,0,1423966208
1289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	0,3774873600,0,4246732800,0,3644850176,0,3311403008
1290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.long	0,2441084928,0,2376073216,0,2847932416,0,3051356160
1291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1292d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyL$rem_8bit:
1293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E
1294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E
1295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x1C20,0x1DE2,0x1FA4,0x1E66,0x1B28,0x1AEA,0x18AC,0x196E
1296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x1230,0x13F2,0x11B4,0x1076,0x1538,0x14FA,0x16BC,0x177E
1297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x3840,0x3982,0x3BC4,0x3A06,0x3F48,0x3E8A,0x3CCC,0x3D0E
1298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x3650,0x3792,0x35D4,0x3416,0x3158,0x309A,0x32DC,0x331E
1299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x2460,0x25A2,0x27E4,0x2626,0x2368,0x22AA,0x20EC,0x212E
1300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x2A70,0x2BB2,0x29F4,0x2836,0x2D78,0x2CBA,0x2EFC,0x2F3E
1301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x7080,0x7142,0x7304,0x72C6,0x7788,0x764A,0x740C,0x75CE
1302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x7E90,0x7F52,0x7D14,0x7CD6,0x7998,0x785A,0x7A1C,0x7BDE
1303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x6CA0,0x6D62,0x6F24,0x6EE6,0x6BA8,0x6A6A,0x682C,0x69EE
1304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x62B0,0x6372,0x6134,0x60F6,0x65B8,0x647A,0x663C,0x67FE
1305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x48C0,0x4902,0x4B44,0x4A86,0x4FC8,0x4E0A,0x4C4C,0x4D8E
1306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x46D0,0x4712,0x4554,0x4496,0x41D8,0x401A,0x425C,0x439E
1307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x54E0,0x5522,0x5764,0x56A6,0x53E8,0x522A,0x506C,0x51AE
1308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x5AF0,0x5B32,0x5974,0x58B6,0x5DF8,0x5C3A,0x5E7C,0x5FBE
1309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xE100,0xE0C2,0xE284,0xE346,0xE608,0xE7CA,0xE58C,0xE44E
1310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xEF10,0xEED2,0xEC94,0xED56,0xE818,0xE9DA,0xEB9C,0xEA5E
1311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xFD20,0xFCE2,0xFEA4,0xFF66,0xFA28,0xFBEA,0xF9AC,0xF86E
1312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xF330,0xF2F2,0xF0B4,0xF176,0xF438,0xF5FA,0xF7BC,0xF67E
1313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xD940,0xD882,0xDAC4,0xDB06,0xDE48,0xDF8A,0xDDCC,0xDC0E
1314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xD750,0xD692,0xD4D4,0xD516,0xD058,0xD19A,0xD3DC,0xD21E
1315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xC560,0xC4A2,0xC6E4,0xC726,0xC268,0xC3AA,0xC1EC,0xC02E
1316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xCB70,0xCAB2,0xC8F4,0xC936,0xCC78,0xCDBA,0xCFFC,0xCE3E
1317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x9180,0x9042,0x9204,0x93C6,0x9688,0x974A,0x950C,0x94CE
1318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x9F90,0x9E52,0x9C14,0x9DD6,0x9898,0x995A,0x9B1C,0x9ADE
1319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x8DA0,0x8C62,0x8E24,0x8FE6,0x8AA8,0x8B6A,0x892C,0x88EE
1320d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0x83B0,0x8272,0x8034,0x81F6,0x84B8,0x857A,0x873C,0x86FE
1321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xA9C0,0xA802,0xAA44,0xAB86,0xAEC8,0xAF0A,0xAD4C,0xAC8E
1322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E
1323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE
1324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.value	0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE
1325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1326d9e397b599b13d642138480a28c14db7a136bf0Adam 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
1327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.p2align	6
1328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
1329