Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: third_party/boringssl/win-x86_64/crypto/bn/x86_64-mont5.asm

Issue 693893006: Roll BoringSSL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nasm
Patch Set: roll further Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 OPTION» DOTNAME 1 default»rel
2 .text$» SEGMENT ALIGN(256) 'CODE' 2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section».text code align=64
3 6
4 EXTERN OPENSSL_ia32cap_P:NEAR
5 7
6 PUBLIC» bn_mul_mont_gather5 8 EXTERN» OPENSSL_ia32cap_P
9
10 global» bn_mul_mont_gather5
7 11
8 ALIGN 64 12 ALIGN 64
9 bn_mul_mont_gather5» PROC PUBLIC 13 bn_mul_mont_gather5:
10 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 14 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
11 » mov» QWORD PTR[16+rsp],rsi 15 » mov» QWORD[16+rsp],rsi
12 mov rax,rsp 16 mov rax,rsp
13 $L$SEH_begin_bn_mul_mont_gather5:: 17 $L$SEH_begin_bn_mul_mont_gather5:
14 mov rdi,rcx 18 mov rdi,rcx
15 mov rsi,rdx 19 mov rsi,rdx
16 mov rdx,r8 20 mov rdx,r8
17 mov rcx,r9 21 mov rcx,r9
18 » mov» r8,QWORD PTR[40+rsp] 22 » mov» r8,QWORD[40+rsp]
19 » mov» r9,QWORD PTR[48+rsp] 23 » mov» r9,QWORD[48+rsp]
20 24
21 25
22 test r9d,7 26 test r9d,7
23 » jnz» $L$mul_enter 27 » jnz» NEAR $L$mul_enter
24 » jmp» $L$mul4x_enter 28 » jmp» NEAR $L$mul4x_enter
25 29
26 ALIGN 16 30 ALIGN 16
27 $L$mul_enter:: 31 $L$mul_enter:
28 mov r9d,r9d 32 mov r9d,r9d
29 mov rax,rsp 33 mov rax,rsp
30 » mov» r10d,DWORD PTR[56+rsp] 34 » mov» r10d,DWORD[56+rsp]
31 push rbx 35 push rbx
32 push rbp 36 push rbp
33 push r12 37 push r12
34 push r13 38 push r13
35 push r14 39 push r14
36 push r15 40 push r15
37 » lea» rsp,QWORD PTR[((-40))+rsp] 41 » lea» rsp,[((-40))+rsp]
38 » movaps» XMMWORD PTR[rsp],xmm6 42 » movaps» XMMWORD[rsp],xmm6
39 » movaps» XMMWORD PTR[16+rsp],xmm7 43 » movaps» XMMWORD[16+rsp],xmm7
40 » lea» r11,QWORD PTR[2+r9] 44 » lea» r11,[2+r9]
41 neg r11 45 neg r11
42 » lea» rsp,QWORD PTR[r11*8+rsp] 46 » lea» rsp,[r11*8+rsp]
43 and rsp,-1024 47 and rsp,-1024
44 48
45 » mov» QWORD PTR[8+r9*8+rsp],rax 49 » mov» QWORD[8+r9*8+rsp],rax
46 $L$mul_body:: 50 $L$mul_body:
47 mov r12,rdx 51 mov r12,rdx
48 mov r11,r10 52 mov r11,r10
49 shr r10,3 53 shr r10,3
50 and r11,7 54 and r11,7
51 not r10 55 not r10
52 » lea» rax,QWORD PTR[$L$magic_masks] 56 » lea» rax,[$L$magic_masks]
53 and r10,3 57 and r10,3
54 » lea» r12,QWORD PTR[96+r11*8+r12] 58 » lea» r12,[96+r11*8+r12]
55 » movq» xmm4,QWORD PTR[r10*8+rax] 59 » movq» xmm4,QWORD[r10*8+rax]
56 » movq» xmm5,QWORD PTR[8+r10*8+rax] 60 » movq» xmm5,QWORD[8+r10*8+rax]
57 » movq» xmm6,QWORD PTR[16+r10*8+rax] 61 » movq» xmm6,QWORD[16+r10*8+rax]
58 » movq» xmm7,QWORD PTR[24+r10*8+rax] 62 » movq» xmm7,QWORD[24+r10*8+rax]
59 63
60 » movq» xmm0,QWORD PTR[(((-96)))+r12] 64 » movq» xmm0,QWORD[(((-96)))+r12]
61 » movq» xmm1,QWORD PTR[((-32))+r12] 65 » movq» xmm1,QWORD[((-32))+r12]
62 pand xmm0,xmm4 66 pand xmm0,xmm4
63 » movq» xmm2,QWORD PTR[32+r12] 67 » movq» xmm2,QWORD[32+r12]
64 pand xmm1,xmm5 68 pand xmm1,xmm5
65 » movq» xmm3,QWORD PTR[96+r12] 69 » movq» xmm3,QWORD[96+r12]
66 pand xmm2,xmm6 70 pand xmm2,xmm6
67 por xmm0,xmm1 71 por xmm0,xmm1
68 pand xmm3,xmm7 72 pand xmm3,xmm7
69 por xmm0,xmm2 73 por xmm0,xmm2
70 » lea» r12,QWORD PTR[256+r12] 74 » lea» r12,[256+r12]
71 por xmm0,xmm3 75 por xmm0,xmm3
72 76
73 DB 102,72,15,126,195 77 DB 102,72,15,126,195
74 78
75 » mov» r8,QWORD PTR[r8] 79 » mov» r8,QWORD[r8]
76 » mov» rax,QWORD PTR[rsi] 80 » mov» rax,QWORD[rsi]
77 81
78 xor r14,r14 82 xor r14,r14
79 xor r15,r15 83 xor r15,r15
80 84
81 » movq» xmm0,QWORD PTR[(((-96)))+r12] 85 » movq» xmm0,QWORD[(((-96)))+r12]
82 » movq» xmm1,QWORD PTR[((-32))+r12] 86 » movq» xmm1,QWORD[((-32))+r12]
83 pand xmm0,xmm4 87 pand xmm0,xmm4
84 » movq» xmm2,QWORD PTR[32+r12] 88 » movq» xmm2,QWORD[32+r12]
85 pand xmm1,xmm5 89 pand xmm1,xmm5
86 90
87 mov rbp,r8 91 mov rbp,r8
88 mul rbx 92 mul rbx
89 mov r10,rax 93 mov r10,rax
90 » mov» rax,QWORD PTR[rcx] 94 » mov» rax,QWORD[rcx]
91 95
92 » movq» xmm3,QWORD PTR[96+r12] 96 » movq» xmm3,QWORD[96+r12]
93 pand xmm2,xmm6 97 pand xmm2,xmm6
94 por xmm0,xmm1 98 por xmm0,xmm1
95 pand xmm3,xmm7 99 pand xmm3,xmm7
96 100
97 imul rbp,r10 101 imul rbp,r10
98 mov r11,rdx 102 mov r11,rdx
99 103
100 por xmm0,xmm2 104 por xmm0,xmm2
101 » lea» r12,QWORD PTR[256+r12] 105 » lea» r12,[256+r12]
102 por xmm0,xmm3 106 por xmm0,xmm3
103 107
104 mul rbp 108 mul rbp
105 add r10,rax 109 add r10,rax
106 » mov» rax,QWORD PTR[8+rsi] 110 » mov» rax,QWORD[8+rsi]
107 adc rdx,0 111 adc rdx,0
108 mov r13,rdx 112 mov r13,rdx
109 113
110 » lea» r15,QWORD PTR[1+r15] 114 » lea» r15,[1+r15]
111 » jmp» $L$1st_enter 115 » jmp» NEAR $L$1st_enter
112 116
113 ALIGN 16 117 ALIGN 16
114 $L$1st:: 118 $L$1st:
115 add r13,rax 119 add r13,rax
116 » mov» rax,QWORD PTR[r15*8+rsi] 120 » mov» rax,QWORD[r15*8+rsi]
117 adc rdx,0 121 adc rdx,0
118 add r13,r11 122 add r13,r11
119 mov r11,r10 123 mov r11,r10
120 adc rdx,0 124 adc rdx,0
121 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 125 » mov» QWORD[((-16))+r15*8+rsp],r13
122 mov r13,rdx 126 mov r13,rdx
123 127
124 $L$1st_enter:: 128 $L$1st_enter:
125 mul rbx 129 mul rbx
126 add r11,rax 130 add r11,rax
127 » mov» rax,QWORD PTR[r15*8+rcx] 131 » mov» rax,QWORD[r15*8+rcx]
128 adc rdx,0 132 adc rdx,0
129 » lea» r15,QWORD PTR[1+r15] 133 » lea» r15,[1+r15]
130 mov r10,rdx 134 mov r10,rdx
131 135
132 mul rbp 136 mul rbp
133 cmp r15,r9 137 cmp r15,r9
134 » jne» $L$1st 138 » jne» NEAR $L$1st
135 139
136 DB 102,72,15,126,195 140 DB 102,72,15,126,195
137 141
138 add r13,rax 142 add r13,rax
139 » mov» rax,QWORD PTR[rsi] 143 » mov» rax,QWORD[rsi]
140 adc rdx,0 144 adc rdx,0
141 add r13,r11 145 add r13,r11
142 adc rdx,0 146 adc rdx,0
143 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 147 » mov» QWORD[((-16))+r15*8+rsp],r13
144 mov r13,rdx 148 mov r13,rdx
145 mov r11,r10 149 mov r11,r10
146 150
147 xor rdx,rdx 151 xor rdx,rdx
148 add r13,r11 152 add r13,r11
149 adc rdx,0 153 adc rdx,0
150 » mov» QWORD PTR[((-8))+r9*8+rsp],r13 154 » mov» QWORD[((-8))+r9*8+rsp],r13
151 » mov» QWORD PTR[r9*8+rsp],rdx 155 » mov» QWORD[r9*8+rsp],rdx
152 156
153 » lea» r14,QWORD PTR[1+r14] 157 » lea» r14,[1+r14]
154 » jmp» $L$outer 158 » jmp» NEAR $L$outer
155 ALIGN 16 159 ALIGN 16
156 $L$outer:: 160 $L$outer:
157 xor r15,r15 161 xor r15,r15
158 mov rbp,r8 162 mov rbp,r8
159 » mov» r10,QWORD PTR[rsp] 163 » mov» r10,QWORD[rsp]
160 164
161 » movq» xmm0,QWORD PTR[(((-96)))+r12] 165 » movq» xmm0,QWORD[(((-96)))+r12]
162 » movq» xmm1,QWORD PTR[((-32))+r12] 166 » movq» xmm1,QWORD[((-32))+r12]
163 pand xmm0,xmm4 167 pand xmm0,xmm4
164 » movq» xmm2,QWORD PTR[32+r12] 168 » movq» xmm2,QWORD[32+r12]
165 pand xmm1,xmm5 169 pand xmm1,xmm5
166 170
167 mul rbx 171 mul rbx
168 add r10,rax 172 add r10,rax
169 » mov» rax,QWORD PTR[rcx] 173 » mov» rax,QWORD[rcx]
170 adc rdx,0 174 adc rdx,0
171 175
172 » movq» xmm3,QWORD PTR[96+r12] 176 » movq» xmm3,QWORD[96+r12]
173 pand xmm2,xmm6 177 pand xmm2,xmm6
174 por xmm0,xmm1 178 por xmm0,xmm1
175 pand xmm3,xmm7 179 pand xmm3,xmm7
176 180
177 imul rbp,r10 181 imul rbp,r10
178 mov r11,rdx 182 mov r11,rdx
179 183
180 por xmm0,xmm2 184 por xmm0,xmm2
181 » lea» r12,QWORD PTR[256+r12] 185 » lea» r12,[256+r12]
182 por xmm0,xmm3 186 por xmm0,xmm3
183 187
184 mul rbp 188 mul rbp
185 add r10,rax 189 add r10,rax
186 » mov» rax,QWORD PTR[8+rsi] 190 » mov» rax,QWORD[8+rsi]
187 adc rdx,0 191 adc rdx,0
188 » mov» r10,QWORD PTR[8+rsp] 192 » mov» r10,QWORD[8+rsp]
189 mov r13,rdx 193 mov r13,rdx
190 194
191 » lea» r15,QWORD PTR[1+r15] 195 » lea» r15,[1+r15]
192 » jmp» $L$inner_enter 196 » jmp» NEAR $L$inner_enter
193 197
194 ALIGN 16 198 ALIGN 16
195 $L$inner:: 199 $L$inner:
196 add r13,rax 200 add r13,rax
197 » mov» rax,QWORD PTR[r15*8+rsi] 201 » mov» rax,QWORD[r15*8+rsi]
198 adc rdx,0 202 adc rdx,0
199 add r13,r10 203 add r13,r10
200 » mov» r10,QWORD PTR[r15*8+rsp] 204 » mov» r10,QWORD[r15*8+rsp]
201 adc rdx,0 205 adc rdx,0
202 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 206 » mov» QWORD[((-16))+r15*8+rsp],r13
203 mov r13,rdx 207 mov r13,rdx
204 208
205 $L$inner_enter:: 209 $L$inner_enter:
206 mul rbx 210 mul rbx
207 add r11,rax 211 add r11,rax
208 » mov» rax,QWORD PTR[r15*8+rcx] 212 » mov» rax,QWORD[r15*8+rcx]
209 adc rdx,0 213 adc rdx,0
210 add r10,r11 214 add r10,r11
211 mov r11,rdx 215 mov r11,rdx
212 adc r11,0 216 adc r11,0
213 » lea» r15,QWORD PTR[1+r15] 217 » lea» r15,[1+r15]
214 218
215 mul rbp 219 mul rbp
216 cmp r15,r9 220 cmp r15,r9
217 » jne» $L$inner 221 » jne» NEAR $L$inner
218 222
219 DB 102,72,15,126,195 223 DB 102,72,15,126,195
220 224
221 add r13,rax 225 add r13,rax
222 » mov» rax,QWORD PTR[rsi] 226 » mov» rax,QWORD[rsi]
223 adc rdx,0 227 adc rdx,0
224 add r13,r10 228 add r13,r10
225 » mov» r10,QWORD PTR[r15*8+rsp] 229 » mov» r10,QWORD[r15*8+rsp]
226 adc rdx,0 230 adc rdx,0
227 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 231 » mov» QWORD[((-16))+r15*8+rsp],r13
228 mov r13,rdx 232 mov r13,rdx
229 233
230 xor rdx,rdx 234 xor rdx,rdx
231 add r13,r11 235 add r13,r11
232 adc rdx,0 236 adc rdx,0
233 add r13,r10 237 add r13,r10
234 adc rdx,0 238 adc rdx,0
235 » mov» QWORD PTR[((-8))+r9*8+rsp],r13 239 » mov» QWORD[((-8))+r9*8+rsp],r13
236 » mov» QWORD PTR[r9*8+rsp],rdx 240 » mov» QWORD[r9*8+rsp],rdx
237 241
238 » lea» r14,QWORD PTR[1+r14] 242 » lea» r14,[1+r14]
239 cmp r14,r9 243 cmp r14,r9
240 » jb» $L$outer 244 » jb» NEAR $L$outer
241 245
242 xor r14,r14 246 xor r14,r14
243 » mov» rax,QWORD PTR[rsp] 247 » mov» rax,QWORD[rsp]
244 » lea» rsi,QWORD PTR[rsp] 248 » lea» rsi,[rsp]
245 mov r15,r9 249 mov r15,r9
246 » jmp» $L$sub 250 » jmp» NEAR $L$sub
247 ALIGN 16 251 ALIGN 16
248 $L$sub::» sbb» rax,QWORD PTR[r14*8+rcx] 252 $L$sub:»sbb» rax,QWORD[r14*8+rcx]
249 » mov» QWORD PTR[r14*8+rdi],rax 253 » mov» QWORD[r14*8+rdi],rax
250 » mov» rax,QWORD PTR[8+r14*8+rsi] 254 » mov» rax,QWORD[8+r14*8+rsi]
251 » lea» r14,QWORD PTR[1+r14] 255 » lea» r14,[1+r14]
252 dec r15 256 dec r15
253 » jnz» $L$sub 257 » jnz» NEAR $L$sub
254 258
255 sbb rax,0 259 sbb rax,0
256 xor r14,r14 260 xor r14,r14
257 mov r15,r9 261 mov r15,r9
258 ALIGN 16 262 ALIGN 16
259 $L$copy:: 263 $L$copy:
260 » mov» rsi,QWORD PTR[r14*8+rsp] 264 » mov» rsi,QWORD[r14*8+rsp]
261 » mov» rcx,QWORD PTR[r14*8+rdi] 265 » mov» rcx,QWORD[r14*8+rdi]
262 xor rsi,rcx 266 xor rsi,rcx
263 and rsi,rax 267 and rsi,rax
264 xor rsi,rcx 268 xor rsi,rcx
265 » mov» QWORD PTR[r14*8+rsp],r14 269 » mov» QWORD[r14*8+rsp],r14
266 » mov» QWORD PTR[r14*8+rdi],rsi 270 » mov» QWORD[r14*8+rdi],rsi
267 » lea» r14,QWORD PTR[1+r14] 271 » lea» r14,[1+r14]
268 sub r15,1 272 sub r15,1
269 » jnz» $L$copy 273 » jnz» NEAR $L$copy
270 274
271 » mov» rsi,QWORD PTR[8+r9*8+rsp] 275 » mov» rsi,QWORD[8+r9*8+rsp]
272 mov rax,1 276 mov rax,1
273 » movaps» xmm6,XMMWORD PTR[((-88))+rsi] 277 » movaps» xmm6,XMMWORD[((-88))+rsi]
274 » movaps» xmm7,XMMWORD PTR[((-72))+rsi] 278 » movaps» xmm7,XMMWORD[((-72))+rsi]
275 » mov» r15,QWORD PTR[((-48))+rsi] 279 » mov» r15,QWORD[((-48))+rsi]
276 » mov» r14,QWORD PTR[((-40))+rsi] 280 » mov» r14,QWORD[((-40))+rsi]
277 » mov» r13,QWORD PTR[((-32))+rsi] 281 » mov» r13,QWORD[((-32))+rsi]
278 » mov» r12,QWORD PTR[((-24))+rsi] 282 » mov» r12,QWORD[((-24))+rsi]
279 » mov» rbp,QWORD PTR[((-16))+rsi] 283 » mov» rbp,QWORD[((-16))+rsi]
280 » mov» rbx,QWORD PTR[((-8))+rsi] 284 » mov» rbx,QWORD[((-8))+rsi]
281 » lea» rsp,QWORD PTR[rsi] 285 » lea» rsp,[rsi]
282 $L$mul_epilogue:: 286 $L$mul_epilogue:
283 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 287 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
284 » mov» rsi,QWORD PTR[16+rsp] 288 » mov» rsi,QWORD[16+rsp]
285 DB 0F3h,0C3h ;repret 289 DB 0F3h,0C3h ;repret
286 $L$SEH_end_bn_mul_mont_gather5:: 290 $L$SEH_end_bn_mul_mont_gather5:
287 bn_mul_mont_gather5» ENDP
288 291
289 ALIGN 32 292 ALIGN 32
290 bn_mul4x_mont_gather5» PROC PRIVATE 293 bn_mul4x_mont_gather5:
291 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 294 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
292 » mov» QWORD PTR[16+rsp],rsi 295 » mov» QWORD[16+rsp],rsi
293 mov rax,rsp 296 mov rax,rsp
294 $L$SEH_begin_bn_mul4x_mont_gather5:: 297 $L$SEH_begin_bn_mul4x_mont_gather5:
295 mov rdi,rcx 298 mov rdi,rcx
296 mov rsi,rdx 299 mov rsi,rdx
297 mov rdx,r8 300 mov rdx,r8
298 mov rcx,r9 301 mov rcx,r9
299 » mov» r8,QWORD PTR[40+rsp] 302 » mov» r8,QWORD[40+rsp]
300 » mov» r9,QWORD PTR[48+rsp] 303 » mov» r9,QWORD[48+rsp]
301 304
302 305
303 $L$mul4x_enter:: 306 $L$mul4x_enter:
304 DB» 067h 307 DB» 0x67
305 mov rax,rsp 308 mov rax,rsp
306 push rbx 309 push rbx
307 push rbp 310 push rbp
308 push r12 311 push r12
309 push r13 312 push r13
310 push r14 313 push r14
311 push r15 314 push r15
312 » lea» rsp,QWORD PTR[((-40))+rsp] 315 » lea» rsp,[((-40))+rsp]
313 » movaps» XMMWORD PTR[rsp],xmm6 316 » movaps» XMMWORD[rsp],xmm6
314 » movaps» XMMWORD PTR[16+rsp],xmm7 317 » movaps» XMMWORD[16+rsp],xmm7
315 DB» 067h 318 DB» 0x67
316 mov r10d,r9d 319 mov r10d,r9d
317 shl r9d,3 320 shl r9d,3
318 shl r10d,3+2 321 shl r10d,3+2
319 neg r9 322 neg r9
320 323
321 324
322 325
323 326
324 327
325 328
326 329
327 330
328 » lea» r11,QWORD PTR[((-64))+r9*2+rsp] 331 » lea» r11,[((-64))+r9*2+rsp]
329 sub r11,rsi 332 sub r11,rsi
330 and r11,4095 333 and r11,4095
331 cmp r10,r11 334 cmp r10,r11
332 » jb» $L$mul4xsp_alt 335 » jb» NEAR $L$mul4xsp_alt
333 sub rsp,r11 336 sub rsp,r11
334 » lea» rsp,QWORD PTR[((-64))+r9*2+rsp] 337 » lea» rsp,[((-64))+r9*2+rsp]
335 » jmp» $L$mul4xsp_done 338 » jmp» NEAR $L$mul4xsp_done
336 339
337 ALIGN 32 340 ALIGN 32
338 $L$mul4xsp_alt:: 341 $L$mul4xsp_alt:
339 » lea» r10,QWORD PTR[((4096-64))+r9*2] 342 » lea» r10,[((4096-64))+r9*2]
340 » lea» rsp,QWORD PTR[((-64))+r9*2+rsp] 343 » lea» rsp,[((-64))+r9*2+rsp]
341 sub r11,r10 344 sub r11,r10
342 mov r10,0 345 mov r10,0
343 cmovc r11,r10 346 cmovc r11,r10
344 sub rsp,r11 347 sub rsp,r11
345 $L$mul4xsp_done:: 348 $L$mul4xsp_done:
346 and rsp,-64 349 and rsp,-64
347 neg r9 350 neg r9
348 351
349 » mov» QWORD PTR[40+rsp],rax 352 » mov» QWORD[40+rsp],rax
350 $L$mul4x_body:: 353 $L$mul4x_body:
351 354
352 call mul4x_internal 355 call mul4x_internal
353 356
354 » mov» rsi,QWORD PTR[40+rsp] 357 » mov» rsi,QWORD[40+rsp]
355 mov rax,1 358 mov rax,1
356 » movaps» xmm6,XMMWORD PTR[((-88))+rsi] 359 » movaps» xmm6,XMMWORD[((-88))+rsi]
357 » movaps» xmm7,XMMWORD PTR[((-72))+rsi] 360 » movaps» xmm7,XMMWORD[((-72))+rsi]
358 » mov» r15,QWORD PTR[((-48))+rsi] 361 » mov» r15,QWORD[((-48))+rsi]
359 » mov» r14,QWORD PTR[((-40))+rsi] 362 » mov» r14,QWORD[((-40))+rsi]
360 » mov» r13,QWORD PTR[((-32))+rsi] 363 » mov» r13,QWORD[((-32))+rsi]
361 » mov» r12,QWORD PTR[((-24))+rsi] 364 » mov» r12,QWORD[((-24))+rsi]
362 » mov» rbp,QWORD PTR[((-16))+rsi] 365 » mov» rbp,QWORD[((-16))+rsi]
363 » mov» rbx,QWORD PTR[((-8))+rsi] 366 » mov» rbx,QWORD[((-8))+rsi]
364 » lea» rsp,QWORD PTR[rsi] 367 » lea» rsp,[rsi]
365 $L$mul4x_epilogue:: 368 $L$mul4x_epilogue:
366 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 369 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
367 » mov» rsi,QWORD PTR[16+rsp] 370 » mov» rsi,QWORD[16+rsp]
368 DB 0F3h,0C3h ;repret 371 DB 0F3h,0C3h ;repret
369 $L$SEH_end_bn_mul4x_mont_gather5:: 372 $L$SEH_end_bn_mul4x_mont_gather5:
370 bn_mul4x_mont_gather5» ENDP
371 373
372 374
373 ALIGN 32 375 ALIGN 32
374 mul4x_internal» PROC PRIVATE 376 mul4x_internal:
375 shl r9,5 377 shl r9,5
376 » mov» r10d,DWORD PTR[56+rax] 378 » mov» r10d,DWORD[56+rax]
377 » lea» r13,QWORD PTR[256+r9*1+rdx] 379 » lea» r13,[256+r9*1+rdx]
378 shr r9,5 380 shr r9,5
379 mov r11,r10 381 mov r11,r10
380 shr r10,3 382 shr r10,3
381 and r11,7 383 and r11,7
382 not r10 384 not r10
383 » lea» rax,QWORD PTR[$L$magic_masks] 385 » lea» rax,[$L$magic_masks]
384 and r10,3 386 and r10,3
385 » lea» r12,QWORD PTR[96+r11*8+rdx] 387 » lea» r12,[96+r11*8+rdx]
386 » movq» xmm4,QWORD PTR[r10*8+rax] 388 » movq» xmm4,QWORD[r10*8+rax]
387 » movq» xmm5,QWORD PTR[8+r10*8+rax] 389 » movq» xmm5,QWORD[8+r10*8+rax]
388 add r11,7 390 add r11,7
389 » movq» xmm6,QWORD PTR[16+r10*8+rax] 391 » movq» xmm6,QWORD[16+r10*8+rax]
390 » movq» xmm7,QWORD PTR[24+r10*8+rax] 392 » movq» xmm7,QWORD[24+r10*8+rax]
391 and r11,7 393 and r11,7
392 394
393 » movq» xmm0,QWORD PTR[(((-96)))+r12] 395 » movq» xmm0,QWORD[(((-96)))+r12]
394 » lea» r14,QWORD PTR[256+r12] 396 » lea» r14,[256+r12]
395 » movq» xmm1,QWORD PTR[((-32))+r12] 397 » movq» xmm1,QWORD[((-32))+r12]
396 pand xmm0,xmm4 398 pand xmm0,xmm4
397 » movq» xmm2,QWORD PTR[32+r12] 399 » movq» xmm2,QWORD[32+r12]
398 pand xmm1,xmm5 400 pand xmm1,xmm5
399 » movq» xmm3,QWORD PTR[96+r12] 401 » movq» xmm3,QWORD[96+r12]
400 pand xmm2,xmm6 402 pand xmm2,xmm6
401 DB» 067h 403 DB» 0x67
402 por xmm0,xmm1 404 por xmm0,xmm1
403 » movq» xmm1,QWORD PTR[((-96))+r14] 405 » movq» xmm1,QWORD[((-96))+r14]
404 DB» 067h 406 DB» 0x67
405 pand xmm3,xmm7 407 pand xmm3,xmm7
406 DB» 067h 408 DB» 0x67
407 por xmm0,xmm2 409 por xmm0,xmm2
408 » movq» xmm2,QWORD PTR[((-32))+r14] 410 » movq» xmm2,QWORD[((-32))+r14]
409 DB» 067h 411 DB» 0x67
410 pand xmm1,xmm4 412 pand xmm1,xmm4
411 DB» 067h 413 DB» 0x67
412 por xmm0,xmm3 414 por xmm0,xmm3
413 » movq» xmm3,QWORD PTR[32+r14] 415 » movq» xmm3,QWORD[32+r14]
414 416
415 DB 102,72,15,126,195 417 DB 102,72,15,126,195
416 » movq» xmm0,QWORD PTR[96+r14] 418 » movq» xmm0,QWORD[96+r14]
417 » mov» QWORD PTR[((16+8))+rsp],r13 419 » mov» QWORD[((16+8))+rsp],r13
418 » mov» QWORD PTR[((56+8))+rsp],rdi 420 » mov» QWORD[((56+8))+rsp],rdi
419 421
420 » mov» r8,QWORD PTR[r8] 422 » mov» r8,QWORD[r8]
421 » mov» rax,QWORD PTR[rsi] 423 » mov» rax,QWORD[rsi]
422 » lea» rsi,QWORD PTR[r9*1+rsi] 424 » lea» rsi,[r9*1+rsi]
423 neg r9 425 neg r9
424 426
425 mov rbp,r8 427 mov rbp,r8
426 mul rbx 428 mul rbx
427 mov r10,rax 429 mov r10,rax
428 » mov» rax,QWORD PTR[rcx] 430 » mov» rax,QWORD[rcx]
429 431
430 pand xmm2,xmm5 432 pand xmm2,xmm5
431 pand xmm3,xmm6 433 pand xmm3,xmm6
432 por xmm1,xmm2 434 por xmm1,xmm2
433 435
434 imul rbp,r10 436 imul rbp,r10
435 437
436 438
437 439
438 440
439 441
440 442
441 443
442 » lea» r14,QWORD PTR[((64+8))+r11*8+rsp] 444 » lea» r14,[((64+8))+r11*8+rsp]
443 mov r11,rdx 445 mov r11,rdx
444 446
445 pand xmm0,xmm7 447 pand xmm0,xmm7
446 por xmm1,xmm3 448 por xmm1,xmm3
447 » lea» r12,QWORD PTR[512+r12] 449 » lea» r12,[512+r12]
448 por xmm0,xmm1 450 por xmm0,xmm1
449 451
450 mul rbp 452 mul rbp
451 add r10,rax 453 add r10,rax
452 » mov» rax,QWORD PTR[8+r9*1+rsi] 454 » mov» rax,QWORD[8+r9*1+rsi]
453 » adc» rdx,0 455 » adc» rdx,0
454 » mov» rdi,rdx 456 » mov» rdi,rdx
455 457
456 » mul» rbx 458 » mul» rbx
457 » add» r11,rax 459 » add» r11,rax
458 » mov» rax,QWORD PTR[16+rcx] 460 » mov» rax,QWORD[16+rcx]
459 » adc» rdx,0 461 » adc» rdx,0
460 » mov» r10,rdx 462 » mov» r10,rdx
461 463
462 » mul» rbp 464 » mul» rbp
463 » add» rdi,rax 465 » add» rdi,rax
464 » mov» rax,QWORD PTR[16+r9*1+rsi] 466 » mov» rax,QWORD[16+r9*1+rsi]
465 » adc» rdx,0 467 » adc» rdx,0
466 » add» rdi,r11 468 » add» rdi,r11
467 » lea» r15,QWORD PTR[32+r9] 469 » lea» r15,[32+r9]
468 » lea» rcx,QWORD PTR[64+rcx] 470 » lea» rcx,[64+rcx]
469 » adc» rdx,0 471 » adc» rdx,0
470 » mov» QWORD PTR[r14],rdi 472 » mov» QWORD[r14],rdi
471 » mov» r13,rdx 473 » mov» r13,rdx
472 » jmp» $L$1st4x 474 » jmp» NEAR $L$1st4x
473 475
474 ALIGN 32 476 ALIGN 32
475 $L$1st4x:: 477 $L$1st4x:
476 » mul» rbx 478 » mul» rbx
477 » add» r10,rax 479 » add» r10,rax
478 » mov» rax,QWORD PTR[((-32))+rcx] 480 » mov» rax,QWORD[((-32))+rcx]
479 » lea» r14,QWORD PTR[32+r14] 481 » lea» r14,[32+r14]
480 » adc» rdx,0 482 » adc» rdx,0
481 » mov» r11,rdx 483 » mov» r11,rdx
482 484
483 » mul» rbp 485 » mul» rbp
484 » add» r13,rax 486 » add» r13,rax
485 » mov» rax,QWORD PTR[((-8))+r15*1+rsi] 487 » mov» rax,QWORD[((-8))+r15*1+rsi]
486 » adc» rdx,0 488 » adc» rdx,0
487 » add» r13,r10 489 » add» r13,r10
488 » adc» rdx,0 490 » adc» rdx,0
489 » mov» QWORD PTR[((-24))+r14],r13 491 » mov» QWORD[((-24))+r14],r13
490 » mov» rdi,rdx 492 » mov» rdi,rdx
491 493
492 » mul» rbx 494 » mul» rbx
493 » add» r11,rax 495 » add» r11,rax
494 » mov» rax,QWORD PTR[((-16))+rcx] 496 » mov» rax,QWORD[((-16))+rcx]
495 » adc» rdx,0 497 » adc» rdx,0
496 » mov» r10,rdx 498 » mov» r10,rdx
497 499
498 » mul» rbp 500 » mul» rbp
499 » add» rdi,rax 501 » add» rdi,rax
500 » mov» rax,QWORD PTR[r15*1+rsi] 502 » mov» rax,QWORD[r15*1+rsi]
501 » adc» rdx,0 503 » adc» rdx,0
502 » add» rdi,r11 504 » add» rdi,r11
503 » adc» rdx,0 505 » adc» rdx,0
504 » mov» QWORD PTR[((-16))+r14],rdi 506 » mov» QWORD[((-16))+r14],rdi
505 » mov» r13,rdx 507 » mov» r13,rdx
506 508
507 » mul» rbx 509 » mul» rbx
508 » add» r10,rax 510 » add» r10,rax
509 » mov» rax,QWORD PTR[rcx] 511 » mov» rax,QWORD[rcx]
510 » adc» rdx,0 512 » adc» rdx,0
511 » mov» r11,rdx 513 » mov» r11,rdx
512 514
513 » mul» rbp 515 » mul» rbp
514 » add» r13,rax 516 » add» r13,rax
515 » mov» rax,QWORD PTR[8+r15*1+rsi] 517 » mov» rax,QWORD[8+r15*1+rsi]
516 » adc» rdx,0 518 » adc» rdx,0
517 » add» r13,r10 519 » add» r13,r10
518 » adc» rdx,0 520 » adc» rdx,0
519 » mov» QWORD PTR[((-8))+r14],r13 521 » mov» QWORD[((-8))+r14],r13
520 » mov» rdi,rdx 522 » mov» rdi,rdx
521 523
522 » mul» rbx 524 » mul» rbx
523 » add» r11,rax 525 » add» r11,rax
524 » mov» rax,QWORD PTR[16+rcx] 526 » mov» rax,QWORD[16+rcx]
525 » adc» rdx,0 527 » adc» rdx,0
526 » mov» r10,rdx 528 » mov» r10,rdx
527 529
528 » mul» rbp 530 » mul» rbp
529 » add» rdi,rax 531 » add» rdi,rax
530 » mov» rax,QWORD PTR[16+r15*1+rsi] 532 » mov» rax,QWORD[16+r15*1+rsi]
531 » adc» rdx,0 533 » adc» rdx,0
532 » add» rdi,r11 534 » add» rdi,r11
533 » lea» rcx,QWORD PTR[64+rcx] 535 » lea» rcx,[64+rcx]
534 » adc» rdx,0 536 » adc» rdx,0
535 » mov» QWORD PTR[r14],rdi 537 » mov» QWORD[r14],rdi
536 mov r13,rdx 538 mov r13,rdx
537 539
538 add r15,32 540 add r15,32
539 » jnz» $L$1st4x 541 » jnz» NEAR $L$1st4x
540 542
541 » mul» rbx 543 » mul» rbx
542 » add» r10,rax 544 » add» r10,rax
543 » mov» rax,QWORD PTR[((-32))+rcx] 545 » mov» rax,QWORD[((-32))+rcx]
544 » lea» r14,QWORD PTR[32+r14] 546 » lea» r14,[32+r14]
545 » adc» rdx,0 547 » adc» rdx,0
546 » mov» r11,rdx 548 » mov» r11,rdx
547 549
548 » mul» rbp 550 » mul» rbp
549 » add» r13,rax 551 » add» r13,rax
550 » mov» rax,QWORD PTR[((-8))+rsi] 552 » mov» rax,QWORD[((-8))+rsi]
551 » adc» rdx,0 553 » adc» rdx,0
552 » add» r13,r10 554 » add» r13,r10
553 » adc» rdx,0 555 » adc» rdx,0
554 » mov» QWORD PTR[((-24))+r14],r13 556 » mov» QWORD[((-24))+r14],r13
555 » mov» rdi,rdx 557 » mov» rdi,rdx
556 558
557 » mul» rbx 559 » mul» rbx
558 » add» r11,rax 560 » add» r11,rax
559 » mov» rax,QWORD PTR[((-16))+rcx] 561 » mov» rax,QWORD[((-16))+rcx]
560 » adc» rdx,0 562 » adc» rdx,0
561 » mov» r10,rdx 563 » mov» r10,rdx
562 564
563 » mul» rbp 565 » mul» rbp
564 » add» rdi,rax 566 » add» rdi,rax
565 » mov» rax,QWORD PTR[r9*1+rsi] 567 » mov» rax,QWORD[r9*1+rsi]
566 » adc» rdx,0 568 » adc» rdx,0
567 » add» rdi,r11 569 » add» rdi,r11
568 » adc» rdx,0 570 » adc» rdx,0
569 » mov» QWORD PTR[((-16))+r14],rdi 571 » mov» QWORD[((-16))+r14],rdi
570 mov r13,rdx 572 mov r13,rdx
571 573
572 DB 102,72,15,126,195 574 DB 102,72,15,126,195
573 » lea» rcx,QWORD PTR[r9*2+rcx] 575 » lea» rcx,[r9*2+rcx]
574 576
575 xor rdi,rdi 577 xor rdi,rdi
576 add r13,r10 578 add r13,r10
577 adc rdi,0 579 adc rdi,0
578 » mov» QWORD PTR[((-8))+r14],r13 580 » mov» QWORD[((-8))+r14],r13
579 581
580 » jmp» $L$outer4x 582 » jmp» NEAR $L$outer4x
581 583
582 ALIGN 32 584 ALIGN 32
583 $L$outer4x:: 585 $L$outer4x:
584 » mov» r10,QWORD PTR[r9*1+r14] 586 » mov» r10,QWORD[r9*1+r14]
585 mov rbp,r8 587 mov rbp,r8
586 mul rbx 588 mul rbx
587 add r10,rax 589 add r10,rax
588 » mov» rax,QWORD PTR[rcx] 590 » mov» rax,QWORD[rcx]
589 » adc» rdx,0 591 » adc» rdx,0
590 592
591 » movq» xmm0,QWORD PTR[(((-96)))+r12] 593 » movq» xmm0,QWORD[(((-96)))+r12]
592 » movq» xmm1,QWORD PTR[((-32))+r12] 594 » movq» xmm1,QWORD[((-32))+r12]
593 pand xmm0,xmm4 595 pand xmm0,xmm4
594 » movq» xmm2,QWORD PTR[32+r12] 596 » movq» xmm2,QWORD[32+r12]
595 pand xmm1,xmm5 597 pand xmm1,xmm5
596 » movq» xmm3,QWORD PTR[96+r12] 598 » movq» xmm3,QWORD[96+r12]
597 599
598 imul rbp,r10 600 imul rbp,r10
599 DB» 067h 601 DB» 0x67
600 » mov» r11,rdx 602 » mov» r11,rdx
601 » mov» QWORD PTR[r14],rdi 603 » mov» QWORD[r14],rdi
602 604
603 pand xmm2,xmm6 605 pand xmm2,xmm6
604 por xmm0,xmm1 606 por xmm0,xmm1
605 pand xmm3,xmm7 607 pand xmm3,xmm7
606 por xmm0,xmm2 608 por xmm0,xmm2
607 » lea» r14,QWORD PTR[r9*1+r14] 609 » lea» r14,[r9*1+r14]
608 » lea» r12,QWORD PTR[256+r12] 610 » lea» r12,[256+r12]
609 por xmm0,xmm3 611 por xmm0,xmm3
610 612
611 mul rbp 613 mul rbp
612 add r10,rax 614 add r10,rax
613 » mov» rax,QWORD PTR[8+r9*1+rsi] 615 » mov» rax,QWORD[8+r9*1+rsi]
614 » adc» rdx,0 616 » adc» rdx,0
615 » mov» rdi,rdx 617 » mov» rdi,rdx
616 618
617 » mul» rbx 619 » mul» rbx
618 » add» r11,rax 620 » add» r11,rax
619 » mov» rax,QWORD PTR[16+rcx] 621 » mov» rax,QWORD[16+rcx]
620 » adc» rdx,0 622 » adc» rdx,0
621 » add» r11,QWORD PTR[8+r14] 623 » add» r11,QWORD[8+r14]
622 » adc» rdx,0 624 » adc» rdx,0
623 » mov» r10,rdx 625 » mov» r10,rdx
624 626
625 » mul» rbp 627 » mul» rbp
626 » add» rdi,rax 628 » add» rdi,rax
627 » mov» rax,QWORD PTR[16+r9*1+rsi] 629 » mov» rax,QWORD[16+r9*1+rsi]
628 » adc» rdx,0 630 » adc» rdx,0
629 » add» rdi,r11 631 » add» rdi,r11
630 » lea» r15,QWORD PTR[32+r9] 632 » lea» r15,[32+r9]
631 » lea» rcx,QWORD PTR[64+rcx] 633 » lea» rcx,[64+rcx]
632 » adc» rdx,0 634 » adc» rdx,0
633 » mov» r13,rdx 635 » mov» r13,rdx
634 » jmp» $L$inner4x 636 » jmp» NEAR $L$inner4x
635 637
636 ALIGN 32 638 ALIGN 32
637 $L$inner4x:: 639 $L$inner4x:
638 » mul» rbx 640 » mul» rbx
639 » add» r10,rax 641 » add» r10,rax
640 » mov» rax,QWORD PTR[((-32))+rcx] 642 » mov» rax,QWORD[((-32))+rcx]
641 » adc» rdx,0 643 » adc» rdx,0
642 » add» r10,QWORD PTR[16+r14] 644 » add» r10,QWORD[16+r14]
643 » lea» r14,QWORD PTR[32+r14] 645 » lea» r14,[32+r14]
644 » adc» rdx,0 646 » adc» rdx,0
645 » mov» r11,rdx 647 » mov» r11,rdx
646 648
647 » mul» rbp 649 » mul» rbp
648 » add» r13,rax 650 » add» r13,rax
649 » mov» rax,QWORD PTR[((-8))+r15*1+rsi] 651 » mov» rax,QWORD[((-8))+r15*1+rsi]
650 » adc» rdx,0 652 » adc» rdx,0
651 » add» r13,r10 653 » add» r13,r10
652 » adc» rdx,0 654 » adc» rdx,0
653 » mov» QWORD PTR[((-32))+r14],rdi 655 » mov» QWORD[((-32))+r14],rdi
654 » mov» rdi,rdx 656 » mov» rdi,rdx
655 657
656 » mul» rbx 658 » mul» rbx
657 » add» r11,rax 659 » add» r11,rax
658 » mov» rax,QWORD PTR[((-16))+rcx] 660 » mov» rax,QWORD[((-16))+rcx]
659 » adc» rdx,0 661 » adc» rdx,0
660 » add» r11,QWORD PTR[((-8))+r14] 662 » add» r11,QWORD[((-8))+r14]
661 » adc» rdx,0 663 » adc» rdx,0
662 » mov» r10,rdx 664 » mov» r10,rdx
663 665
664 » mul» rbp 666 » mul» rbp
665 » add» rdi,rax 667 » add» rdi,rax
666 » mov» rax,QWORD PTR[r15*1+rsi] 668 » mov» rax,QWORD[r15*1+rsi]
667 » adc» rdx,0 669 » adc» rdx,0
668 » add» rdi,r11 670 » add» rdi,r11
669 » adc» rdx,0 671 » adc» rdx,0
670 » mov» QWORD PTR[((-24))+r14],r13 672 » mov» QWORD[((-24))+r14],r13
671 » mov» r13,rdx 673 » mov» r13,rdx
672 674
673 » mul» rbx 675 » mul» rbx
674 » add» r10,rax 676 » add» r10,rax
675 » mov» rax,QWORD PTR[rcx] 677 » mov» rax,QWORD[rcx]
676 » adc» rdx,0 678 » adc» rdx,0
677 » add» r10,QWORD PTR[r14] 679 » add» r10,QWORD[r14]
678 » adc» rdx,0 680 » adc» rdx,0
679 » mov» r11,rdx 681 » mov» r11,rdx
680 682
681 » mul» rbp 683 » mul» rbp
682 » add» r13,rax 684 » add» r13,rax
683 » mov» rax,QWORD PTR[8+r15*1+rsi] 685 » mov» rax,QWORD[8+r15*1+rsi]
684 » adc» rdx,0 686 » adc» rdx,0
685 » add» r13,r10 687 » add» r13,r10
686 » adc» rdx,0 688 » adc» rdx,0
687 » mov» QWORD PTR[((-16))+r14],rdi 689 » mov» QWORD[((-16))+r14],rdi
688 » mov» rdi,rdx 690 » mov» rdi,rdx
689 691
690 » mul» rbx 692 » mul» rbx
691 » add» r11,rax 693 » add» r11,rax
692 » mov» rax,QWORD PTR[16+rcx] 694 » mov» rax,QWORD[16+rcx]
693 » adc» rdx,0 695 » adc» rdx,0
694 » add» r11,QWORD PTR[8+r14] 696 » add» r11,QWORD[8+r14]
695 » adc» rdx,0 697 » adc» rdx,0
696 » mov» r10,rdx 698 » mov» r10,rdx
697 699
698 » mul» rbp 700 » mul» rbp
699 » add» rdi,rax 701 » add» rdi,rax
700 » mov» rax,QWORD PTR[16+r15*1+rsi] 702 » mov» rax,QWORD[16+r15*1+rsi]
701 » adc» rdx,0 703 » adc» rdx,0
702 » add» rdi,r11 704 » add» rdi,r11
703 » lea» rcx,QWORD PTR[64+rcx] 705 » lea» rcx,[64+rcx]
704 » adc» rdx,0 706 » adc» rdx,0
705 » mov» QWORD PTR[((-8))+r14],r13 707 » mov» QWORD[((-8))+r14],r13
706 mov r13,rdx 708 mov r13,rdx
707 709
708 add r15,32 710 add r15,32
709 » jnz» $L$inner4x 711 » jnz» NEAR $L$inner4x
710 712
711 » mul» rbx 713 » mul» rbx
712 » add» r10,rax 714 » add» r10,rax
713 » mov» rax,QWORD PTR[((-32))+rcx] 715 » mov» rax,QWORD[((-32))+rcx]
714 » adc» rdx,0 716 » adc» rdx,0
715 » add» r10,QWORD PTR[16+r14] 717 » add» r10,QWORD[16+r14]
716 » lea» r14,QWORD PTR[32+r14] 718 » lea» r14,[32+r14]
717 » adc» rdx,0 719 » adc» rdx,0
718 » mov» r11,rdx 720 » mov» r11,rdx
719 721
720 » mul» rbp 722 » mul» rbp
721 » add» r13,rax 723 » add» r13,rax
722 » mov» rax,QWORD PTR[((-8))+rsi] 724 » mov» rax,QWORD[((-8))+rsi]
723 » adc» rdx,0 725 » adc» rdx,0
724 » add» r13,r10 726 » add» r13,r10
725 » adc» rdx,0 727 » adc» rdx,0
726 » mov» QWORD PTR[((-32))+r14],rdi 728 » mov» QWORD[((-32))+r14],rdi
727 mov rdi,rdx 729 mov rdi,rdx
728 730
729 mul rbx 731 mul rbx
730 add r11,rax 732 add r11,rax
731 mov rax,rbp 733 mov rax,rbp
732 » mov» rbp,QWORD PTR[((-16))+rcx] 734 » mov» rbp,QWORD[((-16))+rcx]
733 » adc» rdx,0 735 » adc» rdx,0
734 » add» r11,QWORD PTR[((-8))+r14] 736 » add» r11,QWORD[((-8))+r14]
735 » adc» rdx,0 737 » adc» rdx,0
736 » mov» r10,rdx 738 » mov» r10,rdx
737 739
738 » mul» rbp 740 » mul» rbp
739 » add» rdi,rax 741 » add» rdi,rax
740 » mov» rax,QWORD PTR[r9*1+rsi] 742 » mov» rax,QWORD[r9*1+rsi]
741 » adc» rdx,0 743 » adc» rdx,0
742 » add» rdi,r11 744 » add» rdi,r11
743 » adc» rdx,0 745 » adc» rdx,0
744 » mov» QWORD PTR[((-24))+r14],r13 746 » mov» QWORD[((-24))+r14],r13
745 mov r13,rdx 747 mov r13,rdx
746 748
747 DB 102,72,15,126,195 749 DB 102,72,15,126,195
748 » mov» QWORD PTR[((-16))+r14],rdi 750 » mov» QWORD[((-16))+r14],rdi
749 » lea» rcx,QWORD PTR[r9*2+rcx] 751 » lea» rcx,[r9*2+rcx]
750 752
751 xor rdi,rdi 753 xor rdi,rdi
752 add r13,r10 754 add r13,r10
753 adc rdi,0 755 adc rdi,0
754 » add» r13,QWORD PTR[r14] 756 » add» r13,QWORD[r14]
755 adc rdi,0 757 adc rdi,0
756 » mov» QWORD PTR[((-8))+r14],r13 758 » mov» QWORD[((-8))+r14],r13
757 759
758 » cmp» r12,QWORD PTR[((16+8))+rsp] 760 » cmp» r12,QWORD[((16+8))+rsp]
759 » jb» $L$outer4x 761 » jb» NEAR $L$outer4x
760 sub rbp,r13 762 sub rbp,r13
761 adc r15,r15 763 adc r15,r15
762 or rdi,r15 764 or rdi,r15
763 xor rdi,1 765 xor rdi,1
764 » lea» rbx,QWORD PTR[r9*1+r14] 766 » lea» rbx,[r9*1+r14]
765 » lea» rbp,QWORD PTR[rdi*8+rcx] 767 » lea» rbp,[rdi*8+rcx]
766 mov rcx,r9 768 mov rcx,r9
767 sar rcx,3+2 769 sar rcx,3+2
768 » mov» rdi,QWORD PTR[((56+8))+rsp] 770 » mov» rdi,QWORD[((56+8))+rsp]
769 » jmp» $L$sqr4x_sub 771 » jmp» NEAR $L$sqr4x_sub
770 mul4x_internal» ENDP 772
771 PUBLIC» bn_power5 773 global» bn_power5
772 774
773 ALIGN 32 775 ALIGN 32
774 bn_power5» PROC PUBLIC 776 bn_power5:
775 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 777 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
776 » mov» QWORD PTR[16+rsp],rsi 778 » mov» QWORD[16+rsp],rsi
777 mov rax,rsp 779 mov rax,rsp
778 $L$SEH_begin_bn_power5:: 780 $L$SEH_begin_bn_power5:
779 mov rdi,rcx 781 mov rdi,rcx
780 mov rsi,rdx 782 mov rsi,rdx
781 mov rdx,r8 783 mov rdx,r8
782 mov rcx,r9 784 mov rcx,r9
783 » mov» r8,QWORD PTR[40+rsp] 785 » mov» r8,QWORD[40+rsp]
784 » mov» r9,QWORD PTR[48+rsp] 786 » mov» r9,QWORD[48+rsp]
785 787
786 788
787 mov rax,rsp 789 mov rax,rsp
788 push rbx 790 push rbx
789 push rbp 791 push rbp
790 push r12 792 push r12
791 push r13 793 push r13
792 push r14 794 push r14
793 push r15 795 push r15
794 » lea» rsp,QWORD PTR[((-40))+rsp] 796 » lea» rsp,[((-40))+rsp]
795 » movaps» XMMWORD PTR[rsp],xmm6 797 » movaps» XMMWORD[rsp],xmm6
796 » movaps» XMMWORD PTR[16+rsp],xmm7 798 » movaps» XMMWORD[16+rsp],xmm7
797 mov r10d,r9d 799 mov r10d,r9d
798 shl r9d,3 800 shl r9d,3
799 shl r10d,3+2 801 shl r10d,3+2
800 neg r9 802 neg r9
801 » mov» r8,QWORD PTR[r8] 803 » mov» r8,QWORD[r8]
802 804
803 805
804 806
805 807
806 808
807 809
808 810
809 » lea» r11,QWORD PTR[((-64))+r9*2+rsp] 811 » lea» r11,[((-64))+r9*2+rsp]
810 sub r11,rsi 812 sub r11,rsi
811 and r11,4095 813 and r11,4095
812 cmp r10,r11 814 cmp r10,r11
813 » jb» $L$pwr_sp_alt 815 » jb» NEAR $L$pwr_sp_alt
814 sub rsp,r11 816 sub rsp,r11
815 » lea» rsp,QWORD PTR[((-64))+r9*2+rsp] 817 » lea» rsp,[((-64))+r9*2+rsp]
816 » jmp» $L$pwr_sp_done 818 » jmp» NEAR $L$pwr_sp_done
817 819
818 ALIGN 32 820 ALIGN 32
819 $L$pwr_sp_alt:: 821 $L$pwr_sp_alt:
820 » lea» r10,QWORD PTR[((4096-64))+r9*2] 822 » lea» r10,[((4096-64))+r9*2]
821 » lea» rsp,QWORD PTR[((-64))+r9*2+rsp] 823 » lea» rsp,[((-64))+r9*2+rsp]
822 sub r11,r10 824 sub r11,r10
823 mov r10,0 825 mov r10,0
824 cmovc r11,r10 826 cmovc r11,r10
825 sub rsp,r11 827 sub rsp,r11
826 $L$pwr_sp_done:: 828 $L$pwr_sp_done:
827 and rsp,-64 829 and rsp,-64
828 mov r10,r9 830 mov r10,r9
829 neg r9 831 neg r9
830 832
831 833
832 834
833 835
834 836
835 837
836 838
837 839
838 840
839 841
840 » mov» QWORD PTR[32+rsp],r8 842 » mov» QWORD[32+rsp],r8
841 » mov» QWORD PTR[40+rsp],rax 843 » mov» QWORD[40+rsp],rax
842 $L$power5_body:: 844 $L$power5_body:
843 DB 102,72,15,110,207 845 DB 102,72,15,110,207
844 DB 102,72,15,110,209 846 DB 102,72,15,110,209
845 DB 102,73,15,110,218 847 DB 102,73,15,110,218
846 DB 102,72,15,110,226 848 DB 102,72,15,110,226
847 849
848 call __bn_sqr8x_internal 850 call __bn_sqr8x_internal
849 call __bn_sqr8x_internal 851 call __bn_sqr8x_internal
850 call __bn_sqr8x_internal 852 call __bn_sqr8x_internal
851 call __bn_sqr8x_internal 853 call __bn_sqr8x_internal
852 call __bn_sqr8x_internal 854 call __bn_sqr8x_internal
853 855
854 DB 102,72,15,126,209 856 DB 102,72,15,126,209
855 DB 102,72,15,126,226 857 DB 102,72,15,126,226
856 mov rdi,rsi 858 mov rdi,rsi
857 » mov» rax,QWORD PTR[40+rsp] 859 » mov» rax,QWORD[40+rsp]
858 » lea» r8,QWORD PTR[32+rsp] 860 » lea» r8,[32+rsp]
859 861
860 call mul4x_internal 862 call mul4x_internal
861 863
862 » mov» rsi,QWORD PTR[40+rsp] 864 » mov» rsi,QWORD[40+rsp]
863 mov rax,1 865 mov rax,1
864 » mov» r15,QWORD PTR[((-48))+rsi] 866 » mov» r15,QWORD[((-48))+rsi]
865 » mov» r14,QWORD PTR[((-40))+rsi] 867 » mov» r14,QWORD[((-40))+rsi]
866 » mov» r13,QWORD PTR[((-32))+rsi] 868 » mov» r13,QWORD[((-32))+rsi]
867 » mov» r12,QWORD PTR[((-24))+rsi] 869 » mov» r12,QWORD[((-24))+rsi]
868 » mov» rbp,QWORD PTR[((-16))+rsi] 870 » mov» rbp,QWORD[((-16))+rsi]
869 » mov» rbx,QWORD PTR[((-8))+rsi] 871 » mov» rbx,QWORD[((-8))+rsi]
870 » lea» rsp,QWORD PTR[rsi] 872 » lea» rsp,[rsi]
871 $L$power5_epilogue:: 873 $L$power5_epilogue:
872 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 874 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
873 » mov» rsi,QWORD PTR[16+rsp] 875 » mov» rsi,QWORD[16+rsp]
874 DB 0F3h,0C3h ;repret 876 DB 0F3h,0C3h ;repret
875 $L$SEH_end_bn_power5:: 877 $L$SEH_end_bn_power5:
876 bn_power5» ENDP
877 878
878 PUBLIC» bn_sqr8x_internal 879 global» bn_sqr8x_internal
879 880
880 881
881 ALIGN 32 882 ALIGN 32
882 bn_sqr8x_internal» PROC PUBLIC 883 bn_sqr8x_internal:
883 __bn_sqr8x_internal:: 884 __bn_sqr8x_internal:
884 885
885 886
886 887
887 888
888 889
889 890
890 891
891 892
892 893
893 894
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 948
948 949
949 950
950 951
951 952
952 953
953 954
954 955
955 956
956 957
957 » lea» rbp,QWORD PTR[32+r10] 958 » lea» rbp,[32+r10]
958 » lea» rsi,QWORD PTR[r9*1+rsi] 959 » lea» rsi,[r9*1+rsi]
959 960
960 mov rcx,r9 961 mov rcx,r9
961 962
962 963
963 » mov» r14,QWORD PTR[((-32))+rbp*1+rsi] 964 » mov» r14,QWORD[((-32))+rbp*1+rsi]
964 » lea» rdi,QWORD PTR[((48+8))+r9*2+rsp] 965 » lea» rdi,[((48+8))+r9*2+rsp]
965 » mov» rax,QWORD PTR[((-24))+rbp*1+rsi] 966 » mov» rax,QWORD[((-24))+rbp*1+rsi]
966 » lea» rdi,QWORD PTR[((-32))+rbp*1+rdi] 967 » lea» rdi,[((-32))+rbp*1+rdi]
967 » mov» rbx,QWORD PTR[((-16))+rbp*1+rsi] 968 » mov» rbx,QWORD[((-16))+rbp*1+rsi]
968 mov r15,rax 969 mov r15,rax
969 970
970 mul r14 971 mul r14
971 mov r10,rax 972 mov r10,rax
972 mov rax,rbx 973 mov rax,rbx
973 mov r11,rdx 974 mov r11,rdx
974 » mov» QWORD PTR[((-24))+rbp*1+rdi],r10 975 » mov» QWORD[((-24))+rbp*1+rdi],r10
975 976
976 mul r14 977 mul r14
977 add r11,rax 978 add r11,rax
978 mov rax,rbx 979 mov rax,rbx
979 adc rdx,0 980 adc rdx,0
980 » mov» QWORD PTR[((-16))+rbp*1+rdi],r11 981 » mov» QWORD[((-16))+rbp*1+rdi],r11
981 mov r10,rdx 982 mov r10,rdx
982 983
983 984
984 » mov» rbx,QWORD PTR[((-8))+rbp*1+rsi] 985 » mov» rbx,QWORD[((-8))+rbp*1+rsi]
985 mul r15 986 mul r15
986 mov r12,rax 987 mov r12,rax
987 mov rax,rbx 988 mov rax,rbx
988 mov r13,rdx 989 mov r13,rdx
989 990
990 » lea» rcx,QWORD PTR[rbp] 991 » lea» rcx,[rbp]
991 mul r14 992 mul r14
992 add r10,rax 993 add r10,rax
993 mov rax,rbx 994 mov rax,rbx
994 mov r11,rdx 995 mov r11,rdx
995 adc r11,0 996 adc r11,0
996 add r10,r12 997 add r10,r12
997 adc r11,0 998 adc r11,0
998 » mov» QWORD PTR[((-8))+rcx*1+rdi],r10 999 » mov» QWORD[((-8))+rcx*1+rdi],r10
999 » jmp» $L$sqr4x_1st 1000 » jmp» NEAR $L$sqr4x_1st
1000 1001
1001 ALIGN 32 1002 ALIGN 32
1002 $L$sqr4x_1st:: 1003 $L$sqr4x_1st:
1003 » mov» rbx,QWORD PTR[rcx*1+rsi] 1004 » mov» rbx,QWORD[rcx*1+rsi]
1004 mul r15 1005 mul r15
1005 add r13,rax 1006 add r13,rax
1006 mov rax,rbx 1007 mov rax,rbx
1007 mov r12,rdx 1008 mov r12,rdx
1008 adc r12,0 1009 adc r12,0
1009 1010
1010 mul r14 1011 mul r14
1011 add r11,rax 1012 add r11,rax
1012 mov rax,rbx 1013 mov rax,rbx
1013 » mov» rbx,QWORD PTR[8+rcx*1+rsi] 1014 » mov» rbx,QWORD[8+rcx*1+rsi]
1014 mov r10,rdx 1015 mov r10,rdx
1015 adc r10,0 1016 adc r10,0
1016 add r11,r13 1017 add r11,r13
1017 adc r10,0 1018 adc r10,0
1018 1019
1019 1020
1020 mul r15 1021 mul r15
1021 add r12,rax 1022 add r12,rax
1022 mov rax,rbx 1023 mov rax,rbx
1023 » mov» QWORD PTR[rcx*1+rdi],r11 1024 » mov» QWORD[rcx*1+rdi],r11
1024 mov r13,rdx 1025 mov r13,rdx
1025 adc r13,0 1026 adc r13,0
1026 1027
1027 mul r14 1028 mul r14
1028 add r10,rax 1029 add r10,rax
1029 mov rax,rbx 1030 mov rax,rbx
1030 » mov» rbx,QWORD PTR[16+rcx*1+rsi] 1031 » mov» rbx,QWORD[16+rcx*1+rsi]
1031 mov r11,rdx 1032 mov r11,rdx
1032 adc r11,0 1033 adc r11,0
1033 add r10,r12 1034 add r10,r12
1034 adc r11,0 1035 adc r11,0
1035 1036
1036 mul r15 1037 mul r15
1037 add r13,rax 1038 add r13,rax
1038 mov rax,rbx 1039 mov rax,rbx
1039 » mov» QWORD PTR[8+rcx*1+rdi],r10 1040 » mov» QWORD[8+rcx*1+rdi],r10
1040 mov r12,rdx 1041 mov r12,rdx
1041 adc r12,0 1042 adc r12,0
1042 1043
1043 mul r14 1044 mul r14
1044 add r11,rax 1045 add r11,rax
1045 mov rax,rbx 1046 mov rax,rbx
1046 » mov» rbx,QWORD PTR[24+rcx*1+rsi] 1047 » mov» rbx,QWORD[24+rcx*1+rsi]
1047 mov r10,rdx 1048 mov r10,rdx
1048 adc r10,0 1049 adc r10,0
1049 add r11,r13 1050 add r11,r13
1050 adc r10,0 1051 adc r10,0
1051 1052
1052 1053
1053 mul r15 1054 mul r15
1054 add r12,rax 1055 add r12,rax
1055 mov rax,rbx 1056 mov rax,rbx
1056 » mov» QWORD PTR[16+rcx*1+rdi],r11 1057 » mov» QWORD[16+rcx*1+rdi],r11
1057 mov r13,rdx 1058 mov r13,rdx
1058 adc r13,0 1059 adc r13,0
1059 » lea» rcx,QWORD PTR[32+rcx] 1060 » lea» rcx,[32+rcx]
1060 1061
1061 mul r14 1062 mul r14
1062 add r10,rax 1063 add r10,rax
1063 mov rax,rbx 1064 mov rax,rbx
1064 mov r11,rdx 1065 mov r11,rdx
1065 adc r11,0 1066 adc r11,0
1066 add r10,r12 1067 add r10,r12
1067 adc r11,0 1068 adc r11,0
1068 » mov» QWORD PTR[((-8))+rcx*1+rdi],r10 1069 » mov» QWORD[((-8))+rcx*1+rdi],r10
1069 1070
1070 cmp rcx,0 1071 cmp rcx,0
1071 » jne» $L$sqr4x_1st 1072 » jne» NEAR $L$sqr4x_1st
1072 1073
1073 mul r15 1074 mul r15
1074 add r13,rax 1075 add r13,rax
1075 » lea» rbp,QWORD PTR[16+rbp] 1076 » lea» rbp,[16+rbp]
1076 adc rdx,0 1077 adc rdx,0
1077 add r13,r11 1078 add r13,r11
1078 adc rdx,0 1079 adc rdx,0
1079 1080
1080 » mov» QWORD PTR[rdi],r13 1081 » mov» QWORD[rdi],r13
1081 mov r12,rdx 1082 mov r12,rdx
1082 » mov» QWORD PTR[8+rdi],rdx 1083 » mov» QWORD[8+rdi],rdx
1083 » jmp» $L$sqr4x_outer 1084 » jmp» NEAR $L$sqr4x_outer
1084 1085
1085 ALIGN 32 1086 ALIGN 32
1086 $L$sqr4x_outer:: 1087 $L$sqr4x_outer:
1087 » mov» r14,QWORD PTR[((-32))+rbp*1+rsi] 1088 » mov» r14,QWORD[((-32))+rbp*1+rsi]
1088 » lea» rdi,QWORD PTR[((48+8))+r9*2+rsp] 1089 » lea» rdi,[((48+8))+r9*2+rsp]
1089 » mov» rax,QWORD PTR[((-24))+rbp*1+rsi] 1090 » mov» rax,QWORD[((-24))+rbp*1+rsi]
1090 » lea» rdi,QWORD PTR[((-32))+rbp*1+rdi] 1091 » lea» rdi,[((-32))+rbp*1+rdi]
1091 » mov» rbx,QWORD PTR[((-16))+rbp*1+rsi] 1092 » mov» rbx,QWORD[((-16))+rbp*1+rsi]
1092 mov r15,rax 1093 mov r15,rax
1093 1094
1094 mul r14 1095 mul r14
1095 » mov» r10,QWORD PTR[((-24))+rbp*1+rdi] 1096 » mov» r10,QWORD[((-24))+rbp*1+rdi]
1096 add r10,rax 1097 add r10,rax
1097 mov rax,rbx 1098 mov rax,rbx
1098 adc rdx,0 1099 adc rdx,0
1099 » mov» QWORD PTR[((-24))+rbp*1+rdi],r10 1100 » mov» QWORD[((-24))+rbp*1+rdi],r10
1100 mov r11,rdx 1101 mov r11,rdx
1101 1102
1102 mul r14 1103 mul r14
1103 add r11,rax 1104 add r11,rax
1104 mov rax,rbx 1105 mov rax,rbx
1105 adc rdx,0 1106 adc rdx,0
1106 » add» r11,QWORD PTR[((-16))+rbp*1+rdi] 1107 » add» r11,QWORD[((-16))+rbp*1+rdi]
1107 mov r10,rdx 1108 mov r10,rdx
1108 adc r10,0 1109 adc r10,0
1109 » mov» QWORD PTR[((-16))+rbp*1+rdi],r11 1110 » mov» QWORD[((-16))+rbp*1+rdi],r11
1110 1111
1111 xor r12,r12 1112 xor r12,r12
1112 1113
1113 » mov» rbx,QWORD PTR[((-8))+rbp*1+rsi] 1114 » mov» rbx,QWORD[((-8))+rbp*1+rsi]
1114 mul r15 1115 mul r15
1115 add r12,rax 1116 add r12,rax
1116 mov rax,rbx 1117 mov rax,rbx
1117 adc rdx,0 1118 adc rdx,0
1118 » add» r12,QWORD PTR[((-8))+rbp*1+rdi] 1119 » add» r12,QWORD[((-8))+rbp*1+rdi]
1119 mov r13,rdx 1120 mov r13,rdx
1120 adc r13,0 1121 adc r13,0
1121 1122
1122 mul r14 1123 mul r14
1123 add r10,rax 1124 add r10,rax
1124 mov rax,rbx 1125 mov rax,rbx
1125 adc rdx,0 1126 adc rdx,0
1126 add r10,r12 1127 add r10,r12
1127 mov r11,rdx 1128 mov r11,rdx
1128 adc r11,0 1129 adc r11,0
1129 » mov» QWORD PTR[((-8))+rbp*1+rdi],r10 1130 » mov» QWORD[((-8))+rbp*1+rdi],r10
1130 1131
1131 » lea» rcx,QWORD PTR[rbp] 1132 » lea» rcx,[rbp]
1132 » jmp» $L$sqr4x_inner 1133 » jmp» NEAR $L$sqr4x_inner
1133 1134
1134 ALIGN 32 1135 ALIGN 32
1135 $L$sqr4x_inner:: 1136 $L$sqr4x_inner:
1136 » mov» rbx,QWORD PTR[rcx*1+rsi] 1137 » mov» rbx,QWORD[rcx*1+rsi]
1137 mul r15 1138 mul r15
1138 add r13,rax 1139 add r13,rax
1139 mov rax,rbx 1140 mov rax,rbx
1140 mov r12,rdx 1141 mov r12,rdx
1141 adc r12,0 1142 adc r12,0
1142 » add» r13,QWORD PTR[rcx*1+rdi] 1143 » add» r13,QWORD[rcx*1+rdi]
1143 adc r12,0 1144 adc r12,0
1144 1145
1145 DB» 067h 1146 DB» 0x67
1146 mul r14 1147 mul r14
1147 add r11,rax 1148 add r11,rax
1148 mov rax,rbx 1149 mov rax,rbx
1149 » mov» rbx,QWORD PTR[8+rcx*1+rsi] 1150 » mov» rbx,QWORD[8+rcx*1+rsi]
1150 mov r10,rdx 1151 mov r10,rdx
1151 adc r10,0 1152 adc r10,0
1152 add r11,r13 1153 add r11,r13
1153 adc r10,0 1154 adc r10,0
1154 1155
1155 mul r15 1156 mul r15
1156 add r12,rax 1157 add r12,rax
1157 » mov» QWORD PTR[rcx*1+rdi],r11 1158 » mov» QWORD[rcx*1+rdi],r11
1158 mov rax,rbx 1159 mov rax,rbx
1159 mov r13,rdx 1160 mov r13,rdx
1160 adc r13,0 1161 adc r13,0
1161 » add» r12,QWORD PTR[8+rcx*1+rdi] 1162 » add» r12,QWORD[8+rcx*1+rdi]
1162 » lea» rcx,QWORD PTR[16+rcx] 1163 » lea» rcx,[16+rcx]
1163 adc r13,0 1164 adc r13,0
1164 1165
1165 mul r14 1166 mul r14
1166 add r10,rax 1167 add r10,rax
1167 mov rax,rbx 1168 mov rax,rbx
1168 adc rdx,0 1169 adc rdx,0
1169 add r10,r12 1170 add r10,r12
1170 mov r11,rdx 1171 mov r11,rdx
1171 adc r11,0 1172 adc r11,0
1172 » mov» QWORD PTR[((-8))+rcx*1+rdi],r10 1173 » mov» QWORD[((-8))+rcx*1+rdi],r10
1173 1174
1174 cmp rcx,0 1175 cmp rcx,0
1175 » jne» $L$sqr4x_inner 1176 » jne» NEAR $L$sqr4x_inner
1176 1177
1177 DB» 067h 1178 DB» 0x67
1178 mul r15 1179 mul r15
1179 add r13,rax 1180 add r13,rax
1180 adc rdx,0 1181 adc rdx,0
1181 add r13,r11 1182 add r13,r11
1182 adc rdx,0 1183 adc rdx,0
1183 1184
1184 » mov» QWORD PTR[rdi],r13 1185 » mov» QWORD[rdi],r13
1185 mov r12,rdx 1186 mov r12,rdx
1186 » mov» QWORD PTR[8+rdi],rdx 1187 » mov» QWORD[8+rdi],rdx
1187 1188
1188 add rbp,16 1189 add rbp,16
1189 » jnz» $L$sqr4x_outer 1190 » jnz» NEAR $L$sqr4x_outer
1190 1191
1191 1192
1192 » mov» r14,QWORD PTR[((-32))+rsi] 1193 » mov» r14,QWORD[((-32))+rsi]
1193 » lea» rdi,QWORD PTR[((48+8))+r9*2+rsp] 1194 » lea» rdi,[((48+8))+r9*2+rsp]
1194 » mov» rax,QWORD PTR[((-24))+rsi] 1195 » mov» rax,QWORD[((-24))+rsi]
1195 » lea» rdi,QWORD PTR[((-32))+rbp*1+rdi] 1196 » lea» rdi,[((-32))+rbp*1+rdi]
1196 » mov» rbx,QWORD PTR[((-16))+rsi] 1197 » mov» rbx,QWORD[((-16))+rsi]
1197 mov r15,rax 1198 mov r15,rax
1198 1199
1199 mul r14 1200 mul r14
1200 add r10,rax 1201 add r10,rax
1201 mov rax,rbx 1202 mov rax,rbx
1202 mov r11,rdx 1203 mov r11,rdx
1203 adc r11,0 1204 adc r11,0
1204 1205
1205 mul r14 1206 mul r14
1206 add r11,rax 1207 add r11,rax
1207 mov rax,rbx 1208 mov rax,rbx
1208 » mov» QWORD PTR[((-24))+rdi],r10 1209 » mov» QWORD[((-24))+rdi],r10
1209 mov r10,rdx 1210 mov r10,rdx
1210 adc r10,0 1211 adc r10,0
1211 add r11,r13 1212 add r11,r13
1212 » mov» rbx,QWORD PTR[((-8))+rsi] 1213 » mov» rbx,QWORD[((-8))+rsi]
1213 adc r10,0 1214 adc r10,0
1214 1215
1215 mul r15 1216 mul r15
1216 add r12,rax 1217 add r12,rax
1217 mov rax,rbx 1218 mov rax,rbx
1218 » mov» QWORD PTR[((-16))+rdi],r11 1219 » mov» QWORD[((-16))+rdi],r11
1219 mov r13,rdx 1220 mov r13,rdx
1220 adc r13,0 1221 adc r13,0
1221 1222
1222 mul r14 1223 mul r14
1223 add r10,rax 1224 add r10,rax
1224 mov rax,rbx 1225 mov rax,rbx
1225 mov r11,rdx 1226 mov r11,rdx
1226 adc r11,0 1227 adc r11,0
1227 add r10,r12 1228 add r10,r12
1228 adc r11,0 1229 adc r11,0
1229 » mov» QWORD PTR[((-8))+rdi],r10 1230 » mov» QWORD[((-8))+rdi],r10
1230 1231
1231 mul r15 1232 mul r15
1232 add r13,rax 1233 add r13,rax
1233 » mov» rax,QWORD PTR[((-16))+rsi] 1234 » mov» rax,QWORD[((-16))+rsi]
1234 adc rdx,0 1235 adc rdx,0
1235 add r13,r11 1236 add r13,r11
1236 adc rdx,0 1237 adc rdx,0
1237 1238
1238 » mov» QWORD PTR[rdi],r13 1239 » mov» QWORD[rdi],r13
1239 mov r12,rdx 1240 mov r12,rdx
1240 » mov» QWORD PTR[8+rdi],rdx 1241 » mov» QWORD[8+rdi],rdx
1241 1242
1242 mul rbx 1243 mul rbx
1243 add rbp,16 1244 add rbp,16
1244 xor r14,r14 1245 xor r14,r14
1245 sub rbp,r9 1246 sub rbp,r9
1246 xor r15,r15 1247 xor r15,r15
1247 1248
1248 add rax,r12 1249 add rax,r12
1249 adc rdx,0 1250 adc rdx,0
1250 » mov» QWORD PTR[8+rdi],rax 1251 » mov» QWORD[8+rdi],rax
1251 » mov» QWORD PTR[16+rdi],rdx 1252 » mov» QWORD[16+rdi],rdx
1252 » mov» QWORD PTR[24+rdi],r15 1253 » mov» QWORD[24+rdi],r15
1253 1254
1254 » mov» rax,QWORD PTR[((-16))+rbp*1+rsi] 1255 » mov» rax,QWORD[((-16))+rbp*1+rsi]
1255 » lea» rdi,QWORD PTR[((48+8))+rsp] 1256 » lea» rdi,[((48+8))+rsp]
1256 xor r10,r10 1257 xor r10,r10
1257 » mov» r11,QWORD PTR[8+rdi] 1258 » mov» r11,QWORD[8+rdi]
1258 1259
1259 » lea» r12,QWORD PTR[r10*2+r14] 1260 » lea» r12,[r10*2+r14]
1260 » shr» r10,63 1261 » shr» r10,63
1261 » lea» r13,QWORD PTR[r11*2+rcx] 1262 » lea» r13,[r11*2+rcx]
1262 » shr» r11,63 1263 » shr» r11,63
1263 » or» r13,r10 1264 » or» r13,r10
1264 » mov» r10,QWORD PTR[16+rdi] 1265 » mov» r10,QWORD[16+rdi]
1265 » mov» r14,r11 1266 » mov» r14,r11
1266 » mul» rax 1267 » mul» rax
1267 » neg» r15 1268 » neg» r15
1268 » mov» r11,QWORD PTR[24+rdi] 1269 » mov» r11,QWORD[24+rdi]
1269 » adc» r12,rax 1270 » adc» r12,rax
1270 » mov» rax,QWORD PTR[((-8))+rbp*1+rsi] 1271 » mov» rax,QWORD[((-8))+rbp*1+rsi]
1271 » mov» QWORD PTR[rdi],r12 1272 » mov» QWORD[rdi],r12
1272 » adc» r13,rdx 1273 » adc» r13,rdx
1273 1274
1274 » lea» rbx,QWORD PTR[r10*2+r14] 1275 » lea» rbx,[r10*2+r14]
1275 » mov» QWORD PTR[8+rdi],r13 1276 » mov» QWORD[8+rdi],r13
1276 » sbb» r15,r15 1277 » sbb» r15,r15
1277 » shr» r10,63 1278 » shr» r10,63
1278 » lea» r8,QWORD PTR[r11*2+rcx] 1279 » lea» r8,[r11*2+rcx]
1279 » shr» r11,63 1280 » shr» r11,63
1280 » or» r8,r10 1281 » or» r8,r10
1281 » mov» r10,QWORD PTR[32+rdi] 1282 » mov» r10,QWORD[32+rdi]
1282 » mov» r14,r11 1283 » mov» r14,r11
1283 » mul» rax 1284 » mul» rax
1284 » neg» r15 1285 » neg» r15
1285 » mov» r11,QWORD PTR[40+rdi] 1286 » mov» r11,QWORD[40+rdi]
1286 » adc» rbx,rax 1287 » adc» rbx,rax
1287 » mov» rax,QWORD PTR[rbp*1+rsi] 1288 » mov» rax,QWORD[rbp*1+rsi]
1288 » mov» QWORD PTR[16+rdi],rbx 1289 » mov» QWORD[16+rdi],rbx
1289 » adc» r8,rdx 1290 » adc» r8,rdx
1290 » lea» rbp,QWORD PTR[16+rbp] 1291 » lea» rbp,[16+rbp]
1291 » mov» QWORD PTR[24+rdi],r8 1292 » mov» QWORD[24+rdi],r8
1292 » sbb» r15,r15 1293 » sbb» r15,r15
1293 » lea» rdi,QWORD PTR[64+rdi] 1294 » lea» rdi,[64+rdi]
1294 » jmp» $L$sqr4x_shift_n_add 1295 » jmp» NEAR $L$sqr4x_shift_n_add
1295 1296
1296 ALIGN 32 1297 ALIGN 32
1297 $L$sqr4x_shift_n_add:: 1298 $L$sqr4x_shift_n_add:
1298 » lea» r12,QWORD PTR[r10*2+r14] 1299 » lea» r12,[r10*2+r14]
1299 » shr» r10,63 1300 » shr» r10,63
1300 » lea» r13,QWORD PTR[r11*2+rcx] 1301 » lea» r13,[r11*2+rcx]
1301 » shr» r11,63 1302 » shr» r11,63
1302 » or» r13,r10 1303 » or» r13,r10
1303 » mov» r10,QWORD PTR[((-16))+rdi] 1304 » mov» r10,QWORD[((-16))+rdi]
1304 » mov» r14,r11 1305 » mov» r14,r11
1305 » mul» rax 1306 » mul» rax
1306 » neg» r15 1307 » neg» r15
1307 » mov» r11,QWORD PTR[((-8))+rdi] 1308 » mov» r11,QWORD[((-8))+rdi]
1308 » adc» r12,rax 1309 » adc» r12,rax
1309 » mov» rax,QWORD PTR[((-8))+rbp*1+rsi] 1310 » mov» rax,QWORD[((-8))+rbp*1+rsi]
1310 » mov» QWORD PTR[((-32))+rdi],r12 1311 » mov» QWORD[((-32))+rdi],r12
1311 » adc» r13,rdx 1312 » adc» r13,rdx
1312 1313
1313 » lea» rbx,QWORD PTR[r10*2+r14] 1314 » lea» rbx,[r10*2+r14]
1314 » mov» QWORD PTR[((-24))+rdi],r13 1315 » mov» QWORD[((-24))+rdi],r13
1315 » sbb» r15,r15 1316 » sbb» r15,r15
1316 » shr» r10,63 1317 » shr» r10,63
1317 » lea» r8,QWORD PTR[r11*2+rcx] 1318 » lea» r8,[r11*2+rcx]
1318 » shr» r11,63 1319 » shr» r11,63
1319 » or» r8,r10 1320 » or» r8,r10
1320 » mov» r10,QWORD PTR[rdi] 1321 » mov» r10,QWORD[rdi]
1321 » mov» r14,r11 1322 » mov» r14,r11
1322 » mul» rax 1323 » mul» rax
1323 » neg» r15 1324 » neg» r15
1324 » mov» r11,QWORD PTR[8+rdi] 1325 » mov» r11,QWORD[8+rdi]
1325 » adc» rbx,rax 1326 » adc» rbx,rax
1326 » mov» rax,QWORD PTR[rbp*1+rsi] 1327 » mov» rax,QWORD[rbp*1+rsi]
1327 » mov» QWORD PTR[((-16))+rdi],rbx 1328 » mov» QWORD[((-16))+rdi],rbx
1328 » adc» r8,rdx 1329 » adc» r8,rdx
1329 1330
1330 » lea» r12,QWORD PTR[r10*2+r14] 1331 » lea» r12,[r10*2+r14]
1331 » mov» QWORD PTR[((-8))+rdi],r8 1332 » mov» QWORD[((-8))+rdi],r8
1332 » sbb» r15,r15 1333 » sbb» r15,r15
1333 » shr» r10,63 1334 » shr» r10,63
1334 » lea» r13,QWORD PTR[r11*2+rcx] 1335 » lea» r13,[r11*2+rcx]
1335 » shr» r11,63 1336 » shr» r11,63
1336 » or» r13,r10 1337 » or» r13,r10
1337 » mov» r10,QWORD PTR[16+rdi] 1338 » mov» r10,QWORD[16+rdi]
1338 » mov» r14,r11 1339 » mov» r14,r11
1339 » mul» rax 1340 » mul» rax
1340 » neg» r15 1341 » neg» r15
1341 » mov» r11,QWORD PTR[24+rdi] 1342 » mov» r11,QWORD[24+rdi]
1342 » adc» r12,rax 1343 » adc» r12,rax
1343 » mov» rax,QWORD PTR[8+rbp*1+rsi] 1344 » mov» rax,QWORD[8+rbp*1+rsi]
1344 » mov» QWORD PTR[rdi],r12 1345 » mov» QWORD[rdi],r12
1345 » adc» r13,rdx 1346 » adc» r13,rdx
1346 1347
1347 » lea» rbx,QWORD PTR[r10*2+r14] 1348 » lea» rbx,[r10*2+r14]
1348 » mov» QWORD PTR[8+rdi],r13 1349 » mov» QWORD[8+rdi],r13
1349 » sbb» r15,r15 1350 » sbb» r15,r15
1350 » shr» r10,63 1351 » shr» r10,63
1351 » lea» r8,QWORD PTR[r11*2+rcx] 1352 » lea» r8,[r11*2+rcx]
1352 » shr» r11,63 1353 » shr» r11,63
1353 » or» r8,r10 1354 » or» r8,r10
1354 » mov» r10,QWORD PTR[32+rdi] 1355 » mov» r10,QWORD[32+rdi]
1355 » mov» r14,r11 1356 » mov» r14,r11
1356 » mul» rax 1357 » mul» rax
1357 » neg» r15 1358 » neg» r15
1358 » mov» r11,QWORD PTR[40+rdi] 1359 » mov» r11,QWORD[40+rdi]
1359 » adc» rbx,rax 1360 » adc» rbx,rax
1360 » mov» rax,QWORD PTR[16+rbp*1+rsi] 1361 » mov» rax,QWORD[16+rbp*1+rsi]
1361 » mov» QWORD PTR[16+rdi],rbx 1362 » mov» QWORD[16+rdi],rbx
1362 » adc» r8,rdx 1363 » adc» r8,rdx
1363 » mov» QWORD PTR[24+rdi],r8 1364 » mov» QWORD[24+rdi],r8
1364 » sbb» r15,r15 1365 » sbb» r15,r15
1365 » lea» rdi,QWORD PTR[64+rdi] 1366 » lea» rdi,[64+rdi]
1366 add rbp,32 1367 add rbp,32
1367 » jnz» $L$sqr4x_shift_n_add 1368 » jnz» NEAR $L$sqr4x_shift_n_add
1368 1369
1369 » lea» r12,QWORD PTR[r10*2+r14] 1370 » lea» r12,[r10*2+r14]
1370 DB» 067h 1371 DB» 0x67
1371 » shr» r10,63 1372 » shr» r10,63
1372 » lea» r13,QWORD PTR[r11*2+rcx] 1373 » lea» r13,[r11*2+rcx]
1373 » shr» r11,63 1374 » shr» r11,63
1374 » or» r13,r10 1375 » or» r13,r10
1375 » mov» r10,QWORD PTR[((-16))+rdi] 1376 » mov» r10,QWORD[((-16))+rdi]
1376 » mov» r14,r11 1377 » mov» r14,r11
1377 » mul» rax 1378 » mul» rax
1378 » neg» r15 1379 » neg» r15
1379 » mov» r11,QWORD PTR[((-8))+rdi] 1380 » mov» r11,QWORD[((-8))+rdi]
1380 » adc» r12,rax 1381 » adc» r12,rax
1381 » mov» rax,QWORD PTR[((-8))+rsi] 1382 » mov» rax,QWORD[((-8))+rsi]
1382 » mov» QWORD PTR[((-32))+rdi],r12 1383 » mov» QWORD[((-32))+rdi],r12
1383 » adc» r13,rdx 1384 » adc» r13,rdx
1384 1385
1385 » lea» rbx,QWORD PTR[r10*2+r14] 1386 » lea» rbx,[r10*2+r14]
1386 » mov» QWORD PTR[((-24))+rdi],r13 1387 » mov» QWORD[((-24))+rdi],r13
1387 » sbb» r15,r15 1388 » sbb» r15,r15
1388 » shr» r10,63 1389 » shr» r10,63
1389 » lea» r8,QWORD PTR[r11*2+rcx] 1390 » lea» r8,[r11*2+rcx]
1390 » shr» r11,63 1391 » shr» r11,63
1391 » or» r8,r10 1392 » or» r8,r10
1392 » mul» rax 1393 » mul» rax
1393 » neg» r15 1394 » neg» r15
1394 » adc» rbx,rax 1395 » adc» rbx,rax
1395 » adc» r8,rdx 1396 » adc» r8,rdx
1396 » mov» QWORD PTR[((-16))+rdi],rbx 1397 » mov» QWORD[((-16))+rdi],rbx
1397 » mov» QWORD PTR[((-8))+rdi],r8 1398 » mov» QWORD[((-8))+rdi],r8
1398 DB 102,72,15,126,213 1399 DB 102,72,15,126,213
1399 sqr8x_reduction:: 1400 sqr8x_reduction:
1400 xor rax,rax 1401 xor rax,rax
1401 » lea» rcx,QWORD PTR[r9*2+rbp] 1402 » lea» rcx,[r9*2+rbp]
1402 » lea» rdx,QWORD PTR[((48+8))+r9*2+rsp] 1403 » lea» rdx,[((48+8))+r9*2+rsp]
1403 » mov» QWORD PTR[((0+8))+rsp],rcx 1404 » mov» QWORD[((0+8))+rsp],rcx
1404 » lea» rdi,QWORD PTR[((48+8))+r9*1+rsp] 1405 » lea» rdi,[((48+8))+r9*1+rsp]
1405 » mov» QWORD PTR[((8+8))+rsp],rdx 1406 » mov» QWORD[((8+8))+rsp],rdx
1406 neg r9 1407 neg r9
1407 » jmp» $L$8x_reduction_loop 1408 » jmp» NEAR $L$8x_reduction_loop
1408 1409
1409 ALIGN 32 1410 ALIGN 32
1410 $L$8x_reduction_loop:: 1411 $L$8x_reduction_loop:
1411 » lea» rdi,QWORD PTR[r9*1+rdi] 1412 » lea» rdi,[r9*1+rdi]
1412 DB» 066h 1413 DB» 0x66
1413 » mov» rbx,QWORD PTR[rdi] 1414 » mov» rbx,QWORD[rdi]
1414 » mov» r9,QWORD PTR[8+rdi] 1415 » mov» r9,QWORD[8+rdi]
1415 » mov» r10,QWORD PTR[16+rdi] 1416 » mov» r10,QWORD[16+rdi]
1416 » mov» r11,QWORD PTR[24+rdi] 1417 » mov» r11,QWORD[24+rdi]
1417 » mov» r12,QWORD PTR[32+rdi] 1418 » mov» r12,QWORD[32+rdi]
1418 » mov» r13,QWORD PTR[40+rdi] 1419 » mov» r13,QWORD[40+rdi]
1419 » mov» r14,QWORD PTR[48+rdi] 1420 » mov» r14,QWORD[48+rdi]
1420 » mov» r15,QWORD PTR[56+rdi] 1421 » mov» r15,QWORD[56+rdi]
1421 » mov» QWORD PTR[rdx],rax 1422 » mov» QWORD[rdx],rax
1422 » lea» rdi,QWORD PTR[64+rdi] 1423 » lea» rdi,[64+rdi]
1423 1424
1424 DB» 067h 1425 DB» 0x67
1425 mov r8,rbx 1426 mov r8,rbx
1426 » imul» rbx,QWORD PTR[((32+8))+rsp] 1427 » imul» rbx,QWORD[((32+8))+rsp]
1427 » mov» rax,QWORD PTR[rbp] 1428 » mov» rax,QWORD[rbp]
1428 mov ecx,8 1429 mov ecx,8
1429 » jmp» $L$8x_reduce 1430 » jmp» NEAR $L$8x_reduce
1430 1431
1431 ALIGN 32 1432 ALIGN 32
1432 $L$8x_reduce:: 1433 $L$8x_reduce:
1433 » mul» rbx 1434 » mul» rbx
1434 » mov» rax,QWORD PTR[16+rbp] 1435 » mov» rax,QWORD[16+rbp]
1435 neg r8 1436 neg r8
1436 mov r8,rdx 1437 mov r8,rdx
1437 adc r8,0 1438 adc r8,0
1438 1439
1439 mul rbx 1440 mul rbx
1440 add r9,rax 1441 add r9,rax
1441 » mov» rax,QWORD PTR[32+rbp] 1442 » mov» rax,QWORD[32+rbp]
1442 adc rdx,0 1443 adc rdx,0
1443 add r8,r9 1444 add r8,r9
1444 » mov» QWORD PTR[((48-8+8))+rcx*8+rsp],rbx 1445 » mov» QWORD[((48-8+8))+rcx*8+rsp],rbx
1445 mov r9,rdx 1446 mov r9,rdx
1446 adc r9,0 1447 adc r9,0
1447 1448
1448 mul rbx 1449 mul rbx
1449 add r10,rax 1450 add r10,rax
1450 » mov» rax,QWORD PTR[48+rbp] 1451 » mov» rax,QWORD[48+rbp]
1451 adc rdx,0 1452 adc rdx,0
1452 add r9,r10 1453 add r9,r10
1453 » mov» rsi,QWORD PTR[((32+8))+rsp] 1454 » mov» rsi,QWORD[((32+8))+rsp]
1454 mov r10,rdx 1455 mov r10,rdx
1455 adc r10,0 1456 adc r10,0
1456 1457
1457 mul rbx 1458 mul rbx
1458 add r11,rax 1459 add r11,rax
1459 » mov» rax,QWORD PTR[64+rbp] 1460 » mov» rax,QWORD[64+rbp]
1460 adc rdx,0 1461 adc rdx,0
1461 imul rsi,r8 1462 imul rsi,r8
1462 add r10,r11 1463 add r10,r11
1463 mov r11,rdx 1464 mov r11,rdx
1464 adc r11,0 1465 adc r11,0
1465 1466
1466 mul rbx 1467 mul rbx
1467 add r12,rax 1468 add r12,rax
1468 » mov» rax,QWORD PTR[80+rbp] 1469 » mov» rax,QWORD[80+rbp]
1469 adc rdx,0 1470 adc rdx,0
1470 add r11,r12 1471 add r11,r12
1471 mov r12,rdx 1472 mov r12,rdx
1472 adc r12,0 1473 adc r12,0
1473 1474
1474 mul rbx 1475 mul rbx
1475 add r13,rax 1476 add r13,rax
1476 » mov» rax,QWORD PTR[96+rbp] 1477 » mov» rax,QWORD[96+rbp]
1477 adc rdx,0 1478 adc rdx,0
1478 add r12,r13 1479 add r12,r13
1479 mov r13,rdx 1480 mov r13,rdx
1480 adc r13,0 1481 adc r13,0
1481 1482
1482 mul rbx 1483 mul rbx
1483 add r14,rax 1484 add r14,rax
1484 » mov» rax,QWORD PTR[112+rbp] 1485 » mov» rax,QWORD[112+rbp]
1485 adc rdx,0 1486 adc rdx,0
1486 add r13,r14 1487 add r13,r14
1487 mov r14,rdx 1488 mov r14,rdx
1488 adc r14,0 1489 adc r14,0
1489 1490
1490 mul rbx 1491 mul rbx
1491 mov rbx,rsi 1492 mov rbx,rsi
1492 add r15,rax 1493 add r15,rax
1493 » mov» rax,QWORD PTR[rbp] 1494 » mov» rax,QWORD[rbp]
1494 adc rdx,0 1495 adc rdx,0
1495 add r14,r15 1496 add r14,r15
1496 mov r15,rdx 1497 mov r15,rdx
1497 adc r15,0 1498 adc r15,0
1498 1499
1499 dec ecx 1500 dec ecx
1500 » jnz» $L$8x_reduce 1501 » jnz» NEAR $L$8x_reduce
1501 1502
1502 » lea» rbp,QWORD PTR[128+rbp] 1503 » lea» rbp,[128+rbp]
1503 xor rax,rax 1504 xor rax,rax
1504 » mov» rdx,QWORD PTR[((8+8))+rsp] 1505 » mov» rdx,QWORD[((8+8))+rsp]
1505 » cmp» rbp,QWORD PTR[((0+8))+rsp] 1506 » cmp» rbp,QWORD[((0+8))+rsp]
1506 » jae» $L$8x_no_tail 1507 » jae» NEAR $L$8x_no_tail
1507 1508
1508 DB» 066h 1509 DB» 0x66
1509 » add» r8,QWORD PTR[rdi] 1510 » add» r8,QWORD[rdi]
1510 » adc» r9,QWORD PTR[8+rdi] 1511 » adc» r9,QWORD[8+rdi]
1511 » adc» r10,QWORD PTR[16+rdi] 1512 » adc» r10,QWORD[16+rdi]
1512 » adc» r11,QWORD PTR[24+rdi] 1513 » adc» r11,QWORD[24+rdi]
1513 » adc» r12,QWORD PTR[32+rdi] 1514 » adc» r12,QWORD[32+rdi]
1514 » adc» r13,QWORD PTR[40+rdi] 1515 » adc» r13,QWORD[40+rdi]
1515 » adc» r14,QWORD PTR[48+rdi] 1516 » adc» r14,QWORD[48+rdi]
1516 » adc» r15,QWORD PTR[56+rdi] 1517 » adc» r15,QWORD[56+rdi]
1517 sbb rsi,rsi 1518 sbb rsi,rsi
1518 1519
1519 » mov» rbx,QWORD PTR[((48+56+8))+rsp] 1520 » mov» rbx,QWORD[((48+56+8))+rsp]
1520 mov ecx,8 1521 mov ecx,8
1521 » mov» rax,QWORD PTR[rbp] 1522 » mov» rax,QWORD[rbp]
1522 » jmp» $L$8x_tail 1523 » jmp» NEAR $L$8x_tail
1523 1524
1524 ALIGN 32 1525 ALIGN 32
1525 $L$8x_tail:: 1526 $L$8x_tail:
1526 mul rbx 1527 mul rbx
1527 add r8,rax 1528 add r8,rax
1528 » mov» rax,QWORD PTR[16+rbp] 1529 » mov» rax,QWORD[16+rbp]
1529 » mov» QWORD PTR[rdi],r8 1530 » mov» QWORD[rdi],r8
1530 mov r8,rdx 1531 mov r8,rdx
1531 adc r8,0 1532 adc r8,0
1532 1533
1533 mul rbx 1534 mul rbx
1534 add r9,rax 1535 add r9,rax
1535 » mov» rax,QWORD PTR[32+rbp] 1536 » mov» rax,QWORD[32+rbp]
1536 adc rdx,0 1537 adc rdx,0
1537 add r8,r9 1538 add r8,r9
1538 » lea» rdi,QWORD PTR[8+rdi] 1539 » lea» rdi,[8+rdi]
1539 mov r9,rdx 1540 mov r9,rdx
1540 adc r9,0 1541 adc r9,0
1541 1542
1542 mul rbx 1543 mul rbx
1543 add r10,rax 1544 add r10,rax
1544 » mov» rax,QWORD PTR[48+rbp] 1545 » mov» rax,QWORD[48+rbp]
1545 adc rdx,0 1546 adc rdx,0
1546 add r9,r10 1547 add r9,r10
1547 mov r10,rdx 1548 mov r10,rdx
1548 adc r10,0 1549 adc r10,0
1549 1550
1550 mul rbx 1551 mul rbx
1551 add r11,rax 1552 add r11,rax
1552 » mov» rax,QWORD PTR[64+rbp] 1553 » mov» rax,QWORD[64+rbp]
1553 adc rdx,0 1554 adc rdx,0
1554 add r10,r11 1555 add r10,r11
1555 mov r11,rdx 1556 mov r11,rdx
1556 adc r11,0 1557 adc r11,0
1557 1558
1558 mul rbx 1559 mul rbx
1559 add r12,rax 1560 add r12,rax
1560 » mov» rax,QWORD PTR[80+rbp] 1561 » mov» rax,QWORD[80+rbp]
1561 adc rdx,0 1562 adc rdx,0
1562 add r11,r12 1563 add r11,r12
1563 mov r12,rdx 1564 mov r12,rdx
1564 adc r12,0 1565 adc r12,0
1565 1566
1566 mul rbx 1567 mul rbx
1567 add r13,rax 1568 add r13,rax
1568 » mov» rax,QWORD PTR[96+rbp] 1569 » mov» rax,QWORD[96+rbp]
1569 adc rdx,0 1570 adc rdx,0
1570 add r12,r13 1571 add r12,r13
1571 mov r13,rdx 1572 mov r13,rdx
1572 adc r13,0 1573 adc r13,0
1573 1574
1574 mul rbx 1575 mul rbx
1575 add r14,rax 1576 add r14,rax
1576 » mov» rax,QWORD PTR[112+rbp] 1577 » mov» rax,QWORD[112+rbp]
1577 adc rdx,0 1578 adc rdx,0
1578 add r13,r14 1579 add r13,r14
1579 mov r14,rdx 1580 mov r14,rdx
1580 adc r14,0 1581 adc r14,0
1581 1582
1582 mul rbx 1583 mul rbx
1583 » mov» rbx,QWORD PTR[((48-16+8))+rcx*8+rsp] 1584 » mov» rbx,QWORD[((48-16+8))+rcx*8+rsp]
1584 add r15,rax 1585 add r15,rax
1585 adc rdx,0 1586 adc rdx,0
1586 add r14,r15 1587 add r14,r15
1587 » mov» rax,QWORD PTR[rbp] 1588 » mov» rax,QWORD[rbp]
1588 mov r15,rdx 1589 mov r15,rdx
1589 adc r15,0 1590 adc r15,0
1590 1591
1591 dec ecx 1592 dec ecx
1592 » jnz» $L$8x_tail 1593 » jnz» NEAR $L$8x_tail
1593 1594
1594 » lea» rbp,QWORD PTR[128+rbp] 1595 » lea» rbp,[128+rbp]
1595 » mov» rdx,QWORD PTR[((8+8))+rsp] 1596 » mov» rdx,QWORD[((8+8))+rsp]
1596 » cmp» rbp,QWORD PTR[((0+8))+rsp] 1597 » cmp» rbp,QWORD[((0+8))+rsp]
1597 » jae» $L$8x_tail_done 1598 » jae» NEAR $L$8x_tail_done
1598 1599
1599 » mov» rbx,QWORD PTR[((48+56+8))+rsp] 1600 » mov» rbx,QWORD[((48+56+8))+rsp]
1600 neg rsi 1601 neg rsi
1601 » mov» rax,QWORD PTR[rbp] 1602 » mov» rax,QWORD[rbp]
1602 » adc» r8,QWORD PTR[rdi] 1603 » adc» r8,QWORD[rdi]
1603 » adc» r9,QWORD PTR[8+rdi] 1604 » adc» r9,QWORD[8+rdi]
1604 » adc» r10,QWORD PTR[16+rdi] 1605 » adc» r10,QWORD[16+rdi]
1605 » adc» r11,QWORD PTR[24+rdi] 1606 » adc» r11,QWORD[24+rdi]
1606 » adc» r12,QWORD PTR[32+rdi] 1607 » adc» r12,QWORD[32+rdi]
1607 » adc» r13,QWORD PTR[40+rdi] 1608 » adc» r13,QWORD[40+rdi]
1608 » adc» r14,QWORD PTR[48+rdi] 1609 » adc» r14,QWORD[48+rdi]
1609 » adc» r15,QWORD PTR[56+rdi] 1610 » adc» r15,QWORD[56+rdi]
1610 sbb rsi,rsi 1611 sbb rsi,rsi
1611 1612
1612 mov ecx,8 1613 mov ecx,8
1613 » jmp» $L$8x_tail 1614 » jmp» NEAR $L$8x_tail
1614 1615
1615 ALIGN 32 1616 ALIGN 32
1616 $L$8x_tail_done:: 1617 $L$8x_tail_done:
1617 » add» r8,QWORD PTR[rdx] 1618 » add» r8,QWORD[rdx]
1618 xor rax,rax 1619 xor rax,rax
1619 1620
1620 neg rsi 1621 neg rsi
1621 $L$8x_no_tail:: 1622 $L$8x_no_tail:
1622 » adc» r8,QWORD PTR[rdi] 1623 » adc» r8,QWORD[rdi]
1623 » adc» r9,QWORD PTR[8+rdi] 1624 » adc» r9,QWORD[8+rdi]
1624 » adc» r10,QWORD PTR[16+rdi] 1625 » adc» r10,QWORD[16+rdi]
1625 » adc» r11,QWORD PTR[24+rdi] 1626 » adc» r11,QWORD[24+rdi]
1626 » adc» r12,QWORD PTR[32+rdi] 1627 » adc» r12,QWORD[32+rdi]
1627 » adc» r13,QWORD PTR[40+rdi] 1628 » adc» r13,QWORD[40+rdi]
1628 » adc» r14,QWORD PTR[48+rdi] 1629 » adc» r14,QWORD[48+rdi]
1629 » adc» r15,QWORD PTR[56+rdi] 1630 » adc» r15,QWORD[56+rdi]
1630 adc rax,0 1631 adc rax,0
1631 » mov» rcx,QWORD PTR[((-16))+rbp] 1632 » mov» rcx,QWORD[((-16))+rbp]
1632 xor rsi,rsi 1633 xor rsi,rsi
1633 1634
1634 DB 102,72,15,126,213 1635 DB 102,72,15,126,213
1635 1636
1636 » mov» QWORD PTR[rdi],r8 1637 » mov» QWORD[rdi],r8
1637 » mov» QWORD PTR[8+rdi],r9 1638 » mov» QWORD[8+rdi],r9
1638 DB 102,73,15,126,217 1639 DB 102,73,15,126,217
1639 » mov» QWORD PTR[16+rdi],r10 1640 » mov» QWORD[16+rdi],r10
1640 » mov» QWORD PTR[24+rdi],r11 1641 » mov» QWORD[24+rdi],r11
1641 » mov» QWORD PTR[32+rdi],r12 1642 » mov» QWORD[32+rdi],r12
1642 » mov» QWORD PTR[40+rdi],r13 1643 » mov» QWORD[40+rdi],r13
1643 » mov» QWORD PTR[48+rdi],r14 1644 » mov» QWORD[48+rdi],r14
1644 » mov» QWORD PTR[56+rdi],r15 1645 » mov» QWORD[56+rdi],r15
1645 » lea» rdi,QWORD PTR[64+rdi] 1646 » lea» rdi,[64+rdi]
1646 1647
1647 cmp rdi,rdx 1648 cmp rdi,rdx
1648 » jb» $L$8x_reduction_loop 1649 » jb» NEAR $L$8x_reduction_loop
1649 1650
1650 sub rcx,r15 1651 sub rcx,r15
1651 » lea» rbx,QWORD PTR[r9*1+rdi] 1652 » lea» rbx,[r9*1+rdi]
1652 adc rsi,rsi 1653 adc rsi,rsi
1653 mov rcx,r9 1654 mov rcx,r9
1654 or rax,rsi 1655 or rax,rsi
1655 DB 102,72,15,126,207 1656 DB 102,72,15,126,207
1656 xor rax,1 1657 xor rax,1
1657 DB 102,72,15,126,206 1658 DB 102,72,15,126,206
1658 » lea» rbp,QWORD PTR[rax*8+rbp] 1659 » lea» rbp,[rax*8+rbp]
1659 sar rcx,3+2 1660 sar rcx,3+2
1660 » jmp» $L$sqr4x_sub 1661 » jmp» NEAR $L$sqr4x_sub
1661 1662
1662 ALIGN 32 1663 ALIGN 32
1663 $L$sqr4x_sub:: 1664 $L$sqr4x_sub:
1664 DB» 066h 1665 DB» 0x66
1665 » mov» r12,QWORD PTR[rbx] 1666 » mov» r12,QWORD[rbx]
1666 » mov» r13,QWORD PTR[8+rbx] 1667 » mov» r13,QWORD[8+rbx]
1667 » sbb» r12,QWORD PTR[rbp] 1668 » sbb» r12,QWORD[rbp]
1668 » mov» r14,QWORD PTR[16+rbx] 1669 » mov» r14,QWORD[16+rbx]
1669 » sbb» r13,QWORD PTR[16+rbp] 1670 » sbb» r13,QWORD[16+rbp]
1670 » mov» r15,QWORD PTR[24+rbx] 1671 » mov» r15,QWORD[24+rbx]
1671 » lea» rbx,QWORD PTR[32+rbx] 1672 » lea» rbx,[32+rbx]
1672 » sbb» r14,QWORD PTR[32+rbp] 1673 » sbb» r14,QWORD[32+rbp]
1673 » mov» QWORD PTR[rdi],r12 1674 » mov» QWORD[rdi],r12
1674 » sbb» r15,QWORD PTR[48+rbp] 1675 » sbb» r15,QWORD[48+rbp]
1675 » lea» rbp,QWORD PTR[64+rbp] 1676 » lea» rbp,[64+rbp]
1676 » mov» QWORD PTR[8+rdi],r13 1677 » mov» QWORD[8+rdi],r13
1677 » mov» QWORD PTR[16+rdi],r14 1678 » mov» QWORD[16+rdi],r14
1678 » mov» QWORD PTR[24+rdi],r15 1679 » mov» QWORD[24+rdi],r15
1679 » lea» rdi,QWORD PTR[32+rdi] 1680 » lea» rdi,[32+rdi]
1680 1681
1681 inc rcx 1682 inc rcx
1682 » jnz» $L$sqr4x_sub 1683 » jnz» NEAR $L$sqr4x_sub
1683 mov r10,r9 1684 mov r10,r9
1684 neg r9 1685 neg r9
1685 DB 0F3h,0C3h ;repret 1686 DB 0F3h,0C3h ;repret
1686 bn_sqr8x_internal» ENDP 1687
1687 PUBLIC» bn_from_montgomery 1688 global» bn_from_montgomery
1688 1689
1689 ALIGN 32 1690 ALIGN 32
1690 bn_from_montgomery» PROC PUBLIC 1691 bn_from_montgomery:
1691 » test» DWORD PTR[48+rsp],7 1692 » test» DWORD[48+rsp],7
1692 » jz» bn_from_mont8x 1693 » jz» NEAR bn_from_mont8x
1693 xor eax,eax 1694 xor eax,eax
1694 DB 0F3h,0C3h ;repret 1695 DB 0F3h,0C3h ;repret
1695 bn_from_montgomery» ENDP 1696
1696 1697
1697 1698
1698 ALIGN 32 1699 ALIGN 32
1699 bn_from_mont8x» PROC PRIVATE 1700 bn_from_mont8x:
1700 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 1701 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
1701 » mov» QWORD PTR[16+rsp],rsi 1702 » mov» QWORD[16+rsp],rsi
1702 mov rax,rsp 1703 mov rax,rsp
1703 $L$SEH_begin_bn_from_mont8x:: 1704 $L$SEH_begin_bn_from_mont8x:
1704 mov rdi,rcx 1705 mov rdi,rcx
1705 mov rsi,rdx 1706 mov rsi,rdx
1706 mov rdx,r8 1707 mov rdx,r8
1707 mov rcx,r9 1708 mov rcx,r9
1708 » mov» r8,QWORD PTR[40+rsp] 1709 » mov» r8,QWORD[40+rsp]
1709 » mov» r9,QWORD PTR[48+rsp] 1710 » mov» r9,QWORD[48+rsp]
1710 1711
1711 1712
1712 DB» 067h 1713 DB» 0x67
1713 mov rax,rsp 1714 mov rax,rsp
1714 push rbx 1715 push rbx
1715 push rbp 1716 push rbp
1716 push r12 1717 push r12
1717 push r13 1718 push r13
1718 push r14 1719 push r14
1719 push r15 1720 push r15
1720 » lea» rsp,QWORD PTR[((-40))+rsp] 1721 » lea» rsp,[((-40))+rsp]
1721 » movaps» XMMWORD PTR[rsp],xmm6 1722 » movaps» XMMWORD[rsp],xmm6
1722 » movaps» XMMWORD PTR[16+rsp],xmm7 1723 » movaps» XMMWORD[16+rsp],xmm7
1723 DB» 067h 1724 DB» 0x67
1724 mov r10d,r9d 1725 mov r10d,r9d
1725 shl r9d,3 1726 shl r9d,3
1726 shl r10d,3+2 1727 shl r10d,3+2
1727 neg r9 1728 neg r9
1728 » mov» r8,QWORD PTR[r8] 1729 » mov» r8,QWORD[r8]
1729 1730
1730 1731
1731 1732
1732 1733
1733 1734
1734 1735
1735 1736
1736 » lea» r11,QWORD PTR[((-64))+r9*2+rsp] 1737 » lea» r11,[((-64))+r9*2+rsp]
1737 sub r11,rsi 1738 sub r11,rsi
1738 and r11,4095 1739 and r11,4095
1739 cmp r10,r11 1740 cmp r10,r11
1740 » jb» $L$from_sp_alt 1741 » jb» NEAR $L$from_sp_alt
1741 sub rsp,r11 1742 sub rsp,r11
1742 » lea» rsp,QWORD PTR[((-64))+r9*2+rsp] 1743 » lea» rsp,[((-64))+r9*2+rsp]
1743 » jmp» $L$from_sp_done 1744 » jmp» NEAR $L$from_sp_done
1744 1745
1745 ALIGN 32 1746 ALIGN 32
1746 $L$from_sp_alt:: 1747 $L$from_sp_alt:
1747 » lea» r10,QWORD PTR[((4096-64))+r9*2] 1748 » lea» r10,[((4096-64))+r9*2]
1748 » lea» rsp,QWORD PTR[((-64))+r9*2+rsp] 1749 » lea» rsp,[((-64))+r9*2+rsp]
1749 sub r11,r10 1750 sub r11,r10
1750 mov r10,0 1751 mov r10,0
1751 cmovc r11,r10 1752 cmovc r11,r10
1752 sub rsp,r11 1753 sub rsp,r11
1753 $L$from_sp_done:: 1754 $L$from_sp_done:
1754 and rsp,-64 1755 and rsp,-64
1755 mov r10,r9 1756 mov r10,r9
1756 neg r9 1757 neg r9
1757 1758
1758 1759
1759 1760
1760 1761
1761 1762
1762 1763
1763 1764
1764 1765
1765 1766
1766 1767
1767 » mov» QWORD PTR[32+rsp],r8 1768 » mov» QWORD[32+rsp],r8
1768 » mov» QWORD PTR[40+rsp],rax 1769 » mov» QWORD[40+rsp],rax
1769 $L$from_body:: 1770 $L$from_body:
1770 mov r11,r9 1771 mov r11,r9
1771 » lea» rax,QWORD PTR[48+rsp] 1772 » lea» rax,[48+rsp]
1772 pxor xmm0,xmm0 1773 pxor xmm0,xmm0
1773 » jmp» $L$mul_by_1 1774 » jmp» NEAR $L$mul_by_1
1774 1775
1775 ALIGN 32 1776 ALIGN 32
1776 $L$mul_by_1:: 1777 $L$mul_by_1:
1777 » movdqu» xmm1,XMMWORD PTR[rsi] 1778 » movdqu» xmm1,XMMWORD[rsi]
1778 » movdqu» xmm2,XMMWORD PTR[16+rsi] 1779 » movdqu» xmm2,XMMWORD[16+rsi]
1779 » movdqu» xmm3,XMMWORD PTR[32+rsi] 1780 » movdqu» xmm3,XMMWORD[32+rsi]
1780 » movdqa» XMMWORD PTR[r9*1+rax],xmm0 1781 » movdqa» XMMWORD[r9*1+rax],xmm0
1781 » movdqu» xmm4,XMMWORD PTR[48+rsi] 1782 » movdqu» xmm4,XMMWORD[48+rsi]
1782 » movdqa» XMMWORD PTR[16+r9*1+rax],xmm0 1783 » movdqa» XMMWORD[16+r9*1+rax],xmm0
1783 DB» 048h,08dh,0b6h,040h,000h,000h,000h 1784 DB» 0x48,0x8d,0xb6,0x40,0x00,0x00,0x00
1784 » movdqa» XMMWORD PTR[rax],xmm1 1785 » movdqa» XMMWORD[rax],xmm1
1785 » movdqa» XMMWORD PTR[32+r9*1+rax],xmm0 1786 » movdqa» XMMWORD[32+r9*1+rax],xmm0
1786 » movdqa» XMMWORD PTR[16+rax],xmm2 1787 » movdqa» XMMWORD[16+rax],xmm2
1787 » movdqa» XMMWORD PTR[48+r9*1+rax],xmm0 1788 » movdqa» XMMWORD[48+r9*1+rax],xmm0
1788 » movdqa» XMMWORD PTR[32+rax],xmm3 1789 » movdqa» XMMWORD[32+rax],xmm3
1789 » movdqa» XMMWORD PTR[48+rax],xmm4 1790 » movdqa» XMMWORD[48+rax],xmm4
1790 » lea» rax,QWORD PTR[64+rax] 1791 » lea» rax,[64+rax]
1791 sub r11,64 1792 sub r11,64
1792 » jnz» $L$mul_by_1 1793 » jnz» NEAR $L$mul_by_1
1793 1794
1794 DB 102,72,15,110,207 1795 DB 102,72,15,110,207
1795 DB 102,72,15,110,209 1796 DB 102,72,15,110,209
1796 DB» 067h 1797 DB» 0x67
1797 mov rbp,rcx 1798 mov rbp,rcx
1798 DB 102,73,15,110,218 1799 DB 102,73,15,110,218
1799 call sqr8x_reduction 1800 call sqr8x_reduction
1800 1801
1801 pxor xmm0,xmm0 1802 pxor xmm0,xmm0
1802 » lea» rax,QWORD PTR[48+rsp] 1803 » lea» rax,[48+rsp]
1803 » mov» rsi,QWORD PTR[40+rsp] 1804 » mov» rsi,QWORD[40+rsp]
1804 » jmp» $L$from_mont_zero 1805 » jmp» NEAR $L$from_mont_zero
1805 1806
1806 ALIGN 32 1807 ALIGN 32
1807 $L$from_mont_zero:: 1808 $L$from_mont_zero:
1808 » movdqa» XMMWORD PTR[rax],xmm0 1809 » movdqa» XMMWORD[rax],xmm0
1809 » movdqa» XMMWORD PTR[16+rax],xmm0 1810 » movdqa» XMMWORD[16+rax],xmm0
1810 » movdqa» XMMWORD PTR[32+rax],xmm0 1811 » movdqa» XMMWORD[32+rax],xmm0
1811 » movdqa» XMMWORD PTR[48+rax],xmm0 1812 » movdqa» XMMWORD[48+rax],xmm0
1812 » lea» rax,QWORD PTR[64+rax] 1813 » lea» rax,[64+rax]
1813 sub r9,32 1814 sub r9,32
1814 » jnz» $L$from_mont_zero 1815 » jnz» NEAR $L$from_mont_zero
1815 1816
1816 mov rax,1 1817 mov rax,1
1817 » mov» r15,QWORD PTR[((-48))+rsi] 1818 » mov» r15,QWORD[((-48))+rsi]
1818 » mov» r14,QWORD PTR[((-40))+rsi] 1819 » mov» r14,QWORD[((-40))+rsi]
1819 » mov» r13,QWORD PTR[((-32))+rsi] 1820 » mov» r13,QWORD[((-32))+rsi]
1820 » mov» r12,QWORD PTR[((-24))+rsi] 1821 » mov» r12,QWORD[((-24))+rsi]
1821 » mov» rbp,QWORD PTR[((-16))+rsi] 1822 » mov» rbp,QWORD[((-16))+rsi]
1822 » mov» rbx,QWORD PTR[((-8))+rsi] 1823 » mov» rbx,QWORD[((-8))+rsi]
1823 » lea» rsp,QWORD PTR[rsi] 1824 » lea» rsp,[rsi]
1824 $L$from_epilogue:: 1825 $L$from_epilogue:
1825 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 1826 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
1826 » mov» rsi,QWORD PTR[16+rsp] 1827 » mov» rsi,QWORD[16+rsp]
1827 DB 0F3h,0C3h ;repret 1828 DB 0F3h,0C3h ;repret
1828 $L$SEH_end_bn_from_mont8x:: 1829 $L$SEH_end_bn_from_mont8x:
1829 bn_from_mont8x» ENDP 1830 global» bn_scatter5
1830 PUBLIC» bn_scatter5
1831 1831
1832 ALIGN 16 1832 ALIGN 16
1833 bn_scatter5» PROC PUBLIC 1833 bn_scatter5:
1834 cmp edx,0 1834 cmp edx,0
1835 » jz» $L$scatter_epilogue 1835 » jz» NEAR $L$scatter_epilogue
1836 » lea» r8,QWORD PTR[r9*8+r8] 1836 » lea» r8,[r9*8+r8]
1837 $L$scatter:: 1837 $L$scatter:
1838 » mov» rax,QWORD PTR[rcx] 1838 » mov» rax,QWORD[rcx]
1839 » lea» rcx,QWORD PTR[8+rcx] 1839 » lea» rcx,[8+rcx]
1840 » mov» QWORD PTR[r8],rax 1840 » mov» QWORD[r8],rax
1841 » lea» r8,QWORD PTR[256+r8] 1841 » lea» r8,[256+r8]
1842 sub edx,1 1842 sub edx,1
1843 » jnz» $L$scatter 1843 » jnz» NEAR $L$scatter
1844 $L$scatter_epilogue:: 1844 $L$scatter_epilogue:
1845 DB 0F3h,0C3h ;repret 1845 DB 0F3h,0C3h ;repret
1846 bn_scatter5 ENDP
1847 1846
1848 PUBLIC» bn_gather5 1847
1848 global» bn_gather5
1849 1849
1850 ALIGN 16 1850 ALIGN 16
1851 bn_gather5» PROC PUBLIC 1851 bn_gather5:
1852 $L$SEH_begin_bn_gather5:: 1852 $L$SEH_begin_bn_gather5:
1853 1853
1854 DB» 048h,083h,0ech,028h 1854 DB» 0x48,0x83,0xec,0x28
1855 DB» 00fh,029h,034h,024h 1855 DB» 0x0f,0x29,0x34,0x24
1856 DB» 00fh,029h,07ch,024h,010h 1856 DB» 0x0f,0x29,0x7c,0x24,0x10
1857 mov r11d,r9d 1857 mov r11d,r9d
1858 shr r9d,3 1858 shr r9d,3
1859 and r11,7 1859 and r11,7
1860 not r9d 1860 not r9d
1861 » lea» rax,QWORD PTR[$L$magic_masks] 1861 » lea» rax,[$L$magic_masks]
1862 and r9d,3 1862 and r9d,3
1863 » lea» r8,QWORD PTR[128+r11*8+r8] 1863 » lea» r8,[128+r11*8+r8]
1864 » movq» xmm4,QWORD PTR[r9*8+rax] 1864 » movq» xmm4,QWORD[r9*8+rax]
1865 » movq» xmm5,QWORD PTR[8+r9*8+rax] 1865 » movq» xmm5,QWORD[8+r9*8+rax]
1866 » movq» xmm6,QWORD PTR[16+r9*8+rax] 1866 » movq» xmm6,QWORD[16+r9*8+rax]
1867 » movq» xmm7,QWORD PTR[24+r9*8+rax] 1867 » movq» xmm7,QWORD[24+r9*8+rax]
1868 » jmp» $L$gather 1868 » jmp» NEAR $L$gather
1869 ALIGN 16 1869 ALIGN 16
1870 $L$gather:: 1870 $L$gather:
1871 » movq» xmm0,QWORD PTR[(((-128)))+r8] 1871 » movq» xmm0,QWORD[(((-128)))+r8]
1872 » movq» xmm1,QWORD PTR[((-64))+r8] 1872 » movq» xmm1,QWORD[((-64))+r8]
1873 pand xmm0,xmm4 1873 pand xmm0,xmm4
1874 » movq» xmm2,QWORD PTR[r8] 1874 » movq» xmm2,QWORD[r8]
1875 pand xmm1,xmm5 1875 pand xmm1,xmm5
1876 » movq» xmm3,QWORD PTR[64+r8] 1876 » movq» xmm3,QWORD[64+r8]
1877 pand xmm2,xmm6 1877 pand xmm2,xmm6
1878 por xmm0,xmm1 1878 por xmm0,xmm1
1879 pand xmm3,xmm7 1879 pand xmm3,xmm7
1880 DB» 067h,067h 1880 DB» 0x67,0x67
1881 por xmm0,xmm2 1881 por xmm0,xmm2
1882 » lea» r8,QWORD PTR[256+r8] 1882 » lea» r8,[256+r8]
1883 por xmm0,xmm3 1883 por xmm0,xmm3
1884 1884
1885 » movq» QWORD PTR[rcx],xmm0 1885 » movq» QWORD[rcx],xmm0
1886 » lea» rcx,QWORD PTR[8+rcx] 1886 » lea» rcx,[8+rcx]
1887 sub edx,1 1887 sub edx,1
1888 » jnz» $L$gather 1888 » jnz» NEAR $L$gather
1889 » movaps» xmm6,XMMWORD PTR[rsp] 1889 » movaps» xmm6,XMMWORD[rsp]
1890 » movaps» xmm7,XMMWORD PTR[16+rsp] 1890 » movaps» xmm7,XMMWORD[16+rsp]
1891 » lea» rsp,QWORD PTR[40+rsp] 1891 » lea» rsp,[40+rsp]
1892 DB 0F3h,0C3h ;repret 1892 DB 0F3h,0C3h ;repret
1893 $L$SEH_end_bn_gather5:: 1893 $L$SEH_end_bn_gather5:
1894 bn_gather5» ENDP 1894
1895 ALIGN 64 1895 ALIGN 64
1896 $L$magic_masks:: 1896 $L$magic_masks:
1897 DD 0,0,0,0,0,0,-1,-1 1897 DD 0,0,0,0,0,0,-1,-1
1898 DD 0,0,0,0,0,0,0,0 1898 DD 0,0,0,0,0,0,0,0
1899 DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 1899 DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
1900 DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115 1900 DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115
1901 DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111 1901 DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111
1902 DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79 1902 DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79
1903 DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111 1903 DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111
1904 DB 112,101,110,115,115,108,46,111,114,103,62,0 1904 DB 112,101,110,115,115,108,46,111,114,103,62,0
1905 EXTERN» __imp_RtlVirtualUnwind:NEAR 1905 EXTERN» __imp_RtlVirtualUnwind
1906 1906
1907 ALIGN 16 1907 ALIGN 16
1908 mul_handler» PROC PRIVATE 1908 mul_handler:
1909 push rsi 1909 push rsi
1910 push rdi 1910 push rdi
1911 push rbx 1911 push rbx
1912 push rbp 1912 push rbp
1913 push r12 1913 push r12
1914 push r13 1914 push r13
1915 push r14 1915 push r14
1916 push r15 1916 push r15
1917 pushfq 1917 pushfq
1918 sub rsp,64 1918 sub rsp,64
1919 1919
1920 » mov» rax,QWORD PTR[120+r8] 1920 » mov» rax,QWORD[120+r8]
1921 » mov» rbx,QWORD PTR[248+r8] 1921 » mov» rbx,QWORD[248+r8]
1922 1922
1923 » mov» rsi,QWORD PTR[8+r9] 1923 » mov» rsi,QWORD[8+r9]
1924 » mov» r11,QWORD PTR[56+r9] 1924 » mov» r11,QWORD[56+r9]
1925 1925
1926 » mov» r10d,DWORD PTR[r11] 1926 » mov» r10d,DWORD[r11]
1927 » lea» r10,QWORD PTR[r10*1+rsi] 1927 » lea» r10,[r10*1+rsi]
1928 cmp rbx,r10 1928 cmp rbx,r10
1929 » jb» $L$common_seh_tail 1929 » jb» NEAR $L$common_seh_tail
1930 1930
1931 » mov» rax,QWORD PTR[152+r8] 1931 » mov» rax,QWORD[152+r8]
1932 1932
1933 » mov» r10d,DWORD PTR[4+r11] 1933 » mov» r10d,DWORD[4+r11]
1934 » lea» r10,QWORD PTR[r10*1+rsi] 1934 » lea» r10,[r10*1+rsi]
1935 cmp rbx,r10 1935 cmp rbx,r10
1936 » jae» $L$common_seh_tail 1936 » jae» NEAR $L$common_seh_tail
1937 1937
1938 » lea» r10,QWORD PTR[$L$mul_epilogue] 1938 » lea» r10,[$L$mul_epilogue]
1939 cmp rbx,r10 1939 cmp rbx,r10
1940 » jb» $L$body_40 1940 » jb» NEAR $L$body_40
1941 1941
1942 » mov» r10,QWORD PTR[192+r8] 1942 » mov» r10,QWORD[192+r8]
1943 » mov» rax,QWORD PTR[8+r10*8+rax] 1943 » mov» rax,QWORD[8+r10*8+rax]
1944 » jmp» $L$body_proceed 1944 » jmp» NEAR $L$body_proceed
1945 1945
1946 $L$body_40:: 1946 $L$body_40:
1947 » mov» rax,QWORD PTR[40+rax] 1947 » mov» rax,QWORD[40+rax]
1948 $L$body_proceed:: 1948 $L$body_proceed:
1949 1949
1950 » movaps» xmm0,XMMWORD PTR[((-88))+rax] 1950 » movaps» xmm0,XMMWORD[((-88))+rax]
1951 » movaps» xmm1,XMMWORD PTR[((-72))+rax] 1951 » movaps» xmm1,XMMWORD[((-72))+rax]
1952 1952
1953 » mov» rbx,QWORD PTR[((-8))+rax] 1953 » mov» rbx,QWORD[((-8))+rax]
1954 » mov» rbp,QWORD PTR[((-16))+rax] 1954 » mov» rbp,QWORD[((-16))+rax]
1955 » mov» r12,QWORD PTR[((-24))+rax] 1955 » mov» r12,QWORD[((-24))+rax]
1956 » mov» r13,QWORD PTR[((-32))+rax] 1956 » mov» r13,QWORD[((-32))+rax]
1957 » mov» r14,QWORD PTR[((-40))+rax] 1957 » mov» r14,QWORD[((-40))+rax]
1958 » mov» r15,QWORD PTR[((-48))+rax] 1958 » mov» r15,QWORD[((-48))+rax]
1959 » mov» QWORD PTR[144+r8],rbx 1959 » mov» QWORD[144+r8],rbx
1960 » mov» QWORD PTR[160+r8],rbp 1960 » mov» QWORD[160+r8],rbp
1961 » mov» QWORD PTR[216+r8],r12 1961 » mov» QWORD[216+r8],r12
1962 » mov» QWORD PTR[224+r8],r13 1962 » mov» QWORD[224+r8],r13
1963 » mov» QWORD PTR[232+r8],r14 1963 » mov» QWORD[232+r8],r14
1964 » mov» QWORD PTR[240+r8],r15 1964 » mov» QWORD[240+r8],r15
1965 » movups» XMMWORD PTR[512+r8],xmm0 1965 » movups» XMMWORD[512+r8],xmm0
1966 » movups» XMMWORD PTR[528+r8],xmm1 1966 » movups» XMMWORD[528+r8],xmm1
1967 1967
1968 $L$common_seh_tail:: 1968 $L$common_seh_tail:
1969 » mov» rdi,QWORD PTR[8+rax] 1969 » mov» rdi,QWORD[8+rax]
1970 » mov» rsi,QWORD PTR[16+rax] 1970 » mov» rsi,QWORD[16+rax]
1971 » mov» QWORD PTR[152+r8],rax 1971 » mov» QWORD[152+r8],rax
1972 » mov» QWORD PTR[168+r8],rsi 1972 » mov» QWORD[168+r8],rsi
1973 » mov» QWORD PTR[176+r8],rdi 1973 » mov» QWORD[176+r8],rdi
1974 1974
1975 » mov» rdi,QWORD PTR[40+r9] 1975 » mov» rdi,QWORD[40+r9]
1976 mov rsi,r8 1976 mov rsi,r8
1977 mov ecx,154 1977 mov ecx,154
1978 » DD» 0a548f3fch 1978 » DD» 0xa548f3fc
1979 1979
1980 mov rsi,r9 1980 mov rsi,r9
1981 xor rcx,rcx 1981 xor rcx,rcx
1982 » mov» rdx,QWORD PTR[8+rsi] 1982 » mov» rdx,QWORD[8+rsi]
1983 » mov» r8,QWORD PTR[rsi] 1983 » mov» r8,QWORD[rsi]
1984 » mov» r9,QWORD PTR[16+rsi] 1984 » mov» r9,QWORD[16+rsi]
1985 » mov» r10,QWORD PTR[40+rsi] 1985 » mov» r10,QWORD[40+rsi]
1986 » lea» r11,QWORD PTR[56+rsi] 1986 » lea» r11,[56+rsi]
1987 » lea» r12,QWORD PTR[24+rsi] 1987 » lea» r12,[24+rsi]
1988 » mov» QWORD PTR[32+rsp],r10 1988 » mov» QWORD[32+rsp],r10
1989 » mov» QWORD PTR[40+rsp],r11 1989 » mov» QWORD[40+rsp],r11
1990 » mov» QWORD PTR[48+rsp],r12 1990 » mov» QWORD[48+rsp],r12
1991 » mov» QWORD PTR[56+rsp],rcx 1991 » mov» QWORD[56+rsp],rcx
1992 » call» QWORD PTR[__imp_RtlVirtualUnwind] 1992 » call» QWORD[__imp_RtlVirtualUnwind]
1993 1993
1994 mov eax,1 1994 mov eax,1
1995 add rsp,64 1995 add rsp,64
1996 popfq 1996 popfq
1997 pop r15 1997 pop r15
1998 pop r14 1998 pop r14
1999 pop r13 1999 pop r13
2000 pop r12 2000 pop r12
2001 pop rbp 2001 pop rbp
2002 pop rbx 2002 pop rbx
2003 pop rdi 2003 pop rdi
2004 pop rsi 2004 pop rsi
2005 DB 0F3h,0C3h ;repret 2005 DB 0F3h,0C3h ;repret
2006 mul_handler ENDP
2007 2006
2008 .text$» ENDS 2007
2009 .pdata» SEGMENT READONLY ALIGN(4) 2008 section».pdata rdata align=4
2010 ALIGN 4 2009 ALIGN 4
2011 » DD» imagerel $L$SEH_begin_bn_mul_mont_gather5 2010 » DD» $L$SEH_begin_bn_mul_mont_gather5 wrt ..imagebase
2012 » DD» imagerel $L$SEH_end_bn_mul_mont_gather5 2011 » DD» $L$SEH_end_bn_mul_mont_gather5 wrt ..imagebase
2013 » DD» imagerel $L$SEH_info_bn_mul_mont_gather5 2012 » DD» $L$SEH_info_bn_mul_mont_gather5 wrt ..imagebase
2014 2013
2015 » DD» imagerel $L$SEH_begin_bn_mul4x_mont_gather5 2014 » DD» $L$SEH_begin_bn_mul4x_mont_gather5 wrt ..imagebase
2016 » DD» imagerel $L$SEH_end_bn_mul4x_mont_gather5 2015 » DD» $L$SEH_end_bn_mul4x_mont_gather5 wrt ..imagebase
2017 » DD» imagerel $L$SEH_info_bn_mul4x_mont_gather5 2016 » DD» $L$SEH_info_bn_mul4x_mont_gather5 wrt ..imagebase
2018 2017
2019 » DD» imagerel $L$SEH_begin_bn_power5 2018 » DD» $L$SEH_begin_bn_power5 wrt ..imagebase
2020 » DD» imagerel $L$SEH_end_bn_power5 2019 » DD» $L$SEH_end_bn_power5 wrt ..imagebase
2021 » DD» imagerel $L$SEH_info_bn_power5 2020 » DD» $L$SEH_info_bn_power5 wrt ..imagebase
2022 2021
2023 » DD» imagerel $L$SEH_begin_bn_from_mont8x 2022 » DD» $L$SEH_begin_bn_from_mont8x wrt ..imagebase
2024 » DD» imagerel $L$SEH_end_bn_from_mont8x 2023 » DD» $L$SEH_end_bn_from_mont8x wrt ..imagebase
2025 » DD» imagerel $L$SEH_info_bn_from_mont8x 2024 » DD» $L$SEH_info_bn_from_mont8x wrt ..imagebase
2026 » DD» imagerel $L$SEH_begin_bn_gather5 2025 » DD» $L$SEH_begin_bn_gather5 wrt ..imagebase
2027 » DD» imagerel $L$SEH_end_bn_gather5 2026 » DD» $L$SEH_end_bn_gather5 wrt ..imagebase
2028 » DD» imagerel $L$SEH_info_bn_gather5 2027 » DD» $L$SEH_info_bn_gather5 wrt ..imagebase
2029 2028
2030 .pdata» ENDS 2029 section».xdata rdata align=8
2031 .xdata» SEGMENT READONLY ALIGN(8)
2032 ALIGN 8 2030 ALIGN 8
2033 $L$SEH_info_bn_mul_mont_gather5:: 2031 $L$SEH_info_bn_mul_mont_gather5:
2034 DB 9,0,0,0 2032 DB 9,0,0,0
2035 » DD» imagerel mul_handler 2033 » DD» mul_handler wrt ..imagebase
2036 » DD» imagerel $L$mul_body,imagerel $L$mul_epilogue 2034 » DD» $L$mul_body wrt ..imagebase,$L$mul_epilogue wrt ..imagebase
2037 ALIGN 8 2035 ALIGN 8
2038 $L$SEH_info_bn_mul4x_mont_gather5:: 2036 $L$SEH_info_bn_mul4x_mont_gather5:
2039 DB 9,0,0,0 2037 DB 9,0,0,0
2040 » DD» imagerel mul_handler 2038 » DD» mul_handler wrt ..imagebase
2041 » DD» imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue 2039 » DD» $L$mul4x_body wrt ..imagebase,$L$mul4x_epilogue wrt ..imagebase
2042 ALIGN 8 2040 ALIGN 8
2043 $L$SEH_info_bn_power5:: 2041 $L$SEH_info_bn_power5:
2044 DB 9,0,0,0 2042 DB 9,0,0,0
2045 » DD» imagerel mul_handler 2043 » DD» mul_handler wrt ..imagebase
2046 » DD» imagerel $L$power5_body,imagerel $L$power5_epilogue 2044 » DD» $L$power5_body wrt ..imagebase,$L$power5_epilogue wrt ..imagebas e
2047 ALIGN 8 2045 ALIGN 8
2048 $L$SEH_info_bn_from_mont8x:: 2046 $L$SEH_info_bn_from_mont8x:
2049 DB 9,0,0,0 2047 DB 9,0,0,0
2050 » DD» imagerel mul_handler 2048 » DD» mul_handler wrt ..imagebase
2051 » DD» imagerel $L$from_body,imagerel $L$from_epilogue 2049 » DD» $L$from_body wrt ..imagebase,$L$from_epilogue wrt ..imagebase
2052 ALIGN 8 2050 ALIGN 8
2053 $L$SEH_info_bn_gather5:: 2051 $L$SEH_info_bn_gather5:
2054 DB» 001h,00dh,005h,000h 2052 DB» 0x01,0x0d,0x05,0x00
2055 DB» 00dh,078h,001h,000h 2053 DB» 0x0d,0x78,0x01,0x00
2056 DB» 008h,068h,000h,000h 2054 DB» 0x08,0x68,0x00,0x00
2057 DB» 004h,042h,000h,000h 2055 DB» 0x04,0x42,0x00,0x00
2058 ALIGN 8 2056 ALIGN 8
2059
2060 .xdata ENDS
2061 END
OLDNEW
« no previous file with comments | « third_party/boringssl/win-x86_64/crypto/bn/x86_64-mont.asm ('k') | third_party/boringssl/win-x86_64/crypto/cpu-x86_64-asm.asm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698