VirtualBox

Changeset 94114 in vbox for trunk/src


Ignore:
Timestamp:
Mar 7, 2022 4:12:02 PM (3 years ago)
Author:
vboxsync
Message:

libs/openssl-3.0.1: Missing assembly files for Windows and macOS, bugref:10128

Location:
trunk/src/libs/openssl-3.0.1/crypto
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/openssl-3.0.1/crypto/bn/Makefile.kmk

    r94107 r94114  
    100100        perl $(VBOX_PATH_CRYPTO_BN)/asm/x86-gf2m.pl macosx $(VBOX_PATH_CRYPTO)/genasm-macosx/x86-gf2m.S
    101101        perl $(VBOX_PATH_CRYPTO_BN)/asm/rsaz-avx2.pl macosx $(VBOX_PATH_CRYPTO)/genasm-macosx/rsaz-avx2.S
     102        perl $(VBOX_PATH_CRYPTO_BN)/asm/rsaz-avx512.pl macosx $(VBOX_PATH_CRYPTO)/genasm-macosx/rsaz-avx512.S
    102103        perl $(VBOX_PATH_CRYPTO_BN)/asm/rsaz-x86_64.pl macosx $(VBOX_PATH_CRYPTO)/genasm-macosx/rsaz-x86_64.S
    103104        perl $(VBOX_PATH_CRYPTO_BN)/asm/x86_64-gf2m.pl macosx $(VBOX_PATH_CRYPTO)/genasm-macosx/x86_64-gf2m.S
     
    109110        perl $(VBOX_PATH_CRYPTO_BN)/asm/x86-gf2m.pl win32n $(VBOX_PATH_CRYPTO)/genasm-nasm/x86-gf2m.S
    110111        perl $(VBOX_PATH_CRYPTO_BN)/asm/rsaz-avx2.pl nasm $(VBOX_PATH_CRYPTO)/genasm-nasm/rsaz-avx2.S
     112        perl $(VBOX_PATH_CRYPTO_BN)/asm/rsaz-avx512.pl nasm $(VBOX_PATH_CRYPTO)/genasm-nasm/rsaz-avx512.S
    111113        perl $(VBOX_PATH_CRYPTO_BN)/asm/rsaz-x86_64.pl nasm $(VBOX_PATH_CRYPTO)/genasm-nasm/rsaz-x86_64.S
    112114        perl $(VBOX_PATH_CRYPTO_BN)/asm/x86_64-gf2m.pl nasm $(VBOX_PATH_CRYPTO)/genasm-nasm/x86_64-gf2m.S
  • trunk/src/libs/openssl-3.0.1/crypto/genasm-nasm/rsaz-avx2.S

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

    r94083 r94114  
    4444        mov     rax,QWORD[8+rsi]
    4545        mov     QWORD[128+rsp],rcx
    46         mov     r11d,0x80100
    47         and     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    48         cmp     r11d,0x80100
    49         je      NEAR $L$oop_sqrx
    5046        jmp     NEAR $L$oop_sqr
    5147
     
    418414        dec     r8d
    419415        jnz     NEAR $L$oop_sqr
    420         jmp     NEAR $L$sqr_tail
    421 
    422 ALIGN   32
    423 $L$oop_sqrx:
    424         mov     DWORD[((128+8))+rsp],r8d
    425 DB      102,72,15,110,199
    426 
    427         mulx    r9,r8,rax
    428         mov     rbx,rax
    429 
    430         mulx    r10,rcx,QWORD[16+rsi]
    431         xor     rbp,rbp
    432 
    433         mulx    r11,rax,QWORD[24+rsi]
    434         adcx    r9,rcx
    435 
    436 DB      0xc4,0x62,0xf3,0xf6,0xa6,0x20,0x00,0x00,0x00
    437         adcx    r10,rax
    438 
    439 DB      0xc4,0x62,0xfb,0xf6,0xae,0x28,0x00,0x00,0x00
    440         adcx    r11,rcx
    441 
    442         mulx    r14,rcx,QWORD[48+rsi]
    443         adcx    r12,rax
    444         adcx    r13,rcx
    445 
    446         mulx    r15,rax,QWORD[56+rsi]
    447         adcx    r14,rax
    448         adcx    r15,rbp
    449 
    450         mulx    rdi,rax,rdx
    451         mov     rdx,rbx
    452         xor     rcx,rcx
    453         adox    r8,r8
    454         adcx    r8,rdi
    455         adox    rcx,rbp
    456         adcx    rcx,rbp
    457 
    458         mov     QWORD[rsp],rax
    459         mov     QWORD[8+rsp],r8
    460 
    461 
    462 DB      0xc4,0xe2,0xfb,0xf6,0x9e,0x10,0x00,0x00,0x00
    463         adox    r10,rax
    464         adcx    r11,rbx
    465 
    466         mulx    r8,rdi,QWORD[24+rsi]
    467         adox    r11,rdi
    468 DB      0x66
    469         adcx    r12,r8
    470 
    471         mulx    rbx,rax,QWORD[32+rsi]
    472         adox    r12,rax
    473         adcx    r13,rbx
    474 
    475         mulx    r8,rdi,QWORD[40+rsi]
    476         adox    r13,rdi
    477         adcx    r14,r8
    478 
    479 DB      0xc4,0xe2,0xfb,0xf6,0x9e,0x30,0x00,0x00,0x00
    480         adox    r14,rax
    481         adcx    r15,rbx
    482 
    483 DB      0xc4,0x62,0xc3,0xf6,0x86,0x38,0x00,0x00,0x00
    484         adox    r15,rdi
    485         adcx    r8,rbp
    486         mulx    rdi,rax,rdx
    487         adox    r8,rbp
    488 DB      0x48,0x8b,0x96,0x10,0x00,0x00,0x00
    489 
    490         xor     rbx,rbx
    491         adox    r9,r9
    492 
    493         adcx    rax,rcx
    494         adox    r10,r10
    495         adcx    r9,rax
    496         adox    rbx,rbp
    497         adcx    r10,rdi
    498         adcx    rbx,rbp
    499 
    500         mov     QWORD[16+rsp],r9
    501 DB      0x4c,0x89,0x94,0x24,0x18,0x00,0x00,0x00
    502 
    503 
    504         mulx    r9,rdi,QWORD[24+rsi]
    505         adox    r12,rdi
    506         adcx    r13,r9
    507 
    508         mulx    rcx,rax,QWORD[32+rsi]
    509         adox    r13,rax
    510         adcx    r14,rcx
    511 
    512 DB      0xc4,0x62,0xc3,0xf6,0x8e,0x28,0x00,0x00,0x00
    513         adox    r14,rdi
    514         adcx    r15,r9
    515 
    516 DB      0xc4,0xe2,0xfb,0xf6,0x8e,0x30,0x00,0x00,0x00
    517         adox    r15,rax
    518         adcx    r8,rcx
    519 
    520         mulx    r9,rdi,QWORD[56+rsi]
    521         adox    r8,rdi
    522         adcx    r9,rbp
    523         mulx    rdi,rax,rdx
    524         adox    r9,rbp
    525         mov     rdx,QWORD[24+rsi]
    526 
    527         xor     rcx,rcx
    528         adox    r11,r11
    529 
    530         adcx    rax,rbx
    531         adox    r12,r12
    532         adcx    r11,rax
    533         adox    rcx,rbp
    534         adcx    r12,rdi
    535         adcx    rcx,rbp
    536 
    537         mov     QWORD[32+rsp],r11
    538         mov     QWORD[40+rsp],r12
    539 
    540 
    541         mulx    rbx,rax,QWORD[32+rsi]
    542         adox    r14,rax
    543         adcx    r15,rbx
    544 
    545         mulx    r10,rdi,QWORD[40+rsi]
    546         adox    r15,rdi
    547         adcx    r8,r10
    548 
    549         mulx    rbx,rax,QWORD[48+rsi]
    550         adox    r8,rax
    551         adcx    r9,rbx
    552 
    553         mulx    r10,rdi,QWORD[56+rsi]
    554         adox    r9,rdi
    555         adcx    r10,rbp
    556         mulx    rdi,rax,rdx
    557         adox    r10,rbp
    558         mov     rdx,QWORD[32+rsi]
    559 
    560         xor     rbx,rbx
    561         adox    r13,r13
    562 
    563         adcx    rax,rcx
    564         adox    r14,r14
    565         adcx    r13,rax
    566         adox    rbx,rbp
    567         adcx    r14,rdi
    568         adcx    rbx,rbp
    569 
    570         mov     QWORD[48+rsp],r13
    571         mov     QWORD[56+rsp],r14
    572 
    573 
    574         mulx    r11,rdi,QWORD[40+rsi]
    575         adox    r8,rdi
    576         adcx    r9,r11
    577 
    578         mulx    rcx,rax,QWORD[48+rsi]
    579         adox    r9,rax
    580         adcx    r10,rcx
    581 
    582         mulx    r11,rdi,QWORD[56+rsi]
    583         adox    r10,rdi
    584         adcx    r11,rbp
    585         mulx    rdi,rax,rdx
    586         mov     rdx,QWORD[40+rsi]
    587         adox    r11,rbp
    588 
    589         xor     rcx,rcx
    590         adox    r15,r15
    591 
    592         adcx    rax,rbx
    593         adox    r8,r8
    594         adcx    r15,rax
    595         adox    rcx,rbp
    596         adcx    r8,rdi
    597         adcx    rcx,rbp
    598 
    599         mov     QWORD[64+rsp],r15
    600         mov     QWORD[72+rsp],r8
    601 
    602 
    603 DB      0xc4,0xe2,0xfb,0xf6,0x9e,0x30,0x00,0x00,0x00
    604         adox    r10,rax
    605         adcx    r11,rbx
    606 
    607 DB      0xc4,0x62,0xc3,0xf6,0xa6,0x38,0x00,0x00,0x00
    608         adox    r11,rdi
    609         adcx    r12,rbp
    610         mulx    rdi,rax,rdx
    611         adox    r12,rbp
    612         mov     rdx,QWORD[48+rsi]
    613 
    614         xor     rbx,rbx
    615         adox    r9,r9
    616 
    617         adcx    rax,rcx
    618         adox    r10,r10
    619         adcx    r9,rax
    620         adcx    r10,rdi
    621         adox    rbx,rbp
    622         adcx    rbx,rbp
    623 
    624         mov     QWORD[80+rsp],r9
    625         mov     QWORD[88+rsp],r10
    626 
    627 
    628 DB      0xc4,0x62,0xfb,0xf6,0xae,0x38,0x00,0x00,0x00
    629         adox    r12,rax
    630         adox    r13,rbp
    631 
    632         mulx    rdi,rax,rdx
    633         xor     rcx,rcx
    634         mov     rdx,QWORD[56+rsi]
    635         adox    r11,r11
    636 
    637         adcx    rax,rbx
    638         adox    r12,r12
    639         adcx    r11,rax
    640         adox    rcx,rbp
    641         adcx    r12,rdi
    642         adcx    rcx,rbp
    643 
    644 DB      0x4c,0x89,0x9c,0x24,0x60,0x00,0x00,0x00
    645 DB      0x4c,0x89,0xa4,0x24,0x68,0x00,0x00,0x00
    646 
    647 
    648         mulx    rdx,rax,rdx
    649         xor     rbx,rbx
    650         adox    r13,r13
    651 
    652         adcx    rax,rcx
    653         adox    rbx,rbp
    654         adcx    rax,r13
    655         adcx    rbx,rdx
    656 
    657 DB      102,72,15,126,199
    658 DB      102,72,15,126,205
    659 
    660         mov     rdx,QWORD[128+rsp]
    661         mov     r8,QWORD[rsp]
    662         mov     r9,QWORD[8+rsp]
    663         mov     r10,QWORD[16+rsp]
    664         mov     r11,QWORD[24+rsp]
    665         mov     r12,QWORD[32+rsp]
    666         mov     r13,QWORD[40+rsp]
    667         mov     r14,QWORD[48+rsp]
    668         mov     r15,QWORD[56+rsp]
    669 
    670         mov     QWORD[112+rsp],rax
    671         mov     QWORD[120+rsp],rbx
    672 
    673         call    __rsaz_512_reducex
    674 
    675         add     r8,QWORD[64+rsp]
    676         adc     r9,QWORD[72+rsp]
    677         adc     r10,QWORD[80+rsp]
    678         adc     r11,QWORD[88+rsp]
    679         adc     r12,QWORD[96+rsp]
    680         adc     r13,QWORD[104+rsp]
    681         adc     r14,QWORD[112+rsp]
    682         adc     r15,QWORD[120+rsp]
    683         sbb     rcx,rcx
    684 
    685         call    __rsaz_512_subtract
    686 
    687         mov     rdx,r8
    688         mov     rax,r9
    689         mov     r8d,DWORD[((128+8))+rsp]
    690         mov     rsi,rdi
    691 
    692         dec     r8d
    693         jnz     NEAR $L$oop_sqrx
    694 
    695 $L$sqr_tail:
    696416
    697417        lea     rax,[((128+24+48))+rsp]
     
    752472DB      102,72,15,110,201
    753473        mov     QWORD[128+rsp],r8
    754         mov     r11d,0x80100
    755         and     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    756         cmp     r11d,0x80100
    757         je      NEAR $L$mulx
    758474        mov     rbx,QWORD[rdx]
    759475        mov     rbp,rdx
     
    773489
    774490        call    __rsaz_512_reduce
    775         jmp     NEAR $L$mul_tail
    776 
    777 ALIGN   32
    778 $L$mulx:
    779         mov     rbp,rdx
    780         mov     rdx,QWORD[rdx]
    781         call    __rsaz_512_mulx
    782 
    783 DB      102,72,15,126,199
    784 DB      102,72,15,126,205
    785 
    786         mov     rdx,QWORD[128+rsp]
    787         mov     r8,QWORD[rsp]
    788         mov     r9,QWORD[8+rsp]
    789         mov     r10,QWORD[16+rsp]
    790         mov     r11,QWORD[24+rsp]
    791         mov     r12,QWORD[32+rsp]
    792         mov     r13,QWORD[40+rsp]
    793         mov     r14,QWORD[48+rsp]
    794         mov     r15,QWORD[56+rsp]
    795 
    796         call    __rsaz_512_reducex
    797 $L$mul_tail:
    798491        add     r8,QWORD[64+rsp]
    799492        adc     r9,QWORD[72+rsp]
     
    927620        pshufd  xmm9,xmm8,0x4e
    928621        por     xmm8,xmm9
    929         mov     r11d,0x80100
    930         and     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    931         cmp     r11d,0x80100
    932         je      NEAR $L$mulx_gather
    933622DB      102,76,15,126,195
    934623
     
    1111800
    1112801        call    __rsaz_512_reduce
    1113         jmp     NEAR $L$mul_gather_tail
    1114 
    1115 ALIGN   32
    1116 $L$mulx_gather:
    1117 DB      102,76,15,126,194
    1118 
    1119         mov     QWORD[128+rsp],r8
    1120         mov     QWORD[((128+8))+rsp],rdi
    1121         mov     QWORD[((128+16))+rsp],rcx
    1122 
    1123         mulx    r8,rbx,QWORD[rsi]
    1124         mov     QWORD[rsp],rbx
    1125         xor     edi,edi
    1126 
    1127         mulx    r9,rax,QWORD[8+rsi]
    1128 
    1129         mulx    r10,rbx,QWORD[16+rsi]
    1130         adcx    r8,rax
    1131 
    1132         mulx    r11,rax,QWORD[24+rsi]
    1133         adcx    r9,rbx
    1134 
    1135         mulx    r12,rbx,QWORD[32+rsi]
    1136         adcx    r10,rax
    1137 
    1138         mulx    r13,rax,QWORD[40+rsi]
    1139         adcx    r11,rbx
    1140 
    1141         mulx    r14,rbx,QWORD[48+rsi]
    1142         adcx    r12,rax
    1143 
    1144         mulx    r15,rax,QWORD[56+rsi]
    1145         adcx    r13,rbx
    1146         adcx    r14,rax
    1147 DB      0x67
    1148         mov     rbx,r8
    1149         adcx    r15,rdi
    1150 
    1151         mov     rcx,-7
    1152         jmp     NEAR $L$oop_mulx_gather
    1153 
    1154 ALIGN   32
    1155 $L$oop_mulx_gather:
    1156         movdqa  xmm8,XMMWORD[rbp]
    1157         movdqa  xmm9,XMMWORD[16+rbp]
    1158         movdqa  xmm10,XMMWORD[32+rbp]
    1159         movdqa  xmm11,XMMWORD[48+rbp]
    1160         pand    xmm8,xmm0
    1161         movdqa  xmm12,XMMWORD[64+rbp]
    1162         pand    xmm9,xmm1
    1163         movdqa  xmm13,XMMWORD[80+rbp]
    1164         pand    xmm10,xmm2
    1165         movdqa  xmm14,XMMWORD[96+rbp]
    1166         pand    xmm11,xmm3
    1167         movdqa  xmm15,XMMWORD[112+rbp]
    1168         lea     rbp,[128+rbp]
    1169         pand    xmm12,xmm4
    1170         pand    xmm13,xmm5
    1171         pand    xmm14,xmm6
    1172         pand    xmm15,xmm7
    1173         por     xmm8,xmm10
    1174         por     xmm9,xmm11
    1175         por     xmm8,xmm12
    1176         por     xmm9,xmm13
    1177         por     xmm8,xmm14
    1178         por     xmm9,xmm15
    1179 
    1180         por     xmm8,xmm9
    1181         pshufd  xmm9,xmm8,0x4e
    1182         por     xmm8,xmm9
    1183 DB      102,76,15,126,194
    1184 
    1185 DB      0xc4,0x62,0xfb,0xf6,0x86,0x00,0x00,0x00,0x00
    1186         adcx    rbx,rax
    1187         adox    r8,r9
    1188 
    1189         mulx    r9,rax,QWORD[8+rsi]
    1190         adcx    r8,rax
    1191         adox    r9,r10
    1192 
    1193         mulx    r10,rax,QWORD[16+rsi]
    1194         adcx    r9,rax
    1195         adox    r10,r11
    1196 
    1197 DB      0xc4,0x62,0xfb,0xf6,0x9e,0x18,0x00,0x00,0x00
    1198         adcx    r10,rax
    1199         adox    r11,r12
    1200 
    1201         mulx    r12,rax,QWORD[32+rsi]
    1202         adcx    r11,rax
    1203         adox    r12,r13
    1204 
    1205         mulx    r13,rax,QWORD[40+rsi]
    1206         adcx    r12,rax
    1207         adox    r13,r14
    1208 
    1209 DB      0xc4,0x62,0xfb,0xf6,0xb6,0x30,0x00,0x00,0x00
    1210         adcx    r13,rax
    1211 DB      0x67
    1212         adox    r14,r15
    1213 
    1214         mulx    r15,rax,QWORD[56+rsi]
    1215         mov     QWORD[64+rcx*8+rsp],rbx
    1216         adcx    r14,rax
    1217         adox    r15,rdi
    1218         mov     rbx,r8
    1219         adcx    r15,rdi
    1220 
    1221         inc     rcx
    1222         jnz     NEAR $L$oop_mulx_gather
    1223 
    1224         mov     QWORD[64+rsp],r8
    1225         mov     QWORD[((64+8))+rsp],r9
    1226         mov     QWORD[((64+16))+rsp],r10
    1227         mov     QWORD[((64+24))+rsp],r11
    1228         mov     QWORD[((64+32))+rsp],r12
    1229         mov     QWORD[((64+40))+rsp],r13
    1230         mov     QWORD[((64+48))+rsp],r14
    1231         mov     QWORD[((64+56))+rsp],r15
    1232 
    1233         mov     rdx,QWORD[128+rsp]
    1234         mov     rdi,QWORD[((128+8))+rsp]
    1235         mov     rbp,QWORD[((128+16))+rsp]
    1236 
    1237         mov     r8,QWORD[rsp]
    1238         mov     r9,QWORD[8+rsp]
    1239         mov     r10,QWORD[16+rsp]
    1240         mov     r11,QWORD[24+rsp]
    1241         mov     r12,QWORD[32+rsp]
    1242         mov     r13,QWORD[40+rsp]
    1243         mov     r14,QWORD[48+rsp]
    1244         mov     r15,QWORD[56+rsp]
    1245 
    1246         call    __rsaz_512_reducex
    1247 
    1248 $L$mul_gather_tail:
    1249802        add     r8,QWORD[64+rsp]
    1250803        adc     r9,QWORD[72+rsp]
     
    1333886
    1334887        mov     rbp,rdi
    1335         mov     r11d,0x80100
    1336         and     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    1337         cmp     r11d,0x80100
    1338         je      NEAR $L$mulx_scatter
    1339888        mov     rbx,QWORD[rdi]
    1340889        call    __rsaz_512_mul
     
    1353902
    1354903        call    __rsaz_512_reduce
    1355         jmp     NEAR $L$mul_scatter_tail
    1356 
    1357 ALIGN   32
    1358 $L$mulx_scatter:
    1359         mov     rdx,QWORD[rdi]
    1360         call    __rsaz_512_mulx
    1361 
    1362 DB      102,72,15,126,199
    1363 DB      102,72,15,126,205
    1364 
    1365         mov     rdx,QWORD[128+rsp]
    1366         mov     r8,QWORD[rsp]
    1367         mov     r9,QWORD[8+rsp]
    1368         mov     r10,QWORD[16+rsp]
    1369         mov     r11,QWORD[24+rsp]
    1370         mov     r12,QWORD[32+rsp]
    1371         mov     r13,QWORD[40+rsp]
    1372         mov     r14,QWORD[48+rsp]
    1373         mov     r15,QWORD[56+rsp]
    1374 
    1375         call    __rsaz_512_reducex
    1376 
    1377 $L$mul_scatter_tail:
    1378904        add     r8,QWORD[64+rsp]
    1379905        adc     r9,QWORD[72+rsp]
     
    1451977
    1452978$L$mul_by_one_body:
    1453         mov     eax,DWORD[((OPENSSL_ia32cap_P+8))]
    1454979        mov     rbp,rdx
    1455980        mov     QWORD[128+rsp],rcx
     
    1472997        movdqa  XMMWORD[80+rsp],xmm0
    1473998        movdqa  XMMWORD[96+rsp],xmm0
    1474         and     eax,0x80100
    1475         cmp     eax,0x80100
    1476         je      NEAR $L$by_one_callx
    1477999        call    __rsaz_512_reduce
    1478         jmp     NEAR $L$by_one_tail
    1479 ALIGN   32
    1480 $L$by_one_callx:
    1481         mov     rdx,QWORD[128+rsp]
    1482         call    __rsaz_512_reducex
    1483 $L$by_one_tail:
    14841000        mov     QWORD[rdi],r8
    14851001        mov     QWORD[8+rdi],r9
     
    15941110        dec     ecx
    15951111        jne     NEAR $L$reduction_loop
    1596 
    1597         DB      0F3h,0C3h               ;repret
    1598 
    1599 
    1600 
    1601 ALIGN   32
    1602 __rsaz_512_reducex:
    1603 
    1604 
    1605         imul    rdx,r8
    1606         xor     rsi,rsi
    1607         mov     ecx,8
    1608         jmp     NEAR $L$reduction_loopx
    1609 
    1610 ALIGN   32
    1611 $L$reduction_loopx:
    1612         mov     rbx,r8
    1613         mulx    r8,rax,QWORD[rbp]
    1614         adcx    rax,rbx
    1615         adox    r8,r9
    1616 
    1617         mulx    r9,rax,QWORD[8+rbp]
    1618         adcx    r8,rax
    1619         adox    r9,r10
    1620 
    1621         mulx    r10,rbx,QWORD[16+rbp]
    1622         adcx    r9,rbx
    1623         adox    r10,r11
    1624 
    1625         mulx    r11,rbx,QWORD[24+rbp]
    1626         adcx    r10,rbx
    1627         adox    r11,r12
    1628 
    1629 DB      0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00
    1630         mov     rax,rdx
    1631         mov     rdx,r8
    1632         adcx    r11,rbx
    1633         adox    r12,r13
    1634 
    1635         mulx    rdx,rbx,QWORD[((128+8))+rsp]
    1636         mov     rdx,rax
    1637 
    1638         mulx    r13,rax,QWORD[40+rbp]
    1639         adcx    r12,rax
    1640         adox    r13,r14
    1641 
    1642 DB      0xc4,0x62,0xfb,0xf6,0xb5,0x30,0x00,0x00,0x00
    1643         adcx    r13,rax
    1644         adox    r14,r15
    1645 
    1646         mulx    r15,rax,QWORD[56+rbp]
    1647         mov     rdx,rbx
    1648         adcx    r14,rax
    1649         adox    r15,rsi
    1650         adcx    r15,rsi
    1651 
    1652         dec     ecx
    1653         jne     NEAR $L$reduction_loopx
    16541112
    16551113        DB      0F3h,0C3h               ;repret
     
    18551313        mov     QWORD[48+rdi],r14
    18561314        mov     QWORD[56+rdi],r15
    1857 
    1858         DB      0F3h,0C3h               ;repret
    1859 
    1860 
    1861 
    1862 ALIGN   32
    1863 __rsaz_512_mulx:
    1864 
    1865         mulx    r8,rbx,QWORD[rsi]
    1866         mov     rcx,-6
    1867 
    1868         mulx    r9,rax,QWORD[8+rsi]
    1869         mov     QWORD[8+rsp],rbx
    1870 
    1871         mulx    r10,rbx,QWORD[16+rsi]
    1872         adc     r8,rax
    1873 
    1874         mulx    r11,rax,QWORD[24+rsi]
    1875         adc     r9,rbx
    1876 
    1877         mulx    r12,rbx,QWORD[32+rsi]
    1878         adc     r10,rax
    1879 
    1880         mulx    r13,rax,QWORD[40+rsi]
    1881         adc     r11,rbx
    1882 
    1883         mulx    r14,rbx,QWORD[48+rsi]
    1884         adc     r12,rax
    1885 
    1886         mulx    r15,rax,QWORD[56+rsi]
    1887         mov     rdx,QWORD[8+rbp]
    1888         adc     r13,rbx
    1889         adc     r14,rax
    1890         adc     r15,0
    1891 
    1892         xor     rdi,rdi
    1893         jmp     NEAR $L$oop_mulx
    1894 
    1895 ALIGN   32
    1896 $L$oop_mulx:
    1897         mov     rbx,r8
    1898         mulx    r8,rax,QWORD[rsi]
    1899         adcx    rbx,rax
    1900         adox    r8,r9
    1901 
    1902         mulx    r9,rax,QWORD[8+rsi]
    1903         adcx    r8,rax
    1904         adox    r9,r10
    1905 
    1906         mulx    r10,rax,QWORD[16+rsi]
    1907         adcx    r9,rax
    1908         adox    r10,r11
    1909 
    1910         mulx    r11,rax,QWORD[24+rsi]
    1911         adcx    r10,rax
    1912         adox    r11,r12
    1913 
    1914 DB      0x3e,0xc4,0x62,0xfb,0xf6,0xa6,0x20,0x00,0x00,0x00
    1915         adcx    r11,rax
    1916         adox    r12,r13
    1917 
    1918         mulx    r13,rax,QWORD[40+rsi]
    1919         adcx    r12,rax
    1920         adox    r13,r14
    1921 
    1922         mulx    r14,rax,QWORD[48+rsi]
    1923         adcx    r13,rax
    1924         adox    r14,r15
    1925 
    1926         mulx    r15,rax,QWORD[56+rsi]
    1927         mov     rdx,QWORD[64+rcx*8+rbp]
    1928         mov     QWORD[((8+64-8))+rcx*8+rsp],rbx
    1929         adcx    r14,rax
    1930         adox    r15,rdi
    1931         adcx    r15,rdi
    1932 
    1933         inc     rcx
    1934         jnz     NEAR $L$oop_mulx
    1935 
    1936         mov     rbx,r8
    1937         mulx    r8,rax,QWORD[rsi]
    1938         adcx    rbx,rax
    1939         adox    r8,r9
    1940 
    1941 DB      0xc4,0x62,0xfb,0xf6,0x8e,0x08,0x00,0x00,0x00
    1942         adcx    r8,rax
    1943         adox    r9,r10
    1944 
    1945 DB      0xc4,0x62,0xfb,0xf6,0x96,0x10,0x00,0x00,0x00
    1946         adcx    r9,rax
    1947         adox    r10,r11
    1948 
    1949         mulx    r11,rax,QWORD[24+rsi]
    1950         adcx    r10,rax
    1951         adox    r11,r12
    1952 
    1953         mulx    r12,rax,QWORD[32+rsi]
    1954         adcx    r11,rax
    1955         adox    r12,r13
    1956 
    1957         mulx    r13,rax,QWORD[40+rsi]
    1958         adcx    r12,rax
    1959         adox    r13,r14
    1960 
    1961 DB      0xc4,0x62,0xfb,0xf6,0xb6,0x30,0x00,0x00,0x00
    1962         adcx    r13,rax
    1963         adox    r14,r15
    1964 
    1965 DB      0xc4,0x62,0xfb,0xf6,0xbe,0x38,0x00,0x00,0x00
    1966         adcx    r14,rax
    1967         adox    r15,rdi
    1968         adcx    r15,rdi
    1969 
    1970         mov     QWORD[((8+64-8))+rsp],rbx
    1971         mov     QWORD[((8+64))+rsp],r8
    1972         mov     QWORD[((8+64+8))+rsp],r9
    1973         mov     QWORD[((8+64+16))+rsp],r10
    1974         mov     QWORD[((8+64+24))+rsp],r11
    1975         mov     QWORD[((8+64+32))+rsp],r12
    1976         mov     QWORD[((8+64+40))+rsp],r13
    1977         mov     QWORD[((8+64+48))+rsp],r14
    1978         mov     QWORD[((8+64+56))+rsp],r15
    19791315
    19801316        DB      0F3h,0C3h               ;repret
  • trunk/src/libs/openssl-3.0.1/crypto/genasm-nasm/x86_64-mont.S

    r94083 r94114  
    3232        cmp     r9d,8
    3333        jb      NEAR $L$mul_enter
    34         mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    3534        cmp     rdx,rsi
    3635        jne     NEAR $L$mul4x_enter
     
    295294
    296295$L$mul4x_enter:
    297         and     r11d,0x80100
    298         cmp     r11d,0x80100
    299         je      NEAR $L$mulx4x_enter
    300296        push    rbx
    301297
     
    723719
    724720$L$SEH_end_bn_mul4x_mont:
    725 EXTERN  bn_sqrx8x_internal
    726721EXTERN  bn_sqr8x_internal
    727722
     
    819814DB      102,72,15,110,207
    820815DB      102,73,15,110,218
    821         mov     eax,DWORD[((OPENSSL_ia32cap_P+8))]
    822         and     eax,0x80100
    823         cmp     eax,0x80100
    824         jne     NEAR $L$sqr8x_nox
    825 
    826         call    bn_sqrx8x_internal
    827 
    828 
    829 
    830 
    831         lea     rbx,[rcx*1+r8]
    832         mov     r9,rcx
    833         mov     rdx,rcx
    834 DB      102,72,15,126,207
    835         sar     rcx,3+2
    836         jmp     NEAR $L$sqr8x_sub
    837 
    838 ALIGN   32
    839 $L$sqr8x_nox:
    840816        call    bn_sqr8x_internal
    841817
     
    927903
    928904$L$SEH_end_bn_sqr8x_mont:
    929 
    930 ALIGN   32
    931 bn_mulx4x_mont:
    932         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
    933         mov     QWORD[16+rsp],rsi
    934         mov     rax,rsp
    935 $L$SEH_begin_bn_mulx4x_mont:
    936         mov     rdi,rcx
    937         mov     rsi,rdx
    938         mov     rdx,r8
    939         mov     rcx,r9
    940         mov     r8,QWORD[40+rsp]
    941         mov     r9,QWORD[48+rsp]
    942 
    943 
    944 
    945         mov     rax,rsp
    946 
    947 $L$mulx4x_enter:
    948         push    rbx
    949 
    950         push    rbp
    951 
    952         push    r12
    953 
    954         push    r13
    955 
    956         push    r14
    957 
    958         push    r15
    959 
    960 $L$mulx4x_prologue:
    961 
    962         shl     r9d,3
    963         xor     r10,r10
    964         sub     r10,r9
    965         mov     r8,QWORD[r8]
    966         lea     rbp,[((-72))+r10*1+rsp]
    967         and     rbp,-128
    968         mov     r11,rsp
    969         sub     r11,rbp
    970         and     r11,-4096
    971         lea     rsp,[rbp*1+r11]
    972         mov     r10,QWORD[rsp]
    973         cmp     rsp,rbp
    974         ja      NEAR $L$mulx4x_page_walk
    975         jmp     NEAR $L$mulx4x_page_walk_done
    976 
    977 ALIGN   16
    978 $L$mulx4x_page_walk:
    979         lea     rsp,[((-4096))+rsp]
    980         mov     r10,QWORD[rsp]
    981         cmp     rsp,rbp
    982         ja      NEAR $L$mulx4x_page_walk
    983 $L$mulx4x_page_walk_done:
    984 
    985         lea     r10,[r9*1+rdx]
    986 
    987 
    988 
    989 
    990 
    991 
    992 
    993 
    994 
    995 
    996 
    997 
    998         mov     QWORD[rsp],r9
    999         shr     r9,5
    1000         mov     QWORD[16+rsp],r10
    1001         sub     r9,1
    1002         mov     QWORD[24+rsp],r8
    1003         mov     QWORD[32+rsp],rdi
    1004         mov     QWORD[40+rsp],rax
    1005 
    1006         mov     QWORD[48+rsp],r9
    1007         jmp     NEAR $L$mulx4x_body
    1008 
    1009 ALIGN   32
    1010 $L$mulx4x_body:
    1011         lea     rdi,[8+rdx]
    1012         mov     rdx,QWORD[rdx]
    1013         lea     rbx,[((64+32))+rsp]
    1014         mov     r9,rdx
    1015 
    1016         mulx    rax,r8,QWORD[rsi]
    1017         mulx    r14,r11,QWORD[8+rsi]
    1018         add     r11,rax
    1019         mov     QWORD[8+rsp],rdi
    1020         mulx    r13,r12,QWORD[16+rsi]
    1021         adc     r12,r14
    1022         adc     r13,0
    1023 
    1024         mov     rdi,r8
    1025         imul    r8,QWORD[24+rsp]
    1026         xor     rbp,rbp
    1027 
    1028         mulx    r14,rax,QWORD[24+rsi]
    1029         mov     rdx,r8
    1030         lea     rsi,[32+rsi]
    1031         adcx    r13,rax
    1032         adcx    r14,rbp
    1033 
    1034         mulx    r10,rax,QWORD[rcx]
    1035         adcx    rdi,rax
    1036         adox    r10,r11
    1037         mulx    r11,rax,QWORD[8+rcx]
    1038         adcx    r10,rax
    1039         adox    r11,r12
    1040 DB      0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00
    1041         mov     rdi,QWORD[48+rsp]
    1042         mov     QWORD[((-32))+rbx],r10
    1043         adcx    r11,rax
    1044         adox    r12,r13
    1045         mulx    r15,rax,QWORD[24+rcx]
    1046         mov     rdx,r9
    1047         mov     QWORD[((-24))+rbx],r11
    1048         adcx    r12,rax
    1049         adox    r15,rbp
    1050         lea     rcx,[32+rcx]
    1051         mov     QWORD[((-16))+rbx],r12
    1052 
    1053         jmp     NEAR $L$mulx4x_1st
    1054 
    1055 ALIGN   32
    1056 $L$mulx4x_1st:
    1057         adcx    r15,rbp
    1058         mulx    rax,r10,QWORD[rsi]
    1059         adcx    r10,r14
    1060         mulx    r14,r11,QWORD[8+rsi]
    1061         adcx    r11,rax
    1062         mulx    rax,r12,QWORD[16+rsi]
    1063         adcx    r12,r14
    1064         mulx    r14,r13,QWORD[24+rsi]
    1065 DB      0x67,0x67
    1066         mov     rdx,r8
    1067         adcx    r13,rax
    1068         adcx    r14,rbp
    1069         lea     rsi,[32+rsi]
    1070         lea     rbx,[32+rbx]
    1071 
    1072         adox    r10,r15
    1073         mulx    r15,rax,QWORD[rcx]
    1074         adcx    r10,rax
    1075         adox    r11,r15
    1076         mulx    r15,rax,QWORD[8+rcx]
    1077         adcx    r11,rax
    1078         adox    r12,r15
    1079         mulx    r15,rax,QWORD[16+rcx]
    1080         mov     QWORD[((-40))+rbx],r10
    1081         adcx    r12,rax
    1082         mov     QWORD[((-32))+rbx],r11
    1083         adox    r13,r15
    1084         mulx    r15,rax,QWORD[24+rcx]
    1085         mov     rdx,r9
    1086         mov     QWORD[((-24))+rbx],r12
    1087         adcx    r13,rax
    1088         adox    r15,rbp
    1089         lea     rcx,[32+rcx]
    1090         mov     QWORD[((-16))+rbx],r13
    1091 
    1092         dec     rdi
    1093         jnz     NEAR $L$mulx4x_1st
    1094 
    1095         mov     rax,QWORD[rsp]
    1096         mov     rdi,QWORD[8+rsp]
    1097         adc     r15,rbp
    1098         add     r14,r15
    1099         sbb     r15,r15
    1100         mov     QWORD[((-8))+rbx],r14
    1101         jmp     NEAR $L$mulx4x_outer
    1102 
    1103 ALIGN   32
    1104 $L$mulx4x_outer:
    1105         mov     rdx,QWORD[rdi]
    1106         lea     rdi,[8+rdi]
    1107         sub     rsi,rax
    1108         mov     QWORD[rbx],r15
    1109         lea     rbx,[((64+32))+rsp]
    1110         sub     rcx,rax
    1111 
    1112         mulx    r11,r8,QWORD[rsi]
    1113         xor     ebp,ebp
    1114         mov     r9,rdx
    1115         mulx    r12,r14,QWORD[8+rsi]
    1116         adox    r8,QWORD[((-32))+rbx]
    1117         adcx    r11,r14
    1118         mulx    r13,r15,QWORD[16+rsi]
    1119         adox    r11,QWORD[((-24))+rbx]
    1120         adcx    r12,r15
    1121         adox    r12,QWORD[((-16))+rbx]
    1122         adcx    r13,rbp
    1123         adox    r13,rbp
    1124 
    1125         mov     QWORD[8+rsp],rdi
    1126         mov     r15,r8
    1127         imul    r8,QWORD[24+rsp]
    1128         xor     ebp,ebp
    1129 
    1130         mulx    r14,rax,QWORD[24+rsi]
    1131         mov     rdx,r8
    1132         adcx    r13,rax
    1133         adox    r13,QWORD[((-8))+rbx]
    1134         adcx    r14,rbp
    1135         lea     rsi,[32+rsi]
    1136         adox    r14,rbp
    1137 
    1138         mulx    r10,rax,QWORD[rcx]
    1139         adcx    r15,rax
    1140         adox    r10,r11
    1141         mulx    r11,rax,QWORD[8+rcx]
    1142         adcx    r10,rax
    1143         adox    r11,r12
    1144         mulx    r12,rax,QWORD[16+rcx]
    1145         mov     QWORD[((-32))+rbx],r10
    1146         adcx    r11,rax
    1147         adox    r12,r13
    1148         mulx    r15,rax,QWORD[24+rcx]
    1149         mov     rdx,r9
    1150         mov     QWORD[((-24))+rbx],r11
    1151         lea     rcx,[32+rcx]
    1152         adcx    r12,rax
    1153         adox    r15,rbp
    1154         mov     rdi,QWORD[48+rsp]
    1155         mov     QWORD[((-16))+rbx],r12
    1156 
    1157         jmp     NEAR $L$mulx4x_inner
    1158 
    1159 ALIGN   32
    1160 $L$mulx4x_inner:
    1161         mulx    rax,r10,QWORD[rsi]
    1162         adcx    r15,rbp
    1163         adox    r10,r14
    1164         mulx    r14,r11,QWORD[8+rsi]
    1165         adcx    r10,QWORD[rbx]
    1166         adox    r11,rax
    1167         mulx    rax,r12,QWORD[16+rsi]
    1168         adcx    r11,QWORD[8+rbx]
    1169         adox    r12,r14
    1170         mulx    r14,r13,QWORD[24+rsi]
    1171         mov     rdx,r8
    1172         adcx    r12,QWORD[16+rbx]
    1173         adox    r13,rax
    1174         adcx    r13,QWORD[24+rbx]
    1175         adox    r14,rbp
    1176         lea     rsi,[32+rsi]
    1177         lea     rbx,[32+rbx]
    1178         adcx    r14,rbp
    1179 
    1180         adox    r10,r15
    1181         mulx    r15,rax,QWORD[rcx]
    1182         adcx    r10,rax
    1183         adox    r11,r15
    1184         mulx    r15,rax,QWORD[8+rcx]
    1185         adcx    r11,rax
    1186         adox    r12,r15
    1187         mulx    r15,rax,QWORD[16+rcx]
    1188         mov     QWORD[((-40))+rbx],r10
    1189         adcx    r12,rax
    1190         adox    r13,r15
    1191         mulx    r15,rax,QWORD[24+rcx]
    1192         mov     rdx,r9
    1193         mov     QWORD[((-32))+rbx],r11
    1194         mov     QWORD[((-24))+rbx],r12
    1195         adcx    r13,rax
    1196         adox    r15,rbp
    1197         lea     rcx,[32+rcx]
    1198         mov     QWORD[((-16))+rbx],r13
    1199 
    1200         dec     rdi
    1201         jnz     NEAR $L$mulx4x_inner
    1202 
    1203         mov     rax,QWORD[rsp]
    1204         mov     rdi,QWORD[8+rsp]
    1205         adc     r15,rbp
    1206         sub     rbp,QWORD[rbx]
    1207         adc     r14,r15
    1208         sbb     r15,r15
    1209         mov     QWORD[((-8))+rbx],r14
    1210 
    1211         cmp     rdi,QWORD[16+rsp]
    1212         jne     NEAR $L$mulx4x_outer
    1213 
    1214         lea     rbx,[64+rsp]
    1215         sub     rcx,rax
    1216         neg     r15
    1217         mov     rdx,rax
    1218         shr     rax,3+2
    1219         mov     rdi,QWORD[32+rsp]
    1220         jmp     NEAR $L$mulx4x_sub
    1221 
    1222 ALIGN   32
    1223 $L$mulx4x_sub:
    1224         mov     r11,QWORD[rbx]
    1225         mov     r12,QWORD[8+rbx]
    1226         mov     r13,QWORD[16+rbx]
    1227         mov     r14,QWORD[24+rbx]
    1228         lea     rbx,[32+rbx]
    1229         sbb     r11,QWORD[rcx]
    1230         sbb     r12,QWORD[8+rcx]
    1231         sbb     r13,QWORD[16+rcx]
    1232         sbb     r14,QWORD[24+rcx]
    1233         lea     rcx,[32+rcx]
    1234         mov     QWORD[rdi],r11
    1235         mov     QWORD[8+rdi],r12
    1236         mov     QWORD[16+rdi],r13
    1237         mov     QWORD[24+rdi],r14
    1238         lea     rdi,[32+rdi]
    1239         dec     rax
    1240         jnz     NEAR $L$mulx4x_sub
    1241 
    1242         sbb     r15,0
    1243         lea     rbx,[64+rsp]
    1244         sub     rdi,rdx
    1245 
    1246 DB      102,73,15,110,207
    1247         pxor    xmm0,xmm0
    1248         pshufd  xmm1,xmm1,0
    1249         mov     rsi,QWORD[40+rsp]
    1250 
    1251         jmp     NEAR $L$mulx4x_cond_copy
    1252 
    1253 ALIGN   32
    1254 $L$mulx4x_cond_copy:
    1255         movdqa  xmm2,XMMWORD[rbx]
    1256         movdqa  xmm3,XMMWORD[16+rbx]
    1257         lea     rbx,[32+rbx]
    1258         movdqu  xmm4,XMMWORD[rdi]
    1259         movdqu  xmm5,XMMWORD[16+rdi]
    1260         lea     rdi,[32+rdi]
    1261         movdqa  XMMWORD[(-32)+rbx],xmm0
    1262         movdqa  XMMWORD[(-16)+rbx],xmm0
    1263         pcmpeqd xmm0,xmm1
    1264         pand    xmm2,xmm1
    1265         pand    xmm3,xmm1
    1266         pand    xmm4,xmm0
    1267         pand    xmm5,xmm0
    1268         pxor    xmm0,xmm0
    1269         por     xmm4,xmm2
    1270         por     xmm5,xmm3
    1271         movdqu  XMMWORD[(-32)+rdi],xmm4
    1272         movdqu  XMMWORD[(-16)+rdi],xmm5
    1273         sub     rdx,32
    1274         jnz     NEAR $L$mulx4x_cond_copy
    1275 
    1276         mov     QWORD[rbx],rdx
    1277 
    1278         mov     rax,1
    1279         mov     r15,QWORD[((-48))+rsi]
    1280 
    1281         mov     r14,QWORD[((-40))+rsi]
    1282 
    1283         mov     r13,QWORD[((-32))+rsi]
    1284 
    1285         mov     r12,QWORD[((-24))+rsi]
    1286 
    1287         mov     rbp,QWORD[((-16))+rsi]
    1288 
    1289         mov     rbx,QWORD[((-8))+rsi]
    1290 
    1291         lea     rsp,[rsi]
    1292 
    1293 $L$mulx4x_epilogue:
    1294         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
    1295         mov     rsi,QWORD[16+rsp]
    1296         DB      0F3h,0C3h               ;repret
    1297 
    1298 $L$SEH_end_bn_mulx4x_mont:
    1299905DB      77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
    1300906DB      112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
     
    14481054        DD      $L$SEH_end_bn_sqr8x_mont wrt ..imagebase
    14491055        DD      $L$SEH_info_bn_sqr8x_mont wrt ..imagebase
    1450         DD      $L$SEH_begin_bn_mulx4x_mont wrt ..imagebase
    1451         DD      $L$SEH_end_bn_mulx4x_mont wrt ..imagebase
    1452         DD      $L$SEH_info_bn_mulx4x_mont wrt ..imagebase
    14531056section .xdata rdata align=8
    14541057ALIGN   8
     
    14661069        DD      $L$sqr8x_prologue wrt ..imagebase,$L$sqr8x_body wrt ..imagebase,$L$sqr8x_epilogue wrt ..imagebase
    14671070ALIGN   8
    1468 $L$SEH_info_bn_mulx4x_mont:
    1469 DB      9,0,0,0
    1470         DD      sqr_handler wrt ..imagebase
    1471         DD      $L$mulx4x_prologue wrt ..imagebase,$L$mulx4x_body wrt ..imagebase,$L$mulx4x_epilogue wrt ..imagebase
    1472 ALIGN   8
  • trunk/src/libs/openssl-3.0.1/crypto/genasm-nasm/x86_64-mont5.S

    r94083 r94114  
    3030        test    r9d,7
    3131        jnz     NEAR $L$mul_enter
    32         mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    3332        jmp     NEAR $L$mul4x_enter
    3433
     
    481480
    482481$L$mul4x_enter:
    483         and     r11d,0x80108
    484         cmp     r11d,0x80108
    485         je      NEAR $L$mulx4x_enter
    486482        push    rbx
    487483
     
    11271123        mov     rax,rsp
    11281124
    1129         mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    1130         and     r11d,0x80108
    1131         cmp     r11d,0x80108
    1132         je      NEAR $L$powerx5_enter
    11331125        push    rbx
    11341126
     
    22342226        mov     rbp,rcx
    22352227DB      102,73,15,110,218
    2236         mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    2237         and     r11d,0x80108
    2238         cmp     r11d,0x80108
    2239         jne     NEAR $L$from_mont_nox
    2240 
    2241         lea     rdi,[r9*1+rax]
    2242         call    __bn_sqrx8x_reduction
    2243         call    __bn_postx4x_internal
    2244 
    2245         pxor    xmm0,xmm0
    2246         lea     rax,[48+rsp]
    2247         jmp     NEAR $L$from_mont_zero
    2248 
    2249 ALIGN   32
    2250 $L$from_mont_nox:
    22512228        call    __bn_sqr8x_reduction
    22522229        call    __bn_post4x_internal
     
    22892266
    22902267$L$SEH_end_bn_from_mont8x:
    2291 
    2292 ALIGN   32
    2293 bn_mulx4x_mont_gather5:
    2294         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
    2295         mov     QWORD[16+rsp],rsi
    2296         mov     rax,rsp
    2297 $L$SEH_begin_bn_mulx4x_mont_gather5:
    2298         mov     rdi,rcx
    2299         mov     rsi,rdx
    2300         mov     rdx,r8
    2301         mov     rcx,r9
    2302         mov     r8,QWORD[40+rsp]
    2303         mov     r9,QWORD[48+rsp]
    2304 
    2305 
    2306 
    2307         mov     rax,rsp
    2308 
    2309 $L$mulx4x_enter:
    2310         push    rbx
    2311 
    2312         push    rbp
    2313 
    2314         push    r12
    2315 
    2316         push    r13
    2317 
    2318         push    r14
    2319 
    2320         push    r15
    2321 
    2322 $L$mulx4x_prologue:
    2323 
    2324         shl     r9d,3
    2325         lea     r10,[r9*2+r9]
    2326         neg     r9
    2327         mov     r8,QWORD[r8]
    2328 
    2329 
    2330 
    2331 
    2332 
    2333 
    2334 
    2335 
    2336 
    2337 
    2338         lea     r11,[((-320))+r9*2+rsp]
    2339         mov     rbp,rsp
    2340         sub     r11,rdi
    2341         and     r11,4095
    2342         cmp     r10,r11
    2343         jb      NEAR $L$mulx4xsp_alt
    2344         sub     rbp,r11
    2345         lea     rbp,[((-320))+r9*2+rbp]
    2346         jmp     NEAR $L$mulx4xsp_done
    2347 
    2348 $L$mulx4xsp_alt:
    2349         lea     r10,[((4096-320))+r9*2]
    2350         lea     rbp,[((-320))+r9*2+rbp]
    2351         sub     r11,r10
    2352         mov     r10,0
    2353         cmovc   r11,r10
    2354         sub     rbp,r11
    2355 $L$mulx4xsp_done:
    2356         and     rbp,-64
    2357         mov     r11,rsp
    2358         sub     r11,rbp
    2359         and     r11,-4096
    2360         lea     rsp,[rbp*1+r11]
    2361         mov     r10,QWORD[rsp]
    2362         cmp     rsp,rbp
    2363         ja      NEAR $L$mulx4x_page_walk
    2364         jmp     NEAR $L$mulx4x_page_walk_done
    2365 
    2366 $L$mulx4x_page_walk:
    2367         lea     rsp,[((-4096))+rsp]
    2368         mov     r10,QWORD[rsp]
    2369         cmp     rsp,rbp
    2370         ja      NEAR $L$mulx4x_page_walk
    2371 $L$mulx4x_page_walk_done:
    2372 
    2373 
    2374 
    2375 
    2376 
    2377 
    2378 
    2379 
    2380 
    2381 
    2382 
    2383 
    2384 
    2385         mov     QWORD[32+rsp],r8
    2386         mov     QWORD[40+rsp],rax
    2387 
    2388 $L$mulx4x_body:
    2389         call    mulx4x_internal
    2390 
    2391         mov     rsi,QWORD[40+rsp]
    2392 
    2393         mov     rax,1
    2394 
    2395         mov     r15,QWORD[((-48))+rsi]
    2396 
    2397         mov     r14,QWORD[((-40))+rsi]
    2398 
    2399         mov     r13,QWORD[((-32))+rsi]
    2400 
    2401         mov     r12,QWORD[((-24))+rsi]
    2402 
    2403         mov     rbp,QWORD[((-16))+rsi]
    2404 
    2405         mov     rbx,QWORD[((-8))+rsi]
    2406 
    2407         lea     rsp,[rsi]
    2408 
    2409 $L$mulx4x_epilogue:
    2410         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
    2411         mov     rsi,QWORD[16+rsp]
    2412         DB      0F3h,0C3h               ;repret
    2413 
    2414 $L$SEH_end_bn_mulx4x_mont_gather5:
    2415 
    2416 
    2417 ALIGN   32
    2418 mulx4x_internal:
    2419 
    2420         mov     QWORD[8+rsp],r9
    2421         mov     r10,r9
    2422         neg     r9
    2423         shl     r9,5
    2424         neg     r10
    2425         lea     r13,[128+r9*1+rdx]
    2426         shr     r9,5+5
    2427         movd    xmm5,DWORD[56+rax]
    2428         sub     r9,1
    2429         lea     rax,[$L$inc]
    2430         mov     QWORD[((16+8))+rsp],r13
    2431         mov     QWORD[((24+8))+rsp],r9
    2432         mov     QWORD[((56+8))+rsp],rdi
    2433         movdqa  xmm0,XMMWORD[rax]
    2434         movdqa  xmm1,XMMWORD[16+rax]
    2435         lea     r10,[((88-112))+r10*1+rsp]
    2436         lea     rdi,[128+rdx]
    2437 
    2438         pshufd  xmm5,xmm5,0
    2439         movdqa  xmm4,xmm1
    2440 DB      0x67
    2441         movdqa  xmm2,xmm1
    2442 DB      0x67
    2443         paddd   xmm1,xmm0
    2444         pcmpeqd xmm0,xmm5
    2445         movdqa  xmm3,xmm4
    2446         paddd   xmm2,xmm1
    2447         pcmpeqd xmm1,xmm5
    2448         movdqa  XMMWORD[112+r10],xmm0
    2449         movdqa  xmm0,xmm4
    2450 
    2451         paddd   xmm3,xmm2
    2452         pcmpeqd xmm2,xmm5
    2453         movdqa  XMMWORD[128+r10],xmm1
    2454         movdqa  xmm1,xmm4
    2455 
    2456         paddd   xmm0,xmm3
    2457         pcmpeqd xmm3,xmm5
    2458         movdqa  XMMWORD[144+r10],xmm2
    2459         movdqa  xmm2,xmm4
    2460 
    2461         paddd   xmm1,xmm0
    2462         pcmpeqd xmm0,xmm5
    2463         movdqa  XMMWORD[160+r10],xmm3
    2464         movdqa  xmm3,xmm4
    2465         paddd   xmm2,xmm1
    2466         pcmpeqd xmm1,xmm5
    2467         movdqa  XMMWORD[176+r10],xmm0
    2468         movdqa  xmm0,xmm4
    2469 
    2470         paddd   xmm3,xmm2
    2471         pcmpeqd xmm2,xmm5
    2472         movdqa  XMMWORD[192+r10],xmm1
    2473         movdqa  xmm1,xmm4
    2474 
    2475         paddd   xmm0,xmm3
    2476         pcmpeqd xmm3,xmm5
    2477         movdqa  XMMWORD[208+r10],xmm2
    2478         movdqa  xmm2,xmm4
    2479 
    2480         paddd   xmm1,xmm0
    2481         pcmpeqd xmm0,xmm5
    2482         movdqa  XMMWORD[224+r10],xmm3
    2483         movdqa  xmm3,xmm4
    2484         paddd   xmm2,xmm1
    2485         pcmpeqd xmm1,xmm5
    2486         movdqa  XMMWORD[240+r10],xmm0
    2487         movdqa  xmm0,xmm4
    2488 
    2489         paddd   xmm3,xmm2
    2490         pcmpeqd xmm2,xmm5
    2491         movdqa  XMMWORD[256+r10],xmm1
    2492         movdqa  xmm1,xmm4
    2493 
    2494         paddd   xmm0,xmm3
    2495         pcmpeqd xmm3,xmm5
    2496         movdqa  XMMWORD[272+r10],xmm2
    2497         movdqa  xmm2,xmm4
    2498 
    2499         paddd   xmm1,xmm0
    2500         pcmpeqd xmm0,xmm5
    2501         movdqa  XMMWORD[288+r10],xmm3
    2502         movdqa  xmm3,xmm4
    2503 DB      0x67
    2504         paddd   xmm2,xmm1
    2505         pcmpeqd xmm1,xmm5
    2506         movdqa  XMMWORD[304+r10],xmm0
    2507 
    2508         paddd   xmm3,xmm2
    2509         pcmpeqd xmm2,xmm5
    2510         movdqa  XMMWORD[320+r10],xmm1
    2511 
    2512         pcmpeqd xmm3,xmm5
    2513         movdqa  XMMWORD[336+r10],xmm2
    2514 
    2515         pand    xmm0,XMMWORD[64+rdi]
    2516         pand    xmm1,XMMWORD[80+rdi]
    2517         pand    xmm2,XMMWORD[96+rdi]
    2518         movdqa  XMMWORD[352+r10],xmm3
    2519         pand    xmm3,XMMWORD[112+rdi]
    2520         por     xmm0,xmm2
    2521         por     xmm1,xmm3
    2522         movdqa  xmm4,XMMWORD[((-128))+rdi]
    2523         movdqa  xmm5,XMMWORD[((-112))+rdi]
    2524         movdqa  xmm2,XMMWORD[((-96))+rdi]
    2525         pand    xmm4,XMMWORD[112+r10]
    2526         movdqa  xmm3,XMMWORD[((-80))+rdi]
    2527         pand    xmm5,XMMWORD[128+r10]
    2528         por     xmm0,xmm4
    2529         pand    xmm2,XMMWORD[144+r10]
    2530         por     xmm1,xmm5
    2531         pand    xmm3,XMMWORD[160+r10]
    2532         por     xmm0,xmm2
    2533         por     xmm1,xmm3
    2534         movdqa  xmm4,XMMWORD[((-64))+rdi]
    2535         movdqa  xmm5,XMMWORD[((-48))+rdi]
    2536         movdqa  xmm2,XMMWORD[((-32))+rdi]
    2537         pand    xmm4,XMMWORD[176+r10]
    2538         movdqa  xmm3,XMMWORD[((-16))+rdi]
    2539         pand    xmm5,XMMWORD[192+r10]
    2540         por     xmm0,xmm4
    2541         pand    xmm2,XMMWORD[208+r10]
    2542         por     xmm1,xmm5
    2543         pand    xmm3,XMMWORD[224+r10]
    2544         por     xmm0,xmm2
    2545         por     xmm1,xmm3
    2546         movdqa  xmm4,XMMWORD[rdi]
    2547         movdqa  xmm5,XMMWORD[16+rdi]
    2548         movdqa  xmm2,XMMWORD[32+rdi]
    2549         pand    xmm4,XMMWORD[240+r10]
    2550         movdqa  xmm3,XMMWORD[48+rdi]
    2551         pand    xmm5,XMMWORD[256+r10]
    2552         por     xmm0,xmm4
    2553         pand    xmm2,XMMWORD[272+r10]
    2554         por     xmm1,xmm5
    2555         pand    xmm3,XMMWORD[288+r10]
    2556         por     xmm0,xmm2
    2557         por     xmm1,xmm3
    2558         pxor    xmm0,xmm1
    2559         pshufd  xmm1,xmm0,0x4e
    2560         por     xmm0,xmm1
    2561         lea     rdi,[256+rdi]
    2562 DB      102,72,15,126,194
    2563         lea     rbx,[((64+32+8))+rsp]
    2564 
    2565         mov     r9,rdx
    2566         mulx    rax,r8,QWORD[rsi]
    2567         mulx    r12,r11,QWORD[8+rsi]
    2568         add     r11,rax
    2569         mulx    r13,rax,QWORD[16+rsi]
    2570         adc     r12,rax
    2571         adc     r13,0
    2572         mulx    r14,rax,QWORD[24+rsi]
    2573 
    2574         mov     r15,r8
    2575         imul    r8,QWORD[((32+8))+rsp]
    2576         xor     rbp,rbp
    2577         mov     rdx,r8
    2578 
    2579         mov     QWORD[((8+8))+rsp],rdi
    2580 
    2581         lea     rsi,[32+rsi]
    2582         adcx    r13,rax
    2583         adcx    r14,rbp
    2584 
    2585         mulx    r10,rax,QWORD[rcx]
    2586         adcx    r15,rax
    2587         adox    r10,r11
    2588         mulx    r11,rax,QWORD[8+rcx]
    2589         adcx    r10,rax
    2590         adox    r11,r12
    2591         mulx    r12,rax,QWORD[16+rcx]
    2592         mov     rdi,QWORD[((24+8))+rsp]
    2593         mov     QWORD[((-32))+rbx],r10
    2594         adcx    r11,rax
    2595         adox    r12,r13
    2596         mulx    r15,rax,QWORD[24+rcx]
    2597         mov     rdx,r9
    2598         mov     QWORD[((-24))+rbx],r11
    2599         adcx    r12,rax
    2600         adox    r15,rbp
    2601         lea     rcx,[32+rcx]
    2602         mov     QWORD[((-16))+rbx],r12
    2603         jmp     NEAR $L$mulx4x_1st
    2604 
    2605 ALIGN   32
    2606 $L$mulx4x_1st:
    2607         adcx    r15,rbp
    2608         mulx    rax,r10,QWORD[rsi]
    2609         adcx    r10,r14
    2610         mulx    r14,r11,QWORD[8+rsi]
    2611         adcx    r11,rax
    2612         mulx    rax,r12,QWORD[16+rsi]
    2613         adcx    r12,r14
    2614         mulx    r14,r13,QWORD[24+rsi]
    2615 DB      0x67,0x67
    2616         mov     rdx,r8
    2617         adcx    r13,rax
    2618         adcx    r14,rbp
    2619         lea     rsi,[32+rsi]
    2620         lea     rbx,[32+rbx]
    2621 
    2622         adox    r10,r15
    2623         mulx    r15,rax,QWORD[rcx]
    2624         adcx    r10,rax
    2625         adox    r11,r15
    2626         mulx    r15,rax,QWORD[8+rcx]
    2627         adcx    r11,rax
    2628         adox    r12,r15
    2629         mulx    r15,rax,QWORD[16+rcx]
    2630         mov     QWORD[((-40))+rbx],r10
    2631         adcx    r12,rax
    2632         mov     QWORD[((-32))+rbx],r11
    2633         adox    r13,r15
    2634         mulx    r15,rax,QWORD[24+rcx]
    2635         mov     rdx,r9
    2636         mov     QWORD[((-24))+rbx],r12
    2637         adcx    r13,rax
    2638         adox    r15,rbp
    2639         lea     rcx,[32+rcx]
    2640         mov     QWORD[((-16))+rbx],r13
    2641 
    2642         dec     rdi
    2643         jnz     NEAR $L$mulx4x_1st
    2644 
    2645         mov     rax,QWORD[8+rsp]
    2646         adc     r15,rbp
    2647         lea     rsi,[rax*1+rsi]
    2648         add     r14,r15
    2649         mov     rdi,QWORD[((8+8))+rsp]
    2650         adc     rbp,rbp
    2651         mov     QWORD[((-8))+rbx],r14
    2652         jmp     NEAR $L$mulx4x_outer
    2653 
    2654 ALIGN   32
    2655 $L$mulx4x_outer:
    2656         lea     r10,[((16-256))+rbx]
    2657         pxor    xmm4,xmm4
    2658 DB      0x67,0x67
    2659         pxor    xmm5,xmm5
    2660         movdqa  xmm0,XMMWORD[((-128))+rdi]
    2661         movdqa  xmm1,XMMWORD[((-112))+rdi]
    2662         movdqa  xmm2,XMMWORD[((-96))+rdi]
    2663         pand    xmm0,XMMWORD[256+r10]
    2664         movdqa  xmm3,XMMWORD[((-80))+rdi]
    2665         pand    xmm1,XMMWORD[272+r10]
    2666         por     xmm4,xmm0
    2667         pand    xmm2,XMMWORD[288+r10]
    2668         por     xmm5,xmm1
    2669         pand    xmm3,XMMWORD[304+r10]
    2670         por     xmm4,xmm2
    2671         por     xmm5,xmm3
    2672         movdqa  xmm0,XMMWORD[((-64))+rdi]
    2673         movdqa  xmm1,XMMWORD[((-48))+rdi]
    2674         movdqa  xmm2,XMMWORD[((-32))+rdi]
    2675         pand    xmm0,XMMWORD[320+r10]
    2676         movdqa  xmm3,XMMWORD[((-16))+rdi]
    2677         pand    xmm1,XMMWORD[336+r10]
    2678         por     xmm4,xmm0
    2679         pand    xmm2,XMMWORD[352+r10]
    2680         por     xmm5,xmm1
    2681         pand    xmm3,XMMWORD[368+r10]
    2682         por     xmm4,xmm2
    2683         por     xmm5,xmm3
    2684         movdqa  xmm0,XMMWORD[rdi]
    2685         movdqa  xmm1,XMMWORD[16+rdi]
    2686         movdqa  xmm2,XMMWORD[32+rdi]
    2687         pand    xmm0,XMMWORD[384+r10]
    2688         movdqa  xmm3,XMMWORD[48+rdi]
    2689         pand    xmm1,XMMWORD[400+r10]
    2690         por     xmm4,xmm0
    2691         pand    xmm2,XMMWORD[416+r10]
    2692         por     xmm5,xmm1
    2693         pand    xmm3,XMMWORD[432+r10]
    2694         por     xmm4,xmm2
    2695         por     xmm5,xmm3
    2696         movdqa  xmm0,XMMWORD[64+rdi]
    2697         movdqa  xmm1,XMMWORD[80+rdi]
    2698         movdqa  xmm2,XMMWORD[96+rdi]
    2699         pand    xmm0,XMMWORD[448+r10]
    2700         movdqa  xmm3,XMMWORD[112+rdi]
    2701         pand    xmm1,XMMWORD[464+r10]
    2702         por     xmm4,xmm0
    2703         pand    xmm2,XMMWORD[480+r10]
    2704         por     xmm5,xmm1
    2705         pand    xmm3,XMMWORD[496+r10]
    2706         por     xmm4,xmm2
    2707         por     xmm5,xmm3
    2708         por     xmm4,xmm5
    2709         pshufd  xmm0,xmm4,0x4e
    2710         por     xmm0,xmm4
    2711         lea     rdi,[256+rdi]
    2712 DB      102,72,15,126,194
    2713 
    2714         mov     QWORD[rbx],rbp
    2715         lea     rbx,[32+rax*1+rbx]
    2716         mulx    r11,r8,QWORD[rsi]
    2717         xor     rbp,rbp
    2718         mov     r9,rdx
    2719         mulx    r12,r14,QWORD[8+rsi]
    2720         adox    r8,QWORD[((-32))+rbx]
    2721         adcx    r11,r14
    2722         mulx    r13,r15,QWORD[16+rsi]
    2723         adox    r11,QWORD[((-24))+rbx]
    2724         adcx    r12,r15
    2725         mulx    r14,rdx,QWORD[24+rsi]
    2726         adox    r12,QWORD[((-16))+rbx]
    2727         adcx    r13,rdx
    2728         lea     rcx,[rax*1+rcx]
    2729         lea     rsi,[32+rsi]
    2730         adox    r13,QWORD[((-8))+rbx]
    2731         adcx    r14,rbp
    2732         adox    r14,rbp
    2733 
    2734         mov     r15,r8
    2735         imul    r8,QWORD[((32+8))+rsp]
    2736 
    2737         mov     rdx,r8
    2738         xor     rbp,rbp
    2739         mov     QWORD[((8+8))+rsp],rdi
    2740 
    2741         mulx    r10,rax,QWORD[rcx]
    2742         adcx    r15,rax
    2743         adox    r10,r11
    2744         mulx    r11,rax,QWORD[8+rcx]
    2745         adcx    r10,rax
    2746         adox    r11,r12
    2747         mulx    r12,rax,QWORD[16+rcx]
    2748         adcx    r11,rax
    2749         adox    r12,r13
    2750         mulx    r15,rax,QWORD[24+rcx]
    2751         mov     rdx,r9
    2752         mov     rdi,QWORD[((24+8))+rsp]
    2753         mov     QWORD[((-32))+rbx],r10
    2754         adcx    r12,rax
    2755         mov     QWORD[((-24))+rbx],r11
    2756         adox    r15,rbp
    2757         mov     QWORD[((-16))+rbx],r12
    2758         lea     rcx,[32+rcx]
    2759         jmp     NEAR $L$mulx4x_inner
    2760 
    2761 ALIGN   32
    2762 $L$mulx4x_inner:
    2763         mulx    rax,r10,QWORD[rsi]
    2764         adcx    r15,rbp
    2765         adox    r10,r14
    2766         mulx    r14,r11,QWORD[8+rsi]
    2767         adcx    r10,QWORD[rbx]
    2768         adox    r11,rax
    2769         mulx    rax,r12,QWORD[16+rsi]
    2770         adcx    r11,QWORD[8+rbx]
    2771         adox    r12,r14
    2772         mulx    r14,r13,QWORD[24+rsi]
    2773         mov     rdx,r8
    2774         adcx    r12,QWORD[16+rbx]
    2775         adox    r13,rax
    2776         adcx    r13,QWORD[24+rbx]
    2777         adox    r14,rbp
    2778         lea     rsi,[32+rsi]
    2779         lea     rbx,[32+rbx]
    2780         adcx    r14,rbp
    2781 
    2782         adox    r10,r15
    2783         mulx    r15,rax,QWORD[rcx]
    2784         adcx    r10,rax
    2785         adox    r11,r15
    2786         mulx    r15,rax,QWORD[8+rcx]
    2787         adcx    r11,rax
    2788         adox    r12,r15
    2789         mulx    r15,rax,QWORD[16+rcx]
    2790         mov     QWORD[((-40))+rbx],r10
    2791         adcx    r12,rax
    2792         adox    r13,r15
    2793         mov     QWORD[((-32))+rbx],r11
    2794         mulx    r15,rax,QWORD[24+rcx]
    2795         mov     rdx,r9
    2796         lea     rcx,[32+rcx]
    2797         mov     QWORD[((-24))+rbx],r12
    2798         adcx    r13,rax
    2799         adox    r15,rbp
    2800         mov     QWORD[((-16))+rbx],r13
    2801 
    2802         dec     rdi
    2803         jnz     NEAR $L$mulx4x_inner
    2804 
    2805         mov     rax,QWORD[((0+8))+rsp]
    2806         adc     r15,rbp
    2807         sub     rdi,QWORD[rbx]
    2808         mov     rdi,QWORD[((8+8))+rsp]
    2809         mov     r10,QWORD[((16+8))+rsp]
    2810         adc     r14,r15
    2811         lea     rsi,[rax*1+rsi]
    2812         adc     rbp,rbp
    2813         mov     QWORD[((-8))+rbx],r14
    2814 
    2815         cmp     rdi,r10
    2816         jb      NEAR $L$mulx4x_outer
    2817 
    2818         mov     r10,QWORD[((-8))+rcx]
    2819         mov     r8,rbp
    2820         mov     r12,QWORD[rax*1+rcx]
    2821         lea     rbp,[rax*1+rcx]
    2822         mov     rcx,rax
    2823         lea     rdi,[rax*1+rbx]
    2824         xor     eax,eax
    2825         xor     r15,r15
    2826         sub     r10,r14
    2827         adc     r15,r15
    2828         or      r8,r15
    2829         sar     rcx,3+2
    2830         sub     rax,r8
    2831         mov     rdx,QWORD[((56+8))+rsp]
    2832         dec     r12
    2833         mov     r13,QWORD[8+rbp]
    2834         xor     r8,r8
    2835         mov     r14,QWORD[16+rbp]
    2836         mov     r15,QWORD[24+rbp]
    2837         jmp     NEAR $L$sqrx4x_sub_entry
    2838 
    2839 
    2840 
    2841 ALIGN   32
    2842 bn_powerx5:
    2843         mov     QWORD[8+rsp],rdi        ;WIN64 prologue
    2844         mov     QWORD[16+rsp],rsi
    2845         mov     rax,rsp
    2846 $L$SEH_begin_bn_powerx5:
    2847         mov     rdi,rcx
    2848         mov     rsi,rdx
    2849         mov     rdx,r8
    2850         mov     rcx,r9
    2851         mov     r8,QWORD[40+rsp]
    2852         mov     r9,QWORD[48+rsp]
    2853 
    2854 
    2855 
    2856         mov     rax,rsp
    2857 
    2858 $L$powerx5_enter:
    2859         push    rbx
    2860 
    2861         push    rbp
    2862 
    2863         push    r12
    2864 
    2865         push    r13
    2866 
    2867         push    r14
    2868 
    2869         push    r15
    2870 
    2871 $L$powerx5_prologue:
    2872 
    2873         shl     r9d,3
    2874         lea     r10,[r9*2+r9]
    2875         neg     r9
    2876         mov     r8,QWORD[r8]
    2877 
    2878 
    2879 
    2880 
    2881 
    2882 
    2883 
    2884 
    2885         lea     r11,[((-320))+r9*2+rsp]
    2886         mov     rbp,rsp
    2887         sub     r11,rdi
    2888         and     r11,4095
    2889         cmp     r10,r11
    2890         jb      NEAR $L$pwrx_sp_alt
    2891         sub     rbp,r11
    2892         lea     rbp,[((-320))+r9*2+rbp]
    2893         jmp     NEAR $L$pwrx_sp_done
    2894 
    2895 ALIGN   32
    2896 $L$pwrx_sp_alt:
    2897         lea     r10,[((4096-320))+r9*2]
    2898         lea     rbp,[((-320))+r9*2+rbp]
    2899         sub     r11,r10
    2900         mov     r10,0
    2901         cmovc   r11,r10
    2902         sub     rbp,r11
    2903 $L$pwrx_sp_done:
    2904         and     rbp,-64
    2905         mov     r11,rsp
    2906         sub     r11,rbp
    2907         and     r11,-4096
    2908         lea     rsp,[rbp*1+r11]
    2909         mov     r10,QWORD[rsp]
    2910         cmp     rsp,rbp
    2911         ja      NEAR $L$pwrx_page_walk
    2912         jmp     NEAR $L$pwrx_page_walk_done
    2913 
    2914 $L$pwrx_page_walk:
    2915         lea     rsp,[((-4096))+rsp]
    2916         mov     r10,QWORD[rsp]
    2917         cmp     rsp,rbp
    2918         ja      NEAR $L$pwrx_page_walk
    2919 $L$pwrx_page_walk_done:
    2920 
    2921         mov     r10,r9
    2922         neg     r9
    2923 
    2924 
    2925 
    2926 
    2927 
    2928 
    2929 
    2930 
    2931 
    2932 
    2933 
    2934 
    2935         pxor    xmm0,xmm0
    2936 DB      102,72,15,110,207
    2937 DB      102,72,15,110,209
    2938 DB      102,73,15,110,218
    2939 DB      102,72,15,110,226
    2940         mov     QWORD[32+rsp],r8
    2941         mov     QWORD[40+rsp],rax
    2942 
    2943 $L$powerx5_body:
    2944 
    2945         call    __bn_sqrx8x_internal
    2946         call    __bn_postx4x_internal
    2947         call    __bn_sqrx8x_internal
    2948         call    __bn_postx4x_internal
    2949         call    __bn_sqrx8x_internal
    2950         call    __bn_postx4x_internal
    2951         call    __bn_sqrx8x_internal
    2952         call    __bn_postx4x_internal
    2953         call    __bn_sqrx8x_internal
    2954         call    __bn_postx4x_internal
    2955 
    2956         mov     r9,r10
    2957         mov     rdi,rsi
    2958 DB      102,72,15,126,209
    2959 DB      102,72,15,126,226
    2960         mov     rax,QWORD[40+rsp]
    2961 
    2962         call    mulx4x_internal
    2963 
    2964         mov     rsi,QWORD[40+rsp]
    2965 
    2966         mov     rax,1
    2967 
    2968         mov     r15,QWORD[((-48))+rsi]
    2969 
    2970         mov     r14,QWORD[((-40))+rsi]
    2971 
    2972         mov     r13,QWORD[((-32))+rsi]
    2973 
    2974         mov     r12,QWORD[((-24))+rsi]
    2975 
    2976         mov     rbp,QWORD[((-16))+rsi]
    2977 
    2978         mov     rbx,QWORD[((-8))+rsi]
    2979 
    2980         lea     rsp,[rsi]
    2981 
    2982 $L$powerx5_epilogue:
    2983         mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
    2984         mov     rsi,QWORD[16+rsp]
    2985         DB      0F3h,0C3h               ;repret
    2986 
    2987 $L$SEH_end_bn_powerx5:
    2988 
    2989 global  bn_sqrx8x_internal
    2990 
    2991 
    2992 ALIGN   32
    2993 bn_sqrx8x_internal:
    2994 __bn_sqrx8x_internal:
    2995 
    2996 
    2997 
    2998 
    2999 
    3000 
    3001 
    3002 
    3003 
    3004 
    3005 
    3006 
    3007 
    3008 
    3009 
    3010 
    3011 
    3012 
    3013 
    3014 
    3015 
    3016 
    3017 
    3018 
    3019 
    3020 
    3021 
    3022 
    3023 
    3024 
    3025 
    3026 
    3027 
    3028 
    3029 
    3030 
    3031 
    3032 
    3033 
    3034 
    3035 
    3036         lea     rdi,[((48+8))+rsp]
    3037         lea     rbp,[r9*1+rsi]
    3038         mov     QWORD[((0+8))+rsp],r9
    3039         mov     QWORD[((8+8))+rsp],rbp
    3040         jmp     NEAR $L$sqr8x_zero_start
    3041 
    3042 ALIGN   32
    3043 DB      0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00
    3044 $L$sqrx8x_zero:
    3045 DB      0x3e
    3046         movdqa  XMMWORD[rdi],xmm0
    3047         movdqa  XMMWORD[16+rdi],xmm0
    3048         movdqa  XMMWORD[32+rdi],xmm0
    3049         movdqa  XMMWORD[48+rdi],xmm0
    3050 $L$sqr8x_zero_start:
    3051         movdqa  XMMWORD[64+rdi],xmm0
    3052         movdqa  XMMWORD[80+rdi],xmm0
    3053         movdqa  XMMWORD[96+rdi],xmm0
    3054         movdqa  XMMWORD[112+rdi],xmm0
    3055         lea     rdi,[128+rdi]
    3056         sub     r9,64
    3057         jnz     NEAR $L$sqrx8x_zero
    3058 
    3059         mov     rdx,QWORD[rsi]
    3060 
    3061         xor     r10,r10
    3062         xor     r11,r11
    3063         xor     r12,r12
    3064         xor     r13,r13
    3065         xor     r14,r14
    3066         xor     r15,r15
    3067         lea     rdi,[((48+8))+rsp]
    3068         xor     rbp,rbp
    3069         jmp     NEAR $L$sqrx8x_outer_loop
    3070 
    3071 ALIGN   32
    3072 $L$sqrx8x_outer_loop:
    3073         mulx    rax,r8,QWORD[8+rsi]
    3074         adcx    r8,r9
    3075         adox    r10,rax
    3076         mulx    rax,r9,QWORD[16+rsi]
    3077         adcx    r9,r10
    3078         adox    r11,rax
    3079 DB      0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00
    3080         adcx    r10,r11
    3081         adox    r12,rax
    3082 DB      0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00
    3083         adcx    r11,r12
    3084         adox    r13,rax
    3085         mulx    rax,r12,QWORD[40+rsi]
    3086         adcx    r12,r13
    3087         adox    r14,rax
    3088         mulx    rax,r13,QWORD[48+rsi]
    3089         adcx    r13,r14
    3090         adox    rax,r15
    3091         mulx    r15,r14,QWORD[56+rsi]
    3092         mov     rdx,QWORD[8+rsi]
    3093         adcx    r14,rax
    3094         adox    r15,rbp
    3095         adc     r15,QWORD[64+rdi]
    3096         mov     QWORD[8+rdi],r8
    3097         mov     QWORD[16+rdi],r9
    3098         sbb     rcx,rcx
    3099         xor     rbp,rbp
    3100 
    3101 
    3102         mulx    rbx,r8,QWORD[16+rsi]
    3103         mulx    rax,r9,QWORD[24+rsi]
    3104         adcx    r8,r10
    3105         adox    r9,rbx
    3106         mulx    rbx,r10,QWORD[32+rsi]
    3107         adcx    r9,r11
    3108         adox    r10,rax
    3109 DB      0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00
    3110         adcx    r10,r12
    3111         adox    r11,rbx
    3112 DB      0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00
    3113         adcx    r11,r13
    3114         adox    r12,r14
    3115 DB      0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00
    3116         mov     rdx,QWORD[16+rsi]
    3117         adcx    r12,rax
    3118         adox    r13,rbx
    3119         adcx    r13,r15
    3120         adox    r14,rbp
    3121         adcx    r14,rbp
    3122 
    3123         mov     QWORD[24+rdi],r8
    3124         mov     QWORD[32+rdi],r9
    3125 
    3126         mulx    rbx,r8,QWORD[24+rsi]
    3127         mulx    rax,r9,QWORD[32+rsi]
    3128         adcx    r8,r10
    3129         adox    r9,rbx
    3130         mulx    rbx,r10,QWORD[40+rsi]
    3131         adcx    r9,r11
    3132         adox    r10,rax
    3133 DB      0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00
    3134         adcx    r10,r12
    3135         adox    r11,r13
    3136 DB      0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00
    3137 DB      0x3e
    3138         mov     rdx,QWORD[24+rsi]
    3139         adcx    r11,rbx
    3140         adox    r12,rax
    3141         adcx    r12,r14
    3142         mov     QWORD[40+rdi],r8
    3143         mov     QWORD[48+rdi],r9
    3144         mulx    rax,r8,QWORD[32+rsi]
    3145         adox    r13,rbp
    3146         adcx    r13,rbp
    3147 
    3148         mulx    rbx,r9,QWORD[40+rsi]
    3149         adcx    r8,r10
    3150         adox    r9,rax
    3151         mulx    rax,r10,QWORD[48+rsi]
    3152         adcx    r9,r11
    3153         adox    r10,r12
    3154         mulx    r12,r11,QWORD[56+rsi]
    3155         mov     rdx,QWORD[32+rsi]
    3156         mov     r14,QWORD[40+rsi]
    3157         adcx    r10,rbx
    3158         adox    r11,rax
    3159         mov     r15,QWORD[48+rsi]
    3160         adcx    r11,r13
    3161         adox    r12,rbp
    3162         adcx    r12,rbp
    3163 
    3164         mov     QWORD[56+rdi],r8
    3165         mov     QWORD[64+rdi],r9
    3166 
    3167         mulx    rax,r9,r14
    3168         mov     r8,QWORD[56+rsi]
    3169         adcx    r9,r10
    3170         mulx    rbx,r10,r15
    3171         adox    r10,rax
    3172         adcx    r10,r11
    3173         mulx    rax,r11,r8
    3174         mov     rdx,r14
    3175         adox    r11,rbx
    3176         adcx    r11,r12
    3177 
    3178         adcx    rax,rbp
    3179 
    3180         mulx    rbx,r14,r15
    3181         mulx    r13,r12,r8
    3182         mov     rdx,r15
    3183         lea     rsi,[64+rsi]
    3184         adcx    r11,r14
    3185         adox    r12,rbx
    3186         adcx    r12,rax
    3187         adox    r13,rbp
    3188 
    3189 DB      0x67,0x67
    3190         mulx    r14,r8,r8
    3191         adcx    r13,r8
    3192         adcx    r14,rbp
    3193 
    3194         cmp     rsi,QWORD[((8+8))+rsp]
    3195         je      NEAR $L$sqrx8x_outer_break
    3196 
    3197         neg     rcx
    3198         mov     rcx,-8
    3199         mov     r15,rbp
    3200         mov     r8,QWORD[64+rdi]
    3201         adcx    r9,QWORD[72+rdi]
    3202         adcx    r10,QWORD[80+rdi]
    3203         adcx    r11,QWORD[88+rdi]
    3204         adc     r12,QWORD[96+rdi]
    3205         adc     r13,QWORD[104+rdi]
    3206         adc     r14,QWORD[112+rdi]
    3207         adc     r15,QWORD[120+rdi]
    3208         lea     rbp,[rsi]
    3209         lea     rdi,[128+rdi]
    3210         sbb     rax,rax
    3211 
    3212         mov     rdx,QWORD[((-64))+rsi]
    3213         mov     QWORD[((16+8))+rsp],rax
    3214         mov     QWORD[((24+8))+rsp],rdi
    3215 
    3216 
    3217         xor     eax,eax
    3218         jmp     NEAR $L$sqrx8x_loop
    3219 
    3220 ALIGN   32
    3221 $L$sqrx8x_loop:
    3222         mov     rbx,r8
    3223         mulx    r8,rax,QWORD[rbp]
    3224         adcx    rbx,rax
    3225         adox    r8,r9
    3226 
    3227         mulx    r9,rax,QWORD[8+rbp]
    3228         adcx    r8,rax
    3229         adox    r9,r10
    3230 
    3231         mulx    r10,rax,QWORD[16+rbp]
    3232         adcx    r9,rax
    3233         adox    r10,r11
    3234 
    3235         mulx    r11,rax,QWORD[24+rbp]
    3236         adcx    r10,rax
    3237         adox    r11,r12
    3238 
    3239 DB      0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00
    3240         adcx    r11,rax
    3241         adox    r12,r13
    3242 
    3243         mulx    r13,rax,QWORD[40+rbp]
    3244         adcx    r12,rax
    3245         adox    r13,r14
    3246 
    3247         mulx    r14,rax,QWORD[48+rbp]
    3248         mov     QWORD[rcx*8+rdi],rbx
    3249         mov     ebx,0
    3250         adcx    r13,rax
    3251         adox    r14,r15
    3252 
    3253 DB      0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00
    3254         mov     rdx,QWORD[8+rcx*8+rsi]
    3255         adcx    r14,rax
    3256         adox    r15,rbx
    3257         adcx    r15,rbx
    3258 
    3259 DB      0x67
    3260         inc     rcx
    3261         jnz     NEAR $L$sqrx8x_loop
    3262 
    3263         lea     rbp,[64+rbp]
    3264         mov     rcx,-8
    3265         cmp     rbp,QWORD[((8+8))+rsp]
    3266         je      NEAR $L$sqrx8x_break
    3267 
    3268         sub     rbx,QWORD[((16+8))+rsp]
    3269 DB      0x66
    3270         mov     rdx,QWORD[((-64))+rsi]
    3271         adcx    r8,QWORD[rdi]
    3272         adcx    r9,QWORD[8+rdi]
    3273         adc     r10,QWORD[16+rdi]
    3274         adc     r11,QWORD[24+rdi]
    3275         adc     r12,QWORD[32+rdi]
    3276         adc     r13,QWORD[40+rdi]
    3277         adc     r14,QWORD[48+rdi]
    3278         adc     r15,QWORD[56+rdi]
    3279         lea     rdi,[64+rdi]
    3280 DB      0x67
    3281         sbb     rax,rax
    3282         xor     ebx,ebx
    3283         mov     QWORD[((16+8))+rsp],rax
    3284         jmp     NEAR $L$sqrx8x_loop
    3285 
    3286 ALIGN   32
    3287 $L$sqrx8x_break:
    3288         xor     rbp,rbp
    3289         sub     rbx,QWORD[((16+8))+rsp]
    3290         adcx    r8,rbp
    3291         mov     rcx,QWORD[((24+8))+rsp]
    3292         adcx    r9,rbp
    3293         mov     rdx,QWORD[rsi]
    3294         adc     r10,0
    3295         mov     QWORD[rdi],r8
    3296         adc     r11,0
    3297         adc     r12,0
    3298         adc     r13,0
    3299         adc     r14,0
    3300         adc     r15,0
    3301         cmp     rdi,rcx
    3302         je      NEAR $L$sqrx8x_outer_loop
    3303 
    3304         mov     QWORD[8+rdi],r9
    3305         mov     r9,QWORD[8+rcx]
    3306         mov     QWORD[16+rdi],r10
    3307         mov     r10,QWORD[16+rcx]
    3308         mov     QWORD[24+rdi],r11
    3309         mov     r11,QWORD[24+rcx]
    3310         mov     QWORD[32+rdi],r12
    3311         mov     r12,QWORD[32+rcx]
    3312         mov     QWORD[40+rdi],r13
    3313         mov     r13,QWORD[40+rcx]
    3314         mov     QWORD[48+rdi],r14
    3315         mov     r14,QWORD[48+rcx]
    3316         mov     QWORD[56+rdi],r15
    3317         mov     r15,QWORD[56+rcx]
    3318         mov     rdi,rcx
    3319         jmp     NEAR $L$sqrx8x_outer_loop
    3320 
    3321 ALIGN   32
    3322 $L$sqrx8x_outer_break:
    3323         mov     QWORD[72+rdi],r9
    3324 DB      102,72,15,126,217
    3325         mov     QWORD[80+rdi],r10
    3326         mov     QWORD[88+rdi],r11
    3327         mov     QWORD[96+rdi],r12
    3328         mov     QWORD[104+rdi],r13
    3329         mov     QWORD[112+rdi],r14
    3330         lea     rdi,[((48+8))+rsp]
    3331         mov     rdx,QWORD[rcx*1+rsi]
    3332 
    3333         mov     r11,QWORD[8+rdi]
    3334         xor     r10,r10
    3335         mov     r9,QWORD[((0+8))+rsp]
    3336         adox    r11,r11
    3337         mov     r12,QWORD[16+rdi]
    3338         mov     r13,QWORD[24+rdi]
    3339 
    3340 
    3341 ALIGN   32
    3342 $L$sqrx4x_shift_n_add:
    3343         mulx    rbx,rax,rdx
    3344         adox    r12,r12
    3345         adcx    rax,r10
    3346 DB      0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00
    3347 DB      0x4c,0x8b,0x97,0x20,0x00,0x00,0x00
    3348         adox    r13,r13
    3349         adcx    rbx,r11
    3350         mov     r11,QWORD[40+rdi]
    3351         mov     QWORD[rdi],rax
    3352         mov     QWORD[8+rdi],rbx
    3353 
    3354         mulx    rbx,rax,rdx
    3355         adox    r10,r10
    3356         adcx    rax,r12
    3357         mov     rdx,QWORD[16+rcx*1+rsi]
    3358         mov     r12,QWORD[48+rdi]
    3359         adox    r11,r11
    3360         adcx    rbx,r13
    3361         mov     r13,QWORD[56+rdi]
    3362         mov     QWORD[16+rdi],rax
    3363         mov     QWORD[24+rdi],rbx
    3364 
    3365         mulx    rbx,rax,rdx
    3366         adox    r12,r12
    3367         adcx    rax,r10
    3368         mov     rdx,QWORD[24+rcx*1+rsi]
    3369         lea     rcx,[32+rcx]
    3370         mov     r10,QWORD[64+rdi]
    3371         adox    r13,r13
    3372         adcx    rbx,r11
    3373         mov     r11,QWORD[72+rdi]
    3374         mov     QWORD[32+rdi],rax
    3375         mov     QWORD[40+rdi],rbx
    3376 
    3377         mulx    rbx,rax,rdx
    3378         adox    r10,r10
    3379         adcx    rax,r12
    3380         jrcxz   $L$sqrx4x_shift_n_add_break
    3381 DB      0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00
    3382         adox    r11,r11
    3383         adcx    rbx,r13
    3384         mov     r12,QWORD[80+rdi]
    3385         mov     r13,QWORD[88+rdi]
    3386         mov     QWORD[48+rdi],rax
    3387         mov     QWORD[56+rdi],rbx
    3388         lea     rdi,[64+rdi]
    3389         nop
    3390         jmp     NEAR $L$sqrx4x_shift_n_add
    3391 
    3392 ALIGN   32
    3393 $L$sqrx4x_shift_n_add_break:
    3394         adcx    rbx,r13
    3395         mov     QWORD[48+rdi],rax
    3396         mov     QWORD[56+rdi],rbx
    3397         lea     rdi,[64+rdi]
    3398 DB      102,72,15,126,213
    3399 __bn_sqrx8x_reduction:
    3400         xor     eax,eax
    3401         mov     rbx,QWORD[((32+8))+rsp]
    3402         mov     rdx,QWORD[((48+8))+rsp]
    3403         lea     rcx,[((-64))+r9*1+rbp]
    3404 
    3405         mov     QWORD[((0+8))+rsp],rcx
    3406         mov     QWORD[((8+8))+rsp],rdi
    3407 
    3408         lea     rdi,[((48+8))+rsp]
    3409         jmp     NEAR $L$sqrx8x_reduction_loop
    3410 
    3411 ALIGN   32
    3412 $L$sqrx8x_reduction_loop:
    3413         mov     r9,QWORD[8+rdi]
    3414         mov     r10,QWORD[16+rdi]
    3415         mov     r11,QWORD[24+rdi]
    3416         mov     r12,QWORD[32+rdi]
    3417         mov     r8,rdx
    3418         imul    rdx,rbx
    3419         mov     r13,QWORD[40+rdi]
    3420         mov     r14,QWORD[48+rdi]
    3421         mov     r15,QWORD[56+rdi]
    3422         mov     QWORD[((24+8))+rsp],rax
    3423 
    3424         lea     rdi,[64+rdi]
    3425         xor     rsi,rsi
    3426         mov     rcx,-8
    3427         jmp     NEAR $L$sqrx8x_reduce
    3428 
    3429 ALIGN   32
    3430 $L$sqrx8x_reduce:
    3431         mov     rbx,r8
    3432         mulx    r8,rax,QWORD[rbp]
    3433         adcx    rax,rbx
    3434         adox    r8,r9
    3435 
    3436         mulx    r9,rbx,QWORD[8+rbp]
    3437         adcx    r8,rbx
    3438         adox    r9,r10
    3439 
    3440         mulx    r10,rbx,QWORD[16+rbp]
    3441         adcx    r9,rbx
    3442         adox    r10,r11
    3443 
    3444         mulx    r11,rbx,QWORD[24+rbp]
    3445         adcx    r10,rbx
    3446         adox    r11,r12
    3447 
    3448 DB      0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00
    3449         mov     rax,rdx
    3450         mov     rdx,r8
    3451         adcx    r11,rbx
    3452         adox    r12,r13
    3453 
    3454         mulx    rdx,rbx,QWORD[((32+8))+rsp]
    3455         mov     rdx,rax
    3456         mov     QWORD[((64+48+8))+rcx*8+rsp],rax
    3457 
    3458         mulx    r13,rax,QWORD[40+rbp]
    3459         adcx    r12,rax
    3460         adox    r13,r14
    3461 
    3462         mulx    r14,rax,QWORD[48+rbp]
    3463         adcx    r13,rax
    3464         adox    r14,r15
    3465 
    3466         mulx    r15,rax,QWORD[56+rbp]
    3467         mov     rdx,rbx
    3468         adcx    r14,rax
    3469         adox    r15,rsi
    3470         adcx    r15,rsi
    3471 
    3472 DB      0x67,0x67,0x67
    3473         inc     rcx
    3474         jnz     NEAR $L$sqrx8x_reduce
    3475 
    3476         mov     rax,rsi
    3477         cmp     rbp,QWORD[((0+8))+rsp]
    3478         jae     NEAR $L$sqrx8x_no_tail
    3479 
    3480         mov     rdx,QWORD[((48+8))+rsp]
    3481         add     r8,QWORD[rdi]
    3482         lea     rbp,[64+rbp]
    3483         mov     rcx,-8
    3484         adcx    r9,QWORD[8+rdi]
    3485         adcx    r10,QWORD[16+rdi]
    3486         adc     r11,QWORD[24+rdi]
    3487         adc     r12,QWORD[32+rdi]
    3488         adc     r13,QWORD[40+rdi]
    3489         adc     r14,QWORD[48+rdi]
    3490         adc     r15,QWORD[56+rdi]
    3491         lea     rdi,[64+rdi]
    3492         sbb     rax,rax
    3493 
    3494         xor     rsi,rsi
    3495         mov     QWORD[((16+8))+rsp],rax
    3496         jmp     NEAR $L$sqrx8x_tail
    3497 
    3498 ALIGN   32
    3499 $L$sqrx8x_tail:
    3500         mov     rbx,r8
    3501         mulx    r8,rax,QWORD[rbp]
    3502         adcx    rbx,rax
    3503         adox    r8,r9
    3504 
    3505         mulx    r9,rax,QWORD[8+rbp]
    3506         adcx    r8,rax
    3507         adox    r9,r10
    3508 
    3509         mulx    r10,rax,QWORD[16+rbp]
    3510         adcx    r9,rax
    3511         adox    r10,r11
    3512 
    3513         mulx    r11,rax,QWORD[24+rbp]
    3514         adcx    r10,rax
    3515         adox    r11,r12
    3516 
    3517 DB      0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00
    3518         adcx    r11,rax
    3519         adox    r12,r13
    3520 
    3521         mulx    r13,rax,QWORD[40+rbp]
    3522         adcx    r12,rax
    3523         adox    r13,r14
    3524 
    3525         mulx    r14,rax,QWORD[48+rbp]
    3526         adcx    r13,rax
    3527         adox    r14,r15
    3528 
    3529         mulx    r15,rax,QWORD[56+rbp]
    3530         mov     rdx,QWORD[((72+48+8))+rcx*8+rsp]
    3531         adcx    r14,rax
    3532         adox    r15,rsi
    3533         mov     QWORD[rcx*8+rdi],rbx
    3534         mov     rbx,r8
    3535         adcx    r15,rsi
    3536 
    3537         inc     rcx
    3538         jnz     NEAR $L$sqrx8x_tail
    3539 
    3540         cmp     rbp,QWORD[((0+8))+rsp]
    3541         jae     NEAR $L$sqrx8x_tail_done
    3542 
    3543         sub     rsi,QWORD[((16+8))+rsp]
    3544         mov     rdx,QWORD[((48+8))+rsp]
    3545         lea     rbp,[64+rbp]
    3546         adc     r8,QWORD[rdi]
    3547         adc     r9,QWORD[8+rdi]
    3548         adc     r10,QWORD[16+rdi]
    3549         adc     r11,QWORD[24+rdi]
    3550         adc     r12,QWORD[32+rdi]
    3551         adc     r13,QWORD[40+rdi]
    3552         adc     r14,QWORD[48+rdi]
    3553         adc     r15,QWORD[56+rdi]
    3554         lea     rdi,[64+rdi]
    3555         sbb     rax,rax
    3556         sub     rcx,8
    3557 
    3558         xor     rsi,rsi
    3559         mov     QWORD[((16+8))+rsp],rax
    3560         jmp     NEAR $L$sqrx8x_tail
    3561 
    3562 ALIGN   32
    3563 $L$sqrx8x_tail_done:
    3564         xor     rax,rax
    3565         add     r8,QWORD[((24+8))+rsp]
    3566         adc     r9,0
    3567         adc     r10,0
    3568         adc     r11,0
    3569         adc     r12,0
    3570         adc     r13,0
    3571         adc     r14,0
    3572         adc     r15,0
    3573         adc     rax,0
    3574 
    3575         sub     rsi,QWORD[((16+8))+rsp]
    3576 $L$sqrx8x_no_tail:
    3577         adc     r8,QWORD[rdi]
    3578 DB      102,72,15,126,217
    3579         adc     r9,QWORD[8+rdi]
    3580         mov     rsi,QWORD[56+rbp]
    3581 DB      102,72,15,126,213
    3582         adc     r10,QWORD[16+rdi]
    3583         adc     r11,QWORD[24+rdi]
    3584         adc     r12,QWORD[32+rdi]
    3585         adc     r13,QWORD[40+rdi]
    3586         adc     r14,QWORD[48+rdi]
    3587         adc     r15,QWORD[56+rdi]
    3588         adc     rax,0
    3589 
    3590         mov     rbx,QWORD[((32+8))+rsp]
    3591         mov     rdx,QWORD[64+rcx*1+rdi]
    3592 
    3593         mov     QWORD[rdi],r8
    3594         lea     r8,[64+rdi]
    3595         mov     QWORD[8+rdi],r9
    3596         mov     QWORD[16+rdi],r10
    3597         mov     QWORD[24+rdi],r11
    3598         mov     QWORD[32+rdi],r12
    3599         mov     QWORD[40+rdi],r13
    3600         mov     QWORD[48+rdi],r14
    3601         mov     QWORD[56+rdi],r15
    3602 
    3603         lea     rdi,[64+rcx*1+rdi]
    3604         cmp     r8,QWORD[((8+8))+rsp]
    3605         jb      NEAR $L$sqrx8x_reduction_loop
    3606         DB      0F3h,0C3h               ;repret
    3607 
    3608 
    3609 ALIGN   32
    3610 __bn_postx4x_internal:
    3611 
    3612         mov     r12,QWORD[rbp]
    3613         mov     r10,rcx
    3614         mov     r9,rcx
    3615         neg     rax
    3616         sar     rcx,3+2
    3617 
    3618 DB      102,72,15,126,202
    3619 DB      102,72,15,126,206
    3620         dec     r12
    3621         mov     r13,QWORD[8+rbp]
    3622         xor     r8,r8
    3623         mov     r14,QWORD[16+rbp]
    3624         mov     r15,QWORD[24+rbp]
    3625         jmp     NEAR $L$sqrx4x_sub_entry
    3626 
    3627 ALIGN   16
    3628 $L$sqrx4x_sub:
    3629         mov     r12,QWORD[rbp]
    3630         mov     r13,QWORD[8+rbp]
    3631         mov     r14,QWORD[16+rbp]
    3632         mov     r15,QWORD[24+rbp]
    3633 $L$sqrx4x_sub_entry:
    3634         andn    r12,r12,rax
    3635         lea     rbp,[32+rbp]
    3636         andn    r13,r13,rax
    3637         andn    r14,r14,rax
    3638         andn    r15,r15,rax
    3639 
    3640         neg     r8
    3641         adc     r12,QWORD[rdi]
    3642         adc     r13,QWORD[8+rdi]
    3643         adc     r14,QWORD[16+rdi]
    3644         adc     r15,QWORD[24+rdi]
    3645         mov     QWORD[rdx],r12
    3646         lea     rdi,[32+rdi]
    3647         mov     QWORD[8+rdx],r13
    3648         sbb     r8,r8
    3649         mov     QWORD[16+rdx],r14
    3650         mov     QWORD[24+rdx],r15
    3651         lea     rdx,[32+rdx]
    3652 
    3653         inc     rcx
    3654         jnz     NEAR $L$sqrx4x_sub
    3655 
    3656         neg     r9
    3657 
    3658         DB      0F3h,0C3h               ;repret
    3659 
    3660 
    36612268global  bn_get_bits5
    36622269
     
    39952602        DD      $L$SEH_end_bn_from_mont8x wrt ..imagebase
    39962603        DD      $L$SEH_info_bn_from_mont8x wrt ..imagebase
    3997         DD      $L$SEH_begin_bn_mulx4x_mont_gather5 wrt ..imagebase
    3998         DD      $L$SEH_end_bn_mulx4x_mont_gather5 wrt ..imagebase
    3999         DD      $L$SEH_info_bn_mulx4x_mont_gather5 wrt ..imagebase
    4000 
    4001         DD      $L$SEH_begin_bn_powerx5 wrt ..imagebase
    4002         DD      $L$SEH_end_bn_powerx5 wrt ..imagebase
    4003         DD      $L$SEH_info_bn_powerx5 wrt ..imagebase
    40042604        DD      $L$SEH_begin_bn_gather5 wrt ..imagebase
    40052605        DD      $L$SEH_end_bn_gather5 wrt ..imagebase
     
    40282628        DD      $L$from_prologue wrt ..imagebase,$L$from_body wrt ..imagebase,$L$from_epilogue wrt ..imagebase
    40292629ALIGN   8
    4030 $L$SEH_info_bn_mulx4x_mont_gather5:
    4031 DB      9,0,0,0
    4032         DD      mul_handler wrt ..imagebase
    4033         DD      $L$mulx4x_prologue wrt ..imagebase,$L$mulx4x_body wrt ..imagebase,$L$mulx4x_epilogue wrt ..imagebase
    4034 ALIGN   8
    4035 $L$SEH_info_bn_powerx5:
    4036 DB      9,0,0,0
    4037         DD      mul_handler wrt ..imagebase
    4038         DD      $L$powerx5_prologue wrt ..imagebase,$L$powerx5_body wrt ..imagebase,$L$powerx5_epilogue wrt ..imagebase
    4039 ALIGN   8
    40402630$L$SEH_info_bn_gather5:
    40412631DB      0x01,0x0b,0x03,0x0a
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette