1116680a4aac90f2aa7413d9095a592090648e557Ben MurdochOPTION	DOTNAME
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).text$	SEGMENT ALIGN(256) 'CODE'
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
4116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	OPENSSL_ia32cap_P:NEAR
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
6116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_sqr
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_sqr	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_rsaz_512_sqr::
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
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,128+24
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr_body::
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,rdx
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[rsi]
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[128+rsp],rcx
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$oop_sqr
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
36116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$oop_sqr::
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[((128+8))+rsp],r8d
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rdx
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rax
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rbx
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,r9
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rsp],rax
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rdx
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],r8
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rcx,63
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[8+rsi]
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r8
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r8
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rbx
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r8
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rbx
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r8
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rbx
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r8
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rbx
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r8
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r8
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rbx
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r10
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,0
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdx,rdx
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*2+rcx]
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,r11
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,r11
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,rdx
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],r9
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rsp],r10
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rbx,63
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[16+rsi]
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r9
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,rdx
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rcx,0
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r9
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rcx
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,rdx
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rcx,0
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r9
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rcx
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,rdx
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rcx,0
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r9
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,r12
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[r12*2+rbx]
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rcx
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,rdx
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rcx,0
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r9
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,63
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r9
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rcx
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r13
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r13,QWORD PTR[r13*2+r10]
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,rdx
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r11
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],r12
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rcx,63
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[24+rsi]
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r10
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r10
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rbx
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r10
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r14
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[r14*2+rcx]
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rbx
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r10
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r12,63
243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r10
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rbx
247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,r15
251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[r15*2+r12]
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,rdx
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rsp],r13
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rsp],r14
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rbx,63
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[32+rsi]
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r11
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,rdx
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rcx,0
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r11
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r8
276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r8*2+rbx]
277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rcx
278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,rdx
279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rcx,0
280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r11
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r12,63
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r11
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rcx
287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r9,QWORD PTR[r9*2+r12]
292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,rdx
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[64+rsp],r15
299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[72+rsp],r8
300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rcx,63
301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[40+rsi]
304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r12
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rdx
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rbx,0
310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r12
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r12
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,r10
315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*2+rcx]
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r15,63
318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rbx
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,r11
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[r11*2+r15]
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,rdx
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[80+rsp],r9
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[88+rsp],r10
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[48+rsi]
335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	r13
337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r13
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	rbx,1
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,r12
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,r13
346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,r14
347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,rdx
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[96+rsp],r11
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[104+rsp],r12
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rax
359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rdx
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[112+rsp],r13
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[120+rsp],r14
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsp]
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rsp]
369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rsp]
370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rsp]
371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rsp]
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rsp]
373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rsp]
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rsp]
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_reduce
377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[64+rsp]
379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[72+rsp]
380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[80+rsp]
381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[88+rsp]
382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[96+rsp]
383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[104+rsp]
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[112+rsp]
385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[120+rsp]
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rcx,rcx
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_subtract
389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,r9
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8d,DWORD PTR[((128+8))+rsp]
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdi
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r8d
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$oop_sqr
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[((128+24+48))+rsp]
399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rax]
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr_epilogue::
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_rsaz_512_sqr::
411116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_sqr	ENDP
412116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_mul
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
414116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
415116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul	PROC PUBLIC
416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_rsaz_512_mul::
420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,128+24
435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_body::
436116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,199
437116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,201
438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[128+rsp],r8
439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[rdx]
440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,rdx
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_mul
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
443116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,199
444116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,205
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsp]
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rsp]
448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rsp]
449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rsp]
450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rsp]
451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rsp]
452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rsp]
453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rsp]
454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_reduce
456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[64+rsp]
457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[72+rsp]
458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[80+rsp]
459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[88+rsp]
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[96+rsp]
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[104+rsp]
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[112+rsp]
463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[120+rsp]
464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rcx,rcx
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_subtract
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[((128+24+48))+rsp]
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rax]
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_epilogue::
477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_rsaz_512_mul::
481116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul	ENDP
482116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_mul_gather4
483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
484116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul_gather4	PROC PUBLIC
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_rsaz_512_mul_gather4::
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,r9d
506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,128+24
507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_gather4_body::
508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	eax,DWORD PTR[64+r9*4+rdx]
509116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,199
510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ebx,DWORD PTR[r9*4+rdx]
511116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,201
512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[128+rsp],r8
513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	rax,32
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	rbx,rax
516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,QWORD PTR[8+rsi]
518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[128+r9*4+rdx]
519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rsp],rax
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rcx
522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movd	xmm4,DWORD PTR[rbp]
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movd	xmm5,DWORD PTR[64+rbp]
533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pslldq	xmm5,4
540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm4,xmm5
547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[128+rbp]
560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
566116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,227
567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[8+rsp]
573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,7
574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$oop_mul_gather
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
576116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$oop_mul_gather::
578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,0
584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movd	xmm4,DWORD PTR[rbp]
587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r9
591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movd	xmm5,DWORD PTR[64+rbp]
596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r10
600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pslldq	xmm5,4
605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	por	xmm4,xmm5
614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r12
618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r13
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r14
634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
638116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,227
639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,r15
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[128+rbp]
647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[8+rdi]
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	ecx
650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$oop_mul_gather
651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r9
654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r10
655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r11
656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rdi],r12
657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rdi],r13
658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rdi],r14
659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rdi],r15
660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
661116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,199
662116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,205
663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsp]
665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rsp]
666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rsp]
667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rsp]
668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rsp]
669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rsp]
670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rsp]
671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rsp]
672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_reduce
674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[64+rsp]
675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[72+rsp]
676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[80+rsp]
677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[88+rsp]
678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[96+rsp]
679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[104+rsp]
680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[112+rsp]
681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[120+rsp]
682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rcx,rcx
683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_subtract
685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[((128+24+48))+rsp]
687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rax]
694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_gather4_epilogue::
695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_rsaz_512_mul_gather4::
699116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul_gather4	ENDP
700116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_mul_scatter4
701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
702116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
703116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul_scatter4	PROC PUBLIC
704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_rsaz_512_mul_scatter4::
708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,r9d
724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,128+24
725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_scatter4_body::
726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r8,QWORD PTR[r9*4+r8]
727116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,199
728116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,202
729116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,73,15,110,208
730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[128+rsp],rcx
731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,rdi
733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[rdi]
734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_mul
735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
736116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,199
737116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,205
738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsp]
740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rsp]
741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rsp]
742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rsp]
743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rsp]
744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rsp]
745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rsp]
746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rsp]
747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_reduce
749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[64+rsp]
750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[72+rsp]
751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[80+rsp]
752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[88+rsp]
753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[96+rsp]
754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[104+rsp]
755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[112+rsp]
756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[120+rsp]
757116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,126,214
758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rcx,rcx
759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_subtract
761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[rsi],r8d
763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r8,32
764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[128+rsi],r9d
765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r9,32
766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[256+rsi],r10d
767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r10,32
768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[384+rsi],r11d
769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r11,32
770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[512+rsi],r12d
771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r12,32
772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[640+rsi],r13d
773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r13,32
774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[768+rsi],r14d
775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r14,32
776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[896+rsi],r15d
777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r15,32
778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[64+rsi],r8d
779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[192+rsi],r9d
780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[320+rsi],r10d
781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[448+rsi],r11d
782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[576+rsi],r12d
783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[704+rsi],r13d
784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[832+rsi],r14d
785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[960+rsi],r15d
786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[((128+24+48))+rsp]
788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rax]
795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_scatter4_epilogue::
796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_rsaz_512_mul_scatter4::
800116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul_scatter4	ENDP
801116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_mul_by_one
802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
803116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
804116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul_by_one	PROC PUBLIC
805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_rsaz_512_mul_by_one::
809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,128+24
823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_by_one_body::
824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,rdx
825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[128+rsp],rcx
826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsi]
828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm0,xmm0
829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rsi]
830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rsi]
831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rsi]
832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rsi]
833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rsi]
834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rsi]
835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rsi]
836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[rsp],xmm0
838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+rsp],xmm0
839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+rsp],xmm0
840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+rsp],xmm0
841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[64+rsp],xmm0
842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[80+rsp],xmm0
843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[96+rsp],xmm0
844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	__rsaz_512_reduce
845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r9
847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r10
848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r11
849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rdi],r12
850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rdi],r13
851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rdi],r14
852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rdi],r15
853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[((128+24+48))+rsp]
855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rax]
862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_by_one_epilogue::
863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_rsaz_512_mul_by_one::
867116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_mul_by_one	ENDP
868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
869116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__rsaz_512_reduce	PROC PRIVATE
871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,r8
872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbx,QWORD PTR[((128+8))+rsp]
873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,8
875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$reduction_loop
876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
877116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$reduction_loop::
879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rbp]
881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r8
882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,0
884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rbp]
888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r9
890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rbp]
896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r10
898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rbp]
904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[((128+8))+rsp]
907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rbp]
915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rsi,r8
917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r12
918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rbp]
924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r13
926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rbp]
932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r14
934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,rsi
939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rbp]
941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,r15
943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	ecx
947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$reduction_loop
948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__rsaz_512_reduce	ENDP
951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
952116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__rsaz_512_subtract	PROC PRIVATE
954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r9
956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r10
957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r11
958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rdi],r12
959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rdi],r13
960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rdi],r14
961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rdi],r15
962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rbp]
964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[8+rbp]
965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r8
966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r9
967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r8,rcx
968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[16+rbp]
969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r9,rcx
970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r10
971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[24+rbp]
972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r10,rcx
973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r11
974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[32+rbp]
975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,rcx
976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r12
977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[40+rbp]
978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,rcx
979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r13
980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[48+rbp]
981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r13,rcx
982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r14
983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[56+rbp]
984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r14,rcx
985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	not	r15
986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r15,rcx
987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,QWORD PTR[rdi]
989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,QWORD PTR[8+rdi]
990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,QWORD PTR[16+rdi]
991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,QWORD PTR[24+rdi]
992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,QWORD PTR[32+rdi]
993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,QWORD PTR[40+rdi]
994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,QWORD PTR[48+rdi]
995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,QWORD PTR[56+rdi]
996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r9
999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r10
1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r11
1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rdi],r12
1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rdi],r13
1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rdi],r14
1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rdi],r15
1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__rsaz_512_subtract	ENDP
1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1009116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__rsaz_512_mul	PROC PRIVATE
1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[8+rsp]
1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],rax
1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
1027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
1028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
1046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
1052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
1053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
1054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
1057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
1059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
1060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[8+rbp]
1062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[8+rdi]
1063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,7
1065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$oop_mul
1066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1067116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$oop_mul::
1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[rbp]
1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,rax
1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
1074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,rdx
1075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r8,0
1076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,rax
1079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
1080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r9
1082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,rdx
1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r9,0
1084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
1087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[24+rsi]
1088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r10
1090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
1091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r10,0
1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
1095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+rsi]
1096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
1100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,rax
1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rsi]
1104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r12
1106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
1107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r12,0
1108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[48+rsi]
1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r13
1114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
1115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r13,0
1116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,rax
1119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[56+rsi]
1120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r14
1122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,rdx
1123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rbp,QWORD PTR[8+rbp]
1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r14,0
1125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
1127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r15,rax
1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r14,r15
1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,rdx
1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r15,0
1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdi,QWORD PTR[8+rdi]
1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	ecx
1137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$oop_mul
1138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rdi],r8
1140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rdi],r9
1141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rdi],r10
1142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+rdi],r11
1143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rdi],r12
1144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rdi],r13
1145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rdi],r14
1146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rdi],r15
1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch__rsaz_512_mul	ENDP
1150116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_scatter4
1151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1152116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1153116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_scatter4	PROC PUBLIC
1154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[r8*4+rcx]
1155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,8
1156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$oop_scatter
1157116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$oop_scatter::
1159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rdx]
1160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdx,QWORD PTR[8+rdx]
1161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[rcx],eax
1162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rax,32
1163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	DWORD PTR[64+rcx],eax
1164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[128+rcx]
1165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r9d
1166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$oop_scatter
1167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1168116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_scatter4	ENDP
1169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1170116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	rsaz_512_gather4
1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1172116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_gather4	PROC PUBLIC
1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdx,QWORD PTR[r8*4+rdx]
1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,8
1176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$oop_gather
1177116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$oop_gather::
1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	eax,DWORD PTR[rdx]
1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8d,DWORD PTR[64+rdx]
1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdx,QWORD PTR[128+rdx]
1182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r8,32
1183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	or	rax,r8
1184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rcx],rax
1185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[8+rcx]
1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r9d
1187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$oop_gather
1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdochrsaz_512_gather4	ENDP
1190116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	__imp_RtlVirtualUnwind:NEAR
1191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1192116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
1193116680a4aac90f2aa7413d9095a592090648e557Ben Murdochse_handler	PROC PRIVATE
1194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rsi
1195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rdi
1196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
1199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
1201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
1202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushfq
1203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,64
1204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[120+r8]
1206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[248+r8]
1207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9]
1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[56+r9]
1210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[r11]
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$common_seh_tail
1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[152+r8]
1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[4+r11]
1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jae	$L$common_seh_tail
1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[((128+24+48))+rax]
1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[144+r8],rbx
1232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[160+r8],rbp
1233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[216+r8],r12
1234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[224+r8],r13
1235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[232+r8],r14
1236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[240+r8],r15
1237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$common_seh_tail::
1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rax]
1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rax]
1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[152+r8],rax
1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[168+r8],rsi
1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[176+r8],rdi
1244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[40+r9]
1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,r8
1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,154
1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	0a548f3fch
1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,r9
1251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rcx,rcx
1252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[8+rsi]
1253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsi]
1254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[16+rsi]
1255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[40+rsi]
1256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[56+rsi]
1257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[24+rsi]
1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r10
1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],r11
1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rsp],r12
1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rsp],rcx
1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	QWORD PTR[__imp_RtlVirtualUnwind]
1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	eax,1
1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rsp,64
1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popfq
1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r15
1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r14
1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r13
1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r12
1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rbp
1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rbx
1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rdi
1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rsi
1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdochse_handler	ENDP
1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text$	ENDS
1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata	SEGMENT READONLY ALIGN(4)
1280116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	4
1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_rsaz_512_sqr
1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_rsaz_512_sqr
1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_rsaz_512_sqr
1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_rsaz_512_mul
1286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_rsaz_512_mul
1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_rsaz_512_mul
1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_rsaz_512_mul_gather4
1290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_rsaz_512_mul_gather4
1291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_rsaz_512_mul_gather4
1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_rsaz_512_mul_scatter4
1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_rsaz_512_mul_scatter4
1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_rsaz_512_mul_scatter4
1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_rsaz_512_mul_by_one
1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_rsaz_512_mul_by_one
1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_rsaz_512_mul_by_one
1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata	ENDS
1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata	SEGMENT READONLY ALIGN(8)
1303116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_rsaz_512_sqr::
1305116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel se_handler
1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$sqr_body,imagerel $L$sqr_epilogue
1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_rsaz_512_mul::
1309116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel se_handler
1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul_body,imagerel $L$mul_epilogue
1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_rsaz_512_mul_gather4::
1313116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel se_handler
1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul_gather4_body,imagerel $L$mul_gather4_epilogue
1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_rsaz_512_mul_scatter4::
1317116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel se_handler
1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul_scatter4_body,imagerel $L$mul_scatter4_epilogue
1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_rsaz_512_mul_by_one::
1321116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel se_handler
1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul_by_one_body,imagerel $L$mul_by_one_epilogue
1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata	ENDS
1326116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND
1327