1116680a4aac90f2aa7413d9095a592090648e557Ben MurdochOPTION	DOTNAME
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).text$	SEGMENT ALIGN(256) 'CODE'
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
4116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	OPENSSL_ia32cap_P:NEAR
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
6116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC	bn_mul_mont
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul_mont	PROC PUBLIC
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_mul_mont::
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	test	r9d,3
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$mul_enter
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r9d,8
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$mul_enter
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rdx,rsi
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$mul4x_enter
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	test	r9d,7
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jz	$L$sqr8x_enter
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$mul4x_enter
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_enter::
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,r9d
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[2+r9]
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rsp
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r10
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[r10*8+rsp]
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-1024
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+r9*8+rsp],r11
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_body::
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[r12]
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rax
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$1st_enter
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
75116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st::
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rsi]
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r10
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st_enter::
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rcx]
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r15,r9
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$1st
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,r10
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdx,rdx
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r9*8+rsp],r13
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r9*8+rsp],rdx
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$outer
115116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$outer::
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[r14*8+r12]
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[rsp]
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[8+rsp]
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$inner_enter
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
139116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner::
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rsi]
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[r15*8+rsp]
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner_enter::
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rcx]
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r11
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	r11,0
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[1+r15]
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r15,r9
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jne	$L$inner
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[r15*8+rsp]
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],r13
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdx,rdx
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r11
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r9*8+rsp],r13
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r9*8+rsp],rdx
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r14,r9
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$outer
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsp]
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsi,QWORD PTR[rsp]
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,r9
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sub
190116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sub::	sbb	rax,QWORD PTR[r14*8+rcx]
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rdi],rax
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r14*8+rsi]
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r15
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sub
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rax,0
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,r9
201116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$copy::
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[r14*8+rsp]
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,QWORD PTR[r14*8+rdi]
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rsi,rcx
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsi,rax
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rsi,rcx
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rsp],r14
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rdi],rsi
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r15,1
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$copy
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9*8+rsp]
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[rsi]
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[8+rsi]
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[16+rsi]
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[24+rsi]
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[32+rsi]
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[40+rsi]
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[48+rsi]
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_epilogue::
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_mul_mont::
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul_mont	ENDP
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
230116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul4x_mont	PROC PRIVATE
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_mul4x_mont::
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_enter::
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9d,r9d
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[4+r9]
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rsp
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r10
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[r10*8+rsp]
257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-1024
258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+r9*8+rsp],r11
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_body::
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+r9*8+rsp],rdi
262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,rdx
263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[r12]
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rax
273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rcx]
287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[4+r15]
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rsp],rdi
298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$1st4x
300116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st4x::
302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+r15*8+rcx]
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rsi]
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r15*8+rsp],r13
315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rcx]
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rsi]
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],rdi
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rcx]
335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r15*8+rsi]
341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r15*8+rsp],r13
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r15*8+rcx]
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[4+r15]
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+r15*8+rsi]
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-32))+r15*8+rsp],rdi
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r15,r9
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$1st4x
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+r15*8+rcx]
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rsi]
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r15*8+rsp],r13
378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rcx]
383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],rdi
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdi,rdi
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdi,0
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r15*8+rsp],r13
399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r15*8+rsp],rdi
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
402116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	4
403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$outer4x::
404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[r14*8+r12]
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r15,r15
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[rsp]
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r8
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rcx]
411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	imul	rbp,r10
414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rsi]
419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+rcx]
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[8+rsp]
427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[16+rsi]
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[4+r15]
436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[rsp],rdi
438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$inner4x
440116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner4x::
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+r15*8+rcx]
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,QWORD PTR[((-16))+r15*8+rsp]
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rsi]
453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r15*8+rsp],r13
457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rcx]
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[((-8))+r15*8+rsp]
464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rsi]
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],rdi
474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[r15*8+rcx]
479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,QWORD PTR[r15*8+rsp]
481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r15*8+rsi]
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r15*8+rsp],r13
491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r15*8+rcx]
496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[8+r15*8+rsp]
498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[4+r15]
500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+r15*8+rsi]
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-32))+r15*8+rsp],rdi
509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r15,r9
511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$inner4x
512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,rax
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-16))+r15*8+rcx]
516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,QWORD PTR[((-16))+r15*8+rsp]
518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,rdx
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,rax
523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rsi]
524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-24))+r15*8+rsp],r13
528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rdx
529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbx
531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,rax
532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[((-8))+r15*8+rcx]
533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,QWORD PTR[((-8))+r15*8+rsp]
535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[1+r14]
537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,rdx
538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mul	rbp
540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,rax
541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsi]
542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rdi,r11
544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdx,0
545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-16))+r15*8+rsp],rdi
546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,rdx
547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rdi,rdi
549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,r10
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdi,0
551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r13,QWORD PTR[r9*8+rsp]
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	adc	rdi,0
553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[((-8))+r15*8+rsp],r13
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r15*8+rsp],rdi
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r14,r9
557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$outer4x
558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[16+r9*8+rsp]
559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[rsp]
560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[8+rsp]
561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r9,2
562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsi,QWORD PTR[rsp]
563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rax,QWORD PTR[rcx]
566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[16+rsi]
567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[24+rsi]
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rdx,QWORD PTR[8+rcx]
569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r15,QWORD PTR[((-1))+r9]
570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sub4x
571116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sub4x::
573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rdi],rax
574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+r14*8+rdi],rdx
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rbx,QWORD PTR[16+r14*8+rcx]
576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+r14*8+rsi]
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[40+r14*8+rsi]
578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rbp,QWORD PTR[24+r14*8+rcx]
579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+r14*8+rdi],rbx
580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+r14*8+rdi],rbp
581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rax,QWORD PTR[32+r14*8+rcx]
582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[48+r14*8+rsi]
583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[56+r14*8+rsi]
584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rdx,QWORD PTR[40+r14*8+rcx]
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[4+r14]
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r15
587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sub4x
588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[r14*8+rdi],rax
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[32+r14*8+rsi]
591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rbx,QWORD PTR[16+r14*8+rcx]
592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+r14*8+rdi],rdx
593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rbp,QWORD PTR[24+r14*8+rcx]
594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+r14*8+rdi],rbx
595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sbb	rax,0
59703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)DB 66h, 48h, 0fh, 6eh, 0c0h
598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	punpcklqdq	xmm0,xmm0
599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[24+r14*8+rdi],rbp
600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	r14,r14
601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,r9
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm5,xmm5
604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$copy4x
605116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$copy4x::
607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm2,XMMWORD PTR[r14*1+rsp]
608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm4,XMMWORD PTR[16+r14*1+rsp]
609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm1,XMMWORD PTR[r14*1+rdi]
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	xmm3,XMMWORD PTR[16+r14*1+rdi]
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm2,xmm1
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm4,xmm3
613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm2,xmm0
614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pand	xmm4,xmm0
615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm2,xmm1
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm4,xmm3
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	XMMWORD PTR[r14*1+rdi],xmm2
618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqu	XMMWORD PTR[16+r14*1+rdi],xmm4
619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[r14*1+rsp],xmm5
620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+r14*1+rsp],xmm5
621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r14,QWORD PTR[32+r14]
623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r15
624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$copy4x
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r9,2
627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9*8+rsp]
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[rsi]
630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[8+rsi]
631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[16+rsi]
632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[24+rsi]
633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[32+rsi]
634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[40+rsi]
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[48+rsi]
636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_epilogue::
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_mul4x_mont::
641116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul4x_mont	ENDP
642116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	bn_sqr8x_internal:NEAR
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
645116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
646116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_sqr8x_mont	PROC PRIVATE
647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[16+rsp],rsi
649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_sqr8x_mont::
651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,rcx
652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,rdx
653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,r8
654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rcx,r9
655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[40+rsp]
656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[48+rsp]
657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_enter::
660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,rsp
661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,r9d
669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r9d,3
670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shl	r10,3+2
671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[((-64))+r9*4+rsp]
679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[r8]
680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,rsi
681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r11,4095
682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r10,r11
683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$sqr8x_sp_alt
684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*4+rsp]
686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr8x_sp_done
687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
688116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_sp_alt::
690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[((4096-64))+r9*4]
691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[((-64))+r9*4+rsp]
692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r11,r10
693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,0
694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmovc	r11,r10
695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,r11
696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_sp_done::
697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	rsp,-64
698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,r9
699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	neg	r9
700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[64+r9*2+rsp]
702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r8
703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],rax
704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_body::
705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,r9
707116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,73,15,110,211
708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	rbp,3+2
709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr8x_copy_n
711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
712116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_copy_n::
714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm0,QWORD PTR[rcx]
715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm1,QWORD PTR[8+rcx]
716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm3,QWORD PTR[16+rcx]
717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movq	xmm4,QWORD PTR[24+rcx]
718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rcx,QWORD PTR[32+rcx]
719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[r11],xmm0
720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+r11],xmm1
721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+r11],xmm3
722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+r11],xmm4
723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[64+r11]
724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	rbp
725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sqr8x_copy_n
726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm0,xmm0
728116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,72,15,110,207
729116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	102,73,15,110,218
730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	bn_sqr8x_internal
731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pxor	xmm0,xmm0
733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[48+rsp]
734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdx,QWORD PTR[64+r9*2+rsp]
735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	shr	r9,3+2
736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[40+rsp]
737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$sqr8x_zero
738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
739116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	32
740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_zero::
741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[rax],xmm0
742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+rax],xmm0
743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+rax],xmm0
744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+rax],xmm0
745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[64+rax]
746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[rdx],xmm0
747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[16+rdx],xmm0
748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[32+rdx],xmm0
749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movdqa	XMMWORD PTR[48+rdx],xmm0
750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rdx,QWORD PTR[64+rdx]
751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	dec	r9
752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jnz	$L$sqr8x_zero
753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,1
755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rsi]
756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rsi]
757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rsi]
758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rsi]
759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rsi]
760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rsi]
761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rsp,QWORD PTR[rsi]
762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_epilogue::
763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rsp]
765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_sqr8x_mont::
767116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_sqr8x_mont	ENDP
768116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
769116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
770116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83
771116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
772116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	115,108,46,111,114,103,62,0
773116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
774116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN	__imp_RtlVirtualUnwind:NEAR
775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
776116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
777116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul_handler	PROC PRIVATE
778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rsi
779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rdi
780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushfq
787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,64
788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[120+r8]
790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[248+r8]
791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9]
793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[56+r9]
794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[r11]
796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$common_seh_tail
799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[152+r8]
801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[4+r11]
803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jae	$L$common_seh_tail
806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[192+r8]
808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[8+r10*8+rax]
809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	rax,QWORD PTR[48+rax]
810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[144+r8],rbx
818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[160+r8],rbp
819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[216+r8],r12
820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[224+r8],r13
821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[232+r8],r14
822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[240+r8],r15
823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jmp	$L$common_seh_tail
825116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul_handler	ENDP
826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
828116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	16
829116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsqr_handler	PROC PRIVATE
830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rsi
831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rdi
832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbx
833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	rbp
834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r12
835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r13
836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r14
837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	push	r15
838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pushfq
839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	rsp,64
840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[120+r8]
842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[248+r8]
843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[8+r9]
845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r11,QWORD PTR[56+r9]
846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[r11]
848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jb	$L$common_seh_tail
851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[152+r8]
853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10d,DWORD PTR[4+r11]
855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r10,QWORD PTR[r10*1+rsi]
856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	rbx,r10
857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	jae	$L$common_seh_tail
858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rax,QWORD PTR[40+rax]
860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbx,QWORD PTR[((-8))+rax]
862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rbp,QWORD PTR[((-16))+rax]
863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,QWORD PTR[((-24))+rax]
864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r13,QWORD PTR[((-32))+rax]
865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r14,QWORD PTR[((-40))+rax]
866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r15,QWORD PTR[((-48))+rax]
867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[144+r8],rbx
868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[160+r8],rbp
869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[216+r8],r12
870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[224+r8],r13
871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[232+r8],r14
872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[240+r8],r15
873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$common_seh_tail::
875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[8+rax]
876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,QWORD PTR[16+rax]
877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[152+r8],rax
878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[168+r8],rsi
879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[176+r8],rdi
880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdi,QWORD PTR[40+r9]
882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,r8
883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	ecx,154
884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	0a548f3fch
885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rsi,r9
887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	xor	rcx,rcx
888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	rdx,QWORD PTR[8+rsi]
889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r8,QWORD PTR[rsi]
890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r9,QWORD PTR[16+rsi]
891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r10,QWORD PTR[40+rsi]
892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r11,QWORD PTR[56+rsi]
893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	lea	r12,QWORD PTR[24+rsi]
894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[32+rsp],r10
895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[40+rsp],r11
896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[48+rsp],r12
897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	QWORD PTR[56+rsp],rcx
898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	call	QWORD PTR[__imp_RtlVirtualUnwind]
899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	eax,1
901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	rsp,64
902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	popfq
903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r15
904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r14
905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r13
906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	r12
907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rbp
908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rbx
909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rdi
910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	pop	rsi
911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DB	0F3h,0C3h		;repret
912116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsqr_handler	ENDP
913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text$	ENDS
915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata	SEGMENT READONLY ALIGN(4)
916116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	4
917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_mul_mont
918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_mul_mont
919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_mul_mont
920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_mul4x_mont
922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_mul4x_mont
923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_mul4x_mont
924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_begin_bn_sqr8x_mont
926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_end_bn_sqr8x_mont
927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$SEH_info_bn_sqr8x_mont
928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata	ENDS
929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata	SEGMENT READONLY ALIGN(8)
930116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN	8
931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_mul_mont::
932116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel mul_handler
934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul_body,imagerel $L$mul_epilogue
935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_mul4x_mont::
936116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel mul_handler
938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_sqr8x_mont::
940116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB	9,0,0,0
941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel sqr_handler
942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	DD	imagerel $L$sqr8x_body,imagerel $L$sqr8x_epilogue
943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata	ENDS
945116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND
946