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