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

Side by Side Diff: third_party/boringssl/win-x86_64/crypto/bn/x86_64-mont.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 8 EXTERN» OPENSSL_ia32cap_P
9
10 global» bn_mul_mont
7 11
8 ALIGN 16 12 ALIGN 16
9 bn_mul_mont» PROC PUBLIC 13 bn_mul_mont:
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:: 17 $L$SEH_begin_bn_mul_mont:
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,3 26 test r9d,3
23 » jnz» $L$mul_enter 27 » jnz» NEAR $L$mul_enter
24 cmp r9d,8 28 cmp r9d,8
25 » jb» $L$mul_enter 29 » jb» NEAR $L$mul_enter
26 cmp rdx,rsi 30 cmp rdx,rsi
27 » jne» $L$mul4x_enter 31 » jne» NEAR $L$mul4x_enter
28 test r9d,7 32 test r9d,7
29 » jz» $L$sqr8x_enter 33 » jz» NEAR $L$sqr8x_enter
30 » jmp» $L$mul4x_enter 34 » jmp» NEAR $L$mul4x_enter
31 35
32 ALIGN 16 36 ALIGN 16
33 $L$mul_enter:: 37 $L$mul_enter:
34 push rbx 38 push rbx
35 push rbp 39 push rbp
36 push r12 40 push r12
37 push r13 41 push r13
38 push r14 42 push r14
39 push r15 43 push r15
40 44
41 mov r9d,r9d 45 mov r9d,r9d
42 » lea» r10,QWORD PTR[2+r9] 46 » lea» r10,[2+r9]
43 mov r11,rsp 47 mov r11,rsp
44 neg r10 48 neg r10
45 » lea» rsp,QWORD PTR[r10*8+rsp] 49 » lea» rsp,[r10*8+rsp]
46 and rsp,-1024 50 and rsp,-1024
47 51
48 » mov» QWORD PTR[8+r9*8+rsp],r11 52 » mov» QWORD[8+r9*8+rsp],r11
49 $L$mul_body:: 53 $L$mul_body:
50 mov r12,rdx 54 mov r12,rdx
51 » mov» r8,QWORD PTR[r8] 55 » mov» r8,QWORD[r8]
52 » mov» rbx,QWORD PTR[r12] 56 » mov» rbx,QWORD[r12]
53 » mov» rax,QWORD PTR[rsi] 57 » mov» rax,QWORD[rsi]
54 58
55 xor r14,r14 59 xor r14,r14
56 xor r15,r15 60 xor r15,r15
57 61
58 mov rbp,r8 62 mov rbp,r8
59 mul rbx 63 mul rbx
60 mov r10,rax 64 mov r10,rax
61 » mov» rax,QWORD PTR[rcx] 65 » mov» rax,QWORD[rcx]
62 66
63 imul rbp,r10 67 imul rbp,r10
64 mov r11,rdx 68 mov r11,rdx
65 69
66 mul rbp 70 mul rbp
67 add r10,rax 71 add r10,rax
68 » mov» rax,QWORD PTR[8+rsi] 72 » mov» rax,QWORD[8+rsi]
69 adc rdx,0 73 adc rdx,0
70 mov r13,rdx 74 mov r13,rdx
71 75
72 » lea» r15,QWORD PTR[1+r15] 76 » lea» r15,[1+r15]
73 » jmp» $L$1st_enter 77 » jmp» NEAR $L$1st_enter
74 78
75 ALIGN 16 79 ALIGN 16
76 $L$1st:: 80 $L$1st:
77 add r13,rax 81 add r13,rax
78 » mov» rax,QWORD PTR[r15*8+rsi] 82 » mov» rax,QWORD[r15*8+rsi]
79 adc rdx,0 83 adc rdx,0
80 add r13,r11 84 add r13,r11
81 mov r11,r10 85 mov r11,r10
82 adc rdx,0 86 adc rdx,0
83 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 87 » mov» QWORD[((-16))+r15*8+rsp],r13
84 mov r13,rdx 88 mov r13,rdx
85 89
86 $L$1st_enter:: 90 $L$1st_enter:
87 mul rbx 91 mul rbx
88 add r11,rax 92 add r11,rax
89 » mov» rax,QWORD PTR[r15*8+rcx] 93 » mov» rax,QWORD[r15*8+rcx]
90 adc rdx,0 94 adc rdx,0
91 » lea» r15,QWORD PTR[1+r15] 95 » lea» r15,[1+r15]
92 mov r10,rdx 96 mov r10,rdx
93 97
94 mul rbp 98 mul rbp
95 cmp r15,r9 99 cmp r15,r9
96 » jne» $L$1st 100 » jne» NEAR $L$1st
97 101
98 add r13,rax 102 add r13,rax
99 » mov» rax,QWORD PTR[rsi] 103 » mov» rax,QWORD[rsi]
100 adc rdx,0 104 adc rdx,0
101 add r13,r11 105 add r13,r11
102 adc rdx,0 106 adc rdx,0
103 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 107 » mov» QWORD[((-16))+r15*8+rsp],r13
104 mov r13,rdx 108 mov r13,rdx
105 mov r11,r10 109 mov r11,r10
106 110
107 xor rdx,rdx 111 xor rdx,rdx
108 add r13,r11 112 add r13,r11
109 adc rdx,0 113 adc rdx,0
110 » mov» QWORD PTR[((-8))+r9*8+rsp],r13 114 » mov» QWORD[((-8))+r9*8+rsp],r13
111 » mov» QWORD PTR[r9*8+rsp],rdx 115 » mov» QWORD[r9*8+rsp],rdx
112 116
113 » lea» r14,QWORD PTR[1+r14] 117 » lea» r14,[1+r14]
114 » jmp» $L$outer 118 » jmp» NEAR $L$outer
115 ALIGN 16 119 ALIGN 16
116 $L$outer:: 120 $L$outer:
117 » mov» rbx,QWORD PTR[r14*8+r12] 121 » mov» rbx,QWORD[r14*8+r12]
118 xor r15,r15 122 xor r15,r15
119 mov rbp,r8 123 mov rbp,r8
120 » mov» r10,QWORD PTR[rsp] 124 » mov» r10,QWORD[rsp]
121 mul rbx 125 mul rbx
122 add r10,rax 126 add r10,rax
123 » mov» rax,QWORD PTR[rcx] 127 » mov» rax,QWORD[rcx]
124 adc rdx,0 128 adc rdx,0
125 129
126 imul rbp,r10 130 imul rbp,r10
127 mov r11,rdx 131 mov r11,rdx
128 132
129 mul rbp 133 mul rbp
130 add r10,rax 134 add r10,rax
131 » mov» rax,QWORD PTR[8+rsi] 135 » mov» rax,QWORD[8+rsi]
132 adc rdx,0 136 adc rdx,0
133 » mov» r10,QWORD PTR[8+rsp] 137 » mov» r10,QWORD[8+rsp]
134 mov r13,rdx 138 mov r13,rdx
135 139
136 » lea» r15,QWORD PTR[1+r15] 140 » lea» r15,[1+r15]
137 » jmp» $L$inner_enter 141 » jmp» NEAR $L$inner_enter
138 142
139 ALIGN 16 143 ALIGN 16
140 $L$inner:: 144 $L$inner:
141 add r13,rax 145 add r13,rax
142 » mov» rax,QWORD PTR[r15*8+rsi] 146 » mov» rax,QWORD[r15*8+rsi]
143 adc rdx,0 147 adc rdx,0
144 add r13,r10 148 add r13,r10
145 » mov» r10,QWORD PTR[r15*8+rsp] 149 » mov» r10,QWORD[r15*8+rsp]
146 adc rdx,0 150 adc rdx,0
147 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 151 » mov» QWORD[((-16))+r15*8+rsp],r13
148 mov r13,rdx 152 mov r13,rdx
149 153
150 $L$inner_enter:: 154 $L$inner_enter:
151 mul rbx 155 mul rbx
152 add r11,rax 156 add r11,rax
153 » mov» rax,QWORD PTR[r15*8+rcx] 157 » mov» rax,QWORD[r15*8+rcx]
154 adc rdx,0 158 adc rdx,0
155 add r10,r11 159 add r10,r11
156 mov r11,rdx 160 mov r11,rdx
157 adc r11,0 161 adc r11,0
158 » lea» r15,QWORD PTR[1+r15] 162 » lea» r15,[1+r15]
159 163
160 mul rbp 164 mul rbp
161 cmp r15,r9 165 cmp r15,r9
162 » jne» $L$inner 166 » jne» NEAR $L$inner
163 167
164 add r13,rax 168 add r13,rax
165 » mov» rax,QWORD PTR[rsi] 169 » mov» rax,QWORD[rsi]
166 adc rdx,0 170 adc rdx,0
167 add r13,r10 171 add r13,r10
168 » mov» r10,QWORD PTR[r15*8+rsp] 172 » mov» r10,QWORD[r15*8+rsp]
169 adc rdx,0 173 adc rdx,0
170 » mov» QWORD PTR[((-16))+r15*8+rsp],r13 174 » mov» QWORD[((-16))+r15*8+rsp],r13
171 mov r13,rdx 175 mov r13,rdx
172 176
173 xor rdx,rdx 177 xor rdx,rdx
174 add r13,r11 178 add r13,r11
175 adc rdx,0 179 adc rdx,0
176 add r13,r10 180 add r13,r10
177 adc rdx,0 181 adc rdx,0
178 » mov» QWORD PTR[((-8))+r9*8+rsp],r13 182 » mov» QWORD[((-8))+r9*8+rsp],r13
179 » mov» QWORD PTR[r9*8+rsp],rdx 183 » mov» QWORD[r9*8+rsp],rdx
180 184
181 » lea» r14,QWORD PTR[1+r14] 185 » lea» r14,[1+r14]
182 cmp r14,r9 186 cmp r14,r9
183 » jb» $L$outer 187 » jb» NEAR $L$outer
184 188
185 xor r14,r14 189 xor r14,r14
186 » mov» rax,QWORD PTR[rsp] 190 » mov» rax,QWORD[rsp]
187 » lea» rsi,QWORD PTR[rsp] 191 » lea» rsi,[rsp]
188 mov r15,r9 192 mov r15,r9
189 » jmp» $L$sub 193 » jmp» NEAR $L$sub
190 ALIGN 16 194 ALIGN 16
191 $L$sub::» sbb» rax,QWORD PTR[r14*8+rcx] 195 $L$sub:»sbb» rax,QWORD[r14*8+rcx]
192 » mov» QWORD PTR[r14*8+rdi],rax 196 » mov» QWORD[r14*8+rdi],rax
193 » mov» rax,QWORD PTR[8+r14*8+rsi] 197 » mov» rax,QWORD[8+r14*8+rsi]
194 » lea» r14,QWORD PTR[1+r14] 198 » lea» r14,[1+r14]
195 dec r15 199 dec r15
196 » jnz» $L$sub 200 » jnz» NEAR $L$sub
197 201
198 sbb rax,0 202 sbb rax,0
199 xor r14,r14 203 xor r14,r14
200 mov r15,r9 204 mov r15,r9
201 ALIGN 16 205 ALIGN 16
202 $L$copy:: 206 $L$copy:
203 » mov» rsi,QWORD PTR[r14*8+rsp] 207 » mov» rsi,QWORD[r14*8+rsp]
204 » mov» rcx,QWORD PTR[r14*8+rdi] 208 » mov» rcx,QWORD[r14*8+rdi]
205 xor rsi,rcx 209 xor rsi,rcx
206 and rsi,rax 210 and rsi,rax
207 xor rsi,rcx 211 xor rsi,rcx
208 » mov» QWORD PTR[r14*8+rsp],r14 212 » mov» QWORD[r14*8+rsp],r14
209 » mov» QWORD PTR[r14*8+rdi],rsi 213 » mov» QWORD[r14*8+rdi],rsi
210 » lea» r14,QWORD PTR[1+r14] 214 » lea» r14,[1+r14]
211 sub r15,1 215 sub r15,1
212 » jnz» $L$copy 216 » jnz» NEAR $L$copy
213 217
214 » mov» rsi,QWORD PTR[8+r9*8+rsp] 218 » mov» rsi,QWORD[8+r9*8+rsp]
215 mov rax,1 219 mov rax,1
216 » mov» r15,QWORD PTR[rsi] 220 » mov» r15,QWORD[rsi]
217 » mov» r14,QWORD PTR[8+rsi] 221 » mov» r14,QWORD[8+rsi]
218 » mov» r13,QWORD PTR[16+rsi] 222 » mov» r13,QWORD[16+rsi]
219 » mov» r12,QWORD PTR[24+rsi] 223 » mov» r12,QWORD[24+rsi]
220 » mov» rbp,QWORD PTR[32+rsi] 224 » mov» rbp,QWORD[32+rsi]
221 » mov» rbx,QWORD PTR[40+rsi] 225 » mov» rbx,QWORD[40+rsi]
222 » lea» rsp,QWORD PTR[48+rsi] 226 » lea» rsp,[48+rsi]
223 $L$mul_epilogue:: 227 $L$mul_epilogue:
224 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 228 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
225 » mov» rsi,QWORD PTR[16+rsp] 229 » mov» rsi,QWORD[16+rsp]
226 DB 0F3h,0C3h ;repret 230 DB 0F3h,0C3h ;repret
227 $L$SEH_end_bn_mul_mont:: 231 $L$SEH_end_bn_mul_mont:
228 bn_mul_mont» ENDP
229 232
230 ALIGN 16 233 ALIGN 16
231 bn_mul4x_mont» PROC PRIVATE 234 bn_mul4x_mont:
232 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 235 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
233 » mov» QWORD PTR[16+rsp],rsi 236 » mov» QWORD[16+rsp],rsi
234 mov rax,rsp 237 mov rax,rsp
235 $L$SEH_begin_bn_mul4x_mont:: 238 $L$SEH_begin_bn_mul4x_mont:
236 mov rdi,rcx 239 mov rdi,rcx
237 mov rsi,rdx 240 mov rsi,rdx
238 mov rdx,r8 241 mov rdx,r8
239 mov rcx,r9 242 mov rcx,r9
240 » mov» r8,QWORD PTR[40+rsp] 243 » mov» r8,QWORD[40+rsp]
241 » mov» r9,QWORD PTR[48+rsp] 244 » mov» r9,QWORD[48+rsp]
242 245
243 246
244 $L$mul4x_enter:: 247 $L$mul4x_enter:
245 push rbx 248 push rbx
246 push rbp 249 push rbp
247 push r12 250 push r12
248 push r13 251 push r13
249 push r14 252 push r14
250 push r15 253 push r15
251 254
252 mov r9d,r9d 255 mov r9d,r9d
253 » lea» r10,QWORD PTR[4+r9] 256 » lea» r10,[4+r9]
254 mov r11,rsp 257 mov r11,rsp
255 neg r10 258 neg r10
256 » lea» rsp,QWORD PTR[r10*8+rsp] 259 » lea» rsp,[r10*8+rsp]
257 and rsp,-1024 260 and rsp,-1024
258 261
259 » mov» QWORD PTR[8+r9*8+rsp],r11 262 » mov» QWORD[8+r9*8+rsp],r11
260 $L$mul4x_body:: 263 $L$mul4x_body:
261 » mov» QWORD PTR[16+r9*8+rsp],rdi 264 » mov» QWORD[16+r9*8+rsp],rdi
262 mov r12,rdx 265 mov r12,rdx
263 » mov» r8,QWORD PTR[r8] 266 » mov» r8,QWORD[r8]
264 » mov» rbx,QWORD PTR[r12] 267 » mov» rbx,QWORD[r12]
265 » mov» rax,QWORD PTR[rsi] 268 » mov» rax,QWORD[rsi]
266 269
267 xor r14,r14 270 xor r14,r14
268 xor r15,r15 271 xor r15,r15
269 272
270 mov rbp,r8 273 mov rbp,r8
271 mul rbx 274 mul rbx
272 mov r10,rax 275 mov r10,rax
273 » mov» rax,QWORD PTR[rcx] 276 » mov» rax,QWORD[rcx]
274 277
275 imul rbp,r10 278 imul rbp,r10
276 mov r11,rdx 279 mov r11,rdx
277 280
278 mul rbp 281 mul rbp
279 add r10,rax 282 add r10,rax
280 » mov» rax,QWORD PTR[8+rsi] 283 » mov» rax,QWORD[8+rsi]
281 adc rdx,0 284 adc rdx,0
282 mov rdi,rdx 285 mov rdi,rdx
283 286
284 mul rbx 287 mul rbx
285 add r11,rax 288 add r11,rax
286 » mov» rax,QWORD PTR[8+rcx] 289 » mov» rax,QWORD[8+rcx]
287 adc rdx,0 290 adc rdx,0
288 mov r10,rdx 291 mov r10,rdx
289 292
290 mul rbp 293 mul rbp
291 add rdi,rax 294 add rdi,rax
292 » mov» rax,QWORD PTR[16+rsi] 295 » mov» rax,QWORD[16+rsi]
293 adc rdx,0 296 adc rdx,0
294 add rdi,r11 297 add rdi,r11
295 » lea» r15,QWORD PTR[4+r15] 298 » lea» r15,[4+r15]
296 adc rdx,0 299 adc rdx,0
297 » mov» QWORD PTR[rsp],rdi 300 » mov» QWORD[rsp],rdi
298 mov r13,rdx 301 mov r13,rdx
299 » jmp» $L$1st4x 302 » jmp» NEAR $L$1st4x
300 ALIGN 16 303 ALIGN 16
301 $L$1st4x:: 304 $L$1st4x:
302 mul rbx 305 mul rbx
303 add r10,rax 306 add r10,rax
304 » mov» rax,QWORD PTR[((-16))+r15*8+rcx] 307 » mov» rax,QWORD[((-16))+r15*8+rcx]
305 adc rdx,0 308 adc rdx,0
306 mov r11,rdx 309 mov r11,rdx
307 310
308 mul rbp 311 mul rbp
309 add r13,rax 312 add r13,rax
310 » mov» rax,QWORD PTR[((-8))+r15*8+rsi] 313 » mov» rax,QWORD[((-8))+r15*8+rsi]
311 adc rdx,0 314 adc rdx,0
312 add r13,r10 315 add r13,r10
313 adc rdx,0 316 adc rdx,0
314 » mov» QWORD PTR[((-24))+r15*8+rsp],r13 317 » mov» QWORD[((-24))+r15*8+rsp],r13
315 mov rdi,rdx 318 mov rdi,rdx
316 319
317 mul rbx 320 mul rbx
318 add r11,rax 321 add r11,rax
319 » mov» rax,QWORD PTR[((-8))+r15*8+rcx] 322 » mov» rax,QWORD[((-8))+r15*8+rcx]
320 adc rdx,0 323 adc rdx,0
321 mov r10,rdx 324 mov r10,rdx
322 325
323 mul rbp 326 mul rbp
324 add rdi,rax 327 add rdi,rax
325 » mov» rax,QWORD PTR[r15*8+rsi] 328 » mov» rax,QWORD[r15*8+rsi]
326 adc rdx,0 329 adc rdx,0
327 add rdi,r11 330 add rdi,r11
328 adc rdx,0 331 adc rdx,0
329 » mov» QWORD PTR[((-16))+r15*8+rsp],rdi 332 » mov» QWORD[((-16))+r15*8+rsp],rdi
330 mov r13,rdx 333 mov r13,rdx
331 334
332 mul rbx 335 mul rbx
333 add r10,rax 336 add r10,rax
334 » mov» rax,QWORD PTR[r15*8+rcx] 337 » mov» rax,QWORD[r15*8+rcx]
335 adc rdx,0 338 adc rdx,0
336 mov r11,rdx 339 mov r11,rdx
337 340
338 mul rbp 341 mul rbp
339 add r13,rax 342 add r13,rax
340 » mov» rax,QWORD PTR[8+r15*8+rsi] 343 » mov» rax,QWORD[8+r15*8+rsi]
341 adc rdx,0 344 adc rdx,0
342 add r13,r10 345 add r13,r10
343 adc rdx,0 346 adc rdx,0
344 » mov» QWORD PTR[((-8))+r15*8+rsp],r13 347 » mov» QWORD[((-8))+r15*8+rsp],r13
345 mov rdi,rdx 348 mov rdi,rdx
346 349
347 mul rbx 350 mul rbx
348 add r11,rax 351 add r11,rax
349 » mov» rax,QWORD PTR[8+r15*8+rcx] 352 » mov» rax,QWORD[8+r15*8+rcx]
350 adc rdx,0 353 adc rdx,0
351 » lea» r15,QWORD PTR[4+r15] 354 » lea» r15,[4+r15]
352 mov r10,rdx 355 mov r10,rdx
353 356
354 mul rbp 357 mul rbp
355 add rdi,rax 358 add rdi,rax
356 » mov» rax,QWORD PTR[((-16))+r15*8+rsi] 359 » mov» rax,QWORD[((-16))+r15*8+rsi]
357 adc rdx,0 360 adc rdx,0
358 add rdi,r11 361 add rdi,r11
359 adc rdx,0 362 adc rdx,0
360 » mov» QWORD PTR[((-32))+r15*8+rsp],rdi 363 » mov» QWORD[((-32))+r15*8+rsp],rdi
361 mov r13,rdx 364 mov r13,rdx
362 cmp r15,r9 365 cmp r15,r9
363 » jb» $L$1st4x 366 » jb» NEAR $L$1st4x
364 367
365 mul rbx 368 mul rbx
366 add r10,rax 369 add r10,rax
367 » mov» rax,QWORD PTR[((-16))+r15*8+rcx] 370 » mov» rax,QWORD[((-16))+r15*8+rcx]
368 adc rdx,0 371 adc rdx,0
369 mov r11,rdx 372 mov r11,rdx
370 373
371 mul rbp 374 mul rbp
372 add r13,rax 375 add r13,rax
373 » mov» rax,QWORD PTR[((-8))+r15*8+rsi] 376 » mov» rax,QWORD[((-8))+r15*8+rsi]
374 adc rdx,0 377 adc rdx,0
375 add r13,r10 378 add r13,r10
376 adc rdx,0 379 adc rdx,0
377 » mov» QWORD PTR[((-24))+r15*8+rsp],r13 380 » mov» QWORD[((-24))+r15*8+rsp],r13
378 mov rdi,rdx 381 mov rdi,rdx
379 382
380 mul rbx 383 mul rbx
381 add r11,rax 384 add r11,rax
382 » mov» rax,QWORD PTR[((-8))+r15*8+rcx] 385 » mov» rax,QWORD[((-8))+r15*8+rcx]
383 adc rdx,0 386 adc rdx,0
384 mov r10,rdx 387 mov r10,rdx
385 388
386 mul rbp 389 mul rbp
387 add rdi,rax 390 add rdi,rax
388 » mov» rax,QWORD PTR[rsi] 391 » mov» rax,QWORD[rsi]
389 adc rdx,0 392 adc rdx,0
390 add rdi,r11 393 add rdi,r11
391 adc rdx,0 394 adc rdx,0
392 » mov» QWORD PTR[((-16))+r15*8+rsp],rdi 395 » mov» QWORD[((-16))+r15*8+rsp],rdi
393 mov r13,rdx 396 mov r13,rdx
394 397
395 xor rdi,rdi 398 xor rdi,rdi
396 add r13,r10 399 add r13,r10
397 adc rdi,0 400 adc rdi,0
398 » mov» QWORD PTR[((-8))+r15*8+rsp],r13 401 » mov» QWORD[((-8))+r15*8+rsp],r13
399 » mov» QWORD PTR[r15*8+rsp],rdi 402 » mov» QWORD[r15*8+rsp],rdi
400 403
401 » lea» r14,QWORD PTR[1+r14] 404 » lea» r14,[1+r14]
402 ALIGN 4 405 ALIGN 4
403 $L$outer4x:: 406 $L$outer4x:
404 » mov» rbx,QWORD PTR[r14*8+r12] 407 » mov» rbx,QWORD[r14*8+r12]
405 xor r15,r15 408 xor r15,r15
406 » mov» r10,QWORD PTR[rsp] 409 » mov» r10,QWORD[rsp]
407 mov rbp,r8 410 mov rbp,r8
408 mul rbx 411 mul rbx
409 add r10,rax 412 add r10,rax
410 » mov» rax,QWORD PTR[rcx] 413 » mov» rax,QWORD[rcx]
411 adc rdx,0 414 adc rdx,0
412 415
413 imul rbp,r10 416 imul rbp,r10
414 mov r11,rdx 417 mov r11,rdx
415 418
416 mul rbp 419 mul rbp
417 add r10,rax 420 add r10,rax
418 » mov» rax,QWORD PTR[8+rsi] 421 » mov» rax,QWORD[8+rsi]
419 » adc» rdx,0 422 » adc» rdx,0
420 » mov» rdi,rdx 423 » mov» rdi,rdx
421 424
422 » mul» rbx 425 » mul» rbx
423 » add» r11,rax 426 » add» r11,rax
424 » mov» rax,QWORD PTR[8+rcx] 427 » mov» rax,QWORD[8+rcx]
425 » adc» rdx,0 428 » adc» rdx,0
426 » add» r11,QWORD PTR[8+rsp] 429 » add» r11,QWORD[8+rsp]
427 » adc» rdx,0 430 » adc» rdx,0
428 » mov» r10,rdx 431 » mov» r10,rdx
429 432
430 » mul» rbp 433 » mul» rbp
431 » add» rdi,rax 434 » add» rdi,rax
432 » mov» rax,QWORD PTR[16+rsi] 435 » mov» rax,QWORD[16+rsi]
433 » adc» rdx,0 436 » adc» rdx,0
434 » add» rdi,r11 437 » add» rdi,r11
435 » lea» r15,QWORD PTR[4+r15] 438 » lea» r15,[4+r15]
436 » adc» rdx,0 439 » adc» rdx,0
437 » mov» QWORD PTR[rsp],rdi 440 » mov» QWORD[rsp],rdi
438 » mov» r13,rdx 441 » mov» r13,rdx
439 » jmp» $L$inner4x 442 » jmp» NEAR $L$inner4x
440 ALIGN 16 443 ALIGN 16
441 $L$inner4x:: 444 $L$inner4x:
442 » mul» rbx 445 » mul» rbx
443 » add» r10,rax 446 » add» r10,rax
444 » mov» rax,QWORD PTR[((-16))+r15*8+rcx] 447 » mov» rax,QWORD[((-16))+r15*8+rcx]
445 » adc» rdx,0 448 » adc» rdx,0
446 » add» r10,QWORD PTR[((-16))+r15*8+rsp] 449 » add» r10,QWORD[((-16))+r15*8+rsp]
447 adc rdx,0 450 adc rdx,0
448 mov r11,rdx 451 mov r11,rdx
449 452
450 mul rbp 453 mul rbp
451 add r13,rax 454 add r13,rax
452 » mov» rax,QWORD PTR[((-8))+r15*8+rsi] 455 » mov» rax,QWORD[((-8))+r15*8+rsi]
453 » adc» rdx,0 456 » adc» rdx,0
454 » add» r13,r10 457 » add» r13,r10
455 » adc» rdx,0 458 » adc» rdx,0
456 » mov» QWORD PTR[((-24))+r15*8+rsp],r13 459 » mov» QWORD[((-24))+r15*8+rsp],r13
457 » mov» rdi,rdx 460 » mov» rdi,rdx
458 461
459 » mul» rbx 462 » mul» rbx
460 » add» r11,rax 463 » add» r11,rax
461 » mov» rax,QWORD PTR[((-8))+r15*8+rcx] 464 » mov» rax,QWORD[((-8))+r15*8+rcx]
462 » adc» rdx,0 465 » adc» rdx,0
463 » add» r11,QWORD PTR[((-8))+r15*8+rsp] 466 » add» r11,QWORD[((-8))+r15*8+rsp]
464 » adc» rdx,0 467 » adc» rdx,0
465 » mov» r10,rdx 468 » mov» r10,rdx
466 469
467 » mul» rbp 470 » mul» rbp
468 » add» rdi,rax 471 » add» rdi,rax
469 » mov» rax,QWORD PTR[r15*8+rsi] 472 » mov» rax,QWORD[r15*8+rsi]
470 » adc» rdx,0 473 » adc» rdx,0
471 » add» rdi,r11 474 » add» rdi,r11
472 » adc» rdx,0 475 » adc» rdx,0
473 » mov» QWORD PTR[((-16))+r15*8+rsp],rdi 476 » mov» QWORD[((-16))+r15*8+rsp],rdi
474 » mov» r13,rdx 477 » mov» r13,rdx
475 478
476 » mul» rbx 479 » mul» rbx
477 » add» r10,rax 480 » add» r10,rax
478 » mov» rax,QWORD PTR[r15*8+rcx] 481 » mov» rax,QWORD[r15*8+rcx]
479 » adc» rdx,0 482 » adc» rdx,0
480 » add» r10,QWORD PTR[r15*8+rsp] 483 » add» r10,QWORD[r15*8+rsp]
481 adc rdx,0 484 adc rdx,0
482 mov r11,rdx 485 mov r11,rdx
483 486
484 mul rbp 487 mul rbp
485 add r13,rax 488 add r13,rax
486 » mov» rax,QWORD PTR[8+r15*8+rsi] 489 » mov» rax,QWORD[8+r15*8+rsi]
487 » adc» rdx,0 490 » adc» rdx,0
488 » add» r13,r10 491 » add» r13,r10
489 » adc» rdx,0 492 » adc» rdx,0
490 » mov» QWORD PTR[((-8))+r15*8+rsp],r13 493 » mov» QWORD[((-8))+r15*8+rsp],r13
491 » mov» rdi,rdx 494 » mov» rdi,rdx
492 495
493 » mul» rbx 496 » mul» rbx
494 » add» r11,rax 497 » add» r11,rax
495 » mov» rax,QWORD PTR[8+r15*8+rcx] 498 » mov» rax,QWORD[8+r15*8+rcx]
496 » adc» rdx,0 499 » adc» rdx,0
497 » add» r11,QWORD PTR[8+r15*8+rsp] 500 » add» r11,QWORD[8+r15*8+rsp]
498 » adc» rdx,0 501 » adc» rdx,0
499 » lea» r15,QWORD PTR[4+r15] 502 » lea» r15,[4+r15]
500 » mov» r10,rdx 503 » mov» r10,rdx
501 504
502 » mul» rbp 505 » mul» rbp
503 » add» rdi,rax 506 » add» rdi,rax
504 » mov» rax,QWORD PTR[((-16))+r15*8+rsi] 507 » mov» rax,QWORD[((-16))+r15*8+rsi]
505 » adc» rdx,0 508 » adc» rdx,0
506 » add» rdi,r11 509 » add» rdi,r11
507 » adc» rdx,0 510 » adc» rdx,0
508 » mov» QWORD PTR[((-32))+r15*8+rsp],rdi 511 » mov» QWORD[((-32))+r15*8+rsp],rdi
509 mov r13,rdx 512 mov r13,rdx
510 cmp r15,r9 513 cmp r15,r9
511 » jb» $L$inner4x 514 » jb» NEAR $L$inner4x
512 515
513 » mul» rbx 516 » mul» rbx
514 » add» r10,rax 517 » add» r10,rax
515 » mov» rax,QWORD PTR[((-16))+r15*8+rcx] 518 » mov» rax,QWORD[((-16))+r15*8+rcx]
516 » adc» rdx,0 519 » adc» rdx,0
517 » add» r10,QWORD PTR[((-16))+r15*8+rsp] 520 » add» r10,QWORD[((-16))+r15*8+rsp]
518 adc rdx,0 521 adc rdx,0
519 mov r11,rdx 522 mov r11,rdx
520 523
521 mul rbp 524 mul rbp
522 add r13,rax 525 add r13,rax
523 » mov» rax,QWORD PTR[((-8))+r15*8+rsi] 526 » mov» rax,QWORD[((-8))+r15*8+rsi]
524 » adc» rdx,0 527 » adc» rdx,0
525 » add» r13,r10 528 » add» r13,r10
526 » adc» rdx,0 529 » adc» rdx,0
527 » mov» QWORD PTR[((-24))+r15*8+rsp],r13 530 » mov» QWORD[((-24))+r15*8+rsp],r13
528 » mov» rdi,rdx 531 » mov» rdi,rdx
529 532
530 » mul» rbx 533 » mul» rbx
531 » add» r11,rax 534 » add» r11,rax
532 » mov» rax,QWORD PTR[((-8))+r15*8+rcx] 535 » mov» rax,QWORD[((-8))+r15*8+rcx]
533 » adc» rdx,0 536 » adc» rdx,0
534 » add» r11,QWORD PTR[((-8))+r15*8+rsp] 537 » add» r11,QWORD[((-8))+r15*8+rsp]
535 » adc» rdx,0 538 » adc» rdx,0
536 » lea» r14,QWORD PTR[1+r14] 539 » lea» r14,[1+r14]
537 » mov» r10,rdx 540 » mov» r10,rdx
538 541
539 » mul» rbp 542 » mul» rbp
540 » add» rdi,rax 543 » add» rdi,rax
541 » mov» rax,QWORD PTR[rsi] 544 » mov» rax,QWORD[rsi]
542 » adc» rdx,0 545 » adc» rdx,0
543 » add» rdi,r11 546 » add» rdi,r11
544 » adc» rdx,0 547 » adc» rdx,0
545 » mov» QWORD PTR[((-16))+r15*8+rsp],rdi 548 » mov» QWORD[((-16))+r15*8+rsp],rdi
546 mov r13,rdx 549 mov r13,rdx
547 550
548 xor rdi,rdi 551 xor rdi,rdi
549 add r13,r10 552 add r13,r10
550 adc rdi,0 553 adc rdi,0
551 » add» r13,QWORD PTR[r9*8+rsp] 554 » add» r13,QWORD[r9*8+rsp]
552 adc rdi,0 555 adc rdi,0
553 » mov» QWORD PTR[((-8))+r15*8+rsp],r13 556 » mov» QWORD[((-8))+r15*8+rsp],r13
554 » mov» QWORD PTR[r15*8+rsp],rdi 557 » mov» QWORD[r15*8+rsp],rdi
555 558
556 cmp r14,r9 559 cmp r14,r9
557 » jb» $L$outer4x 560 » jb» NEAR $L$outer4x
558 » mov» rdi,QWORD PTR[16+r9*8+rsp] 561 » mov» rdi,QWORD[16+r9*8+rsp]
559 » mov» rax,QWORD PTR[rsp] 562 » mov» rax,QWORD[rsp]
560 » mov» rdx,QWORD PTR[8+rsp] 563 » mov» rdx,QWORD[8+rsp]
561 shr r9,2 564 shr r9,2
562 » lea» rsi,QWORD PTR[rsp] 565 » lea» rsi,[rsp]
563 xor r14,r14 566 xor r14,r14
564 567
565 » sub» rax,QWORD PTR[rcx] 568 » sub» rax,QWORD[rcx]
566 » mov» rbx,QWORD PTR[16+rsi] 569 » mov» rbx,QWORD[16+rsi]
567 » mov» rbp,QWORD PTR[24+rsi] 570 » mov» rbp,QWORD[24+rsi]
568 » sbb» rdx,QWORD PTR[8+rcx] 571 » sbb» rdx,QWORD[8+rcx]
569 » lea» r15,QWORD PTR[((-1))+r9] 572 » lea» r15,[((-1))+r9]
570 » jmp» $L$sub4x 573 » jmp» NEAR $L$sub4x
571 ALIGN 16 574 ALIGN 16
572 $L$sub4x:: 575 $L$sub4x:
573 » mov» QWORD PTR[r14*8+rdi],rax 576 » mov» QWORD[r14*8+rdi],rax
574 » mov» QWORD PTR[8+r14*8+rdi],rdx 577 » mov» QWORD[8+r14*8+rdi],rdx
575 » sbb» rbx,QWORD PTR[16+r14*8+rcx] 578 » sbb» rbx,QWORD[16+r14*8+rcx]
576 » mov» rax,QWORD PTR[32+r14*8+rsi] 579 » mov» rax,QWORD[32+r14*8+rsi]
577 » mov» rdx,QWORD PTR[40+r14*8+rsi] 580 » mov» rdx,QWORD[40+r14*8+rsi]
578 » sbb» rbp,QWORD PTR[24+r14*8+rcx] 581 » sbb» rbp,QWORD[24+r14*8+rcx]
579 » mov» QWORD PTR[16+r14*8+rdi],rbx 582 » mov» QWORD[16+r14*8+rdi],rbx
580 » mov» QWORD PTR[24+r14*8+rdi],rbp 583 » mov» QWORD[24+r14*8+rdi],rbp
581 » sbb» rax,QWORD PTR[32+r14*8+rcx] 584 » sbb» rax,QWORD[32+r14*8+rcx]
582 » mov» rbx,QWORD PTR[48+r14*8+rsi] 585 » mov» rbx,QWORD[48+r14*8+rsi]
583 » mov» rbp,QWORD PTR[56+r14*8+rsi] 586 » mov» rbp,QWORD[56+r14*8+rsi]
584 » sbb» rdx,QWORD PTR[40+r14*8+rcx] 587 » sbb» rdx,QWORD[40+r14*8+rcx]
585 » lea» r14,QWORD PTR[4+r14] 588 » lea» r14,[4+r14]
586 dec r15 589 dec r15
587 » jnz» $L$sub4x 590 » jnz» NEAR $L$sub4x
588 591
589 » mov» QWORD PTR[r14*8+rdi],rax 592 » mov» QWORD[r14*8+rdi],rax
590 » mov» rax,QWORD PTR[32+r14*8+rsi] 593 » mov» rax,QWORD[32+r14*8+rsi]
591 » sbb» rbx,QWORD PTR[16+r14*8+rcx] 594 » sbb» rbx,QWORD[16+r14*8+rcx]
592 » mov» QWORD PTR[8+r14*8+rdi],rdx 595 » mov» QWORD[8+r14*8+rdi],rdx
593 » sbb» rbp,QWORD PTR[24+r14*8+rcx] 596 » sbb» rbp,QWORD[24+r14*8+rcx]
594 » mov» QWORD PTR[16+r14*8+rdi],rbx 597 » mov» QWORD[16+r14*8+rdi],rbx
595 598
596 sbb rax,0 599 sbb rax,0
597 DB 66h, 48h, 0fh, 6eh, 0c0h 600 DB 66h, 48h, 0fh, 6eh, 0c0h
598 punpcklqdq xmm0,xmm0 601 punpcklqdq xmm0,xmm0
599 » mov» QWORD PTR[24+r14*8+rdi],rbp 602 » mov» QWORD[24+r14*8+rdi],rbp
600 xor r14,r14 603 xor r14,r14
601 604
602 mov r15,r9 605 mov r15,r9
603 pxor xmm5,xmm5 606 pxor xmm5,xmm5
604 » jmp» $L$copy4x 607 » jmp» NEAR $L$copy4x
605 ALIGN 16 608 ALIGN 16
606 $L$copy4x:: 609 $L$copy4x:
607 » movdqu» xmm2,XMMWORD PTR[r14*1+rsp] 610 » movdqu» xmm2,XMMWORD[r14*1+rsp]
608 » movdqu» xmm4,XMMWORD PTR[16+r14*1+rsp] 611 » movdqu» xmm4,XMMWORD[16+r14*1+rsp]
609 » movdqu» xmm1,XMMWORD PTR[r14*1+rdi] 612 » movdqu» xmm1,XMMWORD[r14*1+rdi]
610 » movdqu» xmm3,XMMWORD PTR[16+r14*1+rdi] 613 » movdqu» xmm3,XMMWORD[16+r14*1+rdi]
611 pxor xmm2,xmm1 614 pxor xmm2,xmm1
612 pxor xmm4,xmm3 615 pxor xmm4,xmm3
613 pand xmm2,xmm0 616 pand xmm2,xmm0
614 pand xmm4,xmm0 617 pand xmm4,xmm0
615 pxor xmm2,xmm1 618 pxor xmm2,xmm1
616 pxor xmm4,xmm3 619 pxor xmm4,xmm3
617 » movdqu» XMMWORD PTR[r14*1+rdi],xmm2 620 » movdqu» XMMWORD[r14*1+rdi],xmm2
618 » movdqu» XMMWORD PTR[16+r14*1+rdi],xmm4 621 » movdqu» XMMWORD[16+r14*1+rdi],xmm4
619 » movdqa» XMMWORD PTR[r14*1+rsp],xmm5 622 » movdqa» XMMWORD[r14*1+rsp],xmm5
620 » movdqa» XMMWORD PTR[16+r14*1+rsp],xmm5 623 » movdqa» XMMWORD[16+r14*1+rsp],xmm5
621 624
622 » lea» r14,QWORD PTR[32+r14] 625 » lea» r14,[32+r14]
623 dec r15 626 dec r15
624 » jnz» $L$copy4x 627 » jnz» NEAR $L$copy4x
625 628
626 shl r9,2 629 shl r9,2
627 » mov» rsi,QWORD PTR[8+r9*8+rsp] 630 » mov» rsi,QWORD[8+r9*8+rsp]
628 mov rax,1 631 mov rax,1
629 » mov» r15,QWORD PTR[rsi] 632 » mov» r15,QWORD[rsi]
630 » mov» r14,QWORD PTR[8+rsi] 633 » mov» r14,QWORD[8+rsi]
631 » mov» r13,QWORD PTR[16+rsi] 634 » mov» r13,QWORD[16+rsi]
632 » mov» r12,QWORD PTR[24+rsi] 635 » mov» r12,QWORD[24+rsi]
633 » mov» rbp,QWORD PTR[32+rsi] 636 » mov» rbp,QWORD[32+rsi]
634 » mov» rbx,QWORD PTR[40+rsi] 637 » mov» rbx,QWORD[40+rsi]
635 » lea» rsp,QWORD PTR[48+rsi] 638 » lea» rsp,[48+rsi]
636 $L$mul4x_epilogue:: 639 $L$mul4x_epilogue:
637 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 640 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
638 » mov» rsi,QWORD PTR[16+rsp] 641 » mov» rsi,QWORD[16+rsp]
639 DB 0F3h,0C3h ;repret 642 DB 0F3h,0C3h ;repret
640 $L$SEH_end_bn_mul4x_mont:: 643 $L$SEH_end_bn_mul4x_mont:
641 bn_mul4x_mont» ENDP 644 EXTERN» bn_sqr8x_internal
642 EXTERN» bn_sqr8x_internal:NEAR
643 645
644 646
645 ALIGN 32 647 ALIGN 32
646 bn_sqr8x_mont» PROC PRIVATE 648 bn_sqr8x_mont:
647 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 649 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
648 » mov» QWORD PTR[16+rsp],rsi 650 » mov» QWORD[16+rsp],rsi
649 mov rax,rsp 651 mov rax,rsp
650 $L$SEH_begin_bn_sqr8x_mont:: 652 $L$SEH_begin_bn_sqr8x_mont:
651 mov rdi,rcx 653 mov rdi,rcx
652 mov rsi,rdx 654 mov rsi,rdx
653 mov rdx,r8 655 mov rdx,r8
654 mov rcx,r9 656 mov rcx,r9
655 » mov» r8,QWORD PTR[40+rsp] 657 » mov» r8,QWORD[40+rsp]
656 » mov» r9,QWORD PTR[48+rsp] 658 » mov» r9,QWORD[48+rsp]
657 659
658 660
659 $L$sqr8x_enter:: 661 $L$sqr8x_enter:
660 mov rax,rsp 662 mov rax,rsp
661 push rbx 663 push rbx
662 push rbp 664 push rbp
663 push r12 665 push r12
664 push r13 666 push r13
665 push r14 667 push r14
666 push r15 668 push r15
667 669
668 mov r10d,r9d 670 mov r10d,r9d
669 shl r9d,3 671 shl r9d,3
670 shl r10,3+2 672 shl r10,3+2
671 neg r9 673 neg r9
672 674
673 675
674 676
675 677
676 678
677 679
678 » lea» r11,QWORD PTR[((-64))+r9*4+rsp] 680 » lea» r11,[((-64))+r9*4+rsp]
679 » mov» r8,QWORD PTR[r8] 681 » mov» r8,QWORD[r8]
680 sub r11,rsi 682 sub r11,rsi
681 and r11,4095 683 and r11,4095
682 cmp r10,r11 684 cmp r10,r11
683 » jb» $L$sqr8x_sp_alt 685 » jb» NEAR $L$sqr8x_sp_alt
684 sub rsp,r11 686 sub rsp,r11
685 » lea» rsp,QWORD PTR[((-64))+r9*4+rsp] 687 » lea» rsp,[((-64))+r9*4+rsp]
686 » jmp» $L$sqr8x_sp_done 688 » jmp» NEAR $L$sqr8x_sp_done
687 689
688 ALIGN 32 690 ALIGN 32
689 $L$sqr8x_sp_alt:: 691 $L$sqr8x_sp_alt:
690 » lea» r10,QWORD PTR[((4096-64))+r9*4] 692 » lea» r10,[((4096-64))+r9*4]
691 » lea» rsp,QWORD PTR[((-64))+r9*4+rsp] 693 » lea» rsp,[((-64))+r9*4+rsp]
692 sub r11,r10 694 sub r11,r10
693 mov r10,0 695 mov r10,0
694 cmovc r11,r10 696 cmovc r11,r10
695 sub rsp,r11 697 sub rsp,r11
696 $L$sqr8x_sp_done:: 698 $L$sqr8x_sp_done:
697 and rsp,-64 699 and rsp,-64
698 mov r10,r9 700 mov r10,r9
699 neg r9 701 neg r9
700 702
701 » lea» r11,QWORD PTR[64+r9*2+rsp] 703 » lea» r11,[64+r9*2+rsp]
702 » mov» QWORD PTR[32+rsp],r8 704 » mov» QWORD[32+rsp],r8
703 » mov» QWORD PTR[40+rsp],rax 705 » mov» QWORD[40+rsp],rax
704 $L$sqr8x_body:: 706 $L$sqr8x_body:
705 707
706 mov rbp,r9 708 mov rbp,r9
707 DB 102,73,15,110,211 709 DB 102,73,15,110,211
708 shr rbp,3+2 710 shr rbp,3+2
709 » mov» eax,DWORD PTR[((OPENSSL_ia32cap_P+8))] 711 » mov» eax,DWORD[((OPENSSL_ia32cap_P+8))]
710 » jmp» $L$sqr8x_copy_n 712 » jmp» NEAR $L$sqr8x_copy_n
711 713
712 ALIGN 32 714 ALIGN 32
713 $L$sqr8x_copy_n:: 715 $L$sqr8x_copy_n:
714 » movq» xmm0,QWORD PTR[rcx] 716 » movq» xmm0,QWORD[rcx]
715 » movq» xmm1,QWORD PTR[8+rcx] 717 » movq» xmm1,QWORD[8+rcx]
716 » movq» xmm3,QWORD PTR[16+rcx] 718 » movq» xmm3,QWORD[16+rcx]
717 » movq» xmm4,QWORD PTR[24+rcx] 719 » movq» xmm4,QWORD[24+rcx]
718 » lea» rcx,QWORD PTR[32+rcx] 720 » lea» rcx,[32+rcx]
719 » movdqa» XMMWORD PTR[r11],xmm0 721 » movdqa» XMMWORD[r11],xmm0
720 » movdqa» XMMWORD PTR[16+r11],xmm1 722 » movdqa» XMMWORD[16+r11],xmm1
721 » movdqa» XMMWORD PTR[32+r11],xmm3 723 » movdqa» XMMWORD[32+r11],xmm3
722 » movdqa» XMMWORD PTR[48+r11],xmm4 724 » movdqa» XMMWORD[48+r11],xmm4
723 » lea» r11,QWORD PTR[64+r11] 725 » lea» r11,[64+r11]
724 dec rbp 726 dec rbp
725 » jnz» $L$sqr8x_copy_n 727 » jnz» NEAR $L$sqr8x_copy_n
726 728
727 pxor xmm0,xmm0 729 pxor xmm0,xmm0
728 DB 102,72,15,110,207 730 DB 102,72,15,110,207
729 DB 102,73,15,110,218 731 DB 102,73,15,110,218
730 call bn_sqr8x_internal 732 call bn_sqr8x_internal
731 733
732 pxor xmm0,xmm0 734 pxor xmm0,xmm0
733 » lea» rax,QWORD PTR[48+rsp] 735 » lea» rax,[48+rsp]
734 » lea» rdx,QWORD PTR[64+r9*2+rsp] 736 » lea» rdx,[64+r9*2+rsp]
735 shr r9,3+2 737 shr r9,3+2
736 » mov» rsi,QWORD PTR[40+rsp] 738 » mov» rsi,QWORD[40+rsp]
737 » jmp» $L$sqr8x_zero 739 » jmp» NEAR $L$sqr8x_zero
738 740
739 ALIGN 32 741 ALIGN 32
740 $L$sqr8x_zero:: 742 $L$sqr8x_zero:
741 » movdqa» XMMWORD PTR[rax],xmm0 743 » movdqa» XMMWORD[rax],xmm0
742 » movdqa» XMMWORD PTR[16+rax],xmm0 744 » movdqa» XMMWORD[16+rax],xmm0
743 » movdqa» XMMWORD PTR[32+rax],xmm0 745 » movdqa» XMMWORD[32+rax],xmm0
744 » movdqa» XMMWORD PTR[48+rax],xmm0 746 » movdqa» XMMWORD[48+rax],xmm0
745 » lea» rax,QWORD PTR[64+rax] 747 » lea» rax,[64+rax]
746 » movdqa» XMMWORD PTR[rdx],xmm0 748 » movdqa» XMMWORD[rdx],xmm0
747 » movdqa» XMMWORD PTR[16+rdx],xmm0 749 » movdqa» XMMWORD[16+rdx],xmm0
748 » movdqa» XMMWORD PTR[32+rdx],xmm0 750 » movdqa» XMMWORD[32+rdx],xmm0
749 » movdqa» XMMWORD PTR[48+rdx],xmm0 751 » movdqa» XMMWORD[48+rdx],xmm0
750 » lea» rdx,QWORD PTR[64+rdx] 752 » lea» rdx,[64+rdx]
751 dec r9 753 dec r9
752 » jnz» $L$sqr8x_zero 754 » jnz» NEAR $L$sqr8x_zero
753 755
754 mov rax,1 756 mov rax,1
755 » mov» r15,QWORD PTR[((-48))+rsi] 757 » mov» r15,QWORD[((-48))+rsi]
756 » mov» r14,QWORD PTR[((-40))+rsi] 758 » mov» r14,QWORD[((-40))+rsi]
757 » mov» r13,QWORD PTR[((-32))+rsi] 759 » mov» r13,QWORD[((-32))+rsi]
758 » mov» r12,QWORD PTR[((-24))+rsi] 760 » mov» r12,QWORD[((-24))+rsi]
759 » mov» rbp,QWORD PTR[((-16))+rsi] 761 » mov» rbp,QWORD[((-16))+rsi]
760 » mov» rbx,QWORD PTR[((-8))+rsi] 762 » mov» rbx,QWORD[((-8))+rsi]
761 » lea» rsp,QWORD PTR[rsi] 763 » lea» rsp,[rsi]
762 $L$sqr8x_epilogue:: 764 $L$sqr8x_epilogue:
763 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 765 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
764 » mov» rsi,QWORD PTR[16+rsp] 766 » mov» rsi,QWORD[16+rsp]
765 DB 0F3h,0C3h ;repret 767 DB 0F3h,0C3h ;repret
766 $L$SEH_end_bn_sqr8x_mont:: 768 $L$SEH_end_bn_sqr8x_mont:
767 bn_sqr8x_mont» ENDP
768 DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 769 DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
769 DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 770 DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
770 DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83 771 DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83
771 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 772 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
772 DB 115,108,46,111,114,103,62,0 773 DB 115,108,46,111,114,103,62,0
773 ALIGN 16 774 ALIGN 16
774 EXTERN» __imp_RtlVirtualUnwind:NEAR 775 EXTERN» __imp_RtlVirtualUnwind
775 776
776 ALIGN 16 777 ALIGN 16
777 mul_handler» PROC PRIVATE 778 mul_handler:
778 push rsi 779 push rsi
779 push rdi 780 push rdi
780 push rbx 781 push rbx
781 push rbp 782 push rbp
782 push r12 783 push r12
783 push r13 784 push r13
784 push r14 785 push r14
785 push r15 786 push r15
786 pushfq 787 pushfq
787 sub rsp,64 788 sub rsp,64
788 789
789 » mov» rax,QWORD PTR[120+r8] 790 » mov» rax,QWORD[120+r8]
790 » mov» rbx,QWORD PTR[248+r8] 791 » mov» rbx,QWORD[248+r8]
791 792
792 » mov» rsi,QWORD PTR[8+r9] 793 » mov» rsi,QWORD[8+r9]
793 » mov» r11,QWORD PTR[56+r9] 794 » mov» r11,QWORD[56+r9]
794 795
795 » mov» r10d,DWORD PTR[r11] 796 » mov» r10d,DWORD[r11]
796 » lea» r10,QWORD PTR[r10*1+rsi] 797 » lea» r10,[r10*1+rsi]
797 cmp rbx,r10 798 cmp rbx,r10
798 » jb» $L$common_seh_tail 799 » jb» NEAR $L$common_seh_tail
799 800
800 » mov» rax,QWORD PTR[152+r8] 801 » mov» rax,QWORD[152+r8]
801 802
802 » mov» r10d,DWORD PTR[4+r11] 803 » mov» r10d,DWORD[4+r11]
803 » lea» r10,QWORD PTR[r10*1+rsi] 804 » lea» r10,[r10*1+rsi]
804 cmp rbx,r10 805 cmp rbx,r10
805 » jae» $L$common_seh_tail 806 » jae» NEAR $L$common_seh_tail
806 807
807 » mov» r10,QWORD PTR[192+r8] 808 » mov» r10,QWORD[192+r8]
808 » mov» rax,QWORD PTR[8+r10*8+rax] 809 » mov» rax,QWORD[8+r10*8+rax]
809 » lea» rax,QWORD PTR[48+rax] 810 » lea» rax,[48+rax]
810 811
811 » mov» rbx,QWORD PTR[((-8))+rax] 812 » mov» rbx,QWORD[((-8))+rax]
812 » mov» rbp,QWORD PTR[((-16))+rax] 813 » mov» rbp,QWORD[((-16))+rax]
813 » mov» r12,QWORD PTR[((-24))+rax] 814 » mov» r12,QWORD[((-24))+rax]
814 » mov» r13,QWORD PTR[((-32))+rax] 815 » mov» r13,QWORD[((-32))+rax]
815 » mov» r14,QWORD PTR[((-40))+rax] 816 » mov» r14,QWORD[((-40))+rax]
816 » mov» r15,QWORD PTR[((-48))+rax] 817 » mov» r15,QWORD[((-48))+rax]
817 » mov» QWORD PTR[144+r8],rbx 818 » mov» QWORD[144+r8],rbx
818 » mov» QWORD PTR[160+r8],rbp 819 » mov» QWORD[160+r8],rbp
819 » mov» QWORD PTR[216+r8],r12 820 » mov» QWORD[216+r8],r12
820 » mov» QWORD PTR[224+r8],r13 821 » mov» QWORD[224+r8],r13
821 » mov» QWORD PTR[232+r8],r14 822 » mov» QWORD[232+r8],r14
822 » mov» QWORD PTR[240+r8],r15 823 » mov» QWORD[240+r8],r15
823 824
824 » jmp» $L$common_seh_tail 825 » jmp» NEAR $L$common_seh_tail
825 mul_handler» ENDP 826
826 827
827 828
828 ALIGN 16 829 ALIGN 16
829 sqr_handler» PROC PRIVATE 830 sqr_handler:
830 push rsi 831 push rsi
831 push rdi 832 push rdi
832 push rbx 833 push rbx
833 push rbp 834 push rbp
834 push r12 835 push r12
835 push r13 836 push r13
836 push r14 837 push r14
837 push r15 838 push r15
838 pushfq 839 pushfq
839 sub rsp,64 840 sub rsp,64
840 841
841 » mov» rax,QWORD PTR[120+r8] 842 » mov» rax,QWORD[120+r8]
842 » mov» rbx,QWORD PTR[248+r8] 843 » mov» rbx,QWORD[248+r8]
843 844
844 » mov» rsi,QWORD PTR[8+r9] 845 » mov» rsi,QWORD[8+r9]
845 » mov» r11,QWORD PTR[56+r9] 846 » mov» r11,QWORD[56+r9]
846 847
847 » mov» r10d,DWORD PTR[r11] 848 » mov» r10d,DWORD[r11]
848 » lea» r10,QWORD PTR[r10*1+rsi] 849 » lea» r10,[r10*1+rsi]
849 cmp rbx,r10 850 cmp rbx,r10
850 » jb» $L$common_seh_tail 851 » jb» NEAR $L$common_seh_tail
851 852
852 » mov» rax,QWORD PTR[152+r8] 853 » mov» rax,QWORD[152+r8]
853 854
854 » mov» r10d,DWORD PTR[4+r11] 855 » mov» r10d,DWORD[4+r11]
855 » lea» r10,QWORD PTR[r10*1+rsi] 856 » lea» r10,[r10*1+rsi]
856 cmp rbx,r10 857 cmp rbx,r10
857 » jae» $L$common_seh_tail 858 » jae» NEAR $L$common_seh_tail
858 859
859 » mov» rax,QWORD PTR[40+rax] 860 » mov» rax,QWORD[40+rax]
860 861
861 » mov» rbx,QWORD PTR[((-8))+rax] 862 » mov» rbx,QWORD[((-8))+rax]
862 » mov» rbp,QWORD PTR[((-16))+rax] 863 » mov» rbp,QWORD[((-16))+rax]
863 » mov» r12,QWORD PTR[((-24))+rax] 864 » mov» r12,QWORD[((-24))+rax]
864 » mov» r13,QWORD PTR[((-32))+rax] 865 » mov» r13,QWORD[((-32))+rax]
865 » mov» r14,QWORD PTR[((-40))+rax] 866 » mov» r14,QWORD[((-40))+rax]
866 » mov» r15,QWORD PTR[((-48))+rax] 867 » mov» r15,QWORD[((-48))+rax]
867 » mov» QWORD PTR[144+r8],rbx 868 » mov» QWORD[144+r8],rbx
868 » mov» QWORD PTR[160+r8],rbp 869 » mov» QWORD[160+r8],rbp
869 » mov» QWORD PTR[216+r8],r12 870 » mov» QWORD[216+r8],r12
870 » mov» QWORD PTR[224+r8],r13 871 » mov» QWORD[224+r8],r13
871 » mov» QWORD PTR[232+r8],r14 872 » mov» QWORD[232+r8],r14
872 » mov» QWORD PTR[240+r8],r15 873 » mov» QWORD[240+r8],r15
873 874
874 $L$common_seh_tail:: 875 $L$common_seh_tail:
875 » mov» rdi,QWORD PTR[8+rax] 876 » mov» rdi,QWORD[8+rax]
876 » mov» rsi,QWORD PTR[16+rax] 877 » mov» rsi,QWORD[16+rax]
877 » mov» QWORD PTR[152+r8],rax 878 » mov» QWORD[152+r8],rax
878 » mov» QWORD PTR[168+r8],rsi 879 » mov» QWORD[168+r8],rsi
879 » mov» QWORD PTR[176+r8],rdi 880 » mov» QWORD[176+r8],rdi
880 881
881 » mov» rdi,QWORD PTR[40+r9] 882 » mov» rdi,QWORD[40+r9]
882 mov rsi,r8 883 mov rsi,r8
883 mov ecx,154 884 mov ecx,154
884 » DD» 0a548f3fch 885 » DD» 0xa548f3fc
885 886
886 mov rsi,r9 887 mov rsi,r9
887 xor rcx,rcx 888 xor rcx,rcx
888 » mov» rdx,QWORD PTR[8+rsi] 889 » mov» rdx,QWORD[8+rsi]
889 » mov» r8,QWORD PTR[rsi] 890 » mov» r8,QWORD[rsi]
890 » mov» r9,QWORD PTR[16+rsi] 891 » mov» r9,QWORD[16+rsi]
891 » mov» r10,QWORD PTR[40+rsi] 892 » mov» r10,QWORD[40+rsi]
892 » lea» r11,QWORD PTR[56+rsi] 893 » lea» r11,[56+rsi]
893 » lea» r12,QWORD PTR[24+rsi] 894 » lea» r12,[24+rsi]
894 » mov» QWORD PTR[32+rsp],r10 895 » mov» QWORD[32+rsp],r10
895 » mov» QWORD PTR[40+rsp],r11 896 » mov» QWORD[40+rsp],r11
896 » mov» QWORD PTR[48+rsp],r12 897 » mov» QWORD[48+rsp],r12
897 » mov» QWORD PTR[56+rsp],rcx 898 » mov» QWORD[56+rsp],rcx
898 » call» QWORD PTR[__imp_RtlVirtualUnwind] 899 » call» QWORD[__imp_RtlVirtualUnwind]
899 900
900 mov eax,1 901 mov eax,1
901 add rsp,64 902 add rsp,64
902 popfq 903 popfq
903 pop r15 904 pop r15
904 pop r14 905 pop r14
905 pop r13 906 pop r13
906 pop r12 907 pop r12
907 pop rbp 908 pop rbp
908 pop rbx 909 pop rbx
909 pop rdi 910 pop rdi
910 pop rsi 911 pop rsi
911 DB 0F3h,0C3h ;repret 912 DB 0F3h,0C3h ;repret
912 sqr_handler ENDP
913 913
914 .text$» ENDS 914
915 .pdata» SEGMENT READONLY ALIGN(4) 915 section».pdata rdata align=4
916 ALIGN 4 916 ALIGN 4
917 » DD» imagerel $L$SEH_begin_bn_mul_mont 917 » DD» $L$SEH_begin_bn_mul_mont wrt ..imagebase
918 » DD» imagerel $L$SEH_end_bn_mul_mont 918 » DD» $L$SEH_end_bn_mul_mont wrt ..imagebase
919 » DD» imagerel $L$SEH_info_bn_mul_mont 919 » DD» $L$SEH_info_bn_mul_mont wrt ..imagebase
920 920
921 » DD» imagerel $L$SEH_begin_bn_mul4x_mont 921 » DD» $L$SEH_begin_bn_mul4x_mont wrt ..imagebase
922 » DD» imagerel $L$SEH_end_bn_mul4x_mont 922 » DD» $L$SEH_end_bn_mul4x_mont wrt ..imagebase
923 » DD» imagerel $L$SEH_info_bn_mul4x_mont 923 » DD» $L$SEH_info_bn_mul4x_mont wrt ..imagebase
924 924
925 » DD» imagerel $L$SEH_begin_bn_sqr8x_mont 925 » DD» $L$SEH_begin_bn_sqr8x_mont wrt ..imagebase
926 » DD» imagerel $L$SEH_end_bn_sqr8x_mont 926 » DD» $L$SEH_end_bn_sqr8x_mont wrt ..imagebase
927 » DD» imagerel $L$SEH_info_bn_sqr8x_mont 927 » DD» $L$SEH_info_bn_sqr8x_mont wrt ..imagebase
928 .pdata» ENDS 928 section».xdata rdata align=8
929 .xdata» SEGMENT READONLY ALIGN(8)
930 ALIGN 8 929 ALIGN 8
931 $L$SEH_info_bn_mul_mont:: 930 $L$SEH_info_bn_mul_mont:
932 DB 9,0,0,0 931 DB 9,0,0,0
933 » DD» imagerel mul_handler 932 » DD» mul_handler wrt ..imagebase
934 » DD» imagerel $L$mul_body,imagerel $L$mul_epilogue 933 » DD» $L$mul_body wrt ..imagebase,$L$mul_epilogue wrt ..imagebase
935 $L$SEH_info_bn_mul4x_mont:: 934 $L$SEH_info_bn_mul4x_mont:
936 DB 9,0,0,0 935 DB 9,0,0,0
937 » DD» imagerel mul_handler 936 » DD» mul_handler wrt ..imagebase
938 » DD» imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue 937 » DD» $L$mul4x_body wrt ..imagebase,$L$mul4x_epilogue wrt ..imagebase
939 $L$SEH_info_bn_sqr8x_mont:: 938 $L$SEH_info_bn_sqr8x_mont:
940 DB 9,0,0,0 939 DB 9,0,0,0
941 » DD» imagerel sqr_handler 940 » DD» sqr_handler wrt ..imagebase
942 » DD» imagerel $L$sqr8x_body,imagerel $L$sqr8x_epilogue 941 » DD» $L$sqr8x_body wrt ..imagebase,$L$sqr8x_epilogue wrt ..imagebase
943
944 .xdata» ENDS
945 END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698