1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if defined(__x86_64__)
2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.text
3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
4a4fb56a4374ac52a0b1c23e3654d4426c2e4adb3Adam Langley.extern	OPENSSL_ia32cap_P
5a4fb56a4374ac52a0b1c23e3654d4426c2e4adb3Adam Langley.hidden OPENSSL_ia32cap_P
6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_sqr
8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_sqr
9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_sqr,@function
10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
11d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_sqr:
12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbx
13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbp
14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r12
15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r13
16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r14
17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r15
18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$128+24,%rsp
20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lsqr_body:
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbp
22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rdx
23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%rax
24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rcx,128(%rsp)
25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	.Loop_sqr
26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_sqr:
29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r8d,128+8(%rsp)
30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rdx
33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,%r8
34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%rax
35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r14
66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rbx,%rax
70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r15
71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r8,%r8
74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%rcx
75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%r9,%r9
76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,(%rsp)
79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rdx,%r8
80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,8(%rsp)
83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%rcx
84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%r8
87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%rax
88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r8
89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r8
95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r11
99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r8
103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r12
107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r8
111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r13
115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r8
119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r14
123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r8
127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rax
129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r15
131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r8
132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,%rdx
133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r8
134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rdx,%rdx
136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rcx,%r10,2),%r10
137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,%rbx
138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%r11,%r11
139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%rdx,%r10
143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,16(%rsp)
146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,24(%rsp)
147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%rbx
148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%r9
151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r9
153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rcx
156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rcx
157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r9
159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rcx,%r13
163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rcx
164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rcx
165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r9
167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rcx,%r14
171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rcx
172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rcx
173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r9
175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,%r10
176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rbx,%r12,2),%r12
177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rcx,%r15
181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rcx
182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rcx
183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r9
185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%r10
186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%rax
188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rcx,%r8
190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,%rcx
194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%r10,%r13,2),%r13
195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%rdx,%r12
199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,32(%rsp)
202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,40(%rsp)
203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%rcx
204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%r10
207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r10
209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r10
215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r15
219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r10
223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,%r12
224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rcx,%r14,2),%r14
225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r8
229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r10
233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%r12
234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,%rax
236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r9
238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,%rbx
242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%r12,%r15,2),%r15
243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%rdx,%r14
247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,48(%rsp)
250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,56(%rsp)
251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%rbx
252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%r11
255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r11
257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rcx
260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rcx
261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r11
263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%r12
267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rbx,%r8,2),%r8
268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rcx,%r9
269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rcx
270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rcx
271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r11
273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%r12
274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,%rax
276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rcx,%r10
278d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%rcx
282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%r12,%r9,2),%r9
283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%rdx,%r8
287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,64(%rsp)
290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,72(%rsp)
291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%rcx
292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%r12
295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r12
297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbx
300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rbx
301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r12
303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,%rax
305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,%r15
306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rcx,%r10,2),%r10
307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$63,%r15
309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rbx,%r11
310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,%rbx
314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%r15,%r11,2),%r11
315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%rdx,%r10
319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
320d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,80(%rsp)
322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,88(%rsp)
323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%r13
326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%r13
328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
329d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,%rax
330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	xorq	%r14,%r14
334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$1,%rbx
335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%r12,%r12
336d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%r13,%r13
337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%r14,%r14
338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	%rdx,%r12
342d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
343d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,96(%rsp)
345d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,104(%rsp)
346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
348d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
349d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rax
350d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rdx,%r14
354d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
355d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,112(%rsp)
356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,120(%rsp)
357d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
358d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsp),%r8
359d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsp),%r9
360d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsp),%r10
361d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsp),%r11
362d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsp),%r12
363d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsp),%r13
364d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsp),%r14
365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsp),%r15
366d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
367d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_reduce
368d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
369d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	64(%rsp),%r8
370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	72(%rsp),%r9
371d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	80(%rsp),%r10
372d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	88(%rsp),%r11
373d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	96(%rsp),%r12
374d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	104(%rsp),%r13
375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	112(%rsp),%r14
376d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	120(%rsp),%r15
377d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sbbq	%rcx,%rcx
378d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
379d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_subtract
380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
381d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rdx
382d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,%rax
383d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	128+8(%rsp),%r8d
384d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdi,%rsi
385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
386d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%r8d
387d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	.Loop_sqr
388d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
389d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128+24+48(%rsp),%rax
390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-48(%rax),%r15
391d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-40(%rax),%r14
392d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-32(%rax),%r13
393d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-24(%rax),%r12
394d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-16(%rax),%rbp
395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-8(%rax),%rbx
396d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rax),%rsp
397d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lsqr_epilogue:
398d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
399d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_sqr,.-rsaz_512_sqr
400d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_mul
401d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_mul
402d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_mul,@function
403d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
404d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_mul:
405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbx
406d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbp
407d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r12
408d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r13
409d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r14
410d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r15
411d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
412d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$128+24,%rsp
413d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_body:
414d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,110,199
415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,110,201
416d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,128(%rsp)
417d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rdx),%rbx
418d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbp
419d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_mul
420d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
421d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,199
422d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,205
423d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
424d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsp),%r8
425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsp),%r9
426d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsp),%r10
427d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsp),%r11
428d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsp),%r12
429d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsp),%r13
430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsp),%r14
431d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsp),%r15
432d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
433d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_reduce
434d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	64(%rsp),%r8
435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	72(%rsp),%r9
436d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	80(%rsp),%r10
437d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	88(%rsp),%r11
438d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	96(%rsp),%r12
439d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	104(%rsp),%r13
440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	112(%rsp),%r14
441d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	120(%rsp),%r15
442d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sbbq	%rcx,%rcx
443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
444d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_subtract
445d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128+24+48(%rsp),%rax
447d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-48(%rax),%r15
448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-40(%rax),%r14
449d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-32(%rax),%r13
450d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-24(%rax),%r12
451d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-16(%rax),%rbp
452d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-8(%rax),%rbx
453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rax),%rsp
454d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_epilogue:
455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_mul,.-rsaz_512_mul
457d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_mul_gather4
458d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_mul_gather4
459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_mul_gather4,@function
460d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
461d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_mul_gather4:
462d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbx
463d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbp
464d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r12
465d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r13
466d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r14
467d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r15
468d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
469d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r9d,%r9d
470d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$128+24,%rsp
471d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_gather4_body:
472d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	64(%rdx,%r9,4),%eax
473d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,110,199
474d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	(%rdx,%r9,4),%ebx
475d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,110,201
476d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,128(%rsp)
477d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
478d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$32,%rax
479d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%rax,%rbx
480d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
481d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%rcx
482d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128(%rdx,%r9,4),%rbp
483d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
484d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,(%rsp)
485d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rcx,%rax
486d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r8
487d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
488d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
489d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movd	(%rbp),%xmm4
490d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
491d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%rax
492d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
493d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
494d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
495d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
496d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movd	64(%rbp),%xmm5
497d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
498d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
499d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
500d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
501d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
502d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
503d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$4,%xmm5
504d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
505d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
506d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
507d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
508d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
509d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
510d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	por	%xmm5,%xmm4
511d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
512d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
513d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
514d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
515d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
516d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
517d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
518d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
519d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
520d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
521d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
522d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
523d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128(%rbp),%rbp
524d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
525d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
526d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
527d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r14
528d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
529d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
530d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,227
531d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
532d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
533d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r15
534d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
535d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
536d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rsp),%rdi
537d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$7,%ecx
538d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	.Loop_mul_gather
539d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
540d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
541d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_mul_gather:
542d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
543d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
544d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%rax
545d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
546d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r8
547d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r8
548d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
549d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
550d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movd	(%rbp),%xmm4
551d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
552d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%rax
553d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
554d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r9,%r8
555d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
556d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
557d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
558d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
559d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movd	64(%rbp),%xmm5
560d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
561d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
562d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
563d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r10,%r9
564d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
565d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
566d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
567d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
568d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pslldq	$4,%xmm5
569d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
570d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
571d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
572d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r11,%r10
573d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
574d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
575d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
576d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
577d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	por	%xmm5,%xmm4
578d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
579d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
580d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
581d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r12,%r11
582d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
583d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
584d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
585d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
586d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
587d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
588d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
589d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r13,%r12
590d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
591d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
592d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
593d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
594d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
595d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
596d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
597d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r14,%r13
598d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
599d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r14
600d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
601d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
602d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,227
603d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
604d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
605d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
606d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r15,%r14
607d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r15
608d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
609d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
610d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128(%rbp),%rbp
611d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rdi),%rdi
612d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
613d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%ecx
614d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	.Loop_mul_gather
615d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
616d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
617d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,8(%rdi)
618d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,16(%rdi)
619d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,24(%rdi)
620d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,32(%rdi)
621d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,40(%rdi)
622d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,48(%rdi)
623d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,56(%rdi)
624d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
625d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,199
626d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,205
627d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
628d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsp),%r8
629d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsp),%r9
630d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsp),%r10
631d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsp),%r11
632d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsp),%r12
633d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsp),%r13
634d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsp),%r14
635d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsp),%r15
636d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
637d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_reduce
638d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	64(%rsp),%r8
639d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	72(%rsp),%r9
640d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	80(%rsp),%r10
641d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	88(%rsp),%r11
642d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	96(%rsp),%r12
643d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	104(%rsp),%r13
644d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	112(%rsp),%r14
645d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	120(%rsp),%r15
646d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sbbq	%rcx,%rcx
647d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
648d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_subtract
649d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
650d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128+24+48(%rsp),%rax
651d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-48(%rax),%r15
652d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-40(%rax),%r14
653d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-32(%rax),%r13
654d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-24(%rax),%r12
655d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-16(%rax),%rbp
656d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-8(%rax),%rbx
657d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rax),%rsp
658d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_gather4_epilogue:
659d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
660d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_mul_gather4,.-rsaz_512_mul_gather4
661d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_mul_scatter4
662d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_mul_scatter4
663d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_mul_scatter4,@function
664d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
665d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_mul_scatter4:
666d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbx
667d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbp
668d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r12
669d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r13
670d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r14
671d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r15
672d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
673d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r9d,%r9d
674d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$128+24,%rsp
675d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_scatter4_body:
676d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%r8,%r9,4),%r8
677d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,110,199
678d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,110,202
679d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,73,15,110,208
680d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rcx,128(%rsp)
681d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
682d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdi,%rbp
683d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rdi),%rbx
684d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_mul
685d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
686d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,199
687d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,205
688d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
689d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsp),%r8
690d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsp),%r9
691d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsp),%r10
692d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsp),%r11
693d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsp),%r12
694d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsp),%r13
695d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsp),%r14
696d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsp),%r15
697d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
698d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_reduce
699d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	64(%rsp),%r8
700d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	72(%rsp),%r9
701d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	80(%rsp),%r10
702d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	88(%rsp),%r11
703d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	96(%rsp),%r12
704d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	104(%rsp),%r13
705d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	112(%rsp),%r14
706d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	120(%rsp),%r15
707d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.byte	102,72,15,126,214
708d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sbbq	%rcx,%rcx
709d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
710d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_subtract
711d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
712d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r8d,0(%rsi)
713d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r8
714d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r9d,128(%rsi)
715d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r9
716d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r10d,256(%rsi)
717d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r10
718d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r11d,384(%rsi)
719d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r11
720d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r12d,512(%rsi)
721d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r12
722d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r13d,640(%rsi)
723d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r13
724d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r14d,768(%rsi)
725d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r14
726d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r15d,896(%rsi)
727d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%r15
728d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r8d,64(%rsi)
729d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r9d,192(%rsi)
730d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r10d,320(%rsi)
731d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r11d,448(%rsi)
732d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r12d,576(%rsi)
733d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r13d,704(%rsi)
734d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r14d,832(%rsi)
735d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%r15d,960(%rsi)
736d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
737d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128+24+48(%rsp),%rax
738d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-48(%rax),%r15
739d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-40(%rax),%r14
740d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-32(%rax),%r13
741d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-24(%rax),%r12
742d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-16(%rax),%rbp
743d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-8(%rax),%rbx
744d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rax),%rsp
745d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_scatter4_epilogue:
746d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
747d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_mul_scatter4,.-rsaz_512_mul_scatter4
748d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_mul_by_one
749d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_mul_by_one
750d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_mul_by_one,@function
751d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
752d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_mul_by_one:
753d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbx
754d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%rbp
755d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r12
756d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r13
757d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r14
758d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pushq	%r15
759d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
760d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subq	$128+24,%rsp
761d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_by_one_body:
762d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%rbp
763d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rcx,128(%rsp)
764d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
765d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%r8
766d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	pxor	%xmm0,%xmm0
767d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%r9
768d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%r10
769d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%r11
770d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%r12
771d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%r13
772d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%r14
773d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%r15
774d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
775d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,(%rsp)
776d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,16(%rsp)
777d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,32(%rsp)
778d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,48(%rsp)
779d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,64(%rsp)
780d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,80(%rsp)
781d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movdqa	%xmm0,96(%rsp)
782d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	call	__rsaz_512_reduce
783d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
784d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,8(%rdi)
785d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,16(%rdi)
786d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,24(%rdi)
787d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,32(%rdi)
788d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,40(%rdi)
789d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,48(%rdi)
790d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,56(%rdi)
791d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
792d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128+24+48(%rsp),%rax
793d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-48(%rax),%r15
794d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-40(%rax),%r14
795d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-32(%rax),%r13
796d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-24(%rax),%r12
797d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-16(%rax),%rbp
798d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	-8(%rax),%rbx
799d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rax),%rsp
800d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lmul_by_one_epilogue:
801d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
802d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_mul_by_one,.-rsaz_512_mul_by_one
803d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	__rsaz_512_reduce,@function
804d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
805d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__rsaz_512_reduce:
806d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,%rbx
807d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	imulq	128+8(%rsp),%rbx
808d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0(%rbp),%rax
809d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$8,%ecx
810d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	.Lreduction_loop
811d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
812d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
813d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lreduction_loop:
814d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
815d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rbp),%rax
816d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	negq	%r8
817d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r8
818d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r8
819d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
820d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
821d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
822d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rbp),%rax
823d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
824d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r9,%r8
825d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
826d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
827d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
828d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
829d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
830d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rbp),%rax
831d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
832d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r10,%r9
833d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
834d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
835d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
836d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
837d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
838d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rbp),%rax
839d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
840d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r11,%r10
841d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	128+8(%rsp),%rsi
842d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
843d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
844d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
845d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
846d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
847d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
848d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
849d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rbp),%rax
850d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
851d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	imulq	%r8,%rsi
852d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r12,%r11
853d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
854d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
855d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
856d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
857d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
858d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rbp),%rax
859d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
860d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r13,%r12
861d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
862d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
863d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
864d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
865d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
866d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rbp),%rax
867d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
868d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r14,%r13
869d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
870d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r14
871d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
872d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
873d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rsi,%rbx
874d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
875d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0(%rbp),%rax
876d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
877d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r15,%r14
878d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r15
879d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
880d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
881d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%ecx
882d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jne	.Lreduction_loop
883d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
884d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
885d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	__rsaz_512_reduce,.-__rsaz_512_reduce
886d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	__rsaz_512_subtract,@function
887d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
888d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__rsaz_512_subtract:
889d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
890d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,8(%rdi)
891d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,16(%rdi)
892d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,24(%rdi)
893d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,32(%rdi)
894d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,40(%rdi)
895d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,48(%rdi)
896d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,56(%rdi)
897d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
898d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	0(%rbp),%r8
899d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rbp),%r9
900d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	negq	%r8
901d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r9
902d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r8
903d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rbp),%r10
904d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r9
905d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r10
906d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rbp),%r11
907d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r10
908d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r11
909d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rbp),%r12
910d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r11
911d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r12
912d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rbp),%r13
913d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r12
914d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r13
915d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rbp),%r14
916d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r13
917d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r14
918d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rbp),%r15
919d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r14
920d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	notq	%r15
921d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	andq	%rcx,%r15
922d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
923d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	(%rdi),%r8
924d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	8(%rdi),%r9
925d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	16(%rdi),%r10
926d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	24(%rdi),%r11
927d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	32(%rdi),%r12
928d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	40(%rdi),%r13
929d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	48(%rdi),%r14
930d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	56(%rdi),%r15
931d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
932d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
933d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,8(%rdi)
934d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,16(%rdi)
935d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,24(%rdi)
936d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,32(%rdi)
937d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,40(%rdi)
938d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,48(%rdi)
939d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,56(%rdi)
940d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
941d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
942d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	__rsaz_512_subtract,.-__rsaz_512_subtract
943d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	__rsaz_512_mul,@function
944d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
945d9e397b599b13d642138480a28c14db7a136bf0Adam Langley__rsaz_512_mul:
946d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rsp),%rdi
947d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
948d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
949d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
950d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,(%rdi)
951d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%rax
952d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r8
953d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
954d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
955d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
956d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%rax
957d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
958d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
959d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
960d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
961d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
962d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
963d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
964d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
965d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
966d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
967d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
968d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
969d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
970d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
971d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
972d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
973d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
974d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
975d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
976d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
977d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
978d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
979d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
980d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
981d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
982d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
983d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
984d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
985d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
986d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
987d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
988d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r14
989d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
990d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
991d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
992d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
993d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r15
994d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
995d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
996d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rbp),%rbp
997d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rdi),%rdi
998d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
999d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$7,%ecx
1000d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	.Loop_mul
1001d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1002d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	32
1003d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_mul:
1004d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rbp),%rbx
1005d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1006d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r8
1007d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	8(%rsi),%rax
1008d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
1009d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r8
1010d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r8
1011d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1012d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1013d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r9
1014d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	16(%rsi),%rax
1015d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1016d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r9,%r8
1017d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r9
1018d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r9
1019d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1020d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1021d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r10
1022d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	24(%rsi),%rax
1023d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1024d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r10,%r9
1025d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r10
1026d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r10
1027d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1028d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1029d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r11
1030d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	32(%rsi),%rax
1031d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1032d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r11,%r10
1033d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r11
1034d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r11
1035d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1036d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1037d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r12
1038d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	40(%rsi),%rax
1039d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1040d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r12,%r11
1041d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r12
1042d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r12
1043d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1044d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1045d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r13
1046d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	48(%rsi),%rax
1047d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1048d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r13,%r12
1049d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r13
1050d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r13
1051d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1052d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1053d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r14
1054d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	56(%rsi),%rax
1055d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1056d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r14,%r13
1057d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r14
1058d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rbp),%rbp
1059d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r14
1060d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1061d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mulq	%rbx
1062d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%rax,%r15
1063d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
1064d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%rdx
1065d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addq	%r15,%r14
1066d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rdx,%r15
1067d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adcq	$0,%r15
1068d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1069d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rdi),%rdi
1070d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1071d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%ecx
1072d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	.Loop_mul
1073d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1074d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r8,(%rdi)
1075d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r9,8(%rdi)
1076d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r10,16(%rdi)
1077d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r11,24(%rdi)
1078d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r12,32(%rdi)
1079d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r13,40(%rdi)
1080d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r14,48(%rdi)
1081d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%r15,56(%rdi)
1082d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1083d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
1084d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	__rsaz_512_mul,.-__rsaz_512_mul
1085d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_scatter4
1086d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_scatter4
1087d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_scatter4,@function
1088d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	16
1089d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_scatter4:
1090d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rdi,%rdx,4),%rdi
1091d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$8,%r9d
1092d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	.Loop_scatter
1093d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	16
1094d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_scatter:
1095d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	(%rsi),%rax
1096d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rsi),%rsi
1097d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,(%rdi)
1098d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shrq	$32,%rax
1099d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	%eax,64(%rdi)
1100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128(%rdi),%rdi
1101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%r9d
1102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	.Loop_scatter
1103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
1104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_scatter4,.-rsaz_512_scatter4
1105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.globl	rsaz_512_gather4
1107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.hidden rsaz_512_gather4
1108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	rsaz_512_gather4,@function
1109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	16
1110d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyrsaz_512_gather4:
1111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	(%rsi,%rdx,4),%rsi
1112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	$8,%r9d
1113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jmp	.Loop_gather
1114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	16
1115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_gather:
1116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	(%rsi),%eax
1117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movl	64(%rsi),%r8d
1118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	128(%rsi),%rsi
1119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	shlq	$32,%r8
1120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orq	%r8,%rax
1121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	movq	%rax,(%rdi)
1122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	leaq	8(%rdi),%rdi
1123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	decl	%r9d
1124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	jnz	.Loop_gather
1125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	.byte	0xf3,0xc3
1126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	rsaz_512_gather4,.-rsaz_512_gather4
1127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
1128