.text

.globl  rsaz_1024_sqr_avx2
.type   rsaz_1024_sqr_avx2,@function
.align  64
rsaz_1024_sqr_avx2:
.cfi_startproc
        leaq    (%rsp),%rax
.cfi_def_cfa_register   %rax
        pushq   %rbx
.cfi_offset     %rbx,-16
        pushq   %rbp
.cfi_offset     %rbp,-24
        pushq   %r12
.cfi_offset     %r12,-32
        pushq   %r13
.cfi_offset     %r13,-40
        pushq   %r14
.cfi_offset     %r14,-48
        pushq   %r15
.cfi_offset     %r15,-56
        vzeroupper
        movq    %rax,%rbp
.cfi_def_cfa_register   %rbp
        movq    %rdx,%r13
        subq    $832,%rsp
        movq    %r13,%r15
        subq    $-128,%rdi
        subq    $-128,%rsi
        subq    $-128,%r13

        andq    $4095,%r15
        addq    $320,%r15
        shrq    $12,%r15
        vpxor   %ymm9,%ymm9,%ymm9
        jz      .Lsqr_1024_no_n_copy





        subq    $320,%rsp
        vmovdqu 0-128(%r13),%ymm0
        andq    $-2048,%rsp
        vmovdqu 32-128(%r13),%ymm1
        vmovdqu 64-128(%r13),%ymm2
        vmovdqu 96-128(%r13),%ymm3
        vmovdqu 128-128(%r13),%ymm4
        vmovdqu 160-128(%r13),%ymm5
        vmovdqu 192-128(%r13),%ymm6
        vmovdqu 224-128(%r13),%ymm7
        vmovdqu 256-128(%r13),%ymm8
        leaq    832+128(%rsp),%r13
        vmovdqu %ymm0,0-128(%r13)
        vmovdqu %ymm1,32-128(%r13)
        vmovdqu %ymm2,64-128(%r13)
        vmovdqu %ymm3,96-128(%r13)
        vmovdqu %ymm4,128-128(%r13)
        vmovdqu %ymm5,160-128(%r13)
        vmovdqu %ymm6,192-128(%r13)
        vmovdqu %ymm7,224-128(%r13)
        vmovdqu %ymm8,256-128(%r13)
        vmovdqu %ymm9,288-128(%r13)

.Lsqr_1024_no_n_copy:
        andq    $-1024,%rsp

        vmovdqu 32-128(%rsi),%ymm1
        vmovdqu 64-128(%rsi),%ymm2
        vmovdqu 96-128(%rsi),%ymm3
        vmovdqu 128-128(%rsi),%ymm4
        vmovdqu 160-128(%rsi),%ymm5
        vmovdqu 192-128(%rsi),%ymm6
        vmovdqu 224-128(%rsi),%ymm7
        vmovdqu 256-128(%rsi),%ymm8

        leaq    192(%rsp),%rbx
        vmovdqu .Land_mask(%rip),%ymm15
        jmp     .LOOP_GRANDE_SQR_1024

.align  32
.LOOP_GRANDE_SQR_1024:
        leaq    576+128(%rsp),%r9
        leaq    448(%rsp),%r12




        vpaddq  %ymm1,%ymm1,%ymm1
        vpbroadcastq    0-128(%rsi),%ymm10
        vpaddq  %ymm2,%ymm2,%ymm2
        vmovdqa %ymm1,0-128(%r9)
        vpaddq  %ymm3,%ymm3,%ymm3
        vmovdqa %ymm2,32-128(%r9)
        vpaddq  %ymm4,%ymm4,%ymm4
        vmovdqa %ymm3,64-128(%r9)
        vpaddq  %ymm5,%ymm5,%ymm5
        vmovdqa %ymm4,96-128(%r9)
        vpaddq  %ymm6,%ymm6,%ymm6
        vmovdqa %ymm5,128-128(%r9)
        vpaddq  %ymm7,%ymm7,%ymm7
        vmovdqa %ymm6,160-128(%r9)
        vpaddq  %ymm8,%ymm8,%ymm8
        vmovdqa %ymm7,192-128(%r9)
        vpxor   %ymm9,%ymm9,%ymm9
        vmovdqa %ymm8,224-128(%r9)

        vpmuludq        0-128(%rsi),%ymm10,%ymm0
        vpbroadcastq    32-128(%rsi),%ymm11
        vmovdqu %ymm9,288-192(%rbx)
        vpmuludq        %ymm10,%ymm1,%ymm1
        vmovdqu %ymm9,320-448(%r12)
        vpmuludq        %ymm10,%ymm2,%ymm2
        vmovdqu %ymm9,352-448(%r12)
        vpmuludq        %ymm10,%ymm3,%ymm3
        vmovdqu %ymm9,384-448(%r12)
        vpmuludq        %ymm10,%ymm4,%ymm4
        vmovdqu %ymm9,416-448(%r12)
        vpmuludq        %ymm10,%ymm5,%ymm5
        vmovdqu %ymm9,448-448(%r12)
        vpmuludq        %ymm10,%ymm6,%ymm6
        vmovdqu %ymm9,480-448(%r12)
        vpmuludq        %ymm10,%ymm7,%ymm7
        vmovdqu %ymm9,512-448(%r12)
        vpmuludq        %ymm10,%ymm8,%ymm8
        vpbroadcastq    64-128(%rsi),%ymm10
        vmovdqu %ymm9,544-448(%r12)

        movq    %rsi,%r15
        movl    $4,%r14d
        jmp     .Lsqr_entry_1024
.align  32
.LOOP_SQR_1024:
        vpbroadcastq    32-128(%r15),%ymm11
        vpmuludq        0-128(%rsi),%ymm10,%ymm0
        vpaddq  0-192(%rbx),%ymm0,%ymm0
        vpmuludq        0-128(%r9),%ymm10,%ymm1
        vpaddq  32-192(%rbx),%ymm1,%ymm1
        vpmuludq        32-128(%r9),%ymm10,%ymm2
        vpaddq  64-192(%rbx),%ymm2,%ymm2
        vpmuludq        64-128(%r9),%ymm10,%ymm3
        vpaddq  96-192(%rbx),%ymm3,%ymm3
        vpmuludq        96-128(%r9),%ymm10,%ymm4
        vpaddq  128-192(%rbx),%ymm4,%ymm4
        vpmuludq        128-128(%r9),%ymm10,%ymm5
        vpaddq  160-192(%rbx),%ymm5,%ymm5
        vpmuludq        160-128(%r9),%ymm10,%ymm6
        vpaddq  192-192(%rbx),%ymm6,%ymm6
        vpmuludq        192-128(%r9),%ymm10,%ymm7
        vpaddq  224-192(%rbx),%ymm7,%ymm7
        vpmuludq        224-128(%r9),%ymm10,%ymm8
        vpbroadcastq    64-128(%r15),%ymm10
        vpaddq  256-192(%rbx),%ymm8,%ymm8
.Lsqr_entry_1024:
        vmovdqu %ymm0,0-192(%rbx)
        vmovdqu %ymm1,32-192(%rbx)

        vpmuludq        32-128(%rsi),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        32-128(%r9),%ymm11,%ymm14
        vpaddq  %ymm14,%ymm3,%ymm3
        vpmuludq        64-128(%r9),%ymm11,%ymm13
        vpaddq  %ymm13,%ymm4,%ymm4
        vpmuludq        96-128(%r9),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        128-128(%r9),%ymm11,%ymm14
        vpaddq  %ymm14,%ymm6,%ymm6
        vpmuludq        160-128(%r9),%ymm11,%ymm13
        vpaddq  %ymm13,%ymm7,%ymm7
        vpmuludq        192-128(%r9),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        224-128(%r9),%ymm11,%ymm0
        vpbroadcastq    96-128(%r15),%ymm11
        vpaddq  288-192(%rbx),%ymm0,%ymm0

        vmovdqu %ymm2,64-192(%rbx)
        vmovdqu %ymm3,96-192(%rbx)

        vpmuludq        64-128(%rsi),%ymm10,%ymm13
        vpaddq  %ymm13,%ymm4,%ymm4
        vpmuludq        64-128(%r9),%ymm10,%ymm12
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        96-128(%r9),%ymm10,%ymm14
        vpaddq  %ymm14,%ymm6,%ymm6
        vpmuludq        128-128(%r9),%ymm10,%ymm13
        vpaddq  %ymm13,%ymm7,%ymm7
        vpmuludq        160-128(%r9),%ymm10,%ymm12
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        192-128(%r9),%ymm10,%ymm14
        vpaddq  %ymm14,%ymm0,%ymm0
        vpmuludq        224-128(%r9),%ymm10,%ymm1
        vpbroadcastq    128-128(%r15),%ymm10
        vpaddq  320-448(%r12),%ymm1,%ymm1

        vmovdqu %ymm4,128-192(%rbx)
        vmovdqu %ymm5,160-192(%rbx)

        vpmuludq        96-128(%rsi),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm6,%ymm6
        vpmuludq        96-128(%r9),%ymm11,%ymm14
        vpaddq  %ymm14,%ymm7,%ymm7
        vpmuludq        128-128(%r9),%ymm11,%ymm13
        vpaddq  %ymm13,%ymm8,%ymm8
        vpmuludq        160-128(%r9),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm0,%ymm0
        vpmuludq        192-128(%r9),%ymm11,%ymm14
        vpaddq  %ymm14,%ymm1,%ymm1
        vpmuludq        224-128(%r9),%ymm11,%ymm2
        vpbroadcastq    160-128(%r15),%ymm11
        vpaddq  352-448(%r12),%ymm2,%ymm2

        vmovdqu %ymm6,192-192(%rbx)
        vmovdqu %ymm7,224-192(%rbx)

        vpmuludq        128-128(%rsi),%ymm10,%ymm12
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        128-128(%r9),%ymm10,%ymm14
        vpaddq  %ymm14,%ymm0,%ymm0
        vpmuludq        160-128(%r9),%ymm10,%ymm13
        vpaddq  %ymm13,%ymm1,%ymm1
        vpmuludq        192-128(%r9),%ymm10,%ymm12
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        224-128(%r9),%ymm10,%ymm3
        vpbroadcastq    192-128(%r15),%ymm10
        vpaddq  384-448(%r12),%ymm3,%ymm3

        vmovdqu %ymm8,256-192(%rbx)
        vmovdqu %ymm0,288-192(%rbx)
        leaq    8(%rbx),%rbx

        vpmuludq        160-128(%rsi),%ymm11,%ymm13
        vpaddq  %ymm13,%ymm1,%ymm1
        vpmuludq        160-128(%r9),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        192-128(%r9),%ymm11,%ymm14
        vpaddq  %ymm14,%ymm3,%ymm3
        vpmuludq        224-128(%r9),%ymm11,%ymm4
        vpbroadcastq    224-128(%r15),%ymm11
        vpaddq  416-448(%r12),%ymm4,%ymm4

        vmovdqu %ymm1,320-448(%r12)
        vmovdqu %ymm2,352-448(%r12)

        vpmuludq        192-128(%rsi),%ymm10,%ymm12
        vpaddq  %ymm12,%ymm3,%ymm3
        vpmuludq        192-128(%r9),%ymm10,%ymm14
        vpbroadcastq    256-128(%r15),%ymm0
        vpaddq  %ymm14,%ymm4,%ymm4
        vpmuludq        224-128(%r9),%ymm10,%ymm5
        vpbroadcastq    0+8-128(%r15),%ymm10
        vpaddq  448-448(%r12),%ymm5,%ymm5

        vmovdqu %ymm3,384-448(%r12)
        vmovdqu %ymm4,416-448(%r12)
        leaq    8(%r15),%r15

        vpmuludq        224-128(%rsi),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        224-128(%r9),%ymm11,%ymm6
        vpaddq  480-448(%r12),%ymm6,%ymm6

        vpmuludq        256-128(%rsi),%ymm0,%ymm7
        vmovdqu %ymm5,448-448(%r12)
        vpaddq  512-448(%r12),%ymm7,%ymm7
        vmovdqu %ymm6,480-448(%r12)
        vmovdqu %ymm7,512-448(%r12)
        leaq    8(%r12),%r12

        decl    %r14d
        jnz     .LOOP_SQR_1024

        vmovdqu 256(%rsp),%ymm8
        vmovdqu 288(%rsp),%ymm1
        vmovdqu 320(%rsp),%ymm2
        leaq    192(%rsp),%rbx

        vpsrlq  $29,%ymm8,%ymm14
        vpand   %ymm15,%ymm8,%ymm8
        vpsrlq  $29,%ymm1,%ymm11
        vpand   %ymm15,%ymm1,%ymm1

        vpermq  $0x93,%ymm14,%ymm14
        vpxor   %ymm9,%ymm9,%ymm9
        vpermq  $0x93,%ymm11,%ymm11

        vpblendd        $3,%ymm9,%ymm14,%ymm10
        vpblendd        $3,%ymm14,%ymm11,%ymm14
        vpaddq  %ymm10,%ymm8,%ymm8
        vpblendd        $3,%ymm11,%ymm9,%ymm11
        vpaddq  %ymm14,%ymm1,%ymm1
        vpaddq  %ymm11,%ymm2,%ymm2
        vmovdqu %ymm1,288-192(%rbx)
        vmovdqu %ymm2,320-192(%rbx)

        movq    (%rsp),%rax
        movq    8(%rsp),%r10
        movq    16(%rsp),%r11
        movq    24(%rsp),%r12
        vmovdqu 32(%rsp),%ymm1
        vmovdqu 64-192(%rbx),%ymm2
        vmovdqu 96-192(%rbx),%ymm3
        vmovdqu 128-192(%rbx),%ymm4
        vmovdqu 160-192(%rbx),%ymm5
        vmovdqu 192-192(%rbx),%ymm6
        vmovdqu 224-192(%rbx),%ymm7

        movq    %rax,%r9
        imull   %ecx,%eax
        andl    $0x1fffffff,%eax
        vmovd   %eax,%xmm12

        movq    %rax,%rdx
        imulq   -128(%r13),%rax
        vpbroadcastq    %xmm12,%ymm12
        addq    %rax,%r9
        movq    %rdx,%rax
        imulq   8-128(%r13),%rax
        shrq    $29,%r9
        addq    %rax,%r10
        movq    %rdx,%rax
        imulq   16-128(%r13),%rax
        addq    %r9,%r10
        addq    %rax,%r11
        imulq   24-128(%r13),%rdx
        addq    %rdx,%r12

        movq    %r10,%rax
        imull   %ecx,%eax
        andl    $0x1fffffff,%eax

        movl    $9,%r14d
        jmp     .LOOP_REDUCE_1024

.align  32
.LOOP_REDUCE_1024:
        vmovd   %eax,%xmm13
        vpbroadcastq    %xmm13,%ymm13

        vpmuludq        32-128(%r13),%ymm12,%ymm10
        movq    %rax,%rdx
        imulq   -128(%r13),%rax
        vpaddq  %ymm10,%ymm1,%ymm1
        addq    %rax,%r10
        vpmuludq        64-128(%r13),%ymm12,%ymm14
        movq    %rdx,%rax
        imulq   8-128(%r13),%rax
        vpaddq  %ymm14,%ymm2,%ymm2
        vpmuludq        96-128(%r13),%ymm12,%ymm11
.byte   0x67
        addq    %rax,%r11
.byte   0x67
        movq    %rdx,%rax
        imulq   16-128(%r13),%rax
        shrq    $29,%r10
        vpaddq  %ymm11,%ymm3,%ymm3
        vpmuludq        128-128(%r13),%ymm12,%ymm10
        addq    %rax,%r12
        addq    %r10,%r11
        vpaddq  %ymm10,%ymm4,%ymm4
        vpmuludq        160-128(%r13),%ymm12,%ymm14
        movq    %r11,%rax
        imull   %ecx,%eax
        vpaddq  %ymm14,%ymm5,%ymm5
        vpmuludq        192-128(%r13),%ymm12,%ymm11
        andl    $0x1fffffff,%eax
        vpaddq  %ymm11,%ymm6,%ymm6
        vpmuludq        224-128(%r13),%ymm12,%ymm10
        vpaddq  %ymm10,%ymm7,%ymm7
        vpmuludq        256-128(%r13),%ymm12,%ymm14
        vmovd   %eax,%xmm12

        vpaddq  %ymm14,%ymm8,%ymm8

        vpbroadcastq    %xmm12,%ymm12

        vpmuludq        32-8-128(%r13),%ymm13,%ymm11
        vmovdqu 96-8-128(%r13),%ymm14
        movq    %rax,%rdx
        imulq   -128(%r13),%rax
        vpaddq  %ymm11,%ymm1,%ymm1
        vpmuludq        64-8-128(%r13),%ymm13,%ymm10
        vmovdqu 128-8-128(%r13),%ymm11
        addq    %rax,%r11
        movq    %rdx,%rax
        imulq   8-128(%r13),%rax
        vpaddq  %ymm10,%ymm2,%ymm2
        addq    %r12,%rax
        shrq    $29,%r11
        vpmuludq        %ymm13,%ymm14,%ymm14
        vmovdqu 160-8-128(%r13),%ymm10
        addq    %r11,%rax
        vpaddq  %ymm14,%ymm3,%ymm3
        vpmuludq        %ymm13,%ymm11,%ymm11
        vmovdqu 192-8-128(%r13),%ymm14
.byte   0x67
        movq    %rax,%r12
        imull   %ecx,%eax
        vpaddq  %ymm11,%ymm4,%ymm4
        vpmuludq        %ymm13,%ymm10,%ymm10
.byte   0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
        andl    $0x1fffffff,%eax
        vpaddq  %ymm10,%ymm5,%ymm5
        vpmuludq        %ymm13,%ymm14,%ymm14
        vmovdqu 256-8-128(%r13),%ymm10
        vpaddq  %ymm14,%ymm6,%ymm6
        vpmuludq        %ymm13,%ymm11,%ymm11
        vmovdqu 288-8-128(%r13),%ymm9
        vmovd   %eax,%xmm0
        imulq   -128(%r13),%rax
        vpaddq  %ymm11,%ymm7,%ymm7
        vpmuludq        %ymm13,%ymm10,%ymm10
        vmovdqu 32-16-128(%r13),%ymm14
        vpbroadcastq    %xmm0,%ymm0
        vpaddq  %ymm10,%ymm8,%ymm8
        vpmuludq        %ymm13,%ymm9,%ymm9
        vmovdqu 64-16-128(%r13),%ymm11
        addq    %rax,%r12

        vmovdqu 32-24-128(%r13),%ymm13
        vpmuludq        %ymm12,%ymm14,%ymm14
        vmovdqu 96-16-128(%r13),%ymm10
        vpaddq  %ymm14,%ymm1,%ymm1
        vpmuludq        %ymm0,%ymm13,%ymm13
        vpmuludq        %ymm12,%ymm11,%ymm11
.byte   0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
        vpaddq  %ymm1,%ymm13,%ymm13
        vpaddq  %ymm11,%ymm2,%ymm2
        vpmuludq        %ymm12,%ymm10,%ymm10
        vmovdqu 160-16-128(%r13),%ymm11
.byte   0x67
        vmovq   %xmm13,%rax
        vmovdqu %ymm13,(%rsp)
        vpaddq  %ymm10,%ymm3,%ymm3
        vpmuludq        %ymm12,%ymm14,%ymm14
        vmovdqu 192-16-128(%r13),%ymm10
        vpaddq  %ymm14,%ymm4,%ymm4
        vpmuludq        %ymm12,%ymm11,%ymm11
        vmovdqu 224-16-128(%r13),%ymm14
        vpaddq  %ymm11,%ymm5,%ymm5
        vpmuludq        %ymm12,%ymm10,%ymm10
        vmovdqu 256-16-128(%r13),%ymm11
        vpaddq  %ymm10,%ymm6,%ymm6
        vpmuludq        %ymm12,%ymm14,%ymm14
        shrq    $29,%r12
        vmovdqu 288-16-128(%r13),%ymm10
        addq    %r12,%rax
        vpaddq  %ymm14,%ymm7,%ymm7
        vpmuludq        %ymm12,%ymm11,%ymm11

        movq    %rax,%r9
        imull   %ecx,%eax
        vpaddq  %ymm11,%ymm8,%ymm8
        vpmuludq        %ymm12,%ymm10,%ymm10
        andl    $0x1fffffff,%eax
        vmovd   %eax,%xmm12
        vmovdqu 96-24-128(%r13),%ymm11
.byte   0x67
        vpaddq  %ymm10,%ymm9,%ymm9
        vpbroadcastq    %xmm12,%ymm12

        vpmuludq        64-24-128(%r13),%ymm0,%ymm14
        vmovdqu 128-24-128(%r13),%ymm10
        movq    %rax,%rdx
        imulq   -128(%r13),%rax
        movq    8(%rsp),%r10
        vpaddq  %ymm14,%ymm2,%ymm1
        vpmuludq        %ymm0,%ymm11,%ymm11
        vmovdqu 160-24-128(%r13),%ymm14
        addq    %rax,%r9
        movq    %rdx,%rax
        imulq   8-128(%r13),%rax
.byte   0x67
        shrq    $29,%r9
        movq    16(%rsp),%r11
        vpaddq  %ymm11,%ymm3,%ymm2
        vpmuludq        %ymm0,%ymm10,%ymm10
        vmovdqu 192-24-128(%r13),%ymm11
        addq    %rax,%r10
        movq    %rdx,%rax
        imulq   16-128(%r13),%rax
        vpaddq  %ymm10,%ymm4,%ymm3
        vpmuludq        %ymm0,%ymm14,%ymm14
        vmovdqu 224-24-128(%r13),%ymm10
        imulq   24-128(%r13),%rdx
        addq    %rax,%r11
        leaq    (%r9,%r10,1),%rax
        vpaddq  %ymm14,%ymm5,%ymm4
        vpmuludq        %ymm0,%ymm11,%ymm11
        vmovdqu 256-24-128(%r13),%ymm14
        movq    %rax,%r10
        imull   %ecx,%eax
        vpmuludq        %ymm0,%ymm10,%ymm10
        vpaddq  %ymm11,%ymm6,%ymm5
        vmovdqu 288-24-128(%r13),%ymm11
        andl    $0x1fffffff,%eax
        vpaddq  %ymm10,%ymm7,%ymm6
        vpmuludq        %ymm0,%ymm14,%ymm14
        addq    24(%rsp),%rdx
        vpaddq  %ymm14,%ymm8,%ymm7
        vpmuludq        %ymm0,%ymm11,%ymm11
        vpaddq  %ymm11,%ymm9,%ymm8
        vmovq   %r12,%xmm9
        movq    %rdx,%r12

        decl    %r14d
        jnz     .LOOP_REDUCE_1024
        leaq    448(%rsp),%r12
        vpaddq  %ymm9,%ymm13,%ymm0
        vpxor   %ymm9,%ymm9,%ymm9

        vpaddq  288-192(%rbx),%ymm0,%ymm0
        vpaddq  320-448(%r12),%ymm1,%ymm1
        vpaddq  352-448(%r12),%ymm2,%ymm2
        vpaddq  384-448(%r12),%ymm3,%ymm3
        vpaddq  416-448(%r12),%ymm4,%ymm4
        vpaddq  448-448(%r12),%ymm5,%ymm5
        vpaddq  480-448(%r12),%ymm6,%ymm6
        vpaddq  512-448(%r12),%ymm7,%ymm7
        vpaddq  544-448(%r12),%ymm8,%ymm8

        vpsrlq  $29,%ymm0,%ymm14
        vpand   %ymm15,%ymm0,%ymm0
        vpsrlq  $29,%ymm1,%ymm11
        vpand   %ymm15,%ymm1,%ymm1
        vpsrlq  $29,%ymm2,%ymm12
        vpermq  $0x93,%ymm14,%ymm14
        vpand   %ymm15,%ymm2,%ymm2
        vpsrlq  $29,%ymm3,%ymm13
        vpermq  $0x93,%ymm11,%ymm11
        vpand   %ymm15,%ymm3,%ymm3
        vpermq  $0x93,%ymm12,%ymm12

        vpblendd        $3,%ymm9,%ymm14,%ymm10
        vpermq  $0x93,%ymm13,%ymm13
        vpblendd        $3,%ymm14,%ymm11,%ymm14
        vpaddq  %ymm10,%ymm0,%ymm0
        vpblendd        $3,%ymm11,%ymm12,%ymm11
        vpaddq  %ymm14,%ymm1,%ymm1
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm11,%ymm2,%ymm2
        vpblendd        $3,%ymm13,%ymm9,%ymm13
        vpaddq  %ymm12,%ymm3,%ymm3
        vpaddq  %ymm13,%ymm4,%ymm4

        vpsrlq  $29,%ymm0,%ymm14
        vpand   %ymm15,%ymm0,%ymm0
        vpsrlq  $29,%ymm1,%ymm11
        vpand   %ymm15,%ymm1,%ymm1
        vpsrlq  $29,%ymm2,%ymm12
        vpermq  $0x93,%ymm14,%ymm14
        vpand   %ymm15,%ymm2,%ymm2
        vpsrlq  $29,%ymm3,%ymm13
        vpermq  $0x93,%ymm11,%ymm11
        vpand   %ymm15,%ymm3,%ymm3
        vpermq  $0x93,%ymm12,%ymm12

        vpblendd        $3,%ymm9,%ymm14,%ymm10
        vpermq  $0x93,%ymm13,%ymm13
        vpblendd        $3,%ymm14,%ymm11,%ymm14
        vpaddq  %ymm10,%ymm0,%ymm0
        vpblendd        $3,%ymm11,%ymm12,%ymm11
        vpaddq  %ymm14,%ymm1,%ymm1
        vmovdqu %ymm0,0-128(%rdi)
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm11,%ymm2,%ymm2
        vmovdqu %ymm1,32-128(%rdi)
        vpblendd        $3,%ymm13,%ymm9,%ymm13
        vpaddq  %ymm12,%ymm3,%ymm3
        vmovdqu %ymm2,64-128(%rdi)
        vpaddq  %ymm13,%ymm4,%ymm4
        vmovdqu %ymm3,96-128(%rdi)
        vpsrlq  $29,%ymm4,%ymm14
        vpand   %ymm15,%ymm4,%ymm4
        vpsrlq  $29,%ymm5,%ymm11
        vpand   %ymm15,%ymm5,%ymm5
        vpsrlq  $29,%ymm6,%ymm12
        vpermq  $0x93,%ymm14,%ymm14
        vpand   %ymm15,%ymm6,%ymm6
        vpsrlq  $29,%ymm7,%ymm13
        vpermq  $0x93,%ymm11,%ymm11
        vpand   %ymm15,%ymm7,%ymm7
        vpsrlq  $29,%ymm8,%ymm0
        vpermq  $0x93,%ymm12,%ymm12
        vpand   %ymm15,%ymm8,%ymm8
        vpermq  $0x93,%ymm13,%ymm13

        vpblendd        $3,%ymm9,%ymm14,%ymm10
        vpermq  $0x93,%ymm0,%ymm0
        vpblendd        $3,%ymm14,%ymm11,%ymm14
        vpaddq  %ymm10,%ymm4,%ymm4
        vpblendd        $3,%ymm11,%ymm12,%ymm11
        vpaddq  %ymm14,%ymm5,%ymm5
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm11,%ymm6,%ymm6
        vpblendd        $3,%ymm13,%ymm0,%ymm13
        vpaddq  %ymm12,%ymm7,%ymm7
        vpaddq  %ymm13,%ymm8,%ymm8

        vpsrlq  $29,%ymm4,%ymm14
        vpand   %ymm15,%ymm4,%ymm4
        vpsrlq  $29,%ymm5,%ymm11
        vpand   %ymm15,%ymm5,%ymm5
        vpsrlq  $29,%ymm6,%ymm12
        vpermq  $0x93,%ymm14,%ymm14
        vpand   %ymm15,%ymm6,%ymm6
        vpsrlq  $29,%ymm7,%ymm13
        vpermq  $0x93,%ymm11,%ymm11
        vpand   %ymm15,%ymm7,%ymm7
        vpsrlq  $29,%ymm8,%ymm0
        vpermq  $0x93,%ymm12,%ymm12
        vpand   %ymm15,%ymm8,%ymm8
        vpermq  $0x93,%ymm13,%ymm13

        vpblendd        $3,%ymm9,%ymm14,%ymm10
        vpermq  $0x93,%ymm0,%ymm0
        vpblendd        $3,%ymm14,%ymm11,%ymm14
        vpaddq  %ymm10,%ymm4,%ymm4
        vpblendd        $3,%ymm11,%ymm12,%ymm11
        vpaddq  %ymm14,%ymm5,%ymm5
        vmovdqu %ymm4,128-128(%rdi)
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm11,%ymm6,%ymm6
        vmovdqu %ymm5,160-128(%rdi)
        vpblendd        $3,%ymm13,%ymm0,%ymm13
        vpaddq  %ymm12,%ymm7,%ymm7
        vmovdqu %ymm6,192-128(%rdi)
        vpaddq  %ymm13,%ymm8,%ymm8
        vmovdqu %ymm7,224-128(%rdi)
        vmovdqu %ymm8,256-128(%rdi)

        movq    %rdi,%rsi
        decl    %r8d
        jne     .LOOP_GRANDE_SQR_1024

        vzeroall
        movq    %rbp,%rax
.cfi_def_cfa_register   %rax
        movq    -48(%rax),%r15
.cfi_restore    %r15
        movq    -40(%rax),%r14
.cfi_restore    %r14
        movq    -32(%rax),%r13
.cfi_restore    %r13
        movq    -24(%rax),%r12
.cfi_restore    %r12
        movq    -16(%rax),%rbp
.cfi_restore    %rbp
        movq    -8(%rax),%rbx
.cfi_restore    %rbx
        leaq    (%rax),%rsp
.cfi_def_cfa_register   %rsp
.Lsqr_1024_epilogue:
        .byte   0xf3,0xc3
.cfi_endproc
.size   rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
.globl  rsaz_1024_mul_avx2
.type   rsaz_1024_mul_avx2,@function
.align  64
rsaz_1024_mul_avx2:
.cfi_startproc
        leaq    (%rsp),%rax
.cfi_def_cfa_register   %rax
        pushq   %rbx
.cfi_offset     %rbx,-16
        pushq   %rbp
.cfi_offset     %rbp,-24
        pushq   %r12
.cfi_offset     %r12,-32
        pushq   %r13
.cfi_offset     %r13,-40
        pushq   %r14
.cfi_offset     %r14,-48
        pushq   %r15
.cfi_offset     %r15,-56
        movq    %rax,%rbp
.cfi_def_cfa_register   %rbp
        vzeroall
        movq    %rdx,%r13
        subq    $64,%rsp






.byte   0x67,0x67
        movq    %rsi,%r15
        andq    $4095,%r15
        addq    $320,%r15
        shrq    $12,%r15
        movq    %rsi,%r15
        cmovnzq %r13,%rsi
        cmovnzq %r15,%r13

        movq    %rcx,%r15
        subq    $-128,%rsi
        subq    $-128,%rcx
        subq    $-128,%rdi

        andq    $4095,%r15
        addq    $320,%r15
.byte   0x67,0x67
        shrq    $12,%r15
        jz      .Lmul_1024_no_n_copy





        subq    $320,%rsp
        vmovdqu 0-128(%rcx),%ymm0
        andq    $-512,%rsp
        vmovdqu 32-128(%rcx),%ymm1
        vmovdqu 64-128(%rcx),%ymm2
        vmovdqu 96-128(%rcx),%ymm3
        vmovdqu 128-128(%rcx),%ymm4
        vmovdqu 160-128(%rcx),%ymm5
        vmovdqu 192-128(%rcx),%ymm6
        vmovdqu 224-128(%rcx),%ymm7
        vmovdqu 256-128(%rcx),%ymm8
        leaq    64+128(%rsp),%rcx
        vmovdqu %ymm0,0-128(%rcx)
        vpxor   %ymm0,%ymm0,%ymm0
        vmovdqu %ymm1,32-128(%rcx)
        vpxor   %ymm1,%ymm1,%ymm1
        vmovdqu %ymm2,64-128(%rcx)
        vpxor   %ymm2,%ymm2,%ymm2
        vmovdqu %ymm3,96-128(%rcx)
        vpxor   %ymm3,%ymm3,%ymm3
        vmovdqu %ymm4,128-128(%rcx)
        vpxor   %ymm4,%ymm4,%ymm4
        vmovdqu %ymm5,160-128(%rcx)
        vpxor   %ymm5,%ymm5,%ymm5
        vmovdqu %ymm6,192-128(%rcx)
        vpxor   %ymm6,%ymm6,%ymm6
        vmovdqu %ymm7,224-128(%rcx)
        vpxor   %ymm7,%ymm7,%ymm7
        vmovdqu %ymm8,256-128(%rcx)
        vmovdqa %ymm0,%ymm8
        vmovdqu %ymm9,288-128(%rcx)
.Lmul_1024_no_n_copy:
        andq    $-64,%rsp

        movq    (%r13),%rbx
        vpbroadcastq    (%r13),%ymm10
        vmovdqu %ymm0,(%rsp)
        xorq    %r9,%r9
.byte   0x67
        xorq    %r10,%r10
        xorq    %r11,%r11
        xorq    %r12,%r12

        vmovdqu .Land_mask(%rip),%ymm15
        movl    $9,%r14d
        vmovdqu %ymm9,288-128(%rdi)
        jmp     .Loop_mul_1024

.align  32
.Loop_mul_1024:
        vpsrlq  $29,%ymm3,%ymm9
        movq    %rbx,%rax
        imulq   -128(%rsi),%rax
        addq    %r9,%rax
        movq    %rbx,%r10
        imulq   8-128(%rsi),%r10
        addq    8(%rsp),%r10

        movq    %rax,%r9
        imull   %r8d,%eax
        andl    $0x1fffffff,%eax

        movq    %rbx,%r11
        imulq   16-128(%rsi),%r11
        addq    16(%rsp),%r11

        movq    %rbx,%r12
        imulq   24-128(%rsi),%r12
        addq    24(%rsp),%r12
        vpmuludq        32-128(%rsi),%ymm10,%ymm0
        vmovd   %eax,%xmm11
        vpaddq  %ymm0,%ymm1,%ymm1
        vpmuludq        64-128(%rsi),%ymm10,%ymm12
        vpbroadcastq    %xmm11,%ymm11
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        96-128(%rsi),%ymm10,%ymm13
        vpand   %ymm15,%ymm3,%ymm3
        vpaddq  %ymm13,%ymm3,%ymm3
        vpmuludq        128-128(%rsi),%ymm10,%ymm0
        vpaddq  %ymm0,%ymm4,%ymm4
        vpmuludq        160-128(%rsi),%ymm10,%ymm12
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        192-128(%rsi),%ymm10,%ymm13
        vpaddq  %ymm13,%ymm6,%ymm6
        vpmuludq        224-128(%rsi),%ymm10,%ymm0
        vpermq  $0x93,%ymm9,%ymm9
        vpaddq  %ymm0,%ymm7,%ymm7
        vpmuludq        256-128(%rsi),%ymm10,%ymm12
        vpbroadcastq    8(%r13),%ymm10
        vpaddq  %ymm12,%ymm8,%ymm8

        movq    %rax,%rdx
        imulq   -128(%rcx),%rax
        addq    %rax,%r9
        movq    %rdx,%rax
        imulq   8-128(%rcx),%rax
        addq    %rax,%r10
        movq    %rdx,%rax
        imulq   16-128(%rcx),%rax
        addq    %rax,%r11
        shrq    $29,%r9
        imulq   24-128(%rcx),%rdx
        addq    %rdx,%r12
        addq    %r9,%r10

        vpmuludq        32-128(%rcx),%ymm11,%ymm13
        vmovq   %xmm10,%rbx
        vpaddq  %ymm13,%ymm1,%ymm1
        vpmuludq        64-128(%rcx),%ymm11,%ymm0
        vpaddq  %ymm0,%ymm2,%ymm2
        vpmuludq        96-128(%rcx),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm3,%ymm3
        vpmuludq        128-128(%rcx),%ymm11,%ymm13
        vpaddq  %ymm13,%ymm4,%ymm4
        vpmuludq        160-128(%rcx),%ymm11,%ymm0
        vpaddq  %ymm0,%ymm5,%ymm5
        vpmuludq        192-128(%rcx),%ymm11,%ymm12
        vpaddq  %ymm12,%ymm6,%ymm6
        vpmuludq        224-128(%rcx),%ymm11,%ymm13
        vpblendd        $3,%ymm14,%ymm9,%ymm12
        vpaddq  %ymm13,%ymm7,%ymm7
        vpmuludq        256-128(%rcx),%ymm11,%ymm0
        vpaddq  %ymm12,%ymm3,%ymm3
        vpaddq  %ymm0,%ymm8,%ymm8

        movq    %rbx,%rax
        imulq   -128(%rsi),%rax
        addq    %rax,%r10
        vmovdqu -8+32-128(%rsi),%ymm12
        movq    %rbx,%rax
        imulq   8-128(%rsi),%rax
        addq    %rax,%r11
        vmovdqu -8+64-128(%rsi),%ymm13

        movq    %r10,%rax
        vpblendd        $0xfc,%ymm14,%ymm9,%ymm9
        imull   %r8d,%eax
        vpaddq  %ymm9,%ymm4,%ymm4
        andl    $0x1fffffff,%eax

        imulq   16-128(%rsi),%rbx
        addq    %rbx,%r12
        vpmuludq        %ymm10,%ymm12,%ymm12
        vmovd   %eax,%xmm11
        vmovdqu -8+96-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm1,%ymm1
        vpmuludq        %ymm10,%ymm13,%ymm13
        vpbroadcastq    %xmm11,%ymm11
        vmovdqu -8+128-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm2,%ymm2
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovdqu -8+160-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm3,%ymm3
        vpmuludq        %ymm10,%ymm12,%ymm12
        vmovdqu -8+192-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm4,%ymm4
        vpmuludq        %ymm10,%ymm13,%ymm13
        vmovdqu -8+224-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm5,%ymm5
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovdqu -8+256-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm6,%ymm6
        vpmuludq        %ymm10,%ymm12,%ymm12
        vmovdqu -8+288-128(%rsi),%ymm9
        vpaddq  %ymm12,%ymm7,%ymm7
        vpmuludq        %ymm10,%ymm13,%ymm13
        vpaddq  %ymm13,%ymm8,%ymm8
        vpmuludq        %ymm10,%ymm9,%ymm9
        vpbroadcastq    16(%r13),%ymm10

        movq    %rax,%rdx
        imulq   -128(%rcx),%rax
        addq    %rax,%r10
        vmovdqu -8+32-128(%rcx),%ymm0
        movq    %rdx,%rax
        imulq   8-128(%rcx),%rax
        addq    %rax,%r11
        vmovdqu -8+64-128(%rcx),%ymm12
        shrq    $29,%r10
        imulq   16-128(%rcx),%rdx
        addq    %rdx,%r12
        addq    %r10,%r11

        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovq   %xmm10,%rbx
        vmovdqu -8+96-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm1,%ymm1
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu -8+128-128(%rcx),%ymm0
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -8+160-128(%rcx),%ymm12
        vpaddq  %ymm13,%ymm3,%ymm3
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovdqu -8+192-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm4,%ymm4
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu -8+224-128(%rcx),%ymm0
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -8+256-128(%rcx),%ymm12
        vpaddq  %ymm13,%ymm6,%ymm6
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovdqu -8+288-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm7,%ymm7
        vpmuludq        %ymm11,%ymm12,%ymm12
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        %ymm11,%ymm13,%ymm13
        vpaddq  %ymm13,%ymm9,%ymm9

        vmovdqu -16+32-128(%rsi),%ymm0
        movq    %rbx,%rax
        imulq   -128(%rsi),%rax
        addq    %r11,%rax

        vmovdqu -16+64-128(%rsi),%ymm12
        movq    %rax,%r11
        imull   %r8d,%eax
        andl    $0x1fffffff,%eax

        imulq   8-128(%rsi),%rbx
        addq    %rbx,%r12
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovd   %eax,%xmm11
        vmovdqu -16+96-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm1,%ymm1
        vpmuludq        %ymm10,%ymm12,%ymm12
        vpbroadcastq    %xmm11,%ymm11
        vmovdqu -16+128-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        %ymm10,%ymm13,%ymm13
        vmovdqu -16+160-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm3,%ymm3
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovdqu -16+192-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm4,%ymm4
        vpmuludq        %ymm10,%ymm12,%ymm12
        vmovdqu -16+224-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        %ymm10,%ymm13,%ymm13
        vmovdqu -16+256-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm6,%ymm6
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovdqu -16+288-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm7,%ymm7
        vpmuludq        %ymm10,%ymm12,%ymm12
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        %ymm10,%ymm13,%ymm13
        vpbroadcastq    24(%r13),%ymm10
        vpaddq  %ymm13,%ymm9,%ymm9

        vmovdqu -16+32-128(%rcx),%ymm0
        movq    %rax,%rdx
        imulq   -128(%rcx),%rax
        addq    %rax,%r11
        vmovdqu -16+64-128(%rcx),%ymm12
        imulq   8-128(%rcx),%rdx
        addq    %rdx,%r12
        shrq    $29,%r11

        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovq   %xmm10,%rbx
        vmovdqu -16+96-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm1,%ymm1
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu -16+128-128(%rcx),%ymm0
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -16+160-128(%rcx),%ymm12
        vpaddq  %ymm13,%ymm3,%ymm3
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovdqu -16+192-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm4,%ymm4
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu -16+224-128(%rcx),%ymm0
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -16+256-128(%rcx),%ymm12
        vpaddq  %ymm13,%ymm6,%ymm6
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovdqu -16+288-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm7,%ymm7
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu -24+32-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -24+64-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm9,%ymm9

        addq    %r11,%r12
        imulq   -128(%rsi),%rbx
        addq    %rbx,%r12

        movq    %r12,%rax
        imull   %r8d,%eax
        andl    $0x1fffffff,%eax

        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovd   %eax,%xmm11
        vmovdqu -24+96-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm1,%ymm1
        vpmuludq        %ymm10,%ymm12,%ymm12
        vpbroadcastq    %xmm11,%ymm11
        vmovdqu -24+128-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm2,%ymm2
        vpmuludq        %ymm10,%ymm13,%ymm13
        vmovdqu -24+160-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm3,%ymm3
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovdqu -24+192-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm4,%ymm4
        vpmuludq        %ymm10,%ymm12,%ymm12
        vmovdqu -24+224-128(%rsi),%ymm0
        vpaddq  %ymm12,%ymm5,%ymm5
        vpmuludq        %ymm10,%ymm13,%ymm13
        vmovdqu -24+256-128(%rsi),%ymm12
        vpaddq  %ymm13,%ymm6,%ymm6
        vpmuludq        %ymm10,%ymm0,%ymm0
        vmovdqu -24+288-128(%rsi),%ymm13
        vpaddq  %ymm0,%ymm7,%ymm7
        vpmuludq        %ymm10,%ymm12,%ymm12
        vpaddq  %ymm12,%ymm8,%ymm8
        vpmuludq        %ymm10,%ymm13,%ymm13
        vpbroadcastq    32(%r13),%ymm10
        vpaddq  %ymm13,%ymm9,%ymm9
        addq    $32,%r13

        vmovdqu -24+32-128(%rcx),%ymm0
        imulq   -128(%rcx),%rax
        addq    %rax,%r12
        shrq    $29,%r12

        vmovdqu -24+64-128(%rcx),%ymm12
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovq   %xmm10,%rbx
        vmovdqu -24+96-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm1,%ymm0
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu %ymm0,(%rsp)
        vpaddq  %ymm12,%ymm2,%ymm1
        vmovdqu -24+128-128(%rcx),%ymm0
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -24+160-128(%rcx),%ymm12
        vpaddq  %ymm13,%ymm3,%ymm2
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovdqu -24+192-128(%rcx),%ymm13
        vpaddq  %ymm0,%ymm4,%ymm3
        vpmuludq        %ymm11,%ymm12,%ymm12
        vmovdqu -24+224-128(%rcx),%ymm0
        vpaddq  %ymm12,%ymm5,%ymm4
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovdqu -24+256-128(%rcx),%ymm12
        vpaddq  %ymm13,%ymm6,%ymm5
        vpmuludq        %ymm11,%ymm0,%ymm0
        vmovdqu -24+288-128(%rcx),%ymm13
        movq    %r12,%r9
        vpaddq  %ymm0,%ymm7,%ymm6
        vpmuludq        %ymm11,%ymm12,%ymm12
        addq    (%rsp),%r9
        vpaddq  %ymm12,%ymm8,%ymm7
        vpmuludq        %ymm11,%ymm13,%ymm13
        vmovq   %r12,%xmm12
        vpaddq  %ymm13,%ymm9,%ymm8

        decl    %r14d
        jnz     .Loop_mul_1024
        vpaddq  (%rsp),%ymm12,%ymm0

        vpsrlq  $29,%ymm0,%ymm12
        vpand   %ymm15,%ymm0,%ymm0
        vpsrlq  $29,%ymm1,%ymm13
        vpand   %ymm15,%ymm1,%ymm1
        vpsrlq  $29,%ymm2,%ymm10
        vpermq  $0x93,%ymm12,%ymm12
        vpand   %ymm15,%ymm2,%ymm2
        vpsrlq  $29,%ymm3,%ymm11
        vpermq  $0x93,%ymm13,%ymm13
        vpand   %ymm15,%ymm3,%ymm3

        vpblendd        $3,%ymm14,%ymm12,%ymm9
        vpermq  $0x93,%ymm10,%ymm10
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpermq  $0x93,%ymm11,%ymm11
        vpaddq  %ymm9,%ymm0,%ymm0
        vpblendd        $3,%ymm13,%ymm10,%ymm13
        vpaddq  %ymm12,%ymm1,%ymm1
        vpblendd        $3,%ymm10,%ymm11,%ymm10
        vpaddq  %ymm13,%ymm2,%ymm2
        vpblendd        $3,%ymm11,%ymm14,%ymm11
        vpaddq  %ymm10,%ymm3,%ymm3
        vpaddq  %ymm11,%ymm4,%ymm4

        vpsrlq  $29,%ymm0,%ymm12
        vpand   %ymm15,%ymm0,%ymm0
        vpsrlq  $29,%ymm1,%ymm13
        vpand   %ymm15,%ymm1,%ymm1
        vpsrlq  $29,%ymm2,%ymm10
        vpermq  $0x93,%ymm12,%ymm12
        vpand   %ymm15,%ymm2,%ymm2
        vpsrlq  $29,%ymm3,%ymm11
        vpermq  $0x93,%ymm13,%ymm13
        vpand   %ymm15,%ymm3,%ymm3
        vpermq  $0x93,%ymm10,%ymm10

        vpblendd        $3,%ymm14,%ymm12,%ymm9
        vpermq  $0x93,%ymm11,%ymm11
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm9,%ymm0,%ymm0
        vpblendd        $3,%ymm13,%ymm10,%ymm13
        vpaddq  %ymm12,%ymm1,%ymm1
        vpblendd        $3,%ymm10,%ymm11,%ymm10
        vpaddq  %ymm13,%ymm2,%ymm2
        vpblendd        $3,%ymm11,%ymm14,%ymm11
        vpaddq  %ymm10,%ymm3,%ymm3
        vpaddq  %ymm11,%ymm4,%ymm4

        vmovdqu %ymm0,0-128(%rdi)
        vmovdqu %ymm1,32-128(%rdi)
        vmovdqu %ymm2,64-128(%rdi)
        vmovdqu %ymm3,96-128(%rdi)
        vpsrlq  $29,%ymm4,%ymm12
        vpand   %ymm15,%ymm4,%ymm4
        vpsrlq  $29,%ymm5,%ymm13
        vpand   %ymm15,%ymm5,%ymm5
        vpsrlq  $29,%ymm6,%ymm10
        vpermq  $0x93,%ymm12,%ymm12
        vpand   %ymm15,%ymm6,%ymm6
        vpsrlq  $29,%ymm7,%ymm11
        vpermq  $0x93,%ymm13,%ymm13
        vpand   %ymm15,%ymm7,%ymm7
        vpsrlq  $29,%ymm8,%ymm0
        vpermq  $0x93,%ymm10,%ymm10
        vpand   %ymm15,%ymm8,%ymm8
        vpermq  $0x93,%ymm11,%ymm11

        vpblendd        $3,%ymm14,%ymm12,%ymm9
        vpermq  $0x93,%ymm0,%ymm0
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm9,%ymm4,%ymm4
        vpblendd        $3,%ymm13,%ymm10,%ymm13
        vpaddq  %ymm12,%ymm5,%ymm5
        vpblendd        $3,%ymm10,%ymm11,%ymm10
        vpaddq  %ymm13,%ymm6,%ymm6
        vpblendd        $3,%ymm11,%ymm0,%ymm11
        vpaddq  %ymm10,%ymm7,%ymm7
        vpaddq  %ymm11,%ymm8,%ymm8

        vpsrlq  $29,%ymm4,%ymm12
        vpand   %ymm15,%ymm4,%ymm4
        vpsrlq  $29,%ymm5,%ymm13
        vpand   %ymm15,%ymm5,%ymm5
        vpsrlq  $29,%ymm6,%ymm10
        vpermq  $0x93,%ymm12,%ymm12
        vpand   %ymm15,%ymm6,%ymm6
        vpsrlq  $29,%ymm7,%ymm11
        vpermq  $0x93,%ymm13,%ymm13
        vpand   %ymm15,%ymm7,%ymm7
        vpsrlq  $29,%ymm8,%ymm0
        vpermq  $0x93,%ymm10,%ymm10
        vpand   %ymm15,%ymm8,%ymm8
        vpermq  $0x93,%ymm11,%ymm11

        vpblendd        $3,%ymm14,%ymm12,%ymm9
        vpermq  $0x93,%ymm0,%ymm0
        vpblendd        $3,%ymm12,%ymm13,%ymm12
        vpaddq  %ymm9,%ymm4,%ymm4
        vpblendd        $3,%ymm13,%ymm10,%ymm13
        vpaddq  %ymm12,%ymm5,%ymm5
        vpblendd        $3,%ymm10,%ymm11,%ymm10
        vpaddq  %ymm13,%ymm6,%ymm6
        vpblendd        $3,%ymm11,%ymm0,%ymm11
        vpaddq  %ymm10,%ymm7,%ymm7
        vpaddq  %ymm11,%ymm8,%ymm8

        vmovdqu %ymm4,128-128(%rdi)
        vmovdqu %ymm5,160-128(%rdi)
        vmovdqu %ymm6,192-128(%rdi)
        vmovdqu %ymm7,224-128(%rdi)
        vmovdqu %ymm8,256-128(%rdi)
        vzeroupper

        movq    %rbp,%rax
.cfi_def_cfa_register   %rax
        movq    -48(%rax),%r15
.cfi_restore    %r15
        movq    -40(%rax),%r14
.cfi_restore    %r14
        movq    -32(%rax),%r13
.cfi_restore    %r13
        movq    -24(%rax),%r12
.cfi_restore    %r12
        movq    -16(%rax),%rbp
.cfi_restore    %rbp
        movq    -8(%rax),%rbx
.cfi_restore    %rbx
        leaq    (%rax),%rsp
.cfi_def_cfa_register   %rsp
.Lmul_1024_epilogue:
        .byte   0xf3,0xc3
.cfi_endproc
.size   rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
.globl  rsaz_1024_red2norm_avx2
.type   rsaz_1024_red2norm_avx2,@function
.align  32
rsaz_1024_red2norm_avx2:
.cfi_startproc
        subq    $-128,%rsi
        xorq    %rax,%rax
        movq    -128(%rsi),%r8
        movq    -120(%rsi),%r9
        movq    -112(%rsi),%r10
        shlq    $0,%r8
        shlq    $29,%r9
        movq    %r10,%r11
        shlq    $58,%r10
        shrq    $6,%r11
        addq    %r8,%rax
        addq    %r9,%rax
        addq    %r10,%rax
        adcq    $0,%r11
        movq    %rax,0(%rdi)
        movq    %r11,%rax
        movq    -104(%rsi),%r8
        movq    -96(%rsi),%r9
        shlq    $23,%r8
        movq    %r9,%r10
        shlq    $52,%r9
        shrq    $12,%r10
        addq    %r8,%rax
        addq    %r9,%rax
        adcq    $0,%r10
        movq    %rax,8(%rdi)
        movq    %r10,%rax
        movq    -88(%rsi),%r11
        movq    -80(%rsi),%r8
        shlq    $17,%r11
        movq    %r8,%r9
        shlq    $46,%r8
        shrq    $18,%r9
        addq    %r11,%rax
        addq    %r8,%rax
        adcq    $0,%r9
        movq    %rax,16(%rdi)
        movq    %r9,%rax
        movq    -72(%rsi),%r10
        movq    -64(%rsi),%r11
        shlq    $11,%r10
        movq    %r11,%r8
        shlq    $40,%r11
        shrq    $24,%r8
        addq    %r10,%rax
        addq    %r11,%rax
        adcq    $0,%r8
        movq    %rax,24(%rdi)
        movq    %r8,%rax
        movq    -56(%rsi),%r9
        movq    -48(%rsi),%r10
        movq    -40(%rsi),%r11
        shlq    $5,%r9
        shlq    $34,%r10
        movq    %r11,%r8
        shlq    $63,%r11
        shrq    $1,%r8
        addq    %r9,%rax
        addq    %r10,%rax
        addq    %r11,%rax
        adcq    $0,%r8
        movq    %rax,32(%rdi)
        movq    %r8,%rax
        movq    -32(%rsi),%r9
        movq    -24(%rsi),%r10
        shlq    $28,%r9
        movq    %r10,%r11
        shlq    $57,%r10
        shrq    $7,%r11
        addq    %r9,%rax
        addq    %r10,%rax
        adcq    $0,%r11
        movq    %rax,40(%rdi)
        movq    %r11,%rax
        movq    -16(%rsi),%r8
        movq    -8(%rsi),%r9
        shlq    $22,%r8
        movq    %r9,%r10
        shlq    $51,%r9
        shrq    $13,%r10
        addq    %r8,%rax
        addq    %r9,%rax
        adcq    $0,%r10
        movq    %rax,48(%rdi)
        movq    %r10,%rax
        movq    0(%rsi),%r11
        movq    8(%rsi),%r8
        shlq    $16,%r11
        movq    %r8,%r9
        shlq    $45,%r8
        shrq    $19,%r9
        addq    %r11,%rax
        addq    %r8,%rax
        adcq    $0,%r9
        movq    %rax,56(%rdi)
        movq    %r9,%rax
        movq    16(%rsi),%r10
        movq    24(%rsi),%r11
        shlq    $10,%r10
        movq    %r11,%r8
        shlq    $39,%r11
        shrq    $25,%r8
        addq    %r10,%rax
        addq    %r11,%rax
        adcq    $0,%r8
        movq    %rax,64(%rdi)
        movq    %r8,%rax
        movq    32(%rsi),%r9
        movq    40(%rsi),%r10
        movq    48(%rsi),%r11
        shlq    $4,%r9
        shlq    $33,%r10
        movq    %r11,%r8
        shlq    $62,%r11
        shrq    $2,%r8
        addq    %r9,%rax
        addq    %r10,%rax
        addq    %r11,%rax
        adcq    $0,%r8
        movq    %rax,72(%rdi)
        movq    %r8,%rax
        movq    56(%rsi),%r9
        movq    64(%rsi),%r10
        shlq    $27,%r9
        movq    %r10,%r11
        shlq    $56,%r10
        shrq    $8,%r11
        addq    %r9,%rax
        addq    %r10,%rax
        adcq    $0,%r11
        movq    %rax,80(%rdi)
        movq    %r11,%rax
        movq    72(%rsi),%r8
        movq    80(%rsi),%r9
        shlq    $21,%r8
        movq    %r9,%r10
        shlq    $50,%r9
        shrq    $14,%r10
        addq    %r8,%rax
        addq    %r9,%rax
        adcq    $0,%r10
        movq    %rax,88(%rdi)
        movq    %r10,%rax
        movq    88(%rsi),%r11
        movq    96(%rsi),%r8
        shlq    $15,%r11
        movq    %r8,%r9
        shlq    $44,%r8
        shrq    $20,%r9
        addq    %r11,%rax
        addq    %r8,%rax
        adcq    $0,%r9
        movq    %rax,96(%rdi)
        movq    %r9,%rax
        movq    104(%rsi),%r10
        movq    112(%rsi),%r11
        shlq    $9,%r10
        movq    %r11,%r8
        shlq    $38,%r11
        shrq    $26,%r8
        addq    %r10,%rax
        addq    %r11,%rax
        adcq    $0,%r8
        movq    %rax,104(%rdi)
        movq    %r8,%rax
        movq    120(%rsi),%r9
        movq    128(%rsi),%r10
        movq    136(%rsi),%r11
        shlq    $3,%r9
        shlq    $32,%r10
        movq    %r11,%r8
        shlq    $61,%r11
        shrq    $3,%r8
        addq    %r9,%rax
        addq    %r10,%rax
        addq    %r11,%rax
        adcq    $0,%r8
        movq    %rax,112(%rdi)
        movq    %r8,%rax
        movq    144(%rsi),%r9
        movq    152(%rsi),%r10
        shlq    $26,%r9
        movq    %r10,%r11
        shlq    $55,%r10
        shrq    $9,%r11
        addq    %r9,%rax
        addq    %r10,%rax
        adcq    $0,%r11
        movq    %rax,120(%rdi)
        movq    %r11,%rax
        .byte   0xf3,0xc3
.cfi_endproc
.size   rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2

.globl  rsaz_1024_norm2red_avx2
.type   rsaz_1024_norm2red_avx2,@function
.align  32
rsaz_1024_norm2red_avx2:
.cfi_startproc
        subq    $-128,%rdi
        movq    (%rsi),%r8
        movl    $0x1fffffff,%eax
        movq    8(%rsi),%r9
        movq    %r8,%r11
        shrq    $0,%r11
        andq    %rax,%r11
        movq    %r11,-128(%rdi)
        movq    %r8,%r10
        shrq    $29,%r10
        andq    %rax,%r10
        movq    %r10,-120(%rdi)
        shrdq   $58,%r9,%r8
        andq    %rax,%r8
        movq    %r8,-112(%rdi)
        movq    16(%rsi),%r10
        movq    %r9,%r8
        shrq    $23,%r8
        andq    %rax,%r8
        movq    %r8,-104(%rdi)
        shrdq   $52,%r10,%r9
        andq    %rax,%r9
        movq    %r9,-96(%rdi)
        movq    24(%rsi),%r11
        movq    %r10,%r9
        shrq    $17,%r9
        andq    %rax,%r9
        movq    %r9,-88(%rdi)
        shrdq   $46,%r11,%r10
        andq    %rax,%r10
        movq    %r10,-80(%rdi)
        movq    32(%rsi),%r8
        movq    %r11,%r10
        shrq    $11,%r10
        andq    %rax,%r10
        movq    %r10,-72(%rdi)
        shrdq   $40,%r8,%r11
        andq    %rax,%r11
        movq    %r11,-64(%rdi)
        movq    40(%rsi),%r9
        movq    %r8,%r11
        shrq    $5,%r11
        andq    %rax,%r11
        movq    %r11,-56(%rdi)
        movq    %r8,%r10
        shrq    $34,%r10
        andq    %rax,%r10
        movq    %r10,-48(%rdi)
        shrdq   $63,%r9,%r8
        andq    %rax,%r8
        movq    %r8,-40(%rdi)
        movq    48(%rsi),%r10
        movq    %r9,%r8
        shrq    $28,%r8
        andq    %rax,%r8
        movq    %r8,-32(%rdi)
        shrdq   $57,%r10,%r9
        andq    %rax,%r9
        movq    %r9,-24(%rdi)
        movq    56(%rsi),%r11
        movq    %r10,%r9
        shrq    $22,%r9
        andq    %rax,%r9
        movq    %r9,-16(%rdi)
        shrdq   $51,%r11,%r10
        andq    %rax,%r10
        movq    %r10,-8(%rdi)
        movq    64(%rsi),%r8
        movq    %r11,%r10
        shrq    $16,%r10
        andq    %rax,%r10
        movq    %r10,0(%rdi)
        shrdq   $45,%r8,%r11
        andq    %rax,%r11
        movq    %r11,8(%rdi)
        movq    72(%rsi),%r9
        movq    %r8,%r11
        shrq    $10,%r11
        andq    %rax,%r11
        movq    %r11,16(%rdi)
        shrdq   $39,%r9,%r8
        andq    %rax,%r8
        movq    %r8,24(%rdi)
        movq    80(%rsi),%r10
        movq    %r9,%r8
        shrq    $4,%r8
        andq    %rax,%r8
        movq    %r8,32(%rdi)
        movq    %r9,%r11
        shrq    $33,%r11
        andq    %rax,%r11
        movq    %r11,40(%rdi)
        shrdq   $62,%r10,%r9
        andq    %rax,%r9
        movq    %r9,48(%rdi)
        movq    88(%rsi),%r11
        movq    %r10,%r9
        shrq    $27,%r9
        andq    %rax,%r9
        movq    %r9,56(%rdi)
        shrdq   $56,%r11,%r10
        andq    %rax,%r10
        movq    %r10,64(%rdi)
        movq    96(%rsi),%r8
        movq    %r11,%r10
        shrq    $21,%r10
        andq    %rax,%r10
        movq    %r10,72(%rdi)
        shrdq   $50,%r8,%r11
        andq    %rax,%r11
        movq    %r11,80(%rdi)
        movq    104(%rsi),%r9
        movq    %r8,%r11
        shrq    $15,%r11
        andq    %rax,%r11
        movq    %r11,88(%rdi)
        shrdq   $44,%r9,%r8
        andq    %rax,%r8
        movq    %r8,96(%rdi)
        movq    112(%rsi),%r10
        movq    %r9,%r8
        shrq    $9,%r8
        andq    %rax,%r8
        movq    %r8,104(%rdi)
        shrdq   $38,%r10,%r9
        andq    %rax,%r9
        movq    %r9,112(%rdi)
        movq    120(%rsi),%r11
        movq    %r10,%r9
        shrq    $3,%r9
        andq    %rax,%r9
        movq    %r9,120(%rdi)
        movq    %r10,%r8
        shrq    $32,%r8
        andq    %rax,%r8
        movq    %r8,128(%rdi)
        shrdq   $61,%r11,%r10
        andq    %rax,%r10
        movq    %r10,136(%rdi)
        xorq    %r8,%r8
        movq    %r11,%r10
        shrq    $26,%r10
        andq    %rax,%r10
        movq    %r10,144(%rdi)
        shrdq   $55,%r8,%r11
        andq    %rax,%r11
        movq    %r11,152(%rdi)
        movq    %r8,160(%rdi)
        movq    %r8,168(%rdi)
        movq    %r8,176(%rdi)
        movq    %r8,184(%rdi)
        .byte   0xf3,0xc3
.cfi_endproc
.size   rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
.globl  rsaz_1024_scatter5_avx2
.type   rsaz_1024_scatter5_avx2,@function
.align  32
rsaz_1024_scatter5_avx2:
.cfi_startproc
        vzeroupper
        vmovdqu .Lscatter_permd(%rip),%ymm5
        shll    $4,%edx
        leaq    (%rdi,%rdx,1),%rdi
        movl    $9,%eax
        jmp     .Loop_scatter_1024

.align  32
.Loop_scatter_1024:
        vmovdqu (%rsi),%ymm0
        leaq    32(%rsi),%rsi
        vpermd  %ymm0,%ymm5,%ymm0
        vmovdqu %xmm0,(%rdi)
        leaq    512(%rdi),%rdi
        decl    %eax
        jnz     .Loop_scatter_1024

        vzeroupper
        .byte   0xf3,0xc3
.cfi_endproc
.size   rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2

.globl  rsaz_1024_gather5_avx2
.type   rsaz_1024_gather5_avx2,@function
.align  32
rsaz_1024_gather5_avx2:
.cfi_startproc
        vzeroupper
        movq    %rsp,%r11
.cfi_def_cfa_register   %r11
        leaq    -256(%rsp),%rsp
        andq    $-32,%rsp
        leaq    .Linc(%rip),%r10
        leaq    -128(%rsp),%rax

        vmovd   %edx,%xmm4
        vmovdqa (%r10),%ymm0
        vmovdqa 32(%r10),%ymm1
        vmovdqa 64(%r10),%ymm5
        vpbroadcastd    %xmm4,%ymm4

        vpaddd  %ymm5,%ymm0,%ymm2
        vpcmpeqd        %ymm4,%ymm0,%ymm0
        vpaddd  %ymm5,%ymm1,%ymm3
        vpcmpeqd        %ymm4,%ymm1,%ymm1
        vmovdqa %ymm0,0+128(%rax)
        vpaddd  %ymm5,%ymm2,%ymm0
        vpcmpeqd        %ymm4,%ymm2,%ymm2
        vmovdqa %ymm1,32+128(%rax)
        vpaddd  %ymm5,%ymm3,%ymm1
        vpcmpeqd        %ymm4,%ymm3,%ymm3
        vmovdqa %ymm2,64+128(%rax)
        vpaddd  %ymm5,%ymm0,%ymm2
        vpcmpeqd        %ymm4,%ymm0,%ymm0
        vmovdqa %ymm3,96+128(%rax)
        vpaddd  %ymm5,%ymm1,%ymm3
        vpcmpeqd        %ymm4,%ymm1,%ymm1
        vmovdqa %ymm0,128+128(%rax)
        vpaddd  %ymm5,%ymm2,%ymm8
        vpcmpeqd        %ymm4,%ymm2,%ymm2
        vmovdqa %ymm1,160+128(%rax)
        vpaddd  %ymm5,%ymm3,%ymm9
        vpcmpeqd        %ymm4,%ymm3,%ymm3
        vmovdqa %ymm2,192+128(%rax)
        vpaddd  %ymm5,%ymm8,%ymm10
        vpcmpeqd        %ymm4,%ymm8,%ymm8
        vmovdqa %ymm3,224+128(%rax)
        vpaddd  %ymm5,%ymm9,%ymm11
        vpcmpeqd        %ymm4,%ymm9,%ymm9
        vpaddd  %ymm5,%ymm10,%ymm12
        vpcmpeqd        %ymm4,%ymm10,%ymm10
        vpaddd  %ymm5,%ymm11,%ymm13
        vpcmpeqd        %ymm4,%ymm11,%ymm11
        vpaddd  %ymm5,%ymm12,%ymm14
        vpcmpeqd        %ymm4,%ymm12,%ymm12
        vpaddd  %ymm5,%ymm13,%ymm15
        vpcmpeqd        %ymm4,%ymm13,%ymm13
        vpcmpeqd        %ymm4,%ymm14,%ymm14
        vpcmpeqd        %ymm4,%ymm15,%ymm15

        vmovdqa -32(%r10),%ymm7
        leaq    128(%rsi),%rsi
        movl    $9,%edx

.Loop_gather_1024:
        vmovdqa 0-128(%rsi),%ymm0
        vmovdqa 32-128(%rsi),%ymm1
        vmovdqa 64-128(%rsi),%ymm2
        vmovdqa 96-128(%rsi),%ymm3
        vpand   0+128(%rax),%ymm0,%ymm0
        vpand   32+128(%rax),%ymm1,%ymm1
        vpand   64+128(%rax),%ymm2,%ymm2
        vpor    %ymm0,%ymm1,%ymm4
        vpand   96+128(%rax),%ymm3,%ymm3
        vmovdqa 128-128(%rsi),%ymm0
        vmovdqa 160-128(%rsi),%ymm1
        vpor    %ymm2,%ymm3,%ymm5
        vmovdqa 192-128(%rsi),%ymm2
        vmovdqa 224-128(%rsi),%ymm3
        vpand   128+128(%rax),%ymm0,%ymm0
        vpand   160+128(%rax),%ymm1,%ymm1
        vpand   192+128(%rax),%ymm2,%ymm2
        vpor    %ymm0,%ymm4,%ymm4
        vpand   224+128(%rax),%ymm3,%ymm3
        vpand   256-128(%rsi),%ymm8,%ymm0
        vpor    %ymm1,%ymm5,%ymm5
        vpand   288-128(%rsi),%ymm9,%ymm1
        vpor    %ymm2,%ymm4,%ymm4
        vpand   320-128(%rsi),%ymm10,%ymm2
        vpor    %ymm3,%ymm5,%ymm5
        vpand   352-128(%rsi),%ymm11,%ymm3
        vpor    %ymm0,%ymm4,%ymm4
        vpand   384-128(%rsi),%ymm12,%ymm0
        vpor    %ymm1,%ymm5,%ymm5
        vpand   416-128(%rsi),%ymm13,%ymm1
        vpor    %ymm2,%ymm4,%ymm4
        vpand   448-128(%rsi),%ymm14,%ymm2
        vpor    %ymm3,%ymm5,%ymm5
        vpand   480-128(%rsi),%ymm15,%ymm3
        leaq    512(%rsi),%rsi
        vpor    %ymm0,%ymm4,%ymm4
        vpor    %ymm1,%ymm5,%ymm5
        vpor    %ymm2,%ymm4,%ymm4
        vpor    %ymm3,%ymm5,%ymm5

        vpor    %ymm5,%ymm4,%ymm4
        vextracti128    $1,%ymm4,%xmm5
        vpor    %xmm4,%xmm5,%xmm5
        vpermd  %ymm5,%ymm7,%ymm5
        vmovdqu %ymm5,(%rdi)
        leaq    32(%rdi),%rdi
        decl    %edx
        jnz     .Loop_gather_1024

        vpxor   %ymm0,%ymm0,%ymm0
        vmovdqu %ymm0,(%rdi)
        vzeroupper
        leaq    (%r11),%rsp
.cfi_def_cfa_register   %rsp
        .byte   0xf3,0xc3
.cfi_endproc
.LSEH_end_rsaz_1024_gather5:
.size   rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2

.globl  rsaz_avx2_eligible
.type   rsaz_avx2_eligible,@function
.align  32
rsaz_avx2_eligible:
        movl    OPENSSL_ia32cap_P+8(%rip),%eax
        movl    $524544,%ecx
        movl    $0,%edx
        andl    %eax,%ecx
        cmpl    $524544,%ecx
        cmovel  %edx,%eax
        andl    $32,%eax
        shrl    $5,%eax
        .byte   0xf3,0xc3
.size   rsaz_avx2_eligible,.-rsaz_avx2_eligible

.align  64
.Land_mask:
.quad   0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
.Lscatter_permd:
.long   0,2,4,6,7,7,7,7
.Lgather_permd:
.long   0,7,1,7,2,7,3,7
.Linc:
.long   0,0,0,0, 1,1,1,1
.long   2,2,2,2, 3,3,3,3
.long   4,4,4,4, 4,4,4,4
.align  64
        .section ".note.gnu.property", "a"
        .p2align 3
        .long 1f - 0f
        .long 4f - 1f
        .long 5
0:
        # "GNU" encoded with .byte, since .asciz isn't supported
        # on Solaris.
        .byte 0x47
        .byte 0x4e
        .byte 0x55
        .byte 0
1:
        .p2align 3
        .long 0xc0000002
        .long 3f - 2f
2:
        .long 3
3:
        .p2align 3
4:
