1116680a4aac90f2aa7413d9095a592090648e557Ben MurdochOPTION	DOTNAME
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).text$	SEGMENT ALIGN(256) 'CODE'
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
4116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	OPENSSL_ia32cap_P:NEAR
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
6116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_mul_mont_gather5
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	64
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul_mont_gather5	PROC PUBLIC
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_mul_mont_gather5::
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	test	r9d,7
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$mul_enter
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$mul4x_enter
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_enter::
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,r9d
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[56+rsp]
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-40))+rsp]
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[rsp],xmm6
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[16+rsp],xmm7
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[2+r9]
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r11
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[r11*8+rsp]
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-1024
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+r9*8+rsp],rax
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_body::
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r10
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,3
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,7
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r10
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[$L$magic_masks]
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r10,3
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[96+r11*8+r12]
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm4,QWORD PTR[r10*8+rax]
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm5,QWORD PTR[8+r10*8+rax]
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm6,QWORD PTR[16+r10*8+rax]
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm7,QWORD PTR[24+r10*8+rax]
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)	movq	xmm0,QWORD PTR[(((-96)))+r12]
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-32))+r12]
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm4
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[32+r12]
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm5
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[96+r12]
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm6
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm7
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm2
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[256+r12]
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm3
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
73116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,195
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)	movq	xmm0,QWORD PTR[(((-96)))+r12]
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-32))+r12]
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm4
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[32+r12]
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm5
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rax
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[96+r12]
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm6
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm7
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm2
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[256+r12]
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm3
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$1st_enter
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
113116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st::
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rsi]
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r10
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st_enter::
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rcx]
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r15,r9
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$1st
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
136116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,195
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r10
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdx,rdx
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r9*8+rsp],r13
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r9*8+rsp],rdx
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$outer
155116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$outer::
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[rsp]
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)	movq	xmm0,QWORD PTR[(((-96)))+r12]
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-32))+r12]
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm4
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[32+r12]
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm5
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[96+r12]
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm6
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm7
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm2
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[256+r12]
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm3
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[8+rsp]
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$inner_enter
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
194116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner::
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rsi]
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[r15*8+rsp]
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner_enter::
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rcx]
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r15,r9
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$inner
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
219116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,195
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[r15*8+rsp]
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdx,rdx
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r9*8+rsp],r13
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r9*8+rsp],rdx
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r14,r9
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$outer
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsp]
244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsi,QWORD PTR[rsp]
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,r9
246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sub
247116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sub::	sbb	rax,QWORD PTR[r14*8+rcx]
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rdi],rax
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r14*8+rsi]
251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r15
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sub
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rax,0
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,r9
258116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$copy::
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[r14*8+rsp]
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,QWORD PTR[r14*8+rdi]
262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rsi,rcx
263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsi,rax
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rsi,rcx
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rsp],r14
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rdi],rsi
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r15,1
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$copy
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9*8+rsp]
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm6,XMMWORD PTR[((-88))+rsi]
274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm7,XMMWORD PTR[((-72))+rsi]
275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rsi]
276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rsi]
277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rsi]
278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rsi]
279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rsi]
280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rsi]
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rsi]
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_epilogue::
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_mul_mont_gather5::
287116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul_mont_gather5	ENDP
288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
289116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
290116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul4x_mont_gather5	PROC PRIVATE
291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_mul4x_mont_gather5::
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_enter::
304116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-40))+rsp]
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[rsp],xmm6
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[16+rsp],xmm7
315116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,r9d
317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r9d,3
318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r10d,3+2
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[((-64))+r9*2+rsp]
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,rsi
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,4095
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r10,r11
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$mul4xsp_alt
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*2+rsp]
335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$mul4xsp_done
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
337116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4xsp_alt::
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[((4096-64))+r9*2]
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*2+rsp]
341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,r10
342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,0
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmovc	r11,r10
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4xsp_done::
346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-64
347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],rax
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_body::
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	mul4x_internal
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[40+rsp]
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm6,XMMWORD PTR[((-88))+rsi]
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm7,XMMWORD PTR[((-72))+rsi]
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rsi]
359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rsi]
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rsi]
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rsi]
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rsi]
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rsi]
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rsi]
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_epilogue::
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_mul4x_mont_gather5::
370116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul4x_mont_gather5	ENDP
371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
373116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul4x_internal	PROC PRIVATE
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r9,5
376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[56+rax]
377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r13,QWORD PTR[256+r9*1+rdx]
378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r9,5
379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r10
380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,3
381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,7
382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r10
383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[$L$magic_masks]
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r10,3
385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[96+r11*8+rdx]
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm4,QWORD PTR[r10*8+rax]
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm5,QWORD PTR[8+r10*8+rax]
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,7
389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm6,QWORD PTR[16+r10*8+rax]
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm7,QWORD PTR[24+r10*8+rax]
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,7
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
39303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)	movq	xmm0,QWORD PTR[(((-96)))+r12]
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[256+r12]
395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-32))+r12]
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm4
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[32+r12]
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm5
399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[96+r12]
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm6
401116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-96))+r14]
404116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm7
406116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm2
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[((-32))+r14]
409116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm4
411116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm3
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[32+r14]
414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
415116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,195
416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm0,QWORD PTR[96+r14]
417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((16+8))+rsp],r13
418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((56+8))+rsp],rdi
419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsi,QWORD PTR[r9*1+rsi]
423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rax
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm5
431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm6
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm1,xmm2
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[((64+8))+r11*8+rsp]
443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm7
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm1,xmm3
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[512+r12]
448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r9*1+rsi]
453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rcx]
459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+r9*1+rsi]
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[32+r9]
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[64+rcx]
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14],rdi
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$1st4x
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
474116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st4x::
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-32))+rcx]
479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[32+r14]
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*1+rsi]
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r14],r13
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+rcx]
495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*1+rsi]
501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r14],rdi
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r15*1+rsi]
516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r14],r13
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rcx]
525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+r15*1+rsi]
531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[64+rcx]
534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14],rdi
536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,32
539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$1st4x
540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-32))+rcx]
544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[32+r14]
545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+rsi]
551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r14],r13
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+rcx]
560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r9*1+rsi]
566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r14],rdi
570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
572116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,195
573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[r9*2+rcx]
574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdi,rdi
576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdi,0
578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r14],r13
579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$outer4x
581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
582116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$outer4x::
584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[r9*1+r14]
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)	movq	xmm0,QWORD PTR[(((-96)))+r12]
592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-32))+r12]
593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm4
594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[32+r12]
595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm5
596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[96+r12]
597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
599116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14],rdi
602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm6
604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm7
606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm2
607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[r9*1+r14]
608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[256+r12]
609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm3
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r9*1+rsi]
614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rcx]
620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[8+r14]
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+r9*1+rsi]
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[32+r9]
631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[64+rcx]
632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$inner4x
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
636116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner4x::
638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-32))+rcx]
641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,QWORD PTR[16+r14]
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[32+r14]
644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*1+rsi]
650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-32))+r14],rdi
654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+rcx]
659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[((-8))+r14]
661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*1+rsi]
667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r14],r13
671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,QWORD PTR[r14]
678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r15*1+rsi]
684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r14],rdi
688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rcx]
693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[8+r14]
695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+r15*1+rsi]
701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[64+rcx]
704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r14],r13
706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,32
709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$inner4x
710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-32))+rcx]
714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,QWORD PTR[16+r14]
716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[32+r14]
717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+rsi]
723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-32))+r14],rdi
727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbp
732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rcx]
733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[((-8))+r14]
735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r9*1+rsi]
741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r14],r13
745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
747116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,195
748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r14],rdi
749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[r9*2+rcx]
750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdi,rdi
752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdi,0
754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,QWORD PTR[r14]
755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdi,0
756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r14],r13
757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,QWORD PTR[((16+8))+rsp]
759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$outer4x
760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rbp,r13
761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,r15
762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	rdi,r15
763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdi,1
764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[r9*1+r14]
765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[rdi*8+rcx]
766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sar	rcx,3+2
768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[((56+8))+rsp]
769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr4x_sub
770116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul4x_internal	ENDP
771116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_power5
772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
773116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
774116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_power5	PROC PUBLIC
775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_power5::
779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-40))+rsp]
795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[rsp],xmm6
796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[16+rsp],xmm7
797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,r9d
798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r9d,3
799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r10d,3+2
800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[((-64))+r9*2+rsp]
810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,rsi
811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,4095
812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r10,r11
813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$pwr_sp_alt
814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*2+rsp]
816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$pwr_sp_done
817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
818116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$pwr_sp_alt::
820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[((4096-64))+r9*2]
821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*2+rsp]
822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,r10
823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,0
824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmovc	r11,r10
825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$pwr_sp_done::
827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-64
828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,r9
829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r8
841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],rax
842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$power5_body::
843116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,207
844116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,209
845116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,73,15,110,218
846116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,226
847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__bn_sqr8x_internal
849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__bn_sqr8x_internal
850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__bn_sqr8x_internal
851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__bn_sqr8x_internal
852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__bn_sqr8x_internal
853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
854116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,209
855116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,226
856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rsi
857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsp]
858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[32+rsp]
859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	mul4x_internal
861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[40+rsp]
863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rsi]
865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rsi]
866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rsi]
867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rsi]
868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rsi]
869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rsi]
870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rsi]
871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$power5_epilogue::
872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_power5::
876116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_power5	ENDP
877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
878116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_sqr8x_internal
879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
881116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
882116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_sqr8x_internal	PROC PUBLIC
883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__bn_sqr8x_internal::
884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[32+r10]
958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsi,QWORD PTR[r9*1+rsi]
959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-32))+rbp*1+rsi]
964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((48+8))+r9*2+rsp]
965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-24))+rbp*1+rsi]
966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((-32))+rbp*1+rdi]
967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-16))+rbp*1+rsi]
968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rax
969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rax
972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+rbp*1+rdi],r10
975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+rbp*1+rdi],r11
981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rbp*1+rsi]
985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rax
987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[rbp]
991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r12
997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rcx*1+rdi],r10
999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr4x_1st
1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1001116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr4x_1st::
1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[rcx*1+rsi]
1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[8+rcx*1+rsi]
1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r13
1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rcx*1+rdi],r11
1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[16+rcx*1+rsi]
1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r12
1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rcx*1+rdi],r10
1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[24+rcx*1+rsi]
1047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r13
1050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rcx*1+rdi],r11
1057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[32+rcx]
1060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r12
1067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rcx*1+rdi],r10
1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rcx,0
1071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$sqr4x_1st
1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[16+rbp]
1076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
1078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r13
1081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],rdx
1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr4x_outer
1084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1085116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr4x_outer::
1087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-32))+rbp*1+rsi]
1088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((48+8))+r9*2+rsp]
1089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-24))+rbp*1+rsi]
1090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((-32))+rbp*1+rdi]
1091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-16))+rbp*1+rsi]
1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rax
1093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[((-24))+rbp*1+rdi]
1096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+rbp*1+rdi],r10
1100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[((-16))+rbp*1+rdi]
1107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+rbp*1+rdi],r11
1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r12,r12
1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rbp*1+rsi]
1114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,QWORD PTR[((-8))+rbp*1+rdi]
1119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r12
1127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rbp*1+rdi],r10
1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[rbp]
1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr4x_inner
1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1134116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr4x_inner::
1136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[rcx*1+rsi]
1137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,QWORD PTR[rcx*1+rdi]
1143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1145116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[8+rcx*1+rsi]
1150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r13
1153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rcx*1+rdi],r11
1158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,QWORD PTR[8+rcx*1+rdi]
1162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[16+rcx]
1163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r12
1170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rcx*1+rdi],r10
1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rcx,0
1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$sqr4x_inner
1176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1177116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
1182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r13
1185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],rdx
1187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rbp,16
1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sqr4x_outer
1190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-32))+rsi]
1193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((48+8))+r9*2+rsp]
1194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-24))+rsi]
1195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((-32))+rbp*1+rdi]
1196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-16))+rsi]
1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rax
1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+rdi],r10
1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r13
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rsi]
1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+rdi],r11
1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r14
1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r12
1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rdi],r10
1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r15
1232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+rsi]
1234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
1236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r13
1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],rdx
1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rbp,16
1244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
1245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rbp,r9
1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rax,r12
1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],rax
1251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],rdx
1252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r15
1253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+rbp*1+rsi]
1255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((48+8))+rsp]
1256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r10,r10
1257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[8+rdi]
1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[r10*2+r14]
1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r13,QWORD PTR[r11*2+rcx]
1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r13,r10
1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rdi]
1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rdi]
1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,rax
1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+rbp*1+rsi]
1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r12
1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,rdx
1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[r10*2+r14]
1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r13
1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r11*2+rcx]
1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r8,r10
1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[32+rdi]
1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[40+rdi]
1286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,rax
1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp*1+rsi]
1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],rbx
1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,rdx
1290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[16+rbp]
1291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r8
1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[64+rdi]
1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr4x_shift_n_add
1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1296116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr4x_shift_n_add::
1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[r10*2+r14]
1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r13,QWORD PTR[r11*2+rcx]
1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r13,r10
1303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[((-16))+rdi]
1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[((-8))+rdi]
1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,rax
1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+rbp*1+rsi]
1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-32))+rdi],r12
1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,rdx
1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[r10*2+r14]
1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+rdi],r13
1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r11*2+rcx]
1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r8,r10
1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[rdi]
1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[8+rdi]
1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,rax
1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp*1+rsi]
1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+rdi],rbx
1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,rdx
1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[r10*2+r14]
1331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rdi],r8
1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r13,QWORD PTR[r11*2+rcx]
1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r13,r10
1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rdi]
1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rdi]
1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,rax
1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rbp*1+rsi]
1344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r12
1345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,rdx
1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[r10*2+r14]
1348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r13
1349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r11*2+rcx]
1352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r8,r10
1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[32+rdi]
1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[40+rdi]
1359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,rax
1360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rbp*1+rsi]
1361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],rbx
1362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,rdx
1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r8
1364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[64+rdi]
1366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rbp,32
1367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sqr4x_shift_n_add
1368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[r10*2+r14]
1370116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r13,QWORD PTR[r11*2+rcx]
1373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r13,r10
1375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[((-16))+rdi]
1376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,r11
1377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[((-8))+rdi]
1380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,rax
1381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+rsi]
1382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-32))+rdi],r12
1383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,rdx
1384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[r10*2+r14]
1386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+rdi],r13
1387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,r15
1388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
1389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r11*2+rcx]
1390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,63
1391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	r8,r10
1392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
1393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r15
1394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,rax
1395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,rdx
1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+rdi],rbx
1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+rdi],r8
1398116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,213
1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsqr8x_reduction::
1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rax,rax
1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[r9*2+rbp]
1402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdx,QWORD PTR[((48+8))+r9*2+rsp]
1403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((0+8))+rsp],rcx
1404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[((48+8))+r9*1+rsp]
1405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((8+8))+rsp],rdx
1406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
1407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$8x_reduction_loop
1408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1409116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$8x_reduction_loop::
1411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[r9*1+rdi]
1412116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	066h
1413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[rdi]
1414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rdi]
1415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rdi]
1416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rdi]
1417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rdi]
1418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rdi]
1419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rdi]
1420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rdi]
1421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdx],rax
1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[64+rdi]
1423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1424116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rbx
1426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbx,QWORD PTR[((32+8))+rsp]
1427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,8
1429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$8x_reduce
1430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1431116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$8x_reduce::
1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rbp]
1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r8
1436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
1437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,0
1438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
1441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rbp]
1442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r9
1444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((48-8+8))+rcx*8+rsp],rbx
1445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
1446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
1447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rbp]
1451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r10
1453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[((32+8))+rsp]
1454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[64+rbp]
1460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rsi,r8
1462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
1463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[80+rbp]
1469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r12
1471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[96+rbp]
1477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r13
1479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
1484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[112+rbp]
1485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r14
1487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
1488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
1489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rsi
1492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
1493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
1494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,r15
1496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
1497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
1498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	ecx
1500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$8x_reduce
1501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[128+rbp]
1503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rax,rax
1504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[((8+8))+rsp]
1505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbp,QWORD PTR[((0+8))+rsp]
1506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jae	$L$8x_no_tail
1507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1508116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	066h
1509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[rdi]
1510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[8+rdi]
1511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[16+rdi]
1512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[24+rdi]
1513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[32+rdi]
1514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[40+rdi]
1515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[48+rdi]
1516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[56+rdi]
1517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rsi,rsi
1518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((48+56+8))+rsp]
1520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,8
1521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
1522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$8x_tail
1523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1524116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$8x_tail::
1526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
1528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rbp]
1529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
1530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
1531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,0
1532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
1535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rbp]
1536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r9
1538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[8+rdi]
1539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
1540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
1541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rbp]
1545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r10
1547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[64+rbp]
1553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
1555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[80+rbp]
1561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r12
1563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[96+rbp]
1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r13
1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
1576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[112+rbp]
1577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r14
1579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
1580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
1581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((48-16+8))+rcx*8+rsp]
1584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
1585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,r15
1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	ecx
1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$8x_tail
1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[128+rbp]
1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[((8+8))+rsp]
1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbp,QWORD PTR[((0+8))+rsp]
1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jae	$L$8x_tail_done
1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((48+56+8))+rsp]
1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	rsi
1601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
1602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,QWORD PTR[rdi]
1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[8+rdi]
1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[16+rdi]
1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[24+rdi]
1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[32+rdi]
1607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[40+rdi]
1608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[48+rdi]
1609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[56+rdi]
1610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rsi,rsi
1611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,8
1613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$8x_tail
1614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1615116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$8x_tail_done::
1617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[rdx]
1618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rax,rax
1619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	rsi
1621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$8x_no_tail::
1622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,QWORD PTR[rdi]
1623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[8+rdi]
1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[16+rdi]
1625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[24+rdi]
1626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[32+rdi]
1627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[40+rdi]
1628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[48+rdi]
1629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[56+rdi]
1630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rax,0
1631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,QWORD PTR[((-16))+rbp]
1632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rsi,rsi
1633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1634116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,213
1635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
1637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r9
1638116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,73,15,126,217
1639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r10
1640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r11
1641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rdi],r12
1642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rdi],r13
1643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rdi],r14
1644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rdi],r15
1645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[64+rdi]
1646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rdi,rdx
1648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$8x_reduction_loop
1649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rcx,r15
1651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[r9*1+rdi]
1652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rsi,rsi
1653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
1654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	rax,rsi
1655116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,207
1656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rax,1
1657116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,206
1658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[rax*8+rbp]
1659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sar	rcx,3+2
1660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr4x_sub
1661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1662116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr4x_sub::
1664116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	066h
1665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[rbx]
1666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[8+rbx]
1667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r12,QWORD PTR[rbp]
1668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[16+rbx]
1669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r13,QWORD PTR[16+rbp]
1670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[24+rbx]
1671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbx,QWORD PTR[32+rbx]
1672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r14,QWORD PTR[32+rbp]
1673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r12
1674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	r15,QWORD PTR[48+rbp]
1675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[64+rbp]
1676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r13
1677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r14
1678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r15
1679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[32+rdi]
1680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	inc	rcx
1682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sqr4x_sub
1683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,r9
1684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
1685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1686116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_sqr8x_internal	ENDP
1687116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_from_montgomery
1688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1689116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1690116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_from_montgomery	PROC PUBLIC
1691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	test	DWORD PTR[48+rsp],7
1692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jz	bn_from_mont8x
1693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	eax,eax
1694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1695116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_from_montgomery	ENDP
1696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1698116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1699116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_from_mont8x	PROC PRIVATE
1700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
1701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
1702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
1703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_from_mont8x::
1704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
1705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
1706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
1707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
1708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
1709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
1710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1712116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
1714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
1715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
1716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
1717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
1718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
1719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
1720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-40))+rsp]
1721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[rsp],xmm6
1722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	XMMWORD PTR[16+rsp],xmm7
1723116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,r9d
1725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r9d,3
1726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r10d,3+2
1727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
1728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
1729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[((-64))+r9*2+rsp]
1737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,rsi
1738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,4095
1739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r10,r11
1740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$from_sp_alt
1741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
1742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*2+rsp]
1743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$from_sp_done
1744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1745116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$from_sp_alt::
1747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[((4096-64))+r9*2]
1748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*2+rsp]
1749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,r10
1750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,0
1751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmovc	r11,r10
1752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
1753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$from_sp_done::
1754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-64
1755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,r9
1756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
1757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r8
1768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],rax
1769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$from_body::
1770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r9
1771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[48+rsp]
1772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm0,xmm0
1773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$mul_by_1
1774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1775116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_by_1::
1777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm1,XMMWORD PTR[rsi]
1778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm2,XMMWORD PTR[16+rsi]
1779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm3,XMMWORD PTR[32+rsi]
1780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[r9*1+rax],xmm0
1781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm4,XMMWORD PTR[48+rsi]
1782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+r9*1+rax],xmm0
1783116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	048h,08dh,0b6h,040h,000h,000h,000h
1784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[rax],xmm1
1785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+r9*1+rax],xmm0
1786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+rax],xmm2
1787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+r9*1+rax],xmm0
1788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+rax],xmm3
1789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+rax],xmm4
1790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[64+rax]
1791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,64
1792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$mul_by_1
1793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1794116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,207
1795116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,209
1796116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h
1797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,rcx
1798116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,73,15,110,218
1799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	sqr8x_reduction
1800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm0,xmm0
1802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[48+rsp]
1803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[40+rsp]
1804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$from_mont_zero
1805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1806116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$from_mont_zero::
1808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[rax],xmm0
1809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+rax],xmm0
1810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+rax],xmm0
1811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+rax],xmm0
1812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[64+rax]
1813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r9,32
1814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$from_mont_zero
1815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
1817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rsi]
1818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rsi]
1819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rsi]
1820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rsi]
1821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rsi]
1822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rsi]
1823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rsi]
1824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$from_epilogue::
1825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
1826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
1827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_from_mont8x::
1829116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_from_mont8x	ENDP
1830116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_scatter5
1831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1832116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1833116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_scatter5	PROC PUBLIC
1834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	edx,0
1835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jz	$L$scatter_epilogue
1836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r9*8+r8]
1837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$scatter::
1838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
1839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[8+rcx]
1840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r8],rax
1841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[256+r8]
1842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	edx,1
1843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$scatter
1844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$scatter_epilogue::
1845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1846116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_scatter5	ENDP
1847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1848116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_gather5
1849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1850116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1851116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_gather5	PROC PUBLIC
1852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_gather5::
1853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1854116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	048h,083h,0ech,028h
1855116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	00fh,029h,034h,024h
1856116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	00fh,029h,07ch,024h,010h
1857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11d,r9d
1858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r9d,3
1859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,7
1860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r9d
1861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[$L$magic_masks]
1862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r9d,3
1863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[128+r11*8+r8]
1864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm4,QWORD PTR[r9*8+rax]
1865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm5,QWORD PTR[8+r9*8+rax]
1866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm6,QWORD PTR[16+r9*8+rax]
1867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm7,QWORD PTR[24+r9*8+rax]
1868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$gather
1869116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$gather::
187103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)	movq	xmm0,QWORD PTR[(((-128)))+r8]
1872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[((-64))+r8]
1873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm0,xmm4
1874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm2,QWORD PTR[r8]
1875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm1,xmm5
1876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[64+r8]
1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm6
1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm1
1879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm3,xmm7
1880116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	067h,067h
1881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm2
1882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[256+r8]
1883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm0,xmm3
1884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	QWORD PTR[rcx],xmm0
1886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[8+rcx]
1887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	edx,1
1888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$gather
1889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm6,XMMWORD PTR[rsp]
1890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm7,XMMWORD PTR[16+rsp]
1891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[40+rsp]
1892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_gather5::
1894116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_gather5	ENDP
1895116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	64
1896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$magic_masks::
1897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	0,0,0,0,0,0,-1,-1
1898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	0,0,0,0,0,0,0,0
1899116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
1900116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115
1901116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111
1902116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79
1903116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111
1904116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	112,101,110,115,115,108,46,111,114,103,62,0
1905116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	__imp_RtlVirtualUnwind:NEAR
1906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1907116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1908116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul_handler	PROC PRIVATE
1909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rsi
1910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rdi
1911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
1912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
1914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
1915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
1916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
1917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushfq
1918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,64
1919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[120+r8]
1921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[248+r8]
1922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9]
1924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[56+r9]
1925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[r11]
1927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
1928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
1929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$common_seh_tail
1930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[152+r8]
1932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[4+r11]
1934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
1935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
1936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jae	$L$common_seh_tail
1937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[$L$mul_epilogue]
1939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
1940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$body_40
1941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[192+r8]
1943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r10*8+rax]
1944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$body_proceed
1945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$body_40::
1947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rax]
1948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$body_proceed::
1949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm0,XMMWORD PTR[((-88))+rax]
1951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movaps	xmm1,XMMWORD PTR[((-72))+rax]
1952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
1954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
1955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
1956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
1957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
1958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
1959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[144+r8],rbx
1960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[160+r8],rbp
1961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[216+r8],r12
1962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[224+r8],r13
1963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[232+r8],r14
1964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[240+r8],r15
1965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movups	XMMWORD PTR[512+r8],xmm0
1966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movups	XMMWORD PTR[528+r8],xmm1
1967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$common_seh_tail::
1969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rax]
1970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rax]
1971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[152+r8],rax
1972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[168+r8],rsi
1973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[176+r8],rdi
1974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[40+r9]
1976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,r8
1977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,154
1978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	0a548f3fch
1979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,r9
1981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rcx,rcx
1982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[8+rsi]
1983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsi]
1984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[16+rsi]
1985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[40+rsi]
1986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[56+rsi]
1987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[24+rsi]
1988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r10
1989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],r11
1990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rsp],r12
1991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rsp],rcx
1992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	QWORD PTR[__imp_RtlVirtualUnwind]
1993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	eax,1
1995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rsp,64
1996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popfq
1997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r15
1998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r14
1999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r13
2000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r12
2001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rbp
2002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rbx
2003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rdi
2004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rsi
2005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
2006116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul_handler	ENDP
2007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text$	ENDS
2009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata	SEGMENT READONLY ALIGN(4)
2010116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	4
2011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_mul_mont_gather5
2012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_mul_mont_gather5
2013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_mul_mont_gather5
2014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_mul4x_mont_gather5
2016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_mul4x_mont_gather5
2017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_mul4x_mont_gather5
2018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_power5
2020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_power5
2021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_power5
2022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_from_mont8x
2024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_from_mont8x
2025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_from_mont8x
2026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_gather5
2027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_gather5
2028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_gather5
2029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata	ENDS
2031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata	SEGMENT READONLY ALIGN(8)
2032116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
2033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_mul_mont_gather5::
2034116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
2035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel mul_handler
2036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul_body,imagerel $L$mul_epilogue
2037116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
2038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_mul4x_mont_gather5::
2039116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
2040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel mul_handler
2041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
2042116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
2043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_power5::
2044116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
2045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel mul_handler
2046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$power5_body,imagerel $L$power5_epilogue
2047116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
2048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_from_mont8x::
2049116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
2050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel mul_handler
2051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$from_body,imagerel $L$from_epilogue
2052116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
2053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_gather5::
2054116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	001h,00dh,005h,000h
2055116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	00dh,078h,001h,000h
2056116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	008h,068h,000h,000h
2057116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	004h,042h,000h,000h
2058116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
2059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata	ENDS
2061116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND
2062