The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/crypto/openssl/amd64/rsaz-avx2.S

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: f51a3b93d209577cf5ba816ae2bacf5a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.