From c8ee38acbaae213120c9afd03353aab0691e3835 Mon Sep 17 00:00:00 2001 From: Levi Yun Date: Tue, 8 Oct 2024 11:51:39 +0100 Subject: [PATCH] CryptoPkg/OpensslLib: add cmellia and cmac algorithm in OpensslFullLib To build TPM 2.0 Reference Implementation library, OpensslLib requires below features: - camellia - cmac - elliptic curved algorithms For thes, openssl should be configured without below two options: - no-camellia - no-cmac Therefore, remove these two option for OpensslFullLib only since TPM 2.0 Reference Library requires to use openssl built with ec This increases OpensslFullLib size -- around 16K. Except configure.py, other changed files are auto generated by configure.py Signed-off-by: Yeoreum Yun --- .../IA32-GCC/crypto/camellia/cmll-x86.S | 2446 +++++++++++++++++ .../IA32-MSFT/crypto/camellia/cmll-x86.nasm | 2359 ++++++++++++++++ .../X64-GCC/crypto/bn/rsaz-2k-avxifma.s | 1137 +------- .../X64-GCC/crypto/bn/rsaz-3k-avxifma.s | 1745 +----------- .../X64-GCC/crypto/bn/rsaz-4k-avxifma.s | 1899 +------------ .../X64-GCC/crypto/camellia/cmll-x86_64.s | 1948 +++++++++++++ .../X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm | 1260 +-------- .../X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm | 1916 +------------ .../X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm | 2070 +------------- .../X64-MSFT/crypto/camellia/cmll-x86_64.nasm | 2163 +++++++++++++++ .../include/openssl/configuration-ec.h | 6 - .../Library/OpensslLib/OpensslLibFull.inf | 12 + .../OpensslLib/OpensslLibFullAccel.inf | 39 +- CryptoPkg/Library/OpensslLib/configure.py | 4 +- 14 files changed, 8991 insertions(+), 10013 deletions(-) create mode 100644 CryptoPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/camellia/cmll-x86.S create mode 100644 CryptoPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/camellia/cmll-x86.nasm create mode 100644 CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/camellia/cmll-x86_64.s create mode 100644 CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/camellia/cmll-x86_64.nasm diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/camellia/cmll-x86.S b/CryptoPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/camellia/cmll-x86.S new file mode 100644 index 0000000000..c80b7f7ab9 --- /dev/null +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/IA32-GCC/crypto/camellia/cmll-x86.S @@ -0,0 +1,2446 @@ +.text +.globl Camellia_EncryptBlock_Rounds +.type Camellia_EncryptBlock_Rounds,@function +.align 16 +Camellia_EncryptBlock_Rounds: +.L_Camellia_EncryptBlock_Rounds_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%eax + movl 24(%esp),%esi + movl 28(%esp),%edi + movl %esp,%ebx + subl $28,%esp + andl $-64,%esp + leal -127(%edi),%ecx + subl %esp,%ecx + negl %ecx + andl $960,%ecx + subl %ecx,%esp + addl $4,%esp + shll $6,%eax + leal (%edi,%eax,1),%eax + movl %ebx,20(%esp) + movl %eax,16(%esp) + call .L000pic_point +.L000pic_point: + popl %ebp + leal .LCamellia_SBOX-.L000pic_point(%ebp),%ebp + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + bswap %eax + movl 12(%esi),%edx + bswap %ebx + bswap %ecx + bswap %edx + call _x86_Camellia_encrypt + movl 20(%esp),%esp + bswap %eax + movl 32(%esp),%esi + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size Camellia_EncryptBlock_Rounds,.-.L_Camellia_EncryptBlock_Rounds_begin +.globl Camellia_EncryptBlock +.type Camellia_EncryptBlock,@function +.align 16 +Camellia_EncryptBlock: +.L_Camellia_EncryptBlock_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + movl $128,%eax + subl 4(%esp),%eax + movl $3,%eax + adcl $0,%eax + movl %eax,4(%esp) + jmp .L_Camellia_EncryptBlock_Rounds_begin +.size Camellia_EncryptBlock,.-.L_Camellia_EncryptBlock_begin +.globl Camellia_encrypt +.type Camellia_encrypt,@function +.align 16 +Camellia_encrypt: +.L_Camellia_encrypt_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 28(%esp),%edi + movl %esp,%ebx + subl $28,%esp + andl $-64,%esp + movl 272(%edi),%eax + leal -127(%edi),%ecx + subl %esp,%ecx + negl %ecx + andl $960,%ecx + subl %ecx,%esp + addl $4,%esp + shll $6,%eax + leal (%edi,%eax,1),%eax + movl %ebx,20(%esp) + movl %eax,16(%esp) + call .L001pic_point +.L001pic_point: + popl %ebp + leal .LCamellia_SBOX-.L001pic_point(%ebp),%ebp + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + bswap %eax + movl 12(%esi),%edx + bswap %ebx + bswap %ecx + bswap %edx + call _x86_Camellia_encrypt + movl 20(%esp),%esp + bswap %eax + movl 24(%esp),%esi + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size Camellia_encrypt,.-.L_Camellia_encrypt_begin +.type _x86_Camellia_encrypt,@function +.align 16 +_x86_Camellia_encrypt: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl 16(%edi),%esi + movl %eax,4(%esp) + movl %ebx,8(%esp) + movl %ecx,12(%esp) + movl %edx,16(%esp) +.align 16 +.L002loop: + xorl %esi,%eax + xorl 20(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 16(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 12(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl 24(%edi),%esi + xorl %ecx,%edx + movl %edx,16(%esp) + xorl %ebx,%ecx + movl %ecx,12(%esp) + xorl %esi,%ecx + xorl 28(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 8(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl 4(%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl 32(%edi),%esi + xorl %eax,%ebx + movl %ebx,8(%esp) + xorl %edx,%eax + movl %eax,4(%esp) + xorl %esi,%eax + xorl 36(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 16(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 12(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl 40(%edi),%esi + xorl %ecx,%edx + movl %edx,16(%esp) + xorl %ebx,%ecx + movl %ecx,12(%esp) + xorl %esi,%ecx + xorl 44(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 8(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl 4(%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl 48(%edi),%esi + xorl %eax,%ebx + movl %ebx,8(%esp) + xorl %edx,%eax + movl %eax,4(%esp) + xorl %esi,%eax + xorl 52(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 16(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 12(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl 56(%edi),%esi + xorl %ecx,%edx + movl %edx,16(%esp) + xorl %ebx,%ecx + movl %ecx,12(%esp) + xorl %esi,%ecx + xorl 60(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 8(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl 4(%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl 64(%edi),%esi + xorl %eax,%ebx + movl %ebx,8(%esp) + xorl %edx,%eax + movl %eax,4(%esp) + addl $64,%edi + cmpl 20(%esp),%edi + je .L003done + andl %eax,%esi + movl 16(%esp),%edx + roll $1,%esi + movl %edx,%ecx + xorl %esi,%ebx + orl 12(%edi),%ecx + movl %ebx,8(%esp) + xorl 12(%esp),%ecx + movl 4(%edi),%esi + movl %ecx,12(%esp) + orl %ebx,%esi + andl 8(%edi),%ecx + xorl %esi,%eax + roll $1,%ecx + movl %eax,4(%esp) + xorl %ecx,%edx + movl 16(%edi),%esi + movl %edx,16(%esp) + jmp .L002loop +.align 8 +.L003done: + movl %eax,%ecx + movl %ebx,%edx + movl 12(%esp),%eax + movl 16(%esp),%ebx + xorl %esi,%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + ret +.size _x86_Camellia_encrypt,.-_x86_Camellia_encrypt +.globl Camellia_DecryptBlock_Rounds +.type Camellia_DecryptBlock_Rounds,@function +.align 16 +Camellia_DecryptBlock_Rounds: +.L_Camellia_DecryptBlock_Rounds_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%eax + movl 24(%esp),%esi + movl 28(%esp),%edi + movl %esp,%ebx + subl $28,%esp + andl $-64,%esp + leal -127(%edi),%ecx + subl %esp,%ecx + negl %ecx + andl $960,%ecx + subl %ecx,%esp + addl $4,%esp + shll $6,%eax + movl %edi,16(%esp) + leal (%edi,%eax,1),%edi + movl %ebx,20(%esp) + call .L004pic_point +.L004pic_point: + popl %ebp + leal .LCamellia_SBOX-.L004pic_point(%ebp),%ebp + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + bswap %eax + movl 12(%esi),%edx + bswap %ebx + bswap %ecx + bswap %edx + call _x86_Camellia_decrypt + movl 20(%esp),%esp + bswap %eax + movl 32(%esp),%esi + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size Camellia_DecryptBlock_Rounds,.-.L_Camellia_DecryptBlock_Rounds_begin +.globl Camellia_DecryptBlock +.type Camellia_DecryptBlock,@function +.align 16 +Camellia_DecryptBlock: +.L_Camellia_DecryptBlock_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + movl $128,%eax + subl 4(%esp),%eax + movl $3,%eax + adcl $0,%eax + movl %eax,4(%esp) + jmp .L_Camellia_DecryptBlock_Rounds_begin +.size Camellia_DecryptBlock,.-.L_Camellia_DecryptBlock_begin +.globl Camellia_decrypt +.type Camellia_decrypt,@function +.align 16 +Camellia_decrypt: +.L_Camellia_decrypt_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl 28(%esp),%edi + movl %esp,%ebx + subl $28,%esp + andl $-64,%esp + movl 272(%edi),%eax + leal -127(%edi),%ecx + subl %esp,%ecx + negl %ecx + andl $960,%ecx + subl %ecx,%esp + addl $4,%esp + shll $6,%eax + movl %edi,16(%esp) + leal (%edi,%eax,1),%edi + movl %ebx,20(%esp) + call .L005pic_point +.L005pic_point: + popl %ebp + leal .LCamellia_SBOX-.L005pic_point(%ebp),%ebp + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + bswap %eax + movl 12(%esi),%edx + bswap %ebx + bswap %ecx + bswap %edx + call _x86_Camellia_decrypt + movl 20(%esp),%esp + bswap %eax + movl 24(%esp),%esi + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size Camellia_decrypt,.-.L_Camellia_decrypt_begin +.type _x86_Camellia_decrypt,@function +.align 16 +_x86_Camellia_decrypt: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl -8(%edi),%esi + movl %eax,4(%esp) + movl %ebx,8(%esp) + movl %ecx,12(%esp) + movl %edx,16(%esp) +.align 16 +.L006loop: + xorl %esi,%eax + xorl -4(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 16(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 12(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl -16(%edi),%esi + xorl %ecx,%edx + movl %edx,16(%esp) + xorl %ebx,%ecx + movl %ecx,12(%esp) + xorl %esi,%ecx + xorl -12(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 8(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl 4(%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl -24(%edi),%esi + xorl %eax,%ebx + movl %ebx,8(%esp) + xorl %edx,%eax + movl %eax,4(%esp) + xorl %esi,%eax + xorl -20(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 16(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 12(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl -32(%edi),%esi + xorl %ecx,%edx + movl %edx,16(%esp) + xorl %ebx,%ecx + movl %ecx,12(%esp) + xorl %esi,%ecx + xorl -28(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 8(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl 4(%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl -40(%edi),%esi + xorl %eax,%ebx + movl %ebx,8(%esp) + xorl %edx,%eax + movl %eax,4(%esp) + xorl %esi,%eax + xorl -36(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 16(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 12(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl -48(%edi),%esi + xorl %ecx,%edx + movl %edx,16(%esp) + xorl %ebx,%ecx + movl %ecx,12(%esp) + xorl %esi,%ecx + xorl -44(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 8(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl 4(%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl -56(%edi),%esi + xorl %eax,%ebx + movl %ebx,8(%esp) + xorl %edx,%eax + movl %eax,4(%esp) + subl $64,%edi + cmpl 20(%esp),%edi + je .L007done + andl %eax,%esi + movl 16(%esp),%edx + roll $1,%esi + movl %edx,%ecx + xorl %esi,%ebx + orl 4(%edi),%ecx + movl %ebx,8(%esp) + xorl 12(%esp),%ecx + movl 12(%edi),%esi + movl %ecx,12(%esp) + orl %ebx,%esi + andl (%edi),%ecx + xorl %esi,%eax + roll $1,%ecx + movl %eax,4(%esp) + xorl %ecx,%edx + movl -8(%edi),%esi + movl %edx,16(%esp) + jmp .L006loop +.align 8 +.L007done: + movl %eax,%ecx + movl %ebx,%edx + movl 12(%esp),%eax + movl 16(%esp),%ebx + xorl %esi,%ecx + xorl 12(%edi),%edx + xorl (%edi),%eax + xorl 4(%edi),%ebx + ret +.size _x86_Camellia_decrypt,.-_x86_Camellia_decrypt +.globl Camellia_Ekeygen +.type Camellia_Ekeygen,@function +.align 16 +Camellia_Ekeygen: +.L_Camellia_Ekeygen_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + subl $16,%esp + movl 36(%esp),%ebp + movl 40(%esp),%esi + movl 44(%esp),%edi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + cmpl $128,%ebp + je .L0081st128 + movl 16(%esi),%eax + movl 20(%esi),%ebx + cmpl $192,%ebp + je .L0091st192 + movl 24(%esi),%ecx + movl 28(%esi),%edx + jmp .L0101st256 +.align 4 +.L0091st192: + movl %eax,%ecx + movl %ebx,%edx + notl %ecx + notl %edx +.align 4 +.L0101st256: + bswap %eax + bswap %ebx + bswap %ecx + bswap %edx + movl %eax,32(%edi) + movl %ebx,36(%edi) + movl %ecx,40(%edi) + movl %edx,44(%edi) + xorl (%edi),%eax + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx +.align 4 +.L0081st128: + call .L011pic_point +.L011pic_point: + popl %ebp + leal .LCamellia_SBOX-.L011pic_point(%ebp),%ebp + leal .LCamellia_SIGMA-.LCamellia_SBOX(%ebp),%edi + movl (%edi),%esi + movl %eax,(%esp) + movl %ebx,4(%esp) + movl %ecx,8(%esp) + movl %edx,12(%esp) + xorl %esi,%eax + xorl 4(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 12(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 8(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl 8(%edi),%esi + xorl %ecx,%edx + movl %edx,12(%esp) + xorl %ebx,%ecx + movl %ecx,8(%esp) + xorl %esi,%ecx + xorl 12(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 4(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl (%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl 16(%edi),%esi + xorl %eax,%ebx + movl %ebx,4(%esp) + xorl %edx,%eax + movl %eax,(%esp) + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl 44(%esp),%esi + xorl (%esi),%eax + xorl 4(%esi),%ebx + xorl 8(%esi),%ecx + xorl 12(%esi),%edx + movl 16(%edi),%esi + movl %eax,(%esp) + movl %ebx,4(%esp) + movl %ecx,8(%esp) + movl %edx,12(%esp) + xorl %esi,%eax + xorl 20(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 12(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 8(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl 24(%edi),%esi + xorl %ecx,%edx + movl %edx,12(%esp) + xorl %ebx,%ecx + movl %ecx,8(%esp) + xorl %esi,%ecx + xorl 28(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 4(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl (%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl 32(%edi),%esi + xorl %eax,%ebx + movl %ebx,4(%esp) + xorl %edx,%eax + movl %eax,(%esp) + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl 36(%esp),%esi + cmpl $128,%esi + jne .L0122nd256 + movl 44(%esp),%edi + leal 128(%edi),%edi + movl %eax,-112(%edi) + movl %ebx,-108(%edi) + movl %ecx,-104(%edi) + movl %edx,-100(%edi) + movl %eax,%ebp + shll $15,%eax + movl %ebx,%esi + shrl $17,%esi + shll $15,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $15,%ecx + movl %eax,-80(%edi) + shrl $17,%esi + orl %esi,%ebx + shrl $17,%ebp + movl %edx,%esi + shrl $17,%esi + movl %ebx,-76(%edi) + shll $15,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,-72(%edi) + movl %edx,-68(%edi) + movl %eax,%ebp + shll $15,%eax + movl %ebx,%esi + shrl $17,%esi + shll $15,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $15,%ecx + movl %eax,-64(%edi) + shrl $17,%esi + orl %esi,%ebx + shrl $17,%ebp + movl %edx,%esi + shrl $17,%esi + movl %ebx,-60(%edi) + shll $15,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,-56(%edi) + movl %edx,-52(%edi) + movl %eax,%ebp + shll $15,%eax + movl %ebx,%esi + shrl $17,%esi + shll $15,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $15,%ecx + movl %eax,-32(%edi) + shrl $17,%esi + orl %esi,%ebx + shrl $17,%ebp + movl %edx,%esi + shrl $17,%esi + movl %ebx,-28(%edi) + shll $15,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %eax,%ebp + shll $15,%eax + movl %ebx,%esi + shrl $17,%esi + shll $15,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $15,%ecx + movl %eax,-16(%edi) + shrl $17,%esi + orl %esi,%ebx + shrl $17,%ebp + movl %edx,%esi + shrl $17,%esi + movl %ebx,-12(%edi) + shll $15,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,-8(%edi) + movl %edx,-4(%edi) + movl %ebx,%ebp + shll $2,%ebx + movl %ecx,%esi + shrl $30,%esi + shll $2,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $2,%edx + movl %ebx,32(%edi) + shrl $30,%esi + orl %esi,%ecx + shrl $30,%ebp + movl %eax,%esi + shrl $30,%esi + movl %ecx,36(%edi) + shll $2,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,40(%edi) + movl %eax,44(%edi) + movl %ebx,%ebp + shll $17,%ebx + movl %ecx,%esi + shrl $15,%esi + shll $17,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $17,%edx + movl %ebx,64(%edi) + shrl $15,%esi + orl %esi,%ecx + shrl $15,%ebp + movl %eax,%esi + shrl $15,%esi + movl %ecx,68(%edi) + shll $17,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,72(%edi) + movl %eax,76(%edi) + movl -128(%edi),%ebx + movl -124(%edi),%ecx + movl -120(%edi),%edx + movl -116(%edi),%eax + movl %ebx,%ebp + shll $15,%ebx + movl %ecx,%esi + shrl $17,%esi + shll $15,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $15,%edx + movl %ebx,-96(%edi) + shrl $17,%esi + orl %esi,%ecx + shrl $17,%ebp + movl %eax,%esi + shrl $17,%esi + movl %ecx,-92(%edi) + shll $15,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,-88(%edi) + movl %eax,-84(%edi) + movl %ebx,%ebp + shll $30,%ebx + movl %ecx,%esi + shrl $2,%esi + shll $30,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $30,%edx + movl %ebx,-48(%edi) + shrl $2,%esi + orl %esi,%ecx + shrl $2,%ebp + movl %eax,%esi + shrl $2,%esi + movl %ecx,-44(%edi) + shll $30,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,-40(%edi) + movl %eax,-36(%edi) + movl %ebx,%ebp + shll $15,%ebx + movl %ecx,%esi + shrl $17,%esi + shll $15,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $15,%edx + shrl $17,%esi + orl %esi,%ecx + shrl $17,%ebp + movl %eax,%esi + shrl $17,%esi + shll $15,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,-24(%edi) + movl %eax,-20(%edi) + movl %ebx,%ebp + shll $17,%ebx + movl %ecx,%esi + shrl $15,%esi + shll $17,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $17,%edx + movl %ebx,(%edi) + shrl $15,%esi + orl %esi,%ecx + shrl $15,%ebp + movl %eax,%esi + shrl $15,%esi + movl %ecx,4(%edi) + shll $17,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,8(%edi) + movl %eax,12(%edi) + movl %ebx,%ebp + shll $17,%ebx + movl %ecx,%esi + shrl $15,%esi + shll $17,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $17,%edx + movl %ebx,16(%edi) + shrl $15,%esi + orl %esi,%ecx + shrl $15,%ebp + movl %eax,%esi + shrl $15,%esi + movl %ecx,20(%edi) + shll $17,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,24(%edi) + movl %eax,28(%edi) + movl %ebx,%ebp + shll $17,%ebx + movl %ecx,%esi + shrl $15,%esi + shll $17,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $17,%edx + movl %ebx,48(%edi) + shrl $15,%esi + orl %esi,%ecx + shrl $15,%ebp + movl %eax,%esi + shrl $15,%esi + movl %ecx,52(%edi) + shll $17,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,56(%edi) + movl %eax,60(%edi) + movl $3,%eax + jmp .L013done +.align 16 +.L0122nd256: + movl 44(%esp),%esi + movl %eax,48(%esi) + movl %ebx,52(%esi) + movl %ecx,56(%esi) + movl %edx,60(%esi) + xorl 32(%esi),%eax + xorl 36(%esi),%ebx + xorl 40(%esi),%ecx + xorl 44(%esi),%edx + movl 32(%edi),%esi + movl %eax,(%esp) + movl %ebx,4(%esp) + movl %ecx,8(%esp) + movl %edx,12(%esp) + xorl %esi,%eax + xorl 36(%edi),%ebx + movzbl %ah,%esi + movl 2052(%ebp,%esi,8),%edx + movzbl %al,%esi + xorl 4(%ebp,%esi,8),%edx + shrl $16,%eax + movzbl %bl,%esi + movl (%ebp,%esi,8),%ecx + movzbl %ah,%esi + xorl (%ebp,%esi,8),%edx + movzbl %bh,%esi + xorl 4(%ebp,%esi,8),%ecx + shrl $16,%ebx + movzbl %al,%eax + xorl 2048(%ebp,%eax,8),%edx + movzbl %bh,%esi + movl 12(%esp),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl 2048(%ebp,%esi,8),%ecx + movzbl %bl,%esi + movl 8(%esp),%ebx + xorl %eax,%edx + xorl 2052(%ebp,%esi,8),%ecx + movl 40(%edi),%esi + xorl %ecx,%edx + movl %edx,12(%esp) + xorl %ebx,%ecx + movl %ecx,8(%esp) + xorl %esi,%ecx + xorl 44(%edi),%edx + movzbl %ch,%esi + movl 2052(%ebp,%esi,8),%ebx + movzbl %cl,%esi + xorl 4(%ebp,%esi,8),%ebx + shrl $16,%ecx + movzbl %dl,%esi + movl (%ebp,%esi,8),%eax + movzbl %ch,%esi + xorl (%ebp,%esi,8),%ebx + movzbl %dh,%esi + xorl 4(%ebp,%esi,8),%eax + shrl $16,%edx + movzbl %cl,%ecx + xorl 2048(%ebp,%ecx,8),%ebx + movzbl %dh,%esi + movl 4(%esp),%ecx + xorl %ebx,%eax + rorl $8,%ebx + xorl 2048(%ebp,%esi,8),%eax + movzbl %dl,%esi + movl (%esp),%edx + xorl %ecx,%ebx + xorl 2052(%ebp,%esi,8),%eax + movl 48(%edi),%esi + xorl %eax,%ebx + movl %ebx,4(%esp) + xorl %edx,%eax + movl %eax,(%esp) + movl 8(%esp),%ecx + movl 12(%esp),%edx + movl 44(%esp),%edi + leal 128(%edi),%edi + movl %eax,-112(%edi) + movl %ebx,-108(%edi) + movl %ecx,-104(%edi) + movl %edx,-100(%edi) + movl %eax,%ebp + shll $30,%eax + movl %ebx,%esi + shrl $2,%esi + shll $30,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $30,%ecx + movl %eax,-48(%edi) + shrl $2,%esi + orl %esi,%ebx + shrl $2,%ebp + movl %edx,%esi + shrl $2,%esi + movl %ebx,-44(%edi) + shll $30,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,-40(%edi) + movl %edx,-36(%edi) + movl %eax,%ebp + shll $30,%eax + movl %ebx,%esi + shrl $2,%esi + shll $30,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $30,%ecx + movl %eax,32(%edi) + shrl $2,%esi + orl %esi,%ebx + shrl $2,%ebp + movl %edx,%esi + shrl $2,%esi + movl %ebx,36(%edi) + shll $30,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,40(%edi) + movl %edx,44(%edi) + movl %ebx,%ebp + shll $19,%ebx + movl %ecx,%esi + shrl $13,%esi + shll $19,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $19,%edx + movl %ebx,128(%edi) + shrl $13,%esi + orl %esi,%ecx + shrl $13,%ebp + movl %eax,%esi + shrl $13,%esi + movl %ecx,132(%edi) + shll $19,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,136(%edi) + movl %eax,140(%edi) + movl -96(%edi),%ebx + movl -92(%edi),%ecx + movl -88(%edi),%edx + movl -84(%edi),%eax + movl %ebx,%ebp + shll $15,%ebx + movl %ecx,%esi + shrl $17,%esi + shll $15,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $15,%edx + movl %ebx,-96(%edi) + shrl $17,%esi + orl %esi,%ecx + shrl $17,%ebp + movl %eax,%esi + shrl $17,%esi + movl %ecx,-92(%edi) + shll $15,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,-88(%edi) + movl %eax,-84(%edi) + movl %ebx,%ebp + shll $15,%ebx + movl %ecx,%esi + shrl $17,%esi + shll $15,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $15,%edx + movl %ebx,-64(%edi) + shrl $17,%esi + orl %esi,%ecx + shrl $17,%ebp + movl %eax,%esi + shrl $17,%esi + movl %ecx,-60(%edi) + shll $15,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,-56(%edi) + movl %eax,-52(%edi) + movl %ebx,%ebp + shll $30,%ebx + movl %ecx,%esi + shrl $2,%esi + shll $30,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $30,%edx + movl %ebx,16(%edi) + shrl $2,%esi + orl %esi,%ecx + shrl $2,%ebp + movl %eax,%esi + shrl $2,%esi + movl %ecx,20(%edi) + shll $30,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,24(%edi) + movl %eax,28(%edi) + movl %ecx,%ebp + shll $2,%ecx + movl %edx,%esi + shrl $30,%esi + shll $2,%edx + orl %esi,%ecx + movl %eax,%esi + shll $2,%eax + movl %ecx,80(%edi) + shrl $30,%esi + orl %esi,%edx + shrl $30,%ebp + movl %ebx,%esi + shrl $30,%esi + movl %edx,84(%edi) + shll $2,%ebx + orl %esi,%eax + orl %ebp,%ebx + movl %eax,88(%edi) + movl %ebx,92(%edi) + movl -80(%edi),%ecx + movl -76(%edi),%edx + movl -72(%edi),%eax + movl -68(%edi),%ebx + movl %ecx,%ebp + shll $15,%ecx + movl %edx,%esi + shrl $17,%esi + shll $15,%edx + orl %esi,%ecx + movl %eax,%esi + shll $15,%eax + movl %ecx,-80(%edi) + shrl $17,%esi + orl %esi,%edx + shrl $17,%ebp + movl %ebx,%esi + shrl $17,%esi + movl %edx,-76(%edi) + shll $15,%ebx + orl %esi,%eax + orl %ebp,%ebx + movl %eax,-72(%edi) + movl %ebx,-68(%edi) + movl %ecx,%ebp + shll $30,%ecx + movl %edx,%esi + shrl $2,%esi + shll $30,%edx + orl %esi,%ecx + movl %eax,%esi + shll $30,%eax + movl %ecx,-16(%edi) + shrl $2,%esi + orl %esi,%edx + shrl $2,%ebp + movl %ebx,%esi + shrl $2,%esi + movl %edx,-12(%edi) + shll $30,%ebx + orl %esi,%eax + orl %ebp,%ebx + movl %eax,-8(%edi) + movl %ebx,-4(%edi) + movl %edx,64(%edi) + movl %eax,68(%edi) + movl %ebx,72(%edi) + movl %ecx,76(%edi) + movl %edx,%ebp + shll $17,%edx + movl %eax,%esi + shrl $15,%esi + shll $17,%eax + orl %esi,%edx + movl %ebx,%esi + shll $17,%ebx + movl %edx,96(%edi) + shrl $15,%esi + orl %esi,%eax + shrl $15,%ebp + movl %ecx,%esi + shrl $15,%esi + movl %eax,100(%edi) + shll $17,%ecx + orl %esi,%ebx + orl %ebp,%ecx + movl %ebx,104(%edi) + movl %ecx,108(%edi) + movl -128(%edi),%edx + movl -124(%edi),%eax + movl -120(%edi),%ebx + movl -116(%edi),%ecx + movl %eax,%ebp + shll $13,%eax + movl %ebx,%esi + shrl $19,%esi + shll $13,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $13,%ecx + movl %eax,-32(%edi) + shrl $19,%esi + orl %esi,%ebx + shrl $19,%ebp + movl %edx,%esi + shrl $19,%esi + movl %ebx,-28(%edi) + shll $13,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,-24(%edi) + movl %edx,-20(%edi) + movl %eax,%ebp + shll $15,%eax + movl %ebx,%esi + shrl $17,%esi + shll $15,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $15,%ecx + movl %eax,(%edi) + shrl $17,%esi + orl %esi,%ebx + shrl $17,%ebp + movl %edx,%esi + shrl $17,%esi + movl %ebx,4(%edi) + shll $15,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl %eax,%ebp + shll $17,%eax + movl %ebx,%esi + shrl $15,%esi + shll $17,%ebx + orl %esi,%eax + movl %ecx,%esi + shll $17,%ecx + movl %eax,48(%edi) + shrl $15,%esi + orl %esi,%ebx + shrl $15,%ebp + movl %edx,%esi + shrl $15,%esi + movl %ebx,52(%edi) + shll $17,%edx + orl %esi,%ecx + orl %ebp,%edx + movl %ecx,56(%edi) + movl %edx,60(%edi) + movl %ebx,%ebp + shll $2,%ebx + movl %ecx,%esi + shrl $30,%esi + shll $2,%ecx + orl %esi,%ebx + movl %edx,%esi + shll $2,%edx + movl %ebx,112(%edi) + shrl $30,%esi + orl %esi,%ecx + shrl $30,%ebp + movl %eax,%esi + shrl $30,%esi + movl %ecx,116(%edi) + shll $2,%eax + orl %esi,%edx + orl %ebp,%eax + movl %edx,120(%edi) + movl %eax,124(%edi) + movl $4,%eax +.L013done: + leal 144(%edi),%edx + addl $16,%esp + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size Camellia_Ekeygen,.-.L_Camellia_Ekeygen_begin +.globl Camellia_set_key +.type Camellia_set_key,@function +.align 16 +Camellia_set_key: +.L_Camellia_set_key_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebx + movl 8(%esp),%ecx + movl 12(%esp),%ebx + movl 16(%esp),%edx + movl $-1,%eax + testl %ecx,%ecx + jz .L014done + testl %edx,%edx + jz .L014done + movl $-2,%eax + cmpl $256,%ebx + je .L015arg_ok + cmpl $192,%ebx + je .L015arg_ok + cmpl $128,%ebx + jne .L014done +.align 4 +.L015arg_ok: + pushl %edx + pushl %ecx + pushl %ebx + call .L_Camellia_Ekeygen_begin + addl $12,%esp + movl %eax,(%edx) + xorl %eax,%eax +.align 4 +.L014done: + popl %ebx + ret +.size Camellia_set_key,.-.L_Camellia_set_key_begin +.align 64 +.LCamellia_SIGMA: +.long 2694735487,1003262091,3061508184,1286239154,3337565999,3914302142,1426019237,4057165596,283453434,3731369245,2958461122,3018244605,0,0,0,0 +.align 64 +.LCamellia_SBOX: +.long 1886416896,1886388336 +.long 2189591040,741081132 +.long 741092352,3014852787 +.long 3974949888,3233808576 +.long 3014898432,3840147684 +.long 656877312,1465319511 +.long 3233857536,3941204202 +.long 3857048832,2930639022 +.long 3840205824,589496355 +.long 2240120064,1802174571 +.long 1465341696,1162149957 +.long 892679424,2779054245 +.long 3941263872,3991732461 +.long 202116096,1330577487 +.long 2930683392,488439837 +.long 1094795520,2459041938 +.long 589505280,2256928902 +.long 4025478912,2947481775 +.long 1802201856,2088501372 +.long 2475922176,522125343 +.long 1162167552,1044250686 +.long 421075200,3705405660 +.long 2779096320,1583218782 +.long 555819264,185270283 +.long 3991792896,2795896998 +.long 235802112,960036921 +.long 1330597632,3587506389 +.long 1313754624,1566376029 +.long 488447232,3654877401 +.long 1701143808,1515847770 +.long 2459079168,1364262993 +.long 3183328512,1819017324 +.long 2256963072,2341142667 +.long 3099113472,2593783962 +.long 2947526400,4227531003 +.long 2408550144,2964324528 +.long 2088532992,1953759348 +.long 3958106880,724238379 +.long 522133248,4042260720 +.long 3469659648,2223243396 +.long 1044266496,3755933919 +.long 808464384,3419078859 +.long 3705461760,875823156 +.long 1600085760,1987444854 +.long 1583242752,1835860077 +.long 3318072576,2846425257 +.long 185273088,3520135377 +.long 437918208,67371012 +.long 2795939328,336855060 +.long 3789676800,976879674 +.long 960051456,3739091166 +.long 3402287616,286326801 +.long 3587560704,842137650 +.long 1195853568,2627469468 +.long 1566399744,1397948499 +.long 1027423488,4075946226 +.long 3654932736,4278059262 +.long 16843008,3486449871 +.long 1515870720,3284336835 +.long 3604403712,2054815866 +.long 1364283648,606339108 +.long 1448498688,3907518696 +.long 1819044864,1616904288 +.long 1296911616,1768489065 +.long 2341178112,2863268010 +.long 218959104,2694840480 +.long 2593823232,2711683233 +.long 1717986816,1650589794 +.long 4227595008,1414791252 +.long 3435973632,505282590 +.long 2964369408,3772776672 +.long 757935360,1684275300 +.long 1953788928,269484048 +.long 303174144,0 +.long 724249344,2745368739 +.long 538976256,1970602101 +.long 4042321920,2324299914 +.long 2981212416,3873833190 +.long 2223277056,151584777 +.long 2576980224,3722248413 +.long 3755990784,2273771655 +.long 1280068608,2206400643 +.long 3419130624,3452764365 +.long 3267543552,2425356432 +.long 875836416,1936916595 +.long 2122219008,4143317238 +.long 1987474944,2644312221 +.long 84215040,3216965823 +.long 1835887872,1381105746 +.long 3082270464,3638034648 +.long 2846468352,3368550600 +.long 825307392,3334865094 +.long 3520188672,2172715137 +.long 387389184,1869545583 +.long 67372032,320012307 +.long 3621246720,1667432547 +.long 336860160,3924361449 +.long 1482184704,2812739751 +.long 976894464,2677997727 +.long 1633771776,3166437564 +.long 3739147776,690552873 +.long 454761216,4193845497 +.long 286331136,791609391 +.long 471604224,3031695540 +.long 842150400,2021130360 +.long 252645120,101056518 +.long 2627509248,3890675943 +.long 370546176,1903231089 +.long 1397969664,3570663636 +.long 404232192,2880110763 +.long 4076007936,2290614408 +.long 572662272,2374828173 +.long 4278124032,1920073842 +.long 1145324544,3115909305 +.long 3486502656,4177002744 +.long 2998055424,2896953516 +.long 3284386560,909508662 +.long 3048584448,707395626 +.long 2054846976,1010565180 +.long 2442236160,4059103473 +.long 606348288,1077936192 +.long 134744064,3553820883 +.long 3907577856,3149594811 +.long 2829625344,1128464451 +.long 1616928768,353697813 +.long 4244438016,2913796269 +.long 1768515840,2004287607 +.long 1347440640,2155872384 +.long 2863311360,2189557890 +.long 3503345664,3974889708 +.long 2694881280,656867367 +.long 2105376000,3856990437 +.long 2711724288,2240086149 +.long 2307492096,892665909 +.long 1650614784,202113036 +.long 2543294208,1094778945 +.long 1414812672,4025417967 +.long 1532713728,2475884691 +.long 505290240,421068825 +.long 2509608192,555810849 +.long 3772833792,235798542 +.long 4294967040,1313734734 +.long 1684300800,1701118053 +.long 3537031680,3183280317 +.long 269488128,3099066552 +.long 3301229568,2408513679 +.long 0,3958046955 +.long 1212696576,3469607118 +.long 2745410304,808452144 +.long 4160222976,1600061535 +.long 1970631936,3318022341 +.long 3688618752,437911578 +.long 2324335104,3789619425 +.long 50529024,3402236106 +.long 3873891840,1195835463 +.long 3671775744,1027407933 +.long 151587072,16842753 +.long 1061109504,3604349142 +.long 3722304768,1448476758 +.long 2492765184,1296891981 +.long 2273806080,218955789 +.long 1549556736,1717960806 +.long 2206434048,3435921612 +.long 33686016,757923885 +.long 3452816640,303169554 +.long 1246382592,538968096 +.long 2425393152,2981167281 +.long 858993408,2576941209 +.long 1936945920,1280049228 +.long 1734829824,3267494082 +.long 4143379968,2122186878 +.long 4092850944,84213765 +.long 2644352256,3082223799 +.long 2139062016,825294897 +.long 3217014528,387383319 +.long 3806519808,3621191895 +.long 1381126656,1482162264 +.long 2610666240,1633747041 +.long 3638089728,454754331 +.long 640034304,471597084 +.long 3368601600,252641295 +.long 926365440,370540566 +.long 3334915584,404226072 +.long 993737472,572653602 +.long 2172748032,1145307204 +.long 2526451200,2998010034 +.long 1869573888,3048538293 +.long 1263225600,2442199185 +.long 320017152,134742024 +.long 3200171520,2829582504 +.long 1667457792,4244373756 +.long 774778368,1347420240 +.long 3924420864,3503292624 +.long 2038003968,2105344125 +.long 2812782336,2307457161 +.long 2358021120,2543255703 +.long 2678038272,1532690523 +.long 1852730880,2509570197 +.long 3166485504,4294902015 +.long 2391707136,3536978130 +.long 690563328,3301179588 +.long 4126536960,1212678216 +.long 4193908992,4160159991 +.long 3065427456,3688562907 +.long 791621376,50528259 +.long 4261281024,3671720154 +.long 3031741440,1061093439 +.long 1499027712,2492727444 +.long 2021160960,1549533276 +.long 2560137216,33685506 +.long 101058048,1246363722 +.long 1785358848,858980403 +.long 3890734848,1734803559 +.long 1179010560,4092788979 +.long 1903259904,2139029631 +.long 3132799488,3806462178 +.long 3570717696,2610626715 +.long 623191296,640024614 +.long 2880154368,926351415 +.long 1111638528,993722427 +.long 2290649088,2526412950 +.long 2728567296,1263206475 +.long 2374864128,3200123070 +.long 4210752000,774766638 +.long 1920102912,2037973113 +.long 117901056,2357985420 +.long 3115956480,1852702830 +.long 1431655680,2391670926 +.long 4177065984,4126474485 +.long 4008635904,3065381046 +.long 2896997376,4261216509 +.long 168430080,1499005017 +.long 909522432,2560098456 +.long 1229539584,1785331818 +.long 707406336,1178992710 +.long 1751672832,3132752058 +.long 1010580480,623181861 +.long 943208448,1111621698 +.long 4059164928,2728525986 +.long 2762253312,4210688250 +.long 1077952512,117899271 +.long 673720320,1431634005 +.long 3553874688,4008575214 +.long 2071689984,168427530 +.long 3149642496,1229520969 +.long 3385444608,1751646312 +.long 1128481536,943194168 +.long 3250700544,2762211492 +.long 353703168,673710120 +.long 3823362816,2071658619 +.long 2913840384,3385393353 +.long 4109693952,3250651329 +.long 2004317952,3823304931 +.long 3351758592,4109631732 +.long 2155905024,3351707847 +.long 2661195264,2661154974 +.long 14737632,939538488 +.long 328965,1090535745 +.long 5789784,369104406 +.long 14277081,1979741814 +.long 6776679,3640711641 +.long 5131854,2466288531 +.long 8487297,1610637408 +.long 13355979,4060148466 +.long 13224393,1912631922 +.long 723723,3254829762 +.long 11447982,2868947883 +.long 6974058,2583730842 +.long 14013909,1962964341 +.long 1579032,100664838 +.long 6118749,1459640151 +.long 8553090,2684395680 +.long 4605510,2432733585 +.long 14671839,4144035831 +.long 14079702,3036722613 +.long 2565927,3372272073 +.long 9079434,2717950626 +.long 3289650,2348846220 +.long 4934475,3523269330 +.long 4342338,2415956112 +.long 14408667,4127258358 +.long 1842204,117442311 +.long 10395294,2801837991 +.long 10263708,654321447 +.long 3815994,2382401166 +.long 13290186,2986390194 +.long 2434341,1224755529 +.long 8092539,3724599006 +.long 855309,1124090691 +.long 7434609,1543527516 +.long 6250335,3607156695 +.long 2039583,3338717127 +.long 16316664,1040203326 +.long 14145495,4110480885 +.long 4079166,2399178639 +.long 10329501,1728079719 +.long 8158332,520101663 +.long 6316128,402659352 +.long 12171705,1845522030 +.long 12500670,2936057775 +.long 12369084,788541231 +.long 9145227,3791708898 +.long 1447446,2231403909 +.long 3421236,218107149 +.long 5066061,1392530259 +.long 12829635,4026593520 +.long 7500402,2617285788 +.long 9803157,1694524773 +.long 11250603,3925928682 +.long 9342606,2734728099 +.long 12237498,2919280302 +.long 8026746,2650840734 +.long 11776947,3959483628 +.long 131586,2147516544 +.long 11842740,754986285 +.long 11382189,1795189611 +.long 10658466,2818615464 +.long 11316396,721431339 +.long 14211288,905983542 +.long 10132122,2785060518 +.long 1513239,3305162181 +.long 1710618,2248181382 +.long 3487029,1291865421 +.long 13421772,855651123 +.long 16250871,4244700669 +.long 10066329,1711302246 +.long 6381921,1476417624 +.long 5921370,2516620950 +.long 15263976,973093434 +.long 2368548,150997257 +.long 5658198,2499843477 +.long 4210752,268439568 +.long 14803425,2013296760 +.long 6513507,3623934168 +.long 592137,1107313218 +.long 3355443,3422604492 +.long 12566463,4009816047 +.long 10000536,637543974 +.long 9934743,3842041317 +.long 8750469,1627414881 +.long 6842472,436214298 +.long 16579836,1056980799 +.long 15527148,989870907 +.long 657930,2181071490 +.long 14342874,3053500086 +.long 7303023,3674266587 +.long 5460819,3556824276 +.long 6447714,2550175896 +.long 10724259,3892373736 +.long 3026478,2332068747 +.long 526344,33554946 +.long 11513775,3942706155 +.long 2631720,167774730 +.long 11579568,738208812 +.long 7631988,486546717 +.long 12763842,2952835248 +.long 12434877,1862299503 +.long 3552822,2365623693 +.long 2236962,2281736328 +.long 3684408,234884622 +.long 6579300,419436825 +.long 1973790,2264958855 +.long 3750201,1308642894 +.long 2894892,184552203 +.long 10921638,2835392937 +.long 3158064,201329676 +.long 15066597,2030074233 +.long 4473924,285217041 +.long 16645629,2130739071 +.long 8947848,570434082 +.long 10461087,3875596263 +.long 6645093,1493195097 +.long 8882055,3774931425 +.long 7039851,3657489114 +.long 16053492,1023425853 +.long 2302755,3355494600 +.long 4737096,301994514 +.long 1052688,67109892 +.long 13750737,1946186868 +.long 5329233,1409307732 +.long 12632256,805318704 +.long 16382457,2113961598 +.long 13816530,3019945140 +.long 10526880,671098920 +.long 5592405,1426085205 +.long 10592673,1744857192 +.long 4276545,1342197840 +.long 16448250,3187719870 +.long 4408131,3489714384 +.long 1250067,3288384708 +.long 12895428,822096177 +.long 3092271,3405827019 +.long 11053224,704653866 +.long 11974326,2902502829 +.long 3947580,251662095 +.long 2829099,3389049546 +.long 12698049,1879076976 +.long 16777215,4278255615 +.long 13158600,838873650 +.long 10855845,1761634665 +.long 2105376,134219784 +.long 9013641,1644192354 +.long 0,0 +.long 9474192,603989028 +.long 4671303,3506491857 +.long 15724527,4211145723 +.long 15395562,3120609978 +.long 12040119,3976261101 +.long 1381653,1157645637 +.long 394758,2164294017 +.long 13487565,1929409395 +.long 11908533,1828744557 +.long 1184274,2214626436 +.long 8289918,2667618207 +.long 12303291,3993038574 +.long 2697513,1241533002 +.long 986895,3271607235 +.long 12105912,771763758 +.long 460551,3238052289 +.long 263172,16777473 +.long 10197915,3858818790 +.long 9737364,620766501 +.long 2171169,1207978056 +.long 6710886,2566953369 +.long 15132390,3103832505 +.long 13553358,3003167667 +.long 15592941,2063629179 +.long 15198183,4177590777 +.long 3881787,3456159438 +.long 16711422,3204497343 +.long 8355711,3741376479 +.long 12961221,1895854449 +.long 10790052,687876393 +.long 3618615,3439381965 +.long 11645361,1811967084 +.long 5000268,318771987 +.long 9539985,1677747300 +.long 7237230,2600508315 +.long 9276813,1660969827 +.long 7763574,2634063261 +.long 197379,3221274816 +.long 2960685,1258310475 +.long 14606046,3070277559 +.long 9868950,2768283045 +.long 2500134,2298513801 +.long 8224125,1593859935 +.long 13027014,2969612721 +.long 6052956,385881879 +.long 13882323,4093703412 +.long 15921906,3154164924 +.long 5197647,3540046803 +.long 1644825,1174423110 +.long 4144959,3472936911 +.long 14474460,922761015 +.long 7960953,1577082462 +.long 1907997,1191200583 +.long 5395026,2483066004 +.long 15461355,4194368250 +.long 15987699,4227923196 +.long 7171437,1526750043 +.long 6184542,2533398423 +.long 16514043,4261478142 +.long 6908265,1509972570 +.long 11711154,2885725356 +.long 15790320,1006648380 +.long 3223857,1275087948 +.long 789516,50332419 +.long 13948116,889206069 +.long 13619151,4076925939 +.long 9211020,587211555 +.long 14869218,3087055032 +.long 7697781,1560304989 +.long 11119017,1778412138 +.long 4868682,2449511058 +.long 5723991,3573601749 +.long 8684676,553656609 +.long 1118481,1140868164 +.long 4539717,1358975313 +.long 1776411,3321939654 +.long 16119285,2097184125 +.long 15000804,956315961 +.long 921102,2197848963 +.long 7566195,3691044060 +.long 11184810,2852170410 +.long 15856113,2080406652 +.long 14540253,1996519287 +.long 5855577,1442862678 +.long 1315860,83887365 +.long 7105644,452991771 +.long 9605778,2751505572 +.long 5526612,352326933 +.long 13684944,872428596 +.long 7895160,503324190 +.long 7368816,469769244 +.long 14935011,4160813304 +.long 4802889,1375752786 +.long 8421504,536879136 +.long 5263440,335549460 +.long 10987431,3909151209 +.long 16185078,3170942397 +.long 7829367,3707821533 +.long 9671571,3825263844 +.long 8816262,2701173153 +.long 8618883,3758153952 +.long 2763306,2315291274 +.long 13092807,4043370993 +.long 5987163,3590379222 +.long 15329769,2046851706 +.long 15658734,3137387451 +.long 9408399,3808486371 +.long 65793,1073758272 +.long 4013373,1325420367 +.globl Camellia_cbc_encrypt +.type Camellia_cbc_encrypt,@function +.align 16 +Camellia_cbc_encrypt: +.L_Camellia_cbc_encrypt_begin: + #ifdef __CET__ + +.byte 243,15,30,251 + #endif + + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 28(%esp),%ecx + cmpl $0,%ecx + je .L016enc_out + pushfl + cld + movl 24(%esp),%eax + movl 28(%esp),%ebx + movl 36(%esp),%edx + movl 40(%esp),%ebp + leal -64(%esp),%esi + andl $-64,%esi + leal -127(%edx),%edi + subl %esi,%edi + negl %edi + andl $960,%edi + subl %edi,%esi + movl 44(%esp),%edi + xchgl %esi,%esp + addl $4,%esp + movl %esi,20(%esp) + movl %eax,24(%esp) + movl %ebx,28(%esp) + movl %ecx,32(%esp) + movl %edx,36(%esp) + movl %ebp,40(%esp) + call .L017pic_point +.L017pic_point: + popl %ebp + leal .LCamellia_SBOX-.L017pic_point(%ebp),%ebp + movl $32,%esi +.align 4 +.L018prefetch_sbox: + movl (%ebp),%eax + movl 32(%ebp),%ebx + movl 64(%ebp),%ecx + movl 96(%ebp),%edx + leal 128(%ebp),%ebp + decl %esi + jnz .L018prefetch_sbox + movl 36(%esp),%eax + subl $4096,%ebp + movl 24(%esp),%esi + movl 272(%eax),%edx + cmpl $0,%edi + je .L019DECRYPT + movl 32(%esp),%ecx + movl 40(%esp),%edi + shll $6,%edx + leal (%eax,%edx,1),%edx + movl %edx,16(%esp) + testl $4294967280,%ecx + jz .L020enc_tail + movl (%edi),%eax + movl 4(%edi),%ebx +.align 4 +.L021enc_loop: + movl 8(%edi),%ecx + movl 12(%edi),%edx + xorl (%esi),%eax + xorl 4(%esi),%ebx + xorl 8(%esi),%ecx + bswap %eax + xorl 12(%esi),%edx + bswap %ebx + movl 36(%esp),%edi + bswap %ecx + bswap %edx + call _x86_Camellia_encrypt + movl 24(%esp),%esi + movl 28(%esp),%edi + bswap %eax + bswap %ebx + bswap %ecx + movl %eax,(%edi) + bswap %edx + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 32(%esp),%ecx + leal 16(%esi),%esi + movl %esi,24(%esp) + leal 16(%edi),%edx + movl %edx,28(%esp) + subl $16,%ecx + testl $4294967280,%ecx + movl %ecx,32(%esp) + jnz .L021enc_loop + testl $15,%ecx + jnz .L020enc_tail + movl 40(%esp),%esi + movl 8(%edi),%ecx + movl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + movl 20(%esp),%esp + popfl +.L016enc_out: + popl %edi + popl %esi + popl %ebx + popl %ebp + ret + pushfl +.align 4 +.L020enc_tail: + movl %edi,%eax + movl 28(%esp),%edi + pushl %eax + movl $16,%ebx + subl %ecx,%ebx + cmpl %esi,%edi + je .L022enc_in_place +.align 4 +.long 2767451785 + jmp .L023enc_skip_in_place +.L022enc_in_place: + leal (%edi,%ecx,1),%edi +.L023enc_skip_in_place: + movl %ebx,%ecx + xorl %eax,%eax +.align 4 +.long 2868115081 + popl %edi + movl 28(%esp),%esi + movl (%edi),%eax + movl 4(%edi),%ebx + movl $16,32(%esp) + jmp .L021enc_loop +.align 16 +.L019DECRYPT: + shll $6,%edx + leal (%eax,%edx,1),%edx + movl %eax,16(%esp) + movl %edx,36(%esp) + cmpl 28(%esp),%esi + je .L024dec_in_place + movl 40(%esp),%edi + movl %edi,44(%esp) +.align 4 +.L025dec_loop: + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + bswap %eax + movl 12(%esi),%edx + bswap %ebx + movl 36(%esp),%edi + bswap %ecx + bswap %edx + call _x86_Camellia_decrypt + movl 44(%esp),%edi + movl 32(%esp),%esi + bswap %eax + bswap %ebx + bswap %ecx + xorl (%edi),%eax + bswap %edx + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + subl $16,%esi + jc .L026dec_partial + movl %esi,32(%esp) + movl 24(%esp),%esi + movl 28(%esp),%edi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl %esi,44(%esp) + leal 16(%esi),%esi + movl %esi,24(%esp) + leal 16(%edi),%edi + movl %edi,28(%esp) + jnz .L025dec_loop + movl 44(%esp),%edi +.L027dec_end: + movl 40(%esp),%esi + movl (%edi),%eax + movl 4(%edi),%ebx + movl 8(%edi),%ecx + movl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + jmp .L028dec_out +.align 4 +.L026dec_partial: + leal 44(%esp),%edi + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + leal 16(%esi),%ecx + movl %edi,%esi + movl 28(%esp),%edi +.long 2767451785 + movl 24(%esp),%edi + jmp .L027dec_end +.align 4 +.L024dec_in_place: +.L029dec_in_place_loop: + leal 44(%esp),%edi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + bswap %eax + movl %edx,12(%edi) + bswap %ebx + movl 36(%esp),%edi + bswap %ecx + bswap %edx + call _x86_Camellia_decrypt + movl 40(%esp),%edi + movl 28(%esp),%esi + bswap %eax + bswap %ebx + bswap %ecx + xorl (%edi),%eax + bswap %edx + xorl 4(%edi),%ebx + xorl 8(%edi),%ecx + xorl 12(%edi),%edx + movl %eax,(%esi) + movl %ebx,4(%esi) + movl %ecx,8(%esi) + movl %edx,12(%esi) + leal 16(%esi),%esi + movl %esi,28(%esp) + leal 44(%esp),%esi + movl (%esi),%eax + movl 4(%esi),%ebx + movl 8(%esi),%ecx + movl 12(%esi),%edx + movl %eax,(%edi) + movl %ebx,4(%edi) + movl %ecx,8(%edi) + movl %edx,12(%edi) + movl 24(%esp),%esi + leal 16(%esi),%esi + movl %esi,24(%esp) + movl 32(%esp),%ecx + subl $16,%ecx + jc .L030dec_in_place_partial + movl %ecx,32(%esp) + jnz .L029dec_in_place_loop + jmp .L028dec_out +.align 4 +.L030dec_in_place_partial: + movl 28(%esp),%edi + leal 44(%esp),%esi + leal (%edi,%ecx,1),%edi + leal 16(%esi,%ecx,1),%esi + negl %ecx +.long 2767451785 +.align 4 +.L028dec_out: + movl 20(%esp),%esp + popfl + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size Camellia_cbc_encrypt,.-.L_Camellia_cbc_encrypt_begin +.byte 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54 +.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 +.byte 115,108,46,111,114,103,62,0 + + .section ".note.gnu.property", "a" + .p2align 2 + .long 1f - 0f + .long 4f - 1f + .long 5 +0: + .asciz "GNU" +1: + .p2align 2 + .long 0xc0000002 + .long 3f - 2f +2: + .long 3 +3: + .p2align 2 +4: diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/camellia/cmll-x86.nasm b/CryptoPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/camellia/cmll-x86.nasm new file mode 100644 index 0000000000..409495d786 --- /dev/null +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/IA32-MSFT/crypto/camellia/cmll-x86.nasm @@ -0,0 +1,2359 @@ +%ifidn __OUTPUT_FORMAT__,obj +section code use32 class=code align=64 +%elifidn __OUTPUT_FORMAT__,win32 +$@feat.00 equ 1 +section .text code align=64 +%else +section .text code +%endif +global _Camellia_EncryptBlock_Rounds +align 16 +_Camellia_EncryptBlock_Rounds: +L$_Camellia_EncryptBlock_Rounds_begin: + push ebp + push ebx + push esi + push edi + mov eax,DWORD [20+esp] + mov esi,DWORD [24+esp] + mov edi,DWORD [28+esp] + mov ebx,esp + sub esp,28 + and esp,-64 + lea ecx,[edi-127] + sub ecx,esp + neg ecx + and ecx,960 + sub esp,ecx + add esp,4 + shl eax,6 + lea eax,[eax*1+edi] + mov DWORD [20+esp],ebx + mov DWORD [16+esp],eax + call L$000pic_point +L$000pic_point: + pop ebp + lea ebp,[(L$Camellia_SBOX-L$000pic_point)+ebp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + bswap eax + mov edx,DWORD [12+esi] + bswap ebx + bswap ecx + bswap edx + call __x86_Camellia_encrypt + mov esp,DWORD [20+esp] + bswap eax + mov esi,DWORD [32+esp] + bswap ebx + bswap ecx + bswap edx + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + pop edi + pop esi + pop ebx + pop ebp + ret +global _Camellia_EncryptBlock +align 16 +_Camellia_EncryptBlock: +L$_Camellia_EncryptBlock_begin: + mov eax,128 + sub eax,DWORD [4+esp] + mov eax,3 + adc eax,0 + mov DWORD [4+esp],eax + jmp NEAR L$_Camellia_EncryptBlock_Rounds_begin +global _Camellia_encrypt +align 16 +_Camellia_encrypt: +L$_Camellia_encrypt_begin: + push ebp + push ebx + push esi + push edi + mov esi,DWORD [20+esp] + mov edi,DWORD [28+esp] + mov ebx,esp + sub esp,28 + and esp,-64 + mov eax,DWORD [272+edi] + lea ecx,[edi-127] + sub ecx,esp + neg ecx + and ecx,960 + sub esp,ecx + add esp,4 + shl eax,6 + lea eax,[eax*1+edi] + mov DWORD [20+esp],ebx + mov DWORD [16+esp],eax + call L$001pic_point +L$001pic_point: + pop ebp + lea ebp,[(L$Camellia_SBOX-L$001pic_point)+ebp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + bswap eax + mov edx,DWORD [12+esi] + bswap ebx + bswap ecx + bswap edx + call __x86_Camellia_encrypt + mov esp,DWORD [20+esp] + bswap eax + mov esi,DWORD [24+esp] + bswap ebx + bswap ecx + bswap edx + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + pop edi + pop esi + pop ebx + pop ebp + ret +align 16 +__x86_Camellia_encrypt: + xor eax,DWORD [edi] + xor ebx,DWORD [4+edi] + xor ecx,DWORD [8+edi] + xor edx,DWORD [12+edi] + mov esi,DWORD [16+edi] + mov DWORD [4+esp],eax + mov DWORD [8+esp],ebx + mov DWORD [12+esp],ecx + mov DWORD [16+esp],edx +align 16 +L$002loop: + xor eax,esi + xor ebx,DWORD [20+edi] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [16+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [12+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [24+edi] + xor edx,ecx + mov DWORD [16+esp],edx + xor ecx,ebx + mov DWORD [12+esp],ecx + xor ecx,esi + xor edx,DWORD [28+edi] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [8+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [4+esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [32+edi] + xor ebx,eax + mov DWORD [8+esp],ebx + xor eax,edx + mov DWORD [4+esp],eax + xor eax,esi + xor ebx,DWORD [36+edi] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [16+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [12+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [40+edi] + xor edx,ecx + mov DWORD [16+esp],edx + xor ecx,ebx + mov DWORD [12+esp],ecx + xor ecx,esi + xor edx,DWORD [44+edi] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [8+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [4+esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [48+edi] + xor ebx,eax + mov DWORD [8+esp],ebx + xor eax,edx + mov DWORD [4+esp],eax + xor eax,esi + xor ebx,DWORD [52+edi] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [16+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [12+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [56+edi] + xor edx,ecx + mov DWORD [16+esp],edx + xor ecx,ebx + mov DWORD [12+esp],ecx + xor ecx,esi + xor edx,DWORD [60+edi] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [8+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [4+esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [64+edi] + xor ebx,eax + mov DWORD [8+esp],ebx + xor eax,edx + mov DWORD [4+esp],eax + add edi,64 + cmp edi,DWORD [20+esp] + je NEAR L$003done + and esi,eax + mov edx,DWORD [16+esp] + rol esi,1 + mov ecx,edx + xor ebx,esi + or ecx,DWORD [12+edi] + mov DWORD [8+esp],ebx + xor ecx,DWORD [12+esp] + mov esi,DWORD [4+edi] + mov DWORD [12+esp],ecx + or esi,ebx + and ecx,DWORD [8+edi] + xor eax,esi + rol ecx,1 + mov DWORD [4+esp],eax + xor edx,ecx + mov esi,DWORD [16+edi] + mov DWORD [16+esp],edx + jmp NEAR L$002loop +align 8 +L$003done: + mov ecx,eax + mov edx,ebx + mov eax,DWORD [12+esp] + mov ebx,DWORD [16+esp] + xor eax,esi + xor ebx,DWORD [4+edi] + xor ecx,DWORD [8+edi] + xor edx,DWORD [12+edi] + ret +global _Camellia_DecryptBlock_Rounds +align 16 +_Camellia_DecryptBlock_Rounds: +L$_Camellia_DecryptBlock_Rounds_begin: + push ebp + push ebx + push esi + push edi + mov eax,DWORD [20+esp] + mov esi,DWORD [24+esp] + mov edi,DWORD [28+esp] + mov ebx,esp + sub esp,28 + and esp,-64 + lea ecx,[edi-127] + sub ecx,esp + neg ecx + and ecx,960 + sub esp,ecx + add esp,4 + shl eax,6 + mov DWORD [16+esp],edi + lea edi,[eax*1+edi] + mov DWORD [20+esp],ebx + call L$004pic_point +L$004pic_point: + pop ebp + lea ebp,[(L$Camellia_SBOX-L$004pic_point)+ebp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + bswap eax + mov edx,DWORD [12+esi] + bswap ebx + bswap ecx + bswap edx + call __x86_Camellia_decrypt + mov esp,DWORD [20+esp] + bswap eax + mov esi,DWORD [32+esp] + bswap ebx + bswap ecx + bswap edx + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + pop edi + pop esi + pop ebx + pop ebp + ret +global _Camellia_DecryptBlock +align 16 +_Camellia_DecryptBlock: +L$_Camellia_DecryptBlock_begin: + mov eax,128 + sub eax,DWORD [4+esp] + mov eax,3 + adc eax,0 + mov DWORD [4+esp],eax + jmp NEAR L$_Camellia_DecryptBlock_Rounds_begin +global _Camellia_decrypt +align 16 +_Camellia_decrypt: +L$_Camellia_decrypt_begin: + push ebp + push ebx + push esi + push edi + mov esi,DWORD [20+esp] + mov edi,DWORD [28+esp] + mov ebx,esp + sub esp,28 + and esp,-64 + mov eax,DWORD [272+edi] + lea ecx,[edi-127] + sub ecx,esp + neg ecx + and ecx,960 + sub esp,ecx + add esp,4 + shl eax,6 + mov DWORD [16+esp],edi + lea edi,[eax*1+edi] + mov DWORD [20+esp],ebx + call L$005pic_point +L$005pic_point: + pop ebp + lea ebp,[(L$Camellia_SBOX-L$005pic_point)+ebp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + bswap eax + mov edx,DWORD [12+esi] + bswap ebx + bswap ecx + bswap edx + call __x86_Camellia_decrypt + mov esp,DWORD [20+esp] + bswap eax + mov esi,DWORD [24+esp] + bswap ebx + bswap ecx + bswap edx + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + pop edi + pop esi + pop ebx + pop ebp + ret +align 16 +__x86_Camellia_decrypt: + xor eax,DWORD [edi] + xor ebx,DWORD [4+edi] + xor ecx,DWORD [8+edi] + xor edx,DWORD [12+edi] + mov esi,DWORD [edi-8] + mov DWORD [4+esp],eax + mov DWORD [8+esp],ebx + mov DWORD [12+esp],ecx + mov DWORD [16+esp],edx +align 16 +L$006loop: + xor eax,esi + xor ebx,DWORD [edi-4] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [16+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [12+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [edi-16] + xor edx,ecx + mov DWORD [16+esp],edx + xor ecx,ebx + mov DWORD [12+esp],ecx + xor ecx,esi + xor edx,DWORD [edi-12] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [8+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [4+esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [edi-24] + xor ebx,eax + mov DWORD [8+esp],ebx + xor eax,edx + mov DWORD [4+esp],eax + xor eax,esi + xor ebx,DWORD [edi-20] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [16+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [12+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [edi-32] + xor edx,ecx + mov DWORD [16+esp],edx + xor ecx,ebx + mov DWORD [12+esp],ecx + xor ecx,esi + xor edx,DWORD [edi-28] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [8+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [4+esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [edi-40] + xor ebx,eax + mov DWORD [8+esp],ebx + xor eax,edx + mov DWORD [4+esp],eax + xor eax,esi + xor ebx,DWORD [edi-36] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [16+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [12+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [edi-48] + xor edx,ecx + mov DWORD [16+esp],edx + xor ecx,ebx + mov DWORD [12+esp],ecx + xor ecx,esi + xor edx,DWORD [edi-44] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [8+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [4+esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [edi-56] + xor ebx,eax + mov DWORD [8+esp],ebx + xor eax,edx + mov DWORD [4+esp],eax + sub edi,64 + cmp edi,DWORD [20+esp] + je NEAR L$007done + and esi,eax + mov edx,DWORD [16+esp] + rol esi,1 + mov ecx,edx + xor ebx,esi + or ecx,DWORD [4+edi] + mov DWORD [8+esp],ebx + xor ecx,DWORD [12+esp] + mov esi,DWORD [12+edi] + mov DWORD [12+esp],ecx + or esi,ebx + and ecx,DWORD [edi] + xor eax,esi + rol ecx,1 + mov DWORD [4+esp],eax + xor edx,ecx + mov esi,DWORD [edi-8] + mov DWORD [16+esp],edx + jmp NEAR L$006loop +align 8 +L$007done: + mov ecx,eax + mov edx,ebx + mov eax,DWORD [12+esp] + mov ebx,DWORD [16+esp] + xor ecx,esi + xor edx,DWORD [12+edi] + xor eax,DWORD [edi] + xor ebx,DWORD [4+edi] + ret +global _Camellia_Ekeygen +align 16 +_Camellia_Ekeygen: +L$_Camellia_Ekeygen_begin: + push ebp + push ebx + push esi + push edi + sub esp,16 + mov ebp,DWORD [36+esp] + mov esi,DWORD [40+esp] + mov edi,DWORD [44+esp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + mov edx,DWORD [12+esi] + bswap eax + bswap ebx + bswap ecx + bswap edx + mov DWORD [edi],eax + mov DWORD [4+edi],ebx + mov DWORD [8+edi],ecx + mov DWORD [12+edi],edx + cmp ebp,128 + je NEAR L$0081st128 + mov eax,DWORD [16+esi] + mov ebx,DWORD [20+esi] + cmp ebp,192 + je NEAR L$0091st192 + mov ecx,DWORD [24+esi] + mov edx,DWORD [28+esi] + jmp NEAR L$0101st256 +align 4 +L$0091st192: + mov ecx,eax + mov edx,ebx + not ecx + not edx +align 4 +L$0101st256: + bswap eax + bswap ebx + bswap ecx + bswap edx + mov DWORD [32+edi],eax + mov DWORD [36+edi],ebx + mov DWORD [40+edi],ecx + mov DWORD [44+edi],edx + xor eax,DWORD [edi] + xor ebx,DWORD [4+edi] + xor ecx,DWORD [8+edi] + xor edx,DWORD [12+edi] +align 4 +L$0081st128: + call L$011pic_point +L$011pic_point: + pop ebp + lea ebp,[(L$Camellia_SBOX-L$011pic_point)+ebp] + lea edi,[(L$Camellia_SIGMA-L$Camellia_SBOX)+ebp] + mov esi,DWORD [edi] + mov DWORD [esp],eax + mov DWORD [4+esp],ebx + mov DWORD [8+esp],ecx + mov DWORD [12+esp],edx + xor eax,esi + xor ebx,DWORD [4+edi] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [12+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [8+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [8+edi] + xor edx,ecx + mov DWORD [12+esp],edx + xor ecx,ebx + mov DWORD [8+esp],ecx + xor ecx,esi + xor edx,DWORD [12+edi] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [4+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [16+edi] + xor ebx,eax + mov DWORD [4+esp],ebx + xor eax,edx + mov DWORD [esp],eax + mov ecx,DWORD [8+esp] + mov edx,DWORD [12+esp] + mov esi,DWORD [44+esp] + xor eax,DWORD [esi] + xor ebx,DWORD [4+esi] + xor ecx,DWORD [8+esi] + xor edx,DWORD [12+esi] + mov esi,DWORD [16+edi] + mov DWORD [esp],eax + mov DWORD [4+esp],ebx + mov DWORD [8+esp],ecx + mov DWORD [12+esp],edx + xor eax,esi + xor ebx,DWORD [20+edi] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [12+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [8+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [24+edi] + xor edx,ecx + mov DWORD [12+esp],edx + xor ecx,ebx + mov DWORD [8+esp],ecx + xor ecx,esi + xor edx,DWORD [28+edi] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [4+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [32+edi] + xor ebx,eax + mov DWORD [4+esp],ebx + xor eax,edx + mov DWORD [esp],eax + mov ecx,DWORD [8+esp] + mov edx,DWORD [12+esp] + mov esi,DWORD [36+esp] + cmp esi,128 + jne NEAR L$0122nd256 + mov edi,DWORD [44+esp] + lea edi,[128+edi] + mov DWORD [edi-112],eax + mov DWORD [edi-108],ebx + mov DWORD [edi-104],ecx + mov DWORD [edi-100],edx + mov ebp,eax + shl eax,15 + mov esi,ebx + shr esi,17 + shl ebx,15 + or eax,esi + mov esi,ecx + shl ecx,15 + mov DWORD [edi-80],eax + shr esi,17 + or ebx,esi + shr ebp,17 + mov esi,edx + shr esi,17 + mov DWORD [edi-76],ebx + shl edx,15 + or ecx,esi + or edx,ebp + mov DWORD [edi-72],ecx + mov DWORD [edi-68],edx + mov ebp,eax + shl eax,15 + mov esi,ebx + shr esi,17 + shl ebx,15 + or eax,esi + mov esi,ecx + shl ecx,15 + mov DWORD [edi-64],eax + shr esi,17 + or ebx,esi + shr ebp,17 + mov esi,edx + shr esi,17 + mov DWORD [edi-60],ebx + shl edx,15 + or ecx,esi + or edx,ebp + mov DWORD [edi-56],ecx + mov DWORD [edi-52],edx + mov ebp,eax + shl eax,15 + mov esi,ebx + shr esi,17 + shl ebx,15 + or eax,esi + mov esi,ecx + shl ecx,15 + mov DWORD [edi-32],eax + shr esi,17 + or ebx,esi + shr ebp,17 + mov esi,edx + shr esi,17 + mov DWORD [edi-28],ebx + shl edx,15 + or ecx,esi + or edx,ebp + mov ebp,eax + shl eax,15 + mov esi,ebx + shr esi,17 + shl ebx,15 + or eax,esi + mov esi,ecx + shl ecx,15 + mov DWORD [edi-16],eax + shr esi,17 + or ebx,esi + shr ebp,17 + mov esi,edx + shr esi,17 + mov DWORD [edi-12],ebx + shl edx,15 + or ecx,esi + or edx,ebp + mov DWORD [edi-8],ecx + mov DWORD [edi-4],edx + mov ebp,ebx + shl ebx,2 + mov esi,ecx + shr esi,30 + shl ecx,2 + or ebx,esi + mov esi,edx + shl edx,2 + mov DWORD [32+edi],ebx + shr esi,30 + or ecx,esi + shr ebp,30 + mov esi,eax + shr esi,30 + mov DWORD [36+edi],ecx + shl eax,2 + or edx,esi + or eax,ebp + mov DWORD [40+edi],edx + mov DWORD [44+edi],eax + mov ebp,ebx + shl ebx,17 + mov esi,ecx + shr esi,15 + shl ecx,17 + or ebx,esi + mov esi,edx + shl edx,17 + mov DWORD [64+edi],ebx + shr esi,15 + or ecx,esi + shr ebp,15 + mov esi,eax + shr esi,15 + mov DWORD [68+edi],ecx + shl eax,17 + or edx,esi + or eax,ebp + mov DWORD [72+edi],edx + mov DWORD [76+edi],eax + mov ebx,DWORD [edi-128] + mov ecx,DWORD [edi-124] + mov edx,DWORD [edi-120] + mov eax,DWORD [edi-116] + mov ebp,ebx + shl ebx,15 + mov esi,ecx + shr esi,17 + shl ecx,15 + or ebx,esi + mov esi,edx + shl edx,15 + mov DWORD [edi-96],ebx + shr esi,17 + or ecx,esi + shr ebp,17 + mov esi,eax + shr esi,17 + mov DWORD [edi-92],ecx + shl eax,15 + or edx,esi + or eax,ebp + mov DWORD [edi-88],edx + mov DWORD [edi-84],eax + mov ebp,ebx + shl ebx,30 + mov esi,ecx + shr esi,2 + shl ecx,30 + or ebx,esi + mov esi,edx + shl edx,30 + mov DWORD [edi-48],ebx + shr esi,2 + or ecx,esi + shr ebp,2 + mov esi,eax + shr esi,2 + mov DWORD [edi-44],ecx + shl eax,30 + or edx,esi + or eax,ebp + mov DWORD [edi-40],edx + mov DWORD [edi-36],eax + mov ebp,ebx + shl ebx,15 + mov esi,ecx + shr esi,17 + shl ecx,15 + or ebx,esi + mov esi,edx + shl edx,15 + shr esi,17 + or ecx,esi + shr ebp,17 + mov esi,eax + shr esi,17 + shl eax,15 + or edx,esi + or eax,ebp + mov DWORD [edi-24],edx + mov DWORD [edi-20],eax + mov ebp,ebx + shl ebx,17 + mov esi,ecx + shr esi,15 + shl ecx,17 + or ebx,esi + mov esi,edx + shl edx,17 + mov DWORD [edi],ebx + shr esi,15 + or ecx,esi + shr ebp,15 + mov esi,eax + shr esi,15 + mov DWORD [4+edi],ecx + shl eax,17 + or edx,esi + or eax,ebp + mov DWORD [8+edi],edx + mov DWORD [12+edi],eax + mov ebp,ebx + shl ebx,17 + mov esi,ecx + shr esi,15 + shl ecx,17 + or ebx,esi + mov esi,edx + shl edx,17 + mov DWORD [16+edi],ebx + shr esi,15 + or ecx,esi + shr ebp,15 + mov esi,eax + shr esi,15 + mov DWORD [20+edi],ecx + shl eax,17 + or edx,esi + or eax,ebp + mov DWORD [24+edi],edx + mov DWORD [28+edi],eax + mov ebp,ebx + shl ebx,17 + mov esi,ecx + shr esi,15 + shl ecx,17 + or ebx,esi + mov esi,edx + shl edx,17 + mov DWORD [48+edi],ebx + shr esi,15 + or ecx,esi + shr ebp,15 + mov esi,eax + shr esi,15 + mov DWORD [52+edi],ecx + shl eax,17 + or edx,esi + or eax,ebp + mov DWORD [56+edi],edx + mov DWORD [60+edi],eax + mov eax,3 + jmp NEAR L$013done +align 16 +L$0122nd256: + mov esi,DWORD [44+esp] + mov DWORD [48+esi],eax + mov DWORD [52+esi],ebx + mov DWORD [56+esi],ecx + mov DWORD [60+esi],edx + xor eax,DWORD [32+esi] + xor ebx,DWORD [36+esi] + xor ecx,DWORD [40+esi] + xor edx,DWORD [44+esi] + mov esi,DWORD [32+edi] + mov DWORD [esp],eax + mov DWORD [4+esp],ebx + mov DWORD [8+esp],ecx + mov DWORD [12+esp],edx + xor eax,esi + xor ebx,DWORD [36+edi] + movzx esi,ah + mov edx,DWORD [2052+esi*8+ebp] + movzx esi,al + xor edx,DWORD [4+esi*8+ebp] + shr eax,16 + movzx esi,bl + mov ecx,DWORD [esi*8+ebp] + movzx esi,ah + xor edx,DWORD [esi*8+ebp] + movzx esi,bh + xor ecx,DWORD [4+esi*8+ebp] + shr ebx,16 + movzx eax,al + xor edx,DWORD [2048+eax*8+ebp] + movzx esi,bh + mov eax,DWORD [12+esp] + xor ecx,edx + ror edx,8 + xor ecx,DWORD [2048+esi*8+ebp] + movzx esi,bl + mov ebx,DWORD [8+esp] + xor edx,eax + xor ecx,DWORD [2052+esi*8+ebp] + mov esi,DWORD [40+edi] + xor edx,ecx + mov DWORD [12+esp],edx + xor ecx,ebx + mov DWORD [8+esp],ecx + xor ecx,esi + xor edx,DWORD [44+edi] + movzx esi,ch + mov ebx,DWORD [2052+esi*8+ebp] + movzx esi,cl + xor ebx,DWORD [4+esi*8+ebp] + shr ecx,16 + movzx esi,dl + mov eax,DWORD [esi*8+ebp] + movzx esi,ch + xor ebx,DWORD [esi*8+ebp] + movzx esi,dh + xor eax,DWORD [4+esi*8+ebp] + shr edx,16 + movzx ecx,cl + xor ebx,DWORD [2048+ecx*8+ebp] + movzx esi,dh + mov ecx,DWORD [4+esp] + xor eax,ebx + ror ebx,8 + xor eax,DWORD [2048+esi*8+ebp] + movzx esi,dl + mov edx,DWORD [esp] + xor ebx,ecx + xor eax,DWORD [2052+esi*8+ebp] + mov esi,DWORD [48+edi] + xor ebx,eax + mov DWORD [4+esp],ebx + xor eax,edx + mov DWORD [esp],eax + mov ecx,DWORD [8+esp] + mov edx,DWORD [12+esp] + mov edi,DWORD [44+esp] + lea edi,[128+edi] + mov DWORD [edi-112],eax + mov DWORD [edi-108],ebx + mov DWORD [edi-104],ecx + mov DWORD [edi-100],edx + mov ebp,eax + shl eax,30 + mov esi,ebx + shr esi,2 + shl ebx,30 + or eax,esi + mov esi,ecx + shl ecx,30 + mov DWORD [edi-48],eax + shr esi,2 + or ebx,esi + shr ebp,2 + mov esi,edx + shr esi,2 + mov DWORD [edi-44],ebx + shl edx,30 + or ecx,esi + or edx,ebp + mov DWORD [edi-40],ecx + mov DWORD [edi-36],edx + mov ebp,eax + shl eax,30 + mov esi,ebx + shr esi,2 + shl ebx,30 + or eax,esi + mov esi,ecx + shl ecx,30 + mov DWORD [32+edi],eax + shr esi,2 + or ebx,esi + shr ebp,2 + mov esi,edx + shr esi,2 + mov DWORD [36+edi],ebx + shl edx,30 + or ecx,esi + or edx,ebp + mov DWORD [40+edi],ecx + mov DWORD [44+edi],edx + mov ebp,ebx + shl ebx,19 + mov esi,ecx + shr esi,13 + shl ecx,19 + or ebx,esi + mov esi,edx + shl edx,19 + mov DWORD [128+edi],ebx + shr esi,13 + or ecx,esi + shr ebp,13 + mov esi,eax + shr esi,13 + mov DWORD [132+edi],ecx + shl eax,19 + or edx,esi + or eax,ebp + mov DWORD [136+edi],edx + mov DWORD [140+edi],eax + mov ebx,DWORD [edi-96] + mov ecx,DWORD [edi-92] + mov edx,DWORD [edi-88] + mov eax,DWORD [edi-84] + mov ebp,ebx + shl ebx,15 + mov esi,ecx + shr esi,17 + shl ecx,15 + or ebx,esi + mov esi,edx + shl edx,15 + mov DWORD [edi-96],ebx + shr esi,17 + or ecx,esi + shr ebp,17 + mov esi,eax + shr esi,17 + mov DWORD [edi-92],ecx + shl eax,15 + or edx,esi + or eax,ebp + mov DWORD [edi-88],edx + mov DWORD [edi-84],eax + mov ebp,ebx + shl ebx,15 + mov esi,ecx + shr esi,17 + shl ecx,15 + or ebx,esi + mov esi,edx + shl edx,15 + mov DWORD [edi-64],ebx + shr esi,17 + or ecx,esi + shr ebp,17 + mov esi,eax + shr esi,17 + mov DWORD [edi-60],ecx + shl eax,15 + or edx,esi + or eax,ebp + mov DWORD [edi-56],edx + mov DWORD [edi-52],eax + mov ebp,ebx + shl ebx,30 + mov esi,ecx + shr esi,2 + shl ecx,30 + or ebx,esi + mov esi,edx + shl edx,30 + mov DWORD [16+edi],ebx + shr esi,2 + or ecx,esi + shr ebp,2 + mov esi,eax + shr esi,2 + mov DWORD [20+edi],ecx + shl eax,30 + or edx,esi + or eax,ebp + mov DWORD [24+edi],edx + mov DWORD [28+edi],eax + mov ebp,ecx + shl ecx,2 + mov esi,edx + shr esi,30 + shl edx,2 + or ecx,esi + mov esi,eax + shl eax,2 + mov DWORD [80+edi],ecx + shr esi,30 + or edx,esi + shr ebp,30 + mov esi,ebx + shr esi,30 + mov DWORD [84+edi],edx + shl ebx,2 + or eax,esi + or ebx,ebp + mov DWORD [88+edi],eax + mov DWORD [92+edi],ebx + mov ecx,DWORD [edi-80] + mov edx,DWORD [edi-76] + mov eax,DWORD [edi-72] + mov ebx,DWORD [edi-68] + mov ebp,ecx + shl ecx,15 + mov esi,edx + shr esi,17 + shl edx,15 + or ecx,esi + mov esi,eax + shl eax,15 + mov DWORD [edi-80],ecx + shr esi,17 + or edx,esi + shr ebp,17 + mov esi,ebx + shr esi,17 + mov DWORD [edi-76],edx + shl ebx,15 + or eax,esi + or ebx,ebp + mov DWORD [edi-72],eax + mov DWORD [edi-68],ebx + mov ebp,ecx + shl ecx,30 + mov esi,edx + shr esi,2 + shl edx,30 + or ecx,esi + mov esi,eax + shl eax,30 + mov DWORD [edi-16],ecx + shr esi,2 + or edx,esi + shr ebp,2 + mov esi,ebx + shr esi,2 + mov DWORD [edi-12],edx + shl ebx,30 + or eax,esi + or ebx,ebp + mov DWORD [edi-8],eax + mov DWORD [edi-4],ebx + mov DWORD [64+edi],edx + mov DWORD [68+edi],eax + mov DWORD [72+edi],ebx + mov DWORD [76+edi],ecx + mov ebp,edx + shl edx,17 + mov esi,eax + shr esi,15 + shl eax,17 + or edx,esi + mov esi,ebx + shl ebx,17 + mov DWORD [96+edi],edx + shr esi,15 + or eax,esi + shr ebp,15 + mov esi,ecx + shr esi,15 + mov DWORD [100+edi],eax + shl ecx,17 + or ebx,esi + or ecx,ebp + mov DWORD [104+edi],ebx + mov DWORD [108+edi],ecx + mov edx,DWORD [edi-128] + mov eax,DWORD [edi-124] + mov ebx,DWORD [edi-120] + mov ecx,DWORD [edi-116] + mov ebp,eax + shl eax,13 + mov esi,ebx + shr esi,19 + shl ebx,13 + or eax,esi + mov esi,ecx + shl ecx,13 + mov DWORD [edi-32],eax + shr esi,19 + or ebx,esi + shr ebp,19 + mov esi,edx + shr esi,19 + mov DWORD [edi-28],ebx + shl edx,13 + or ecx,esi + or edx,ebp + mov DWORD [edi-24],ecx + mov DWORD [edi-20],edx + mov ebp,eax + shl eax,15 + mov esi,ebx + shr esi,17 + shl ebx,15 + or eax,esi + mov esi,ecx + shl ecx,15 + mov DWORD [edi],eax + shr esi,17 + or ebx,esi + shr ebp,17 + mov esi,edx + shr esi,17 + mov DWORD [4+edi],ebx + shl edx,15 + or ecx,esi + or edx,ebp + mov DWORD [8+edi],ecx + mov DWORD [12+edi],edx + mov ebp,eax + shl eax,17 + mov esi,ebx + shr esi,15 + shl ebx,17 + or eax,esi + mov esi,ecx + shl ecx,17 + mov DWORD [48+edi],eax + shr esi,15 + or ebx,esi + shr ebp,15 + mov esi,edx + shr esi,15 + mov DWORD [52+edi],ebx + shl edx,17 + or ecx,esi + or edx,ebp + mov DWORD [56+edi],ecx + mov DWORD [60+edi],edx + mov ebp,ebx + shl ebx,2 + mov esi,ecx + shr esi,30 + shl ecx,2 + or ebx,esi + mov esi,edx + shl edx,2 + mov DWORD [112+edi],ebx + shr esi,30 + or ecx,esi + shr ebp,30 + mov esi,eax + shr esi,30 + mov DWORD [116+edi],ecx + shl eax,2 + or edx,esi + or eax,ebp + mov DWORD [120+edi],edx + mov DWORD [124+edi],eax + mov eax,4 +L$013done: + lea edx,[144+edi] + add esp,16 + pop edi + pop esi + pop ebx + pop ebp + ret +global _Camellia_set_key +align 16 +_Camellia_set_key: +L$_Camellia_set_key_begin: + push ebx + mov ecx,DWORD [8+esp] + mov ebx,DWORD [12+esp] + mov edx,DWORD [16+esp] + mov eax,-1 + test ecx,ecx + jz NEAR L$014done + test edx,edx + jz NEAR L$014done + mov eax,-2 + cmp ebx,256 + je NEAR L$015arg_ok + cmp ebx,192 + je NEAR L$015arg_ok + cmp ebx,128 + jne NEAR L$014done +align 4 +L$015arg_ok: + push edx + push ecx + push ebx + call L$_Camellia_Ekeygen_begin + add esp,12 + mov DWORD [edx],eax + xor eax,eax +align 4 +L$014done: + pop ebx + ret +align 64 +L$Camellia_SIGMA: +dd 2694735487,1003262091,3061508184,1286239154,3337565999,3914302142,1426019237,4057165596,283453434,3731369245,2958461122,3018244605,0,0,0,0 +align 64 +L$Camellia_SBOX: +dd 1886416896,1886388336 +dd 2189591040,741081132 +dd 741092352,3014852787 +dd 3974949888,3233808576 +dd 3014898432,3840147684 +dd 656877312,1465319511 +dd 3233857536,3941204202 +dd 3857048832,2930639022 +dd 3840205824,589496355 +dd 2240120064,1802174571 +dd 1465341696,1162149957 +dd 892679424,2779054245 +dd 3941263872,3991732461 +dd 202116096,1330577487 +dd 2930683392,488439837 +dd 1094795520,2459041938 +dd 589505280,2256928902 +dd 4025478912,2947481775 +dd 1802201856,2088501372 +dd 2475922176,522125343 +dd 1162167552,1044250686 +dd 421075200,3705405660 +dd 2779096320,1583218782 +dd 555819264,185270283 +dd 3991792896,2795896998 +dd 235802112,960036921 +dd 1330597632,3587506389 +dd 1313754624,1566376029 +dd 488447232,3654877401 +dd 1701143808,1515847770 +dd 2459079168,1364262993 +dd 3183328512,1819017324 +dd 2256963072,2341142667 +dd 3099113472,2593783962 +dd 2947526400,4227531003 +dd 2408550144,2964324528 +dd 2088532992,1953759348 +dd 3958106880,724238379 +dd 522133248,4042260720 +dd 3469659648,2223243396 +dd 1044266496,3755933919 +dd 808464384,3419078859 +dd 3705461760,875823156 +dd 1600085760,1987444854 +dd 1583242752,1835860077 +dd 3318072576,2846425257 +dd 185273088,3520135377 +dd 437918208,67371012 +dd 2795939328,336855060 +dd 3789676800,976879674 +dd 960051456,3739091166 +dd 3402287616,286326801 +dd 3587560704,842137650 +dd 1195853568,2627469468 +dd 1566399744,1397948499 +dd 1027423488,4075946226 +dd 3654932736,4278059262 +dd 16843008,3486449871 +dd 1515870720,3284336835 +dd 3604403712,2054815866 +dd 1364283648,606339108 +dd 1448498688,3907518696 +dd 1819044864,1616904288 +dd 1296911616,1768489065 +dd 2341178112,2863268010 +dd 218959104,2694840480 +dd 2593823232,2711683233 +dd 1717986816,1650589794 +dd 4227595008,1414791252 +dd 3435973632,505282590 +dd 2964369408,3772776672 +dd 757935360,1684275300 +dd 1953788928,269484048 +dd 303174144,0 +dd 724249344,2745368739 +dd 538976256,1970602101 +dd 4042321920,2324299914 +dd 2981212416,3873833190 +dd 2223277056,151584777 +dd 2576980224,3722248413 +dd 3755990784,2273771655 +dd 1280068608,2206400643 +dd 3419130624,3452764365 +dd 3267543552,2425356432 +dd 875836416,1936916595 +dd 2122219008,4143317238 +dd 1987474944,2644312221 +dd 84215040,3216965823 +dd 1835887872,1381105746 +dd 3082270464,3638034648 +dd 2846468352,3368550600 +dd 825307392,3334865094 +dd 3520188672,2172715137 +dd 387389184,1869545583 +dd 67372032,320012307 +dd 3621246720,1667432547 +dd 336860160,3924361449 +dd 1482184704,2812739751 +dd 976894464,2677997727 +dd 1633771776,3166437564 +dd 3739147776,690552873 +dd 454761216,4193845497 +dd 286331136,791609391 +dd 471604224,3031695540 +dd 842150400,2021130360 +dd 252645120,101056518 +dd 2627509248,3890675943 +dd 370546176,1903231089 +dd 1397969664,3570663636 +dd 404232192,2880110763 +dd 4076007936,2290614408 +dd 572662272,2374828173 +dd 4278124032,1920073842 +dd 1145324544,3115909305 +dd 3486502656,4177002744 +dd 2998055424,2896953516 +dd 3284386560,909508662 +dd 3048584448,707395626 +dd 2054846976,1010565180 +dd 2442236160,4059103473 +dd 606348288,1077936192 +dd 134744064,3553820883 +dd 3907577856,3149594811 +dd 2829625344,1128464451 +dd 1616928768,353697813 +dd 4244438016,2913796269 +dd 1768515840,2004287607 +dd 1347440640,2155872384 +dd 2863311360,2189557890 +dd 3503345664,3974889708 +dd 2694881280,656867367 +dd 2105376000,3856990437 +dd 2711724288,2240086149 +dd 2307492096,892665909 +dd 1650614784,202113036 +dd 2543294208,1094778945 +dd 1414812672,4025417967 +dd 1532713728,2475884691 +dd 505290240,421068825 +dd 2509608192,555810849 +dd 3772833792,235798542 +dd 4294967040,1313734734 +dd 1684300800,1701118053 +dd 3537031680,3183280317 +dd 269488128,3099066552 +dd 3301229568,2408513679 +dd 0,3958046955 +dd 1212696576,3469607118 +dd 2745410304,808452144 +dd 4160222976,1600061535 +dd 1970631936,3318022341 +dd 3688618752,437911578 +dd 2324335104,3789619425 +dd 50529024,3402236106 +dd 3873891840,1195835463 +dd 3671775744,1027407933 +dd 151587072,16842753 +dd 1061109504,3604349142 +dd 3722304768,1448476758 +dd 2492765184,1296891981 +dd 2273806080,218955789 +dd 1549556736,1717960806 +dd 2206434048,3435921612 +dd 33686016,757923885 +dd 3452816640,303169554 +dd 1246382592,538968096 +dd 2425393152,2981167281 +dd 858993408,2576941209 +dd 1936945920,1280049228 +dd 1734829824,3267494082 +dd 4143379968,2122186878 +dd 4092850944,84213765 +dd 2644352256,3082223799 +dd 2139062016,825294897 +dd 3217014528,387383319 +dd 3806519808,3621191895 +dd 1381126656,1482162264 +dd 2610666240,1633747041 +dd 3638089728,454754331 +dd 640034304,471597084 +dd 3368601600,252641295 +dd 926365440,370540566 +dd 3334915584,404226072 +dd 993737472,572653602 +dd 2172748032,1145307204 +dd 2526451200,2998010034 +dd 1869573888,3048538293 +dd 1263225600,2442199185 +dd 320017152,134742024 +dd 3200171520,2829582504 +dd 1667457792,4244373756 +dd 774778368,1347420240 +dd 3924420864,3503292624 +dd 2038003968,2105344125 +dd 2812782336,2307457161 +dd 2358021120,2543255703 +dd 2678038272,1532690523 +dd 1852730880,2509570197 +dd 3166485504,4294902015 +dd 2391707136,3536978130 +dd 690563328,3301179588 +dd 4126536960,1212678216 +dd 4193908992,4160159991 +dd 3065427456,3688562907 +dd 791621376,50528259 +dd 4261281024,3671720154 +dd 3031741440,1061093439 +dd 1499027712,2492727444 +dd 2021160960,1549533276 +dd 2560137216,33685506 +dd 101058048,1246363722 +dd 1785358848,858980403 +dd 3890734848,1734803559 +dd 1179010560,4092788979 +dd 1903259904,2139029631 +dd 3132799488,3806462178 +dd 3570717696,2610626715 +dd 623191296,640024614 +dd 2880154368,926351415 +dd 1111638528,993722427 +dd 2290649088,2526412950 +dd 2728567296,1263206475 +dd 2374864128,3200123070 +dd 4210752000,774766638 +dd 1920102912,2037973113 +dd 117901056,2357985420 +dd 3115956480,1852702830 +dd 1431655680,2391670926 +dd 4177065984,4126474485 +dd 4008635904,3065381046 +dd 2896997376,4261216509 +dd 168430080,1499005017 +dd 909522432,2560098456 +dd 1229539584,1785331818 +dd 707406336,1178992710 +dd 1751672832,3132752058 +dd 1010580480,623181861 +dd 943208448,1111621698 +dd 4059164928,2728525986 +dd 2762253312,4210688250 +dd 1077952512,117899271 +dd 673720320,1431634005 +dd 3553874688,4008575214 +dd 2071689984,168427530 +dd 3149642496,1229520969 +dd 3385444608,1751646312 +dd 1128481536,943194168 +dd 3250700544,2762211492 +dd 353703168,673710120 +dd 3823362816,2071658619 +dd 2913840384,3385393353 +dd 4109693952,3250651329 +dd 2004317952,3823304931 +dd 3351758592,4109631732 +dd 2155905024,3351707847 +dd 2661195264,2661154974 +dd 14737632,939538488 +dd 328965,1090535745 +dd 5789784,369104406 +dd 14277081,1979741814 +dd 6776679,3640711641 +dd 5131854,2466288531 +dd 8487297,1610637408 +dd 13355979,4060148466 +dd 13224393,1912631922 +dd 723723,3254829762 +dd 11447982,2868947883 +dd 6974058,2583730842 +dd 14013909,1962964341 +dd 1579032,100664838 +dd 6118749,1459640151 +dd 8553090,2684395680 +dd 4605510,2432733585 +dd 14671839,4144035831 +dd 14079702,3036722613 +dd 2565927,3372272073 +dd 9079434,2717950626 +dd 3289650,2348846220 +dd 4934475,3523269330 +dd 4342338,2415956112 +dd 14408667,4127258358 +dd 1842204,117442311 +dd 10395294,2801837991 +dd 10263708,654321447 +dd 3815994,2382401166 +dd 13290186,2986390194 +dd 2434341,1224755529 +dd 8092539,3724599006 +dd 855309,1124090691 +dd 7434609,1543527516 +dd 6250335,3607156695 +dd 2039583,3338717127 +dd 16316664,1040203326 +dd 14145495,4110480885 +dd 4079166,2399178639 +dd 10329501,1728079719 +dd 8158332,520101663 +dd 6316128,402659352 +dd 12171705,1845522030 +dd 12500670,2936057775 +dd 12369084,788541231 +dd 9145227,3791708898 +dd 1447446,2231403909 +dd 3421236,218107149 +dd 5066061,1392530259 +dd 12829635,4026593520 +dd 7500402,2617285788 +dd 9803157,1694524773 +dd 11250603,3925928682 +dd 9342606,2734728099 +dd 12237498,2919280302 +dd 8026746,2650840734 +dd 11776947,3959483628 +dd 131586,2147516544 +dd 11842740,754986285 +dd 11382189,1795189611 +dd 10658466,2818615464 +dd 11316396,721431339 +dd 14211288,905983542 +dd 10132122,2785060518 +dd 1513239,3305162181 +dd 1710618,2248181382 +dd 3487029,1291865421 +dd 13421772,855651123 +dd 16250871,4244700669 +dd 10066329,1711302246 +dd 6381921,1476417624 +dd 5921370,2516620950 +dd 15263976,973093434 +dd 2368548,150997257 +dd 5658198,2499843477 +dd 4210752,268439568 +dd 14803425,2013296760 +dd 6513507,3623934168 +dd 592137,1107313218 +dd 3355443,3422604492 +dd 12566463,4009816047 +dd 10000536,637543974 +dd 9934743,3842041317 +dd 8750469,1627414881 +dd 6842472,436214298 +dd 16579836,1056980799 +dd 15527148,989870907 +dd 657930,2181071490 +dd 14342874,3053500086 +dd 7303023,3674266587 +dd 5460819,3556824276 +dd 6447714,2550175896 +dd 10724259,3892373736 +dd 3026478,2332068747 +dd 526344,33554946 +dd 11513775,3942706155 +dd 2631720,167774730 +dd 11579568,738208812 +dd 7631988,486546717 +dd 12763842,2952835248 +dd 12434877,1862299503 +dd 3552822,2365623693 +dd 2236962,2281736328 +dd 3684408,234884622 +dd 6579300,419436825 +dd 1973790,2264958855 +dd 3750201,1308642894 +dd 2894892,184552203 +dd 10921638,2835392937 +dd 3158064,201329676 +dd 15066597,2030074233 +dd 4473924,285217041 +dd 16645629,2130739071 +dd 8947848,570434082 +dd 10461087,3875596263 +dd 6645093,1493195097 +dd 8882055,3774931425 +dd 7039851,3657489114 +dd 16053492,1023425853 +dd 2302755,3355494600 +dd 4737096,301994514 +dd 1052688,67109892 +dd 13750737,1946186868 +dd 5329233,1409307732 +dd 12632256,805318704 +dd 16382457,2113961598 +dd 13816530,3019945140 +dd 10526880,671098920 +dd 5592405,1426085205 +dd 10592673,1744857192 +dd 4276545,1342197840 +dd 16448250,3187719870 +dd 4408131,3489714384 +dd 1250067,3288384708 +dd 12895428,822096177 +dd 3092271,3405827019 +dd 11053224,704653866 +dd 11974326,2902502829 +dd 3947580,251662095 +dd 2829099,3389049546 +dd 12698049,1879076976 +dd 16777215,4278255615 +dd 13158600,838873650 +dd 10855845,1761634665 +dd 2105376,134219784 +dd 9013641,1644192354 +dd 0,0 +dd 9474192,603989028 +dd 4671303,3506491857 +dd 15724527,4211145723 +dd 15395562,3120609978 +dd 12040119,3976261101 +dd 1381653,1157645637 +dd 394758,2164294017 +dd 13487565,1929409395 +dd 11908533,1828744557 +dd 1184274,2214626436 +dd 8289918,2667618207 +dd 12303291,3993038574 +dd 2697513,1241533002 +dd 986895,3271607235 +dd 12105912,771763758 +dd 460551,3238052289 +dd 263172,16777473 +dd 10197915,3858818790 +dd 9737364,620766501 +dd 2171169,1207978056 +dd 6710886,2566953369 +dd 15132390,3103832505 +dd 13553358,3003167667 +dd 15592941,2063629179 +dd 15198183,4177590777 +dd 3881787,3456159438 +dd 16711422,3204497343 +dd 8355711,3741376479 +dd 12961221,1895854449 +dd 10790052,687876393 +dd 3618615,3439381965 +dd 11645361,1811967084 +dd 5000268,318771987 +dd 9539985,1677747300 +dd 7237230,2600508315 +dd 9276813,1660969827 +dd 7763574,2634063261 +dd 197379,3221274816 +dd 2960685,1258310475 +dd 14606046,3070277559 +dd 9868950,2768283045 +dd 2500134,2298513801 +dd 8224125,1593859935 +dd 13027014,2969612721 +dd 6052956,385881879 +dd 13882323,4093703412 +dd 15921906,3154164924 +dd 5197647,3540046803 +dd 1644825,1174423110 +dd 4144959,3472936911 +dd 14474460,922761015 +dd 7960953,1577082462 +dd 1907997,1191200583 +dd 5395026,2483066004 +dd 15461355,4194368250 +dd 15987699,4227923196 +dd 7171437,1526750043 +dd 6184542,2533398423 +dd 16514043,4261478142 +dd 6908265,1509972570 +dd 11711154,2885725356 +dd 15790320,1006648380 +dd 3223857,1275087948 +dd 789516,50332419 +dd 13948116,889206069 +dd 13619151,4076925939 +dd 9211020,587211555 +dd 14869218,3087055032 +dd 7697781,1560304989 +dd 11119017,1778412138 +dd 4868682,2449511058 +dd 5723991,3573601749 +dd 8684676,553656609 +dd 1118481,1140868164 +dd 4539717,1358975313 +dd 1776411,3321939654 +dd 16119285,2097184125 +dd 15000804,956315961 +dd 921102,2197848963 +dd 7566195,3691044060 +dd 11184810,2852170410 +dd 15856113,2080406652 +dd 14540253,1996519287 +dd 5855577,1442862678 +dd 1315860,83887365 +dd 7105644,452991771 +dd 9605778,2751505572 +dd 5526612,352326933 +dd 13684944,872428596 +dd 7895160,503324190 +dd 7368816,469769244 +dd 14935011,4160813304 +dd 4802889,1375752786 +dd 8421504,536879136 +dd 5263440,335549460 +dd 10987431,3909151209 +dd 16185078,3170942397 +dd 7829367,3707821533 +dd 9671571,3825263844 +dd 8816262,2701173153 +dd 8618883,3758153952 +dd 2763306,2315291274 +dd 13092807,4043370993 +dd 5987163,3590379222 +dd 15329769,2046851706 +dd 15658734,3137387451 +dd 9408399,3808486371 +dd 65793,1073758272 +dd 4013373,1325420367 +global _Camellia_cbc_encrypt +align 16 +_Camellia_cbc_encrypt: +L$_Camellia_cbc_encrypt_begin: + push ebp + push ebx + push esi + push edi + mov ecx,DWORD [28+esp] + cmp ecx,0 + je NEAR L$016enc_out + pushfd + cld + mov eax,DWORD [24+esp] + mov ebx,DWORD [28+esp] + mov edx,DWORD [36+esp] + mov ebp,DWORD [40+esp] + lea esi,[esp-64] + and esi,-64 + lea edi,[edx-127] + sub edi,esi + neg edi + and edi,960 + sub esi,edi + mov edi,DWORD [44+esp] + xchg esp,esi + add esp,4 + mov DWORD [20+esp],esi + mov DWORD [24+esp],eax + mov DWORD [28+esp],ebx + mov DWORD [32+esp],ecx + mov DWORD [36+esp],edx + mov DWORD [40+esp],ebp + call L$017pic_point +L$017pic_point: + pop ebp + lea ebp,[(L$Camellia_SBOX-L$017pic_point)+ebp] + mov esi,32 +align 4 +L$018prefetch_sbox: + mov eax,DWORD [ebp] + mov ebx,DWORD [32+ebp] + mov ecx,DWORD [64+ebp] + mov edx,DWORD [96+ebp] + lea ebp,[128+ebp] + dec esi + jnz NEAR L$018prefetch_sbox + mov eax,DWORD [36+esp] + sub ebp,4096 + mov esi,DWORD [24+esp] + mov edx,DWORD [272+eax] + cmp edi,0 + je NEAR L$019DECRYPT + mov ecx,DWORD [32+esp] + mov edi,DWORD [40+esp] + shl edx,6 + lea edx,[edx*1+eax] + mov DWORD [16+esp],edx + test ecx,4294967280 + jz NEAR L$020enc_tail + mov eax,DWORD [edi] + mov ebx,DWORD [4+edi] +align 4 +L$021enc_loop: + mov ecx,DWORD [8+edi] + mov edx,DWORD [12+edi] + xor eax,DWORD [esi] + xor ebx,DWORD [4+esi] + xor ecx,DWORD [8+esi] + bswap eax + xor edx,DWORD [12+esi] + bswap ebx + mov edi,DWORD [36+esp] + bswap ecx + bswap edx + call __x86_Camellia_encrypt + mov esi,DWORD [24+esp] + mov edi,DWORD [28+esp] + bswap eax + bswap ebx + bswap ecx + mov DWORD [edi],eax + bswap edx + mov DWORD [4+edi],ebx + mov DWORD [8+edi],ecx + mov DWORD [12+edi],edx + mov ecx,DWORD [32+esp] + lea esi,[16+esi] + mov DWORD [24+esp],esi + lea edx,[16+edi] + mov DWORD [28+esp],edx + sub ecx,16 + test ecx,4294967280 + mov DWORD [32+esp],ecx + jnz NEAR L$021enc_loop + test ecx,15 + jnz NEAR L$020enc_tail + mov esi,DWORD [40+esp] + mov ecx,DWORD [8+edi] + mov edx,DWORD [12+edi] + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + mov esp,DWORD [20+esp] + popfd +L$016enc_out: + pop edi + pop esi + pop ebx + pop ebp + ret + pushfd +align 4 +L$020enc_tail: + mov eax,edi + mov edi,DWORD [28+esp] + push eax + mov ebx,16 + sub ebx,ecx + cmp edi,esi + je NEAR L$022enc_in_place +align 4 +dd 2767451785 + jmp NEAR L$023enc_skip_in_place +L$022enc_in_place: + lea edi,[ecx*1+edi] +L$023enc_skip_in_place: + mov ecx,ebx + xor eax,eax +align 4 +dd 2868115081 + pop edi + mov esi,DWORD [28+esp] + mov eax,DWORD [edi] + mov ebx,DWORD [4+edi] + mov DWORD [32+esp],16 + jmp NEAR L$021enc_loop +align 16 +L$019DECRYPT: + shl edx,6 + lea edx,[edx*1+eax] + mov DWORD [16+esp],eax + mov DWORD [36+esp],edx + cmp esi,DWORD [28+esp] + je NEAR L$024dec_in_place + mov edi,DWORD [40+esp] + mov DWORD [44+esp],edi +align 4 +L$025dec_loop: + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + bswap eax + mov edx,DWORD [12+esi] + bswap ebx + mov edi,DWORD [36+esp] + bswap ecx + bswap edx + call __x86_Camellia_decrypt + mov edi,DWORD [44+esp] + mov esi,DWORD [32+esp] + bswap eax + bswap ebx + bswap ecx + xor eax,DWORD [edi] + bswap edx + xor ebx,DWORD [4+edi] + xor ecx,DWORD [8+edi] + xor edx,DWORD [12+edi] + sub esi,16 + jc NEAR L$026dec_partial + mov DWORD [32+esp],esi + mov esi,DWORD [24+esp] + mov edi,DWORD [28+esp] + mov DWORD [edi],eax + mov DWORD [4+edi],ebx + mov DWORD [8+edi],ecx + mov DWORD [12+edi],edx + mov DWORD [44+esp],esi + lea esi,[16+esi] + mov DWORD [24+esp],esi + lea edi,[16+edi] + mov DWORD [28+esp],edi + jnz NEAR L$025dec_loop + mov edi,DWORD [44+esp] +L$027dec_end: + mov esi,DWORD [40+esp] + mov eax,DWORD [edi] + mov ebx,DWORD [4+edi] + mov ecx,DWORD [8+edi] + mov edx,DWORD [12+edi] + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + jmp NEAR L$028dec_out +align 4 +L$026dec_partial: + lea edi,[44+esp] + mov DWORD [edi],eax + mov DWORD [4+edi],ebx + mov DWORD [8+edi],ecx + mov DWORD [12+edi],edx + lea ecx,[16+esi] + mov esi,edi + mov edi,DWORD [28+esp] +dd 2767451785 + mov edi,DWORD [24+esp] + jmp NEAR L$027dec_end +align 4 +L$024dec_in_place: +L$029dec_in_place_loop: + lea edi,[44+esp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + mov edx,DWORD [12+esi] + mov DWORD [edi],eax + mov DWORD [4+edi],ebx + mov DWORD [8+edi],ecx + bswap eax + mov DWORD [12+edi],edx + bswap ebx + mov edi,DWORD [36+esp] + bswap ecx + bswap edx + call __x86_Camellia_decrypt + mov edi,DWORD [40+esp] + mov esi,DWORD [28+esp] + bswap eax + bswap ebx + bswap ecx + xor eax,DWORD [edi] + bswap edx + xor ebx,DWORD [4+edi] + xor ecx,DWORD [8+edi] + xor edx,DWORD [12+edi] + mov DWORD [esi],eax + mov DWORD [4+esi],ebx + mov DWORD [8+esi],ecx + mov DWORD [12+esi],edx + lea esi,[16+esi] + mov DWORD [28+esp],esi + lea esi,[44+esp] + mov eax,DWORD [esi] + mov ebx,DWORD [4+esi] + mov ecx,DWORD [8+esi] + mov edx,DWORD [12+esi] + mov DWORD [edi],eax + mov DWORD [4+edi],ebx + mov DWORD [8+edi],ecx + mov DWORD [12+edi],edx + mov esi,DWORD [24+esp] + lea esi,[16+esi] + mov DWORD [24+esp],esi + mov ecx,DWORD [32+esp] + sub ecx,16 + jc NEAR L$030dec_in_place_partial + mov DWORD [32+esp],ecx + jnz NEAR L$029dec_in_place_loop + jmp NEAR L$028dec_out +align 4 +L$030dec_in_place_partial: + mov edi,DWORD [28+esp] + lea esi,[44+esp] + lea edi,[ecx*1+edi] + lea esi,[16+ecx*1+esi] + neg ecx +dd 2767451785 +align 4 +L$028dec_out: + mov esp,DWORD [20+esp] + popfd + pop edi + pop esi + pop ebx + pop ebp + ret +db 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54 +db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 +db 115,108,46,111,114,103,62,0 diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s index 1a91fca684..6d4ec6f80e 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-2k-avxifma.s @@ -2,1148 +2,21 @@ .globl ossl_rsaz_avxifma_eligible .type ossl_rsaz_avxifma_eligible,@function -.align 32 ossl_rsaz_avxifma_eligible: - movl OPENSSL_ia32cap_P+20(%rip),%ecx xorl %eax,%eax - andl $8388608,%ecx - cmpl $8388608,%ecx - cmovel %ecx,%eax .byte 0xf3,0xc3 .size ossl_rsaz_avxifma_eligible, .-ossl_rsaz_avxifma_eligible -.text .globl ossl_rsaz_amm52x20_x1_avxifma256 -.type ossl_rsaz_amm52x20_x1_avxifma256,@function -.align 32 -ossl_rsaz_amm52x20_x1_avxifma256: -.cfi_startproc -.byte 243,15,30,250 - pushq %rbx -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbx,-16 - pushq %rbp -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbp,-24 - pushq %r12 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r12,-32 - pushq %r13 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r13,-40 - pushq %r14 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r14,-48 - pushq %r15 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r15,-56 -.Lossl_rsaz_amm52x20_x1_avxifma256_body: - - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - - xorl %r9d,%r9d - - movq %rdx,%r11 - movq $0xfffffffffffff,%rax - - - movl $5,%ebx - -.align 32 -.Lloop5: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -168(%rsp),%rsp -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm8 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm5,32(%rsp) - vmovdqu %ymm6,64(%rsp) - vmovdqu %ymm7,96(%rsp) - vmovdqu %ymm8,128(%rsp) - movq $0,160(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm5 - vmovdqu 72(%rsp),%ymm6 - vmovdqu 104(%rsp),%ymm7 - vmovdqu 136(%rsp),%ymm8 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm8 - leaq 168(%rsp),%rsp - movq 8(%r11),%r13 - - vpbroadcastq 8(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -168(%rsp),%rsp -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm8 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm5,32(%rsp) - vmovdqu %ymm6,64(%rsp) - vmovdqu %ymm7,96(%rsp) - vmovdqu %ymm8,128(%rsp) - movq $0,160(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm5 - vmovdqu 72(%rsp),%ymm6 - vmovdqu 104(%rsp),%ymm7 - vmovdqu 136(%rsp),%ymm8 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm8 - leaq 168(%rsp),%rsp - movq 16(%r11),%r13 - - vpbroadcastq 16(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -168(%rsp),%rsp -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm8 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm5,32(%rsp) - vmovdqu %ymm6,64(%rsp) - vmovdqu %ymm7,96(%rsp) - vmovdqu %ymm8,128(%rsp) - movq $0,160(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm5 - vmovdqu 72(%rsp),%ymm6 - vmovdqu 104(%rsp),%ymm7 - vmovdqu 136(%rsp),%ymm8 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm8 - leaq 168(%rsp),%rsp - movq 24(%r11),%r13 - - vpbroadcastq 24(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -168(%rsp),%rsp -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm8 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm5,32(%rsp) - vmovdqu %ymm6,64(%rsp) - vmovdqu %ymm7,96(%rsp) - vmovdqu %ymm8,128(%rsp) - movq $0,160(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm5 - vmovdqu 72(%rsp),%ymm6 - vmovdqu 104(%rsp),%ymm7 - vmovdqu 136(%rsp),%ymm8 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm8 - leaq 168(%rsp),%rsp - leaq 32(%r11),%r11 - decl %ebx - jne .Lloop5 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - - - vpsrlq $52,%ymm3,%ymm0 - vpsrlq $52,%ymm5,%ymm1 - vpsrlq $52,%ymm6,%ymm2 - vpsrlq $52,%ymm7,%ymm13 - vpsrlq $52,%ymm8,%ymm14 - - - vpermq $144,%ymm14,%ymm14 - vpermq $3,%ymm13,%ymm15 - vblendpd $1,%ymm15,%ymm14,%ymm14 - - vpermq $144,%ymm13,%ymm13 - vpermq $3,%ymm2,%ymm15 - vblendpd $1,%ymm15,%ymm13,%ymm13 - - vpermq $144,%ymm2,%ymm2 - vpermq $3,%ymm1,%ymm15 - vblendpd $1,%ymm15,%ymm2,%ymm2 - - vpermq $144,%ymm1,%ymm1 - vpermq $3,%ymm0,%ymm15 - vblendpd $1,%ymm15,%ymm1,%ymm1 - - vpermq $144,%ymm0,%ymm0 - vpand .Lhigh64x3(%rip),%ymm0,%ymm0 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - - - vpaddq %ymm0,%ymm3,%ymm3 - vpaddq %ymm1,%ymm5,%ymm5 - vpaddq %ymm2,%ymm6,%ymm6 - vpaddq %ymm13,%ymm7,%ymm7 - vpaddq %ymm14,%ymm8,%ymm8 - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm1 - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm2 - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm13 - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm14 - vmovmskpd %ymm0,%r14d - vmovmskpd %ymm1,%r13d - vmovmskpd %ymm2,%r12d - vmovmskpd %ymm13,%r11d - vmovmskpd %ymm14,%r10d - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm1 - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm2 - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm13 - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm14 - vmovmskpd %ymm0,%r9d - vmovmskpd %ymm1,%r8d - vmovmskpd %ymm2,%ebx - vmovmskpd %ymm13,%ecx - vmovmskpd %ymm14,%edx - - - - shlb $4,%r13b - orb %r13b,%r14b - shlb $4,%r11b - orb %r11b,%r12b - - addb %r14b,%r14b - adcb %r12b,%r12b - adcb %r10b,%r10b - - shlb $4,%r8b - orb %r8b,%r9b - shlb $4,%cl - orb %cl,%bl - - addb %r9b,%r14b - adcb %bl,%r12b - adcb %dl,%r10b - - xorb %r9b,%r14b - xorb %bl,%r12b - xorb %dl,%r10b - - leaq .Lkmasklut(%rip),%rdx - - movb %r14b,%r13b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm0 - shlq $5,%r14 - vmovapd (%rdx,%r14,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm3,%ymm3 - - shrb $4,%r13b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm0 - shlq $5,%r13 - vmovapd (%rdx,%r13,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm5,%ymm5 - - movb %r12b,%r11b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm0 - shlq $5,%r12 - vmovapd (%rdx,%r12,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm6,%ymm6 - - shrb $4,%r11b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm0 - shlq $5,%r11 - vmovapd (%rdx,%r11,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm7,%ymm7 - - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm8,%ymm8 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - - vmovdqu %ymm3,0(%rdi) - vmovdqu %ymm5,32(%rdi) - vmovdqu %ymm6,64(%rdi) - vmovdqu %ymm7,96(%rdi) - vmovdqu %ymm8,128(%rdi) - - vzeroupper - movq 0(%rsp),%r15 -.cfi_restore %r15 - movq 8(%rsp),%r14 -.cfi_restore %r14 - movq 16(%rsp),%r13 -.cfi_restore %r13 - movq 24(%rsp),%r12 -.cfi_restore %r12 - movq 32(%rsp),%rbp -.cfi_restore %rbp - movq 40(%rsp),%rbx -.cfi_restore %rbx - leaq 48(%rsp),%rsp -.cfi_adjust_cfa_offset -48 -.Lossl_rsaz_amm52x20_x1_avxifma256_epilogue: - .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_rsaz_amm52x20_x1_avxifma256, .-ossl_rsaz_amm52x20_x1_avxifma256 -.section .rodata -.align 32 -.Lmask52x4: -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.Lhigh64x3: -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.Lkmasklut: - -.quad 0x0 -.quad 0x0 -.quad 0x0 -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 -.quad 0x0 - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 - -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0x0 -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.text - .globl ossl_rsaz_amm52x20_x2_avxifma256 -.type ossl_rsaz_amm52x20_x2_avxifma256,@function -.align 32 -ossl_rsaz_amm52x20_x2_avxifma256: -.cfi_startproc -.byte 243,15,30,250 - pushq %rbx -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbx,-16 - pushq %rbp -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbp,-24 - pushq %r12 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r12,-32 - pushq %r13 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r13,-40 - pushq %r14 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r14,-48 - pushq %r15 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r15,-56 -.Lossl_rsaz_amm52x20_x2_avxifma256_body: - - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 - vmovapd %ymm0,%ymm11 - vmovapd %ymm0,%ymm12 - - xorl %r9d,%r9d - xorl %r15d,%r15d - - movq %rdx,%r11 - movq $0xfffffffffffff,%rax - - movl $20,%ebx - -.align 32 -.Lloop20: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq (%r8),%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -168(%rsp),%rsp -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm8 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm5,32(%rsp) - vmovdqu %ymm6,64(%rsp) - vmovdqu %ymm7,96(%rsp) - vmovdqu %ymm8,128(%rsp) - movq $0,160(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm5 - vmovdqu 72(%rsp),%ymm6 - vmovdqu 104(%rsp),%ymm7 - vmovdqu 136(%rsp),%ymm8 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm8 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm8 - leaq 168(%rsp),%rsp - movq 160(%r11),%r13 - - vpbroadcastq 160(%r11),%ymm1 - movq 160(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r15 - movq %r12,%r10 - adcq $0,%r10 - - movq 8(%r8),%r13 - imulq %r15,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 160(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r15 - adcq %r12,%r10 - - shrq $52,%r15 - salq $12,%r10 - orq %r10,%r15 - - leaq -168(%rsp),%rsp -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm12 - - - vmovdqu %ymm4,0(%rsp) - vmovdqu %ymm9,32(%rsp) - vmovdqu %ymm10,64(%rsp) - vmovdqu %ymm11,96(%rsp) - vmovdqu %ymm12,128(%rsp) - movq $0,160(%rsp) - - vmovdqu 8(%rsp),%ymm4 - vmovdqu 40(%rsp),%ymm9 - vmovdqu 72(%rsp),%ymm10 - vmovdqu 104(%rsp),%ymm11 - vmovdqu 136(%rsp),%ymm12 - - addq 8(%rsp),%r15 - -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm12 - leaq 168(%rsp),%rsp - leaq 8(%r11),%r11 - decl %ebx - jne .Lloop20 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - - - vpsrlq $52,%ymm3,%ymm0 - vpsrlq $52,%ymm5,%ymm1 - vpsrlq $52,%ymm6,%ymm2 - vpsrlq $52,%ymm7,%ymm13 - vpsrlq $52,%ymm8,%ymm14 - - - vpermq $144,%ymm14,%ymm14 - vpermq $3,%ymm13,%ymm15 - vblendpd $1,%ymm15,%ymm14,%ymm14 - - vpermq $144,%ymm13,%ymm13 - vpermq $3,%ymm2,%ymm15 - vblendpd $1,%ymm15,%ymm13,%ymm13 - - vpermq $144,%ymm2,%ymm2 - vpermq $3,%ymm1,%ymm15 - vblendpd $1,%ymm15,%ymm2,%ymm2 - - vpermq $144,%ymm1,%ymm1 - vpermq $3,%ymm0,%ymm15 - vblendpd $1,%ymm15,%ymm1,%ymm1 - - vpermq $144,%ymm0,%ymm0 - vpand .Lhigh64x3(%rip),%ymm0,%ymm0 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - - - vpaddq %ymm0,%ymm3,%ymm3 - vpaddq %ymm1,%ymm5,%ymm5 - vpaddq %ymm2,%ymm6,%ymm6 - vpaddq %ymm13,%ymm7,%ymm7 - vpaddq %ymm14,%ymm8,%ymm8 - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm1 - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm2 - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm13 - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm14 - vmovmskpd %ymm0,%r14d - vmovmskpd %ymm1,%r13d - vmovmskpd %ymm2,%r12d - vmovmskpd %ymm13,%r11d - vmovmskpd %ymm14,%r10d - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm1 - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm2 - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm13 - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm14 - vmovmskpd %ymm0,%r9d - vmovmskpd %ymm1,%r8d - vmovmskpd %ymm2,%ebx - vmovmskpd %ymm13,%ecx - vmovmskpd %ymm14,%edx - - - - shlb $4,%r13b - orb %r13b,%r14b - shlb $4,%r11b - orb %r11b,%r12b - - addb %r14b,%r14b - adcb %r12b,%r12b - adcb %r10b,%r10b - - shlb $4,%r8b - orb %r8b,%r9b - shlb $4,%cl - orb %cl,%bl - - addb %r9b,%r14b - adcb %bl,%r12b - adcb %dl,%r10b - - xorb %r9b,%r14b - xorb %bl,%r12b - xorb %dl,%r10b - - leaq .Lkmasklut(%rip),%rdx - - movb %r14b,%r13b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm0 - shlq $5,%r14 - vmovapd (%rdx,%r14,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm3,%ymm3 - - shrb $4,%r13b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm0 - shlq $5,%r13 - vmovapd (%rdx,%r13,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm5,%ymm5 - - movb %r12b,%r11b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm0 - shlq $5,%r12 - vmovapd (%rdx,%r12,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm6,%ymm6 - - shrb $4,%r11b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm0 - shlq $5,%r11 - vmovapd (%rdx,%r11,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm7,%ymm7 - - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm8,%ymm8 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - - vmovq %r15,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm4,%ymm4 - - - - vpsrlq $52,%ymm4,%ymm0 - vpsrlq $52,%ymm9,%ymm1 - vpsrlq $52,%ymm10,%ymm2 - vpsrlq $52,%ymm11,%ymm13 - vpsrlq $52,%ymm12,%ymm14 - - - vpermq $144,%ymm14,%ymm14 - vpermq $3,%ymm13,%ymm15 - vblendpd $1,%ymm15,%ymm14,%ymm14 - - vpermq $144,%ymm13,%ymm13 - vpermq $3,%ymm2,%ymm15 - vblendpd $1,%ymm15,%ymm13,%ymm13 - - vpermq $144,%ymm2,%ymm2 - vpermq $3,%ymm1,%ymm15 - vblendpd $1,%ymm15,%ymm2,%ymm2 - - vpermq $144,%ymm1,%ymm1 - vpermq $3,%ymm0,%ymm15 - vblendpd $1,%ymm15,%ymm1,%ymm1 - - vpermq $144,%ymm0,%ymm0 - vpand .Lhigh64x3(%rip),%ymm0,%ymm0 - - - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - - vpaddq %ymm0,%ymm4,%ymm4 - vpaddq %ymm1,%ymm9,%ymm9 - vpaddq %ymm2,%ymm10,%ymm10 - vpaddq %ymm13,%ymm11,%ymm11 - vpaddq %ymm14,%ymm12,%ymm12 - - - - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm0 - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm1 - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm2 - vpcmpgtq .Lmask52x4(%rip),%ymm11,%ymm13 - vpcmpgtq .Lmask52x4(%rip),%ymm12,%ymm14 - vmovmskpd %ymm0,%r14d - vmovmskpd %ymm1,%r13d - vmovmskpd %ymm2,%r12d - vmovmskpd %ymm13,%r11d - vmovmskpd %ymm14,%r10d - - - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm0 - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm1 - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm2 - vpcmpeqq .Lmask52x4(%rip),%ymm11,%ymm13 - vpcmpeqq .Lmask52x4(%rip),%ymm12,%ymm14 - vmovmskpd %ymm0,%r9d - vmovmskpd %ymm1,%r8d - vmovmskpd %ymm2,%ebx - vmovmskpd %ymm13,%ecx - vmovmskpd %ymm14,%edx - - - - shlb $4,%r13b - orb %r13b,%r14b - shlb $4,%r11b - orb %r11b,%r12b - - addb %r14b,%r14b - adcb %r12b,%r12b - adcb %r10b,%r10b - - shlb $4,%r8b - orb %r8b,%r9b - shlb $4,%cl - orb %cl,%bl - - addb %r9b,%r14b - adcb %bl,%r12b - adcb %dl,%r10b - - xorb %r9b,%r14b - xorb %bl,%r12b - xorb %dl,%r10b - - leaq .Lkmasklut(%rip),%rdx - - movb %r14b,%r13b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm0 - shlq $5,%r14 - vmovapd (%rdx,%r14,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm4,%ymm4 - - shrb $4,%r13b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm0 - shlq $5,%r13 - vmovapd (%rdx,%r13,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm9,%ymm9 - - movb %r12b,%r11b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm0 - shlq $5,%r12 - vmovapd (%rdx,%r12,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm10,%ymm10 - - shrb $4,%r11b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm11,%ymm0 - shlq $5,%r11 - vmovapd (%rdx,%r11,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm11,%ymm11 - - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm12,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm12,%ymm12 - - - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - vmovdqu %ymm3,0(%rdi) - vmovdqu %ymm5,32(%rdi) - vmovdqu %ymm6,64(%rdi) - vmovdqu %ymm7,96(%rdi) - vmovdqu %ymm8,128(%rdi) - - vmovdqu %ymm4,160(%rdi) - vmovdqu %ymm9,192(%rdi) - vmovdqu %ymm10,224(%rdi) - vmovdqu %ymm11,256(%rdi) - vmovdqu %ymm12,288(%rdi) - - vzeroupper - movq 0(%rsp),%r15 -.cfi_restore %r15 - movq 8(%rsp),%r14 -.cfi_restore %r14 - movq 16(%rsp),%r13 -.cfi_restore %r13 - movq 24(%rsp),%r12 -.cfi_restore %r12 - movq 32(%rsp),%rbp -.cfi_restore %rbp - movq 40(%rsp),%rbx -.cfi_restore %rbx - leaq 48(%rsp),%rsp -.cfi_adjust_cfa_offset -48 -.Lossl_rsaz_amm52x20_x2_avxifma256_epilogue: - .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_rsaz_amm52x20_x2_avxifma256, .-ossl_rsaz_amm52x20_x2_avxifma256 -.text - -.align 32 .globl ossl_extract_multiplier_2x20_win5_avx -.type ossl_extract_multiplier_2x20_win5_avx,@function +.type ossl_rsaz_amm52x20_x1_avxifma256,@function +ossl_rsaz_amm52x20_x1_avxifma256: +ossl_rsaz_amm52x20_x2_avxifma256: ossl_extract_multiplier_2x20_win5_avx: -.cfi_startproc -.byte 243,15,30,250 - vmovapd .Lones(%rip),%ymm14 - vmovq %rdx,%xmm10 - vpbroadcastq %xmm10,%ymm12 - vmovq %rcx,%xmm10 - vpbroadcastq %xmm10,%ymm13 - leaq 10240(%rsi),%rax - - - vpxor %xmm0,%xmm0,%xmm0 - vmovapd %ymm0,%ymm11 - vmovapd %ymm0,%ymm1 - vmovapd %ymm0,%ymm2 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - -.align 32 -.Lloop: - vpcmpeqq %ymm11,%ymm12,%ymm15 - vmovdqu 0(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm0,%ymm0 - vmovdqu 32(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm1,%ymm1 - vmovdqu 64(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm2,%ymm2 - vmovdqu 96(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm3,%ymm3 - vmovdqu 128(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm4,%ymm4 - vpcmpeqq %ymm11,%ymm13,%ymm15 - vmovdqu 160(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm5,%ymm5 - vmovdqu 192(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm6,%ymm6 - vmovdqu 224(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm7,%ymm7 - vmovdqu 256(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm8,%ymm8 - vmovdqu 288(%rsi),%ymm10 - vblendvpd %ymm15,%ymm10,%ymm9,%ymm9 - vpaddq %ymm14,%ymm11,%ymm11 - addq $320,%rsi - cmpq %rsi,%rax - jne .Lloop - vmovdqu %ymm0,0(%rdi) - vmovdqu %ymm1,32(%rdi) - vmovdqu %ymm2,64(%rdi) - vmovdqu %ymm3,96(%rdi) - vmovdqu %ymm4,128(%rdi) - vmovdqu %ymm5,160(%rdi) - vmovdqu %ymm6,192(%rdi) - vmovdqu %ymm7,224(%rdi) - vmovdqu %ymm8,256(%rdi) - vmovdqu %ymm9,288(%rdi) +.byte 0x0f,0x0b .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_extract_multiplier_2x20_win5_avx, .-ossl_extract_multiplier_2x20_win5_avx -.section .rodata -.align 32 -.Lones: -.quad 1,1,1,1 -.Lzeros: -.quad 0,0,0,0 +.size ossl_rsaz_amm52x20_x1_avxifma256, .-ossl_rsaz_amm52x20_x1_avxifma256 .section ".note.gnu.property", "a" .p2align 3 .long 1f - 0f diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s index c40b209394..21efa262d1 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-3k-avxifma.s @@ -1,1750 +1,15 @@ .text .globl ossl_rsaz_amm52x30_x1_avxifma256 -.type ossl_rsaz_amm52x30_x1_avxifma256,@function -.align 32 -ossl_rsaz_amm52x30_x1_avxifma256: -.cfi_startproc -.byte 243,15,30,250 - pushq %rbx -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbx,-16 - pushq %rbp -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbp,-24 - pushq %r12 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r12,-32 - pushq %r13 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r13,-40 - pushq %r14 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r14,-48 - pushq %r15 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r15,-56 - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 - - xorl %r9d,%r9d - - movq %rdx,%r11 - movq $0xfffffffffffff,%rax - - - movl $7,%ebx - -.align 32 -.Lloop7: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - movq 8(%r11),%r13 - - vpbroadcastq 8(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - movq 16(%r11),%r13 - - vpbroadcastq 16(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - movq 24(%r11),%r13 - - vpbroadcastq 24(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - leaq 32(%r11),%r11 - decl %ebx - jne .Lloop7 - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - movq 8(%r11),%r13 - - vpbroadcastq 8(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - - - vpsrlq $52,%ymm3,%ymm0 - vpsrlq $52,%ymm4,%ymm1 - vpsrlq $52,%ymm5,%ymm2 - vpsrlq $52,%ymm6,%ymm11 - vpsrlq $52,%ymm7,%ymm12 - vpsrlq $52,%ymm8,%ymm13 - vpsrlq $52,%ymm9,%ymm14 - vpsrlq $52,%ymm10,%ymm15 - - leaq -32(%rsp),%rsp - vmovupd %ymm3,(%rsp) - - - vpermq $144,%ymm15,%ymm15 - vpermq $3,%ymm14,%ymm3 - vblendpd $1,%ymm3,%ymm15,%ymm15 - - vpermq $144,%ymm14,%ymm14 - vpermq $3,%ymm13,%ymm3 - vblendpd $1,%ymm3,%ymm14,%ymm14 - - vpermq $144,%ymm13,%ymm13 - vpermq $3,%ymm12,%ymm3 - vblendpd $1,%ymm3,%ymm13,%ymm13 - - vpermq $144,%ymm12,%ymm12 - vpermq $3,%ymm11,%ymm3 - vblendpd $1,%ymm3,%ymm12,%ymm12 - - vpermq $144,%ymm11,%ymm11 - vpermq $3,%ymm2,%ymm3 - vblendpd $1,%ymm3,%ymm11,%ymm11 - - vpermq $144,%ymm2,%ymm2 - vpermq $3,%ymm1,%ymm3 - vblendpd $1,%ymm3,%ymm2,%ymm2 - - vpermq $144,%ymm1,%ymm1 - vpermq $3,%ymm0,%ymm3 - vblendpd $1,%ymm3,%ymm1,%ymm1 - - vpermq $144,%ymm0,%ymm0 - vpand .Lhigh64x3(%rip),%ymm0,%ymm0 - - vmovupd (%rsp),%ymm3 - leaq 32(%rsp),%rsp - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - - - vpaddq %ymm0,%ymm3,%ymm3 - vpaddq %ymm1,%ymm4,%ymm4 - vpaddq %ymm2,%ymm5,%ymm5 - vpaddq %ymm11,%ymm6,%ymm6 - vpaddq %ymm12,%ymm7,%ymm7 - vpaddq %ymm13,%ymm8,%ymm8 - vpaddq %ymm14,%ymm9,%ymm9 - vpaddq %ymm15,%ymm10,%ymm10 - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm1 - vmovmskpd %ymm0,%r14d - vmovmskpd %ymm1,%r13d - shlb $4,%r13b - orb %r13b,%r14b - - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm2 - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm11 - vmovmskpd %ymm2,%r13d - vmovmskpd %ymm11,%r12d - shlb $4,%r12b - orb %r12b,%r13b - - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm12 - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm12,%r12d - vmovmskpd %ymm13,%r11d - shlb $4,%r11b - orb %r11b,%r12b - - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm14 - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm15 - vmovmskpd %ymm14,%r11d - vmovmskpd %ymm15,%r10d - shlb $4,%r10b - orb %r10b,%r11b - - addb %r14b,%r14b - adcb %r13b,%r13b - adcb %r12b,%r12b - adcb %r11b,%r11b - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm1 - vmovmskpd %ymm0,%r9d - vmovmskpd %ymm1,%r8d - shlb $4,%r8b - orb %r8b,%r9b - - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm2 - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm11 - vmovmskpd %ymm2,%r8d - vmovmskpd %ymm11,%edx - shlb $4,%dl - orb %dl,%r8b - - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm12 - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm12,%edx - vmovmskpd %ymm13,%ecx - shlb $4,%cl - orb %cl,%dl - - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm14 - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm15 - vmovmskpd %ymm14,%ecx - vmovmskpd %ymm15,%ebx - shlb $4,%bl - orb %bl,%cl - - addb %r9b,%r14b - adcb %r8b,%r13b - adcb %dl,%r12b - adcb %cl,%r11b - - xorb %r9b,%r14b - xorb %r8b,%r13b - xorb %dl,%r12b - xorb %cl,%r11b - - leaq .Lkmasklut(%rip),%rdx - - movb %r14b,%r10b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm0 - shlq $5,%r14 - vmovapd (%rdx,%r14,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm3,%ymm3 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm4,%ymm4 - - movb %r13b,%r10b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm0 - shlq $5,%r13 - vmovapd (%rdx,%r13,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm5,%ymm5 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm6,%ymm6 - - movb %r12b,%r10b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm0 - shlq $5,%r12 - vmovapd (%rdx,%r12,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm7,%ymm7 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm8,%ymm8 - - movb %r11b,%r10b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm0 - shlq $5,%r11 - vmovapd (%rdx,%r11,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm9,%ymm9 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm10,%ymm10 - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - - vmovdqu %ymm3,0(%rdi) - vmovdqu %ymm4,32(%rdi) - vmovdqu %ymm5,64(%rdi) - vmovdqu %ymm6,96(%rdi) - vmovdqu %ymm7,128(%rdi) - vmovdqu %ymm8,160(%rdi) - vmovdqu %ymm9,192(%rdi) - vmovdqu %ymm10,224(%rdi) - - vzeroupper - leaq (%rsp),%rax -.cfi_def_cfa_register %rax - movq 0(%rax),%r15 -.cfi_restore %r15 - movq 8(%rax),%r14 -.cfi_restore %r14 - movq 16(%rax),%r13 -.cfi_restore %r13 - movq 24(%rax),%r12 -.cfi_restore %r12 - movq 32(%rax),%rbp -.cfi_restore %rbp - movq 40(%rax),%rbx -.cfi_restore %rbx - leaq 48(%rax),%rsp -.cfi_def_cfa %rsp,8 -.Lossl_rsaz_amm52x30_x1_avxifma256_epilogue: - .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_rsaz_amm52x30_x1_avxifma256, .-ossl_rsaz_amm52x30_x1_avxifma256 -.section .rodata -.align 32 -.Lmask52x4: -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.Lhigh64x3: -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.Lkmasklut: - -.quad 0x0 -.quad 0x0 -.quad 0x0 -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 -.quad 0x0 - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 - -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0x0 -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.text - .globl ossl_rsaz_amm52x30_x2_avxifma256 -.type ossl_rsaz_amm52x30_x2_avxifma256,@function -.align 32 -ossl_rsaz_amm52x30_x2_avxifma256: -.cfi_startproc -.byte 243,15,30,250 - pushq %rbx -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbx,-16 - pushq %rbp -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbp,-24 - pushq %r12 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r12,-32 - pushq %r13 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r13,-40 - pushq %r14 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r14,-48 - pushq %r15 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r15,-56 - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 - - xorl %r9d,%r9d - - movq %rdx,%r11 - movq $0xfffffffffffff,%rax - - movl $30,%ebx - -.align 32 -.Lloop30: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq (%r8),%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - leaq 8(%r11),%r11 - decl %ebx - jne .Lloop30 - - pushq %r11 - pushq %rsi - pushq %rcx - pushq %r8 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - - - vpsrlq $52,%ymm3,%ymm0 - vpsrlq $52,%ymm4,%ymm1 - vpsrlq $52,%ymm5,%ymm2 - vpsrlq $52,%ymm6,%ymm11 - vpsrlq $52,%ymm7,%ymm12 - vpsrlq $52,%ymm8,%ymm13 - vpsrlq $52,%ymm9,%ymm14 - vpsrlq $52,%ymm10,%ymm15 - - leaq -32(%rsp),%rsp - vmovupd %ymm3,(%rsp) - - - vpermq $144,%ymm15,%ymm15 - vpermq $3,%ymm14,%ymm3 - vblendpd $1,%ymm3,%ymm15,%ymm15 - - vpermq $144,%ymm14,%ymm14 - vpermq $3,%ymm13,%ymm3 - vblendpd $1,%ymm3,%ymm14,%ymm14 - - vpermq $144,%ymm13,%ymm13 - vpermq $3,%ymm12,%ymm3 - vblendpd $1,%ymm3,%ymm13,%ymm13 - - vpermq $144,%ymm12,%ymm12 - vpermq $3,%ymm11,%ymm3 - vblendpd $1,%ymm3,%ymm12,%ymm12 - - vpermq $144,%ymm11,%ymm11 - vpermq $3,%ymm2,%ymm3 - vblendpd $1,%ymm3,%ymm11,%ymm11 - - vpermq $144,%ymm2,%ymm2 - vpermq $3,%ymm1,%ymm3 - vblendpd $1,%ymm3,%ymm2,%ymm2 - - vpermq $144,%ymm1,%ymm1 - vpermq $3,%ymm0,%ymm3 - vblendpd $1,%ymm3,%ymm1,%ymm1 - - vpermq $144,%ymm0,%ymm0 - vpand .Lhigh64x3(%rip),%ymm0,%ymm0 - - vmovupd (%rsp),%ymm3 - leaq 32(%rsp),%rsp - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - - - vpaddq %ymm0,%ymm3,%ymm3 - vpaddq %ymm1,%ymm4,%ymm4 - vpaddq %ymm2,%ymm5,%ymm5 - vpaddq %ymm11,%ymm6,%ymm6 - vpaddq %ymm12,%ymm7,%ymm7 - vpaddq %ymm13,%ymm8,%ymm8 - vpaddq %ymm14,%ymm9,%ymm9 - vpaddq %ymm15,%ymm10,%ymm10 - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm1 - vmovmskpd %ymm0,%r14d - vmovmskpd %ymm1,%r13d - shlb $4,%r13b - orb %r13b,%r14b - - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm2 - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm11 - vmovmskpd %ymm2,%r13d - vmovmskpd %ymm11,%r12d - shlb $4,%r12b - orb %r12b,%r13b - - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm12 - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm12,%r12d - vmovmskpd %ymm13,%r11d - shlb $4,%r11b - orb %r11b,%r12b - - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm14 - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm15 - vmovmskpd %ymm14,%r11d - vmovmskpd %ymm15,%r10d - shlb $4,%r10b - orb %r10b,%r11b - - addb %r14b,%r14b - adcb %r13b,%r13b - adcb %r12b,%r12b - adcb %r11b,%r11b - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm1 - vmovmskpd %ymm0,%r9d - vmovmskpd %ymm1,%r8d - shlb $4,%r8b - orb %r8b,%r9b - - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm2 - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm11 - vmovmskpd %ymm2,%r8d - vmovmskpd %ymm11,%edx - shlb $4,%dl - orb %dl,%r8b - - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm12 - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm12,%edx - vmovmskpd %ymm13,%ecx - shlb $4,%cl - orb %cl,%dl - - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm14 - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm15 - vmovmskpd %ymm14,%ecx - vmovmskpd %ymm15,%ebx - shlb $4,%bl - orb %bl,%cl - - addb %r9b,%r14b - adcb %r8b,%r13b - adcb %dl,%r12b - adcb %cl,%r11b - - xorb %r9b,%r14b - xorb %r8b,%r13b - xorb %dl,%r12b - xorb %cl,%r11b - - leaq .Lkmasklut(%rip),%rdx - - movb %r14b,%r10b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm0 - shlq $5,%r14 - vmovapd (%rdx,%r14,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm3,%ymm3 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm4,%ymm4 - - movb %r13b,%r10b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm0 - shlq $5,%r13 - vmovapd (%rdx,%r13,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm5,%ymm5 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm6,%ymm6 - - movb %r12b,%r10b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm0 - shlq $5,%r12 - vmovapd (%rdx,%r12,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm7,%ymm7 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm8,%ymm8 - - movb %r11b,%r10b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm0 - shlq $5,%r11 - vmovapd (%rdx,%r11,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm9,%ymm9 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm10,%ymm10 - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - popq %r8 - popq %rcx - popq %rsi - popq %r11 - - vmovdqu %ymm3,0(%rdi) - vmovdqu %ymm4,32(%rdi) - vmovdqu %ymm5,64(%rdi) - vmovdqu %ymm6,96(%rdi) - vmovdqu %ymm7,128(%rdi) - vmovdqu %ymm8,160(%rdi) - vmovdqu %ymm9,192(%rdi) - vmovdqu %ymm10,224(%rdi) - - xorl %r15d,%r15d - - leaq 16(%r11),%r11 - movq $0xfffffffffffff,%rax - - movl $30,%ebx - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 -.align 32 -.Lloop40: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 256(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq 8(%r8),%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 256(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -264(%rsp),%rsp - -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 320(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 352(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 384(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 416(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 448(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 480(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 320(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 352(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 384(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 416(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 448(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 480(%rcx),%ymm2,%ymm10 - - - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - movq $0,256(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 320(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 352(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 384(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 416(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 448(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 480(%rsi),%ymm1,%ymm10 - -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 320(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 352(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 384(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 416(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 448(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 480(%rcx),%ymm2,%ymm10 - - leaq 264(%rsp),%rsp - leaq 8(%r11),%r11 - decl %ebx - jne .Lloop40 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - - - vpsrlq $52,%ymm3,%ymm0 - vpsrlq $52,%ymm4,%ymm1 - vpsrlq $52,%ymm5,%ymm2 - vpsrlq $52,%ymm6,%ymm11 - vpsrlq $52,%ymm7,%ymm12 - vpsrlq $52,%ymm8,%ymm13 - vpsrlq $52,%ymm9,%ymm14 - vpsrlq $52,%ymm10,%ymm15 - - leaq -32(%rsp),%rsp - vmovupd %ymm3,(%rsp) - - - vpermq $144,%ymm15,%ymm15 - vpermq $3,%ymm14,%ymm3 - vblendpd $1,%ymm3,%ymm15,%ymm15 - - vpermq $144,%ymm14,%ymm14 - vpermq $3,%ymm13,%ymm3 - vblendpd $1,%ymm3,%ymm14,%ymm14 - - vpermq $144,%ymm13,%ymm13 - vpermq $3,%ymm12,%ymm3 - vblendpd $1,%ymm3,%ymm13,%ymm13 - - vpermq $144,%ymm12,%ymm12 - vpermq $3,%ymm11,%ymm3 - vblendpd $1,%ymm3,%ymm12,%ymm12 - - vpermq $144,%ymm11,%ymm11 - vpermq $3,%ymm2,%ymm3 - vblendpd $1,%ymm3,%ymm11,%ymm11 - - vpermq $144,%ymm2,%ymm2 - vpermq $3,%ymm1,%ymm3 - vblendpd $1,%ymm3,%ymm2,%ymm2 - - vpermq $144,%ymm1,%ymm1 - vpermq $3,%ymm0,%ymm3 - vblendpd $1,%ymm3,%ymm1,%ymm1 - - vpermq $144,%ymm0,%ymm0 - vpand .Lhigh64x3(%rip),%ymm0,%ymm0 - - vmovupd (%rsp),%ymm3 - leaq 32(%rsp),%rsp - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - - - vpaddq %ymm0,%ymm3,%ymm3 - vpaddq %ymm1,%ymm4,%ymm4 - vpaddq %ymm2,%ymm5,%ymm5 - vpaddq %ymm11,%ymm6,%ymm6 - vpaddq %ymm12,%ymm7,%ymm7 - vpaddq %ymm13,%ymm8,%ymm8 - vpaddq %ymm14,%ymm9,%ymm9 - vpaddq %ymm15,%ymm10,%ymm10 - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm1 - vmovmskpd %ymm0,%r14d - vmovmskpd %ymm1,%r13d - shlb $4,%r13b - orb %r13b,%r14b - - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm2 - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm11 - vmovmskpd %ymm2,%r13d - vmovmskpd %ymm11,%r12d - shlb $4,%r12b - orb %r12b,%r13b - - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm12 - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm12,%r12d - vmovmskpd %ymm13,%r11d - shlb $4,%r11b - orb %r11b,%r12b - - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm14 - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm15 - vmovmskpd %ymm14,%r11d - vmovmskpd %ymm15,%r10d - shlb $4,%r10b - orb %r10b,%r11b - - addb %r14b,%r14b - adcb %r13b,%r13b - adcb %r12b,%r12b - adcb %r11b,%r11b - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm0 - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm1 - vmovmskpd %ymm0,%r9d - vmovmskpd %ymm1,%r8d - shlb $4,%r8b - orb %r8b,%r9b - - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm2 - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm11 - vmovmskpd %ymm2,%r8d - vmovmskpd %ymm11,%edx - shlb $4,%dl - orb %dl,%r8b - - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm12 - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm12,%edx - vmovmskpd %ymm13,%ecx - shlb $4,%cl - orb %cl,%dl - - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm14 - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm15 - vmovmskpd %ymm14,%ecx - vmovmskpd %ymm15,%ebx - shlb $4,%bl - orb %bl,%cl - - addb %r9b,%r14b - adcb %r8b,%r13b - adcb %dl,%r12b - adcb %cl,%r11b - - xorb %r9b,%r14b - xorb %r8b,%r13b - xorb %dl,%r12b - xorb %cl,%r11b - - leaq .Lkmasklut(%rip),%rdx - - movb %r14b,%r10b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm0 - shlq $5,%r14 - vmovapd (%rdx,%r14,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm3,%ymm3 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm4,%ymm4 - - movb %r13b,%r10b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm0 - shlq $5,%r13 - vmovapd (%rdx,%r13,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm5,%ymm5 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm6,%ymm6 - - movb %r12b,%r10b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm0 - shlq $5,%r12 - vmovapd (%rdx,%r12,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm7,%ymm7 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm8,%ymm8 - - movb %r11b,%r10b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm0 - shlq $5,%r11 - vmovapd (%rdx,%r11,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm9,%ymm9 - - shrb $4,%r10b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm0 - shlq $5,%r10 - vmovapd (%rdx,%r10,1),%ymm2 - vblendvpd %ymm2,%ymm0,%ymm10,%ymm10 - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - - vmovdqu %ymm3,256(%rdi) - vmovdqu %ymm4,288(%rdi) - vmovdqu %ymm5,320(%rdi) - vmovdqu %ymm6,352(%rdi) - vmovdqu %ymm7,384(%rdi) - vmovdqu %ymm8,416(%rdi) - vmovdqu %ymm9,448(%rdi) - vmovdqu %ymm10,480(%rdi) - - vzeroupper - leaq (%rsp),%rax -.cfi_def_cfa_register %rax - movq 0(%rax),%r15 -.cfi_restore %r15 - movq 8(%rax),%r14 -.cfi_restore %r14 - movq 16(%rax),%r13 -.cfi_restore %r13 - movq 24(%rax),%r12 -.cfi_restore %r12 - movq 32(%rax),%rbp -.cfi_restore %rbp - movq 40(%rax),%rbx -.cfi_restore %rbx - leaq 48(%rax),%rsp -.cfi_def_cfa %rsp,8 -.Lossl_rsaz_amm52x30_x2_avxifma256_epilogue: - .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_rsaz_amm52x30_x2_avxifma256, .-ossl_rsaz_amm52x30_x2_avxifma256 -.text - -.align 32 .globl ossl_extract_multiplier_2x30_win5_avx -.type ossl_extract_multiplier_2x30_win5_avx,@function +.type ossl_rsaz_amm52x30_x1_avxifma256,@function +ossl_rsaz_amm52x30_x1_avxifma256: +ossl_rsaz_amm52x30_x2_avxifma256: ossl_extract_multiplier_2x30_win5_avx: -.cfi_startproc -.byte 243,15,30,250 - vmovapd .Lones(%rip),%ymm12 - vmovq %rdx,%xmm8 - vpbroadcastq %xmm8,%ymm10 - vmovq %rcx,%xmm8 - vpbroadcastq %xmm8,%ymm11 - leaq 16384(%rsi),%rax - - - vpxor %xmm0,%xmm0,%xmm0 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm1 - vmovapd %ymm0,%ymm2 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - -.align 32 -.Lloop: - vpcmpeqq %ymm9,%ymm10,%ymm13 - vmovdqu 0(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm0,%ymm0 - vmovdqu 32(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm1,%ymm1 - vmovdqu 64(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm2,%ymm2 - vmovdqu 96(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm3,%ymm3 - vmovdqu 128(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm4,%ymm4 - vmovdqu 160(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm5,%ymm5 - vmovdqu 192(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm6,%ymm6 - vmovdqu 224(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm7,%ymm7 - vpaddq %ymm12,%ymm9,%ymm9 - addq $512,%rsi - cmpq %rsi,%rax - jne .Lloop - vmovdqu %ymm0,0(%rdi) - vmovdqu %ymm1,32(%rdi) - vmovdqu %ymm2,64(%rdi) - vmovdqu %ymm3,96(%rdi) - vmovdqu %ymm4,128(%rdi) - vmovdqu %ymm5,160(%rdi) - vmovdqu %ymm6,192(%rdi) - vmovdqu %ymm7,224(%rdi) - leaq -16384(%rax),%rsi - - - vpxor %xmm0,%xmm0,%xmm0 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm0 - vmovapd %ymm0,%ymm1 - vmovapd %ymm0,%ymm2 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - -.align 32 -.Lloop_8_15: - vpcmpeqq %ymm9,%ymm11,%ymm13 - vmovdqu 256(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm0,%ymm0 - vmovdqu 288(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm1,%ymm1 - vmovdqu 320(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm2,%ymm2 - vmovdqu 352(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm3,%ymm3 - vmovdqu 384(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm4,%ymm4 - vmovdqu 416(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm5,%ymm5 - vmovdqu 448(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm6,%ymm6 - vmovdqu 480(%rsi),%ymm8 - - vblendvpd %ymm13,%ymm8,%ymm7,%ymm7 - vpaddq %ymm12,%ymm9,%ymm9 - addq $512,%rsi - cmpq %rsi,%rax - jne .Lloop_8_15 - vmovdqu %ymm0,256(%rdi) - vmovdqu %ymm1,288(%rdi) - vmovdqu %ymm2,320(%rdi) - vmovdqu %ymm3,352(%rdi) - vmovdqu %ymm4,384(%rdi) - vmovdqu %ymm5,416(%rdi) - vmovdqu %ymm6,448(%rdi) - vmovdqu %ymm7,480(%rdi) - +.byte 0x0f,0x0b .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_extract_multiplier_2x30_win5_avx, .-ossl_extract_multiplier_2x30_win5_avx -.section .rodata -.align 32 -.Lones: -.quad 1,1,1,1 -.Lzeros: -.quad 0,0,0,0 +.size ossl_rsaz_amm52x30_x1_avxifma256, .-ossl_rsaz_amm52x30_x1_avxifma256 .section ".note.gnu.property", "a" .p2align 3 .long 1f - 0f diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s index 5b5a897974..297f30d512 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/bn/rsaz-4k-avxifma.s @@ -1,1904 +1,15 @@ .text .globl ossl_rsaz_amm52x40_x1_avxifma256 -.type ossl_rsaz_amm52x40_x1_avxifma256,@function -.align 32 -ossl_rsaz_amm52x40_x1_avxifma256: -.cfi_startproc -.byte 243,15,30,250 - pushq %rbx -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbx,-16 - pushq %rbp -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbp,-24 - pushq %r12 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r12,-32 - pushq %r13 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r13,-40 - pushq %r14 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r14,-48 - pushq %r15 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r15,-56 - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 - vmovapd %ymm0,%ymm11 - vmovapd %ymm0,%ymm12 - - xorl %r9d,%r9d - - movq %rdx,%r11 - movq $0xfffffffffffff,%rax - - - movl $10,%ebx - -.align 32 -.Lloop10: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -328(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm12 - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - vmovdqu %ymm11,256(%rsp) - vmovdqu %ymm12,288(%rsp) - movq $0,320(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - vmovdqu 264(%rsp),%ymm11 - vmovdqu 296(%rsp),%ymm12 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm12 - leaq 328(%rsp),%rsp - movq 8(%r11),%r13 - - vpbroadcastq 8(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -328(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm12 - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - vmovdqu %ymm11,256(%rsp) - vmovdqu %ymm12,288(%rsp) - movq $0,320(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - vmovdqu 264(%rsp),%ymm11 - vmovdqu 296(%rsp),%ymm12 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm12 - leaq 328(%rsp),%rsp - movq 16(%r11),%r13 - - vpbroadcastq 16(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -328(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm12 - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - vmovdqu %ymm11,256(%rsp) - vmovdqu %ymm12,288(%rsp) - movq $0,320(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - vmovdqu 264(%rsp),%ymm11 - vmovdqu 296(%rsp),%ymm12 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm12 - leaq 328(%rsp),%rsp - movq 24(%r11),%r13 - - vpbroadcastq 24(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq %r8,%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -328(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm12 - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - vmovdqu %ymm11,256(%rsp) - vmovdqu %ymm12,288(%rsp) - movq $0,320(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - vmovdqu 264(%rsp),%ymm11 - vmovdqu 296(%rsp),%ymm12 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm12 - leaq 328(%rsp),%rsp - leaq 32(%r11),%r11 - decl %ebx - jne .Lloop10 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - leaq -640(%rsp),%rsp - vmovupd %ymm3,0(%rsp) - vmovupd %ymm4,32(%rsp) - vmovupd %ymm5,64(%rsp) - vmovupd %ymm6,96(%rsp) - vmovupd %ymm7,128(%rsp) - vmovupd %ymm8,160(%rsp) - vmovupd %ymm9,192(%rsp) - vmovupd %ymm10,224(%rsp) - vmovupd %ymm11,256(%rsp) - vmovupd %ymm12,288(%rsp) - - - - vpsrlq $52,%ymm3,%ymm3 - vpsrlq $52,%ymm4,%ymm4 - vpsrlq $52,%ymm5,%ymm5 - vpsrlq $52,%ymm6,%ymm6 - vpsrlq $52,%ymm7,%ymm7 - vpsrlq $52,%ymm8,%ymm8 - vpsrlq $52,%ymm9,%ymm9 - vpsrlq $52,%ymm10,%ymm10 - vpsrlq $52,%ymm11,%ymm11 - vpsrlq $52,%ymm12,%ymm12 - - - vpermq $144,%ymm12,%ymm12 - vpermq $3,%ymm11,%ymm13 - vblendpd $1,%ymm13,%ymm12,%ymm12 - - vpermq $144,%ymm11,%ymm11 - vpermq $3,%ymm10,%ymm13 - vblendpd $1,%ymm13,%ymm11,%ymm11 - - vpermq $144,%ymm10,%ymm10 - vpermq $3,%ymm9,%ymm13 - vblendpd $1,%ymm13,%ymm10,%ymm10 - - vpermq $144,%ymm9,%ymm9 - vpermq $3,%ymm8,%ymm13 - vblendpd $1,%ymm13,%ymm9,%ymm9 - - vpermq $144,%ymm8,%ymm8 - vpermq $3,%ymm7,%ymm13 - vblendpd $1,%ymm13,%ymm8,%ymm8 - - vpermq $144,%ymm7,%ymm7 - vpermq $3,%ymm6,%ymm13 - vblendpd $1,%ymm13,%ymm7,%ymm7 - - vpermq $144,%ymm6,%ymm6 - vpermq $3,%ymm5,%ymm13 - vblendpd $1,%ymm13,%ymm6,%ymm6 - - vpermq $144,%ymm5,%ymm5 - vpermq $3,%ymm4,%ymm13 - vblendpd $1,%ymm13,%ymm5,%ymm5 - - vpermq $144,%ymm4,%ymm4 - vpermq $3,%ymm3,%ymm13 - vblendpd $1,%ymm13,%ymm4,%ymm4 - - vpermq $144,%ymm3,%ymm3 - vpand .Lhigh64x3(%rip),%ymm3,%ymm3 - - vmovupd %ymm3,320(%rsp) - vmovupd %ymm4,352(%rsp) - vmovupd %ymm5,384(%rsp) - vmovupd %ymm6,416(%rsp) - vmovupd %ymm7,448(%rsp) - vmovupd %ymm8,480(%rsp) - vmovupd %ymm9,512(%rsp) - vmovupd %ymm10,544(%rsp) - vmovupd %ymm11,576(%rsp) - vmovupd %ymm12,608(%rsp) - - vmovupd 0(%rsp),%ymm3 - vmovupd 32(%rsp),%ymm4 - vmovupd 64(%rsp),%ymm5 - vmovupd 96(%rsp),%ymm6 - vmovupd 128(%rsp),%ymm7 - vmovupd 160(%rsp),%ymm8 - vmovupd 192(%rsp),%ymm9 - vmovupd 224(%rsp),%ymm10 - vmovupd 256(%rsp),%ymm11 - vmovupd 288(%rsp),%ymm12 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - - vpaddq 320(%rsp),%ymm3,%ymm3 - vpaddq 352(%rsp),%ymm4,%ymm4 - vpaddq 384(%rsp),%ymm5,%ymm5 - vpaddq 416(%rsp),%ymm6,%ymm6 - vpaddq 448(%rsp),%ymm7,%ymm7 - vpaddq 480(%rsp),%ymm8,%ymm8 - vpaddq 512(%rsp),%ymm9,%ymm9 - vpaddq 544(%rsp),%ymm10,%ymm10 - vpaddq 576(%rsp),%ymm11,%ymm11 - vpaddq 608(%rsp),%ymm12,%ymm12 - - leaq 640(%rsp),%rsp - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm13 - vmovmskpd %ymm13,%r14d - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm13 - vmovmskpd %ymm13,%r13d - shlb $4,%r13b - orb %r13b,%r14b - - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm13 - vmovmskpd %ymm13,%r13d - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm13 - vmovmskpd %ymm13,%r12d - shlb $4,%r12b - orb %r12b,%r13b - - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm13 - vmovmskpd %ymm13,%r12d - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm13,%r11d - shlb $4,%r11b - orb %r11b,%r12b - - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm13 - vmovmskpd %ymm13,%r11d - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm13 - vmovmskpd %ymm13,%r10d - shlb $4,%r10b - orb %r10b,%r11b - - vpcmpgtq .Lmask52x4(%rip),%ymm11,%ymm13 - vmovmskpd %ymm13,%r10d - vpcmpgtq .Lmask52x4(%rip),%ymm12,%ymm13 - vmovmskpd %ymm13,%r9d - shlb $4,%r9b - orb %r9b,%r10b - - addb %r14b,%r14b - adcb %r13b,%r13b - adcb %r12b,%r12b - adcb %r11b,%r11b - adcb %r10b,%r10b - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm13 - vmovmskpd %ymm13,%r9d - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm13 - vmovmskpd %ymm13,%r8d - shlb $4,%r8b - orb %r8b,%r9b - - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm13 - vmovmskpd %ymm13,%r8d - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm13 - vmovmskpd %ymm13,%edx - shlb $4,%dl - orb %dl,%r8b - - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm13 - vmovmskpd %ymm13,%edx - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm13,%ecx - shlb $4,%cl - orb %cl,%dl - - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm13 - vmovmskpd %ymm13,%ecx - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm13 - vmovmskpd %ymm13,%ebx - shlb $4,%bl - orb %bl,%cl - - vpcmpeqq .Lmask52x4(%rip),%ymm11,%ymm13 - vmovmskpd %ymm13,%ebx - vpcmpeqq .Lmask52x4(%rip),%ymm12,%ymm13 - vmovmskpd %ymm13,%eax - shlb $4,%al - orb %al,%bl - - addb %r9b,%r14b - adcb %r8b,%r13b - adcb %dl,%r12b - adcb %cl,%r11b - adcb %bl,%r10b - - xorb %r9b,%r14b - xorb %r8b,%r13b - xorb %dl,%r12b - xorb %cl,%r11b - xorb %bl,%r10b - - pushq %r9 - pushq %r8 - - leaq .Lkmasklut(%rip),%r8 - - movb %r14b,%r9b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm13 - shlq $5,%r14 - vmovapd (%r8,%r14,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm3,%ymm3 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm4,%ymm4 - - movb %r13b,%r9b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm13 - shlq $5,%r13 - vmovapd (%r8,%r13,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm5,%ymm5 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm6,%ymm6 - - movb %r12b,%r9b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm13 - shlq $5,%r12 - vmovapd (%r8,%r12,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm7,%ymm7 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm8,%ymm8 - - movb %r11b,%r9b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm13 - shlq $5,%r11 - vmovapd (%r8,%r11,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm9,%ymm9 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm10,%ymm10 - - movb %r10b,%r9b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm11,%ymm13 - shlq $5,%r10 - vmovapd (%r8,%r10,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm11,%ymm11 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm12,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm12,%ymm12 - - popq %r8 - popq %r9 - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - vmovdqu %ymm3,0(%rdi) - vmovdqu %ymm4,32(%rdi) - vmovdqu %ymm5,64(%rdi) - vmovdqu %ymm6,96(%rdi) - vmovdqu %ymm7,128(%rdi) - vmovdqu %ymm8,160(%rdi) - vmovdqu %ymm9,192(%rdi) - vmovdqu %ymm10,224(%rdi) - vmovdqu %ymm11,256(%rdi) - vmovdqu %ymm12,288(%rdi) - - vzeroupper - leaq (%rsp),%rax -.cfi_def_cfa_register %rax - movq 0(%rax),%r15 -.cfi_restore %r15 - movq 8(%rax),%r14 -.cfi_restore %r14 - movq 16(%rax),%r13 -.cfi_restore %r13 - movq 24(%rax),%r12 -.cfi_restore %r12 - movq 32(%rax),%rbp -.cfi_restore %rbp - movq 40(%rax),%rbx -.cfi_restore %rbx - leaq 48(%rax),%rsp -.cfi_def_cfa %rsp,8 -.Lossl_rsaz_amm52x40_x1_avxifma256_epilogue: - - .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_rsaz_amm52x40_x1_avxifma256, .-ossl_rsaz_amm52x40_x1_avxifma256 -.section .rodata -.align 32 -.Lmask52x4: -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.quad 0xfffffffffffff -.Lhigh64x3: -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.Lkmasklut: - -.quad 0x0 -.quad 0x0 -.quad 0x0 -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 -.quad 0x0 - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 - -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 - -.quad 0x0 -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0x0 -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff - -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.quad 0xffffffffffffffff -.text - .globl ossl_rsaz_amm52x40_x2_avxifma256 -.type ossl_rsaz_amm52x40_x2_avxifma256,@function -.align 32 -ossl_rsaz_amm52x40_x2_avxifma256: -.cfi_startproc -.byte 243,15,30,250 - pushq %rbx -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbx,-16 - pushq %rbp -.cfi_adjust_cfa_offset 8 -.cfi_offset %rbp,-24 - pushq %r12 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r12,-32 - pushq %r13 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r13,-40 - pushq %r14 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r14,-48 - pushq %r15 -.cfi_adjust_cfa_offset 8 -.cfi_offset %r15,-56 - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 - vmovapd %ymm0,%ymm11 - vmovapd %ymm0,%ymm12 - - xorl %r9d,%r9d - - movq %rdx,%r11 - movq $0xfffffffffffff,%rax - - movl $40,%ebx - -.align 32 -.Lloop40: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 0(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq (%r8),%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 0(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -328(%rsp),%rsp - -{vex} vpmadd52luq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 288(%rcx),%ymm2,%ymm12 - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - vmovdqu %ymm11,256(%rsp) - vmovdqu %ymm12,288(%rsp) - movq $0,320(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - vmovdqu 264(%rsp),%ymm11 - vmovdqu 296(%rsp),%ymm12 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 0(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 32(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 64(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 96(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 128(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 160(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 192(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 224(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 256(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 288(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 0(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 32(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 64(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 96(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 128(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 160(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 192(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 224(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 256(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 288(%rcx),%ymm2,%ymm12 - leaq 328(%rsp),%rsp - leaq 8(%r11),%r11 - decl %ebx - jne .Lloop40 - - pushq %r11 - pushq %rsi - pushq %rcx - pushq %r8 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - leaq -640(%rsp),%rsp - vmovupd %ymm3,0(%rsp) - vmovupd %ymm4,32(%rsp) - vmovupd %ymm5,64(%rsp) - vmovupd %ymm6,96(%rsp) - vmovupd %ymm7,128(%rsp) - vmovupd %ymm8,160(%rsp) - vmovupd %ymm9,192(%rsp) - vmovupd %ymm10,224(%rsp) - vmovupd %ymm11,256(%rsp) - vmovupd %ymm12,288(%rsp) - - - - vpsrlq $52,%ymm3,%ymm3 - vpsrlq $52,%ymm4,%ymm4 - vpsrlq $52,%ymm5,%ymm5 - vpsrlq $52,%ymm6,%ymm6 - vpsrlq $52,%ymm7,%ymm7 - vpsrlq $52,%ymm8,%ymm8 - vpsrlq $52,%ymm9,%ymm9 - vpsrlq $52,%ymm10,%ymm10 - vpsrlq $52,%ymm11,%ymm11 - vpsrlq $52,%ymm12,%ymm12 - - - vpermq $144,%ymm12,%ymm12 - vpermq $3,%ymm11,%ymm13 - vblendpd $1,%ymm13,%ymm12,%ymm12 - - vpermq $144,%ymm11,%ymm11 - vpermq $3,%ymm10,%ymm13 - vblendpd $1,%ymm13,%ymm11,%ymm11 - - vpermq $144,%ymm10,%ymm10 - vpermq $3,%ymm9,%ymm13 - vblendpd $1,%ymm13,%ymm10,%ymm10 - - vpermq $144,%ymm9,%ymm9 - vpermq $3,%ymm8,%ymm13 - vblendpd $1,%ymm13,%ymm9,%ymm9 - - vpermq $144,%ymm8,%ymm8 - vpermq $3,%ymm7,%ymm13 - vblendpd $1,%ymm13,%ymm8,%ymm8 - - vpermq $144,%ymm7,%ymm7 - vpermq $3,%ymm6,%ymm13 - vblendpd $1,%ymm13,%ymm7,%ymm7 - - vpermq $144,%ymm6,%ymm6 - vpermq $3,%ymm5,%ymm13 - vblendpd $1,%ymm13,%ymm6,%ymm6 - - vpermq $144,%ymm5,%ymm5 - vpermq $3,%ymm4,%ymm13 - vblendpd $1,%ymm13,%ymm5,%ymm5 - - vpermq $144,%ymm4,%ymm4 - vpermq $3,%ymm3,%ymm13 - vblendpd $1,%ymm13,%ymm4,%ymm4 - - vpermq $144,%ymm3,%ymm3 - vpand .Lhigh64x3(%rip),%ymm3,%ymm3 - - vmovupd %ymm3,320(%rsp) - vmovupd %ymm4,352(%rsp) - vmovupd %ymm5,384(%rsp) - vmovupd %ymm6,416(%rsp) - vmovupd %ymm7,448(%rsp) - vmovupd %ymm8,480(%rsp) - vmovupd %ymm9,512(%rsp) - vmovupd %ymm10,544(%rsp) - vmovupd %ymm11,576(%rsp) - vmovupd %ymm12,608(%rsp) - - vmovupd 0(%rsp),%ymm3 - vmovupd 32(%rsp),%ymm4 - vmovupd 64(%rsp),%ymm5 - vmovupd 96(%rsp),%ymm6 - vmovupd 128(%rsp),%ymm7 - vmovupd 160(%rsp),%ymm8 - vmovupd 192(%rsp),%ymm9 - vmovupd 224(%rsp),%ymm10 - vmovupd 256(%rsp),%ymm11 - vmovupd 288(%rsp),%ymm12 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - - vpaddq 320(%rsp),%ymm3,%ymm3 - vpaddq 352(%rsp),%ymm4,%ymm4 - vpaddq 384(%rsp),%ymm5,%ymm5 - vpaddq 416(%rsp),%ymm6,%ymm6 - vpaddq 448(%rsp),%ymm7,%ymm7 - vpaddq 480(%rsp),%ymm8,%ymm8 - vpaddq 512(%rsp),%ymm9,%ymm9 - vpaddq 544(%rsp),%ymm10,%ymm10 - vpaddq 576(%rsp),%ymm11,%ymm11 - vpaddq 608(%rsp),%ymm12,%ymm12 - - leaq 640(%rsp),%rsp - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm13 - vmovmskpd %ymm13,%r14d - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm13 - vmovmskpd %ymm13,%r13d - shlb $4,%r13b - orb %r13b,%r14b - - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm13 - vmovmskpd %ymm13,%r13d - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm13 - vmovmskpd %ymm13,%r12d - shlb $4,%r12b - orb %r12b,%r13b - - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm13 - vmovmskpd %ymm13,%r12d - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm13,%r11d - shlb $4,%r11b - orb %r11b,%r12b - - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm13 - vmovmskpd %ymm13,%r11d - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm13 - vmovmskpd %ymm13,%r10d - shlb $4,%r10b - orb %r10b,%r11b - - vpcmpgtq .Lmask52x4(%rip),%ymm11,%ymm13 - vmovmskpd %ymm13,%r10d - vpcmpgtq .Lmask52x4(%rip),%ymm12,%ymm13 - vmovmskpd %ymm13,%r9d - shlb $4,%r9b - orb %r9b,%r10b - - addb %r14b,%r14b - adcb %r13b,%r13b - adcb %r12b,%r12b - adcb %r11b,%r11b - adcb %r10b,%r10b - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm13 - vmovmskpd %ymm13,%r9d - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm13 - vmovmskpd %ymm13,%r8d - shlb $4,%r8b - orb %r8b,%r9b - - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm13 - vmovmskpd %ymm13,%r8d - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm13 - vmovmskpd %ymm13,%edx - shlb $4,%dl - orb %dl,%r8b - - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm13 - vmovmskpd %ymm13,%edx - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm13,%ecx - shlb $4,%cl - orb %cl,%dl - - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm13 - vmovmskpd %ymm13,%ecx - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm13 - vmovmskpd %ymm13,%ebx - shlb $4,%bl - orb %bl,%cl - - vpcmpeqq .Lmask52x4(%rip),%ymm11,%ymm13 - vmovmskpd %ymm13,%ebx - vpcmpeqq .Lmask52x4(%rip),%ymm12,%ymm13 - vmovmskpd %ymm13,%eax - shlb $4,%al - orb %al,%bl - - addb %r9b,%r14b - adcb %r8b,%r13b - adcb %dl,%r12b - adcb %cl,%r11b - adcb %bl,%r10b - - xorb %r9b,%r14b - xorb %r8b,%r13b - xorb %dl,%r12b - xorb %cl,%r11b - xorb %bl,%r10b - - pushq %r9 - pushq %r8 - - leaq .Lkmasklut(%rip),%r8 - - movb %r14b,%r9b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm13 - shlq $5,%r14 - vmovapd (%r8,%r14,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm3,%ymm3 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm4,%ymm4 - - movb %r13b,%r9b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm13 - shlq $5,%r13 - vmovapd (%r8,%r13,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm5,%ymm5 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm6,%ymm6 - - movb %r12b,%r9b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm13 - shlq $5,%r12 - vmovapd (%r8,%r12,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm7,%ymm7 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm8,%ymm8 - - movb %r11b,%r9b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm13 - shlq $5,%r11 - vmovapd (%r8,%r11,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm9,%ymm9 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm10,%ymm10 - - movb %r10b,%r9b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm11,%ymm13 - shlq $5,%r10 - vmovapd (%r8,%r10,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm11,%ymm11 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm12,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm12,%ymm12 - - popq %r8 - popq %r9 - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - popq %r8 - popq %rcx - popq %rsi - popq %r11 - - vmovdqu %ymm3,0(%rdi) - vmovdqu %ymm4,32(%rdi) - vmovdqu %ymm5,64(%rdi) - vmovdqu %ymm6,96(%rdi) - vmovdqu %ymm7,128(%rdi) - vmovdqu %ymm8,160(%rdi) - vmovdqu %ymm9,192(%rdi) - vmovdqu %ymm10,224(%rdi) - vmovdqu %ymm11,256(%rdi) - vmovdqu %ymm12,288(%rdi) - - xorl %r15d,%r15d - - movq $0xfffffffffffff,%rax - - movl $40,%ebx - - vpxor %ymm0,%ymm0,%ymm0 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vmovapd %ymm0,%ymm10 - vmovapd %ymm0,%ymm11 - vmovapd %ymm0,%ymm12 -.align 32 -.Lloop40_1: - movq 0(%r11),%r13 - - vpbroadcastq 0(%r11),%ymm1 - movq 320(%rsi),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - movq %r12,%r10 - adcq $0,%r10 - - movq 8(%r8),%r13 - imulq %r9,%r13 - andq %rax,%r13 - - vmovq %r13,%xmm2 - vpbroadcastq %xmm2,%ymm2 - movq 320(%rcx),%rdx - mulxq %r13,%r13,%r12 - addq %r13,%r9 - adcq %r12,%r10 - - shrq $52,%r9 - salq $12,%r10 - orq %r10,%r9 - - leaq -328(%rsp),%rsp - -{vex} vpmadd52luq 320(%rsi),%ymm1,%ymm3 -{vex} vpmadd52luq 352(%rsi),%ymm1,%ymm4 -{vex} vpmadd52luq 384(%rsi),%ymm1,%ymm5 -{vex} vpmadd52luq 416(%rsi),%ymm1,%ymm6 -{vex} vpmadd52luq 448(%rsi),%ymm1,%ymm7 -{vex} vpmadd52luq 480(%rsi),%ymm1,%ymm8 -{vex} vpmadd52luq 512(%rsi),%ymm1,%ymm9 -{vex} vpmadd52luq 544(%rsi),%ymm1,%ymm10 -{vex} vpmadd52luq 576(%rsi),%ymm1,%ymm11 -{vex} vpmadd52luq 608(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52luq 320(%rcx),%ymm2,%ymm3 -{vex} vpmadd52luq 352(%rcx),%ymm2,%ymm4 -{vex} vpmadd52luq 384(%rcx),%ymm2,%ymm5 -{vex} vpmadd52luq 416(%rcx),%ymm2,%ymm6 -{vex} vpmadd52luq 448(%rcx),%ymm2,%ymm7 -{vex} vpmadd52luq 480(%rcx),%ymm2,%ymm8 -{vex} vpmadd52luq 512(%rcx),%ymm2,%ymm9 -{vex} vpmadd52luq 544(%rcx),%ymm2,%ymm10 -{vex} vpmadd52luq 576(%rcx),%ymm2,%ymm11 -{vex} vpmadd52luq 608(%rcx),%ymm2,%ymm12 - vmovdqu %ymm3,0(%rsp) - vmovdqu %ymm4,32(%rsp) - vmovdqu %ymm5,64(%rsp) - vmovdqu %ymm6,96(%rsp) - vmovdqu %ymm7,128(%rsp) - vmovdqu %ymm8,160(%rsp) - vmovdqu %ymm9,192(%rsp) - vmovdqu %ymm10,224(%rsp) - vmovdqu %ymm11,256(%rsp) - vmovdqu %ymm12,288(%rsp) - movq $0,320(%rsp) - - vmovdqu 8(%rsp),%ymm3 - vmovdqu 40(%rsp),%ymm4 - vmovdqu 72(%rsp),%ymm5 - vmovdqu 104(%rsp),%ymm6 - vmovdqu 136(%rsp),%ymm7 - vmovdqu 168(%rsp),%ymm8 - vmovdqu 200(%rsp),%ymm9 - vmovdqu 232(%rsp),%ymm10 - vmovdqu 264(%rsp),%ymm11 - vmovdqu 296(%rsp),%ymm12 - - addq 8(%rsp),%r9 - -{vex} vpmadd52huq 320(%rsi),%ymm1,%ymm3 -{vex} vpmadd52huq 352(%rsi),%ymm1,%ymm4 -{vex} vpmadd52huq 384(%rsi),%ymm1,%ymm5 -{vex} vpmadd52huq 416(%rsi),%ymm1,%ymm6 -{vex} vpmadd52huq 448(%rsi),%ymm1,%ymm7 -{vex} vpmadd52huq 480(%rsi),%ymm1,%ymm8 -{vex} vpmadd52huq 512(%rsi),%ymm1,%ymm9 -{vex} vpmadd52huq 544(%rsi),%ymm1,%ymm10 -{vex} vpmadd52huq 576(%rsi),%ymm1,%ymm11 -{vex} vpmadd52huq 608(%rsi),%ymm1,%ymm12 - -{vex} vpmadd52huq 320(%rcx),%ymm2,%ymm3 -{vex} vpmadd52huq 352(%rcx),%ymm2,%ymm4 -{vex} vpmadd52huq 384(%rcx),%ymm2,%ymm5 -{vex} vpmadd52huq 416(%rcx),%ymm2,%ymm6 -{vex} vpmadd52huq 448(%rcx),%ymm2,%ymm7 -{vex} vpmadd52huq 480(%rcx),%ymm2,%ymm8 -{vex} vpmadd52huq 512(%rcx),%ymm2,%ymm9 -{vex} vpmadd52huq 544(%rcx),%ymm2,%ymm10 -{vex} vpmadd52huq 576(%rcx),%ymm2,%ymm11 -{vex} vpmadd52huq 608(%rcx),%ymm2,%ymm12 - leaq 328(%rsp),%rsp - leaq 8(%r11),%r11 - decl %ebx - jne .Lloop40_1 - - vmovq %r9,%xmm0 - vpbroadcastq %xmm0,%ymm0 - vpblendd $3,%ymm0,%ymm3,%ymm3 - - leaq -640(%rsp),%rsp - vmovupd %ymm3,0(%rsp) - vmovupd %ymm4,32(%rsp) - vmovupd %ymm5,64(%rsp) - vmovupd %ymm6,96(%rsp) - vmovupd %ymm7,128(%rsp) - vmovupd %ymm8,160(%rsp) - vmovupd %ymm9,192(%rsp) - vmovupd %ymm10,224(%rsp) - vmovupd %ymm11,256(%rsp) - vmovupd %ymm12,288(%rsp) - - - - vpsrlq $52,%ymm3,%ymm3 - vpsrlq $52,%ymm4,%ymm4 - vpsrlq $52,%ymm5,%ymm5 - vpsrlq $52,%ymm6,%ymm6 - vpsrlq $52,%ymm7,%ymm7 - vpsrlq $52,%ymm8,%ymm8 - vpsrlq $52,%ymm9,%ymm9 - vpsrlq $52,%ymm10,%ymm10 - vpsrlq $52,%ymm11,%ymm11 - vpsrlq $52,%ymm12,%ymm12 - - - vpermq $144,%ymm12,%ymm12 - vpermq $3,%ymm11,%ymm13 - vblendpd $1,%ymm13,%ymm12,%ymm12 - - vpermq $144,%ymm11,%ymm11 - vpermq $3,%ymm10,%ymm13 - vblendpd $1,%ymm13,%ymm11,%ymm11 - - vpermq $144,%ymm10,%ymm10 - vpermq $3,%ymm9,%ymm13 - vblendpd $1,%ymm13,%ymm10,%ymm10 - - vpermq $144,%ymm9,%ymm9 - vpermq $3,%ymm8,%ymm13 - vblendpd $1,%ymm13,%ymm9,%ymm9 - - vpermq $144,%ymm8,%ymm8 - vpermq $3,%ymm7,%ymm13 - vblendpd $1,%ymm13,%ymm8,%ymm8 - - vpermq $144,%ymm7,%ymm7 - vpermq $3,%ymm6,%ymm13 - vblendpd $1,%ymm13,%ymm7,%ymm7 - - vpermq $144,%ymm6,%ymm6 - vpermq $3,%ymm5,%ymm13 - vblendpd $1,%ymm13,%ymm6,%ymm6 - - vpermq $144,%ymm5,%ymm5 - vpermq $3,%ymm4,%ymm13 - vblendpd $1,%ymm13,%ymm5,%ymm5 - - vpermq $144,%ymm4,%ymm4 - vpermq $3,%ymm3,%ymm13 - vblendpd $1,%ymm13,%ymm4,%ymm4 - - vpermq $144,%ymm3,%ymm3 - vpand .Lhigh64x3(%rip),%ymm3,%ymm3 - - vmovupd %ymm3,320(%rsp) - vmovupd %ymm4,352(%rsp) - vmovupd %ymm5,384(%rsp) - vmovupd %ymm6,416(%rsp) - vmovupd %ymm7,448(%rsp) - vmovupd %ymm8,480(%rsp) - vmovupd %ymm9,512(%rsp) - vmovupd %ymm10,544(%rsp) - vmovupd %ymm11,576(%rsp) - vmovupd %ymm12,608(%rsp) - - vmovupd 0(%rsp),%ymm3 - vmovupd 32(%rsp),%ymm4 - vmovupd 64(%rsp),%ymm5 - vmovupd 96(%rsp),%ymm6 - vmovupd 128(%rsp),%ymm7 - vmovupd 160(%rsp),%ymm8 - vmovupd 192(%rsp),%ymm9 - vmovupd 224(%rsp),%ymm10 - vmovupd 256(%rsp),%ymm11 - vmovupd 288(%rsp),%ymm12 - - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - - vpaddq 320(%rsp),%ymm3,%ymm3 - vpaddq 352(%rsp),%ymm4,%ymm4 - vpaddq 384(%rsp),%ymm5,%ymm5 - vpaddq 416(%rsp),%ymm6,%ymm6 - vpaddq 448(%rsp),%ymm7,%ymm7 - vpaddq 480(%rsp),%ymm8,%ymm8 - vpaddq 512(%rsp),%ymm9,%ymm9 - vpaddq 544(%rsp),%ymm10,%ymm10 - vpaddq 576(%rsp),%ymm11,%ymm11 - vpaddq 608(%rsp),%ymm12,%ymm12 - - leaq 640(%rsp),%rsp - - - - vpcmpgtq .Lmask52x4(%rip),%ymm3,%ymm13 - vmovmskpd %ymm13,%r14d - vpcmpgtq .Lmask52x4(%rip),%ymm4,%ymm13 - vmovmskpd %ymm13,%r13d - shlb $4,%r13b - orb %r13b,%r14b - - vpcmpgtq .Lmask52x4(%rip),%ymm5,%ymm13 - vmovmskpd %ymm13,%r13d - vpcmpgtq .Lmask52x4(%rip),%ymm6,%ymm13 - vmovmskpd %ymm13,%r12d - shlb $4,%r12b - orb %r12b,%r13b - - vpcmpgtq .Lmask52x4(%rip),%ymm7,%ymm13 - vmovmskpd %ymm13,%r12d - vpcmpgtq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm13,%r11d - shlb $4,%r11b - orb %r11b,%r12b - - vpcmpgtq .Lmask52x4(%rip),%ymm9,%ymm13 - vmovmskpd %ymm13,%r11d - vpcmpgtq .Lmask52x4(%rip),%ymm10,%ymm13 - vmovmskpd %ymm13,%r10d - shlb $4,%r10b - orb %r10b,%r11b - - vpcmpgtq .Lmask52x4(%rip),%ymm11,%ymm13 - vmovmskpd %ymm13,%r10d - vpcmpgtq .Lmask52x4(%rip),%ymm12,%ymm13 - vmovmskpd %ymm13,%r9d - shlb $4,%r9b - orb %r9b,%r10b - - addb %r14b,%r14b - adcb %r13b,%r13b - adcb %r12b,%r12b - adcb %r11b,%r11b - adcb %r10b,%r10b - - - vpcmpeqq .Lmask52x4(%rip),%ymm3,%ymm13 - vmovmskpd %ymm13,%r9d - vpcmpeqq .Lmask52x4(%rip),%ymm4,%ymm13 - vmovmskpd %ymm13,%r8d - shlb $4,%r8b - orb %r8b,%r9b - - vpcmpeqq .Lmask52x4(%rip),%ymm5,%ymm13 - vmovmskpd %ymm13,%r8d - vpcmpeqq .Lmask52x4(%rip),%ymm6,%ymm13 - vmovmskpd %ymm13,%edx - shlb $4,%dl - orb %dl,%r8b - - vpcmpeqq .Lmask52x4(%rip),%ymm7,%ymm13 - vmovmskpd %ymm13,%edx - vpcmpeqq .Lmask52x4(%rip),%ymm8,%ymm13 - vmovmskpd %ymm13,%ecx - shlb $4,%cl - orb %cl,%dl - - vpcmpeqq .Lmask52x4(%rip),%ymm9,%ymm13 - vmovmskpd %ymm13,%ecx - vpcmpeqq .Lmask52x4(%rip),%ymm10,%ymm13 - vmovmskpd %ymm13,%ebx - shlb $4,%bl - orb %bl,%cl - - vpcmpeqq .Lmask52x4(%rip),%ymm11,%ymm13 - vmovmskpd %ymm13,%ebx - vpcmpeqq .Lmask52x4(%rip),%ymm12,%ymm13 - vmovmskpd %ymm13,%eax - shlb $4,%al - orb %al,%bl - - addb %r9b,%r14b - adcb %r8b,%r13b - adcb %dl,%r12b - adcb %cl,%r11b - adcb %bl,%r10b - - xorb %r9b,%r14b - xorb %r8b,%r13b - xorb %dl,%r12b - xorb %cl,%r11b - xorb %bl,%r10b - - pushq %r9 - pushq %r8 - - leaq .Lkmasklut(%rip),%r8 - - movb %r14b,%r9b - andq $0xf,%r14 - vpsubq .Lmask52x4(%rip),%ymm3,%ymm13 - shlq $5,%r14 - vmovapd (%r8,%r14,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm3,%ymm3 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm4,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm4,%ymm4 - - movb %r13b,%r9b - andq $0xf,%r13 - vpsubq .Lmask52x4(%rip),%ymm5,%ymm13 - shlq $5,%r13 - vmovapd (%r8,%r13,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm5,%ymm5 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm6,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm6,%ymm6 - - movb %r12b,%r9b - andq $0xf,%r12 - vpsubq .Lmask52x4(%rip),%ymm7,%ymm13 - shlq $5,%r12 - vmovapd (%r8,%r12,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm7,%ymm7 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm8,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm8,%ymm8 - - movb %r11b,%r9b - andq $0xf,%r11 - vpsubq .Lmask52x4(%rip),%ymm9,%ymm13 - shlq $5,%r11 - vmovapd (%r8,%r11,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm9,%ymm9 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm10,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm10,%ymm10 - - movb %r10b,%r9b - andq $0xf,%r10 - vpsubq .Lmask52x4(%rip),%ymm11,%ymm13 - shlq $5,%r10 - vmovapd (%r8,%r10,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm11,%ymm11 - - shrb $4,%r9b - andq $0xf,%r9 - vpsubq .Lmask52x4(%rip),%ymm12,%ymm13 - shlq $5,%r9 - vmovapd (%r8,%r9,1),%ymm14 - vblendvpd %ymm14,%ymm13,%ymm12,%ymm12 - - popq %r8 - popq %r9 - - vpand .Lmask52x4(%rip),%ymm3,%ymm3 - vpand .Lmask52x4(%rip),%ymm4,%ymm4 - vpand .Lmask52x4(%rip),%ymm5,%ymm5 - vpand .Lmask52x4(%rip),%ymm6,%ymm6 - vpand .Lmask52x4(%rip),%ymm7,%ymm7 - vpand .Lmask52x4(%rip),%ymm8,%ymm8 - vpand .Lmask52x4(%rip),%ymm9,%ymm9 - - vpand .Lmask52x4(%rip),%ymm10,%ymm10 - vpand .Lmask52x4(%rip),%ymm11,%ymm11 - vpand .Lmask52x4(%rip),%ymm12,%ymm12 - - vmovdqu %ymm3,320(%rdi) - vmovdqu %ymm4,352(%rdi) - vmovdqu %ymm5,384(%rdi) - vmovdqu %ymm6,416(%rdi) - vmovdqu %ymm7,448(%rdi) - vmovdqu %ymm8,480(%rdi) - vmovdqu %ymm9,512(%rdi) - vmovdqu %ymm10,544(%rdi) - vmovdqu %ymm11,576(%rdi) - vmovdqu %ymm12,608(%rdi) - - vzeroupper - leaq (%rsp),%rax -.cfi_def_cfa_register %rax - movq 0(%rax),%r15 -.cfi_restore %r15 - movq 8(%rax),%r14 -.cfi_restore %r14 - movq 16(%rax),%r13 -.cfi_restore %r13 - movq 24(%rax),%r12 -.cfi_restore %r12 - movq 32(%rax),%rbp -.cfi_restore %rbp - movq 40(%rax),%rbx -.cfi_restore %rbx - leaq 48(%rax),%rsp -.cfi_def_cfa %rsp,8 -.Lossl_rsaz_amm52x40_x2_avxifma256_epilogue: - .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_rsaz_amm52x40_x2_avxifma256, .-ossl_rsaz_amm52x40_x2_avxifma256 -.text - -.align 32 .globl ossl_extract_multiplier_2x40_win5_avx -.type ossl_extract_multiplier_2x40_win5_avx,@function +.type ossl_rsaz_amm52x40_x1_avxifma256,@function +ossl_rsaz_amm52x40_x1_avxifma256: +ossl_rsaz_amm52x40_x2_avxifma256: ossl_extract_multiplier_2x40_win5_avx: -.cfi_startproc -.byte 243,15,30,250 - vmovapd .Lones(%rip),%ymm14 - vmovq %rdx,%xmm10 - vpbroadcastq %xmm10,%ymm12 - vmovq %rcx,%xmm10 - vpbroadcastq %xmm10,%ymm13 - leaq 20480(%rsi),%rax - - - movq %rsi,%r10 - - - vpxor %xmm0,%xmm0,%xmm0 - vmovapd %ymm0,%ymm1 - vmovapd %ymm0,%ymm2 - vmovapd %ymm0,%ymm3 - vmovapd %ymm0,%ymm4 - vmovapd %ymm0,%ymm5 - vmovapd %ymm0,%ymm6 - vmovapd %ymm0,%ymm7 - vmovapd %ymm0,%ymm8 - vmovapd %ymm0,%ymm9 - vpxor %ymm11,%ymm11,%ymm11 -.align 32 -.Lloop_0: - vpcmpeqq %ymm11,%ymm12,%ymm15 - vmovdqu 0(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm0,%ymm0 - vmovdqu 32(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm1,%ymm1 - vmovdqu 64(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm2,%ymm2 - vmovdqu 96(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm3,%ymm3 - vmovdqu 128(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm4,%ymm4 - vmovdqu 160(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm5,%ymm5 - vmovdqu 192(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm6,%ymm6 - vmovdqu 224(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm7,%ymm7 - vmovdqu 256(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm8,%ymm8 - vmovdqu 288(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm9,%ymm9 - vpaddq %ymm14,%ymm11,%ymm11 - addq $640,%rsi - cmpq %rsi,%rax - jne .Lloop_0 - vmovdqu %ymm0,0(%rdi) - vmovdqu %ymm1,32(%rdi) - vmovdqu %ymm2,64(%rdi) - vmovdqu %ymm3,96(%rdi) - vmovdqu %ymm4,128(%rdi) - vmovdqu %ymm5,160(%rdi) - vmovdqu %ymm6,192(%rdi) - vmovdqu %ymm7,224(%rdi) - vmovdqu %ymm8,256(%rdi) - vmovdqu %ymm9,288(%rdi) - movq %r10,%rsi - vpxor %ymm11,%ymm11,%ymm11 -.align 32 -.Lloop_320: - vpcmpeqq %ymm11,%ymm13,%ymm15 - vmovdqu 320(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm0,%ymm0 - vmovdqu 352(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm1,%ymm1 - vmovdqu 384(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm2,%ymm2 - vmovdqu 416(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm3,%ymm3 - vmovdqu 448(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm4,%ymm4 - vmovdqu 480(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm5,%ymm5 - vmovdqu 512(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm6,%ymm6 - vmovdqu 544(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm7,%ymm7 - vmovdqu 576(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm8,%ymm8 - vmovdqu 608(%rsi),%ymm10 - - vblendvpd %ymm15,%ymm10,%ymm9,%ymm9 - vpaddq %ymm14,%ymm11,%ymm11 - addq $640,%rsi - cmpq %rsi,%rax - jne .Lloop_320 - vmovdqu %ymm0,320(%rdi) - vmovdqu %ymm1,352(%rdi) - vmovdqu %ymm2,384(%rdi) - vmovdqu %ymm3,416(%rdi) - vmovdqu %ymm4,448(%rdi) - vmovdqu %ymm5,480(%rdi) - vmovdqu %ymm6,512(%rdi) - vmovdqu %ymm7,544(%rdi) - vmovdqu %ymm8,576(%rdi) - vmovdqu %ymm9,608(%rdi) - +.byte 0x0f,0x0b .byte 0xf3,0xc3 -.cfi_endproc -.size ossl_extract_multiplier_2x40_win5_avx, .-ossl_extract_multiplier_2x40_win5_avx -.section .rodata -.align 32 -.Lones: -.quad 1,1,1,1 -.Lzeros: -.quad 0,0,0,0 +.size ossl_rsaz_amm52x40_x1_avxifma256, .-ossl_rsaz_amm52x40_x1_avxifma256 .section ".note.gnu.property", "a" .p2align 3 .long 1f - 0f diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/camellia/cmll-x86_64.s b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/camellia/cmll-x86_64.s new file mode 100644 index 0000000000..4c1bc203d5 --- /dev/null +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-GCC/crypto/camellia/cmll-x86_64.s @@ -0,0 +1,1948 @@ +.text + + +.globl Camellia_EncryptBlock +.type Camellia_EncryptBlock,@function +.align 16 +Camellia_EncryptBlock: +.cfi_startproc + movl $128,%eax + subl %edi,%eax + movl $3,%edi + adcl $0,%edi + jmp .Lenc_rounds +.cfi_endproc +.size Camellia_EncryptBlock,.-Camellia_EncryptBlock + +.globl Camellia_EncryptBlock_Rounds +.type Camellia_EncryptBlock_Rounds,@function +.align 16 +.Lenc_rounds: +Camellia_EncryptBlock_Rounds: +.cfi_startproc + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-32 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-40 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-48 +.Lenc_prologue: + + + movq %rcx,%r13 + movq %rdx,%r14 + + shll $6,%edi + leaq .LCamellia_SBOX(%rip),%rbp + leaq (%r14,%rdi,1),%r15 + + movl 0(%rsi),%r8d + movl 4(%rsi),%r9d + movl 8(%rsi),%r10d + bswapl %r8d + movl 12(%rsi),%r11d + bswapl %r9d + bswapl %r10d + bswapl %r11d + + call _x86_64_Camellia_encrypt + + bswapl %r8d + bswapl %r9d + bswapl %r10d + movl %r8d,0(%r13) + bswapl %r11d + movl %r9d,4(%r13) + movl %r10d,8(%r13) + movl %r11d,12(%r13) + + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%rbp +.cfi_restore %rbp + movq 32(%rsp),%rbx +.cfi_restore %rbx + leaq 40(%rsp),%rsp +.cfi_adjust_cfa_offset -40 +.Lenc_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size Camellia_EncryptBlock_Rounds,.-Camellia_EncryptBlock_Rounds + +.type _x86_64_Camellia_encrypt,@function +.align 16 +_x86_64_Camellia_encrypt: +.cfi_startproc + xorl 0(%r14),%r9d + xorl 4(%r14),%r8d + xorl 8(%r14),%r11d + xorl 12(%r14),%r10d +.align 16 +.Leloop: + movl 16(%r14),%ebx + movl 20(%r14),%eax + + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 24(%r14),%ebx + movl 28(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 32(%r14),%ebx + movl 36(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 40(%r14),%ebx + movl 44(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 48(%r14),%ebx + movl 52(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 56(%r14),%ebx + movl 60(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 64(%r14),%ebx + movl 68(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + leaq 64(%r14),%r14 + cmpq %r15,%r14 + movl 8(%r14),%edx + movl 12(%r14),%ecx + je .Ledone + + andl %r8d,%eax + orl %r11d,%edx + roll $1,%eax + xorl %edx,%r10d + xorl %eax,%r9d + andl %r10d,%ecx + orl %r9d,%ebx + roll $1,%ecx + xorl %ebx,%r8d + xorl %ecx,%r11d + jmp .Leloop + +.align 16 +.Ledone: + xorl %r10d,%eax + xorl %r11d,%ebx + xorl %r8d,%ecx + xorl %r9d,%edx + + movl %eax,%r8d + movl %ebx,%r9d + movl %ecx,%r10d + movl %edx,%r11d + +.byte 0xf3,0xc3 +.cfi_endproc +.size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt + + +.globl Camellia_DecryptBlock +.type Camellia_DecryptBlock,@function +.align 16 +Camellia_DecryptBlock: +.cfi_startproc + movl $128,%eax + subl %edi,%eax + movl $3,%edi + adcl $0,%edi + jmp .Ldec_rounds +.cfi_endproc +.size Camellia_DecryptBlock,.-Camellia_DecryptBlock + +.globl Camellia_DecryptBlock_Rounds +.type Camellia_DecryptBlock_Rounds,@function +.align 16 +.Ldec_rounds: +Camellia_DecryptBlock_Rounds: +.cfi_startproc + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-32 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-40 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-48 +.Ldec_prologue: + + + movq %rcx,%r13 + movq %rdx,%r15 + + shll $6,%edi + leaq .LCamellia_SBOX(%rip),%rbp + leaq (%r15,%rdi,1),%r14 + + movl 0(%rsi),%r8d + movl 4(%rsi),%r9d + movl 8(%rsi),%r10d + bswapl %r8d + movl 12(%rsi),%r11d + bswapl %r9d + bswapl %r10d + bswapl %r11d + + call _x86_64_Camellia_decrypt + + bswapl %r8d + bswapl %r9d + bswapl %r10d + movl %r8d,0(%r13) + bswapl %r11d + movl %r9d,4(%r13) + movl %r10d,8(%r13) + movl %r11d,12(%r13) + + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%rbp +.cfi_restore %rbp + movq 32(%rsp),%rbx +.cfi_restore %rbx + leaq 40(%rsp),%rsp +.cfi_adjust_cfa_offset -40 +.Ldec_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size Camellia_DecryptBlock_Rounds,.-Camellia_DecryptBlock_Rounds + +.type _x86_64_Camellia_decrypt,@function +.align 16 +_x86_64_Camellia_decrypt: +.cfi_startproc + xorl 0(%r14),%r9d + xorl 4(%r14),%r8d + xorl 8(%r14),%r11d + xorl 12(%r14),%r10d +.align 16 +.Ldloop: + movl -8(%r14),%ebx + movl -4(%r14),%eax + + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl -16(%r14),%ebx + movl -12(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl -24(%r14),%ebx + movl -20(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl -32(%r14),%ebx + movl -28(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl -40(%r14),%ebx + movl -36(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl -48(%r14),%ebx + movl -44(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl -56(%r14),%ebx + movl -52(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + leaq -64(%r14),%r14 + cmpq %r15,%r14 + movl 0(%r14),%edx + movl 4(%r14),%ecx + je .Lddone + + andl %r8d,%eax + orl %r11d,%edx + roll $1,%eax + xorl %edx,%r10d + xorl %eax,%r9d + andl %r10d,%ecx + orl %r9d,%ebx + roll $1,%ecx + xorl %ebx,%r8d + xorl %ecx,%r11d + + jmp .Ldloop + +.align 16 +.Lddone: + xorl %r10d,%ecx + xorl %r11d,%edx + xorl %r8d,%eax + xorl %r9d,%ebx + + movl %ecx,%r8d + movl %edx,%r9d + movl %eax,%r10d + movl %ebx,%r11d + +.byte 0xf3,0xc3 +.cfi_endproc +.size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt +.globl Camellia_Ekeygen +.type Camellia_Ekeygen,@function +.align 16 +Camellia_Ekeygen: +.cfi_startproc + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-32 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-40 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-48 +.Lkey_prologue: + + movl %edi,%r15d + movq %rdx,%r13 + + movl 0(%rsi),%r8d + movl 4(%rsi),%r9d + movl 8(%rsi),%r10d + movl 12(%rsi),%r11d + + bswapl %r8d + bswapl %r9d + bswapl %r10d + bswapl %r11d + movl %r9d,0(%r13) + movl %r8d,4(%r13) + movl %r11d,8(%r13) + movl %r10d,12(%r13) + cmpq $128,%r15 + je .L1st128 + + movl 16(%rsi),%r8d + movl 20(%rsi),%r9d + cmpq $192,%r15 + je .L1st192 + movl 24(%rsi),%r10d + movl 28(%rsi),%r11d + jmp .L1st256 +.L1st192: + movl %r8d,%r10d + movl %r9d,%r11d + notl %r10d + notl %r11d +.L1st256: + bswapl %r8d + bswapl %r9d + bswapl %r10d + bswapl %r11d + movl %r9d,32(%r13) + movl %r8d,36(%r13) + movl %r11d,40(%r13) + movl %r10d,44(%r13) + xorl 0(%r13),%r9d + xorl 4(%r13),%r8d + xorl 8(%r13),%r11d + xorl 12(%r13),%r10d + +.L1st128: + leaq .LCamellia_SIGMA(%rip),%r14 + leaq .LCamellia_SBOX(%rip),%rbp + + movl 0(%r14),%ebx + movl 4(%r14),%eax + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 8(%r14),%ebx + movl 12(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 16(%r14),%ebx + movl 20(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + xorl 0(%r13),%r9d + xorl 4(%r13),%r8d + xorl 8(%r13),%r11d + xorl 12(%r13),%r10d + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 24(%r14),%ebx + movl 28(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 32(%r14),%ebx + movl 36(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + cmpq $128,%r15 + jne .L2nd256 + + leaq 128(%r13),%r13 + shlq $32,%r8 + shlq $32,%r10 + orq %r9,%r8 + orq %r11,%r10 + movq -128(%r13),%rax + movq -120(%r13),%rbx + movq %r8,-112(%r13) + movq %r10,-104(%r13) + movq %rax,%r11 + shlq $15,%rax + movq %rbx,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%rax + shlq $15,%rbx + orq %r11,%rbx + movq %rax,-96(%r13) + movq %rbx,-88(%r13) + movq %r8,%r11 + shlq $15,%r8 + movq %r10,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%r8 + shlq $15,%r10 + orq %r11,%r10 + movq %r8,-80(%r13) + movq %r10,-72(%r13) + movq %r8,%r11 + shlq $15,%r8 + movq %r10,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%r8 + shlq $15,%r10 + orq %r11,%r10 + movq %r8,-64(%r13) + movq %r10,-56(%r13) + movq %rax,%r11 + shlq $30,%rax + movq %rbx,%r9 + shrq $34,%r9 + shrq $34,%r11 + orq %r9,%rax + shlq $30,%rbx + orq %r11,%rbx + movq %rax,-48(%r13) + movq %rbx,-40(%r13) + movq %r8,%r11 + shlq $15,%r8 + movq %r10,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%r8 + shlq $15,%r10 + orq %r11,%r10 + movq %r8,-32(%r13) + movq %rax,%r11 + shlq $15,%rax + movq %rbx,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%rax + shlq $15,%rbx + orq %r11,%rbx + movq %rbx,-24(%r13) + movq %r8,%r11 + shlq $15,%r8 + movq %r10,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%r8 + shlq $15,%r10 + orq %r11,%r10 + movq %r8,-16(%r13) + movq %r10,-8(%r13) + movq %rax,%r11 + shlq $17,%rax + movq %rbx,%r9 + shrq $47,%r9 + shrq $47,%r11 + orq %r9,%rax + shlq $17,%rbx + orq %r11,%rbx + movq %rax,0(%r13) + movq %rbx,8(%r13) + movq %rax,%r11 + shlq $17,%rax + movq %rbx,%r9 + shrq $47,%r9 + shrq $47,%r11 + orq %r9,%rax + shlq $17,%rbx + orq %r11,%rbx + movq %rax,16(%r13) + movq %rbx,24(%r13) + movq %r8,%r11 + shlq $34,%r8 + movq %r10,%r9 + shrq $30,%r9 + shrq $30,%r11 + orq %r9,%r8 + shlq $34,%r10 + orq %r11,%r10 + movq %r8,32(%r13) + movq %r10,40(%r13) + movq %rax,%r11 + shlq $17,%rax + movq %rbx,%r9 + shrq $47,%r9 + shrq $47,%r11 + orq %r9,%rax + shlq $17,%rbx + orq %r11,%rbx + movq %rax,48(%r13) + movq %rbx,56(%r13) + movq %r8,%r11 + shlq $17,%r8 + movq %r10,%r9 + shrq $47,%r9 + shrq $47,%r11 + orq %r9,%r8 + shlq $17,%r10 + orq %r11,%r10 + movq %r8,64(%r13) + movq %r10,72(%r13) + movl $3,%eax + jmp .Ldone +.align 16 +.L2nd256: + movl %r9d,48(%r13) + movl %r8d,52(%r13) + movl %r11d,56(%r13) + movl %r10d,60(%r13) + xorl 32(%r13),%r9d + xorl 36(%r13),%r8d + xorl 40(%r13),%r11d + xorl 44(%r13),%r10d + xorl %r8d,%eax + xorl %r9d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 40(%r14),%ebx + movl 44(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r10d + xorl %ecx,%r11d + xorl %edx,%r11d + xorl %r10d,%eax + xorl %r11d,%ebx + movzbl %ah,%esi + movzbl %bl,%edi + movl 2052(%rbp,%rsi,8),%edx + movl 0(%rbp,%rdi,8),%ecx + movzbl %al,%esi + shrl $16,%eax + movzbl %bh,%edi + xorl 4(%rbp,%rsi,8),%edx + shrl $16,%ebx + xorl 4(%rbp,%rdi,8),%ecx + movzbl %ah,%esi + movzbl %bl,%edi + xorl 0(%rbp,%rsi,8),%edx + xorl 2052(%rbp,%rdi,8),%ecx + movzbl %al,%esi + movzbl %bh,%edi + xorl 2048(%rbp,%rsi,8),%edx + xorl 2048(%rbp,%rdi,8),%ecx + movl 48(%r14),%ebx + movl 52(%r14),%eax + xorl %edx,%ecx + rorl $8,%edx + xorl %ecx,%r8d + xorl %ecx,%r9d + xorl %edx,%r9d + movq 0(%r13),%rax + movq 8(%r13),%rbx + movq 32(%r13),%rcx + movq 40(%r13),%rdx + movq 48(%r13),%r14 + movq 56(%r13),%r15 + leaq 128(%r13),%r13 + shlq $32,%r8 + shlq $32,%r10 + orq %r9,%r8 + orq %r11,%r10 + movq %r8,-112(%r13) + movq %r10,-104(%r13) + movq %rcx,%r11 + shlq $15,%rcx + movq %rdx,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%rcx + shlq $15,%rdx + orq %r11,%rdx + movq %rcx,-96(%r13) + movq %rdx,-88(%r13) + movq %r14,%r11 + shlq $15,%r14 + movq %r15,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%r14 + shlq $15,%r15 + orq %r11,%r15 + movq %r14,-80(%r13) + movq %r15,-72(%r13) + movq %rcx,%r11 + shlq $15,%rcx + movq %rdx,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%rcx + shlq $15,%rdx + orq %r11,%rdx + movq %rcx,-64(%r13) + movq %rdx,-56(%r13) + movq %r8,%r11 + shlq $30,%r8 + movq %r10,%r9 + shrq $34,%r9 + shrq $34,%r11 + orq %r9,%r8 + shlq $30,%r10 + orq %r11,%r10 + movq %r8,-48(%r13) + movq %r10,-40(%r13) + movq %rax,%r11 + shlq $45,%rax + movq %rbx,%r9 + shrq $19,%r9 + shrq $19,%r11 + orq %r9,%rax + shlq $45,%rbx + orq %r11,%rbx + movq %rax,-32(%r13) + movq %rbx,-24(%r13) + movq %r14,%r11 + shlq $30,%r14 + movq %r15,%r9 + shrq $34,%r9 + shrq $34,%r11 + orq %r9,%r14 + shlq $30,%r15 + orq %r11,%r15 + movq %r14,-16(%r13) + movq %r15,-8(%r13) + movq %rax,%r11 + shlq $15,%rax + movq %rbx,%r9 + shrq $49,%r9 + shrq $49,%r11 + orq %r9,%rax + shlq $15,%rbx + orq %r11,%rbx + movq %rax,0(%r13) + movq %rbx,8(%r13) + movq %rcx,%r11 + shlq $30,%rcx + movq %rdx,%r9 + shrq $34,%r9 + shrq $34,%r11 + orq %r9,%rcx + shlq $30,%rdx + orq %r11,%rdx + movq %rcx,16(%r13) + movq %rdx,24(%r13) + movq %r8,%r11 + shlq $30,%r8 + movq %r10,%r9 + shrq $34,%r9 + shrq $34,%r11 + orq %r9,%r8 + shlq $30,%r10 + orq %r11,%r10 + movq %r8,32(%r13) + movq %r10,40(%r13) + movq %rax,%r11 + shlq $17,%rax + movq %rbx,%r9 + shrq $47,%r9 + shrq $47,%r11 + orq %r9,%rax + shlq $17,%rbx + orq %r11,%rbx + movq %rax,48(%r13) + movq %rbx,56(%r13) + movq %r14,%r11 + shlq $32,%r14 + movq %r15,%r9 + shrq $32,%r9 + shrq $32,%r11 + orq %r9,%r14 + shlq $32,%r15 + orq %r11,%r15 + movq %r14,64(%r13) + movq %r15,72(%r13) + movq %rcx,%r11 + shlq $34,%rcx + movq %rdx,%r9 + shrq $30,%r9 + shrq $30,%r11 + orq %r9,%rcx + shlq $34,%rdx + orq %r11,%rdx + movq %rcx,80(%r13) + movq %rdx,88(%r13) + movq %r14,%r11 + shlq $17,%r14 + movq %r15,%r9 + shrq $47,%r9 + shrq $47,%r11 + orq %r9,%r14 + shlq $17,%r15 + orq %r11,%r15 + movq %r14,96(%r13) + movq %r15,104(%r13) + movq %rax,%r11 + shlq $34,%rax + movq %rbx,%r9 + shrq $30,%r9 + shrq $30,%r11 + orq %r9,%rax + shlq $34,%rbx + orq %r11,%rbx + movq %rax,112(%r13) + movq %rbx,120(%r13) + movq %r8,%r11 + shlq $51,%r8 + movq %r10,%r9 + shrq $13,%r9 + shrq $13,%r11 + orq %r9,%r8 + shlq $51,%r10 + orq %r11,%r10 + movq %r8,128(%r13) + movq %r10,136(%r13) + movl $4,%eax +.Ldone: + movq 0(%rsp),%r15 +.cfi_restore %r15 + movq 8(%rsp),%r14 +.cfi_restore %r14 + movq 16(%rsp),%r13 +.cfi_restore %r13 + movq 24(%rsp),%rbp +.cfi_restore %rbp + movq 32(%rsp),%rbx +.cfi_restore %rbx + leaq 40(%rsp),%rsp +.cfi_adjust_cfa_offset -40 +.Lkey_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size Camellia_Ekeygen,.-Camellia_Ekeygen +.section .rodata +.align 64 +.LCamellia_SIGMA: +.long 0x3bcc908b, 0xa09e667f, 0x4caa73b2, 0xb67ae858 +.long 0xe94f82be, 0xc6ef372f, 0xf1d36f1c, 0x54ff53a5 +.long 0xde682d1d, 0x10e527fa, 0xb3e6c1fd, 0xb05688c2 +.long 0, 0, 0, 0 +.LCamellia_SBOX: +.long 0x70707000,0x70700070 +.long 0x82828200,0x2c2c002c +.long 0x2c2c2c00,0xb3b300b3 +.long 0xececec00,0xc0c000c0 +.long 0xb3b3b300,0xe4e400e4 +.long 0x27272700,0x57570057 +.long 0xc0c0c000,0xeaea00ea +.long 0xe5e5e500,0xaeae00ae +.long 0xe4e4e400,0x23230023 +.long 0x85858500,0x6b6b006b +.long 0x57575700,0x45450045 +.long 0x35353500,0xa5a500a5 +.long 0xeaeaea00,0xeded00ed +.long 0x0c0c0c00,0x4f4f004f +.long 0xaeaeae00,0x1d1d001d +.long 0x41414100,0x92920092 +.long 0x23232300,0x86860086 +.long 0xefefef00,0xafaf00af +.long 0x6b6b6b00,0x7c7c007c +.long 0x93939300,0x1f1f001f +.long 0x45454500,0x3e3e003e +.long 0x19191900,0xdcdc00dc +.long 0xa5a5a500,0x5e5e005e +.long 0x21212100,0x0b0b000b +.long 0xededed00,0xa6a600a6 +.long 0x0e0e0e00,0x39390039 +.long 0x4f4f4f00,0xd5d500d5 +.long 0x4e4e4e00,0x5d5d005d +.long 0x1d1d1d00,0xd9d900d9 +.long 0x65656500,0x5a5a005a +.long 0x92929200,0x51510051 +.long 0xbdbdbd00,0x6c6c006c +.long 0x86868600,0x8b8b008b +.long 0xb8b8b800,0x9a9a009a +.long 0xafafaf00,0xfbfb00fb +.long 0x8f8f8f00,0xb0b000b0 +.long 0x7c7c7c00,0x74740074 +.long 0xebebeb00,0x2b2b002b +.long 0x1f1f1f00,0xf0f000f0 +.long 0xcecece00,0x84840084 +.long 0x3e3e3e00,0xdfdf00df +.long 0x30303000,0xcbcb00cb +.long 0xdcdcdc00,0x34340034 +.long 0x5f5f5f00,0x76760076 +.long 0x5e5e5e00,0x6d6d006d +.long 0xc5c5c500,0xa9a900a9 +.long 0x0b0b0b00,0xd1d100d1 +.long 0x1a1a1a00,0x04040004 +.long 0xa6a6a600,0x14140014 +.long 0xe1e1e100,0x3a3a003a +.long 0x39393900,0xdede00de +.long 0xcacaca00,0x11110011 +.long 0xd5d5d500,0x32320032 +.long 0x47474700,0x9c9c009c +.long 0x5d5d5d00,0x53530053 +.long 0x3d3d3d00,0xf2f200f2 +.long 0xd9d9d900,0xfefe00fe +.long 0x01010100,0xcfcf00cf +.long 0x5a5a5a00,0xc3c300c3 +.long 0xd6d6d600,0x7a7a007a +.long 0x51515100,0x24240024 +.long 0x56565600,0xe8e800e8 +.long 0x6c6c6c00,0x60600060 +.long 0x4d4d4d00,0x69690069 +.long 0x8b8b8b00,0xaaaa00aa +.long 0x0d0d0d00,0xa0a000a0 +.long 0x9a9a9a00,0xa1a100a1 +.long 0x66666600,0x62620062 +.long 0xfbfbfb00,0x54540054 +.long 0xcccccc00,0x1e1e001e +.long 0xb0b0b000,0xe0e000e0 +.long 0x2d2d2d00,0x64640064 +.long 0x74747400,0x10100010 +.long 0x12121200,0x00000000 +.long 0x2b2b2b00,0xa3a300a3 +.long 0x20202000,0x75750075 +.long 0xf0f0f000,0x8a8a008a +.long 0xb1b1b100,0xe6e600e6 +.long 0x84848400,0x09090009 +.long 0x99999900,0xdddd00dd +.long 0xdfdfdf00,0x87870087 +.long 0x4c4c4c00,0x83830083 +.long 0xcbcbcb00,0xcdcd00cd +.long 0xc2c2c200,0x90900090 +.long 0x34343400,0x73730073 +.long 0x7e7e7e00,0xf6f600f6 +.long 0x76767600,0x9d9d009d +.long 0x05050500,0xbfbf00bf +.long 0x6d6d6d00,0x52520052 +.long 0xb7b7b700,0xd8d800d8 +.long 0xa9a9a900,0xc8c800c8 +.long 0x31313100,0xc6c600c6 +.long 0xd1d1d100,0x81810081 +.long 0x17171700,0x6f6f006f +.long 0x04040400,0x13130013 +.long 0xd7d7d700,0x63630063 +.long 0x14141400,0xe9e900e9 +.long 0x58585800,0xa7a700a7 +.long 0x3a3a3a00,0x9f9f009f +.long 0x61616100,0xbcbc00bc +.long 0xdedede00,0x29290029 +.long 0x1b1b1b00,0xf9f900f9 +.long 0x11111100,0x2f2f002f +.long 0x1c1c1c00,0xb4b400b4 +.long 0x32323200,0x78780078 +.long 0x0f0f0f00,0x06060006 +.long 0x9c9c9c00,0xe7e700e7 +.long 0x16161600,0x71710071 +.long 0x53535300,0xd4d400d4 +.long 0x18181800,0xabab00ab +.long 0xf2f2f200,0x88880088 +.long 0x22222200,0x8d8d008d +.long 0xfefefe00,0x72720072 +.long 0x44444400,0xb9b900b9 +.long 0xcfcfcf00,0xf8f800f8 +.long 0xb2b2b200,0xacac00ac +.long 0xc3c3c300,0x36360036 +.long 0xb5b5b500,0x2a2a002a +.long 0x7a7a7a00,0x3c3c003c +.long 0x91919100,0xf1f100f1 +.long 0x24242400,0x40400040 +.long 0x08080800,0xd3d300d3 +.long 0xe8e8e800,0xbbbb00bb +.long 0xa8a8a800,0x43430043 +.long 0x60606000,0x15150015 +.long 0xfcfcfc00,0xadad00ad +.long 0x69696900,0x77770077 +.long 0x50505000,0x80800080 +.long 0xaaaaaa00,0x82820082 +.long 0xd0d0d000,0xecec00ec +.long 0xa0a0a000,0x27270027 +.long 0x7d7d7d00,0xe5e500e5 +.long 0xa1a1a100,0x85850085 +.long 0x89898900,0x35350035 +.long 0x62626200,0x0c0c000c +.long 0x97979700,0x41410041 +.long 0x54545400,0xefef00ef +.long 0x5b5b5b00,0x93930093 +.long 0x1e1e1e00,0x19190019 +.long 0x95959500,0x21210021 +.long 0xe0e0e000,0x0e0e000e +.long 0xffffff00,0x4e4e004e +.long 0x64646400,0x65650065 +.long 0xd2d2d200,0xbdbd00bd +.long 0x10101000,0xb8b800b8 +.long 0xc4c4c400,0x8f8f008f +.long 0x00000000,0xebeb00eb +.long 0x48484800,0xcece00ce +.long 0xa3a3a300,0x30300030 +.long 0xf7f7f700,0x5f5f005f +.long 0x75757500,0xc5c500c5 +.long 0xdbdbdb00,0x1a1a001a +.long 0x8a8a8a00,0xe1e100e1 +.long 0x03030300,0xcaca00ca +.long 0xe6e6e600,0x47470047 +.long 0xdadada00,0x3d3d003d +.long 0x09090900,0x01010001 +.long 0x3f3f3f00,0xd6d600d6 +.long 0xdddddd00,0x56560056 +.long 0x94949400,0x4d4d004d +.long 0x87878700,0x0d0d000d +.long 0x5c5c5c00,0x66660066 +.long 0x83838300,0xcccc00cc +.long 0x02020200,0x2d2d002d +.long 0xcdcdcd00,0x12120012 +.long 0x4a4a4a00,0x20200020 +.long 0x90909000,0xb1b100b1 +.long 0x33333300,0x99990099 +.long 0x73737300,0x4c4c004c +.long 0x67676700,0xc2c200c2 +.long 0xf6f6f600,0x7e7e007e +.long 0xf3f3f300,0x05050005 +.long 0x9d9d9d00,0xb7b700b7 +.long 0x7f7f7f00,0x31310031 +.long 0xbfbfbf00,0x17170017 +.long 0xe2e2e200,0xd7d700d7 +.long 0x52525200,0x58580058 +.long 0x9b9b9b00,0x61610061 +.long 0xd8d8d800,0x1b1b001b +.long 0x26262600,0x1c1c001c +.long 0xc8c8c800,0x0f0f000f +.long 0x37373700,0x16160016 +.long 0xc6c6c600,0x18180018 +.long 0x3b3b3b00,0x22220022 +.long 0x81818100,0x44440044 +.long 0x96969600,0xb2b200b2 +.long 0x6f6f6f00,0xb5b500b5 +.long 0x4b4b4b00,0x91910091 +.long 0x13131300,0x08080008 +.long 0xbebebe00,0xa8a800a8 +.long 0x63636300,0xfcfc00fc +.long 0x2e2e2e00,0x50500050 +.long 0xe9e9e900,0xd0d000d0 +.long 0x79797900,0x7d7d007d +.long 0xa7a7a700,0x89890089 +.long 0x8c8c8c00,0x97970097 +.long 0x9f9f9f00,0x5b5b005b +.long 0x6e6e6e00,0x95950095 +.long 0xbcbcbc00,0xffff00ff +.long 0x8e8e8e00,0xd2d200d2 +.long 0x29292900,0xc4c400c4 +.long 0xf5f5f500,0x48480048 +.long 0xf9f9f900,0xf7f700f7 +.long 0xb6b6b600,0xdbdb00db +.long 0x2f2f2f00,0x03030003 +.long 0xfdfdfd00,0xdada00da +.long 0xb4b4b400,0x3f3f003f +.long 0x59595900,0x94940094 +.long 0x78787800,0x5c5c005c +.long 0x98989800,0x02020002 +.long 0x06060600,0x4a4a004a +.long 0x6a6a6a00,0x33330033 +.long 0xe7e7e700,0x67670067 +.long 0x46464600,0xf3f300f3 +.long 0x71717100,0x7f7f007f +.long 0xbababa00,0xe2e200e2 +.long 0xd4d4d400,0x9b9b009b +.long 0x25252500,0x26260026 +.long 0xababab00,0x37370037 +.long 0x42424200,0x3b3b003b +.long 0x88888800,0x96960096 +.long 0xa2a2a200,0x4b4b004b +.long 0x8d8d8d00,0xbebe00be +.long 0xfafafa00,0x2e2e002e +.long 0x72727200,0x79790079 +.long 0x07070700,0x8c8c008c +.long 0xb9b9b900,0x6e6e006e +.long 0x55555500,0x8e8e008e +.long 0xf8f8f800,0xf5f500f5 +.long 0xeeeeee00,0xb6b600b6 +.long 0xacacac00,0xfdfd00fd +.long 0x0a0a0a00,0x59590059 +.long 0x36363600,0x98980098 +.long 0x49494900,0x6a6a006a +.long 0x2a2a2a00,0x46460046 +.long 0x68686800,0xbaba00ba +.long 0x3c3c3c00,0x25250025 +.long 0x38383800,0x42420042 +.long 0xf1f1f100,0xa2a200a2 +.long 0xa4a4a400,0xfafa00fa +.long 0x40404000,0x07070007 +.long 0x28282800,0x55550055 +.long 0xd3d3d300,0xeeee00ee +.long 0x7b7b7b00,0x0a0a000a +.long 0xbbbbbb00,0x49490049 +.long 0xc9c9c900,0x68680068 +.long 0x43434300,0x38380038 +.long 0xc1c1c100,0xa4a400a4 +.long 0x15151500,0x28280028 +.long 0xe3e3e300,0x7b7b007b +.long 0xadadad00,0xc9c900c9 +.long 0xf4f4f400,0xc1c100c1 +.long 0x77777700,0xe3e300e3 +.long 0xc7c7c700,0xf4f400f4 +.long 0x80808000,0xc7c700c7 +.long 0x9e9e9e00,0x9e9e009e +.long 0x00e0e0e0,0x38003838 +.long 0x00050505,0x41004141 +.long 0x00585858,0x16001616 +.long 0x00d9d9d9,0x76007676 +.long 0x00676767,0xd900d9d9 +.long 0x004e4e4e,0x93009393 +.long 0x00818181,0x60006060 +.long 0x00cbcbcb,0xf200f2f2 +.long 0x00c9c9c9,0x72007272 +.long 0x000b0b0b,0xc200c2c2 +.long 0x00aeaeae,0xab00abab +.long 0x006a6a6a,0x9a009a9a +.long 0x00d5d5d5,0x75007575 +.long 0x00181818,0x06000606 +.long 0x005d5d5d,0x57005757 +.long 0x00828282,0xa000a0a0 +.long 0x00464646,0x91009191 +.long 0x00dfdfdf,0xf700f7f7 +.long 0x00d6d6d6,0xb500b5b5 +.long 0x00272727,0xc900c9c9 +.long 0x008a8a8a,0xa200a2a2 +.long 0x00323232,0x8c008c8c +.long 0x004b4b4b,0xd200d2d2 +.long 0x00424242,0x90009090 +.long 0x00dbdbdb,0xf600f6f6 +.long 0x001c1c1c,0x07000707 +.long 0x009e9e9e,0xa700a7a7 +.long 0x009c9c9c,0x27002727 +.long 0x003a3a3a,0x8e008e8e +.long 0x00cacaca,0xb200b2b2 +.long 0x00252525,0x49004949 +.long 0x007b7b7b,0xde00dede +.long 0x000d0d0d,0x43004343 +.long 0x00717171,0x5c005c5c +.long 0x005f5f5f,0xd700d7d7 +.long 0x001f1f1f,0xc700c7c7 +.long 0x00f8f8f8,0x3e003e3e +.long 0x00d7d7d7,0xf500f5f5 +.long 0x003e3e3e,0x8f008f8f +.long 0x009d9d9d,0x67006767 +.long 0x007c7c7c,0x1f001f1f +.long 0x00606060,0x18001818 +.long 0x00b9b9b9,0x6e006e6e +.long 0x00bebebe,0xaf00afaf +.long 0x00bcbcbc,0x2f002f2f +.long 0x008b8b8b,0xe200e2e2 +.long 0x00161616,0x85008585 +.long 0x00343434,0x0d000d0d +.long 0x004d4d4d,0x53005353 +.long 0x00c3c3c3,0xf000f0f0 +.long 0x00727272,0x9c009c9c +.long 0x00959595,0x65006565 +.long 0x00ababab,0xea00eaea +.long 0x008e8e8e,0xa300a3a3 +.long 0x00bababa,0xae00aeae +.long 0x007a7a7a,0x9e009e9e +.long 0x00b3b3b3,0xec00ecec +.long 0x00020202,0x80008080 +.long 0x00b4b4b4,0x2d002d2d +.long 0x00adadad,0x6b006b6b +.long 0x00a2a2a2,0xa800a8a8 +.long 0x00acacac,0x2b002b2b +.long 0x00d8d8d8,0x36003636 +.long 0x009a9a9a,0xa600a6a6 +.long 0x00171717,0xc500c5c5 +.long 0x001a1a1a,0x86008686 +.long 0x00353535,0x4d004d4d +.long 0x00cccccc,0x33003333 +.long 0x00f7f7f7,0xfd00fdfd +.long 0x00999999,0x66006666 +.long 0x00616161,0x58005858 +.long 0x005a5a5a,0x96009696 +.long 0x00e8e8e8,0x3a003a3a +.long 0x00242424,0x09000909 +.long 0x00565656,0x95009595 +.long 0x00404040,0x10001010 +.long 0x00e1e1e1,0x78007878 +.long 0x00636363,0xd800d8d8 +.long 0x00090909,0x42004242 +.long 0x00333333,0xcc00cccc +.long 0x00bfbfbf,0xef00efef +.long 0x00989898,0x26002626 +.long 0x00979797,0xe500e5e5 +.long 0x00858585,0x61006161 +.long 0x00686868,0x1a001a1a +.long 0x00fcfcfc,0x3f003f3f +.long 0x00ececec,0x3b003b3b +.long 0x000a0a0a,0x82008282 +.long 0x00dadada,0xb600b6b6 +.long 0x006f6f6f,0xdb00dbdb +.long 0x00535353,0xd400d4d4 +.long 0x00626262,0x98009898 +.long 0x00a3a3a3,0xe800e8e8 +.long 0x002e2e2e,0x8b008b8b +.long 0x00080808,0x02000202 +.long 0x00afafaf,0xeb00ebeb +.long 0x00282828,0x0a000a0a +.long 0x00b0b0b0,0x2c002c2c +.long 0x00747474,0x1d001d1d +.long 0x00c2c2c2,0xb000b0b0 +.long 0x00bdbdbd,0x6f006f6f +.long 0x00363636,0x8d008d8d +.long 0x00222222,0x88008888 +.long 0x00383838,0x0e000e0e +.long 0x00646464,0x19001919 +.long 0x001e1e1e,0x87008787 +.long 0x00393939,0x4e004e4e +.long 0x002c2c2c,0x0b000b0b +.long 0x00a6a6a6,0xa900a9a9 +.long 0x00303030,0x0c000c0c +.long 0x00e5e5e5,0x79007979 +.long 0x00444444,0x11001111 +.long 0x00fdfdfd,0x7f007f7f +.long 0x00888888,0x22002222 +.long 0x009f9f9f,0xe700e7e7 +.long 0x00656565,0x59005959 +.long 0x00878787,0xe100e1e1 +.long 0x006b6b6b,0xda00dada +.long 0x00f4f4f4,0x3d003d3d +.long 0x00232323,0xc800c8c8 +.long 0x00484848,0x12001212 +.long 0x00101010,0x04000404 +.long 0x00d1d1d1,0x74007474 +.long 0x00515151,0x54005454 +.long 0x00c0c0c0,0x30003030 +.long 0x00f9f9f9,0x7e007e7e +.long 0x00d2d2d2,0xb400b4b4 +.long 0x00a0a0a0,0x28002828 +.long 0x00555555,0x55005555 +.long 0x00a1a1a1,0x68006868 +.long 0x00414141,0x50005050 +.long 0x00fafafa,0xbe00bebe +.long 0x00434343,0xd000d0d0 +.long 0x00131313,0xc400c4c4 +.long 0x00c4c4c4,0x31003131 +.long 0x002f2f2f,0xcb00cbcb +.long 0x00a8a8a8,0x2a002a2a +.long 0x00b6b6b6,0xad00adad +.long 0x003c3c3c,0x0f000f0f +.long 0x002b2b2b,0xca00caca +.long 0x00c1c1c1,0x70007070 +.long 0x00ffffff,0xff00ffff +.long 0x00c8c8c8,0x32003232 +.long 0x00a5a5a5,0x69006969 +.long 0x00202020,0x08000808 +.long 0x00898989,0x62006262 +.long 0x00000000,0x00000000 +.long 0x00909090,0x24002424 +.long 0x00474747,0xd100d1d1 +.long 0x00efefef,0xfb00fbfb +.long 0x00eaeaea,0xba00baba +.long 0x00b7b7b7,0xed00eded +.long 0x00151515,0x45004545 +.long 0x00060606,0x81008181 +.long 0x00cdcdcd,0x73007373 +.long 0x00b5b5b5,0x6d006d6d +.long 0x00121212,0x84008484 +.long 0x007e7e7e,0x9f009f9f +.long 0x00bbbbbb,0xee00eeee +.long 0x00292929,0x4a004a4a +.long 0x000f0f0f,0xc300c3c3 +.long 0x00b8b8b8,0x2e002e2e +.long 0x00070707,0xc100c1c1 +.long 0x00040404,0x01000101 +.long 0x009b9b9b,0xe600e6e6 +.long 0x00949494,0x25002525 +.long 0x00212121,0x48004848 +.long 0x00666666,0x99009999 +.long 0x00e6e6e6,0xb900b9b9 +.long 0x00cecece,0xb300b3b3 +.long 0x00ededed,0x7b007b7b +.long 0x00e7e7e7,0xf900f9f9 +.long 0x003b3b3b,0xce00cece +.long 0x00fefefe,0xbf00bfbf +.long 0x007f7f7f,0xdf00dfdf +.long 0x00c5c5c5,0x71007171 +.long 0x00a4a4a4,0x29002929 +.long 0x00373737,0xcd00cdcd +.long 0x00b1b1b1,0x6c006c6c +.long 0x004c4c4c,0x13001313 +.long 0x00919191,0x64006464 +.long 0x006e6e6e,0x9b009b9b +.long 0x008d8d8d,0x63006363 +.long 0x00767676,0x9d009d9d +.long 0x00030303,0xc000c0c0 +.long 0x002d2d2d,0x4b004b4b +.long 0x00dedede,0xb700b7b7 +.long 0x00969696,0xa500a5a5 +.long 0x00262626,0x89008989 +.long 0x007d7d7d,0x5f005f5f +.long 0x00c6c6c6,0xb100b1b1 +.long 0x005c5c5c,0x17001717 +.long 0x00d3d3d3,0xf400f4f4 +.long 0x00f2f2f2,0xbc00bcbc +.long 0x004f4f4f,0xd300d3d3 +.long 0x00191919,0x46004646 +.long 0x003f3f3f,0xcf00cfcf +.long 0x00dcdcdc,0x37003737 +.long 0x00797979,0x5e005e5e +.long 0x001d1d1d,0x47004747 +.long 0x00525252,0x94009494 +.long 0x00ebebeb,0xfa00fafa +.long 0x00f3f3f3,0xfc00fcfc +.long 0x006d6d6d,0x5b005b5b +.long 0x005e5e5e,0x97009797 +.long 0x00fbfbfb,0xfe00fefe +.long 0x00696969,0x5a005a5a +.long 0x00b2b2b2,0xac00acac +.long 0x00f0f0f0,0x3c003c3c +.long 0x00313131,0x4c004c4c +.long 0x000c0c0c,0x03000303 +.long 0x00d4d4d4,0x35003535 +.long 0x00cfcfcf,0xf300f3f3 +.long 0x008c8c8c,0x23002323 +.long 0x00e2e2e2,0xb800b8b8 +.long 0x00757575,0x5d005d5d +.long 0x00a9a9a9,0x6a006a6a +.long 0x004a4a4a,0x92009292 +.long 0x00575757,0xd500d5d5 +.long 0x00848484,0x21002121 +.long 0x00111111,0x44004444 +.long 0x00454545,0x51005151 +.long 0x001b1b1b,0xc600c6c6 +.long 0x00f5f5f5,0x7d007d7d +.long 0x00e4e4e4,0x39003939 +.long 0x000e0e0e,0x83008383 +.long 0x00737373,0xdc00dcdc +.long 0x00aaaaaa,0xaa00aaaa +.long 0x00f1f1f1,0x7c007c7c +.long 0x00dddddd,0x77007777 +.long 0x00595959,0x56005656 +.long 0x00141414,0x05000505 +.long 0x006c6c6c,0x1b001b1b +.long 0x00929292,0xa400a4a4 +.long 0x00545454,0x15001515 +.long 0x00d0d0d0,0x34003434 +.long 0x00787878,0x1e001e1e +.long 0x00707070,0x1c001c1c +.long 0x00e3e3e3,0xf800f8f8 +.long 0x00494949,0x52005252 +.long 0x00808080,0x20002020 +.long 0x00505050,0x14001414 +.long 0x00a7a7a7,0xe900e9e9 +.long 0x00f6f6f6,0xbd00bdbd +.long 0x00777777,0xdd00dddd +.long 0x00939393,0xe400e4e4 +.long 0x00868686,0xa100a1a1 +.long 0x00838383,0xe000e0e0 +.long 0x002a2a2a,0x8a008a8a +.long 0x00c7c7c7,0xf100f1f1 +.long 0x005b5b5b,0xd600d6d6 +.long 0x00e9e9e9,0x7a007a7a +.long 0x00eeeeee,0xbb00bbbb +.long 0x008f8f8f,0xe300e3e3 +.long 0x00010101,0x40004040 +.long 0x003d3d3d,0x4f004f4f +.text +.globl Camellia_cbc_encrypt +.type Camellia_cbc_encrypt,@function +.align 16 +Camellia_cbc_encrypt: +.cfi_startproc +.byte 243,15,30,250 + cmpq $0,%rdx + je .Lcbc_abort + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 +.Lcbc_prologue: + + movq %rsp,%rbp +.cfi_def_cfa_register %rbp + subq $64,%rsp + andq $-64,%rsp + + + + leaq -64-63(%rcx),%r10 + subq %rsp,%r10 + negq %r10 + andq $0x3C0,%r10 + subq %r10,%rsp + + + movq %rdi,%r12 + movq %rsi,%r13 + movq %r8,%rbx + movq %rcx,%r14 + movl 272(%rcx),%r15d + + movq %r8,40(%rsp) + movq %rbp,48(%rsp) +.cfi_escape 0x0f,0x05,0x77,0x30,0x06,0x23,0x38 + +.Lcbc_body: + leaq .LCamellia_SBOX(%rip),%rbp + + movl $32,%ecx +.align 4 +.Lcbc_prefetch_sbox: + movq 0(%rbp),%rax + movq 32(%rbp),%rsi + movq 64(%rbp),%rdi + movq 96(%rbp),%r11 + leaq 128(%rbp),%rbp + loop .Lcbc_prefetch_sbox + subq $4096,%rbp + shlq $6,%r15 + movq %rdx,%rcx + leaq (%r14,%r15,1),%r15 + + cmpl $0,%r9d + je .LCBC_DECRYPT + + andq $-16,%rdx + andq $15,%rcx + leaq (%r12,%rdx,1),%rdx + movq %r14,0(%rsp) + movq %rdx,8(%rsp) + movq %rcx,16(%rsp) + + cmpq %r12,%rdx + movl 0(%rbx),%r8d + movl 4(%rbx),%r9d + movl 8(%rbx),%r10d + movl 12(%rbx),%r11d + je .Lcbc_enc_tail + jmp .Lcbc_eloop + +.align 16 +.Lcbc_eloop: + xorl 0(%r12),%r8d + xorl 4(%r12),%r9d + xorl 8(%r12),%r10d + bswapl %r8d + xorl 12(%r12),%r11d + bswapl %r9d + bswapl %r10d + bswapl %r11d + + call _x86_64_Camellia_encrypt + + movq 0(%rsp),%r14 + bswapl %r8d + movq 8(%rsp),%rdx + bswapl %r9d + movq 16(%rsp),%rcx + bswapl %r10d + movl %r8d,0(%r13) + bswapl %r11d + movl %r9d,4(%r13) + movl %r10d,8(%r13) + leaq 16(%r12),%r12 + movl %r11d,12(%r13) + cmpq %rdx,%r12 + leaq 16(%r13),%r13 + jne .Lcbc_eloop + + cmpq $0,%rcx + jne .Lcbc_enc_tail + + movq 40(%rsp),%r13 + movl %r8d,0(%r13) + movl %r9d,4(%r13) + movl %r10d,8(%r13) + movl %r11d,12(%r13) + jmp .Lcbc_done + +.align 16 +.Lcbc_enc_tail: + xorq %rax,%rax + movq %rax,0+24(%rsp) + movq %rax,8+24(%rsp) + movq %rax,16(%rsp) + +.Lcbc_enc_pushf: + pushfq + cld + movq %r12,%rsi + leaq 8+24(%rsp),%rdi +.long 0x9066A4F3 + popfq +.Lcbc_enc_popf: + + leaq 24(%rsp),%r12 + leaq 16+24(%rsp),%rax + movq %rax,8(%rsp) + jmp .Lcbc_eloop + +.align 16 +.LCBC_DECRYPT: + xchgq %r14,%r15 + addq $15,%rdx + andq $15,%rcx + andq $-16,%rdx + movq %r14,0(%rsp) + leaq (%r12,%rdx,1),%rdx + movq %rdx,8(%rsp) + movq %rcx,16(%rsp) + + movq (%rbx),%rax + movq 8(%rbx),%rbx + jmp .Lcbc_dloop +.align 16 +.Lcbc_dloop: + movl 0(%r12),%r8d + movl 4(%r12),%r9d + movl 8(%r12),%r10d + bswapl %r8d + movl 12(%r12),%r11d + bswapl %r9d + movq %rax,0+24(%rsp) + bswapl %r10d + movq %rbx,8+24(%rsp) + bswapl %r11d + + call _x86_64_Camellia_decrypt + + movq 0(%rsp),%r14 + movq 8(%rsp),%rdx + movq 16(%rsp),%rcx + + bswapl %r8d + movq (%r12),%rax + bswapl %r9d + movq 8(%r12),%rbx + bswapl %r10d + xorl 0+24(%rsp),%r8d + bswapl %r11d + xorl 4+24(%rsp),%r9d + xorl 8+24(%rsp),%r10d + leaq 16(%r12),%r12 + xorl 12+24(%rsp),%r11d + cmpq %rdx,%r12 + je .Lcbc_ddone + + movl %r8d,0(%r13) + movl %r9d,4(%r13) + movl %r10d,8(%r13) + movl %r11d,12(%r13) + + leaq 16(%r13),%r13 + jmp .Lcbc_dloop + +.align 16 +.Lcbc_ddone: + movq 40(%rsp),%rdx + cmpq $0,%rcx + jne .Lcbc_dec_tail + + movl %r8d,0(%r13) + movl %r9d,4(%r13) + movl %r10d,8(%r13) + movl %r11d,12(%r13) + + movq %rax,(%rdx) + movq %rbx,8(%rdx) + jmp .Lcbc_done +.align 16 +.Lcbc_dec_tail: + movl %r8d,0+24(%rsp) + movl %r9d,4+24(%rsp) + movl %r10d,8+24(%rsp) + movl %r11d,12+24(%rsp) + +.Lcbc_dec_pushf: + pushfq + cld + leaq 8+24(%rsp),%rsi + leaq (%r13),%rdi +.long 0x9066A4F3 + popfq +.Lcbc_dec_popf: + + movq %rax,(%rdx) + movq %rbx,8(%rdx) + jmp .Lcbc_done + +.align 16 +.Lcbc_done: + movq 48(%rsp),%rcx +.cfi_def_cfa %rcx,56 + movq 0(%rcx),%r15 +.cfi_restore %r15 + movq 8(%rcx),%r14 +.cfi_restore %r14 + movq 16(%rcx),%r13 +.cfi_restore %r13 + movq 24(%rcx),%r12 +.cfi_restore %r12 + movq 32(%rcx),%rbp +.cfi_restore %rbp + movq 40(%rcx),%rbx +.cfi_restore %rbx + leaq 48(%rcx),%rsp +.cfi_def_cfa %rsp,8 +.Lcbc_abort: + .byte 0xf3,0xc3 +.cfi_endproc +.size Camellia_cbc_encrypt,.-Camellia_cbc_encrypt + +.byte 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54,95,54,52,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 + .section ".note.gnu.property", "a" + .p2align 3 + .long 1f - 0f + .long 4f - 1f + .long 5 +0: + # "GNU" encoded with .byte, since .asciz isn't supported + # on Solaris. + .byte 0x47 + .byte 0x4e + .byte 0x55 + .byte 0 +1: + .p2align 3 + .long 0xc0000002 + .long 3f - 2f +2: + .long 3 +3: + .p2align 3 +4: diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm index 47930a955e..8da9e018a1 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-2k-avxifma.nasm @@ -4,1273 +4,21 @@ default rel %define ZMMWORD section .text code align=64 -EXTERN OPENSSL_ia32cap_P + global ossl_rsaz_avxifma_eligible -ALIGN 32 ossl_rsaz_avxifma_eligible: - mov ecx,DWORD[((OPENSSL_ia32cap_P+20))] xor eax,eax - and ecx,8388608 - cmp ecx,8388608 - cmove eax,ecx DB 0F3h,0C3h ;repret -section .text code align=64 - global ossl_rsaz_amm52x20_x1_avxifma256 - -ALIGN 32 -ossl_rsaz_amm52x20_x1_avxifma256: - mov QWORD[8+rsp],rdi ;WIN64 prologue - mov QWORD[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_ossl_rsaz_amm52x20_x1_avxifma256: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - mov r8,QWORD[40+rsp] - - - -DB 243,15,30,250 - push rbx - - push rbp - - push r12 - - push r13 - - push r14 - - push r15 - -$L$ossl_rsaz_amm52x20_x1_avxifma256_body: - - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - - xor r9d,r9d - - mov r11,rdx - mov rax,0xfffffffffffff - - - mov ebx,5 - -ALIGN 32 -$L$loop5: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-168))+rsp] -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[128+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm5 - vmovdqu YMMWORD[64+rsp],ymm6 - vmovdqu YMMWORD[96+rsp],ymm7 - vmovdqu YMMWORD[128+rsp],ymm8 - mov QWORD[160+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm5,YMMWORD[40+rsp] - vmovdqu ymm6,YMMWORD[72+rsp] - vmovdqu ymm7,YMMWORD[104+rsp] - vmovdqu ymm8,YMMWORD[136+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[128+rcx] - lea rsp,[168+rsp] - mov r13,QWORD[8+r11] - - vpbroadcastq ymm1,QWORD[8+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-168))+rsp] -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[128+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm5 - vmovdqu YMMWORD[64+rsp],ymm6 - vmovdqu YMMWORD[96+rsp],ymm7 - vmovdqu YMMWORD[128+rsp],ymm8 - mov QWORD[160+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm5,YMMWORD[40+rsp] - vmovdqu ymm6,YMMWORD[72+rsp] - vmovdqu ymm7,YMMWORD[104+rsp] - vmovdqu ymm8,YMMWORD[136+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[128+rcx] - lea rsp,[168+rsp] - mov r13,QWORD[16+r11] - - vpbroadcastq ymm1,QWORD[16+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-168))+rsp] -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[128+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm5 - vmovdqu YMMWORD[64+rsp],ymm6 - vmovdqu YMMWORD[96+rsp],ymm7 - vmovdqu YMMWORD[128+rsp],ymm8 - mov QWORD[160+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm5,YMMWORD[40+rsp] - vmovdqu ymm6,YMMWORD[72+rsp] - vmovdqu ymm7,YMMWORD[104+rsp] - vmovdqu ymm8,YMMWORD[136+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[128+rcx] - lea rsp,[168+rsp] - mov r13,QWORD[24+r11] - - vpbroadcastq ymm1,QWORD[24+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-168))+rsp] -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[128+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm5 - vmovdqu YMMWORD[64+rsp],ymm6 - vmovdqu YMMWORD[96+rsp],ymm7 - vmovdqu YMMWORD[128+rsp],ymm8 - mov QWORD[160+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm5,YMMWORD[40+rsp] - vmovdqu ymm6,YMMWORD[72+rsp] - vmovdqu ymm7,YMMWORD[104+rsp] - vmovdqu ymm8,YMMWORD[136+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[128+rcx] - lea rsp,[168+rsp] - lea r11,[32+r11] - dec ebx - jne NEAR $L$loop5 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - - - vpsrlq ymm0,ymm3,52 - vpsrlq ymm1,ymm5,52 - vpsrlq ymm2,ymm6,52 - vpsrlq ymm13,ymm7,52 - vpsrlq ymm14,ymm8,52 - - - vpermq ymm14,ymm14,144 - vpermq ymm15,ymm13,3 - vblendpd ymm14,ymm14,ymm15,1 - - vpermq ymm13,ymm13,144 - vpermq ymm15,ymm2,3 - vblendpd ymm13,ymm13,ymm15,1 - - vpermq ymm2,ymm2,144 - vpermq ymm15,ymm1,3 - vblendpd ymm2,ymm2,ymm15,1 - - vpermq ymm1,ymm1,144 - vpermq ymm15,ymm0,3 - vblendpd ymm1,ymm1,ymm15,1 - - vpermq ymm0,ymm0,144 - vpand ymm0,ymm0,YMMWORD[$L$high64x3] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,ymm0 - vpaddq ymm5,ymm5,ymm1 - vpaddq ymm6,ymm6,ymm2 - vpaddq ymm7,ymm7,ymm13 - vpaddq ymm8,ymm8,ymm14 - - - - vpcmpgtq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpgtq ymm1,ymm5,YMMWORD[$L$mask52x4] - vpcmpgtq ymm2,ymm6,YMMWORD[$L$mask52x4] - vpcmpgtq ymm13,ymm7,YMMWORD[$L$mask52x4] - vpcmpgtq ymm14,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm0 - vmovmskpd r13d,ymm1 - vmovmskpd r12d,ymm2 - vmovmskpd r11d,ymm13 - vmovmskpd r10d,ymm14 - - - vpcmpeqq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpeqq ymm1,ymm5,YMMWORD[$L$mask52x4] - vpcmpeqq ymm2,ymm6,YMMWORD[$L$mask52x4] - vpcmpeqq ymm13,ymm7,YMMWORD[$L$mask52x4] - vpcmpeqq ymm14,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm0 - vmovmskpd r8d,ymm1 - vmovmskpd ebx,ymm2 - vmovmskpd ecx,ymm13 - vmovmskpd edx,ymm14 - - - - shl r13b,4 - or r14b,r13b - shl r11b,4 - or r12b,r11b - - add r14b,r14b - adc r12b,r12b - adc r10b,r10b - - shl r8b,4 - or r9b,r8b - shl cl,4 - or bl,cl - - add r14b,r9b - adc r12b,bl - adc r10b,dl - - xor r14b,r9b - xor r12b,bl - xor r10b,dl - - lea rdx,[$L$kmasklut] - - mov r13b,r14b - and r14,0xf - vpsubq ymm0,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm2,YMMWORD[r14*1+rdx] - vblendvpd ymm3,ymm3,ymm0,ymm2 - - shr r13b,4 - and r13,0xf - vpsubq ymm0,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm2,YMMWORD[r13*1+rdx] - vblendvpd ymm5,ymm5,ymm0,ymm2 - - mov r11b,r12b - and r12,0xf - vpsubq ymm0,ymm6,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm2,YMMWORD[r12*1+rdx] - vblendvpd ymm6,ymm6,ymm0,ymm2 - - shr r11b,4 - and r11,0xf - vpsubq ymm0,ymm7,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm2,YMMWORD[r11*1+rdx] - vblendvpd ymm7,ymm7,ymm0,ymm2 - - and r10,0xf - vpsubq ymm0,ymm8,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm8,ymm8,ymm0,ymm2 - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - - vmovdqu YMMWORD[rdi],ymm3 - vmovdqu YMMWORD[32+rdi],ymm5 - vmovdqu YMMWORD[64+rdi],ymm6 - vmovdqu YMMWORD[96+rdi],ymm7 - vmovdqu YMMWORD[128+rdi],ymm8 - - vzeroupper - mov r15,QWORD[rsp] - - mov r14,QWORD[8+rsp] - - mov r13,QWORD[16+rsp] - - mov r12,QWORD[24+rsp] - - mov rbp,QWORD[32+rsp] - - mov rbx,QWORD[40+rsp] - - lea rsp,[48+rsp] - -$L$ossl_rsaz_amm52x20_x1_avxifma256_epilogue: - mov rdi,QWORD[8+rsp] ;WIN64 epilogue - mov rsi,QWORD[16+rsp] - DB 0F3h,0C3h ;repret - -$L$SEH_end_ossl_rsaz_amm52x20_x1_avxifma256: -section .rdata rdata align=32 -ALIGN 32 -$L$mask52x4: - DQ 0xfffffffffffff - DQ 0xfffffffffffff - DQ 0xfffffffffffff - DQ 0xfffffffffffff -$L$high64x3: - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff -$L$kmasklut: - - DQ 0x0 - DQ 0x0 - DQ 0x0 - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - DQ 0x0 - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0x0 - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff -section .text code align=64 - - global ossl_rsaz_amm52x20_x2_avxifma256 - -ALIGN 32 -ossl_rsaz_amm52x20_x2_avxifma256: - mov QWORD[8+rsp],rdi ;WIN64 prologue - mov QWORD[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_ossl_rsaz_amm52x20_x2_avxifma256: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - mov r8,QWORD[40+rsp] - - - -DB 243,15,30,250 - push rbx - - push rbp - - push r12 - - push r13 - - push r14 - - push r15 - -$L$ossl_rsaz_amm52x20_x2_avxifma256_body: - - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 - vmovapd ymm11,ymm0 - vmovapd ymm12,ymm0 - - xor r9d,r9d - xor r15d,r15d - - mov r11,rdx - mov rax,0xfffffffffffff - - mov ebx,20 - -ALIGN 32 -$L$loop20: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,QWORD[r8] - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-168))+rsp] -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[128+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm5 - vmovdqu YMMWORD[64+rsp],ymm6 - vmovdqu YMMWORD[96+rsp],ymm7 - vmovdqu YMMWORD[128+rsp],ymm8 - mov QWORD[160+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm5,YMMWORD[40+rsp] - vmovdqu ymm6,YMMWORD[72+rsp] - vmovdqu ymm7,YMMWORD[104+rsp] - vmovdqu ymm8,YMMWORD[136+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[128+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[128+rcx] - lea rsp,[168+rsp] - mov r13,QWORD[160+r11] - - vpbroadcastq ymm1,QWORD[160+r11] - mov rdx,QWORD[160+rsi] - mulx r12,r13,r13 - add r15,r13 - mov r10,r12 - adc r10,0 - - mov r13,QWORD[8+r8] - imul r13,r15 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[160+rcx] - mulx r12,r13,r13 - add r15,r13 - adc r10,r12 - - shr r15,52 - sal r10,12 - or r15,r10 - - lea rsp,[((-168))+rsp] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[288+rcx] - - - vmovdqu YMMWORD[rsp],ymm4 - vmovdqu YMMWORD[32+rsp],ymm9 - vmovdqu YMMWORD[64+rsp],ymm10 - vmovdqu YMMWORD[96+rsp],ymm11 - vmovdqu YMMWORD[128+rsp],ymm12 - mov QWORD[160+rsp],0 - - vmovdqu ymm4,YMMWORD[8+rsp] - vmovdqu ymm9,YMMWORD[40+rsp] - vmovdqu ymm10,YMMWORD[72+rsp] - vmovdqu ymm11,YMMWORD[104+rsp] - vmovdqu ymm12,YMMWORD[136+rsp] - - add r15,QWORD[8+rsp] - -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[288+rcx] - lea rsp,[168+rsp] - lea r11,[8+r11] - dec ebx - jne NEAR $L$loop20 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - - - vpsrlq ymm0,ymm3,52 - vpsrlq ymm1,ymm5,52 - vpsrlq ymm2,ymm6,52 - vpsrlq ymm13,ymm7,52 - vpsrlq ymm14,ymm8,52 - - - vpermq ymm14,ymm14,144 - vpermq ymm15,ymm13,3 - vblendpd ymm14,ymm14,ymm15,1 - - vpermq ymm13,ymm13,144 - vpermq ymm15,ymm2,3 - vblendpd ymm13,ymm13,ymm15,1 - - vpermq ymm2,ymm2,144 - vpermq ymm15,ymm1,3 - vblendpd ymm2,ymm2,ymm15,1 - - vpermq ymm1,ymm1,144 - vpermq ymm15,ymm0,3 - vblendpd ymm1,ymm1,ymm15,1 - - vpermq ymm0,ymm0,144 - vpand ymm0,ymm0,YMMWORD[$L$high64x3] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,ymm0 - vpaddq ymm5,ymm5,ymm1 - vpaddq ymm6,ymm6,ymm2 - vpaddq ymm7,ymm7,ymm13 - vpaddq ymm8,ymm8,ymm14 - - - - vpcmpgtq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpgtq ymm1,ymm5,YMMWORD[$L$mask52x4] - vpcmpgtq ymm2,ymm6,YMMWORD[$L$mask52x4] - vpcmpgtq ymm13,ymm7,YMMWORD[$L$mask52x4] - vpcmpgtq ymm14,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm0 - vmovmskpd r13d,ymm1 - vmovmskpd r12d,ymm2 - vmovmskpd r11d,ymm13 - vmovmskpd r10d,ymm14 - - - vpcmpeqq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpeqq ymm1,ymm5,YMMWORD[$L$mask52x4] - vpcmpeqq ymm2,ymm6,YMMWORD[$L$mask52x4] - vpcmpeqq ymm13,ymm7,YMMWORD[$L$mask52x4] - vpcmpeqq ymm14,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm0 - vmovmskpd r8d,ymm1 - vmovmskpd ebx,ymm2 - vmovmskpd ecx,ymm13 - vmovmskpd edx,ymm14 - - - - shl r13b,4 - or r14b,r13b - shl r11b,4 - or r12b,r11b - - add r14b,r14b - adc r12b,r12b - adc r10b,r10b - - shl r8b,4 - or r9b,r8b - shl cl,4 - or bl,cl - - add r14b,r9b - adc r12b,bl - adc r10b,dl - - xor r14b,r9b - xor r12b,bl - xor r10b,dl - - lea rdx,[$L$kmasklut] - - mov r13b,r14b - and r14,0xf - vpsubq ymm0,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm2,YMMWORD[r14*1+rdx] - vblendvpd ymm3,ymm3,ymm0,ymm2 - - shr r13b,4 - and r13,0xf - vpsubq ymm0,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm2,YMMWORD[r13*1+rdx] - vblendvpd ymm5,ymm5,ymm0,ymm2 - - mov r11b,r12b - and r12,0xf - vpsubq ymm0,ymm6,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm2,YMMWORD[r12*1+rdx] - vblendvpd ymm6,ymm6,ymm0,ymm2 - - shr r11b,4 - and r11,0xf - vpsubq ymm0,ymm7,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm2,YMMWORD[r11*1+rdx] - vblendvpd ymm7,ymm7,ymm0,ymm2 - - and r10,0xf - vpsubq ymm0,ymm8,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm8,ymm8,ymm0,ymm2 - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - - vmovq xmm0,r15 - vpbroadcastq ymm0,xmm0 - vpblendd ymm4,ymm4,ymm0,3 - - - - vpsrlq ymm0,ymm4,52 - vpsrlq ymm1,ymm9,52 - vpsrlq ymm2,ymm10,52 - vpsrlq ymm13,ymm11,52 - vpsrlq ymm14,ymm12,52 - - - vpermq ymm14,ymm14,144 - vpermq ymm15,ymm13,3 - vblendpd ymm14,ymm14,ymm15,1 - - vpermq ymm13,ymm13,144 - vpermq ymm15,ymm2,3 - vblendpd ymm13,ymm13,ymm15,1 - - vpermq ymm2,ymm2,144 - vpermq ymm15,ymm1,3 - vblendpd ymm2,ymm2,ymm15,1 - - vpermq ymm1,ymm1,144 - vpermq ymm15,ymm0,3 - vblendpd ymm1,ymm1,ymm15,1 - - vpermq ymm0,ymm0,144 - vpand ymm0,ymm0,YMMWORD[$L$high64x3] - - - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - - vpaddq ymm4,ymm4,ymm0 - vpaddq ymm9,ymm9,ymm1 - vpaddq ymm10,ymm10,ymm2 - vpaddq ymm11,ymm11,ymm13 - vpaddq ymm12,ymm12,ymm14 - - - - vpcmpgtq ymm0,ymm4,YMMWORD[$L$mask52x4] - vpcmpgtq ymm1,ymm9,YMMWORD[$L$mask52x4] - vpcmpgtq ymm2,ymm10,YMMWORD[$L$mask52x4] - vpcmpgtq ymm13,ymm11,YMMWORD[$L$mask52x4] - vpcmpgtq ymm14,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm0 - vmovmskpd r13d,ymm1 - vmovmskpd r12d,ymm2 - vmovmskpd r11d,ymm13 - vmovmskpd r10d,ymm14 - - - vpcmpeqq ymm0,ymm4,YMMWORD[$L$mask52x4] - vpcmpeqq ymm1,ymm9,YMMWORD[$L$mask52x4] - vpcmpeqq ymm2,ymm10,YMMWORD[$L$mask52x4] - vpcmpeqq ymm13,ymm11,YMMWORD[$L$mask52x4] - vpcmpeqq ymm14,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm0 - vmovmskpd r8d,ymm1 - vmovmskpd ebx,ymm2 - vmovmskpd ecx,ymm13 - vmovmskpd edx,ymm14 - - - - shl r13b,4 - or r14b,r13b - shl r11b,4 - or r12b,r11b - - add r14b,r14b - adc r12b,r12b - adc r10b,r10b - - shl r8b,4 - or r9b,r8b - shl cl,4 - or bl,cl - - add r14b,r9b - adc r12b,bl - adc r10b,dl - - xor r14b,r9b - xor r12b,bl - xor r10b,dl - - lea rdx,[$L$kmasklut] - - mov r13b,r14b - and r14,0xf - vpsubq ymm0,ymm4,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm2,YMMWORD[r14*1+rdx] - vblendvpd ymm4,ymm4,ymm0,ymm2 - - shr r13b,4 - and r13,0xf - vpsubq ymm0,ymm9,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm2,YMMWORD[r13*1+rdx] - vblendvpd ymm9,ymm9,ymm0,ymm2 - - mov r11b,r12b - and r12,0xf - vpsubq ymm0,ymm10,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm2,YMMWORD[r12*1+rdx] - vblendvpd ymm10,ymm10,ymm0,ymm2 - - shr r11b,4 - and r11,0xf - vpsubq ymm0,ymm11,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm2,YMMWORD[r11*1+rdx] - vblendvpd ymm11,ymm11,ymm0,ymm2 - - and r10,0xf - vpsubq ymm0,ymm12,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm12,ymm12,ymm0,ymm2 - - - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - vmovdqu YMMWORD[rdi],ymm3 - vmovdqu YMMWORD[32+rdi],ymm5 - vmovdqu YMMWORD[64+rdi],ymm6 - vmovdqu YMMWORD[96+rdi],ymm7 - vmovdqu YMMWORD[128+rdi],ymm8 - - vmovdqu YMMWORD[160+rdi],ymm4 - vmovdqu YMMWORD[192+rdi],ymm9 - vmovdqu YMMWORD[224+rdi],ymm10 - vmovdqu YMMWORD[256+rdi],ymm11 - vmovdqu YMMWORD[288+rdi],ymm12 - - vzeroupper - mov r15,QWORD[rsp] - - mov r14,QWORD[8+rsp] - - mov r13,QWORD[16+rsp] - - mov r12,QWORD[24+rsp] - - mov rbp,QWORD[32+rsp] - - mov rbx,QWORD[40+rsp] - - lea rsp,[48+rsp] - -$L$ossl_rsaz_amm52x20_x2_avxifma256_epilogue: - mov rdi,QWORD[8+rsp] ;WIN64 epilogue - mov rsi,QWORD[16+rsp] - DB 0F3h,0C3h ;repret - -$L$SEH_end_ossl_rsaz_amm52x20_x2_avxifma256: -section .text code align=64 - - -ALIGN 32 global ossl_extract_multiplier_2x20_win5_avx +ossl_rsaz_amm52x20_x1_avxifma256: +ossl_rsaz_amm52x20_x2_avxifma256: ossl_extract_multiplier_2x20_win5_avx: - -DB 243,15,30,250 - vmovapd ymm14,YMMWORD[$L$ones] - vmovq xmm10,r8 - vpbroadcastq ymm12,xmm10 - vmovq xmm10,r9 - vpbroadcastq ymm13,xmm10 - lea rax,[10240+rdx] - - - vpxor xmm0,xmm0,xmm0 - vmovapd ymm11,ymm0 - vmovapd ymm1,ymm0 - vmovapd ymm2,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - -ALIGN 32 -$L$loop: - vpcmpeqq ymm15,ymm12,ymm11 - vmovdqu ymm10,YMMWORD[rdx] - vblendvpd ymm0,ymm0,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[32+rdx] - vblendvpd ymm1,ymm1,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[64+rdx] - vblendvpd ymm2,ymm2,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[96+rdx] - vblendvpd ymm3,ymm3,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[128+rdx] - vblendvpd ymm4,ymm4,ymm10,ymm15 - vpcmpeqq ymm15,ymm13,ymm11 - vmovdqu ymm10,YMMWORD[160+rdx] - vblendvpd ymm5,ymm5,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[192+rdx] - vblendvpd ymm6,ymm6,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[224+rdx] - vblendvpd ymm7,ymm7,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[256+rdx] - vblendvpd ymm8,ymm8,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[288+rdx] - vblendvpd ymm9,ymm9,ymm10,ymm15 - vpaddq ymm11,ymm11,ymm14 - add rdx,320 - cmp rax,rdx - jne NEAR $L$loop - vmovdqu YMMWORD[rcx],ymm0 - vmovdqu YMMWORD[32+rcx],ymm1 - vmovdqu YMMWORD[64+rcx],ymm2 - vmovdqu YMMWORD[96+rcx],ymm3 - vmovdqu YMMWORD[128+rcx],ymm4 - vmovdqu YMMWORD[160+rcx],ymm5 - vmovdqu YMMWORD[192+rcx],ymm6 - vmovdqu YMMWORD[224+rcx],ymm7 - vmovdqu YMMWORD[256+rcx],ymm8 - vmovdqu YMMWORD[288+rcx],ymm9 +DB 0x0f,0x0b DB 0F3h,0C3h ;repret - -section .rdata rdata align=32 -ALIGN 32 -$L$ones: - DQ 1,1,1,1 -$L$zeros: - DQ 0,0,0,0 -EXTERN __imp_RtlVirtualUnwind - -ALIGN 16 -rsaz_def_handler: - push rsi - push rdi - push rbx - push rbp - push r12 - push r13 - push r14 - push r15 - pushfq - sub rsp,64 - - mov rax,QWORD[120+r8] - mov rbx,QWORD[248+r8] - - mov rsi,QWORD[8+r9] - mov r11,QWORD[56+r9] - - mov r10d,DWORD[r11] - lea r10,[r10*1+rsi] - cmp rbx,r10 - jb NEAR $L$common_seh_tail - - mov rax,QWORD[152+r8] - - mov r10d,DWORD[4+r11] - lea r10,[r10*1+rsi] - cmp rbx,r10 - jae NEAR $L$common_seh_tail - - lea rax,[48+rax] - - mov rbx,QWORD[((-8))+rax] - mov rbp,QWORD[((-16))+rax] - mov r12,QWORD[((-24))+rax] - mov r13,QWORD[((-32))+rax] - mov r14,QWORD[((-40))+rax] - mov r15,QWORD[((-48))+rax] - mov QWORD[144+r8],rbx - mov QWORD[160+r8],rbp - mov QWORD[216+r8],r12 - mov QWORD[224+r8],r13 - mov QWORD[232+r8],r14 - mov QWORD[240+r8],r15 - -$L$common_seh_tail: - mov rdi,QWORD[8+rax] - mov rsi,QWORD[16+rax] - mov QWORD[152+r8],rax - mov QWORD[168+r8],rsi - mov QWORD[176+r8],rdi - - mov rdi,QWORD[40+r9] - mov rsi,r8 - mov ecx,154 - DD 0xa548f3fc - - mov rsi,r9 - xor rcx,rcx - mov rdx,QWORD[8+rsi] - mov r8,QWORD[rsi] - mov r9,QWORD[16+rsi] - mov r10,QWORD[40+rsi] - lea r11,[56+rsi] - lea r12,[24+rsi] - mov QWORD[32+rsp],r10 - mov QWORD[40+rsp],r11 - mov QWORD[48+rsp],r12 - mov QWORD[56+rsp],rcx - call QWORD[__imp_RtlVirtualUnwind] - - mov eax,1 - add rsp,64 - popfq - pop r15 - pop r14 - pop r13 - pop r12 - pop rbp - pop rbx - pop rdi - pop rsi - DB 0F3h,0C3h ;repret - - -section .pdata rdata align=4 -ALIGN 4 - DD $L$SEH_begin_ossl_rsaz_amm52x20_x1_avxifma256 wrt ..imagebase - DD $L$SEH_end_ossl_rsaz_amm52x20_x1_avxifma256 wrt ..imagebase - DD $L$SEH_info_ossl_rsaz_amm52x20_x1_avxifma256 wrt ..imagebase - - DD $L$SEH_begin_ossl_rsaz_amm52x20_x2_avxifma256 wrt ..imagebase - DD $L$SEH_end_ossl_rsaz_amm52x20_x2_avxifma256 wrt ..imagebase - DD $L$SEH_info_ossl_rsaz_amm52x20_x2_avxifma256 wrt ..imagebase - -section .xdata rdata align=8 -ALIGN 8 -$L$SEH_info_ossl_rsaz_amm52x20_x1_avxifma256: -DB 9,0,0,0 - DD rsaz_def_handler wrt ..imagebase - DD $L$ossl_rsaz_amm52x20_x1_avxifma256_body wrt ..imagebase,$L$ossl_rsaz_amm52x20_x1_avxifma256_epilogue wrt ..imagebase -$L$SEH_info_ossl_rsaz_amm52x20_x2_avxifma256: -DB 9,0,0,0 - DD rsaz_def_handler wrt ..imagebase - DD $L$ossl_rsaz_amm52x20_x2_avxifma256_body wrt ..imagebase,$L$ossl_rsaz_amm52x20_x2_avxifma256_epilogue wrt ..imagebase diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm index 98b10734b6..082edb8030 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-3k-avxifma.nasm @@ -6,1922 +6,12 @@ section .text code align=64 global ossl_rsaz_amm52x30_x1_avxifma256 - -ALIGN 32 -ossl_rsaz_amm52x30_x1_avxifma256: - mov QWORD[8+rsp],rdi ;WIN64 prologue - mov QWORD[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_ossl_rsaz_amm52x30_x1_avxifma256: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - mov r8,QWORD[40+rsp] - - - -DB 243,15,30,250 - push rbx - - push rbp - - push r12 - - push r13 - - push r14 - - push r15 - - lea rsp,[((-168))+rsp] - vmovapd XMMWORD[rsp],xmm6 - vmovapd XMMWORD[16+rsp],xmm7 - vmovapd XMMWORD[32+rsp],xmm8 - vmovapd XMMWORD[48+rsp],xmm9 - vmovapd XMMWORD[64+rsp],xmm10 - vmovapd XMMWORD[80+rsp],xmm11 - vmovapd XMMWORD[96+rsp],xmm12 - vmovapd XMMWORD[112+rsp],xmm13 - vmovapd XMMWORD[128+rsp],xmm14 - vmovapd XMMWORD[144+rsp],xmm15 -$L$ossl_rsaz_amm52x30_x1_avxifma256_body: - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 - - xor r9d,r9d - - mov r11,rdx - mov rax,0xfffffffffffff - - - mov ebx,7 - -ALIGN 32 -$L$loop7: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - mov r13,QWORD[8+r11] - - vpbroadcastq ymm1,QWORD[8+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - mov r13,QWORD[16+r11] - - vpbroadcastq ymm1,QWORD[16+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - mov r13,QWORD[24+r11] - - vpbroadcastq ymm1,QWORD[24+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - lea r11,[32+r11] - dec ebx - jne NEAR $L$loop7 - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - mov r13,QWORD[8+r11] - - vpbroadcastq ymm1,QWORD[8+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - - - vpsrlq ymm0,ymm3,52 - vpsrlq ymm1,ymm4,52 - vpsrlq ymm2,ymm5,52 - vpsrlq ymm11,ymm6,52 - vpsrlq ymm12,ymm7,52 - vpsrlq ymm13,ymm8,52 - vpsrlq ymm14,ymm9,52 - vpsrlq ymm15,ymm10,52 - - lea rsp,[((-32))+rsp] - vmovupd YMMWORD[rsp],ymm3 - - - vpermq ymm15,ymm15,144 - vpermq ymm3,ymm14,3 - vblendpd ymm15,ymm15,ymm3,1 - - vpermq ymm14,ymm14,144 - vpermq ymm3,ymm13,3 - vblendpd ymm14,ymm14,ymm3,1 - - vpermq ymm13,ymm13,144 - vpermq ymm3,ymm12,3 - vblendpd ymm13,ymm13,ymm3,1 - - vpermq ymm12,ymm12,144 - vpermq ymm3,ymm11,3 - vblendpd ymm12,ymm12,ymm3,1 - - vpermq ymm11,ymm11,144 - vpermq ymm3,ymm2,3 - vblendpd ymm11,ymm11,ymm3,1 - - vpermq ymm2,ymm2,144 - vpermq ymm3,ymm1,3 - vblendpd ymm2,ymm2,ymm3,1 - - vpermq ymm1,ymm1,144 - vpermq ymm3,ymm0,3 - vblendpd ymm1,ymm1,ymm3,1 - - vpermq ymm0,ymm0,144 - vpand ymm0,ymm0,YMMWORD[$L$high64x3] - - vmovupd ymm3,YMMWORD[rsp] - lea rsp,[32+rsp] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,ymm0 - vpaddq ymm4,ymm4,ymm1 - vpaddq ymm5,ymm5,ymm2 - vpaddq ymm6,ymm6,ymm11 - vpaddq ymm7,ymm7,ymm12 - vpaddq ymm8,ymm8,ymm13 - vpaddq ymm9,ymm9,ymm14 - vpaddq ymm10,ymm10,ymm15 - - - - vpcmpgtq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpgtq ymm1,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm0 - vmovmskpd r13d,ymm1 - shl r13b,4 - or r14b,r13b - - vpcmpgtq ymm2,ymm5,YMMWORD[$L$mask52x4] - vpcmpgtq ymm11,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm2 - vmovmskpd r12d,ymm11 - shl r12b,4 - or r13b,r12b - - vpcmpgtq ymm12,ymm7,YMMWORD[$L$mask52x4] - vpcmpgtq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm12 - vmovmskpd r11d,ymm13 - shl r11b,4 - or r12b,r11b - - vpcmpgtq ymm14,ymm9,YMMWORD[$L$mask52x4] - vpcmpgtq ymm15,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm14 - vmovmskpd r10d,ymm15 - shl r10b,4 - or r11b,r10b - - add r14b,r14b - adc r13b,r13b - adc r12b,r12b - adc r11b,r11b - - - vpcmpeqq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpeqq ymm1,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm0 - vmovmskpd r8d,ymm1 - shl r8b,4 - or r9b,r8b - - vpcmpeqq ymm2,ymm5,YMMWORD[$L$mask52x4] - vpcmpeqq ymm11,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm2 - vmovmskpd edx,ymm11 - shl dl,4 - or r8b,dl - - vpcmpeqq ymm12,ymm7,YMMWORD[$L$mask52x4] - vpcmpeqq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm12 - vmovmskpd ecx,ymm13 - shl cl,4 - or dl,cl - - vpcmpeqq ymm14,ymm9,YMMWORD[$L$mask52x4] - vpcmpeqq ymm15,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm14 - vmovmskpd ebx,ymm15 - shl bl,4 - or cl,bl - - add r14b,r9b - adc r13b,r8b - adc r12b,dl - adc r11b,cl - - xor r14b,r9b - xor r13b,r8b - xor r12b,dl - xor r11b,cl - - lea rdx,[$L$kmasklut] - - mov r10b,r14b - and r14,0xf - vpsubq ymm0,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm2,YMMWORD[r14*1+rdx] - vblendvpd ymm3,ymm3,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm4,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm4,ymm4,ymm0,ymm2 - - mov r10b,r13b - and r13,0xf - vpsubq ymm0,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm2,YMMWORD[r13*1+rdx] - vblendvpd ymm5,ymm5,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm6,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm6,ymm6,ymm0,ymm2 - - mov r10b,r12b - and r12,0xf - vpsubq ymm0,ymm7,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm2,YMMWORD[r12*1+rdx] - vblendvpd ymm7,ymm7,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm8,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm8,ymm8,ymm0,ymm2 - - mov r10b,r11b - and r11,0xf - vpsubq ymm0,ymm9,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm2,YMMWORD[r11*1+rdx] - vblendvpd ymm9,ymm9,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm10,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm10,ymm10,ymm0,ymm2 - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - - vmovdqu YMMWORD[rdi],ymm3 - vmovdqu YMMWORD[32+rdi],ymm4 - vmovdqu YMMWORD[64+rdi],ymm5 - vmovdqu YMMWORD[96+rdi],ymm6 - vmovdqu YMMWORD[128+rdi],ymm7 - vmovdqu YMMWORD[160+rdi],ymm8 - vmovdqu YMMWORD[192+rdi],ymm9 - vmovdqu YMMWORD[224+rdi],ymm10 - - vzeroupper - lea rax,[rsp] - - vmovapd xmm6,XMMWORD[rax] - vmovapd xmm7,XMMWORD[16+rax] - vmovapd xmm8,XMMWORD[32+rax] - vmovapd xmm9,XMMWORD[48+rax] - vmovapd xmm10,XMMWORD[64+rax] - vmovapd xmm11,XMMWORD[80+rax] - vmovapd xmm12,XMMWORD[96+rax] - vmovapd xmm13,XMMWORD[112+rax] - vmovapd xmm14,XMMWORD[128+rax] - vmovapd xmm15,XMMWORD[144+rax] - lea rax,[168+rsp] - mov r15,QWORD[rax] - - mov r14,QWORD[8+rax] - - mov r13,QWORD[16+rax] - - mov r12,QWORD[24+rax] - - mov rbp,QWORD[32+rax] - - mov rbx,QWORD[40+rax] - - lea rsp,[48+rax] - -$L$ossl_rsaz_amm52x30_x1_avxifma256_epilogue: - mov rdi,QWORD[8+rsp] ;WIN64 epilogue - mov rsi,QWORD[16+rsp] - DB 0F3h,0C3h ;repret - -$L$SEH_end_ossl_rsaz_amm52x30_x1_avxifma256: -section .rdata rdata align=32 -ALIGN 32 -$L$mask52x4: - DQ 0xfffffffffffff - DQ 0xfffffffffffff - DQ 0xfffffffffffff - DQ 0xfffffffffffff -$L$high64x3: - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff -$L$kmasklut: - - DQ 0x0 - DQ 0x0 - DQ 0x0 - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - DQ 0x0 - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0x0 - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff -section .text code align=64 - - global ossl_rsaz_amm52x30_x2_avxifma256 - -ALIGN 32 -ossl_rsaz_amm52x30_x2_avxifma256: - mov QWORD[8+rsp],rdi ;WIN64 prologue - mov QWORD[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_ossl_rsaz_amm52x30_x2_avxifma256: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - mov r8,QWORD[40+rsp] - - - -DB 243,15,30,250 - push rbx - - push rbp - - push r12 - - push r13 - - push r14 - - push r15 - - lea rsp,[((-168))+rsp] - vmovapd XMMWORD[rsp],xmm6 - vmovapd XMMWORD[16+rsp],xmm7 - vmovapd XMMWORD[32+rsp],xmm8 - vmovapd XMMWORD[48+rsp],xmm9 - vmovapd XMMWORD[64+rsp],xmm10 - vmovapd XMMWORD[80+rsp],xmm11 - vmovapd XMMWORD[96+rsp],xmm12 - vmovapd XMMWORD[112+rsp],xmm13 - vmovapd XMMWORD[128+rsp],xmm14 - vmovapd XMMWORD[144+rsp],xmm15 -$L$ossl_rsaz_amm52x30_x2_avxifma256_body: - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 - - xor r9d,r9d - - mov r11,rdx - mov rax,0xfffffffffffff - - mov ebx,30 - -ALIGN 32 -$L$loop30: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,QWORD[r8] - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] - - lea rsp,[264+rsp] - lea r11,[8+r11] - dec ebx - jne NEAR $L$loop30 - - push r11 - push rsi - push rcx - push r8 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - - - vpsrlq ymm0,ymm3,52 - vpsrlq ymm1,ymm4,52 - vpsrlq ymm2,ymm5,52 - vpsrlq ymm11,ymm6,52 - vpsrlq ymm12,ymm7,52 - vpsrlq ymm13,ymm8,52 - vpsrlq ymm14,ymm9,52 - vpsrlq ymm15,ymm10,52 - - lea rsp,[((-32))+rsp] - vmovupd YMMWORD[rsp],ymm3 - - - vpermq ymm15,ymm15,144 - vpermq ymm3,ymm14,3 - vblendpd ymm15,ymm15,ymm3,1 - - vpermq ymm14,ymm14,144 - vpermq ymm3,ymm13,3 - vblendpd ymm14,ymm14,ymm3,1 - - vpermq ymm13,ymm13,144 - vpermq ymm3,ymm12,3 - vblendpd ymm13,ymm13,ymm3,1 - - vpermq ymm12,ymm12,144 - vpermq ymm3,ymm11,3 - vblendpd ymm12,ymm12,ymm3,1 - - vpermq ymm11,ymm11,144 - vpermq ymm3,ymm2,3 - vblendpd ymm11,ymm11,ymm3,1 - - vpermq ymm2,ymm2,144 - vpermq ymm3,ymm1,3 - vblendpd ymm2,ymm2,ymm3,1 - - vpermq ymm1,ymm1,144 - vpermq ymm3,ymm0,3 - vblendpd ymm1,ymm1,ymm3,1 - - vpermq ymm0,ymm0,144 - vpand ymm0,ymm0,YMMWORD[$L$high64x3] - - vmovupd ymm3,YMMWORD[rsp] - lea rsp,[32+rsp] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,ymm0 - vpaddq ymm4,ymm4,ymm1 - vpaddq ymm5,ymm5,ymm2 - vpaddq ymm6,ymm6,ymm11 - vpaddq ymm7,ymm7,ymm12 - vpaddq ymm8,ymm8,ymm13 - vpaddq ymm9,ymm9,ymm14 - vpaddq ymm10,ymm10,ymm15 - - - - vpcmpgtq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpgtq ymm1,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm0 - vmovmskpd r13d,ymm1 - shl r13b,4 - or r14b,r13b - - vpcmpgtq ymm2,ymm5,YMMWORD[$L$mask52x4] - vpcmpgtq ymm11,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm2 - vmovmskpd r12d,ymm11 - shl r12b,4 - or r13b,r12b - - vpcmpgtq ymm12,ymm7,YMMWORD[$L$mask52x4] - vpcmpgtq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm12 - vmovmskpd r11d,ymm13 - shl r11b,4 - or r12b,r11b - - vpcmpgtq ymm14,ymm9,YMMWORD[$L$mask52x4] - vpcmpgtq ymm15,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm14 - vmovmskpd r10d,ymm15 - shl r10b,4 - or r11b,r10b - - add r14b,r14b - adc r13b,r13b - adc r12b,r12b - adc r11b,r11b - - - vpcmpeqq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpeqq ymm1,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm0 - vmovmskpd r8d,ymm1 - shl r8b,4 - or r9b,r8b - - vpcmpeqq ymm2,ymm5,YMMWORD[$L$mask52x4] - vpcmpeqq ymm11,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm2 - vmovmskpd edx,ymm11 - shl dl,4 - or r8b,dl - - vpcmpeqq ymm12,ymm7,YMMWORD[$L$mask52x4] - vpcmpeqq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm12 - vmovmskpd ecx,ymm13 - shl cl,4 - or dl,cl - - vpcmpeqq ymm14,ymm9,YMMWORD[$L$mask52x4] - vpcmpeqq ymm15,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm14 - vmovmskpd ebx,ymm15 - shl bl,4 - or cl,bl - - add r14b,r9b - adc r13b,r8b - adc r12b,dl - adc r11b,cl - - xor r14b,r9b - xor r13b,r8b - xor r12b,dl - xor r11b,cl - - lea rdx,[$L$kmasklut] - - mov r10b,r14b - and r14,0xf - vpsubq ymm0,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm2,YMMWORD[r14*1+rdx] - vblendvpd ymm3,ymm3,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm4,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm4,ymm4,ymm0,ymm2 - - mov r10b,r13b - and r13,0xf - vpsubq ymm0,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm2,YMMWORD[r13*1+rdx] - vblendvpd ymm5,ymm5,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm6,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm6,ymm6,ymm0,ymm2 - - mov r10b,r12b - and r12,0xf - vpsubq ymm0,ymm7,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm2,YMMWORD[r12*1+rdx] - vblendvpd ymm7,ymm7,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm8,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm8,ymm8,ymm0,ymm2 - - mov r10b,r11b - and r11,0xf - vpsubq ymm0,ymm9,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm2,YMMWORD[r11*1+rdx] - vblendvpd ymm9,ymm9,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm10,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm10,ymm10,ymm0,ymm2 - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - pop r8 - pop rcx - pop rsi - pop r11 - - vmovdqu YMMWORD[rdi],ymm3 - vmovdqu YMMWORD[32+rdi],ymm4 - vmovdqu YMMWORD[64+rdi],ymm5 - vmovdqu YMMWORD[96+rdi],ymm6 - vmovdqu YMMWORD[128+rdi],ymm7 - vmovdqu YMMWORD[160+rdi],ymm8 - vmovdqu YMMWORD[192+rdi],ymm9 - vmovdqu YMMWORD[224+rdi],ymm10 - - xor r15d,r15d - - lea r11,[16+r11] - mov rax,0xfffffffffffff - - mov ebx,30 - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 -ALIGN 32 -$L$loop40: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[256+rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,QWORD[8+r8] - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[256+rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-264))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[288+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[320+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[352+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[384+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[416+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[448+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[480+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[288+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[320+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[352+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[384+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[416+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[448+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[480+rcx] - - - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - mov QWORD[256+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[288+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[320+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[352+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[384+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[416+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[448+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[480+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[288+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[320+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[352+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[384+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[416+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[448+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[480+rcx] - - lea rsp,[264+rsp] - lea r11,[8+r11] - dec ebx - jne NEAR $L$loop40 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - - - vpsrlq ymm0,ymm3,52 - vpsrlq ymm1,ymm4,52 - vpsrlq ymm2,ymm5,52 - vpsrlq ymm11,ymm6,52 - vpsrlq ymm12,ymm7,52 - vpsrlq ymm13,ymm8,52 - vpsrlq ymm14,ymm9,52 - vpsrlq ymm15,ymm10,52 - - lea rsp,[((-32))+rsp] - vmovupd YMMWORD[rsp],ymm3 - - - vpermq ymm15,ymm15,144 - vpermq ymm3,ymm14,3 - vblendpd ymm15,ymm15,ymm3,1 - - vpermq ymm14,ymm14,144 - vpermq ymm3,ymm13,3 - vblendpd ymm14,ymm14,ymm3,1 - - vpermq ymm13,ymm13,144 - vpermq ymm3,ymm12,3 - vblendpd ymm13,ymm13,ymm3,1 - - vpermq ymm12,ymm12,144 - vpermq ymm3,ymm11,3 - vblendpd ymm12,ymm12,ymm3,1 - - vpermq ymm11,ymm11,144 - vpermq ymm3,ymm2,3 - vblendpd ymm11,ymm11,ymm3,1 - - vpermq ymm2,ymm2,144 - vpermq ymm3,ymm1,3 - vblendpd ymm2,ymm2,ymm3,1 - - vpermq ymm1,ymm1,144 - vpermq ymm3,ymm0,3 - vblendpd ymm1,ymm1,ymm3,1 - - vpermq ymm0,ymm0,144 - vpand ymm0,ymm0,YMMWORD[$L$high64x3] - - vmovupd ymm3,YMMWORD[rsp] - lea rsp,[32+rsp] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,ymm0 - vpaddq ymm4,ymm4,ymm1 - vpaddq ymm5,ymm5,ymm2 - vpaddq ymm6,ymm6,ymm11 - vpaddq ymm7,ymm7,ymm12 - vpaddq ymm8,ymm8,ymm13 - vpaddq ymm9,ymm9,ymm14 - vpaddq ymm10,ymm10,ymm15 - - - - vpcmpgtq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpgtq ymm1,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm0 - vmovmskpd r13d,ymm1 - shl r13b,4 - or r14b,r13b - - vpcmpgtq ymm2,ymm5,YMMWORD[$L$mask52x4] - vpcmpgtq ymm11,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm2 - vmovmskpd r12d,ymm11 - shl r12b,4 - or r13b,r12b - - vpcmpgtq ymm12,ymm7,YMMWORD[$L$mask52x4] - vpcmpgtq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm12 - vmovmskpd r11d,ymm13 - shl r11b,4 - or r12b,r11b - - vpcmpgtq ymm14,ymm9,YMMWORD[$L$mask52x4] - vpcmpgtq ymm15,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm14 - vmovmskpd r10d,ymm15 - shl r10b,4 - or r11b,r10b - - add r14b,r14b - adc r13b,r13b - adc r12b,r12b - adc r11b,r11b - - - vpcmpeqq ymm0,ymm3,YMMWORD[$L$mask52x4] - vpcmpeqq ymm1,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm0 - vmovmskpd r8d,ymm1 - shl r8b,4 - or r9b,r8b - - vpcmpeqq ymm2,ymm5,YMMWORD[$L$mask52x4] - vpcmpeqq ymm11,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm2 - vmovmskpd edx,ymm11 - shl dl,4 - or r8b,dl - - vpcmpeqq ymm12,ymm7,YMMWORD[$L$mask52x4] - vpcmpeqq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm12 - vmovmskpd ecx,ymm13 - shl cl,4 - or dl,cl - - vpcmpeqq ymm14,ymm9,YMMWORD[$L$mask52x4] - vpcmpeqq ymm15,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm14 - vmovmskpd ebx,ymm15 - shl bl,4 - or cl,bl - - add r14b,r9b - adc r13b,r8b - adc r12b,dl - adc r11b,cl - - xor r14b,r9b - xor r13b,r8b - xor r12b,dl - xor r11b,cl - - lea rdx,[$L$kmasklut] - - mov r10b,r14b - and r14,0xf - vpsubq ymm0,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm2,YMMWORD[r14*1+rdx] - vblendvpd ymm3,ymm3,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm4,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm4,ymm4,ymm0,ymm2 - - mov r10b,r13b - and r13,0xf - vpsubq ymm0,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm2,YMMWORD[r13*1+rdx] - vblendvpd ymm5,ymm5,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm6,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm6,ymm6,ymm0,ymm2 - - mov r10b,r12b - and r12,0xf - vpsubq ymm0,ymm7,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm2,YMMWORD[r12*1+rdx] - vblendvpd ymm7,ymm7,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm8,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm8,ymm8,ymm0,ymm2 - - mov r10b,r11b - and r11,0xf - vpsubq ymm0,ymm9,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm2,YMMWORD[r11*1+rdx] - vblendvpd ymm9,ymm9,ymm0,ymm2 - - shr r10b,4 - and r10,0xf - vpsubq ymm0,ymm10,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm2,YMMWORD[r10*1+rdx] - vblendvpd ymm10,ymm10,ymm0,ymm2 - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - - vmovdqu YMMWORD[256+rdi],ymm3 - vmovdqu YMMWORD[288+rdi],ymm4 - vmovdqu YMMWORD[320+rdi],ymm5 - vmovdqu YMMWORD[352+rdi],ymm6 - vmovdqu YMMWORD[384+rdi],ymm7 - vmovdqu YMMWORD[416+rdi],ymm8 - vmovdqu YMMWORD[448+rdi],ymm9 - vmovdqu YMMWORD[480+rdi],ymm10 - - vzeroupper - lea rax,[rsp] - - vmovapd xmm6,XMMWORD[rax] - vmovapd xmm7,XMMWORD[16+rax] - vmovapd xmm8,XMMWORD[32+rax] - vmovapd xmm9,XMMWORD[48+rax] - vmovapd xmm10,XMMWORD[64+rax] - vmovapd xmm11,XMMWORD[80+rax] - vmovapd xmm12,XMMWORD[96+rax] - vmovapd xmm13,XMMWORD[112+rax] - vmovapd xmm14,XMMWORD[128+rax] - vmovapd xmm15,XMMWORD[144+rax] - lea rax,[168+rsp] - mov r15,QWORD[rax] - - mov r14,QWORD[8+rax] - - mov r13,QWORD[16+rax] - - mov r12,QWORD[24+rax] - - mov rbp,QWORD[32+rax] - - mov rbx,QWORD[40+rax] - - lea rsp,[48+rax] - -$L$ossl_rsaz_amm52x30_x2_avxifma256_epilogue: - mov rdi,QWORD[8+rsp] ;WIN64 epilogue - mov rsi,QWORD[16+rsp] - DB 0F3h,0C3h ;repret - -$L$SEH_end_ossl_rsaz_amm52x30_x2_avxifma256: -section .text code align=64 - - -ALIGN 32 global ossl_extract_multiplier_2x30_win5_avx +ossl_rsaz_amm52x30_x1_avxifma256: +ossl_rsaz_amm52x30_x2_avxifma256: ossl_extract_multiplier_2x30_win5_avx: - -DB 243,15,30,250 - vmovapd ymm12,YMMWORD[$L$ones] - vmovq xmm8,r8 - vpbroadcastq ymm10,xmm8 - vmovq xmm8,r9 - vpbroadcastq ymm11,xmm8 - lea rax,[16384+rdx] - - - vpxor xmm0,xmm0,xmm0 - vmovapd ymm9,ymm0 - vmovapd ymm1,ymm0 - vmovapd ymm2,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - -ALIGN 32 -$L$loop: - vpcmpeqq ymm13,ymm10,ymm9 - vmovdqu ymm8,YMMWORD[rdx] - - vblendvpd ymm0,ymm0,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[32+rdx] - - vblendvpd ymm1,ymm1,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[64+rdx] - - vblendvpd ymm2,ymm2,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[96+rdx] - - vblendvpd ymm3,ymm3,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[128+rdx] - - vblendvpd ymm4,ymm4,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[160+rdx] - - vblendvpd ymm5,ymm5,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[192+rdx] - - vblendvpd ymm6,ymm6,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[224+rdx] - - vblendvpd ymm7,ymm7,ymm8,ymm13 - vpaddq ymm9,ymm9,ymm12 - add rdx,512 - cmp rax,rdx - jne NEAR $L$loop - vmovdqu YMMWORD[rcx],ymm0 - vmovdqu YMMWORD[32+rcx],ymm1 - vmovdqu YMMWORD[64+rcx],ymm2 - vmovdqu YMMWORD[96+rcx],ymm3 - vmovdqu YMMWORD[128+rcx],ymm4 - vmovdqu YMMWORD[160+rcx],ymm5 - vmovdqu YMMWORD[192+rcx],ymm6 - vmovdqu YMMWORD[224+rcx],ymm7 - lea rdx,[((-16384))+rax] - - - vpxor xmm0,xmm0,xmm0 - vmovapd ymm9,ymm0 - vmovapd ymm0,ymm0 - vmovapd ymm1,ymm0 - vmovapd ymm2,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - -ALIGN 32 -$L$loop_8_15: - vpcmpeqq ymm13,ymm11,ymm9 - vmovdqu ymm8,YMMWORD[256+rdx] - - vblendvpd ymm0,ymm0,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[288+rdx] - - vblendvpd ymm1,ymm1,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[320+rdx] - - vblendvpd ymm2,ymm2,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[352+rdx] - - vblendvpd ymm3,ymm3,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[384+rdx] - - vblendvpd ymm4,ymm4,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[416+rdx] - - vblendvpd ymm5,ymm5,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[448+rdx] - - vblendvpd ymm6,ymm6,ymm8,ymm13 - vmovdqu ymm8,YMMWORD[480+rdx] - - vblendvpd ymm7,ymm7,ymm8,ymm13 - vpaddq ymm9,ymm9,ymm12 - add rdx,512 - cmp rax,rdx - jne NEAR $L$loop_8_15 - vmovdqu YMMWORD[256+rcx],ymm0 - vmovdqu YMMWORD[288+rcx],ymm1 - vmovdqu YMMWORD[320+rcx],ymm2 - vmovdqu YMMWORD[352+rcx],ymm3 - vmovdqu YMMWORD[384+rcx],ymm4 - vmovdqu YMMWORD[416+rcx],ymm5 - vmovdqu YMMWORD[448+rcx],ymm6 - vmovdqu YMMWORD[480+rcx],ymm7 - +DB 0x0f,0x0b DB 0F3h,0C3h ;repret - -section .rdata rdata align=32 -ALIGN 32 -$L$ones: - DQ 1,1,1,1 -$L$zeros: - DQ 0,0,0,0 -EXTERN __imp_RtlVirtualUnwind - -ALIGN 16 -rsaz_avx_handler: - push rsi - push rdi - push rbx - push rbp - push r12 - push r13 - push r14 - push r15 - pushfq - sub rsp,64 - - mov rax,QWORD[120+r8] - mov rbx,QWORD[248+r8] - - mov rsi,QWORD[8+r9] - mov r11,QWORD[56+r9] - - mov r10d,DWORD[r11] - lea r10,[r10*1+rsi] - cmp rbx,r10 - jb NEAR $L$common_seh_tail - - mov r10d,DWORD[4+r11] - lea r10,[r10*1+rsi] - cmp rbx,r10 - jae NEAR $L$common_seh_tail - - mov rax,QWORD[152+r8] - - lea rsi,[rax] - lea rdi,[512+r8] - mov ecx,20 - DD 0xa548f3fc - - lea rax,[216+rax] - - mov rbx,QWORD[((-8))+rax] - mov rbp,QWORD[((-16))+rax] - mov r12,QWORD[((-24))+rax] - mov r13,QWORD[((-32))+rax] - mov r14,QWORD[((-40))+rax] - mov r15,QWORD[((-48))+rax] - mov QWORD[144+r8],rbx - mov QWORD[160+r8],rbp - mov QWORD[216+r8],r12 - mov QWORD[224+r8],r13 - mov QWORD[232+r8],r14 - mov QWORD[240+r8],r15 - -$L$common_seh_tail: - mov rdi,QWORD[8+rax] - mov rsi,QWORD[16+rax] - mov QWORD[152+r8],rax - mov QWORD[168+r8],rsi - mov QWORD[176+r8],rdi - - mov rdi,QWORD[40+r9] - mov rsi,r8 - mov ecx,154 - DD 0xa548f3fc - - mov rsi,r9 - xor rcx,rcx - mov rdx,QWORD[8+rsi] - mov r8,QWORD[rsi] - mov r9,QWORD[16+rsi] - mov r10,QWORD[40+rsi] - lea r11,[56+rsi] - lea r12,[24+rsi] - mov QWORD[32+rsp],r10 - mov QWORD[40+rsp],r11 - mov QWORD[48+rsp],r12 - mov QWORD[56+rsp],rcx - call QWORD[__imp_RtlVirtualUnwind] - - mov eax,1 - add rsp,64 - popfq - pop r15 - pop r14 - pop r13 - pop r12 - pop rbp - pop rbx - pop rdi - pop rsi - DB 0F3h,0C3h ;repret - - -section .pdata rdata align=4 -ALIGN 4 - DD $L$SEH_begin_ossl_rsaz_amm52x30_x1_avxifma256 wrt ..imagebase - DD $L$SEH_end_ossl_rsaz_amm52x30_x1_avxifma256 wrt ..imagebase - DD $L$SEH_info_ossl_rsaz_amm52x30_x1_avxifma256 wrt ..imagebase - - DD $L$SEH_begin_ossl_rsaz_amm52x30_x2_avxifma256 wrt ..imagebase - DD $L$SEH_end_ossl_rsaz_amm52x30_x2_avxifma256 wrt ..imagebase - DD $L$SEH_info_ossl_rsaz_amm52x30_x2_avxifma256 wrt ..imagebase - -section .xdata rdata align=8 -ALIGN 8 -$L$SEH_info_ossl_rsaz_amm52x30_x1_avxifma256: -DB 9,0,0,0 - DD rsaz_avx_handler wrt ..imagebase - DD $L$ossl_rsaz_amm52x30_x1_avxifma256_body wrt ..imagebase,$L$ossl_rsaz_amm52x30_x1_avxifma256_epilogue wrt ..imagebase -$L$SEH_info_ossl_rsaz_amm52x30_x2_avxifma256: -DB 9,0,0,0 - DD rsaz_avx_handler wrt ..imagebase - DD $L$ossl_rsaz_amm52x30_x2_avxifma256_body wrt ..imagebase,$L$ossl_rsaz_amm52x30_x2_avxifma256_epilogue wrt ..imagebase diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm index 3c71815880..50b17ffafc 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/bn/rsaz-4k-avxifma.nasm @@ -6,2076 +6,12 @@ section .text code align=64 global ossl_rsaz_amm52x40_x1_avxifma256 - -ALIGN 32 -ossl_rsaz_amm52x40_x1_avxifma256: - mov QWORD[8+rsp],rdi ;WIN64 prologue - mov QWORD[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_ossl_rsaz_amm52x40_x1_avxifma256: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - mov r8,QWORD[40+rsp] - - - -DB 243,15,30,250 - push rbx - - push rbp - - push r12 - - push r13 - - push r14 - - push r15 - - lea rsp,[((-168))+rsp] - vmovapd XMMWORD[rsp],xmm6 - vmovapd XMMWORD[16+rsp],xmm7 - vmovapd XMMWORD[32+rsp],xmm8 - vmovapd XMMWORD[48+rsp],xmm9 - vmovapd XMMWORD[64+rsp],xmm10 - vmovapd XMMWORD[80+rsp],xmm11 - vmovapd XMMWORD[96+rsp],xmm12 - vmovapd XMMWORD[112+rsp],xmm13 - vmovapd XMMWORD[128+rsp],xmm14 - vmovapd XMMWORD[144+rsp],xmm15 -$L$ossl_rsaz_amm52x40_x1_avxifma256_body: - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 - vmovapd ymm11,ymm0 - vmovapd ymm12,ymm0 - - xor r9d,r9d - - mov r11,rdx - mov rax,0xfffffffffffff - - - mov ebx,10 - -ALIGN 32 -$L$loop10: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-328))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[288+rcx] - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - vmovdqu YMMWORD[256+rsp],ymm11 - vmovdqu YMMWORD[288+rsp],ymm12 - mov QWORD[320+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - vmovdqu ymm11,YMMWORD[264+rsp] - vmovdqu ymm12,YMMWORD[296+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[288+rcx] - lea rsp,[328+rsp] - mov r13,QWORD[8+r11] - - vpbroadcastq ymm1,QWORD[8+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-328))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[288+rcx] - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - vmovdqu YMMWORD[256+rsp],ymm11 - vmovdqu YMMWORD[288+rsp],ymm12 - mov QWORD[320+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - vmovdqu ymm11,YMMWORD[264+rsp] - vmovdqu ymm12,YMMWORD[296+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[288+rcx] - lea rsp,[328+rsp] - mov r13,QWORD[16+r11] - - vpbroadcastq ymm1,QWORD[16+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-328))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[288+rcx] - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - vmovdqu YMMWORD[256+rsp],ymm11 - vmovdqu YMMWORD[288+rsp],ymm12 - mov QWORD[320+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - vmovdqu ymm11,YMMWORD[264+rsp] - vmovdqu ymm12,YMMWORD[296+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[288+rcx] - lea rsp,[328+rsp] - mov r13,QWORD[24+r11] - - vpbroadcastq ymm1,QWORD[24+r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,r8 - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-328))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[288+rcx] - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - vmovdqu YMMWORD[256+rsp],ymm11 - vmovdqu YMMWORD[288+rsp],ymm12 - mov QWORD[320+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - vmovdqu ymm11,YMMWORD[264+rsp] - vmovdqu ymm12,YMMWORD[296+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[288+rcx] - lea rsp,[328+rsp] - lea r11,[32+r11] - dec ebx - jne NEAR $L$loop10 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - lea rsp,[((-640))+rsp] - vmovupd YMMWORD[rsp],ymm3 - vmovupd YMMWORD[32+rsp],ymm4 - vmovupd YMMWORD[64+rsp],ymm5 - vmovupd YMMWORD[96+rsp],ymm6 - vmovupd YMMWORD[128+rsp],ymm7 - vmovupd YMMWORD[160+rsp],ymm8 - vmovupd YMMWORD[192+rsp],ymm9 - vmovupd YMMWORD[224+rsp],ymm10 - vmovupd YMMWORD[256+rsp],ymm11 - vmovupd YMMWORD[288+rsp],ymm12 - - - - vpsrlq ymm3,ymm3,52 - vpsrlq ymm4,ymm4,52 - vpsrlq ymm5,ymm5,52 - vpsrlq ymm6,ymm6,52 - vpsrlq ymm7,ymm7,52 - vpsrlq ymm8,ymm8,52 - vpsrlq ymm9,ymm9,52 - vpsrlq ymm10,ymm10,52 - vpsrlq ymm11,ymm11,52 - vpsrlq ymm12,ymm12,52 - - - vpermq ymm12,ymm12,144 - vpermq ymm13,ymm11,3 - vblendpd ymm12,ymm12,ymm13,1 - - vpermq ymm11,ymm11,144 - vpermq ymm13,ymm10,3 - vblendpd ymm11,ymm11,ymm13,1 - - vpermq ymm10,ymm10,144 - vpermq ymm13,ymm9,3 - vblendpd ymm10,ymm10,ymm13,1 - - vpermq ymm9,ymm9,144 - vpermq ymm13,ymm8,3 - vblendpd ymm9,ymm9,ymm13,1 - - vpermq ymm8,ymm8,144 - vpermq ymm13,ymm7,3 - vblendpd ymm8,ymm8,ymm13,1 - - vpermq ymm7,ymm7,144 - vpermq ymm13,ymm6,3 - vblendpd ymm7,ymm7,ymm13,1 - - vpermq ymm6,ymm6,144 - vpermq ymm13,ymm5,3 - vblendpd ymm6,ymm6,ymm13,1 - - vpermq ymm5,ymm5,144 - vpermq ymm13,ymm4,3 - vblendpd ymm5,ymm5,ymm13,1 - - vpermq ymm4,ymm4,144 - vpermq ymm13,ymm3,3 - vblendpd ymm4,ymm4,ymm13,1 - - vpermq ymm3,ymm3,144 - vpand ymm3,ymm3,YMMWORD[$L$high64x3] - - vmovupd YMMWORD[320+rsp],ymm3 - vmovupd YMMWORD[352+rsp],ymm4 - vmovupd YMMWORD[384+rsp],ymm5 - vmovupd YMMWORD[416+rsp],ymm6 - vmovupd YMMWORD[448+rsp],ymm7 - vmovupd YMMWORD[480+rsp],ymm8 - vmovupd YMMWORD[512+rsp],ymm9 - vmovupd YMMWORD[544+rsp],ymm10 - vmovupd YMMWORD[576+rsp],ymm11 - vmovupd YMMWORD[608+rsp],ymm12 - - vmovupd ymm3,YMMWORD[rsp] - vmovupd ymm4,YMMWORD[32+rsp] - vmovupd ymm5,YMMWORD[64+rsp] - vmovupd ymm6,YMMWORD[96+rsp] - vmovupd ymm7,YMMWORD[128+rsp] - vmovupd ymm8,YMMWORD[160+rsp] - vmovupd ymm9,YMMWORD[192+rsp] - vmovupd ymm10,YMMWORD[224+rsp] - vmovupd ymm11,YMMWORD[256+rsp] - vmovupd ymm12,YMMWORD[288+rsp] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,YMMWORD[320+rsp] - vpaddq ymm4,ymm4,YMMWORD[352+rsp] - vpaddq ymm5,ymm5,YMMWORD[384+rsp] - vpaddq ymm6,ymm6,YMMWORD[416+rsp] - vpaddq ymm7,ymm7,YMMWORD[448+rsp] - vpaddq ymm8,ymm8,YMMWORD[480+rsp] - vpaddq ymm9,ymm9,YMMWORD[512+rsp] - vpaddq ymm10,ymm10,YMMWORD[544+rsp] - vpaddq ymm11,ymm11,YMMWORD[576+rsp] - vpaddq ymm12,ymm12,YMMWORD[608+rsp] - - lea rsp,[640+rsp] - - - - vpcmpgtq ymm13,ymm3,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm13 - vpcmpgtq ymm13,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm13 - shl r13b,4 - or r14b,r13b - - vpcmpgtq ymm13,ymm5,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm13 - vpcmpgtq ymm13,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm13 - shl r12b,4 - or r13b,r12b - - vpcmpgtq ymm13,ymm7,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm13 - vpcmpgtq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm13 - shl r11b,4 - or r12b,r11b - - vpcmpgtq ymm13,ymm9,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm13 - vpcmpgtq ymm13,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd r10d,ymm13 - shl r10b,4 - or r11b,r10b - - vpcmpgtq ymm13,ymm11,YMMWORD[$L$mask52x4] - vmovmskpd r10d,ymm13 - vpcmpgtq ymm13,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm13 - shl r9b,4 - or r10b,r9b - - add r14b,r14b - adc r13b,r13b - adc r12b,r12b - adc r11b,r11b - adc r10b,r10b - - - vpcmpeqq ymm13,ymm3,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm13 - vpcmpeqq ymm13,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm13 - shl r8b,4 - or r9b,r8b - - vpcmpeqq ymm13,ymm5,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm13 - vpcmpeqq ymm13,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm13 - shl dl,4 - or r8b,dl - - vpcmpeqq ymm13,ymm7,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm13 - vpcmpeqq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm13 - shl cl,4 - or dl,cl - - vpcmpeqq ymm13,ymm9,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm13 - vpcmpeqq ymm13,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd ebx,ymm13 - shl bl,4 - or cl,bl - - vpcmpeqq ymm13,ymm11,YMMWORD[$L$mask52x4] - vmovmskpd ebx,ymm13 - vpcmpeqq ymm13,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd eax,ymm13 - shl al,4 - or bl,al - - add r14b,r9b - adc r13b,r8b - adc r12b,dl - adc r11b,cl - adc r10b,bl - - xor r14b,r9b - xor r13b,r8b - xor r12b,dl - xor r11b,cl - xor r10b,bl - - push r9 - push r8 - - lea r8,[$L$kmasklut] - - mov r9b,r14b - and r14,0xf - vpsubq ymm13,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm14,YMMWORD[r14*1+r8] - vblendvpd ymm3,ymm3,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm4,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm4,ymm4,ymm13,ymm14 - - mov r9b,r13b - and r13,0xf - vpsubq ymm13,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm14,YMMWORD[r13*1+r8] - vblendvpd ymm5,ymm5,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm6,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm6,ymm6,ymm13,ymm14 - - mov r9b,r12b - and r12,0xf - vpsubq ymm13,ymm7,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm14,YMMWORD[r12*1+r8] - vblendvpd ymm7,ymm7,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm8,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm8,ymm8,ymm13,ymm14 - - mov r9b,r11b - and r11,0xf - vpsubq ymm13,ymm9,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm14,YMMWORD[r11*1+r8] - vblendvpd ymm9,ymm9,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm10,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm10,ymm10,ymm13,ymm14 - - mov r9b,r10b - and r10,0xf - vpsubq ymm13,ymm11,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm14,YMMWORD[r10*1+r8] - vblendvpd ymm11,ymm11,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm12,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm12,ymm12,ymm13,ymm14 - - pop r8 - pop r9 - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - vmovdqu YMMWORD[rdi],ymm3 - vmovdqu YMMWORD[32+rdi],ymm4 - vmovdqu YMMWORD[64+rdi],ymm5 - vmovdqu YMMWORD[96+rdi],ymm6 - vmovdqu YMMWORD[128+rdi],ymm7 - vmovdqu YMMWORD[160+rdi],ymm8 - vmovdqu YMMWORD[192+rdi],ymm9 - vmovdqu YMMWORD[224+rdi],ymm10 - vmovdqu YMMWORD[256+rdi],ymm11 - vmovdqu YMMWORD[288+rdi],ymm12 - - vzeroupper - lea rax,[rsp] - - vmovapd xmm6,XMMWORD[rax] - vmovapd xmm7,XMMWORD[16+rax] - vmovapd xmm8,XMMWORD[32+rax] - vmovapd xmm9,XMMWORD[48+rax] - vmovapd xmm10,XMMWORD[64+rax] - vmovapd xmm11,XMMWORD[80+rax] - vmovapd xmm12,XMMWORD[96+rax] - vmovapd xmm13,XMMWORD[112+rax] - vmovapd xmm14,XMMWORD[128+rax] - vmovapd xmm15,XMMWORD[144+rax] - lea rax,[168+rsp] - mov r15,QWORD[rax] - - mov r14,QWORD[8+rax] - - mov r13,QWORD[16+rax] - - mov r12,QWORD[24+rax] - - mov rbp,QWORD[32+rax] - - mov rbx,QWORD[40+rax] - - lea rsp,[48+rax] - -$L$ossl_rsaz_amm52x40_x1_avxifma256_epilogue: - - mov rdi,QWORD[8+rsp] ;WIN64 epilogue - mov rsi,QWORD[16+rsp] - DB 0F3h,0C3h ;repret - -$L$SEH_end_ossl_rsaz_amm52x40_x1_avxifma256: -section .rdata rdata align=32 -ALIGN 32 -$L$mask52x4: - DQ 0xfffffffffffff - DQ 0xfffffffffffff - DQ 0xfffffffffffff - DQ 0xfffffffffffff -$L$high64x3: - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff -$L$kmasklut: - - DQ 0x0 - DQ 0x0 - DQ 0x0 - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - DQ 0x0 - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - - DQ 0x0 - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0x0 - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff - DQ 0xffffffffffffffff -section .text code align=64 - - global ossl_rsaz_amm52x40_x2_avxifma256 - -ALIGN 32 -ossl_rsaz_amm52x40_x2_avxifma256: - mov QWORD[8+rsp],rdi ;WIN64 prologue - mov QWORD[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_ossl_rsaz_amm52x40_x2_avxifma256: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - mov r8,QWORD[40+rsp] - - - -DB 243,15,30,250 - push rbx - - push rbp - - push r12 - - push r13 - - push r14 - - push r15 - - lea rsp,[((-168))+rsp] - vmovapd XMMWORD[rsp],xmm6 - vmovapd XMMWORD[16+rsp],xmm7 - vmovapd XMMWORD[32+rsp],xmm8 - vmovapd XMMWORD[48+rsp],xmm9 - vmovapd XMMWORD[64+rsp],xmm10 - vmovapd XMMWORD[80+rsp],xmm11 - vmovapd XMMWORD[96+rsp],xmm12 - vmovapd XMMWORD[112+rsp],xmm13 - vmovapd XMMWORD[128+rsp],xmm14 - vmovapd XMMWORD[144+rsp],xmm15 -$L$ossl_rsaz_amm52x40_x2_avxifma256_body: - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 - vmovapd ymm11,ymm0 - vmovapd ymm12,ymm0 - - xor r9d,r9d - - mov r11,rdx - mov rax,0xfffffffffffff - - mov ebx,40 - -ALIGN 32 -$L$loop40: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,QWORD[r8] - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-328))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[288+rcx] - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - vmovdqu YMMWORD[256+rsp],ymm11 - vmovdqu YMMWORD[288+rsp],ymm12 - mov QWORD[320+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - vmovdqu ymm11,YMMWORD[264+rsp] - vmovdqu ymm12,YMMWORD[296+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[32+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[64+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[96+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[128+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[160+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[192+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[224+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[256+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[288+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[32+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[64+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[96+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[128+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[160+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[192+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[224+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[256+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[288+rcx] - lea rsp,[328+rsp] - lea r11,[8+r11] - dec ebx - jne NEAR $L$loop40 - - push r11 - push rsi - push rcx - push r8 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - lea rsp,[((-640))+rsp] - vmovupd YMMWORD[rsp],ymm3 - vmovupd YMMWORD[32+rsp],ymm4 - vmovupd YMMWORD[64+rsp],ymm5 - vmovupd YMMWORD[96+rsp],ymm6 - vmovupd YMMWORD[128+rsp],ymm7 - vmovupd YMMWORD[160+rsp],ymm8 - vmovupd YMMWORD[192+rsp],ymm9 - vmovupd YMMWORD[224+rsp],ymm10 - vmovupd YMMWORD[256+rsp],ymm11 - vmovupd YMMWORD[288+rsp],ymm12 - - - - vpsrlq ymm3,ymm3,52 - vpsrlq ymm4,ymm4,52 - vpsrlq ymm5,ymm5,52 - vpsrlq ymm6,ymm6,52 - vpsrlq ymm7,ymm7,52 - vpsrlq ymm8,ymm8,52 - vpsrlq ymm9,ymm9,52 - vpsrlq ymm10,ymm10,52 - vpsrlq ymm11,ymm11,52 - vpsrlq ymm12,ymm12,52 - - - vpermq ymm12,ymm12,144 - vpermq ymm13,ymm11,3 - vblendpd ymm12,ymm12,ymm13,1 - - vpermq ymm11,ymm11,144 - vpermq ymm13,ymm10,3 - vblendpd ymm11,ymm11,ymm13,1 - - vpermq ymm10,ymm10,144 - vpermq ymm13,ymm9,3 - vblendpd ymm10,ymm10,ymm13,1 - - vpermq ymm9,ymm9,144 - vpermq ymm13,ymm8,3 - vblendpd ymm9,ymm9,ymm13,1 - - vpermq ymm8,ymm8,144 - vpermq ymm13,ymm7,3 - vblendpd ymm8,ymm8,ymm13,1 - - vpermq ymm7,ymm7,144 - vpermq ymm13,ymm6,3 - vblendpd ymm7,ymm7,ymm13,1 - - vpermq ymm6,ymm6,144 - vpermq ymm13,ymm5,3 - vblendpd ymm6,ymm6,ymm13,1 - - vpermq ymm5,ymm5,144 - vpermq ymm13,ymm4,3 - vblendpd ymm5,ymm5,ymm13,1 - - vpermq ymm4,ymm4,144 - vpermq ymm13,ymm3,3 - vblendpd ymm4,ymm4,ymm13,1 - - vpermq ymm3,ymm3,144 - vpand ymm3,ymm3,YMMWORD[$L$high64x3] - - vmovupd YMMWORD[320+rsp],ymm3 - vmovupd YMMWORD[352+rsp],ymm4 - vmovupd YMMWORD[384+rsp],ymm5 - vmovupd YMMWORD[416+rsp],ymm6 - vmovupd YMMWORD[448+rsp],ymm7 - vmovupd YMMWORD[480+rsp],ymm8 - vmovupd YMMWORD[512+rsp],ymm9 - vmovupd YMMWORD[544+rsp],ymm10 - vmovupd YMMWORD[576+rsp],ymm11 - vmovupd YMMWORD[608+rsp],ymm12 - - vmovupd ymm3,YMMWORD[rsp] - vmovupd ymm4,YMMWORD[32+rsp] - vmovupd ymm5,YMMWORD[64+rsp] - vmovupd ymm6,YMMWORD[96+rsp] - vmovupd ymm7,YMMWORD[128+rsp] - vmovupd ymm8,YMMWORD[160+rsp] - vmovupd ymm9,YMMWORD[192+rsp] - vmovupd ymm10,YMMWORD[224+rsp] - vmovupd ymm11,YMMWORD[256+rsp] - vmovupd ymm12,YMMWORD[288+rsp] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,YMMWORD[320+rsp] - vpaddq ymm4,ymm4,YMMWORD[352+rsp] - vpaddq ymm5,ymm5,YMMWORD[384+rsp] - vpaddq ymm6,ymm6,YMMWORD[416+rsp] - vpaddq ymm7,ymm7,YMMWORD[448+rsp] - vpaddq ymm8,ymm8,YMMWORD[480+rsp] - vpaddq ymm9,ymm9,YMMWORD[512+rsp] - vpaddq ymm10,ymm10,YMMWORD[544+rsp] - vpaddq ymm11,ymm11,YMMWORD[576+rsp] - vpaddq ymm12,ymm12,YMMWORD[608+rsp] - - lea rsp,[640+rsp] - - - - vpcmpgtq ymm13,ymm3,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm13 - vpcmpgtq ymm13,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm13 - shl r13b,4 - or r14b,r13b - - vpcmpgtq ymm13,ymm5,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm13 - vpcmpgtq ymm13,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm13 - shl r12b,4 - or r13b,r12b - - vpcmpgtq ymm13,ymm7,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm13 - vpcmpgtq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm13 - shl r11b,4 - or r12b,r11b - - vpcmpgtq ymm13,ymm9,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm13 - vpcmpgtq ymm13,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd r10d,ymm13 - shl r10b,4 - or r11b,r10b - - vpcmpgtq ymm13,ymm11,YMMWORD[$L$mask52x4] - vmovmskpd r10d,ymm13 - vpcmpgtq ymm13,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm13 - shl r9b,4 - or r10b,r9b - - add r14b,r14b - adc r13b,r13b - adc r12b,r12b - adc r11b,r11b - adc r10b,r10b - - - vpcmpeqq ymm13,ymm3,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm13 - vpcmpeqq ymm13,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm13 - shl r8b,4 - or r9b,r8b - - vpcmpeqq ymm13,ymm5,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm13 - vpcmpeqq ymm13,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm13 - shl dl,4 - or r8b,dl - - vpcmpeqq ymm13,ymm7,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm13 - vpcmpeqq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm13 - shl cl,4 - or dl,cl - - vpcmpeqq ymm13,ymm9,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm13 - vpcmpeqq ymm13,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd ebx,ymm13 - shl bl,4 - or cl,bl - - vpcmpeqq ymm13,ymm11,YMMWORD[$L$mask52x4] - vmovmskpd ebx,ymm13 - vpcmpeqq ymm13,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd eax,ymm13 - shl al,4 - or bl,al - - add r14b,r9b - adc r13b,r8b - adc r12b,dl - adc r11b,cl - adc r10b,bl - - xor r14b,r9b - xor r13b,r8b - xor r12b,dl - xor r11b,cl - xor r10b,bl - - push r9 - push r8 - - lea r8,[$L$kmasklut] - - mov r9b,r14b - and r14,0xf - vpsubq ymm13,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm14,YMMWORD[r14*1+r8] - vblendvpd ymm3,ymm3,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm4,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm4,ymm4,ymm13,ymm14 - - mov r9b,r13b - and r13,0xf - vpsubq ymm13,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm14,YMMWORD[r13*1+r8] - vblendvpd ymm5,ymm5,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm6,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm6,ymm6,ymm13,ymm14 - - mov r9b,r12b - and r12,0xf - vpsubq ymm13,ymm7,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm14,YMMWORD[r12*1+r8] - vblendvpd ymm7,ymm7,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm8,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm8,ymm8,ymm13,ymm14 - - mov r9b,r11b - and r11,0xf - vpsubq ymm13,ymm9,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm14,YMMWORD[r11*1+r8] - vblendvpd ymm9,ymm9,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm10,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm10,ymm10,ymm13,ymm14 - - mov r9b,r10b - and r10,0xf - vpsubq ymm13,ymm11,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm14,YMMWORD[r10*1+r8] - vblendvpd ymm11,ymm11,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm12,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm12,ymm12,ymm13,ymm14 - - pop r8 - pop r9 - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - pop r8 - pop rcx - pop rsi - pop r11 - - vmovdqu YMMWORD[rdi],ymm3 - vmovdqu YMMWORD[32+rdi],ymm4 - vmovdqu YMMWORD[64+rdi],ymm5 - vmovdqu YMMWORD[96+rdi],ymm6 - vmovdqu YMMWORD[128+rdi],ymm7 - vmovdqu YMMWORD[160+rdi],ymm8 - vmovdqu YMMWORD[192+rdi],ymm9 - vmovdqu YMMWORD[224+rdi],ymm10 - vmovdqu YMMWORD[256+rdi],ymm11 - vmovdqu YMMWORD[288+rdi],ymm12 - - xor r15d,r15d - - mov rax,0xfffffffffffff - - mov ebx,40 - - vpxor ymm0,ymm0,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vmovapd ymm10,ymm0 - vmovapd ymm11,ymm0 - vmovapd ymm12,ymm0 -ALIGN 32 -$L$loop40_1: - mov r13,QWORD[r11] - - vpbroadcastq ymm1,QWORD[r11] - mov rdx,QWORD[320+rsi] - mulx r12,r13,r13 - add r9,r13 - mov r10,r12 - adc r10,0 - - mov r13,QWORD[8+r8] - imul r13,r9 - and r13,rax - - vmovq xmm2,r13 - vpbroadcastq ymm2,xmm2 - mov rdx,QWORD[320+rcx] - mulx r12,r13,r13 - add r9,r13 - adc r10,r12 - - shr r9,52 - sal r10,12 - or r9,r10 - - lea rsp,[((-328))+rsp] - -{vex} vpmadd52luq ymm3,ymm1,YMMWORD[320+rsi] -{vex} vpmadd52luq ymm4,ymm1,YMMWORD[352+rsi] -{vex} vpmadd52luq ymm5,ymm1,YMMWORD[384+rsi] -{vex} vpmadd52luq ymm6,ymm1,YMMWORD[416+rsi] -{vex} vpmadd52luq ymm7,ymm1,YMMWORD[448+rsi] -{vex} vpmadd52luq ymm8,ymm1,YMMWORD[480+rsi] -{vex} vpmadd52luq ymm9,ymm1,YMMWORD[512+rsi] -{vex} vpmadd52luq ymm10,ymm1,YMMWORD[544+rsi] -{vex} vpmadd52luq ymm11,ymm1,YMMWORD[576+rsi] -{vex} vpmadd52luq ymm12,ymm1,YMMWORD[608+rsi] - -{vex} vpmadd52luq ymm3,ymm2,YMMWORD[320+rcx] -{vex} vpmadd52luq ymm4,ymm2,YMMWORD[352+rcx] -{vex} vpmadd52luq ymm5,ymm2,YMMWORD[384+rcx] -{vex} vpmadd52luq ymm6,ymm2,YMMWORD[416+rcx] -{vex} vpmadd52luq ymm7,ymm2,YMMWORD[448+rcx] -{vex} vpmadd52luq ymm8,ymm2,YMMWORD[480+rcx] -{vex} vpmadd52luq ymm9,ymm2,YMMWORD[512+rcx] -{vex} vpmadd52luq ymm10,ymm2,YMMWORD[544+rcx] -{vex} vpmadd52luq ymm11,ymm2,YMMWORD[576+rcx] -{vex} vpmadd52luq ymm12,ymm2,YMMWORD[608+rcx] - vmovdqu YMMWORD[rsp],ymm3 - vmovdqu YMMWORD[32+rsp],ymm4 - vmovdqu YMMWORD[64+rsp],ymm5 - vmovdqu YMMWORD[96+rsp],ymm6 - vmovdqu YMMWORD[128+rsp],ymm7 - vmovdqu YMMWORD[160+rsp],ymm8 - vmovdqu YMMWORD[192+rsp],ymm9 - vmovdqu YMMWORD[224+rsp],ymm10 - vmovdqu YMMWORD[256+rsp],ymm11 - vmovdqu YMMWORD[288+rsp],ymm12 - mov QWORD[320+rsp],0 - - vmovdqu ymm3,YMMWORD[8+rsp] - vmovdqu ymm4,YMMWORD[40+rsp] - vmovdqu ymm5,YMMWORD[72+rsp] - vmovdqu ymm6,YMMWORD[104+rsp] - vmovdqu ymm7,YMMWORD[136+rsp] - vmovdqu ymm8,YMMWORD[168+rsp] - vmovdqu ymm9,YMMWORD[200+rsp] - vmovdqu ymm10,YMMWORD[232+rsp] - vmovdqu ymm11,YMMWORD[264+rsp] - vmovdqu ymm12,YMMWORD[296+rsp] - - add r9,QWORD[8+rsp] - -{vex} vpmadd52huq ymm3,ymm1,YMMWORD[320+rsi] -{vex} vpmadd52huq ymm4,ymm1,YMMWORD[352+rsi] -{vex} vpmadd52huq ymm5,ymm1,YMMWORD[384+rsi] -{vex} vpmadd52huq ymm6,ymm1,YMMWORD[416+rsi] -{vex} vpmadd52huq ymm7,ymm1,YMMWORD[448+rsi] -{vex} vpmadd52huq ymm8,ymm1,YMMWORD[480+rsi] -{vex} vpmadd52huq ymm9,ymm1,YMMWORD[512+rsi] -{vex} vpmadd52huq ymm10,ymm1,YMMWORD[544+rsi] -{vex} vpmadd52huq ymm11,ymm1,YMMWORD[576+rsi] -{vex} vpmadd52huq ymm12,ymm1,YMMWORD[608+rsi] - -{vex} vpmadd52huq ymm3,ymm2,YMMWORD[320+rcx] -{vex} vpmadd52huq ymm4,ymm2,YMMWORD[352+rcx] -{vex} vpmadd52huq ymm5,ymm2,YMMWORD[384+rcx] -{vex} vpmadd52huq ymm6,ymm2,YMMWORD[416+rcx] -{vex} vpmadd52huq ymm7,ymm2,YMMWORD[448+rcx] -{vex} vpmadd52huq ymm8,ymm2,YMMWORD[480+rcx] -{vex} vpmadd52huq ymm9,ymm2,YMMWORD[512+rcx] -{vex} vpmadd52huq ymm10,ymm2,YMMWORD[544+rcx] -{vex} vpmadd52huq ymm11,ymm2,YMMWORD[576+rcx] -{vex} vpmadd52huq ymm12,ymm2,YMMWORD[608+rcx] - lea rsp,[328+rsp] - lea r11,[8+r11] - dec ebx - jne NEAR $L$loop40_1 - - vmovq xmm0,r9 - vpbroadcastq ymm0,xmm0 - vpblendd ymm3,ymm3,ymm0,3 - - lea rsp,[((-640))+rsp] - vmovupd YMMWORD[rsp],ymm3 - vmovupd YMMWORD[32+rsp],ymm4 - vmovupd YMMWORD[64+rsp],ymm5 - vmovupd YMMWORD[96+rsp],ymm6 - vmovupd YMMWORD[128+rsp],ymm7 - vmovupd YMMWORD[160+rsp],ymm8 - vmovupd YMMWORD[192+rsp],ymm9 - vmovupd YMMWORD[224+rsp],ymm10 - vmovupd YMMWORD[256+rsp],ymm11 - vmovupd YMMWORD[288+rsp],ymm12 - - - - vpsrlq ymm3,ymm3,52 - vpsrlq ymm4,ymm4,52 - vpsrlq ymm5,ymm5,52 - vpsrlq ymm6,ymm6,52 - vpsrlq ymm7,ymm7,52 - vpsrlq ymm8,ymm8,52 - vpsrlq ymm9,ymm9,52 - vpsrlq ymm10,ymm10,52 - vpsrlq ymm11,ymm11,52 - vpsrlq ymm12,ymm12,52 - - - vpermq ymm12,ymm12,144 - vpermq ymm13,ymm11,3 - vblendpd ymm12,ymm12,ymm13,1 - - vpermq ymm11,ymm11,144 - vpermq ymm13,ymm10,3 - vblendpd ymm11,ymm11,ymm13,1 - - vpermq ymm10,ymm10,144 - vpermq ymm13,ymm9,3 - vblendpd ymm10,ymm10,ymm13,1 - - vpermq ymm9,ymm9,144 - vpermq ymm13,ymm8,3 - vblendpd ymm9,ymm9,ymm13,1 - - vpermq ymm8,ymm8,144 - vpermq ymm13,ymm7,3 - vblendpd ymm8,ymm8,ymm13,1 - - vpermq ymm7,ymm7,144 - vpermq ymm13,ymm6,3 - vblendpd ymm7,ymm7,ymm13,1 - - vpermq ymm6,ymm6,144 - vpermq ymm13,ymm5,3 - vblendpd ymm6,ymm6,ymm13,1 - - vpermq ymm5,ymm5,144 - vpermq ymm13,ymm4,3 - vblendpd ymm5,ymm5,ymm13,1 - - vpermq ymm4,ymm4,144 - vpermq ymm13,ymm3,3 - vblendpd ymm4,ymm4,ymm13,1 - - vpermq ymm3,ymm3,144 - vpand ymm3,ymm3,YMMWORD[$L$high64x3] - - vmovupd YMMWORD[320+rsp],ymm3 - vmovupd YMMWORD[352+rsp],ymm4 - vmovupd YMMWORD[384+rsp],ymm5 - vmovupd YMMWORD[416+rsp],ymm6 - vmovupd YMMWORD[448+rsp],ymm7 - vmovupd YMMWORD[480+rsp],ymm8 - vmovupd YMMWORD[512+rsp],ymm9 - vmovupd YMMWORD[544+rsp],ymm10 - vmovupd YMMWORD[576+rsp],ymm11 - vmovupd YMMWORD[608+rsp],ymm12 - - vmovupd ymm3,YMMWORD[rsp] - vmovupd ymm4,YMMWORD[32+rsp] - vmovupd ymm5,YMMWORD[64+rsp] - vmovupd ymm6,YMMWORD[96+rsp] - vmovupd ymm7,YMMWORD[128+rsp] - vmovupd ymm8,YMMWORD[160+rsp] - vmovupd ymm9,YMMWORD[192+rsp] - vmovupd ymm10,YMMWORD[224+rsp] - vmovupd ymm11,YMMWORD[256+rsp] - vmovupd ymm12,YMMWORD[288+rsp] - - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - - vpaddq ymm3,ymm3,YMMWORD[320+rsp] - vpaddq ymm4,ymm4,YMMWORD[352+rsp] - vpaddq ymm5,ymm5,YMMWORD[384+rsp] - vpaddq ymm6,ymm6,YMMWORD[416+rsp] - vpaddq ymm7,ymm7,YMMWORD[448+rsp] - vpaddq ymm8,ymm8,YMMWORD[480+rsp] - vpaddq ymm9,ymm9,YMMWORD[512+rsp] - vpaddq ymm10,ymm10,YMMWORD[544+rsp] - vpaddq ymm11,ymm11,YMMWORD[576+rsp] - vpaddq ymm12,ymm12,YMMWORD[608+rsp] - - lea rsp,[640+rsp] - - - - vpcmpgtq ymm13,ymm3,YMMWORD[$L$mask52x4] - vmovmskpd r14d,ymm13 - vpcmpgtq ymm13,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm13 - shl r13b,4 - or r14b,r13b - - vpcmpgtq ymm13,ymm5,YMMWORD[$L$mask52x4] - vmovmskpd r13d,ymm13 - vpcmpgtq ymm13,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm13 - shl r12b,4 - or r13b,r12b - - vpcmpgtq ymm13,ymm7,YMMWORD[$L$mask52x4] - vmovmskpd r12d,ymm13 - vpcmpgtq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm13 - shl r11b,4 - or r12b,r11b - - vpcmpgtq ymm13,ymm9,YMMWORD[$L$mask52x4] - vmovmskpd r11d,ymm13 - vpcmpgtq ymm13,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd r10d,ymm13 - shl r10b,4 - or r11b,r10b - - vpcmpgtq ymm13,ymm11,YMMWORD[$L$mask52x4] - vmovmskpd r10d,ymm13 - vpcmpgtq ymm13,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm13 - shl r9b,4 - or r10b,r9b - - add r14b,r14b - adc r13b,r13b - adc r12b,r12b - adc r11b,r11b - adc r10b,r10b - - - vpcmpeqq ymm13,ymm3,YMMWORD[$L$mask52x4] - vmovmskpd r9d,ymm13 - vpcmpeqq ymm13,ymm4,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm13 - shl r8b,4 - or r9b,r8b - - vpcmpeqq ymm13,ymm5,YMMWORD[$L$mask52x4] - vmovmskpd r8d,ymm13 - vpcmpeqq ymm13,ymm6,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm13 - shl dl,4 - or r8b,dl - - vpcmpeqq ymm13,ymm7,YMMWORD[$L$mask52x4] - vmovmskpd edx,ymm13 - vpcmpeqq ymm13,ymm8,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm13 - shl cl,4 - or dl,cl - - vpcmpeqq ymm13,ymm9,YMMWORD[$L$mask52x4] - vmovmskpd ecx,ymm13 - vpcmpeqq ymm13,ymm10,YMMWORD[$L$mask52x4] - vmovmskpd ebx,ymm13 - shl bl,4 - or cl,bl - - vpcmpeqq ymm13,ymm11,YMMWORD[$L$mask52x4] - vmovmskpd ebx,ymm13 - vpcmpeqq ymm13,ymm12,YMMWORD[$L$mask52x4] - vmovmskpd eax,ymm13 - shl al,4 - or bl,al - - add r14b,r9b - adc r13b,r8b - adc r12b,dl - adc r11b,cl - adc r10b,bl - - xor r14b,r9b - xor r13b,r8b - xor r12b,dl - xor r11b,cl - xor r10b,bl - - push r9 - push r8 - - lea r8,[$L$kmasklut] - - mov r9b,r14b - and r14,0xf - vpsubq ymm13,ymm3,YMMWORD[$L$mask52x4] - shl r14,5 - vmovapd ymm14,YMMWORD[r14*1+r8] - vblendvpd ymm3,ymm3,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm4,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm4,ymm4,ymm13,ymm14 - - mov r9b,r13b - and r13,0xf - vpsubq ymm13,ymm5,YMMWORD[$L$mask52x4] - shl r13,5 - vmovapd ymm14,YMMWORD[r13*1+r8] - vblendvpd ymm5,ymm5,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm6,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm6,ymm6,ymm13,ymm14 - - mov r9b,r12b - and r12,0xf - vpsubq ymm13,ymm7,YMMWORD[$L$mask52x4] - shl r12,5 - vmovapd ymm14,YMMWORD[r12*1+r8] - vblendvpd ymm7,ymm7,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm8,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm8,ymm8,ymm13,ymm14 - - mov r9b,r11b - and r11,0xf - vpsubq ymm13,ymm9,YMMWORD[$L$mask52x4] - shl r11,5 - vmovapd ymm14,YMMWORD[r11*1+r8] - vblendvpd ymm9,ymm9,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm10,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm10,ymm10,ymm13,ymm14 - - mov r9b,r10b - and r10,0xf - vpsubq ymm13,ymm11,YMMWORD[$L$mask52x4] - shl r10,5 - vmovapd ymm14,YMMWORD[r10*1+r8] - vblendvpd ymm11,ymm11,ymm13,ymm14 - - shr r9b,4 - and r9,0xf - vpsubq ymm13,ymm12,YMMWORD[$L$mask52x4] - shl r9,5 - vmovapd ymm14,YMMWORD[r9*1+r8] - vblendvpd ymm12,ymm12,ymm13,ymm14 - - pop r8 - pop r9 - - vpand ymm3,ymm3,YMMWORD[$L$mask52x4] - vpand ymm4,ymm4,YMMWORD[$L$mask52x4] - vpand ymm5,ymm5,YMMWORD[$L$mask52x4] - vpand ymm6,ymm6,YMMWORD[$L$mask52x4] - vpand ymm7,ymm7,YMMWORD[$L$mask52x4] - vpand ymm8,ymm8,YMMWORD[$L$mask52x4] - vpand ymm9,ymm9,YMMWORD[$L$mask52x4] - - vpand ymm10,ymm10,YMMWORD[$L$mask52x4] - vpand ymm11,ymm11,YMMWORD[$L$mask52x4] - vpand ymm12,ymm12,YMMWORD[$L$mask52x4] - - vmovdqu YMMWORD[320+rdi],ymm3 - vmovdqu YMMWORD[352+rdi],ymm4 - vmovdqu YMMWORD[384+rdi],ymm5 - vmovdqu YMMWORD[416+rdi],ymm6 - vmovdqu YMMWORD[448+rdi],ymm7 - vmovdqu YMMWORD[480+rdi],ymm8 - vmovdqu YMMWORD[512+rdi],ymm9 - vmovdqu YMMWORD[544+rdi],ymm10 - vmovdqu YMMWORD[576+rdi],ymm11 - vmovdqu YMMWORD[608+rdi],ymm12 - - vzeroupper - lea rax,[rsp] - - vmovapd xmm6,XMMWORD[rax] - vmovapd xmm7,XMMWORD[16+rax] - vmovapd xmm8,XMMWORD[32+rax] - vmovapd xmm9,XMMWORD[48+rax] - vmovapd xmm10,XMMWORD[64+rax] - vmovapd xmm11,XMMWORD[80+rax] - vmovapd xmm12,XMMWORD[96+rax] - vmovapd xmm13,XMMWORD[112+rax] - vmovapd xmm14,XMMWORD[128+rax] - vmovapd xmm15,XMMWORD[144+rax] - lea rax,[168+rsp] - mov r15,QWORD[rax] - - mov r14,QWORD[8+rax] - - mov r13,QWORD[16+rax] - - mov r12,QWORD[24+rax] - - mov rbp,QWORD[32+rax] - - mov rbx,QWORD[40+rax] - - lea rsp,[48+rax] - -$L$ossl_rsaz_amm52x40_x2_avxifma256_epilogue: - mov rdi,QWORD[8+rsp] ;WIN64 epilogue - mov rsi,QWORD[16+rsp] - DB 0F3h,0C3h ;repret - -$L$SEH_end_ossl_rsaz_amm52x40_x2_avxifma256: -section .text code align=64 - - -ALIGN 32 global ossl_extract_multiplier_2x40_win5_avx +ossl_rsaz_amm52x40_x1_avxifma256: +ossl_rsaz_amm52x40_x2_avxifma256: ossl_extract_multiplier_2x40_win5_avx: - -DB 243,15,30,250 - vmovapd ymm14,YMMWORD[$L$ones] - vmovq xmm10,r8 - vpbroadcastq ymm12,xmm10 - vmovq xmm10,r9 - vpbroadcastq ymm13,xmm10 - lea rax,[20480+rdx] - - - mov r10,rdx - - - vpxor xmm0,xmm0,xmm0 - vmovapd ymm1,ymm0 - vmovapd ymm2,ymm0 - vmovapd ymm3,ymm0 - vmovapd ymm4,ymm0 - vmovapd ymm5,ymm0 - vmovapd ymm6,ymm0 - vmovapd ymm7,ymm0 - vmovapd ymm8,ymm0 - vmovapd ymm9,ymm0 - vpxor ymm11,ymm11,ymm11 -ALIGN 32 -$L$loop_0: - vpcmpeqq ymm15,ymm12,ymm11 - vmovdqu ymm10,YMMWORD[rdx] - - vblendvpd ymm0,ymm0,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[32+rdx] - - vblendvpd ymm1,ymm1,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[64+rdx] - - vblendvpd ymm2,ymm2,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[96+rdx] - - vblendvpd ymm3,ymm3,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[128+rdx] - - vblendvpd ymm4,ymm4,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[160+rdx] - - vblendvpd ymm5,ymm5,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[192+rdx] - - vblendvpd ymm6,ymm6,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[224+rdx] - - vblendvpd ymm7,ymm7,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[256+rdx] - - vblendvpd ymm8,ymm8,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[288+rdx] - - vblendvpd ymm9,ymm9,ymm10,ymm15 - vpaddq ymm11,ymm11,ymm14 - add rdx,640 - cmp rax,rdx - jne NEAR $L$loop_0 - vmovdqu YMMWORD[rcx],ymm0 - vmovdqu YMMWORD[32+rcx],ymm1 - vmovdqu YMMWORD[64+rcx],ymm2 - vmovdqu YMMWORD[96+rcx],ymm3 - vmovdqu YMMWORD[128+rcx],ymm4 - vmovdqu YMMWORD[160+rcx],ymm5 - vmovdqu YMMWORD[192+rcx],ymm6 - vmovdqu YMMWORD[224+rcx],ymm7 - vmovdqu YMMWORD[256+rcx],ymm8 - vmovdqu YMMWORD[288+rcx],ymm9 - mov rdx,r10 - vpxor ymm11,ymm11,ymm11 -ALIGN 32 -$L$loop_320: - vpcmpeqq ymm15,ymm13,ymm11 - vmovdqu ymm10,YMMWORD[320+rdx] - - vblendvpd ymm0,ymm0,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[352+rdx] - - vblendvpd ymm1,ymm1,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[384+rdx] - - vblendvpd ymm2,ymm2,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[416+rdx] - - vblendvpd ymm3,ymm3,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[448+rdx] - - vblendvpd ymm4,ymm4,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[480+rdx] - - vblendvpd ymm5,ymm5,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[512+rdx] - - vblendvpd ymm6,ymm6,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[544+rdx] - - vblendvpd ymm7,ymm7,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[576+rdx] - - vblendvpd ymm8,ymm8,ymm10,ymm15 - vmovdqu ymm10,YMMWORD[608+rdx] - - vblendvpd ymm9,ymm9,ymm10,ymm15 - vpaddq ymm11,ymm11,ymm14 - add rdx,640 - cmp rax,rdx - jne NEAR $L$loop_320 - vmovdqu YMMWORD[320+rcx],ymm0 - vmovdqu YMMWORD[352+rcx],ymm1 - vmovdqu YMMWORD[384+rcx],ymm2 - vmovdqu YMMWORD[416+rcx],ymm3 - vmovdqu YMMWORD[448+rcx],ymm4 - vmovdqu YMMWORD[480+rcx],ymm5 - vmovdqu YMMWORD[512+rcx],ymm6 - vmovdqu YMMWORD[544+rcx],ymm7 - vmovdqu YMMWORD[576+rcx],ymm8 - vmovdqu YMMWORD[608+rcx],ymm9 - +DB 0x0f,0x0b DB 0F3h,0C3h ;repret - -section .rdata rdata align=32 -ALIGN 32 -$L$ones: - DQ 1,1,1,1 -$L$zeros: - DQ 0,0,0,0 -EXTERN __imp_RtlVirtualUnwind - -ALIGN 16 -rsaz_avx_handler: - push rsi - push rdi - push rbx - push rbp - push r12 - push r13 - push r14 - push r15 - pushfq - sub rsp,64 - - mov rax,QWORD[120+r8] - mov rbx,QWORD[248+r8] - - mov rsi,QWORD[8+r9] - mov r11,QWORD[56+r9] - - mov r10d,DWORD[r11] - lea r10,[r10*1+rsi] - cmp rbx,r10 - jb NEAR $L$common_seh_tail - - mov r10d,DWORD[4+r11] - lea r10,[r10*1+rsi] - cmp rbx,r10 - jae NEAR $L$common_seh_tail - - mov rax,QWORD[152+r8] - - lea rsi,[rax] - lea rdi,[512+r8] - mov ecx,20 - DD 0xa548f3fc - - lea rax,[216+rax] - - mov rbx,QWORD[((-8))+rax] - mov rbp,QWORD[((-16))+rax] - mov r12,QWORD[((-24))+rax] - mov r13,QWORD[((-32))+rax] - mov r14,QWORD[((-40))+rax] - mov r15,QWORD[((-48))+rax] - mov QWORD[144+r8],rbx - mov QWORD[160+r8],rbp - mov QWORD[216+r8],r12 - mov QWORD[224+r8],r13 - mov QWORD[232+r8],r14 - mov QWORD[240+r8],r15 - -$L$common_seh_tail: - mov rdi,QWORD[8+rax] - mov rsi,QWORD[16+rax] - mov QWORD[152+r8],rax - mov QWORD[168+r8],rsi - mov QWORD[176+r8],rdi - - mov rdi,QWORD[40+r9] - mov rsi,r8 - mov ecx,154 - DD 0xa548f3fc - - mov rsi,r9 - xor rcx,rcx - mov rdx,QWORD[8+rsi] - mov r8,QWORD[rsi] - mov r9,QWORD[16+rsi] - mov r10,QWORD[40+rsi] - lea r11,[56+rsi] - lea r12,[24+rsi] - mov QWORD[32+rsp],r10 - mov QWORD[40+rsp],r11 - mov QWORD[48+rsp],r12 - mov QWORD[56+rsp],rcx - call QWORD[__imp_RtlVirtualUnwind] - - mov eax,1 - add rsp,64 - popfq - pop r15 - pop r14 - pop r13 - pop r12 - pop rbp - pop rbx - pop rdi - pop rsi - DB 0F3h,0C3h ;repret - - -section .pdata rdata align=4 -ALIGN 4 - DD $L$SEH_begin_ossl_rsaz_amm52x40_x1_avxifma256 wrt ..imagebase - DD $L$SEH_end_ossl_rsaz_amm52x40_x1_avxifma256 wrt ..imagebase - DD $L$SEH_info_ossl_rsaz_amm52x40_x1_avxifma256 wrt ..imagebase - - DD $L$SEH_begin_ossl_rsaz_amm52x40_x2_avxifma256 wrt ..imagebase - DD $L$SEH_end_ossl_rsaz_amm52x40_x2_avxifma256 wrt ..imagebase - DD $L$SEH_info_ossl_rsaz_amm52x40_x2_avxifma256 wrt ..imagebase - -section .xdata rdata align=8 -ALIGN 8 -$L$SEH_info_ossl_rsaz_amm52x40_x1_avxifma256: -DB 9,0,0,0 - DD rsaz_avx_handler wrt ..imagebase - DD $L$ossl_rsaz_amm52x40_x1_avxifma256_body wrt ..imagebase,$L$ossl_rsaz_amm52x40_x1_avxifma256_epilogue wrt ..imagebase -$L$SEH_info_ossl_rsaz_amm52x40_x2_avxifma256: -DB 9,0,0,0 - DD rsaz_avx_handler wrt ..imagebase - DD $L$ossl_rsaz_amm52x40_x2_avxifma256_body wrt ..imagebase,$L$ossl_rsaz_amm52x40_x2_avxifma256_epilogue wrt ..imagebase diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/camellia/cmll-x86_64.nasm b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/camellia/cmll-x86_64.nasm new file mode 100644 index 0000000000..ab7d5d34da --- /dev/null +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/X64-MSFT/crypto/camellia/cmll-x86_64.nasm @@ -0,0 +1,2163 @@ +default rel +%define XMMWORD +%define YMMWORD +%define ZMMWORD +section .text code align=64 + + + +global Camellia_EncryptBlock + +ALIGN 16 +Camellia_EncryptBlock: + + mov eax,128 + sub eax,ecx + mov ecx,3 + adc ecx,0 + jmp NEAR $L$enc_rounds + + + +global Camellia_EncryptBlock_Rounds + +ALIGN 16 +$L$enc_rounds: +Camellia_EncryptBlock_Rounds: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_Camellia_EncryptBlock_Rounds: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + + + + push rbx + + push rbp + + push r13 + + push r14 + + push r15 + +$L$enc_prologue: + + + mov r13,rcx + mov r14,rdx + + shl edi,6 + lea rbp,[$L$Camellia_SBOX] + lea r15,[rdi*1+r14] + + mov r8d,DWORD[rsi] + mov r9d,DWORD[4+rsi] + mov r10d,DWORD[8+rsi] + bswap r8d + mov r11d,DWORD[12+rsi] + bswap r9d + bswap r10d + bswap r11d + + call _x86_64_Camellia_encrypt + + bswap r8d + bswap r9d + bswap r10d + mov DWORD[r13],r8d + bswap r11d + mov DWORD[4+r13],r9d + mov DWORD[8+r13],r10d + mov DWORD[12+r13],r11d + + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov rbp,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + lea rsp,[40+rsp] + +$L$enc_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_Camellia_EncryptBlock_Rounds: + + +ALIGN 16 +_x86_64_Camellia_encrypt: + + xor r9d,DWORD[r14] + xor r8d,DWORD[4+r14] + xor r11d,DWORD[8+r14] + xor r10d,DWORD[12+r14] +ALIGN 16 +$L$eloop: + mov ebx,DWORD[16+r14] + mov eax,DWORD[20+r14] + + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[24+r14] + mov eax,DWORD[28+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[32+r14] + mov eax,DWORD[36+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[40+r14] + mov eax,DWORD[44+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[48+r14] + mov eax,DWORD[52+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[56+r14] + mov eax,DWORD[60+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[64+r14] + mov eax,DWORD[68+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + lea r14,[64+r14] + cmp r14,r15 + mov edx,DWORD[8+r14] + mov ecx,DWORD[12+r14] + je NEAR $L$edone + + and eax,r8d + or edx,r11d + rol eax,1 + xor r10d,edx + xor r9d,eax + and ecx,r10d + or ebx,r9d + rol ecx,1 + xor r8d,ebx + xor r11d,ecx + jmp NEAR $L$eloop + +ALIGN 16 +$L$edone: + xor eax,r10d + xor ebx,r11d + xor ecx,r8d + xor edx,r9d + + mov r8d,eax + mov r9d,ebx + mov r10d,ecx + mov r11d,edx + +DB 0xf3,0xc3 + + + + +global Camellia_DecryptBlock + +ALIGN 16 +Camellia_DecryptBlock: + + mov eax,128 + sub eax,ecx + mov ecx,3 + adc ecx,0 + jmp NEAR $L$dec_rounds + + + +global Camellia_DecryptBlock_Rounds + +ALIGN 16 +$L$dec_rounds: +Camellia_DecryptBlock_Rounds: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_Camellia_DecryptBlock_Rounds: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + + + + push rbx + + push rbp + + push r13 + + push r14 + + push r15 + +$L$dec_prologue: + + + mov r13,rcx + mov r15,rdx + + shl edi,6 + lea rbp,[$L$Camellia_SBOX] + lea r14,[rdi*1+r15] + + mov r8d,DWORD[rsi] + mov r9d,DWORD[4+rsi] + mov r10d,DWORD[8+rsi] + bswap r8d + mov r11d,DWORD[12+rsi] + bswap r9d + bswap r10d + bswap r11d + + call _x86_64_Camellia_decrypt + + bswap r8d + bswap r9d + bswap r10d + mov DWORD[r13],r8d + bswap r11d + mov DWORD[4+r13],r9d + mov DWORD[8+r13],r10d + mov DWORD[12+r13],r11d + + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov rbp,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + lea rsp,[40+rsp] + +$L$dec_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_Camellia_DecryptBlock_Rounds: + + +ALIGN 16 +_x86_64_Camellia_decrypt: + + xor r9d,DWORD[r14] + xor r8d,DWORD[4+r14] + xor r11d,DWORD[8+r14] + xor r10d,DWORD[12+r14] +ALIGN 16 +$L$dloop: + mov ebx,DWORD[((-8))+r14] + mov eax,DWORD[((-4))+r14] + + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[((-16))+r14] + mov eax,DWORD[((-12))+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[((-24))+r14] + mov eax,DWORD[((-20))+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[((-32))+r14] + mov eax,DWORD[((-28))+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[((-40))+r14] + mov eax,DWORD[((-36))+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[((-48))+r14] + mov eax,DWORD[((-44))+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[((-56))+r14] + mov eax,DWORD[((-52))+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + lea r14,[((-64))+r14] + cmp r14,r15 + mov edx,DWORD[r14] + mov ecx,DWORD[4+r14] + je NEAR $L$ddone + + and eax,r8d + or edx,r11d + rol eax,1 + xor r10d,edx + xor r9d,eax + and ecx,r10d + or ebx,r9d + rol ecx,1 + xor r8d,ebx + xor r11d,ecx + + jmp NEAR $L$dloop + +ALIGN 16 +$L$ddone: + xor ecx,r10d + xor edx,r11d + xor eax,r8d + xor ebx,r9d + + mov r8d,ecx + mov r9d,edx + mov r10d,eax + mov r11d,ebx + +DB 0xf3,0xc3 + + +global Camellia_Ekeygen + +ALIGN 16 +Camellia_Ekeygen: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_Camellia_Ekeygen: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + + + + push rbx + + push rbp + + push r13 + + push r14 + + push r15 + +$L$key_prologue: + + mov r15d,edi + mov r13,rdx + + mov r8d,DWORD[rsi] + mov r9d,DWORD[4+rsi] + mov r10d,DWORD[8+rsi] + mov r11d,DWORD[12+rsi] + + bswap r8d + bswap r9d + bswap r10d + bswap r11d + mov DWORD[r13],r9d + mov DWORD[4+r13],r8d + mov DWORD[8+r13],r11d + mov DWORD[12+r13],r10d + cmp r15,128 + je NEAR $L$1st128 + + mov r8d,DWORD[16+rsi] + mov r9d,DWORD[20+rsi] + cmp r15,192 + je NEAR $L$1st192 + mov r10d,DWORD[24+rsi] + mov r11d,DWORD[28+rsi] + jmp NEAR $L$1st256 +$L$1st192: + mov r10d,r8d + mov r11d,r9d + not r10d + not r11d +$L$1st256: + bswap r8d + bswap r9d + bswap r10d + bswap r11d + mov DWORD[32+r13],r9d + mov DWORD[36+r13],r8d + mov DWORD[40+r13],r11d + mov DWORD[44+r13],r10d + xor r9d,DWORD[r13] + xor r8d,DWORD[4+r13] + xor r11d,DWORD[8+r13] + xor r10d,DWORD[12+r13] + +$L$1st128: + lea r14,[$L$Camellia_SIGMA] + lea rbp,[$L$Camellia_SBOX] + + mov ebx,DWORD[r14] + mov eax,DWORD[4+r14] + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[8+r14] + mov eax,DWORD[12+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[16+r14] + mov eax,DWORD[20+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + xor r9d,DWORD[r13] + xor r8d,DWORD[4+r13] + xor r11d,DWORD[8+r13] + xor r10d,DWORD[12+r13] + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[24+r14] + mov eax,DWORD[28+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[32+r14] + mov eax,DWORD[36+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + cmp r15,128 + jne NEAR $L$2nd256 + + lea r13,[128+r13] + shl r8,32 + shl r10,32 + or r8,r9 + or r10,r11 + mov rax,QWORD[((-128))+r13] + mov rbx,QWORD[((-120))+r13] + mov QWORD[((-112))+r13],r8 + mov QWORD[((-104))+r13],r10 + mov r11,rax + shl rax,15 + mov r9,rbx + shr r9,49 + shr r11,49 + or rax,r9 + shl rbx,15 + or rbx,r11 + mov QWORD[((-96))+r13],rax + mov QWORD[((-88))+r13],rbx + mov r11,r8 + shl r8,15 + mov r9,r10 + shr r9,49 + shr r11,49 + or r8,r9 + shl r10,15 + or r10,r11 + mov QWORD[((-80))+r13],r8 + mov QWORD[((-72))+r13],r10 + mov r11,r8 + shl r8,15 + mov r9,r10 + shr r9,49 + shr r11,49 + or r8,r9 + shl r10,15 + or r10,r11 + mov QWORD[((-64))+r13],r8 + mov QWORD[((-56))+r13],r10 + mov r11,rax + shl rax,30 + mov r9,rbx + shr r9,34 + shr r11,34 + or rax,r9 + shl rbx,30 + or rbx,r11 + mov QWORD[((-48))+r13],rax + mov QWORD[((-40))+r13],rbx + mov r11,r8 + shl r8,15 + mov r9,r10 + shr r9,49 + shr r11,49 + or r8,r9 + shl r10,15 + or r10,r11 + mov QWORD[((-32))+r13],r8 + mov r11,rax + shl rax,15 + mov r9,rbx + shr r9,49 + shr r11,49 + or rax,r9 + shl rbx,15 + or rbx,r11 + mov QWORD[((-24))+r13],rbx + mov r11,r8 + shl r8,15 + mov r9,r10 + shr r9,49 + shr r11,49 + or r8,r9 + shl r10,15 + or r10,r11 + mov QWORD[((-16))+r13],r8 + mov QWORD[((-8))+r13],r10 + mov r11,rax + shl rax,17 + mov r9,rbx + shr r9,47 + shr r11,47 + or rax,r9 + shl rbx,17 + or rbx,r11 + mov QWORD[r13],rax + mov QWORD[8+r13],rbx + mov r11,rax + shl rax,17 + mov r9,rbx + shr r9,47 + shr r11,47 + or rax,r9 + shl rbx,17 + or rbx,r11 + mov QWORD[16+r13],rax + mov QWORD[24+r13],rbx + mov r11,r8 + shl r8,34 + mov r9,r10 + shr r9,30 + shr r11,30 + or r8,r9 + shl r10,34 + or r10,r11 + mov QWORD[32+r13],r8 + mov QWORD[40+r13],r10 + mov r11,rax + shl rax,17 + mov r9,rbx + shr r9,47 + shr r11,47 + or rax,r9 + shl rbx,17 + or rbx,r11 + mov QWORD[48+r13],rax + mov QWORD[56+r13],rbx + mov r11,r8 + shl r8,17 + mov r9,r10 + shr r9,47 + shr r11,47 + or r8,r9 + shl r10,17 + or r10,r11 + mov QWORD[64+r13],r8 + mov QWORD[72+r13],r10 + mov eax,3 + jmp NEAR $L$done +ALIGN 16 +$L$2nd256: + mov DWORD[48+r13],r9d + mov DWORD[52+r13],r8d + mov DWORD[56+r13],r11d + mov DWORD[60+r13],r10d + xor r9d,DWORD[32+r13] + xor r8d,DWORD[36+r13] + xor r11d,DWORD[40+r13] + xor r10d,DWORD[44+r13] + xor eax,r8d + xor ebx,r9d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[40+r14] + mov eax,DWORD[44+r14] + xor ecx,edx + ror edx,8 + xor r10d,ecx + xor r11d,ecx + xor r11d,edx + xor eax,r10d + xor ebx,r11d + movzx esi,ah + movzx edi,bl + mov edx,DWORD[2052+rsi*8+rbp] + mov ecx,DWORD[rdi*8+rbp] + movzx esi,al + shr eax,16 + movzx edi,bh + xor edx,DWORD[4+rsi*8+rbp] + shr ebx,16 + xor ecx,DWORD[4+rdi*8+rbp] + movzx esi,ah + movzx edi,bl + xor edx,DWORD[rsi*8+rbp] + xor ecx,DWORD[2052+rdi*8+rbp] + movzx esi,al + movzx edi,bh + xor edx,DWORD[2048+rsi*8+rbp] + xor ecx,DWORD[2048+rdi*8+rbp] + mov ebx,DWORD[48+r14] + mov eax,DWORD[52+r14] + xor ecx,edx + ror edx,8 + xor r8d,ecx + xor r9d,ecx + xor r9d,edx + mov rax,QWORD[r13] + mov rbx,QWORD[8+r13] + mov rcx,QWORD[32+r13] + mov rdx,QWORD[40+r13] + mov r14,QWORD[48+r13] + mov r15,QWORD[56+r13] + lea r13,[128+r13] + shl r8,32 + shl r10,32 + or r8,r9 + or r10,r11 + mov QWORD[((-112))+r13],r8 + mov QWORD[((-104))+r13],r10 + mov r11,rcx + shl rcx,15 + mov r9,rdx + shr r9,49 + shr r11,49 + or rcx,r9 + shl rdx,15 + or rdx,r11 + mov QWORD[((-96))+r13],rcx + mov QWORD[((-88))+r13],rdx + mov r11,r14 + shl r14,15 + mov r9,r15 + shr r9,49 + shr r11,49 + or r14,r9 + shl r15,15 + or r15,r11 + mov QWORD[((-80))+r13],r14 + mov QWORD[((-72))+r13],r15 + mov r11,rcx + shl rcx,15 + mov r9,rdx + shr r9,49 + shr r11,49 + or rcx,r9 + shl rdx,15 + or rdx,r11 + mov QWORD[((-64))+r13],rcx + mov QWORD[((-56))+r13],rdx + mov r11,r8 + shl r8,30 + mov r9,r10 + shr r9,34 + shr r11,34 + or r8,r9 + shl r10,30 + or r10,r11 + mov QWORD[((-48))+r13],r8 + mov QWORD[((-40))+r13],r10 + mov r11,rax + shl rax,45 + mov r9,rbx + shr r9,19 + shr r11,19 + or rax,r9 + shl rbx,45 + or rbx,r11 + mov QWORD[((-32))+r13],rax + mov QWORD[((-24))+r13],rbx + mov r11,r14 + shl r14,30 + mov r9,r15 + shr r9,34 + shr r11,34 + or r14,r9 + shl r15,30 + or r15,r11 + mov QWORD[((-16))+r13],r14 + mov QWORD[((-8))+r13],r15 + mov r11,rax + shl rax,15 + mov r9,rbx + shr r9,49 + shr r11,49 + or rax,r9 + shl rbx,15 + or rbx,r11 + mov QWORD[r13],rax + mov QWORD[8+r13],rbx + mov r11,rcx + shl rcx,30 + mov r9,rdx + shr r9,34 + shr r11,34 + or rcx,r9 + shl rdx,30 + or rdx,r11 + mov QWORD[16+r13],rcx + mov QWORD[24+r13],rdx + mov r11,r8 + shl r8,30 + mov r9,r10 + shr r9,34 + shr r11,34 + or r8,r9 + shl r10,30 + or r10,r11 + mov QWORD[32+r13],r8 + mov QWORD[40+r13],r10 + mov r11,rax + shl rax,17 + mov r9,rbx + shr r9,47 + shr r11,47 + or rax,r9 + shl rbx,17 + or rbx,r11 + mov QWORD[48+r13],rax + mov QWORD[56+r13],rbx + mov r11,r14 + shl r14,32 + mov r9,r15 + shr r9,32 + shr r11,32 + or r14,r9 + shl r15,32 + or r15,r11 + mov QWORD[64+r13],r14 + mov QWORD[72+r13],r15 + mov r11,rcx + shl rcx,34 + mov r9,rdx + shr r9,30 + shr r11,30 + or rcx,r9 + shl rdx,34 + or rdx,r11 + mov QWORD[80+r13],rcx + mov QWORD[88+r13],rdx + mov r11,r14 + shl r14,17 + mov r9,r15 + shr r9,47 + shr r11,47 + or r14,r9 + shl r15,17 + or r15,r11 + mov QWORD[96+r13],r14 + mov QWORD[104+r13],r15 + mov r11,rax + shl rax,34 + mov r9,rbx + shr r9,30 + shr r11,30 + or rax,r9 + shl rbx,34 + or rbx,r11 + mov QWORD[112+r13],rax + mov QWORD[120+r13],rbx + mov r11,r8 + shl r8,51 + mov r9,r10 + shr r9,13 + shr r11,13 + or r8,r9 + shl r10,51 + or r10,r11 + mov QWORD[128+r13],r8 + mov QWORD[136+r13],r10 + mov eax,4 +$L$done: + mov r15,QWORD[rsp] + + mov r14,QWORD[8+rsp] + + mov r13,QWORD[16+rsp] + + mov rbp,QWORD[24+rsp] + + mov rbx,QWORD[32+rsp] + + lea rsp,[40+rsp] + +$L$key_epilogue: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_Camellia_Ekeygen: +section .rdata rdata align=64 +ALIGN 64 +$L$Camellia_SIGMA: + DD 0x3bcc908b,0xa09e667f,0x4caa73b2,0xb67ae858 + DD 0xe94f82be,0xc6ef372f,0xf1d36f1c,0x54ff53a5 + DD 0xde682d1d,0x10e527fa,0xb3e6c1fd,0xb05688c2 + DD 0,0,0,0 +$L$Camellia_SBOX: + DD 0x70707000,0x70700070 + DD 0x82828200,0x2c2c002c + DD 0x2c2c2c00,0xb3b300b3 + DD 0xececec00,0xc0c000c0 + DD 0xb3b3b300,0xe4e400e4 + DD 0x27272700,0x57570057 + DD 0xc0c0c000,0xeaea00ea + DD 0xe5e5e500,0xaeae00ae + DD 0xe4e4e400,0x23230023 + DD 0x85858500,0x6b6b006b + DD 0x57575700,0x45450045 + DD 0x35353500,0xa5a500a5 + DD 0xeaeaea00,0xeded00ed + DD 0x0c0c0c00,0x4f4f004f + DD 0xaeaeae00,0x1d1d001d + DD 0x41414100,0x92920092 + DD 0x23232300,0x86860086 + DD 0xefefef00,0xafaf00af + DD 0x6b6b6b00,0x7c7c007c + DD 0x93939300,0x1f1f001f + DD 0x45454500,0x3e3e003e + DD 0x19191900,0xdcdc00dc + DD 0xa5a5a500,0x5e5e005e + DD 0x21212100,0x0b0b000b + DD 0xededed00,0xa6a600a6 + DD 0x0e0e0e00,0x39390039 + DD 0x4f4f4f00,0xd5d500d5 + DD 0x4e4e4e00,0x5d5d005d + DD 0x1d1d1d00,0xd9d900d9 + DD 0x65656500,0x5a5a005a + DD 0x92929200,0x51510051 + DD 0xbdbdbd00,0x6c6c006c + DD 0x86868600,0x8b8b008b + DD 0xb8b8b800,0x9a9a009a + DD 0xafafaf00,0xfbfb00fb + DD 0x8f8f8f00,0xb0b000b0 + DD 0x7c7c7c00,0x74740074 + DD 0xebebeb00,0x2b2b002b + DD 0x1f1f1f00,0xf0f000f0 + DD 0xcecece00,0x84840084 + DD 0x3e3e3e00,0xdfdf00df + DD 0x30303000,0xcbcb00cb + DD 0xdcdcdc00,0x34340034 + DD 0x5f5f5f00,0x76760076 + DD 0x5e5e5e00,0x6d6d006d + DD 0xc5c5c500,0xa9a900a9 + DD 0x0b0b0b00,0xd1d100d1 + DD 0x1a1a1a00,0x04040004 + DD 0xa6a6a600,0x14140014 + DD 0xe1e1e100,0x3a3a003a + DD 0x39393900,0xdede00de + DD 0xcacaca00,0x11110011 + DD 0xd5d5d500,0x32320032 + DD 0x47474700,0x9c9c009c + DD 0x5d5d5d00,0x53530053 + DD 0x3d3d3d00,0xf2f200f2 + DD 0xd9d9d900,0xfefe00fe + DD 0x01010100,0xcfcf00cf + DD 0x5a5a5a00,0xc3c300c3 + DD 0xd6d6d600,0x7a7a007a + DD 0x51515100,0x24240024 + DD 0x56565600,0xe8e800e8 + DD 0x6c6c6c00,0x60600060 + DD 0x4d4d4d00,0x69690069 + DD 0x8b8b8b00,0xaaaa00aa + DD 0x0d0d0d00,0xa0a000a0 + DD 0x9a9a9a00,0xa1a100a1 + DD 0x66666600,0x62620062 + DD 0xfbfbfb00,0x54540054 + DD 0xcccccc00,0x1e1e001e + DD 0xb0b0b000,0xe0e000e0 + DD 0x2d2d2d00,0x64640064 + DD 0x74747400,0x10100010 + DD 0x12121200,0x00000000 + DD 0x2b2b2b00,0xa3a300a3 + DD 0x20202000,0x75750075 + DD 0xf0f0f000,0x8a8a008a + DD 0xb1b1b100,0xe6e600e6 + DD 0x84848400,0x09090009 + DD 0x99999900,0xdddd00dd + DD 0xdfdfdf00,0x87870087 + DD 0x4c4c4c00,0x83830083 + DD 0xcbcbcb00,0xcdcd00cd + DD 0xc2c2c200,0x90900090 + DD 0x34343400,0x73730073 + DD 0x7e7e7e00,0xf6f600f6 + DD 0x76767600,0x9d9d009d + DD 0x05050500,0xbfbf00bf + DD 0x6d6d6d00,0x52520052 + DD 0xb7b7b700,0xd8d800d8 + DD 0xa9a9a900,0xc8c800c8 + DD 0x31313100,0xc6c600c6 + DD 0xd1d1d100,0x81810081 + DD 0x17171700,0x6f6f006f + DD 0x04040400,0x13130013 + DD 0xd7d7d700,0x63630063 + DD 0x14141400,0xe9e900e9 + DD 0x58585800,0xa7a700a7 + DD 0x3a3a3a00,0x9f9f009f + DD 0x61616100,0xbcbc00bc + DD 0xdedede00,0x29290029 + DD 0x1b1b1b00,0xf9f900f9 + DD 0x11111100,0x2f2f002f + DD 0x1c1c1c00,0xb4b400b4 + DD 0x32323200,0x78780078 + DD 0x0f0f0f00,0x06060006 + DD 0x9c9c9c00,0xe7e700e7 + DD 0x16161600,0x71710071 + DD 0x53535300,0xd4d400d4 + DD 0x18181800,0xabab00ab + DD 0xf2f2f200,0x88880088 + DD 0x22222200,0x8d8d008d + DD 0xfefefe00,0x72720072 + DD 0x44444400,0xb9b900b9 + DD 0xcfcfcf00,0xf8f800f8 + DD 0xb2b2b200,0xacac00ac + DD 0xc3c3c300,0x36360036 + DD 0xb5b5b500,0x2a2a002a + DD 0x7a7a7a00,0x3c3c003c + DD 0x91919100,0xf1f100f1 + DD 0x24242400,0x40400040 + DD 0x08080800,0xd3d300d3 + DD 0xe8e8e800,0xbbbb00bb + DD 0xa8a8a800,0x43430043 + DD 0x60606000,0x15150015 + DD 0xfcfcfc00,0xadad00ad + DD 0x69696900,0x77770077 + DD 0x50505000,0x80800080 + DD 0xaaaaaa00,0x82820082 + DD 0xd0d0d000,0xecec00ec + DD 0xa0a0a000,0x27270027 + DD 0x7d7d7d00,0xe5e500e5 + DD 0xa1a1a100,0x85850085 + DD 0x89898900,0x35350035 + DD 0x62626200,0x0c0c000c + DD 0x97979700,0x41410041 + DD 0x54545400,0xefef00ef + DD 0x5b5b5b00,0x93930093 + DD 0x1e1e1e00,0x19190019 + DD 0x95959500,0x21210021 + DD 0xe0e0e000,0x0e0e000e + DD 0xffffff00,0x4e4e004e + DD 0x64646400,0x65650065 + DD 0xd2d2d200,0xbdbd00bd + DD 0x10101000,0xb8b800b8 + DD 0xc4c4c400,0x8f8f008f + DD 0x00000000,0xebeb00eb + DD 0x48484800,0xcece00ce + DD 0xa3a3a300,0x30300030 + DD 0xf7f7f700,0x5f5f005f + DD 0x75757500,0xc5c500c5 + DD 0xdbdbdb00,0x1a1a001a + DD 0x8a8a8a00,0xe1e100e1 + DD 0x03030300,0xcaca00ca + DD 0xe6e6e600,0x47470047 + DD 0xdadada00,0x3d3d003d + DD 0x09090900,0x01010001 + DD 0x3f3f3f00,0xd6d600d6 + DD 0xdddddd00,0x56560056 + DD 0x94949400,0x4d4d004d + DD 0x87878700,0x0d0d000d + DD 0x5c5c5c00,0x66660066 + DD 0x83838300,0xcccc00cc + DD 0x02020200,0x2d2d002d + DD 0xcdcdcd00,0x12120012 + DD 0x4a4a4a00,0x20200020 + DD 0x90909000,0xb1b100b1 + DD 0x33333300,0x99990099 + DD 0x73737300,0x4c4c004c + DD 0x67676700,0xc2c200c2 + DD 0xf6f6f600,0x7e7e007e + DD 0xf3f3f300,0x05050005 + DD 0x9d9d9d00,0xb7b700b7 + DD 0x7f7f7f00,0x31310031 + DD 0xbfbfbf00,0x17170017 + DD 0xe2e2e200,0xd7d700d7 + DD 0x52525200,0x58580058 + DD 0x9b9b9b00,0x61610061 + DD 0xd8d8d800,0x1b1b001b + DD 0x26262600,0x1c1c001c + DD 0xc8c8c800,0x0f0f000f + DD 0x37373700,0x16160016 + DD 0xc6c6c600,0x18180018 + DD 0x3b3b3b00,0x22220022 + DD 0x81818100,0x44440044 + DD 0x96969600,0xb2b200b2 + DD 0x6f6f6f00,0xb5b500b5 + DD 0x4b4b4b00,0x91910091 + DD 0x13131300,0x08080008 + DD 0xbebebe00,0xa8a800a8 + DD 0x63636300,0xfcfc00fc + DD 0x2e2e2e00,0x50500050 + DD 0xe9e9e900,0xd0d000d0 + DD 0x79797900,0x7d7d007d + DD 0xa7a7a700,0x89890089 + DD 0x8c8c8c00,0x97970097 + DD 0x9f9f9f00,0x5b5b005b + DD 0x6e6e6e00,0x95950095 + DD 0xbcbcbc00,0xffff00ff + DD 0x8e8e8e00,0xd2d200d2 + DD 0x29292900,0xc4c400c4 + DD 0xf5f5f500,0x48480048 + DD 0xf9f9f900,0xf7f700f7 + DD 0xb6b6b600,0xdbdb00db + DD 0x2f2f2f00,0x03030003 + DD 0xfdfdfd00,0xdada00da + DD 0xb4b4b400,0x3f3f003f + DD 0x59595900,0x94940094 + DD 0x78787800,0x5c5c005c + DD 0x98989800,0x02020002 + DD 0x06060600,0x4a4a004a + DD 0x6a6a6a00,0x33330033 + DD 0xe7e7e700,0x67670067 + DD 0x46464600,0xf3f300f3 + DD 0x71717100,0x7f7f007f + DD 0xbababa00,0xe2e200e2 + DD 0xd4d4d400,0x9b9b009b + DD 0x25252500,0x26260026 + DD 0xababab00,0x37370037 + DD 0x42424200,0x3b3b003b + DD 0x88888800,0x96960096 + DD 0xa2a2a200,0x4b4b004b + DD 0x8d8d8d00,0xbebe00be + DD 0xfafafa00,0x2e2e002e + DD 0x72727200,0x79790079 + DD 0x07070700,0x8c8c008c + DD 0xb9b9b900,0x6e6e006e + DD 0x55555500,0x8e8e008e + DD 0xf8f8f800,0xf5f500f5 + DD 0xeeeeee00,0xb6b600b6 + DD 0xacacac00,0xfdfd00fd + DD 0x0a0a0a00,0x59590059 + DD 0x36363600,0x98980098 + DD 0x49494900,0x6a6a006a + DD 0x2a2a2a00,0x46460046 + DD 0x68686800,0xbaba00ba + DD 0x3c3c3c00,0x25250025 + DD 0x38383800,0x42420042 + DD 0xf1f1f100,0xa2a200a2 + DD 0xa4a4a400,0xfafa00fa + DD 0x40404000,0x07070007 + DD 0x28282800,0x55550055 + DD 0xd3d3d300,0xeeee00ee + DD 0x7b7b7b00,0x0a0a000a + DD 0xbbbbbb00,0x49490049 + DD 0xc9c9c900,0x68680068 + DD 0x43434300,0x38380038 + DD 0xc1c1c100,0xa4a400a4 + DD 0x15151500,0x28280028 + DD 0xe3e3e300,0x7b7b007b + DD 0xadadad00,0xc9c900c9 + DD 0xf4f4f400,0xc1c100c1 + DD 0x77777700,0xe3e300e3 + DD 0xc7c7c700,0xf4f400f4 + DD 0x80808000,0xc7c700c7 + DD 0x9e9e9e00,0x9e9e009e + DD 0x00e0e0e0,0x38003838 + DD 0x00050505,0x41004141 + DD 0x00585858,0x16001616 + DD 0x00d9d9d9,0x76007676 + DD 0x00676767,0xd900d9d9 + DD 0x004e4e4e,0x93009393 + DD 0x00818181,0x60006060 + DD 0x00cbcbcb,0xf200f2f2 + DD 0x00c9c9c9,0x72007272 + DD 0x000b0b0b,0xc200c2c2 + DD 0x00aeaeae,0xab00abab + DD 0x006a6a6a,0x9a009a9a + DD 0x00d5d5d5,0x75007575 + DD 0x00181818,0x06000606 + DD 0x005d5d5d,0x57005757 + DD 0x00828282,0xa000a0a0 + DD 0x00464646,0x91009191 + DD 0x00dfdfdf,0xf700f7f7 + DD 0x00d6d6d6,0xb500b5b5 + DD 0x00272727,0xc900c9c9 + DD 0x008a8a8a,0xa200a2a2 + DD 0x00323232,0x8c008c8c + DD 0x004b4b4b,0xd200d2d2 + DD 0x00424242,0x90009090 + DD 0x00dbdbdb,0xf600f6f6 + DD 0x001c1c1c,0x07000707 + DD 0x009e9e9e,0xa700a7a7 + DD 0x009c9c9c,0x27002727 + DD 0x003a3a3a,0x8e008e8e + DD 0x00cacaca,0xb200b2b2 + DD 0x00252525,0x49004949 + DD 0x007b7b7b,0xde00dede + DD 0x000d0d0d,0x43004343 + DD 0x00717171,0x5c005c5c + DD 0x005f5f5f,0xd700d7d7 + DD 0x001f1f1f,0xc700c7c7 + DD 0x00f8f8f8,0x3e003e3e + DD 0x00d7d7d7,0xf500f5f5 + DD 0x003e3e3e,0x8f008f8f + DD 0x009d9d9d,0x67006767 + DD 0x007c7c7c,0x1f001f1f + DD 0x00606060,0x18001818 + DD 0x00b9b9b9,0x6e006e6e + DD 0x00bebebe,0xaf00afaf + DD 0x00bcbcbc,0x2f002f2f + DD 0x008b8b8b,0xe200e2e2 + DD 0x00161616,0x85008585 + DD 0x00343434,0x0d000d0d + DD 0x004d4d4d,0x53005353 + DD 0x00c3c3c3,0xf000f0f0 + DD 0x00727272,0x9c009c9c + DD 0x00959595,0x65006565 + DD 0x00ababab,0xea00eaea + DD 0x008e8e8e,0xa300a3a3 + DD 0x00bababa,0xae00aeae + DD 0x007a7a7a,0x9e009e9e + DD 0x00b3b3b3,0xec00ecec + DD 0x00020202,0x80008080 + DD 0x00b4b4b4,0x2d002d2d + DD 0x00adadad,0x6b006b6b + DD 0x00a2a2a2,0xa800a8a8 + DD 0x00acacac,0x2b002b2b + DD 0x00d8d8d8,0x36003636 + DD 0x009a9a9a,0xa600a6a6 + DD 0x00171717,0xc500c5c5 + DD 0x001a1a1a,0x86008686 + DD 0x00353535,0x4d004d4d + DD 0x00cccccc,0x33003333 + DD 0x00f7f7f7,0xfd00fdfd + DD 0x00999999,0x66006666 + DD 0x00616161,0x58005858 + DD 0x005a5a5a,0x96009696 + DD 0x00e8e8e8,0x3a003a3a + DD 0x00242424,0x09000909 + DD 0x00565656,0x95009595 + DD 0x00404040,0x10001010 + DD 0x00e1e1e1,0x78007878 + DD 0x00636363,0xd800d8d8 + DD 0x00090909,0x42004242 + DD 0x00333333,0xcc00cccc + DD 0x00bfbfbf,0xef00efef + DD 0x00989898,0x26002626 + DD 0x00979797,0xe500e5e5 + DD 0x00858585,0x61006161 + DD 0x00686868,0x1a001a1a + DD 0x00fcfcfc,0x3f003f3f + DD 0x00ececec,0x3b003b3b + DD 0x000a0a0a,0x82008282 + DD 0x00dadada,0xb600b6b6 + DD 0x006f6f6f,0xdb00dbdb + DD 0x00535353,0xd400d4d4 + DD 0x00626262,0x98009898 + DD 0x00a3a3a3,0xe800e8e8 + DD 0x002e2e2e,0x8b008b8b + DD 0x00080808,0x02000202 + DD 0x00afafaf,0xeb00ebeb + DD 0x00282828,0x0a000a0a + DD 0x00b0b0b0,0x2c002c2c + DD 0x00747474,0x1d001d1d + DD 0x00c2c2c2,0xb000b0b0 + DD 0x00bdbdbd,0x6f006f6f + DD 0x00363636,0x8d008d8d + DD 0x00222222,0x88008888 + DD 0x00383838,0x0e000e0e + DD 0x00646464,0x19001919 + DD 0x001e1e1e,0x87008787 + DD 0x00393939,0x4e004e4e + DD 0x002c2c2c,0x0b000b0b + DD 0x00a6a6a6,0xa900a9a9 + DD 0x00303030,0x0c000c0c + DD 0x00e5e5e5,0x79007979 + DD 0x00444444,0x11001111 + DD 0x00fdfdfd,0x7f007f7f + DD 0x00888888,0x22002222 + DD 0x009f9f9f,0xe700e7e7 + DD 0x00656565,0x59005959 + DD 0x00878787,0xe100e1e1 + DD 0x006b6b6b,0xda00dada + DD 0x00f4f4f4,0x3d003d3d + DD 0x00232323,0xc800c8c8 + DD 0x00484848,0x12001212 + DD 0x00101010,0x04000404 + DD 0x00d1d1d1,0x74007474 + DD 0x00515151,0x54005454 + DD 0x00c0c0c0,0x30003030 + DD 0x00f9f9f9,0x7e007e7e + DD 0x00d2d2d2,0xb400b4b4 + DD 0x00a0a0a0,0x28002828 + DD 0x00555555,0x55005555 + DD 0x00a1a1a1,0x68006868 + DD 0x00414141,0x50005050 + DD 0x00fafafa,0xbe00bebe + DD 0x00434343,0xd000d0d0 + DD 0x00131313,0xc400c4c4 + DD 0x00c4c4c4,0x31003131 + DD 0x002f2f2f,0xcb00cbcb + DD 0x00a8a8a8,0x2a002a2a + DD 0x00b6b6b6,0xad00adad + DD 0x003c3c3c,0x0f000f0f + DD 0x002b2b2b,0xca00caca + DD 0x00c1c1c1,0x70007070 + DD 0x00ffffff,0xff00ffff + DD 0x00c8c8c8,0x32003232 + DD 0x00a5a5a5,0x69006969 + DD 0x00202020,0x08000808 + DD 0x00898989,0x62006262 + DD 0x00000000,0x00000000 + DD 0x00909090,0x24002424 + DD 0x00474747,0xd100d1d1 + DD 0x00efefef,0xfb00fbfb + DD 0x00eaeaea,0xba00baba + DD 0x00b7b7b7,0xed00eded + DD 0x00151515,0x45004545 + DD 0x00060606,0x81008181 + DD 0x00cdcdcd,0x73007373 + DD 0x00b5b5b5,0x6d006d6d + DD 0x00121212,0x84008484 + DD 0x007e7e7e,0x9f009f9f + DD 0x00bbbbbb,0xee00eeee + DD 0x00292929,0x4a004a4a + DD 0x000f0f0f,0xc300c3c3 + DD 0x00b8b8b8,0x2e002e2e + DD 0x00070707,0xc100c1c1 + DD 0x00040404,0x01000101 + DD 0x009b9b9b,0xe600e6e6 + DD 0x00949494,0x25002525 + DD 0x00212121,0x48004848 + DD 0x00666666,0x99009999 + DD 0x00e6e6e6,0xb900b9b9 + DD 0x00cecece,0xb300b3b3 + DD 0x00ededed,0x7b007b7b + DD 0x00e7e7e7,0xf900f9f9 + DD 0x003b3b3b,0xce00cece + DD 0x00fefefe,0xbf00bfbf + DD 0x007f7f7f,0xdf00dfdf + DD 0x00c5c5c5,0x71007171 + DD 0x00a4a4a4,0x29002929 + DD 0x00373737,0xcd00cdcd + DD 0x00b1b1b1,0x6c006c6c + DD 0x004c4c4c,0x13001313 + DD 0x00919191,0x64006464 + DD 0x006e6e6e,0x9b009b9b + DD 0x008d8d8d,0x63006363 + DD 0x00767676,0x9d009d9d + DD 0x00030303,0xc000c0c0 + DD 0x002d2d2d,0x4b004b4b + DD 0x00dedede,0xb700b7b7 + DD 0x00969696,0xa500a5a5 + DD 0x00262626,0x89008989 + DD 0x007d7d7d,0x5f005f5f + DD 0x00c6c6c6,0xb100b1b1 + DD 0x005c5c5c,0x17001717 + DD 0x00d3d3d3,0xf400f4f4 + DD 0x00f2f2f2,0xbc00bcbc + DD 0x004f4f4f,0xd300d3d3 + DD 0x00191919,0x46004646 + DD 0x003f3f3f,0xcf00cfcf + DD 0x00dcdcdc,0x37003737 + DD 0x00797979,0x5e005e5e + DD 0x001d1d1d,0x47004747 + DD 0x00525252,0x94009494 + DD 0x00ebebeb,0xfa00fafa + DD 0x00f3f3f3,0xfc00fcfc + DD 0x006d6d6d,0x5b005b5b + DD 0x005e5e5e,0x97009797 + DD 0x00fbfbfb,0xfe00fefe + DD 0x00696969,0x5a005a5a + DD 0x00b2b2b2,0xac00acac + DD 0x00f0f0f0,0x3c003c3c + DD 0x00313131,0x4c004c4c + DD 0x000c0c0c,0x03000303 + DD 0x00d4d4d4,0x35003535 + DD 0x00cfcfcf,0xf300f3f3 + DD 0x008c8c8c,0x23002323 + DD 0x00e2e2e2,0xb800b8b8 + DD 0x00757575,0x5d005d5d + DD 0x00a9a9a9,0x6a006a6a + DD 0x004a4a4a,0x92009292 + DD 0x00575757,0xd500d5d5 + DD 0x00848484,0x21002121 + DD 0x00111111,0x44004444 + DD 0x00454545,0x51005151 + DD 0x001b1b1b,0xc600c6c6 + DD 0x00f5f5f5,0x7d007d7d + DD 0x00e4e4e4,0x39003939 + DD 0x000e0e0e,0x83008383 + DD 0x00737373,0xdc00dcdc + DD 0x00aaaaaa,0xaa00aaaa + DD 0x00f1f1f1,0x7c007c7c + DD 0x00dddddd,0x77007777 + DD 0x00595959,0x56005656 + DD 0x00141414,0x05000505 + DD 0x006c6c6c,0x1b001b1b + DD 0x00929292,0xa400a4a4 + DD 0x00545454,0x15001515 + DD 0x00d0d0d0,0x34003434 + DD 0x00787878,0x1e001e1e + DD 0x00707070,0x1c001c1c + DD 0x00e3e3e3,0xf800f8f8 + DD 0x00494949,0x52005252 + DD 0x00808080,0x20002020 + DD 0x00505050,0x14001414 + DD 0x00a7a7a7,0xe900e9e9 + DD 0x00f6f6f6,0xbd00bdbd + DD 0x00777777,0xdd00dddd + DD 0x00939393,0xe400e4e4 + DD 0x00868686,0xa100a1a1 + DD 0x00838383,0xe000e0e0 + DD 0x002a2a2a,0x8a008a8a + DD 0x00c7c7c7,0xf100f1f1 + DD 0x005b5b5b,0xd600d6d6 + DD 0x00e9e9e9,0x7a007a7a + DD 0x00eeeeee,0xbb00bbbb + DD 0x008f8f8f,0xe300e3e3 + DD 0x00010101,0x40004040 + DD 0x003d3d3d,0x4f004f4f +section .text code align=64 + +global Camellia_cbc_encrypt + +ALIGN 16 +Camellia_cbc_encrypt: + mov QWORD[8+rsp],rdi ;WIN64 prologue + mov QWORD[16+rsp],rsi + mov rax,rsp +$L$SEH_begin_Camellia_cbc_encrypt: + mov rdi,rcx + mov rsi,rdx + mov rdx,r8 + mov rcx,r9 + mov r8,QWORD[40+rsp] + mov r9,QWORD[48+rsp] + + + +DB 243,15,30,250 + cmp rdx,0 + je NEAR $L$cbc_abort + push rbx + + push rbp + + push r12 + + push r13 + + push r14 + + push r15 + +$L$cbc_prologue: + + mov rbp,rsp + + sub rsp,64 + and rsp,-64 + + + + lea r10,[((-64-63))+rcx] + sub r10,rsp + neg r10 + and r10,0x3C0 + sub rsp,r10 + + + mov r12,rdi + mov r13,rsi + mov rbx,r8 + mov r14,rcx + mov r15d,DWORD[272+rcx] + + mov QWORD[40+rsp],r8 + mov QWORD[48+rsp],rbp + + +$L$cbc_body: + lea rbp,[$L$Camellia_SBOX] + + mov ecx,32 +ALIGN 4 +$L$cbc_prefetch_sbox: + mov rax,QWORD[rbp] + mov rsi,QWORD[32+rbp] + mov rdi,QWORD[64+rbp] + mov r11,QWORD[96+rbp] + lea rbp,[128+rbp] + loop $L$cbc_prefetch_sbox + sub rbp,4096 + shl r15,6 + mov rcx,rdx + lea r15,[r15*1+r14] + + cmp r9d,0 + je NEAR $L$CBC_DECRYPT + + and rdx,-16 + and rcx,15 + lea rdx,[rdx*1+r12] + mov QWORD[rsp],r14 + mov QWORD[8+rsp],rdx + mov QWORD[16+rsp],rcx + + cmp rdx,r12 + mov r8d,DWORD[rbx] + mov r9d,DWORD[4+rbx] + mov r10d,DWORD[8+rbx] + mov r11d,DWORD[12+rbx] + je NEAR $L$cbc_enc_tail + jmp NEAR $L$cbc_eloop + +ALIGN 16 +$L$cbc_eloop: + xor r8d,DWORD[r12] + xor r9d,DWORD[4+r12] + xor r10d,DWORD[8+r12] + bswap r8d + xor r11d,DWORD[12+r12] + bswap r9d + bswap r10d + bswap r11d + + call _x86_64_Camellia_encrypt + + mov r14,QWORD[rsp] + bswap r8d + mov rdx,QWORD[8+rsp] + bswap r9d + mov rcx,QWORD[16+rsp] + bswap r10d + mov DWORD[r13],r8d + bswap r11d + mov DWORD[4+r13],r9d + mov DWORD[8+r13],r10d + lea r12,[16+r12] + mov DWORD[12+r13],r11d + cmp r12,rdx + lea r13,[16+r13] + jne NEAR $L$cbc_eloop + + cmp rcx,0 + jne NEAR $L$cbc_enc_tail + + mov r13,QWORD[40+rsp] + mov DWORD[r13],r8d + mov DWORD[4+r13],r9d + mov DWORD[8+r13],r10d + mov DWORD[12+r13],r11d + jmp NEAR $L$cbc_done + +ALIGN 16 +$L$cbc_enc_tail: + xor rax,rax + mov QWORD[((0+24))+rsp],rax + mov QWORD[((8+24))+rsp],rax + mov QWORD[16+rsp],rax + +$L$cbc_enc_pushf: + pushfq + cld + mov rsi,r12 + lea rdi,[((8+24))+rsp] + DD 0x9066A4F3 + popfq +$L$cbc_enc_popf: + + lea r12,[24+rsp] + lea rax,[((16+24))+rsp] + mov QWORD[8+rsp],rax + jmp NEAR $L$cbc_eloop + +ALIGN 16 +$L$CBC_DECRYPT: + xchg r15,r14 + add rdx,15 + and rcx,15 + and rdx,-16 + mov QWORD[rsp],r14 + lea rdx,[rdx*1+r12] + mov QWORD[8+rsp],rdx + mov QWORD[16+rsp],rcx + + mov rax,QWORD[rbx] + mov rbx,QWORD[8+rbx] + jmp NEAR $L$cbc_dloop +ALIGN 16 +$L$cbc_dloop: + mov r8d,DWORD[r12] + mov r9d,DWORD[4+r12] + mov r10d,DWORD[8+r12] + bswap r8d + mov r11d,DWORD[12+r12] + bswap r9d + mov QWORD[((0+24))+rsp],rax + bswap r10d + mov QWORD[((8+24))+rsp],rbx + bswap r11d + + call _x86_64_Camellia_decrypt + + mov r14,QWORD[rsp] + mov rdx,QWORD[8+rsp] + mov rcx,QWORD[16+rsp] + + bswap r8d + mov rax,QWORD[r12] + bswap r9d + mov rbx,QWORD[8+r12] + bswap r10d + xor r8d,DWORD[((0+24))+rsp] + bswap r11d + xor r9d,DWORD[((4+24))+rsp] + xor r10d,DWORD[((8+24))+rsp] + lea r12,[16+r12] + xor r11d,DWORD[((12+24))+rsp] + cmp r12,rdx + je NEAR $L$cbc_ddone + + mov DWORD[r13],r8d + mov DWORD[4+r13],r9d + mov DWORD[8+r13],r10d + mov DWORD[12+r13],r11d + + lea r13,[16+r13] + jmp NEAR $L$cbc_dloop + +ALIGN 16 +$L$cbc_ddone: + mov rdx,QWORD[40+rsp] + cmp rcx,0 + jne NEAR $L$cbc_dec_tail + + mov DWORD[r13],r8d + mov DWORD[4+r13],r9d + mov DWORD[8+r13],r10d + mov DWORD[12+r13],r11d + + mov QWORD[rdx],rax + mov QWORD[8+rdx],rbx + jmp NEAR $L$cbc_done +ALIGN 16 +$L$cbc_dec_tail: + mov DWORD[((0+24))+rsp],r8d + mov DWORD[((4+24))+rsp],r9d + mov DWORD[((8+24))+rsp],r10d + mov DWORD[((12+24))+rsp],r11d + +$L$cbc_dec_pushf: + pushfq + cld + lea rsi,[((8+24))+rsp] + lea rdi,[r13] + DD 0x9066A4F3 + popfq +$L$cbc_dec_popf: + + mov QWORD[rdx],rax + mov QWORD[8+rdx],rbx + jmp NEAR $L$cbc_done + +ALIGN 16 +$L$cbc_done: + mov rcx,QWORD[48+rsp] + + mov r15,QWORD[rcx] + + mov r14,QWORD[8+rcx] + + mov r13,QWORD[16+rcx] + + mov r12,QWORD[24+rcx] + + mov rbp,QWORD[32+rcx] + + mov rbx,QWORD[40+rcx] + + lea rsp,[48+rcx] + +$L$cbc_abort: + mov rdi,QWORD[8+rsp] ;WIN64 epilogue + mov rsi,QWORD[16+rsp] + DB 0F3h,0C3h ;repret + +$L$SEH_end_Camellia_cbc_encrypt: + +DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54 +DB 95,54,52,32,98,121,32,60,97,112,112,114,111,64,111,112 +DB 101,110,115,115,108,46,111,114,103,62,0 +EXTERN __imp_RtlVirtualUnwind + +ALIGN 16 +common_se_handler: + push rsi + push rdi + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + pushfq + lea rsp,[((-64))+rsp] + + mov rax,QWORD[120+r8] + mov rbx,QWORD[248+r8] + + mov rsi,QWORD[8+r9] + mov r11,QWORD[56+r9] + + mov r10d,DWORD[r11] + lea r10,[r10*1+rsi] + cmp rbx,r10 + jb NEAR $L$in_prologue + + mov rax,QWORD[152+r8] + + mov r10d,DWORD[4+r11] + lea r10,[r10*1+rsi] + cmp rbx,r10 + jae NEAR $L$in_prologue + + lea rax,[40+rax] + mov rbx,QWORD[((-8))+rax] + mov rbp,QWORD[((-16))+rax] + mov r13,QWORD[((-24))+rax] + mov r14,QWORD[((-32))+rax] + mov r15,QWORD[((-40))+rax] + mov QWORD[144+r8],rbx + mov QWORD[160+r8],rbp + mov QWORD[224+r8],r13 + mov QWORD[232+r8],r14 + mov QWORD[240+r8],r15 + +$L$in_prologue: + mov rdi,QWORD[8+rax] + mov rsi,QWORD[16+rax] + mov QWORD[152+r8],rax + mov QWORD[168+r8],rsi + mov QWORD[176+r8],rdi + + jmp NEAR $L$common_seh_exit + + + +ALIGN 16 +cbc_se_handler: + push rsi + push rdi + push rbx + push rbp + push r12 + push r13 + push r14 + push r15 + pushfq + lea rsp,[((-64))+rsp] + + mov rax,QWORD[120+r8] + mov rbx,QWORD[248+r8] + + lea r10,[$L$cbc_prologue] + cmp rbx,r10 + jb NEAR $L$in_cbc_prologue + + lea r10,[$L$cbc_body] + cmp rbx,r10 + jb NEAR $L$in_cbc_frame_setup + + mov rax,QWORD[152+r8] + + lea r10,[$L$cbc_abort] + cmp rbx,r10 + jae NEAR $L$in_cbc_prologue + + + lea r10,[$L$cbc_enc_pushf] + cmp rbx,r10 + jbe NEAR $L$in_cbc_no_flag + lea rax,[8+rax] + lea r10,[$L$cbc_enc_popf] + cmp rbx,r10 + jb NEAR $L$in_cbc_no_flag + lea rax,[((-8))+rax] + lea r10,[$L$cbc_dec_pushf] + cmp rbx,r10 + jbe NEAR $L$in_cbc_no_flag + lea rax,[8+rax] + lea r10,[$L$cbc_dec_popf] + cmp rbx,r10 + jb NEAR $L$in_cbc_no_flag + lea rax,[((-8))+rax] + +$L$in_cbc_no_flag: + mov rax,QWORD[48+rax] + lea rax,[48+rax] + +$L$in_cbc_frame_setup: + mov rbx,QWORD[((-8))+rax] + mov rbp,QWORD[((-16))+rax] + mov r12,QWORD[((-24))+rax] + mov r13,QWORD[((-32))+rax] + mov r14,QWORD[((-40))+rax] + mov r15,QWORD[((-48))+rax] + mov QWORD[144+r8],rbx + mov QWORD[160+r8],rbp + mov QWORD[216+r8],r12 + mov QWORD[224+r8],r13 + mov QWORD[232+r8],r14 + mov QWORD[240+r8],r15 + +$L$in_cbc_prologue: + mov rdi,QWORD[8+rax] + mov rsi,QWORD[16+rax] + mov QWORD[152+r8],rax + mov QWORD[168+r8],rsi + mov QWORD[176+r8],rdi + +ALIGN 4 +$L$common_seh_exit: + + mov rdi,QWORD[40+r9] + mov rsi,r8 + mov ecx,154 + DD 0xa548f3fc + + mov rsi,r9 + xor rcx,rcx + mov rdx,QWORD[8+rsi] + mov r8,QWORD[rsi] + mov r9,QWORD[16+rsi] + mov r10,QWORD[40+rsi] + lea r11,[56+rsi] + lea r12,[24+rsi] + mov QWORD[32+rsp],r10 + mov QWORD[40+rsp],r11 + mov QWORD[48+rsp],r12 + mov QWORD[56+rsp],rcx + call QWORD[__imp_RtlVirtualUnwind] + + mov eax,1 + lea rsp,[64+rsp] + popfq + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + pop rbx + pop rdi + pop rsi + DB 0F3h,0C3h ;repret + + +section .pdata rdata align=4 +ALIGN 4 + DD $L$SEH_begin_Camellia_EncryptBlock_Rounds wrt ..imagebase + DD $L$SEH_end_Camellia_EncryptBlock_Rounds wrt ..imagebase + DD $L$SEH_info_Camellia_EncryptBlock_Rounds wrt ..imagebase + + DD $L$SEH_begin_Camellia_DecryptBlock_Rounds wrt ..imagebase + DD $L$SEH_end_Camellia_DecryptBlock_Rounds wrt ..imagebase + DD $L$SEH_info_Camellia_DecryptBlock_Rounds wrt ..imagebase + + DD $L$SEH_begin_Camellia_Ekeygen wrt ..imagebase + DD $L$SEH_end_Camellia_Ekeygen wrt ..imagebase + DD $L$SEH_info_Camellia_Ekeygen wrt ..imagebase + + DD $L$SEH_begin_Camellia_cbc_encrypt wrt ..imagebase + DD $L$SEH_end_Camellia_cbc_encrypt wrt ..imagebase + DD $L$SEH_info_Camellia_cbc_encrypt wrt ..imagebase + +section .xdata rdata align=8 +ALIGN 8 +$L$SEH_info_Camellia_EncryptBlock_Rounds: +DB 9,0,0,0 + DD common_se_handler wrt ..imagebase + DD $L$enc_prologue wrt ..imagebase,$L$enc_epilogue wrt ..imagebase +$L$SEH_info_Camellia_DecryptBlock_Rounds: +DB 9,0,0,0 + DD common_se_handler wrt ..imagebase + DD $L$dec_prologue wrt ..imagebase,$L$dec_epilogue wrt ..imagebase +$L$SEH_info_Camellia_Ekeygen: +DB 9,0,0,0 + DD common_se_handler wrt ..imagebase + DD $L$key_prologue wrt ..imagebase,$L$key_epilogue wrt ..imagebase +$L$SEH_info_Camellia_cbc_encrypt: +DB 9,0,0,0 + DD cbc_se_handler wrt ..imagebase diff --git a/CryptoPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h b/CryptoPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h index f40117295c..7b29acdc0b 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h +++ b/CryptoPkg/Library/OpensslLib/OpensslGen/include/openssl/configuration-ec.h @@ -73,9 +73,6 @@ extern "C" { # ifndef OPENSSL_NO_BROTLI_DYNAMIC # define OPENSSL_NO_BROTLI_DYNAMIC # endif -# ifndef OPENSSL_NO_CAMELLIA -# define OPENSSL_NO_CAMELLIA -# endif # ifndef OPENSSL_NO_CAPIENG # define OPENSSL_NO_CAPIENG # endif @@ -85,9 +82,6 @@ extern "C" { # ifndef OPENSSL_NO_CHACHA # define OPENSSL_NO_CHACHA # endif -# ifndef OPENSSL_NO_CMAC -# define OPENSSL_NO_CMAC -# endif # ifndef OPENSSL_NO_CMP # define OPENSSL_NO_CMP # endif diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf b/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf index 138e962e30..90f31733ae 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf +++ b/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf @@ -171,6 +171,14 @@ $(OPENSSL_PATH)/crypto/bn/bn_x931p.c $(OPENSSL_PATH)/crypto/buffer/buf_err.c $(OPENSSL_PATH)/crypto/buffer/buffer.c + $(OPENSSL_PATH)/crypto/camellia/camellia.c + $(OPENSSL_PATH)/crypto/camellia/cmll_cbc.c + $(OPENSSL_PATH)/crypto/camellia/cmll_cfb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ctr.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ecb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_misc.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ofb.c + $(OPENSSL_PATH)/crypto/cmac/cmac.c $(OPENSSL_PATH)/crypto/comp/c_brotli.c $(OPENSSL_PATH)/crypto/comp/c_zlib.c $(OPENSSL_PATH)/crypto/comp/c_zstd.c @@ -275,6 +283,7 @@ $(OPENSSL_PATH)/crypto/evp/e_aes_cbc_hmac_sha256.c $(OPENSSL_PATH)/crypto/evp/e_aria.c $(OPENSSL_PATH)/crypto/evp/e_bf.c + $(OPENSSL_PATH)/crypto/evp/e_camellia.c $(OPENSSL_PATH)/crypto/evp/e_cast.c $(OPENSSL_PATH)/crypto/evp/e_chacha20_poly1305.c $(OPENSSL_PATH)/crypto/evp/e_des.c @@ -635,6 +644,8 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_fips.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c @@ -677,6 +688,7 @@ $(OPENSSL_PATH)/providers/implementations/keymgmt/kdf_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/mac_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/rsa_kmgmt.c + $(OPENSSL_PATH)/providers/implementations/macs/cmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/gmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/hmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/kmac_prov.c diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf b/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf index 7bb38d208b..b465d3aea6 100644 --- a/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf +++ b/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf @@ -28,8 +28,8 @@ DEFINE OPENSSL_PATH = openssl DEFINE OPENSSL_GEN_PATH = OpensslGen DEFINE OPENSSL_FLAGS = -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D OPENSSL_NO_INLINE_ASM - DEFINE OPENSSL_FLAGS_IA32 = -DAES_ASM -DGHASH_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM - DEFINE OPENSSL_FLAGS_X64 = -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM + DEFINE OPENSSL_FLAGS_IA32 = -DAES_ASM -DCMLL_ASM -DGHASH_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM + DEFINE OPENSSL_FLAGS_X64 = -DAES_ASM -DBSAES_ASM -DCMLL_ASM -DGHASH_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM DEFINE OPENSSL_FLAGS_AARCH64 = -DBSAES_ASM -DKECCAK1600_ASM -DMD5_ASM -DOPENSSL_CPUID_OBJ -DOPENSSL_SM3_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM # @@ -191,6 +191,11 @@ $(OPENSSL_PATH)/crypto/bn/bn_x931p.c $(OPENSSL_PATH)/crypto/buffer/buf_err.c $(OPENSSL_PATH)/crypto/buffer/buffer.c + $(OPENSSL_PATH)/crypto/camellia/cmll_cfb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ctr.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ecb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ofb.c + $(OPENSSL_PATH)/crypto/cmac/cmac.c $(OPENSSL_PATH)/crypto/comp/c_brotli.c $(OPENSSL_PATH)/crypto/comp/c_zlib.c $(OPENSSL_PATH)/crypto/comp/c_zstd.c @@ -295,6 +300,7 @@ $(OPENSSL_PATH)/crypto/evp/e_aes_cbc_hmac_sha256.c $(OPENSSL_PATH)/crypto/evp/e_aria.c $(OPENSSL_PATH)/crypto/evp/e_bf.c + $(OPENSSL_PATH)/crypto/evp/e_camellia.c $(OPENSSL_PATH)/crypto/evp/e_cast.c $(OPENSSL_PATH)/crypto/evp/e_chacha20_poly1305.c $(OPENSSL_PATH)/crypto/evp/e_des.c @@ -654,6 +660,8 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_fips.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c @@ -696,6 +704,7 @@ $(OPENSSL_PATH)/providers/implementations/keymgmt/kdf_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/mac_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/rsa_kmgmt.c + $(OPENSSL_PATH)/providers/implementations/macs/cmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/gmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/hmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/kmac_prov.c @@ -790,6 +799,7 @@ $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/aes/aes-586.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/aes/aesni-x86.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/aes/vpaes-x86.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm + $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/camellia/cmll-x86.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/x86cpuid.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/md5/md5-586.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-MSFT/crypto/modes/ghash-x86.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -799,6 +809,7 @@ $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/aes/aes-586.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/aes/aesni-x86.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/aes/vpaes-x86.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm + $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/camellia/cmll-x86.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/x86cpuid.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/md5/md5-586.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/IA32-GCC/crypto/modes/ghash-x86.S ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -948,6 +959,12 @@ $(OPENSSL_PATH)/crypto/bn/rsaz_exp_x2.c $(OPENSSL_PATH)/crypto/buffer/buf_err.c $(OPENSSL_PATH)/crypto/buffer/buffer.c + $(OPENSSL_PATH)/crypto/camellia/cmll_cfb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ctr.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ecb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_misc.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ofb.c + $(OPENSSL_PATH)/crypto/cmac/cmac.c $(OPENSSL_PATH)/crypto/comp/c_brotli.c $(OPENSSL_PATH)/crypto/comp/c_zlib.c $(OPENSSL_PATH)/crypto/comp/c_zstd.c @@ -1052,6 +1069,7 @@ $(OPENSSL_PATH)/crypto/evp/e_aes_cbc_hmac_sha256.c $(OPENSSL_PATH)/crypto/evp/e_aria.c $(OPENSSL_PATH)/crypto/evp/e_bf.c + $(OPENSSL_PATH)/crypto/evp/e_camellia.c $(OPENSSL_PATH)/crypto/evp/e_cast.c $(OPENSSL_PATH)/crypto/evp/e_chacha20_poly1305.c $(OPENSSL_PATH)/crypto/evp/e_des.c @@ -1410,6 +1428,8 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_fips.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c @@ -1452,6 +1472,7 @@ $(OPENSSL_PATH)/providers/implementations/keymgmt/kdf_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/mac_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/rsa_kmgmt.c + $(OPENSSL_PATH)/providers/implementations/macs/cmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/gmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/hmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/kmac_prov.c @@ -1551,6 +1572,7 @@ $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/aesni-xts-avx512.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/bsaes-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/aes/vpaes-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm + $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/camellia/cmll-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/x86_64cpuid.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/md5/md5-x86_64.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-MSFT/crypto/modes/aes-gcm-avx512.nasm ||||gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -1570,6 +1592,7 @@ $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/aesni-xts-avx512.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/bsaes-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/aes/vpaes-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm + $(OPENSSL_GEN_PATH)/X64-GCC/crypto/camellia/cmll-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/x86_64cpuid.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/md5/md5-x86_64.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm $(OPENSSL_GEN_PATH)/X64-GCC/crypto/modes/aes-gcm-avx512.s ||||!gEfiCryptoPkgTokenSpaceGuid.PcdOpensslLibAssemblySourceStyleNasm @@ -1725,6 +1748,14 @@ $(OPENSSL_PATH)/crypto/bn/bn_x931p.c $(OPENSSL_PATH)/crypto/buffer/buf_err.c $(OPENSSL_PATH)/crypto/buffer/buffer.c + $(OPENSSL_PATH)/crypto/camellia/camellia.c + $(OPENSSL_PATH)/crypto/camellia/cmll_cbc.c + $(OPENSSL_PATH)/crypto/camellia/cmll_cfb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ctr.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ecb.c + $(OPENSSL_PATH)/crypto/camellia/cmll_misc.c + $(OPENSSL_PATH)/crypto/camellia/cmll_ofb.c + $(OPENSSL_PATH)/crypto/cmac/cmac.c $(OPENSSL_PATH)/crypto/comp/c_brotli.c $(OPENSSL_PATH)/crypto/comp/c_zlib.c $(OPENSSL_PATH)/crypto/comp/c_zstd.c @@ -1829,6 +1860,7 @@ $(OPENSSL_PATH)/crypto/evp/e_aes_cbc_hmac_sha256.c $(OPENSSL_PATH)/crypto/evp/e_aria.c $(OPENSSL_PATH)/crypto/evp/e_bf.c + $(OPENSSL_PATH)/crypto/evp/e_camellia.c $(OPENSSL_PATH)/crypto/evp/e_cast.c $(OPENSSL_PATH)/crypto/evp/e_chacha20_poly1305.c $(OPENSSL_PATH)/crypto/evp/e_des.c @@ -2187,6 +2219,8 @@ $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_fips.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_aes_xts_hw.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia.c + $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_camellia_hw.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_cts.c $(OPENSSL_PATH)/providers/implementations/ciphers/cipher_null.c $(OPENSSL_PATH)/providers/implementations/digests/md5_prov.c @@ -2229,6 +2263,7 @@ $(OPENSSL_PATH)/providers/implementations/keymgmt/kdf_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/mac_legacy_kmgmt.c $(OPENSSL_PATH)/providers/implementations/keymgmt/rsa_kmgmt.c + $(OPENSSL_PATH)/providers/implementations/macs/cmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/gmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/hmac_prov.c $(OPENSSL_PATH)/providers/implementations/macs/kmac_prov.c diff --git a/CryptoPkg/Library/OpensslLib/configure.py b/CryptoPkg/Library/OpensslLib/configure.py index cc5adc9106..4b70006064 100755 --- a/CryptoPkg/Library/OpensslLib/configure.py +++ b/CryptoPkg/Library/OpensslLib/configure.py @@ -24,11 +24,9 @@ def openssl_configure(openssldir, target, ec = True): 'no-autoload-config', 'no-bf', 'no-blake2', - 'no-camellia', 'no-capieng', 'no-cast', 'no-chacha', - 'no-cmac', 'no-cmp', 'no-cms', 'no-ct', @@ -94,7 +92,7 @@ def openssl_configure(openssldir, target, ec = True): 'disable-legacy', ] if not ec: - cmdline += [ 'no-ec', ] + cmdline += [ 'no-ec', 'no-camellia', 'no-cmac' ] print('') print(f'# -*- configure openssl for {target} (ec={ec}) -*-') rc = subprocess.run(cmdline, cwd = openssldir,