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