1#include <machine/asm.h> 2.text 3 4.globl rsaz_1024_sqr_avx2 5.type rsaz_1024_sqr_avx2,@function 6.align 64 7rsaz_1024_sqr_avx2: 8 leaq (%rsp),%rax 9 pushq %rbx 10 pushq %rbp 11 pushq %r12 12 pushq %r13 13 pushq %r14 14 pushq %r15 15 vzeroupper 16 movq %rax,%rbp 17 movq %rdx,%r13 18 subq $832,%rsp 19 movq %r13,%r15 20 subq $-128,%rdi 21 subq $-128,%rsi 22 subq $-128,%r13 23 24 andq $4095,%r15 25 addq $320,%r15 26 shrq $12,%r15 27 vpxor %ymm9,%ymm9,%ymm9 28 jz .Lsqr_1024_no_n_copy 29 30 31 32 33 34 subq $320,%rsp 35 vmovdqu 0-128(%r13),%ymm0 36 andq $-2048,%rsp 37 vmovdqu 32-128(%r13),%ymm1 38 vmovdqu 64-128(%r13),%ymm2 39 vmovdqu 96-128(%r13),%ymm3 40 vmovdqu 128-128(%r13),%ymm4 41 vmovdqu 160-128(%r13),%ymm5 42 vmovdqu 192-128(%r13),%ymm6 43 vmovdqu 224-128(%r13),%ymm7 44 vmovdqu 256-128(%r13),%ymm8 45 leaq 832+128(%rsp),%r13 46 vmovdqu %ymm0,0-128(%r13) 47 vmovdqu %ymm1,32-128(%r13) 48 vmovdqu %ymm2,64-128(%r13) 49 vmovdqu %ymm3,96-128(%r13) 50 vmovdqu %ymm4,128-128(%r13) 51 vmovdqu %ymm5,160-128(%r13) 52 vmovdqu %ymm6,192-128(%r13) 53 vmovdqu %ymm7,224-128(%r13) 54 vmovdqu %ymm8,256-128(%r13) 55 vmovdqu %ymm9,288-128(%r13) 56 57.Lsqr_1024_no_n_copy: 58 andq $-1024,%rsp 59 60 vmovdqu 32-128(%rsi),%ymm1 61 vmovdqu 64-128(%rsi),%ymm2 62 vmovdqu 96-128(%rsi),%ymm3 63 vmovdqu 128-128(%rsi),%ymm4 64 vmovdqu 160-128(%rsi),%ymm5 65 vmovdqu 192-128(%rsi),%ymm6 66 vmovdqu 224-128(%rsi),%ymm7 67 vmovdqu 256-128(%rsi),%ymm8 68 69 leaq 192(%rsp),%rbx 70 vpbroadcastq .Land_mask(%rip),%ymm15 71 jmp .LOOP_GRANDE_SQR_1024 72 73.align 32 74.LOOP_GRANDE_SQR_1024: 75 leaq 576+128(%rsp),%r9 76 leaq 448(%rsp),%r12 77 78 79 80 81 vpaddq %ymm1,%ymm1,%ymm1 82 vpbroadcastq 0-128(%rsi),%ymm10 83 vpaddq %ymm2,%ymm2,%ymm2 84 vmovdqa %ymm1,0-128(%r9) 85 vpaddq %ymm3,%ymm3,%ymm3 86 vmovdqa %ymm2,32-128(%r9) 87 vpaddq %ymm4,%ymm4,%ymm4 88 vmovdqa %ymm3,64-128(%r9) 89 vpaddq %ymm5,%ymm5,%ymm5 90 vmovdqa %ymm4,96-128(%r9) 91 vpaddq %ymm6,%ymm6,%ymm6 92 vmovdqa %ymm5,128-128(%r9) 93 vpaddq %ymm7,%ymm7,%ymm7 94 vmovdqa %ymm6,160-128(%r9) 95 vpaddq %ymm8,%ymm8,%ymm8 96 vmovdqa %ymm7,192-128(%r9) 97 vpxor %ymm9,%ymm9,%ymm9 98 vmovdqa %ymm8,224-128(%r9) 99 100 vpmuludq 0-128(%rsi),%ymm10,%ymm0 101 vpbroadcastq 32-128(%rsi),%ymm11 102 vmovdqu %ymm9,288-192(%rbx) 103 vpmuludq %ymm10,%ymm1,%ymm1 104 vmovdqu %ymm9,320-448(%r12) 105 vpmuludq %ymm10,%ymm2,%ymm2 106 vmovdqu %ymm9,352-448(%r12) 107 vpmuludq %ymm10,%ymm3,%ymm3 108 vmovdqu %ymm9,384-448(%r12) 109 vpmuludq %ymm10,%ymm4,%ymm4 110 vmovdqu %ymm9,416-448(%r12) 111 vpmuludq %ymm10,%ymm5,%ymm5 112 vmovdqu %ymm9,448-448(%r12) 113 vpmuludq %ymm10,%ymm6,%ymm6 114 vmovdqu %ymm9,480-448(%r12) 115 vpmuludq %ymm10,%ymm7,%ymm7 116 vmovdqu %ymm9,512-448(%r12) 117 vpmuludq %ymm10,%ymm8,%ymm8 118 vpbroadcastq 64-128(%rsi),%ymm10 119 vmovdqu %ymm9,544-448(%r12) 120 121 movq %rsi,%r15 122 movl $4,%r14d 123 jmp .Lsqr_entry_1024 124.align 32 125.LOOP_SQR_1024: 126 vpbroadcastq 32-128(%r15),%ymm11 127 vpmuludq 0-128(%rsi),%ymm10,%ymm0 128 vpaddq 0-192(%rbx),%ymm0,%ymm0 129 vpmuludq 0-128(%r9),%ymm10,%ymm1 130 vpaddq 32-192(%rbx),%ymm1,%ymm1 131 vpmuludq 32-128(%r9),%ymm10,%ymm2 132 vpaddq 64-192(%rbx),%ymm2,%ymm2 133 vpmuludq 64-128(%r9),%ymm10,%ymm3 134 vpaddq 96-192(%rbx),%ymm3,%ymm3 135 vpmuludq 96-128(%r9),%ymm10,%ymm4 136 vpaddq 128-192(%rbx),%ymm4,%ymm4 137 vpmuludq 128-128(%r9),%ymm10,%ymm5 138 vpaddq 160-192(%rbx),%ymm5,%ymm5 139 vpmuludq 160-128(%r9),%ymm10,%ymm6 140 vpaddq 192-192(%rbx),%ymm6,%ymm6 141 vpmuludq 192-128(%r9),%ymm10,%ymm7 142 vpaddq 224-192(%rbx),%ymm7,%ymm7 143 vpmuludq 224-128(%r9),%ymm10,%ymm8 144 vpbroadcastq 64-128(%r15),%ymm10 145 vpaddq 256-192(%rbx),%ymm8,%ymm8 146.Lsqr_entry_1024: 147 vmovdqu %ymm0,0-192(%rbx) 148 vmovdqu %ymm1,32-192(%rbx) 149 150 vpmuludq 32-128(%rsi),%ymm11,%ymm12 151 vpaddq %ymm12,%ymm2,%ymm2 152 vpmuludq 32-128(%r9),%ymm11,%ymm14 153 vpaddq %ymm14,%ymm3,%ymm3 154 vpmuludq 64-128(%r9),%ymm11,%ymm13 155 vpaddq %ymm13,%ymm4,%ymm4 156 vpmuludq 96-128(%r9),%ymm11,%ymm12 157 vpaddq %ymm12,%ymm5,%ymm5 158 vpmuludq 128-128(%r9),%ymm11,%ymm14 159 vpaddq %ymm14,%ymm6,%ymm6 160 vpmuludq 160-128(%r9),%ymm11,%ymm13 161 vpaddq %ymm13,%ymm7,%ymm7 162 vpmuludq 192-128(%r9),%ymm11,%ymm12 163 vpaddq %ymm12,%ymm8,%ymm8 164 vpmuludq 224-128(%r9),%ymm11,%ymm0 165 vpbroadcastq 96-128(%r15),%ymm11 166 vpaddq 288-192(%rbx),%ymm0,%ymm0 167 168 vmovdqu %ymm2,64-192(%rbx) 169 vmovdqu %ymm3,96-192(%rbx) 170 171 vpmuludq 64-128(%rsi),%ymm10,%ymm13 172 vpaddq %ymm13,%ymm4,%ymm4 173 vpmuludq 64-128(%r9),%ymm10,%ymm12 174 vpaddq %ymm12,%ymm5,%ymm5 175 vpmuludq 96-128(%r9),%ymm10,%ymm14 176 vpaddq %ymm14,%ymm6,%ymm6 177 vpmuludq 128-128(%r9),%ymm10,%ymm13 178 vpaddq %ymm13,%ymm7,%ymm7 179 vpmuludq 160-128(%r9),%ymm10,%ymm12 180 vpaddq %ymm12,%ymm8,%ymm8 181 vpmuludq 192-128(%r9),%ymm10,%ymm14 182 vpaddq %ymm14,%ymm0,%ymm0 183 vpmuludq 224-128(%r9),%ymm10,%ymm1 184 vpbroadcastq 128-128(%r15),%ymm10 185 vpaddq 320-448(%r12),%ymm1,%ymm1 186 187 vmovdqu %ymm4,128-192(%rbx) 188 vmovdqu %ymm5,160-192(%rbx) 189 190 vpmuludq 96-128(%rsi),%ymm11,%ymm12 191 vpaddq %ymm12,%ymm6,%ymm6 192 vpmuludq 96-128(%r9),%ymm11,%ymm14 193 vpaddq %ymm14,%ymm7,%ymm7 194 vpmuludq 128-128(%r9),%ymm11,%ymm13 195 vpaddq %ymm13,%ymm8,%ymm8 196 vpmuludq 160-128(%r9),%ymm11,%ymm12 197 vpaddq %ymm12,%ymm0,%ymm0 198 vpmuludq 192-128(%r9),%ymm11,%ymm14 199 vpaddq %ymm14,%ymm1,%ymm1 200 vpmuludq 224-128(%r9),%ymm11,%ymm2 201 vpbroadcastq 160-128(%r15),%ymm11 202 vpaddq 352-448(%r12),%ymm2,%ymm2 203 204 vmovdqu %ymm6,192-192(%rbx) 205 vmovdqu %ymm7,224-192(%rbx) 206 207 vpmuludq 128-128(%rsi),%ymm10,%ymm12 208 vpaddq %ymm12,%ymm8,%ymm8 209 vpmuludq 128-128(%r9),%ymm10,%ymm14 210 vpaddq %ymm14,%ymm0,%ymm0 211 vpmuludq 160-128(%r9),%ymm10,%ymm13 212 vpaddq %ymm13,%ymm1,%ymm1 213 vpmuludq 192-128(%r9),%ymm10,%ymm12 214 vpaddq %ymm12,%ymm2,%ymm2 215 vpmuludq 224-128(%r9),%ymm10,%ymm3 216 vpbroadcastq 192-128(%r15),%ymm10 217 vpaddq 384-448(%r12),%ymm3,%ymm3 218 219 vmovdqu %ymm8,256-192(%rbx) 220 vmovdqu %ymm0,288-192(%rbx) 221 leaq 8(%rbx),%rbx 222 223 vpmuludq 160-128(%rsi),%ymm11,%ymm13 224 vpaddq %ymm13,%ymm1,%ymm1 225 vpmuludq 160-128(%r9),%ymm11,%ymm12 226 vpaddq %ymm12,%ymm2,%ymm2 227 vpmuludq 192-128(%r9),%ymm11,%ymm14 228 vpaddq %ymm14,%ymm3,%ymm3 229 vpmuludq 224-128(%r9),%ymm11,%ymm4 230 vpbroadcastq 224-128(%r15),%ymm11 231 vpaddq 416-448(%r12),%ymm4,%ymm4 232 233 vmovdqu %ymm1,320-448(%r12) 234 vmovdqu %ymm2,352-448(%r12) 235 236 vpmuludq 192-128(%rsi),%ymm10,%ymm12 237 vpaddq %ymm12,%ymm3,%ymm3 238 vpmuludq 192-128(%r9),%ymm10,%ymm14 239 vpbroadcastq 256-128(%r15),%ymm0 240 vpaddq %ymm14,%ymm4,%ymm4 241 vpmuludq 224-128(%r9),%ymm10,%ymm5 242 vpbroadcastq 0+8-128(%r15),%ymm10 243 vpaddq 448-448(%r12),%ymm5,%ymm5 244 245 vmovdqu %ymm3,384-448(%r12) 246 vmovdqu %ymm4,416-448(%r12) 247 leaq 8(%r15),%r15 248 249 vpmuludq 224-128(%rsi),%ymm11,%ymm12 250 vpaddq %ymm12,%ymm5,%ymm5 251 vpmuludq 224-128(%r9),%ymm11,%ymm6 252 vpaddq 480-448(%r12),%ymm6,%ymm6 253 254 vpmuludq 256-128(%rsi),%ymm0,%ymm7 255 vmovdqu %ymm5,448-448(%r12) 256 vpaddq 512-448(%r12),%ymm7,%ymm7 257 vmovdqu %ymm6,480-448(%r12) 258 vmovdqu %ymm7,512-448(%r12) 259 leaq 8(%r12),%r12 260 261 decl %r14d 262 jnz .LOOP_SQR_1024 263 264 vmovdqu 256(%rsp),%ymm8 265 vmovdqu 288(%rsp),%ymm1 266 vmovdqu 320(%rsp),%ymm2 267 leaq 192(%rsp),%rbx 268 269 vpsrlq $29,%ymm8,%ymm14 270 vpand %ymm15,%ymm8,%ymm8 271 vpsrlq $29,%ymm1,%ymm11 272 vpand %ymm15,%ymm1,%ymm1 273 274 vpermq $0x93,%ymm14,%ymm14 275 vpxor %ymm9,%ymm9,%ymm9 276 vpermq $0x93,%ymm11,%ymm11 277 278 vpblendd $3,%ymm9,%ymm14,%ymm10 279 vpblendd $3,%ymm14,%ymm11,%ymm14 280 vpaddq %ymm10,%ymm8,%ymm8 281 vpblendd $3,%ymm11,%ymm9,%ymm11 282 vpaddq %ymm14,%ymm1,%ymm1 283 vpaddq %ymm11,%ymm2,%ymm2 284 vmovdqu %ymm1,288-192(%rbx) 285 vmovdqu %ymm2,320-192(%rbx) 286 287 movq (%rsp),%rax 288 movq 8(%rsp),%r10 289 movq 16(%rsp),%r11 290 movq 24(%rsp),%r12 291 vmovdqu 32(%rsp),%ymm1 292 vmovdqu 64-192(%rbx),%ymm2 293 vmovdqu 96-192(%rbx),%ymm3 294 vmovdqu 128-192(%rbx),%ymm4 295 vmovdqu 160-192(%rbx),%ymm5 296 vmovdqu 192-192(%rbx),%ymm6 297 vmovdqu 224-192(%rbx),%ymm7 298 299 movq %rax,%r9 300 imull %ecx,%eax 301 andl $0x1fffffff,%eax 302 vmovd %eax,%xmm12 303 304 movq %rax,%rdx 305 imulq -128(%r13),%rax 306 vpbroadcastq %xmm12,%ymm12 307 addq %rax,%r9 308 movq %rdx,%rax 309 imulq 8-128(%r13),%rax 310 shrq $29,%r9 311 addq %rax,%r10 312 movq %rdx,%rax 313 imulq 16-128(%r13),%rax 314 addq %r9,%r10 315 addq %rax,%r11 316 imulq 24-128(%r13),%rdx 317 addq %rdx,%r12 318 319 movq %r10,%rax 320 imull %ecx,%eax 321 andl $0x1fffffff,%eax 322 323 movl $9,%r14d 324 jmp .LOOP_REDUCE_1024 325 326.align 32 327.LOOP_REDUCE_1024: 328 vmovd %eax,%xmm13 329 vpbroadcastq %xmm13,%ymm13 330 331 vpmuludq 32-128(%r13),%ymm12,%ymm10 332 movq %rax,%rdx 333 imulq -128(%r13),%rax 334 vpaddq %ymm10,%ymm1,%ymm1 335 addq %rax,%r10 336 vpmuludq 64-128(%r13),%ymm12,%ymm14 337 movq %rdx,%rax 338 imulq 8-128(%r13),%rax 339 vpaddq %ymm14,%ymm2,%ymm2 340 vpmuludq 96-128(%r13),%ymm12,%ymm11 341.byte 0x67 342 addq %rax,%r11 343.byte 0x67 344 movq %rdx,%rax 345 imulq 16-128(%r13),%rax 346 shrq $29,%r10 347 vpaddq %ymm11,%ymm3,%ymm3 348 vpmuludq 128-128(%r13),%ymm12,%ymm10 349 addq %rax,%r12 350 addq %r10,%r11 351 vpaddq %ymm10,%ymm4,%ymm4 352 vpmuludq 160-128(%r13),%ymm12,%ymm14 353 movq %r11,%rax 354 imull %ecx,%eax 355 vpaddq %ymm14,%ymm5,%ymm5 356 vpmuludq 192-128(%r13),%ymm12,%ymm11 357 andl $0x1fffffff,%eax 358 vpaddq %ymm11,%ymm6,%ymm6 359 vpmuludq 224-128(%r13),%ymm12,%ymm10 360 vpaddq %ymm10,%ymm7,%ymm7 361 vpmuludq 256-128(%r13),%ymm12,%ymm14 362 vmovd %eax,%xmm12 363 364 vpaddq %ymm14,%ymm8,%ymm8 365 366 vpbroadcastq %xmm12,%ymm12 367 368 vpmuludq 32-8-128(%r13),%ymm13,%ymm11 369 vmovdqu 96-8-128(%r13),%ymm14 370 movq %rax,%rdx 371 imulq -128(%r13),%rax 372 vpaddq %ymm11,%ymm1,%ymm1 373 vpmuludq 64-8-128(%r13),%ymm13,%ymm10 374 vmovdqu 128-8-128(%r13),%ymm11 375 addq %rax,%r11 376 movq %rdx,%rax 377 imulq 8-128(%r13),%rax 378 vpaddq %ymm10,%ymm2,%ymm2 379 addq %r12,%rax 380 shrq $29,%r11 381 vpmuludq %ymm13,%ymm14,%ymm14 382 vmovdqu 160-8-128(%r13),%ymm10 383 addq %r11,%rax 384 vpaddq %ymm14,%ymm3,%ymm3 385 vpmuludq %ymm13,%ymm11,%ymm11 386 vmovdqu 192-8-128(%r13),%ymm14 387.byte 0x67 388 movq %rax,%r12 389 imull %ecx,%eax 390 vpaddq %ymm11,%ymm4,%ymm4 391 vpmuludq %ymm13,%ymm10,%ymm10 392.byte 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00 393 andl $0x1fffffff,%eax 394 vpaddq %ymm10,%ymm5,%ymm5 395 vpmuludq %ymm13,%ymm14,%ymm14 396 vmovdqu 256-8-128(%r13),%ymm10 397 vpaddq %ymm14,%ymm6,%ymm6 398 vpmuludq %ymm13,%ymm11,%ymm11 399 vmovdqu 288-8-128(%r13),%ymm9 400 vmovd %eax,%xmm0 401 imulq -128(%r13),%rax 402 vpaddq %ymm11,%ymm7,%ymm7 403 vpmuludq %ymm13,%ymm10,%ymm10 404 vmovdqu 32-16-128(%r13),%ymm14 405 vpbroadcastq %xmm0,%ymm0 406 vpaddq %ymm10,%ymm8,%ymm8 407 vpmuludq %ymm13,%ymm9,%ymm9 408 vmovdqu 64-16-128(%r13),%ymm11 409 addq %rax,%r12 410 411 vmovdqu 32-24-128(%r13),%ymm13 412 vpmuludq %ymm12,%ymm14,%ymm14 413 vmovdqu 96-16-128(%r13),%ymm10 414 vpaddq %ymm14,%ymm1,%ymm1 415 vpmuludq %ymm0,%ymm13,%ymm13 416 vpmuludq %ymm12,%ymm11,%ymm11 417.byte 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff 418 vpaddq %ymm1,%ymm13,%ymm13 419 vpaddq %ymm11,%ymm2,%ymm2 420 vpmuludq %ymm12,%ymm10,%ymm10 421 vmovdqu 160-16-128(%r13),%ymm11 422.byte 0x67 423 vmovq %xmm13,%rax 424 vmovdqu %ymm13,(%rsp) 425 vpaddq %ymm10,%ymm3,%ymm3 426 vpmuludq %ymm12,%ymm14,%ymm14 427 vmovdqu 192-16-128(%r13),%ymm10 428 vpaddq %ymm14,%ymm4,%ymm4 429 vpmuludq %ymm12,%ymm11,%ymm11 430 vmovdqu 224-16-128(%r13),%ymm14 431 vpaddq %ymm11,%ymm5,%ymm5 432 vpmuludq %ymm12,%ymm10,%ymm10 433 vmovdqu 256-16-128(%r13),%ymm11 434 vpaddq %ymm10,%ymm6,%ymm6 435 vpmuludq %ymm12,%ymm14,%ymm14 436 shrq $29,%r12 437 vmovdqu 288-16-128(%r13),%ymm10 438 addq %r12,%rax 439 vpaddq %ymm14,%ymm7,%ymm7 440 vpmuludq %ymm12,%ymm11,%ymm11 441 442 movq %rax,%r9 443 imull %ecx,%eax 444 vpaddq %ymm11,%ymm8,%ymm8 445 vpmuludq %ymm12,%ymm10,%ymm10 446 andl $0x1fffffff,%eax 447 vmovd %eax,%xmm12 448 vmovdqu 96-24-128(%r13),%ymm11 449.byte 0x67 450 vpaddq %ymm10,%ymm9,%ymm9 451 vpbroadcastq %xmm12,%ymm12 452 453 vpmuludq 64-24-128(%r13),%ymm0,%ymm14 454 vmovdqu 128-24-128(%r13),%ymm10 455 movq %rax,%rdx 456 imulq -128(%r13),%rax 457 movq 8(%rsp),%r10 458 vpaddq %ymm14,%ymm2,%ymm1 459 vpmuludq %ymm0,%ymm11,%ymm11 460 vmovdqu 160-24-128(%r13),%ymm14 461 addq %rax,%r9 462 movq %rdx,%rax 463 imulq 8-128(%r13),%rax 464.byte 0x67 465 shrq $29,%r9 466 movq 16(%rsp),%r11 467 vpaddq %ymm11,%ymm3,%ymm2 468 vpmuludq %ymm0,%ymm10,%ymm10 469 vmovdqu 192-24-128(%r13),%ymm11 470 addq %rax,%r10 471 movq %rdx,%rax 472 imulq 16-128(%r13),%rax 473 vpaddq %ymm10,%ymm4,%ymm3 474 vpmuludq %ymm0,%ymm14,%ymm14 475 vmovdqu 224-24-128(%r13),%ymm10 476 imulq 24-128(%r13),%rdx 477 addq %rax,%r11 478 leaq (%r9,%r10,1),%rax 479 vpaddq %ymm14,%ymm5,%ymm4 480 vpmuludq %ymm0,%ymm11,%ymm11 481 vmovdqu 256-24-128(%r13),%ymm14 482 movq %rax,%r10 483 imull %ecx,%eax 484 vpmuludq %ymm0,%ymm10,%ymm10 485 vpaddq %ymm11,%ymm6,%ymm5 486 vmovdqu 288-24-128(%r13),%ymm11 487 andl $0x1fffffff,%eax 488 vpaddq %ymm10,%ymm7,%ymm6 489 vpmuludq %ymm0,%ymm14,%ymm14 490 addq 24(%rsp),%rdx 491 vpaddq %ymm14,%ymm8,%ymm7 492 vpmuludq %ymm0,%ymm11,%ymm11 493 vpaddq %ymm11,%ymm9,%ymm8 494 vmovq %r12,%xmm9 495 movq %rdx,%r12 496 497 decl %r14d 498 jnz .LOOP_REDUCE_1024 499 leaq 448(%rsp),%r12 500 vpaddq %ymm9,%ymm13,%ymm0 501 vpxor %ymm9,%ymm9,%ymm9 502 503 vpaddq 288-192(%rbx),%ymm0,%ymm0 504 vpaddq 320-448(%r12),%ymm1,%ymm1 505 vpaddq 352-448(%r12),%ymm2,%ymm2 506 vpaddq 384-448(%r12),%ymm3,%ymm3 507 vpaddq 416-448(%r12),%ymm4,%ymm4 508 vpaddq 448-448(%r12),%ymm5,%ymm5 509 vpaddq 480-448(%r12),%ymm6,%ymm6 510 vpaddq 512-448(%r12),%ymm7,%ymm7 511 vpaddq 544-448(%r12),%ymm8,%ymm8 512 513 vpsrlq $29,%ymm0,%ymm14 514 vpand %ymm15,%ymm0,%ymm0 515 vpsrlq $29,%ymm1,%ymm11 516 vpand %ymm15,%ymm1,%ymm1 517 vpsrlq $29,%ymm2,%ymm12 518 vpermq $0x93,%ymm14,%ymm14 519 vpand %ymm15,%ymm2,%ymm2 520 vpsrlq $29,%ymm3,%ymm13 521 vpermq $0x93,%ymm11,%ymm11 522 vpand %ymm15,%ymm3,%ymm3 523 vpermq $0x93,%ymm12,%ymm12 524 525 vpblendd $3,%ymm9,%ymm14,%ymm10 526 vpermq $0x93,%ymm13,%ymm13 527 vpblendd $3,%ymm14,%ymm11,%ymm14 528 vpaddq %ymm10,%ymm0,%ymm0 529 vpblendd $3,%ymm11,%ymm12,%ymm11 530 vpaddq %ymm14,%ymm1,%ymm1 531 vpblendd $3,%ymm12,%ymm13,%ymm12 532 vpaddq %ymm11,%ymm2,%ymm2 533 vpblendd $3,%ymm13,%ymm9,%ymm13 534 vpaddq %ymm12,%ymm3,%ymm3 535 vpaddq %ymm13,%ymm4,%ymm4 536 537 vpsrlq $29,%ymm0,%ymm14 538 vpand %ymm15,%ymm0,%ymm0 539 vpsrlq $29,%ymm1,%ymm11 540 vpand %ymm15,%ymm1,%ymm1 541 vpsrlq $29,%ymm2,%ymm12 542 vpermq $0x93,%ymm14,%ymm14 543 vpand %ymm15,%ymm2,%ymm2 544 vpsrlq $29,%ymm3,%ymm13 545 vpermq $0x93,%ymm11,%ymm11 546 vpand %ymm15,%ymm3,%ymm3 547 vpermq $0x93,%ymm12,%ymm12 548 549 vpblendd $3,%ymm9,%ymm14,%ymm10 550 vpermq $0x93,%ymm13,%ymm13 551 vpblendd $3,%ymm14,%ymm11,%ymm14 552 vpaddq %ymm10,%ymm0,%ymm0 553 vpblendd $3,%ymm11,%ymm12,%ymm11 554 vpaddq %ymm14,%ymm1,%ymm1 555 vmovdqu %ymm0,0-128(%rdi) 556 vpblendd $3,%ymm12,%ymm13,%ymm12 557 vpaddq %ymm11,%ymm2,%ymm2 558 vmovdqu %ymm1,32-128(%rdi) 559 vpblendd $3,%ymm13,%ymm9,%ymm13 560 vpaddq %ymm12,%ymm3,%ymm3 561 vmovdqu %ymm2,64-128(%rdi) 562 vpaddq %ymm13,%ymm4,%ymm4 563 vmovdqu %ymm3,96-128(%rdi) 564 vpsrlq $29,%ymm4,%ymm14 565 vpand %ymm15,%ymm4,%ymm4 566 vpsrlq $29,%ymm5,%ymm11 567 vpand %ymm15,%ymm5,%ymm5 568 vpsrlq $29,%ymm6,%ymm12 569 vpermq $0x93,%ymm14,%ymm14 570 vpand %ymm15,%ymm6,%ymm6 571 vpsrlq $29,%ymm7,%ymm13 572 vpermq $0x93,%ymm11,%ymm11 573 vpand %ymm15,%ymm7,%ymm7 574 vpsrlq $29,%ymm8,%ymm0 575 vpermq $0x93,%ymm12,%ymm12 576 vpand %ymm15,%ymm8,%ymm8 577 vpermq $0x93,%ymm13,%ymm13 578 579 vpblendd $3,%ymm9,%ymm14,%ymm10 580 vpermq $0x93,%ymm0,%ymm0 581 vpblendd $3,%ymm14,%ymm11,%ymm14 582 vpaddq %ymm10,%ymm4,%ymm4 583 vpblendd $3,%ymm11,%ymm12,%ymm11 584 vpaddq %ymm14,%ymm5,%ymm5 585 vpblendd $3,%ymm12,%ymm13,%ymm12 586 vpaddq %ymm11,%ymm6,%ymm6 587 vpblendd $3,%ymm13,%ymm0,%ymm13 588 vpaddq %ymm12,%ymm7,%ymm7 589 vpaddq %ymm13,%ymm8,%ymm8 590 591 vpsrlq $29,%ymm4,%ymm14 592 vpand %ymm15,%ymm4,%ymm4 593 vpsrlq $29,%ymm5,%ymm11 594 vpand %ymm15,%ymm5,%ymm5 595 vpsrlq $29,%ymm6,%ymm12 596 vpermq $0x93,%ymm14,%ymm14 597 vpand %ymm15,%ymm6,%ymm6 598 vpsrlq $29,%ymm7,%ymm13 599 vpermq $0x93,%ymm11,%ymm11 600 vpand %ymm15,%ymm7,%ymm7 601 vpsrlq $29,%ymm8,%ymm0 602 vpermq $0x93,%ymm12,%ymm12 603 vpand %ymm15,%ymm8,%ymm8 604 vpermq $0x93,%ymm13,%ymm13 605 606 vpblendd $3,%ymm9,%ymm14,%ymm10 607 vpermq $0x93,%ymm0,%ymm0 608 vpblendd $3,%ymm14,%ymm11,%ymm14 609 vpaddq %ymm10,%ymm4,%ymm4 610 vpblendd $3,%ymm11,%ymm12,%ymm11 611 vpaddq %ymm14,%ymm5,%ymm5 612 vmovdqu %ymm4,128-128(%rdi) 613 vpblendd $3,%ymm12,%ymm13,%ymm12 614 vpaddq %ymm11,%ymm6,%ymm6 615 vmovdqu %ymm5,160-128(%rdi) 616 vpblendd $3,%ymm13,%ymm0,%ymm13 617 vpaddq %ymm12,%ymm7,%ymm7 618 vmovdqu %ymm6,192-128(%rdi) 619 vpaddq %ymm13,%ymm8,%ymm8 620 vmovdqu %ymm7,224-128(%rdi) 621 vmovdqu %ymm8,256-128(%rdi) 622 623 movq %rdi,%rsi 624 decl %r8d 625 jne .LOOP_GRANDE_SQR_1024 626 627 vzeroall 628 movq %rbp,%rax 629 movq -48(%rax),%r15 630 movq -40(%rax),%r14 631 movq -32(%rax),%r13 632 movq -24(%rax),%r12 633 movq -16(%rax),%rbp 634 movq -8(%rax),%rbx 635 leaq (%rax),%rsp 636.Lsqr_1024_epilogue: 637 .byte 0xf3,0xc3 638.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2 639.globl rsaz_1024_mul_avx2 640.type rsaz_1024_mul_avx2,@function 641.align 64 642rsaz_1024_mul_avx2: 643 leaq (%rsp),%rax 644 pushq %rbx 645 pushq %rbp 646 pushq %r12 647 pushq %r13 648 pushq %r14 649 pushq %r15 650 movq %rax,%rbp 651 vzeroall 652 movq %rdx,%r13 653 subq $64,%rsp 654 655 656 657 658 659 660.byte 0x67,0x67 661 movq %rsi,%r15 662 andq $4095,%r15 663 addq $320,%r15 664 shrq $12,%r15 665 movq %rsi,%r15 666 cmovnzq %r13,%rsi 667 cmovnzq %r15,%r13 668 669 movq %rcx,%r15 670 subq $-128,%rsi 671 subq $-128,%rcx 672 subq $-128,%rdi 673 674 andq $4095,%r15 675 addq $320,%r15 676.byte 0x67,0x67 677 shrq $12,%r15 678 jz .Lmul_1024_no_n_copy 679 680 681 682 683 684 subq $320,%rsp 685 vmovdqu 0-128(%rcx),%ymm0 686 andq $-512,%rsp 687 vmovdqu 32-128(%rcx),%ymm1 688 vmovdqu 64-128(%rcx),%ymm2 689 vmovdqu 96-128(%rcx),%ymm3 690 vmovdqu 128-128(%rcx),%ymm4 691 vmovdqu 160-128(%rcx),%ymm5 692 vmovdqu 192-128(%rcx),%ymm6 693 vmovdqu 224-128(%rcx),%ymm7 694 vmovdqu 256-128(%rcx),%ymm8 695 leaq 64+128(%rsp),%rcx 696 vmovdqu %ymm0,0-128(%rcx) 697 vpxor %ymm0,%ymm0,%ymm0 698 vmovdqu %ymm1,32-128(%rcx) 699 vpxor %ymm1,%ymm1,%ymm1 700 vmovdqu %ymm2,64-128(%rcx) 701 vpxor %ymm2,%ymm2,%ymm2 702 vmovdqu %ymm3,96-128(%rcx) 703 vpxor %ymm3,%ymm3,%ymm3 704 vmovdqu %ymm4,128-128(%rcx) 705 vpxor %ymm4,%ymm4,%ymm4 706 vmovdqu %ymm5,160-128(%rcx) 707 vpxor %ymm5,%ymm5,%ymm5 708 vmovdqu %ymm6,192-128(%rcx) 709 vpxor %ymm6,%ymm6,%ymm6 710 vmovdqu %ymm7,224-128(%rcx) 711 vpxor %ymm7,%ymm7,%ymm7 712 vmovdqu %ymm8,256-128(%rcx) 713 vmovdqa %ymm0,%ymm8 714 vmovdqu %ymm9,288-128(%rcx) 715.Lmul_1024_no_n_copy: 716 andq $-64,%rsp 717 718 movq (%r13),%rbx 719 vpbroadcastq (%r13),%ymm10 720 vmovdqu %ymm0,(%rsp) 721 xorq %r9,%r9 722.byte 0x67 723 xorq %r10,%r10 724 xorq %r11,%r11 725 xorq %r12,%r12 726 727 vmovdqu .Land_mask(%rip),%ymm15 728 movl $9,%r14d 729 vmovdqu %ymm9,288-128(%rdi) 730 jmp .Loop_mul_1024 731 732.align 32 733.Loop_mul_1024: 734 vpsrlq $29,%ymm3,%ymm9 735 movq %rbx,%rax 736 imulq -128(%rsi),%rax 737 addq %r9,%rax 738 movq %rbx,%r10 739 imulq 8-128(%rsi),%r10 740 addq 8(%rsp),%r10 741 742 movq %rax,%r9 743 imull %r8d,%eax 744 andl $0x1fffffff,%eax 745 746 movq %rbx,%r11 747 imulq 16-128(%rsi),%r11 748 addq 16(%rsp),%r11 749 750 movq %rbx,%r12 751 imulq 24-128(%rsi),%r12 752 addq 24(%rsp),%r12 753 vpmuludq 32-128(%rsi),%ymm10,%ymm0 754 vmovd %eax,%xmm11 755 vpaddq %ymm0,%ymm1,%ymm1 756 vpmuludq 64-128(%rsi),%ymm10,%ymm12 757 vpbroadcastq %xmm11,%ymm11 758 vpaddq %ymm12,%ymm2,%ymm2 759 vpmuludq 96-128(%rsi),%ymm10,%ymm13 760 vpand %ymm15,%ymm3,%ymm3 761 vpaddq %ymm13,%ymm3,%ymm3 762 vpmuludq 128-128(%rsi),%ymm10,%ymm0 763 vpaddq %ymm0,%ymm4,%ymm4 764 vpmuludq 160-128(%rsi),%ymm10,%ymm12 765 vpaddq %ymm12,%ymm5,%ymm5 766 vpmuludq 192-128(%rsi),%ymm10,%ymm13 767 vpaddq %ymm13,%ymm6,%ymm6 768 vpmuludq 224-128(%rsi),%ymm10,%ymm0 769 vpermq $0x93,%ymm9,%ymm9 770 vpaddq %ymm0,%ymm7,%ymm7 771 vpmuludq 256-128(%rsi),%ymm10,%ymm12 772 vpbroadcastq 8(%r13),%ymm10 773 vpaddq %ymm12,%ymm8,%ymm8 774 775 movq %rax,%rdx 776 imulq -128(%rcx),%rax 777 addq %rax,%r9 778 movq %rdx,%rax 779 imulq 8-128(%rcx),%rax 780 addq %rax,%r10 781 movq %rdx,%rax 782 imulq 16-128(%rcx),%rax 783 addq %rax,%r11 784 shrq $29,%r9 785 imulq 24-128(%rcx),%rdx 786 addq %rdx,%r12 787 addq %r9,%r10 788 789 vpmuludq 32-128(%rcx),%ymm11,%ymm13 790 vmovq %xmm10,%rbx 791 vpaddq %ymm13,%ymm1,%ymm1 792 vpmuludq 64-128(%rcx),%ymm11,%ymm0 793 vpaddq %ymm0,%ymm2,%ymm2 794 vpmuludq 96-128(%rcx),%ymm11,%ymm12 795 vpaddq %ymm12,%ymm3,%ymm3 796 vpmuludq 128-128(%rcx),%ymm11,%ymm13 797 vpaddq %ymm13,%ymm4,%ymm4 798 vpmuludq 160-128(%rcx),%ymm11,%ymm0 799 vpaddq %ymm0,%ymm5,%ymm5 800 vpmuludq 192-128(%rcx),%ymm11,%ymm12 801 vpaddq %ymm12,%ymm6,%ymm6 802 vpmuludq 224-128(%rcx),%ymm11,%ymm13 803 vpblendd $3,%ymm14,%ymm9,%ymm9 804 vpaddq %ymm13,%ymm7,%ymm7 805 vpmuludq 256-128(%rcx),%ymm11,%ymm0 806 vpaddq %ymm9,%ymm3,%ymm3 807 vpaddq %ymm0,%ymm8,%ymm8 808 809 movq %rbx,%rax 810 imulq -128(%rsi),%rax 811 addq %rax,%r10 812 vmovdqu -8+32-128(%rsi),%ymm12 813 movq %rbx,%rax 814 imulq 8-128(%rsi),%rax 815 addq %rax,%r11 816 vmovdqu -8+64-128(%rsi),%ymm13 817 818 movq %r10,%rax 819 imull %r8d,%eax 820 andl $0x1fffffff,%eax 821 822 imulq 16-128(%rsi),%rbx 823 addq %rbx,%r12 824 vpmuludq %ymm10,%ymm12,%ymm12 825 vmovd %eax,%xmm11 826 vmovdqu -8+96-128(%rsi),%ymm0 827 vpaddq %ymm12,%ymm1,%ymm1 828 vpmuludq %ymm10,%ymm13,%ymm13 829 vpbroadcastq %xmm11,%ymm11 830 vmovdqu -8+128-128(%rsi),%ymm12 831 vpaddq %ymm13,%ymm2,%ymm2 832 vpmuludq %ymm10,%ymm0,%ymm0 833 vmovdqu -8+160-128(%rsi),%ymm13 834 vpaddq %ymm0,%ymm3,%ymm3 835 vpmuludq %ymm10,%ymm12,%ymm12 836 vmovdqu -8+192-128(%rsi),%ymm0 837 vpaddq %ymm12,%ymm4,%ymm4 838 vpmuludq %ymm10,%ymm13,%ymm13 839 vmovdqu -8+224-128(%rsi),%ymm12 840 vpaddq %ymm13,%ymm5,%ymm5 841 vpmuludq %ymm10,%ymm0,%ymm0 842 vmovdqu -8+256-128(%rsi),%ymm13 843 vpaddq %ymm0,%ymm6,%ymm6 844 vpmuludq %ymm10,%ymm12,%ymm12 845 vmovdqu -8+288-128(%rsi),%ymm9 846 vpaddq %ymm12,%ymm7,%ymm7 847 vpmuludq %ymm10,%ymm13,%ymm13 848 vpaddq %ymm13,%ymm8,%ymm8 849 vpmuludq %ymm10,%ymm9,%ymm9 850 vpbroadcastq 16(%r13),%ymm10 851 852 movq %rax,%rdx 853 imulq -128(%rcx),%rax 854 addq %rax,%r10 855 vmovdqu -8+32-128(%rcx),%ymm0 856 movq %rdx,%rax 857 imulq 8-128(%rcx),%rax 858 addq %rax,%r11 859 vmovdqu -8+64-128(%rcx),%ymm12 860 shrq $29,%r10 861 imulq 16-128(%rcx),%rdx 862 addq %rdx,%r12 863 addq %r10,%r11 864 865 vpmuludq %ymm11,%ymm0,%ymm0 866 vmovq %xmm10,%rbx 867 vmovdqu -8+96-128(%rcx),%ymm13 868 vpaddq %ymm0,%ymm1,%ymm1 869 vpmuludq %ymm11,%ymm12,%ymm12 870 vmovdqu -8+128-128(%rcx),%ymm0 871 vpaddq %ymm12,%ymm2,%ymm2 872 vpmuludq %ymm11,%ymm13,%ymm13 873 vmovdqu -8+160-128(%rcx),%ymm12 874 vpaddq %ymm13,%ymm3,%ymm3 875 vpmuludq %ymm11,%ymm0,%ymm0 876 vmovdqu -8+192-128(%rcx),%ymm13 877 vpaddq %ymm0,%ymm4,%ymm4 878 vpmuludq %ymm11,%ymm12,%ymm12 879 vmovdqu -8+224-128(%rcx),%ymm0 880 vpaddq %ymm12,%ymm5,%ymm5 881 vpmuludq %ymm11,%ymm13,%ymm13 882 vmovdqu -8+256-128(%rcx),%ymm12 883 vpaddq %ymm13,%ymm6,%ymm6 884 vpmuludq %ymm11,%ymm0,%ymm0 885 vmovdqu -8+288-128(%rcx),%ymm13 886 vpaddq %ymm0,%ymm7,%ymm7 887 vpmuludq %ymm11,%ymm12,%ymm12 888 vpaddq %ymm12,%ymm8,%ymm8 889 vpmuludq %ymm11,%ymm13,%ymm13 890 vpaddq %ymm13,%ymm9,%ymm9 891 892 vmovdqu -16+32-128(%rsi),%ymm0 893 movq %rbx,%rax 894 imulq -128(%rsi),%rax 895 addq %r11,%rax 896 897 vmovdqu -16+64-128(%rsi),%ymm12 898 movq %rax,%r11 899 imull %r8d,%eax 900 andl $0x1fffffff,%eax 901 902 imulq 8-128(%rsi),%rbx 903 addq %rbx,%r12 904 vpmuludq %ymm10,%ymm0,%ymm0 905 vmovd %eax,%xmm11 906 vmovdqu -16+96-128(%rsi),%ymm13 907 vpaddq %ymm0,%ymm1,%ymm1 908 vpmuludq %ymm10,%ymm12,%ymm12 909 vpbroadcastq %xmm11,%ymm11 910 vmovdqu -16+128-128(%rsi),%ymm0 911 vpaddq %ymm12,%ymm2,%ymm2 912 vpmuludq %ymm10,%ymm13,%ymm13 913 vmovdqu -16+160-128(%rsi),%ymm12 914 vpaddq %ymm13,%ymm3,%ymm3 915 vpmuludq %ymm10,%ymm0,%ymm0 916 vmovdqu -16+192-128(%rsi),%ymm13 917 vpaddq %ymm0,%ymm4,%ymm4 918 vpmuludq %ymm10,%ymm12,%ymm12 919 vmovdqu -16+224-128(%rsi),%ymm0 920 vpaddq %ymm12,%ymm5,%ymm5 921 vpmuludq %ymm10,%ymm13,%ymm13 922 vmovdqu -16+256-128(%rsi),%ymm12 923 vpaddq %ymm13,%ymm6,%ymm6 924 vpmuludq %ymm10,%ymm0,%ymm0 925 vmovdqu -16+288-128(%rsi),%ymm13 926 vpaddq %ymm0,%ymm7,%ymm7 927 vpmuludq %ymm10,%ymm12,%ymm12 928 vpaddq %ymm12,%ymm8,%ymm8 929 vpmuludq %ymm10,%ymm13,%ymm13 930 vpbroadcastq 24(%r13),%ymm10 931 vpaddq %ymm13,%ymm9,%ymm9 932 933 vmovdqu -16+32-128(%rcx),%ymm0 934 movq %rax,%rdx 935 imulq -128(%rcx),%rax 936 addq %rax,%r11 937 vmovdqu -16+64-128(%rcx),%ymm12 938 imulq 8-128(%rcx),%rdx 939 addq %rdx,%r12 940 shrq $29,%r11 941 942 vpmuludq %ymm11,%ymm0,%ymm0 943 vmovq %xmm10,%rbx 944 vmovdqu -16+96-128(%rcx),%ymm13 945 vpaddq %ymm0,%ymm1,%ymm1 946 vpmuludq %ymm11,%ymm12,%ymm12 947 vmovdqu -16+128-128(%rcx),%ymm0 948 vpaddq %ymm12,%ymm2,%ymm2 949 vpmuludq %ymm11,%ymm13,%ymm13 950 vmovdqu -16+160-128(%rcx),%ymm12 951 vpaddq %ymm13,%ymm3,%ymm3 952 vpmuludq %ymm11,%ymm0,%ymm0 953 vmovdqu -16+192-128(%rcx),%ymm13 954 vpaddq %ymm0,%ymm4,%ymm4 955 vpmuludq %ymm11,%ymm12,%ymm12 956 vmovdqu -16+224-128(%rcx),%ymm0 957 vpaddq %ymm12,%ymm5,%ymm5 958 vpmuludq %ymm11,%ymm13,%ymm13 959 vmovdqu -16+256-128(%rcx),%ymm12 960 vpaddq %ymm13,%ymm6,%ymm6 961 vpmuludq %ymm11,%ymm0,%ymm0 962 vmovdqu -16+288-128(%rcx),%ymm13 963 vpaddq %ymm0,%ymm7,%ymm7 964 vpmuludq %ymm11,%ymm12,%ymm12 965 vmovdqu -24+32-128(%rsi),%ymm0 966 vpaddq %ymm12,%ymm8,%ymm8 967 vpmuludq %ymm11,%ymm13,%ymm13 968 vmovdqu -24+64-128(%rsi),%ymm12 969 vpaddq %ymm13,%ymm9,%ymm9 970 971 addq %r11,%r12 972 imulq -128(%rsi),%rbx 973 addq %rbx,%r12 974 975 movq %r12,%rax 976 imull %r8d,%eax 977 andl $0x1fffffff,%eax 978 979 vpmuludq %ymm10,%ymm0,%ymm0 980 vmovd %eax,%xmm11 981 vmovdqu -24+96-128(%rsi),%ymm13 982 vpaddq %ymm0,%ymm1,%ymm1 983 vpmuludq %ymm10,%ymm12,%ymm12 984 vpbroadcastq %xmm11,%ymm11 985 vmovdqu -24+128-128(%rsi),%ymm0 986 vpaddq %ymm12,%ymm2,%ymm2 987 vpmuludq %ymm10,%ymm13,%ymm13 988 vmovdqu -24+160-128(%rsi),%ymm12 989 vpaddq %ymm13,%ymm3,%ymm3 990 vpmuludq %ymm10,%ymm0,%ymm0 991 vmovdqu -24+192-128(%rsi),%ymm13 992 vpaddq %ymm0,%ymm4,%ymm4 993 vpmuludq %ymm10,%ymm12,%ymm12 994 vmovdqu -24+224-128(%rsi),%ymm0 995 vpaddq %ymm12,%ymm5,%ymm5 996 vpmuludq %ymm10,%ymm13,%ymm13 997 vmovdqu -24+256-128(%rsi),%ymm12 998 vpaddq %ymm13,%ymm6,%ymm6 999 vpmuludq %ymm10,%ymm0,%ymm0 1000 vmovdqu -24+288-128(%rsi),%ymm13 1001 vpaddq %ymm0,%ymm7,%ymm7 1002 vpmuludq %ymm10,%ymm12,%ymm12 1003 vpaddq %ymm12,%ymm8,%ymm8 1004 vpmuludq %ymm10,%ymm13,%ymm13 1005 vpbroadcastq 32(%r13),%ymm10 1006 vpaddq %ymm13,%ymm9,%ymm9 1007 addq $32,%r13 1008 1009 vmovdqu -24+32-128(%rcx),%ymm0 1010 imulq -128(%rcx),%rax 1011 addq %rax,%r12 1012 shrq $29,%r12 1013 1014 vmovdqu -24+64-128(%rcx),%ymm12 1015 vpmuludq %ymm11,%ymm0,%ymm0 1016 vmovq %xmm10,%rbx 1017 vmovdqu -24+96-128(%rcx),%ymm13 1018 vpaddq %ymm0,%ymm1,%ymm0 1019 vpmuludq %ymm11,%ymm12,%ymm12 1020 vmovdqu %ymm0,(%rsp) 1021 vpaddq %ymm12,%ymm2,%ymm1 1022 vmovdqu -24+128-128(%rcx),%ymm0 1023 vpmuludq %ymm11,%ymm13,%ymm13 1024 vmovdqu -24+160-128(%rcx),%ymm12 1025 vpaddq %ymm13,%ymm3,%ymm2 1026 vpmuludq %ymm11,%ymm0,%ymm0 1027 vmovdqu -24+192-128(%rcx),%ymm13 1028 vpaddq %ymm0,%ymm4,%ymm3 1029 vpmuludq %ymm11,%ymm12,%ymm12 1030 vmovdqu -24+224-128(%rcx),%ymm0 1031 vpaddq %ymm12,%ymm5,%ymm4 1032 vpmuludq %ymm11,%ymm13,%ymm13 1033 vmovdqu -24+256-128(%rcx),%ymm12 1034 vpaddq %ymm13,%ymm6,%ymm5 1035 vpmuludq %ymm11,%ymm0,%ymm0 1036 vmovdqu -24+288-128(%rcx),%ymm13 1037 movq %r12,%r9 1038 vpaddq %ymm0,%ymm7,%ymm6 1039 vpmuludq %ymm11,%ymm12,%ymm12 1040 addq (%rsp),%r9 1041 vpaddq %ymm12,%ymm8,%ymm7 1042 vpmuludq %ymm11,%ymm13,%ymm13 1043 vmovq %r12,%xmm12 1044 vpaddq %ymm13,%ymm9,%ymm8 1045 1046 decl %r14d 1047 jnz .Loop_mul_1024 1048 vpermq $0,%ymm15,%ymm15 1049 vpaddq (%rsp),%ymm12,%ymm0 1050 1051 vpsrlq $29,%ymm0,%ymm12 1052 vpand %ymm15,%ymm0,%ymm0 1053 vpsrlq $29,%ymm1,%ymm13 1054 vpand %ymm15,%ymm1,%ymm1 1055 vpsrlq $29,%ymm2,%ymm10 1056 vpermq $0x93,%ymm12,%ymm12 1057 vpand %ymm15,%ymm2,%ymm2 1058 vpsrlq $29,%ymm3,%ymm11 1059 vpermq $0x93,%ymm13,%ymm13 1060 vpand %ymm15,%ymm3,%ymm3 1061 1062 vpblendd $3,%ymm14,%ymm12,%ymm9 1063 vpermq $0x93,%ymm10,%ymm10 1064 vpblendd $3,%ymm12,%ymm13,%ymm12 1065 vpermq $0x93,%ymm11,%ymm11 1066 vpaddq %ymm9,%ymm0,%ymm0 1067 vpblendd $3,%ymm13,%ymm10,%ymm13 1068 vpaddq %ymm12,%ymm1,%ymm1 1069 vpblendd $3,%ymm10,%ymm11,%ymm10 1070 vpaddq %ymm13,%ymm2,%ymm2 1071 vpblendd $3,%ymm11,%ymm14,%ymm11 1072 vpaddq %ymm10,%ymm3,%ymm3 1073 vpaddq %ymm11,%ymm4,%ymm4 1074 1075 vpsrlq $29,%ymm0,%ymm12 1076 vpand %ymm15,%ymm0,%ymm0 1077 vpsrlq $29,%ymm1,%ymm13 1078 vpand %ymm15,%ymm1,%ymm1 1079 vpsrlq $29,%ymm2,%ymm10 1080 vpermq $0x93,%ymm12,%ymm12 1081 vpand %ymm15,%ymm2,%ymm2 1082 vpsrlq $29,%ymm3,%ymm11 1083 vpermq $0x93,%ymm13,%ymm13 1084 vpand %ymm15,%ymm3,%ymm3 1085 vpermq $0x93,%ymm10,%ymm10 1086 1087 vpblendd $3,%ymm14,%ymm12,%ymm9 1088 vpermq $0x93,%ymm11,%ymm11 1089 vpblendd $3,%ymm12,%ymm13,%ymm12 1090 vpaddq %ymm9,%ymm0,%ymm0 1091 vpblendd $3,%ymm13,%ymm10,%ymm13 1092 vpaddq %ymm12,%ymm1,%ymm1 1093 vpblendd $3,%ymm10,%ymm11,%ymm10 1094 vpaddq %ymm13,%ymm2,%ymm2 1095 vpblendd $3,%ymm11,%ymm14,%ymm11 1096 vpaddq %ymm10,%ymm3,%ymm3 1097 vpaddq %ymm11,%ymm4,%ymm4 1098 1099 vmovdqu %ymm0,0-128(%rdi) 1100 vmovdqu %ymm1,32-128(%rdi) 1101 vmovdqu %ymm2,64-128(%rdi) 1102 vmovdqu %ymm3,96-128(%rdi) 1103 vpsrlq $29,%ymm4,%ymm12 1104 vpand %ymm15,%ymm4,%ymm4 1105 vpsrlq $29,%ymm5,%ymm13 1106 vpand %ymm15,%ymm5,%ymm5 1107 vpsrlq $29,%ymm6,%ymm10 1108 vpermq $0x93,%ymm12,%ymm12 1109 vpand %ymm15,%ymm6,%ymm6 1110 vpsrlq $29,%ymm7,%ymm11 1111 vpermq $0x93,%ymm13,%ymm13 1112 vpand %ymm15,%ymm7,%ymm7 1113 vpsrlq $29,%ymm8,%ymm0 1114 vpermq $0x93,%ymm10,%ymm10 1115 vpand %ymm15,%ymm8,%ymm8 1116 vpermq $0x93,%ymm11,%ymm11 1117 1118 vpblendd $3,%ymm14,%ymm12,%ymm9 1119 vpermq $0x93,%ymm0,%ymm0 1120 vpblendd $3,%ymm12,%ymm13,%ymm12 1121 vpaddq %ymm9,%ymm4,%ymm4 1122 vpblendd $3,%ymm13,%ymm10,%ymm13 1123 vpaddq %ymm12,%ymm5,%ymm5 1124 vpblendd $3,%ymm10,%ymm11,%ymm10 1125 vpaddq %ymm13,%ymm6,%ymm6 1126 vpblendd $3,%ymm11,%ymm0,%ymm11 1127 vpaddq %ymm10,%ymm7,%ymm7 1128 vpaddq %ymm11,%ymm8,%ymm8 1129 1130 vpsrlq $29,%ymm4,%ymm12 1131 vpand %ymm15,%ymm4,%ymm4 1132 vpsrlq $29,%ymm5,%ymm13 1133 vpand %ymm15,%ymm5,%ymm5 1134 vpsrlq $29,%ymm6,%ymm10 1135 vpermq $0x93,%ymm12,%ymm12 1136 vpand %ymm15,%ymm6,%ymm6 1137 vpsrlq $29,%ymm7,%ymm11 1138 vpermq $0x93,%ymm13,%ymm13 1139 vpand %ymm15,%ymm7,%ymm7 1140 vpsrlq $29,%ymm8,%ymm0 1141 vpermq $0x93,%ymm10,%ymm10 1142 vpand %ymm15,%ymm8,%ymm8 1143 vpermq $0x93,%ymm11,%ymm11 1144 1145 vpblendd $3,%ymm14,%ymm12,%ymm9 1146 vpermq $0x93,%ymm0,%ymm0 1147 vpblendd $3,%ymm12,%ymm13,%ymm12 1148 vpaddq %ymm9,%ymm4,%ymm4 1149 vpblendd $3,%ymm13,%ymm10,%ymm13 1150 vpaddq %ymm12,%ymm5,%ymm5 1151 vpblendd $3,%ymm10,%ymm11,%ymm10 1152 vpaddq %ymm13,%ymm6,%ymm6 1153 vpblendd $3,%ymm11,%ymm0,%ymm11 1154 vpaddq %ymm10,%ymm7,%ymm7 1155 vpaddq %ymm11,%ymm8,%ymm8 1156 1157 vmovdqu %ymm4,128-128(%rdi) 1158 vmovdqu %ymm5,160-128(%rdi) 1159 vmovdqu %ymm6,192-128(%rdi) 1160 vmovdqu %ymm7,224-128(%rdi) 1161 vmovdqu %ymm8,256-128(%rdi) 1162 vzeroupper 1163 1164 movq %rbp,%rax 1165 movq -48(%rax),%r15 1166 movq -40(%rax),%r14 1167 movq -32(%rax),%r13 1168 movq -24(%rax),%r12 1169 movq -16(%rax),%rbp 1170 movq -8(%rax),%rbx 1171 leaq (%rax),%rsp 1172.Lmul_1024_epilogue: 1173 .byte 0xf3,0xc3 1174.size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2 1175.globl rsaz_1024_red2norm_avx2 1176.type rsaz_1024_red2norm_avx2,@function 1177.align 32 1178rsaz_1024_red2norm_avx2: 1179 subq $-128,%rsi 1180 xorq %rax,%rax 1181 movq -128(%rsi),%r8 1182 movq -120(%rsi),%r9 1183 movq -112(%rsi),%r10 1184 shlq $0,%r8 1185 shlq $29,%r9 1186 movq %r10,%r11 1187 shlq $58,%r10 1188 shrq $6,%r11 1189 addq %r8,%rax 1190 addq %r9,%rax 1191 addq %r10,%rax 1192 adcq $0,%r11 1193 movq %rax,0(%rdi) 1194 movq %r11,%rax 1195 movq -104(%rsi),%r8 1196 movq -96(%rsi),%r9 1197 shlq $23,%r8 1198 movq %r9,%r10 1199 shlq $52,%r9 1200 shrq $12,%r10 1201 addq %r8,%rax 1202 addq %r9,%rax 1203 adcq $0,%r10 1204 movq %rax,8(%rdi) 1205 movq %r10,%rax 1206 movq -88(%rsi),%r11 1207 movq -80(%rsi),%r8 1208 shlq $17,%r11 1209 movq %r8,%r9 1210 shlq $46,%r8 1211 shrq $18,%r9 1212 addq %r11,%rax 1213 addq %r8,%rax 1214 adcq $0,%r9 1215 movq %rax,16(%rdi) 1216 movq %r9,%rax 1217 movq -72(%rsi),%r10 1218 movq -64(%rsi),%r11 1219 shlq $11,%r10 1220 movq %r11,%r8 1221 shlq $40,%r11 1222 shrq $24,%r8 1223 addq %r10,%rax 1224 addq %r11,%rax 1225 adcq $0,%r8 1226 movq %rax,24(%rdi) 1227 movq %r8,%rax 1228 movq -56(%rsi),%r9 1229 movq -48(%rsi),%r10 1230 movq -40(%rsi),%r11 1231 shlq $5,%r9 1232 shlq $34,%r10 1233 movq %r11,%r8 1234 shlq $63,%r11 1235 shrq $1,%r8 1236 addq %r9,%rax 1237 addq %r10,%rax 1238 addq %r11,%rax 1239 adcq $0,%r8 1240 movq %rax,32(%rdi) 1241 movq %r8,%rax 1242 movq -32(%rsi),%r9 1243 movq -24(%rsi),%r10 1244 shlq $28,%r9 1245 movq %r10,%r11 1246 shlq $57,%r10 1247 shrq $7,%r11 1248 addq %r9,%rax 1249 addq %r10,%rax 1250 adcq $0,%r11 1251 movq %rax,40(%rdi) 1252 movq %r11,%rax 1253 movq -16(%rsi),%r8 1254 movq -8(%rsi),%r9 1255 shlq $22,%r8 1256 movq %r9,%r10 1257 shlq $51,%r9 1258 shrq $13,%r10 1259 addq %r8,%rax 1260 addq %r9,%rax 1261 adcq $0,%r10 1262 movq %rax,48(%rdi) 1263 movq %r10,%rax 1264 movq 0(%rsi),%r11 1265 movq 8(%rsi),%r8 1266 shlq $16,%r11 1267 movq %r8,%r9 1268 shlq $45,%r8 1269 shrq $19,%r9 1270 addq %r11,%rax 1271 addq %r8,%rax 1272 adcq $0,%r9 1273 movq %rax,56(%rdi) 1274 movq %r9,%rax 1275 movq 16(%rsi),%r10 1276 movq 24(%rsi),%r11 1277 shlq $10,%r10 1278 movq %r11,%r8 1279 shlq $39,%r11 1280 shrq $25,%r8 1281 addq %r10,%rax 1282 addq %r11,%rax 1283 adcq $0,%r8 1284 movq %rax,64(%rdi) 1285 movq %r8,%rax 1286 movq 32(%rsi),%r9 1287 movq 40(%rsi),%r10 1288 movq 48(%rsi),%r11 1289 shlq $4,%r9 1290 shlq $33,%r10 1291 movq %r11,%r8 1292 shlq $62,%r11 1293 shrq $2,%r8 1294 addq %r9,%rax 1295 addq %r10,%rax 1296 addq %r11,%rax 1297 adcq $0,%r8 1298 movq %rax,72(%rdi) 1299 movq %r8,%rax 1300 movq 56(%rsi),%r9 1301 movq 64(%rsi),%r10 1302 shlq $27,%r9 1303 movq %r10,%r11 1304 shlq $56,%r10 1305 shrq $8,%r11 1306 addq %r9,%rax 1307 addq %r10,%rax 1308 adcq $0,%r11 1309 movq %rax,80(%rdi) 1310 movq %r11,%rax 1311 movq 72(%rsi),%r8 1312 movq 80(%rsi),%r9 1313 shlq $21,%r8 1314 movq %r9,%r10 1315 shlq $50,%r9 1316 shrq $14,%r10 1317 addq %r8,%rax 1318 addq %r9,%rax 1319 adcq $0,%r10 1320 movq %rax,88(%rdi) 1321 movq %r10,%rax 1322 movq 88(%rsi),%r11 1323 movq 96(%rsi),%r8 1324 shlq $15,%r11 1325 movq %r8,%r9 1326 shlq $44,%r8 1327 shrq $20,%r9 1328 addq %r11,%rax 1329 addq %r8,%rax 1330 adcq $0,%r9 1331 movq %rax,96(%rdi) 1332 movq %r9,%rax 1333 movq 104(%rsi),%r10 1334 movq 112(%rsi),%r11 1335 shlq $9,%r10 1336 movq %r11,%r8 1337 shlq $38,%r11 1338 shrq $26,%r8 1339 addq %r10,%rax 1340 addq %r11,%rax 1341 adcq $0,%r8 1342 movq %rax,104(%rdi) 1343 movq %r8,%rax 1344 movq 120(%rsi),%r9 1345 movq 128(%rsi),%r10 1346 movq 136(%rsi),%r11 1347 shlq $3,%r9 1348 shlq $32,%r10 1349 movq %r11,%r8 1350 shlq $61,%r11 1351 shrq $3,%r8 1352 addq %r9,%rax 1353 addq %r10,%rax 1354 addq %r11,%rax 1355 adcq $0,%r8 1356 movq %rax,112(%rdi) 1357 movq %r8,%rax 1358 movq 144(%rsi),%r9 1359 movq 152(%rsi),%r10 1360 shlq $26,%r9 1361 movq %r10,%r11 1362 shlq $55,%r10 1363 shrq $9,%r11 1364 addq %r9,%rax 1365 addq %r10,%rax 1366 adcq $0,%r11 1367 movq %rax,120(%rdi) 1368 movq %r11,%rax 1369 .byte 0xf3,0xc3 1370.size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2 1371 1372.globl rsaz_1024_norm2red_avx2 1373.type rsaz_1024_norm2red_avx2,@function 1374.align 32 1375rsaz_1024_norm2red_avx2: 1376 subq $-128,%rdi 1377 movq (%rsi),%r8 1378 movl $0x1fffffff,%eax 1379 movq 8(%rsi),%r9 1380 movq %r8,%r11 1381 shrq $0,%r11 1382 andq %rax,%r11 1383 movq %r11,-128(%rdi) 1384 movq %r8,%r10 1385 shrq $29,%r10 1386 andq %rax,%r10 1387 movq %r10,-120(%rdi) 1388 shrdq $58,%r9,%r8 1389 andq %rax,%r8 1390 movq %r8,-112(%rdi) 1391 movq 16(%rsi),%r10 1392 movq %r9,%r8 1393 shrq $23,%r8 1394 andq %rax,%r8 1395 movq %r8,-104(%rdi) 1396 shrdq $52,%r10,%r9 1397 andq %rax,%r9 1398 movq %r9,-96(%rdi) 1399 movq 24(%rsi),%r11 1400 movq %r10,%r9 1401 shrq $17,%r9 1402 andq %rax,%r9 1403 movq %r9,-88(%rdi) 1404 shrdq $46,%r11,%r10 1405 andq %rax,%r10 1406 movq %r10,-80(%rdi) 1407 movq 32(%rsi),%r8 1408 movq %r11,%r10 1409 shrq $11,%r10 1410 andq %rax,%r10 1411 movq %r10,-72(%rdi) 1412 shrdq $40,%r8,%r11 1413 andq %rax,%r11 1414 movq %r11,-64(%rdi) 1415 movq 40(%rsi),%r9 1416 movq %r8,%r11 1417 shrq $5,%r11 1418 andq %rax,%r11 1419 movq %r11,-56(%rdi) 1420 movq %r8,%r10 1421 shrq $34,%r10 1422 andq %rax,%r10 1423 movq %r10,-48(%rdi) 1424 shrdq $63,%r9,%r8 1425 andq %rax,%r8 1426 movq %r8,-40(%rdi) 1427 movq 48(%rsi),%r10 1428 movq %r9,%r8 1429 shrq $28,%r8 1430 andq %rax,%r8 1431 movq %r8,-32(%rdi) 1432 shrdq $57,%r10,%r9 1433 andq %rax,%r9 1434 movq %r9,-24(%rdi) 1435 movq 56(%rsi),%r11 1436 movq %r10,%r9 1437 shrq $22,%r9 1438 andq %rax,%r9 1439 movq %r9,-16(%rdi) 1440 shrdq $51,%r11,%r10 1441 andq %rax,%r10 1442 movq %r10,-8(%rdi) 1443 movq 64(%rsi),%r8 1444 movq %r11,%r10 1445 shrq $16,%r10 1446 andq %rax,%r10 1447 movq %r10,0(%rdi) 1448 shrdq $45,%r8,%r11 1449 andq %rax,%r11 1450 movq %r11,8(%rdi) 1451 movq 72(%rsi),%r9 1452 movq %r8,%r11 1453 shrq $10,%r11 1454 andq %rax,%r11 1455 movq %r11,16(%rdi) 1456 shrdq $39,%r9,%r8 1457 andq %rax,%r8 1458 movq %r8,24(%rdi) 1459 movq 80(%rsi),%r10 1460 movq %r9,%r8 1461 shrq $4,%r8 1462 andq %rax,%r8 1463 movq %r8,32(%rdi) 1464 movq %r9,%r11 1465 shrq $33,%r11 1466 andq %rax,%r11 1467 movq %r11,40(%rdi) 1468 shrdq $62,%r10,%r9 1469 andq %rax,%r9 1470 movq %r9,48(%rdi) 1471 movq 88(%rsi),%r11 1472 movq %r10,%r9 1473 shrq $27,%r9 1474 andq %rax,%r9 1475 movq %r9,56(%rdi) 1476 shrdq $56,%r11,%r10 1477 andq %rax,%r10 1478 movq %r10,64(%rdi) 1479 movq 96(%rsi),%r8 1480 movq %r11,%r10 1481 shrq $21,%r10 1482 andq %rax,%r10 1483 movq %r10,72(%rdi) 1484 shrdq $50,%r8,%r11 1485 andq %rax,%r11 1486 movq %r11,80(%rdi) 1487 movq 104(%rsi),%r9 1488 movq %r8,%r11 1489 shrq $15,%r11 1490 andq %rax,%r11 1491 movq %r11,88(%rdi) 1492 shrdq $44,%r9,%r8 1493 andq %rax,%r8 1494 movq %r8,96(%rdi) 1495 movq 112(%rsi),%r10 1496 movq %r9,%r8 1497 shrq $9,%r8 1498 andq %rax,%r8 1499 movq %r8,104(%rdi) 1500 shrdq $38,%r10,%r9 1501 andq %rax,%r9 1502 movq %r9,112(%rdi) 1503 movq 120(%rsi),%r11 1504 movq %r10,%r9 1505 shrq $3,%r9 1506 andq %rax,%r9 1507 movq %r9,120(%rdi) 1508 movq %r10,%r8 1509 shrq $32,%r8 1510 andq %rax,%r8 1511 movq %r8,128(%rdi) 1512 shrdq $61,%r11,%r10 1513 andq %rax,%r10 1514 movq %r10,136(%rdi) 1515 xorq %r8,%r8 1516 movq %r11,%r10 1517 shrq $26,%r10 1518 andq %rax,%r10 1519 movq %r10,144(%rdi) 1520 shrdq $55,%r8,%r11 1521 andq %rax,%r11 1522 movq %r11,152(%rdi) 1523 movq %r8,160(%rdi) 1524 movq %r8,168(%rdi) 1525 movq %r8,176(%rdi) 1526 movq %r8,184(%rdi) 1527 .byte 0xf3,0xc3 1528.size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2 1529.globl rsaz_1024_scatter5_avx2 1530.type rsaz_1024_scatter5_avx2,@function 1531.align 32 1532rsaz_1024_scatter5_avx2: 1533 vzeroupper 1534 vmovdqu .Lscatter_permd(%rip),%ymm5 1535 shll $4,%edx 1536 leaq (%rdi,%rdx,1),%rdi 1537 movl $9,%eax 1538 jmp .Loop_scatter_1024 1539 1540.align 32 1541.Loop_scatter_1024: 1542 vmovdqu (%rsi),%ymm0 1543 leaq 32(%rsi),%rsi 1544 vpermd %ymm0,%ymm5,%ymm0 1545 vmovdqu %xmm0,(%rdi) 1546 leaq 512(%rdi),%rdi 1547 decl %eax 1548 jnz .Loop_scatter_1024 1549 1550 vzeroupper 1551 .byte 0xf3,0xc3 1552.size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2 1553 1554.globl rsaz_1024_gather5_avx2 1555.type rsaz_1024_gather5_avx2,@function 1556.align 32 1557rsaz_1024_gather5_avx2: 1558 vzeroupper 1559 movq %rsp,%r11 1560 leaq -256(%rsp),%rsp 1561 andq $-32,%rsp 1562 leaq .Linc(%rip),%r10 1563 leaq -128(%rsp),%rax 1564 1565 vmovd %edx,%xmm4 1566 vmovdqa (%r10),%ymm0 1567 vmovdqa 32(%r10),%ymm1 1568 vmovdqa 64(%r10),%ymm5 1569 vpbroadcastd %xmm4,%ymm4 1570 1571 vpaddd %ymm5,%ymm0,%ymm2 1572 vpcmpeqd %ymm4,%ymm0,%ymm0 1573 vpaddd %ymm5,%ymm1,%ymm3 1574 vpcmpeqd %ymm4,%ymm1,%ymm1 1575 vmovdqa %ymm0,0+128(%rax) 1576 vpaddd %ymm5,%ymm2,%ymm0 1577 vpcmpeqd %ymm4,%ymm2,%ymm2 1578 vmovdqa %ymm1,32+128(%rax) 1579 vpaddd %ymm5,%ymm3,%ymm1 1580 vpcmpeqd %ymm4,%ymm3,%ymm3 1581 vmovdqa %ymm2,64+128(%rax) 1582 vpaddd %ymm5,%ymm0,%ymm2 1583 vpcmpeqd %ymm4,%ymm0,%ymm0 1584 vmovdqa %ymm3,96+128(%rax) 1585 vpaddd %ymm5,%ymm1,%ymm3 1586 vpcmpeqd %ymm4,%ymm1,%ymm1 1587 vmovdqa %ymm0,128+128(%rax) 1588 vpaddd %ymm5,%ymm2,%ymm8 1589 vpcmpeqd %ymm4,%ymm2,%ymm2 1590 vmovdqa %ymm1,160+128(%rax) 1591 vpaddd %ymm5,%ymm3,%ymm9 1592 vpcmpeqd %ymm4,%ymm3,%ymm3 1593 vmovdqa %ymm2,192+128(%rax) 1594 vpaddd %ymm5,%ymm8,%ymm10 1595 vpcmpeqd %ymm4,%ymm8,%ymm8 1596 vmovdqa %ymm3,224+128(%rax) 1597 vpaddd %ymm5,%ymm9,%ymm11 1598 vpcmpeqd %ymm4,%ymm9,%ymm9 1599 vpaddd %ymm5,%ymm10,%ymm12 1600 vpcmpeqd %ymm4,%ymm10,%ymm10 1601 vpaddd %ymm5,%ymm11,%ymm13 1602 vpcmpeqd %ymm4,%ymm11,%ymm11 1603 vpaddd %ymm5,%ymm12,%ymm14 1604 vpcmpeqd %ymm4,%ymm12,%ymm12 1605 vpaddd %ymm5,%ymm13,%ymm15 1606 vpcmpeqd %ymm4,%ymm13,%ymm13 1607 vpcmpeqd %ymm4,%ymm14,%ymm14 1608 vpcmpeqd %ymm4,%ymm15,%ymm15 1609 1610 vmovdqa -32(%r10),%ymm7 1611 leaq 128(%rsi),%rsi 1612 movl $9,%edx 1613 1614.Loop_gather_1024: 1615 vmovdqa 0-128(%rsi),%ymm0 1616 vmovdqa 32-128(%rsi),%ymm1 1617 vmovdqa 64-128(%rsi),%ymm2 1618 vmovdqa 96-128(%rsi),%ymm3 1619 vpand 0+128(%rax),%ymm0,%ymm0 1620 vpand 32+128(%rax),%ymm1,%ymm1 1621 vpand 64+128(%rax),%ymm2,%ymm2 1622 vpor %ymm0,%ymm1,%ymm4 1623 vpand 96+128(%rax),%ymm3,%ymm3 1624 vmovdqa 128-128(%rsi),%ymm0 1625 vmovdqa 160-128(%rsi),%ymm1 1626 vpor %ymm2,%ymm3,%ymm5 1627 vmovdqa 192-128(%rsi),%ymm2 1628 vmovdqa 224-128(%rsi),%ymm3 1629 vpand 128+128(%rax),%ymm0,%ymm0 1630 vpand 160+128(%rax),%ymm1,%ymm1 1631 vpand 192+128(%rax),%ymm2,%ymm2 1632 vpor %ymm0,%ymm4,%ymm4 1633 vpand 224+128(%rax),%ymm3,%ymm3 1634 vpand 256-128(%rsi),%ymm8,%ymm0 1635 vpor %ymm1,%ymm5,%ymm5 1636 vpand 288-128(%rsi),%ymm9,%ymm1 1637 vpor %ymm2,%ymm4,%ymm4 1638 vpand 320-128(%rsi),%ymm10,%ymm2 1639 vpor %ymm3,%ymm5,%ymm5 1640 vpand 352-128(%rsi),%ymm11,%ymm3 1641 vpor %ymm0,%ymm4,%ymm4 1642 vpand 384-128(%rsi),%ymm12,%ymm0 1643 vpor %ymm1,%ymm5,%ymm5 1644 vpand 416-128(%rsi),%ymm13,%ymm1 1645 vpor %ymm2,%ymm4,%ymm4 1646 vpand 448-128(%rsi),%ymm14,%ymm2 1647 vpor %ymm3,%ymm5,%ymm5 1648 vpand 480-128(%rsi),%ymm15,%ymm3 1649 leaq 512(%rsi),%rsi 1650 vpor %ymm0,%ymm4,%ymm4 1651 vpor %ymm1,%ymm5,%ymm5 1652 vpor %ymm2,%ymm4,%ymm4 1653 vpor %ymm3,%ymm5,%ymm5 1654 1655 vpor %ymm5,%ymm4,%ymm4 1656 vextracti128 $1,%ymm4,%xmm5 1657 vpor %xmm4,%xmm5,%xmm5 1658 vpermd %ymm5,%ymm7,%ymm5 1659 vmovdqu %ymm5,(%rdi) 1660 leaq 32(%rdi),%rdi 1661 decl %edx 1662 jnz .Loop_gather_1024 1663 1664 vpxor %ymm0,%ymm0,%ymm0 1665 vmovdqu %ymm0,(%rdi) 1666 vzeroupper 1667 leaq (%r11),%rsp 1668 .byte 0xf3,0xc3 1669.size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2 1670 1671.globl rsaz_avx2_eligible 1672.type rsaz_avx2_eligible,@function 1673.align 32 1674rsaz_avx2_eligible: 1675 movl OPENSSL_ia32cap_P+8(%rip),%eax 1676 movl $524544,%ecx 1677 movl $0,%edx 1678 andl %eax,%ecx 1679 cmpl $524544,%ecx 1680 cmovel %edx,%eax 1681 andl $32,%eax 1682 shrl $5,%eax 1683 .byte 0xf3,0xc3 1684.size rsaz_avx2_eligible,.-rsaz_avx2_eligible 1685 1686.align 64 1687.Land_mask: 1688.quad 0x1fffffff,0x1fffffff,0x1fffffff,-1 1689.Lscatter_permd: 1690.long 0,2,4,6,7,7,7,7 1691.Lgather_permd: 1692.long 0,7,1,7,2,7,3,7 1693.Linc: 1694.long 0,0,0,0, 1,1,1,1 1695.long 2,2,2,2, 3,3,3,3 1696.long 4,4,4,4, 4,4,4,4 1697.align 64 1698