Files
wolfssl/wolfcrypt/src/sp_x86_64_asm.S
T
Sean Parkinson ec958de649 ASM generation fixes
Many comment fixes, label renaming and non-functional changes.

  Bug Fixes

x86_64 (aes_xts_asm.S/.asm)

- Removed a spurious movl %edx, %eax that was clobbering a register,
then
fixed two comparisons to use %edx instead of the now-stale %eax. This
was a
functional bug in AES-XTS key-rounds selection.

x86_64 (fe_x25519_asm.S)

- Changed xor %rbx, %rbx → xorq %rbx, %rbx (explicit 64-bit operand
size
suffix).

ARM32 (sp_arm32.c, sp_cortexm.c)

- Fixed typo in assembly label names: sub_in_pkace → sub_in_place
(both label
definitions and branch targets). Affected 2048-bit and 3072-bit SP
functions.
- Fixed wrong source register in multiply/accumulate sequences: r11 →
r7 and
r3 → r4 (functional register-use bugs).

ARM32 ChaCha (armv8-32-chacha-asm.S/_c.c)

- Fixed label typo: same_keyb_ytes → same_key_bytes
- Fixed NEON instruction syntax: vrev32.i16 → vrev32.16 (invalid
mnemonic →
correct ARM NEON form, affects multiple sites)

ARM32 SHA3 (armv8-32-sha3-asm_c.c, .S)

- Fixed symbol name typo: L_sha3_arm2_neon_rt / L_sha3_arm2_rt →
L_sha3_arm32_neon_rt / L_sha3_arm32_rt

ARM32 AES (armv8-32-aes-asm_c.c, thumb2-aes-asm_c.c, .S variants)

- Fixed #endif comment: WOLFSSL_ARMASM_AES_BLOCK_INLINE →
  !WOLFSSL_ARMASM_AES_BLOCK_INLINE (logic inversion was missing from the
comment)

ARM64 ChaCha (armv8-chacha-asm_c.c/.S)

- Fixed label typo: arm64loop_lt_8 → arm64_loop_lt_8

ARM32 ML-KEM (armv8-32-mlkem-asm.S/_c.c)

- Fixed #endif comment typo: WOLFSLS_ARM_ARCH → WOLFSSL_ARM_ARCH
(across many
  occurrences)

SHA-512 (sha512_asm.S)

- Corrected off-by-one in comments: msg_sched done: 0-3 → 0-1, 2-5 →
2-3, etc.
   (only 2 entries scheduled per block, not 4)
2026-03-20 11:56:25 +10:00

78932 lines
2.0 MiB
Plaintext

/* sp_x86_64_asm.S */
/*
* Copyright (C) 2006-2026 wolfSSL Inc.
*
* This file is part of wolfSSL.
*
* wolfSSL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* wolfSSL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*/
#ifdef WOLFSSL_USER_SETTINGS
#ifdef WOLFSSL_USER_SETTINGS_ASM
/*
* user_settings_asm.h is a file generated by the script user_settings_asm.sh.
* The script takes in a user_settings.h and produces user_settings_asm.h, which
* is a stripped down version of user_settings.h containing only preprocessor
* directives. This makes the header safe to include in assembly (.S) files.
*/
#include "user_settings_asm.h"
#else
/*
* Note: if user_settings.h contains any C code (e.g. a typedef or function
* prototype), including it here in an assembly (.S) file will cause an
* assembler failure. See user_settings_asm.h above.
*/
#include "user_settings.h"
#endif /* WOLFSSL_USER_SETTINGS_ASM */
#endif /* WOLFSSL_USER_SETTINGS */
#ifndef HAVE_INTEL_AVX1
#define HAVE_INTEL_AVX1
#endif /* HAVE_INTEL_AVX1 */
#ifndef NO_AVX2_SUPPORT
#ifndef HAVE_INTEL_AVX2
#define HAVE_INTEL_AVX2
#endif /* HAVE_INTEL_AVX2 */
#endif /* NO_AVX2_SUPPORT */
#ifdef WOLFSSL_SP_X86_64_ASM
#ifndef WOLFSSL_SP_NO_2048
#ifndef WOLFSSL_SP_NO_2048
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_2048_from_bin_bswap
.type sp_2048_from_bin_bswap,@function
.align 16
sp_2048_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_2048_from_bin_bswap
.p2align 4
_sp_2048_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x100, %r10
xorq %r11, %r11
jmp L_2048_from_bin_bswap_64_end
L_2048_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_2048_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_2048_from_bin_bswap_64_start
jmp L_2048_from_bin_bswap_8_end
L_2048_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_2048_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_2048_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_2048_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_2048_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_2048_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_2048_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_2048_from_bin_bswap_zero_end
L_2048_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_2048_from_bin_bswap_zero_start
L_2048_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_2048_from_bin_bswap,.-sp_2048_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_2048_from_bin_movbe
.type sp_2048_from_bin_movbe,@function
.align 16
sp_2048_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_2048_from_bin_movbe
.p2align 4
_sp_2048_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x100, %r10
jmp L_2048_from_bin_movbe_64_end
L_2048_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_2048_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_2048_from_bin_movbe_64_start
jmp L_2048_from_bin_movbe_8_end
L_2048_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_2048_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_2048_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_2048_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_2048_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_2048_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_2048_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_2048_from_bin_movbe_zero_end
L_2048_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_2048_from_bin_movbe_zero_start
L_2048_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_2048_from_bin_movbe,.-sp_2048_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 256
* Uses the bswap instruction.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_2048_to_bin_bswap_32
.type sp_2048_to_bin_bswap_32,@function
.align 16
sp_2048_to_bin_bswap_32:
#else
.section __TEXT,__text
.globl _sp_2048_to_bin_bswap_32
.p2align 4
_sp_2048_to_bin_bswap_32:
#endif /* __APPLE__ */
movq 248(%rdi), %rdx
movq 240(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movq 232(%rdi), %rdx
movq 224(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movq 216(%rdi), %rdx
movq 208(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
movq 200(%rdi), %rdx
movq 192(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 48(%rsi)
movq %rax, 56(%rsi)
movq 184(%rdi), %rdx
movq 176(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 64(%rsi)
movq %rax, 72(%rsi)
movq 168(%rdi), %rdx
movq 160(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 80(%rsi)
movq %rax, 88(%rsi)
movq 152(%rdi), %rdx
movq 144(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 96(%rsi)
movq %rax, 104(%rsi)
movq 136(%rdi), %rdx
movq 128(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 112(%rsi)
movq %rax, 120(%rsi)
movq 120(%rdi), %rdx
movq 112(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 128(%rsi)
movq %rax, 136(%rsi)
movq 104(%rdi), %rdx
movq 96(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 144(%rsi)
movq %rax, 152(%rsi)
movq 88(%rdi), %rdx
movq 80(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 160(%rsi)
movq %rax, 168(%rsi)
movq 72(%rdi), %rdx
movq 64(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 176(%rsi)
movq %rax, 184(%rsi)
movq 56(%rdi), %rdx
movq 48(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 192(%rsi)
movq %rax, 200(%rsi)
movq 40(%rdi), %rdx
movq 32(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 208(%rsi)
movq %rax, 216(%rsi)
movq 24(%rdi), %rdx
movq 16(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 224(%rsi)
movq %rax, 232(%rsi)
movq 8(%rdi), %rdx
movq (%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 240(%rsi)
movq %rax, 248(%rsi)
repz retq
#ifndef __APPLE__
.size sp_2048_to_bin_bswap_32,.-sp_2048_to_bin_bswap_32
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 256
* Uses the movbe instruction which is optional.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_2048_to_bin_movbe_32
.type sp_2048_to_bin_movbe_32,@function
.align 16
sp_2048_to_bin_movbe_32:
#else
.section __TEXT,__text
.globl _sp_2048_to_bin_movbe_32
.p2align 4
_sp_2048_to_bin_movbe_32:
#endif /* __APPLE__ */
movbeq 248(%rdi), %rdx
movbeq 240(%rdi), %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movbeq 232(%rdi), %rdx
movbeq 224(%rdi), %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movbeq 216(%rdi), %rdx
movbeq 208(%rdi), %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
movbeq 200(%rdi), %rdx
movbeq 192(%rdi), %rax
movq %rdx, 48(%rsi)
movq %rax, 56(%rsi)
movbeq 184(%rdi), %rdx
movbeq 176(%rdi), %rax
movq %rdx, 64(%rsi)
movq %rax, 72(%rsi)
movbeq 168(%rdi), %rdx
movbeq 160(%rdi), %rax
movq %rdx, 80(%rsi)
movq %rax, 88(%rsi)
movbeq 152(%rdi), %rdx
movbeq 144(%rdi), %rax
movq %rdx, 96(%rsi)
movq %rax, 104(%rsi)
movbeq 136(%rdi), %rdx
movbeq 128(%rdi), %rax
movq %rdx, 112(%rsi)
movq %rax, 120(%rsi)
movbeq 120(%rdi), %rdx
movbeq 112(%rdi), %rax
movq %rdx, 128(%rsi)
movq %rax, 136(%rsi)
movbeq 104(%rdi), %rdx
movbeq 96(%rdi), %rax
movq %rdx, 144(%rsi)
movq %rax, 152(%rsi)
movbeq 88(%rdi), %rdx
movbeq 80(%rdi), %rax
movq %rdx, 160(%rsi)
movq %rax, 168(%rsi)
movbeq 72(%rdi), %rdx
movbeq 64(%rdi), %rax
movq %rdx, 176(%rsi)
movq %rax, 184(%rsi)
movbeq 56(%rdi), %rdx
movbeq 48(%rdi), %rax
movq %rdx, 192(%rsi)
movq %rax, 200(%rsi)
movbeq 40(%rdi), %rdx
movbeq 32(%rdi), %rax
movq %rdx, 208(%rsi)
movq %rax, 216(%rsi)
movbeq 24(%rdi), %rdx
movbeq 16(%rdi), %rax
movq %rdx, 224(%rsi)
movq %rax, 232(%rsi)
movbeq 8(%rdi), %rdx
movbeq (%rdi), %rax
movq %rdx, 240(%rsi)
movq %rax, 248(%rsi)
repz retq
#ifndef __APPLE__
.size sp_2048_to_bin_movbe_32,.-sp_2048_to_bin_movbe_32
#endif /* __APPLE__ */
#endif /* NO_MOVBE_SUPPORT */
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_16
.type sp_2048_mul_16,@function
.align 16
sp_2048_mul_16:
#else
.section __TEXT,__text
.globl _sp_2048_mul_16
.p2align 4
_sp_2048_mul_16:
#endif /* __APPLE__ */
movq %rdx, %rcx
subq $0x80, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[0] * B[4]
movq 32(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[0]
movq (%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rsp)
# A[0] * B[5]
movq 40(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[4]
movq 32(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[1]
movq 8(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[0]
movq (%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 40(%rsp)
# A[0] * B[6]
movq 48(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[5]
movq 40(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[4]
movq 32(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[2]
movq 16(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[1]
movq 8(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[0]
movq (%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 48(%rsp)
# A[0] * B[7]
movq 56(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[6]
movq 48(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[5]
movq 40(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[4]
movq 32(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[3]
movq 24(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[2]
movq 16(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[1]
movq 8(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[0]
movq (%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 56(%rsp)
# A[0] * B[8]
movq 64(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[7]
movq 56(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[6]
movq 48(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[5]
movq 40(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[4]
movq 32(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[3]
movq 24(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[2]
movq 16(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[1]
movq 8(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[0]
movq (%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 64(%rsp)
# A[0] * B[9]
movq 72(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[8]
movq 64(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[7]
movq 56(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[6]
movq 48(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[5]
movq 40(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[4]
movq 32(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[3]
movq 24(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[2]
movq 16(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[1]
movq 8(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[0]
movq (%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 72(%rsp)
# A[0] * B[10]
movq 80(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[9]
movq 72(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[8]
movq 64(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[7]
movq 56(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[6]
movq 48(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[5]
movq 40(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[4]
movq 32(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[3]
movq 24(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[2]
movq 16(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[1]
movq 8(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[0]
movq (%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 80(%rsp)
# A[0] * B[11]
movq 88(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[10]
movq 80(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[9]
movq 72(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[8]
movq 64(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[7]
movq 56(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[6]
movq 48(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[5]
movq 40(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[4]
movq 32(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[3]
movq 24(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[2]
movq 16(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[1]
movq 8(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[0]
movq (%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 88(%rsp)
# A[0] * B[12]
movq 96(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[11]
movq 88(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[10]
movq 80(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[9]
movq 72(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[8]
movq 64(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[7]
movq 56(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[6]
movq 48(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[5]
movq 40(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[4]
movq 32(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[3]
movq 24(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[2]
movq 16(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[1]
movq 8(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[0]
movq (%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 96(%rsp)
# A[0] * B[13]
movq 104(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[12]
movq 96(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[11]
movq 88(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[10]
movq 80(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[9]
movq 72(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[8]
movq 64(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[7]
movq 56(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[6]
movq 48(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[5]
movq 40(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[4]
movq 32(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[3]
movq 24(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[2]
movq 16(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[1]
movq 8(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[0]
movq (%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 104(%rsp)
# A[0] * B[14]
movq 112(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[13]
movq 104(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[12]
movq 96(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[11]
movq 88(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[10]
movq 80(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[9]
movq 72(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[8]
movq 64(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[7]
movq 56(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[6]
movq 48(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[5]
movq 40(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[4]
movq 32(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[3]
movq 24(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[2]
movq 16(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[1]
movq 8(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[0]
movq (%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 112(%rsp)
# A[0] * B[15]
movq 120(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[14]
movq 112(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[13]
movq 104(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[12]
movq 96(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[11]
movq 88(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[10]
movq 80(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[9]
movq 72(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[8]
movq 64(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[7]
movq 56(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[6]
movq 48(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[5]
movq 40(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[4]
movq 32(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[3]
movq 24(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[2]
movq 16(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[1]
movq 8(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[0]
movq (%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 120(%rsp)
# A[1] * B[15]
movq 120(%rcx), %rax
mulq 8(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[14]
movq 112(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[13]
movq 104(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[12]
movq 96(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[11]
movq 88(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[10]
movq 80(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[9]
movq 72(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[8]
movq 64(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[7]
movq 56(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[6]
movq 48(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[5]
movq 40(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[4]
movq 32(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[3]
movq 24(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[2]
movq 16(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[1]
movq 8(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 128(%rdi)
# A[2] * B[15]
movq 120(%rcx), %rax
mulq 16(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[14]
movq 112(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[13]
movq 104(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[12]
movq 96(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[11]
movq 88(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[10]
movq 80(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[9]
movq 72(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[8]
movq 64(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[7]
movq 56(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[6]
movq 48(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[5]
movq 40(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[4]
movq 32(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[3]
movq 24(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[2]
movq 16(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 136(%rdi)
# A[3] * B[15]
movq 120(%rcx), %rax
mulq 24(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[14]
movq 112(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[13]
movq 104(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[12]
movq 96(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[11]
movq 88(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[10]
movq 80(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[9]
movq 72(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[8]
movq 64(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[7]
movq 56(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[6]
movq 48(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[5]
movq 40(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[4]
movq 32(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[3]
movq 24(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 144(%rdi)
# A[4] * B[15]
movq 120(%rcx), %rax
mulq 32(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[14]
movq 112(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[13]
movq 104(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[12]
movq 96(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[11]
movq 88(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[10]
movq 80(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[9]
movq 72(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[8]
movq 64(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[7]
movq 56(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[6]
movq 48(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[5]
movq 40(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[4]
movq 32(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 152(%rdi)
# A[5] * B[15]
movq 120(%rcx), %rax
mulq 40(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[14]
movq 112(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[13]
movq 104(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[12]
movq 96(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[11]
movq 88(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[10]
movq 80(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[9]
movq 72(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[8]
movq 64(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[7]
movq 56(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[6]
movq 48(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[5]
movq 40(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 160(%rdi)
# A[6] * B[15]
movq 120(%rcx), %rax
mulq 48(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[14]
movq 112(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[13]
movq 104(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[12]
movq 96(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[11]
movq 88(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[10]
movq 80(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[9]
movq 72(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[8]
movq 64(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[7]
movq 56(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[6]
movq 48(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 168(%rdi)
# A[7] * B[15]
movq 120(%rcx), %rax
mulq 56(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[14]
movq 112(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[13]
movq 104(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[12]
movq 96(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[11]
movq 88(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[10]
movq 80(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[9]
movq 72(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[8]
movq 64(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[7]
movq 56(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 176(%rdi)
# A[8] * B[15]
movq 120(%rcx), %rax
mulq 64(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[14]
movq 112(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[13]
movq 104(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[12]
movq 96(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[11]
movq 88(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[10]
movq 80(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[9]
movq 72(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[8]
movq 64(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 184(%rdi)
# A[9] * B[15]
movq 120(%rcx), %rax
mulq 72(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[14]
movq 112(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[13]
movq 104(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[12]
movq 96(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[11]
movq 88(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[10]
movq 80(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[9]
movq 72(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 192(%rdi)
# A[10] * B[15]
movq 120(%rcx), %rax
mulq 80(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[14]
movq 112(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[13]
movq 104(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[12]
movq 96(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[11]
movq 88(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[10]
movq 80(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 200(%rdi)
# A[11] * B[15]
movq 120(%rcx), %rax
mulq 88(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[14]
movq 112(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[13]
movq 104(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[12]
movq 96(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[11]
movq 88(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 208(%rdi)
# A[12] * B[15]
movq 120(%rcx), %rax
mulq 96(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[14]
movq 112(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[13]
movq 104(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[12]
movq 96(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 216(%rdi)
# A[13] * B[15]
movq 120(%rcx), %rax
mulq 104(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[14]
movq 112(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[13]
movq 104(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 224(%rdi)
# A[14] * B[15]
movq 120(%rcx), %rax
mulq 112(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[14]
movq 112(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 232(%rdi)
# A[15] * B[15]
movq 120(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r8
movq 24(%rsp), %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r8
movq 56(%rsp), %r9
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r8
movq 88(%rsp), %r9
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rsp), %rax
movq 104(%rsp), %rdx
movq 112(%rsp), %r8
movq 120(%rsp), %r9
movq %rax, 96(%rdi)
movq %rdx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_2048_mul_16,.-sp_2048_mul_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r Result of multiplication.
* a First number to multiply.
* b Second number to multiply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_avx2_16
.type sp_2048_mul_avx2_16,@function
.align 16
sp_2048_mul_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_mul_avx2_16
.p2align 4
_sp_2048_mul_avx2_16:
#endif /* __APPLE__ */
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
movq %rdx, %rbp
subq $0x80, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbx
cmovne %rdi, %rbx
cmpq %rdi, %rbp
cmove %rsp, %rbx
addq $0x80, %rdi
xorq %r14, %r14
movq (%rsi), %rdx
# A[0] * B[0]
mulx (%rbp), %r8, %r9
# A[0] * B[1]
mulx 8(%rbp), %rax, %r10
movq %r8, (%rbx)
adcxq %rax, %r9
# A[0] * B[2]
mulx 16(%rbp), %rax, %r11
movq %r9, 8(%rbx)
adcxq %rax, %r10
# A[0] * B[3]
mulx 24(%rbp), %rax, %r12
movq %r10, 16(%rbx)
adcxq %rax, %r11
movq %r11, 24(%rbx)
# A[0] * B[4]
mulx 32(%rbp), %rax, %r8
adcxq %rax, %r12
# A[0] * B[5]
mulx 40(%rbp), %rax, %r9
movq %r12, 32(%rbx)
adcxq %rax, %r8
# A[0] * B[6]
mulx 48(%rbp), %rax, %r10
movq %r8, 40(%rbx)
adcxq %rax, %r9
# A[0] * B[7]
mulx 56(%rbp), %rax, %r11
movq %r9, 48(%rbx)
adcxq %rax, %r10
movq %r10, 56(%rbx)
# A[0] * B[8]
mulx 64(%rbp), %rax, %r12
adcxq %rax, %r11
# A[0] * B[9]
mulx 72(%rbp), %rax, %r8
movq %r11, 64(%rbx)
adcxq %rax, %r12
# A[0] * B[10]
mulx 80(%rbp), %rax, %r9
movq %r12, 72(%rbx)
adcxq %rax, %r8
# A[0] * B[11]
mulx 88(%rbp), %rax, %r10
movq %r8, 80(%rbx)
adcxq %rax, %r9
movq %r9, 88(%rbx)
# A[0] * B[12]
mulx 96(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[13]
mulx 104(%rbp), %rax, %r12
movq %r10, 96(%rbx)
adcxq %rax, %r11
# A[0] * B[14]
mulx 112(%rbp), %rax, %r8
movq %r11, 104(%rbx)
adcxq %rax, %r12
# A[0] * B[15]
mulx 120(%rbp), %rax, %r9
movq %r12, 112(%rbx)
adcxq %rax, %r8
adcxq %r14, %r9
movq %r14, %r13
adcxq %r14, %r13
movq %r8, 120(%rbx)
movq %r9, (%rdi)
movq 8(%rsi), %rdx
movq 8(%rbx), %r9
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r12
movq 40(%rbx), %r8
# A[1] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 8(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[1] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[1] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 32(%rbx)
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
# A[1] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[1] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 64(%rbx)
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
# A[1] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[1] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rbx)
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[1] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[1] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[1] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
movq %r14, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r13, %r10
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r9, (%rdi)
movq %r10, 8(%rdi)
movq 16(%rsi), %rdx
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r12
movq 40(%rbx), %r8
movq 48(%rbx), %r9
# A[2] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[2] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[2] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r12, 32(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 40(%rbx)
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
# A[2] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[2] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 72(%rbx)
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
# A[2] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 104(%rbx)
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[2] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[2] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r9, (%rdi)
movq %r14, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r13, %r11
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r10, 8(%rdi)
movq %r11, 16(%rdi)
movq 24(%rsi), %rdx
movq 24(%rbx), %r11
movq 32(%rbx), %r12
movq 40(%rbx), %r8
movq 48(%rbx), %r9
movq 56(%rbx), %r10
# A[3] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[3] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[3] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r12, 32(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 48(%rbx)
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
# A[3] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[3] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[3] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 80(%rbx)
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
# A[3] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[3] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 112(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[3] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
movq %r14, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
adcxq %r13, %r12
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r11, 16(%rdi)
movq %r12, 24(%rdi)
movq 32(%rsi), %rdx
movq 32(%rbx), %r12
movq 40(%rbx), %r8
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
# A[4] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[4] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r12, 32(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 56(%rbx)
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
# A[4] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[4] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 88(%rbx)
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[4] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[4] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[4] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 120(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[4] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[4] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
movq %r14, %r8
adcxq %rax, %r12
adoxq %rcx, %r8
adcxq %r13, %r8
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r12, 24(%rdi)
movq %r8, 32(%rdi)
movq 40(%rsi), %rdx
movq 40(%rbx), %r8
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
# A[5] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[5] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 64(%rbx)
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
# A[5] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[5] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rbx)
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[5] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[5] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[5] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
# A[5] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[5] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[5] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[5] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
movq %r14, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r13, %r9
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
movq 48(%rsi), %rdx
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
# A[6] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[6] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 72(%rbx)
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
# A[6] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 104(%rbx)
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[6] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[6] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[6] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[6] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[6] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
movq %r14, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r13, %r10
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r9, 40(%rdi)
movq %r10, 48(%rdi)
movq 56(%rsi), %rdx
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
# A[7] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[7] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[7] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 80(%rbx)
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
# A[7] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[7] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 112(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[7] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
# A[7] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[7] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
movq %r14, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r13, %r11
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r10, 48(%rdi)
movq %r11, 56(%rdi)
movq 64(%rsi), %rdx
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
# A[8] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[8] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[8] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 88(%rbx)
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[8] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[8] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[8] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 120(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
# A[8] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[8] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 24(%rdi)
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
# A[8] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
movq %r14, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
adcxq %r13, %r12
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r11, 56(%rdi)
movq %r12, 64(%rdi)
movq 72(%rsi), %rdx
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
# A[9] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[9] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[9] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rbx)
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[9] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[9] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[9] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[9] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[9] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[9] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[9] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rdi)
movq 48(%rdi), %r10
movq 56(%rdi), %r11
movq 64(%rdi), %r12
# A[9] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[9] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[9] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[9] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
movq %r14, %r8
adcxq %rax, %r12
adoxq %rcx, %r8
adcxq %r13, %r8
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r12, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rsi), %rdx
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
# A[10] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[10] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 104(%rbx)
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[10] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[10] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
# A[10] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[10] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[10] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 40(%rdi)
movq 56(%rdi), %r11
movq 64(%rdi), %r12
movq 72(%rdi), %r8
# A[10] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[10] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[10] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[10] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
movq %r14, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r13, %r9
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq 88(%rsi), %rdx
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
# A[11] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[11] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[11] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 112(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[11] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[11] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
# A[11] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[11] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
movq 64(%rdi), %r12
movq 72(%rdi), %r8
movq 80(%rdi), %r9
# A[11] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[11] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[11] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
movq %r14, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r13, %r10
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq 96(%rsi), %rdx
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[12] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[12] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[12] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[12] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 120(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
# A[12] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[12] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[12] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 24(%rdi)
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
movq 64(%rdi), %r12
# A[12] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[12] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[12] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 56(%rdi)
movq 72(%rdi), %r8
movq 80(%rdi), %r9
movq 88(%rdi), %r10
# A[12] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[12] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[12] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r9, 80(%rdi)
movq %r14, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r13, %r11
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r10, 88(%rdi)
movq %r11, 96(%rdi)
movq 104(%rsi), %rdx
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[13] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[13] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[13] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[13] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[13] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[13] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[13] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rdi)
movq 48(%rdi), %r10
movq 56(%rdi), %r11
movq 64(%rdi), %r12
movq 72(%rdi), %r8
# A[13] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[13] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[13] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 64(%rdi)
movq 80(%rdi), %r9
movq 88(%rdi), %r10
movq 96(%rdi), %r11
# A[13] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r9, 80(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[13] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r10, 88(%rdi)
movq %r14, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
adcxq %r13, %r12
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r11, 96(%rdi)
movq %r12, 104(%rdi)
movq 112(%rsi), %rdx
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[14] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[14] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[14] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
# A[14] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[14] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[14] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 40(%rdi)
movq 56(%rdi), %r11
movq 64(%rdi), %r12
movq 72(%rdi), %r8
movq 80(%rdi), %r9
# A[14] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[14] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[14] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[14] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 72(%rdi)
movq 88(%rdi), %r10
movq 96(%rdi), %r11
movq 104(%rdi), %r12
# A[14] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[14] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r9, 80(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[14] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r10, 88(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[14] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r11, 96(%rdi)
movq %r14, %r8
adcxq %rax, %r12
adoxq %rcx, %r8
adcxq %r13, %r8
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r12, 104(%rdi)
movq %r8, 112(%rdi)
movq 120(%rsi), %rdx
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[15] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[15] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
# A[15] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[15] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
movq 64(%rdi), %r12
movq 72(%rdi), %r8
movq 80(%rdi), %r9
movq 88(%rdi), %r10
# A[15] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[15] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[15] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rdi)
movq 96(%rdi), %r11
movq 104(%rdi), %r12
movq 112(%rdi), %r8
# A[15] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[15] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r10, 88(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[15] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r11, 96(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[15] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r12, 104(%rdi)
movq %r14, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r13, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
subq $0x80, %rdi
cmpq %rdi, %rsi
je L_start_2048_mul_avx2_16
cmpq %rdi, %rbp
jne L_end_2048_mul_avx2_16
L_start_2048_mul_avx2_16:
vmovdqu (%rbx), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbx), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbx), %xmm0
vmovups %xmm0, 32(%rdi)
vmovdqu 48(%rbx), %xmm0
vmovups %xmm0, 48(%rdi)
vmovdqu 64(%rbx), %xmm0
vmovups %xmm0, 64(%rdi)
vmovdqu 80(%rbx), %xmm0
vmovups %xmm0, 80(%rdi)
vmovdqu 96(%rbx), %xmm0
vmovups %xmm0, 96(%rdi)
vmovdqu 112(%rbx), %xmm0
vmovups %xmm0, 112(%rdi)
L_end_2048_mul_avx2_16:
addq $0x80, %rsp
popq %r14
popq %r13
popq %r12
popq %rbp
popq %rbx
repz retq
#ifndef __APPLE__
.size sp_2048_mul_avx2_16,.-sp_2048_mul_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_add_16
.type sp_2048_add_16,@function
.align 16
sp_2048_add_16:
#else
.section __TEXT,__text
.globl _sp_2048_add_16
.p2align 4
_sp_2048_add_16:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
adcq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
adcq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
adcq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
adcq 120(%rdx), %r8
movq %r8, 120(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_add_16,.-sp_2048_add_16
#endif /* __APPLE__ */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sub_in_place_32
.type sp_2048_sub_in_place_32,@function
.align 16
sp_2048_sub_in_place_32:
#else
.section __TEXT,__text
.globl _sp_2048_sub_in_place_32
.p2align 4
_sp_2048_sub_in_place_32:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq 72(%rdi), %rcx
movq %rdx, 64(%rdi)
sbbq 72(%rsi), %rcx
movq 80(%rdi), %rdx
movq %rcx, 72(%rdi)
sbbq 80(%rsi), %rdx
movq 88(%rdi), %rcx
movq %rdx, 80(%rdi)
sbbq 88(%rsi), %rcx
movq 96(%rdi), %rdx
movq %rcx, 88(%rdi)
sbbq 96(%rsi), %rdx
movq 104(%rdi), %rcx
movq %rdx, 96(%rdi)
sbbq 104(%rsi), %rcx
movq 112(%rdi), %rdx
movq %rcx, 104(%rdi)
sbbq 112(%rsi), %rdx
movq 120(%rdi), %rcx
movq %rdx, 112(%rdi)
sbbq 120(%rsi), %rcx
movq 128(%rdi), %rdx
movq %rcx, 120(%rdi)
sbbq 128(%rsi), %rdx
movq 136(%rdi), %rcx
movq %rdx, 128(%rdi)
sbbq 136(%rsi), %rcx
movq 144(%rdi), %rdx
movq %rcx, 136(%rdi)
sbbq 144(%rsi), %rdx
movq 152(%rdi), %rcx
movq %rdx, 144(%rdi)
sbbq 152(%rsi), %rcx
movq 160(%rdi), %rdx
movq %rcx, 152(%rdi)
sbbq 160(%rsi), %rdx
movq 168(%rdi), %rcx
movq %rdx, 160(%rdi)
sbbq 168(%rsi), %rcx
movq 176(%rdi), %rdx
movq %rcx, 168(%rdi)
sbbq 176(%rsi), %rdx
movq 184(%rdi), %rcx
movq %rdx, 176(%rdi)
sbbq 184(%rsi), %rcx
movq 192(%rdi), %rdx
movq %rcx, 184(%rdi)
sbbq 192(%rsi), %rdx
movq 200(%rdi), %rcx
movq %rdx, 192(%rdi)
sbbq 200(%rsi), %rcx
movq 208(%rdi), %rdx
movq %rcx, 200(%rdi)
sbbq 208(%rsi), %rdx
movq 216(%rdi), %rcx
movq %rdx, 208(%rdi)
sbbq 216(%rsi), %rcx
movq 224(%rdi), %rdx
movq %rcx, 216(%rdi)
sbbq 224(%rsi), %rdx
movq 232(%rdi), %rcx
movq %rdx, 224(%rdi)
sbbq 232(%rsi), %rcx
movq 240(%rdi), %rdx
movq %rcx, 232(%rdi)
sbbq 240(%rsi), %rdx
movq 248(%rdi), %rcx
movq %rdx, 240(%rdi)
sbbq 248(%rsi), %rcx
movq %rcx, 248(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_sub_in_place_32,.-sp_2048_sub_in_place_32
#endif /* __APPLE__ */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_add_32
.type sp_2048_add_32,@function
.align 16
sp_2048_add_32:
#else
.section __TEXT,__text
.globl _sp_2048_add_32
.p2align 4
_sp_2048_add_32:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
adcq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
adcq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
adcq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
adcq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
adcq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
adcq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
adcq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
adcq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
adcq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
adcq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
adcq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
adcq 184(%rdx), %r8
movq 192(%rsi), %rcx
movq %r8, 184(%rdi)
adcq 192(%rdx), %rcx
movq 200(%rsi), %r8
movq %rcx, 192(%rdi)
adcq 200(%rdx), %r8
movq 208(%rsi), %rcx
movq %r8, 200(%rdi)
adcq 208(%rdx), %rcx
movq 216(%rsi), %r8
movq %rcx, 208(%rdi)
adcq 216(%rdx), %r8
movq 224(%rsi), %rcx
movq %r8, 216(%rdi)
adcq 224(%rdx), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%rdi)
adcq 232(%rdx), %r8
movq 240(%rsi), %rcx
movq %r8, 232(%rdi)
adcq 240(%rdx), %rcx
movq 248(%rsi), %r8
movq %rcx, 240(%rdi)
adcq 248(%rdx), %r8
movq %r8, 248(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_add_32,.-sp_2048_add_32
#endif /* __APPLE__ */
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_32
.type sp_2048_mul_32,@function
.align 16
sp_2048_mul_32:
#else
.section __TEXT,__text
.globl _sp_2048_mul_32
.p2align 4
_sp_2048_mul_32:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x328, %rsp
movq %rdi, 768(%rsp)
movq %rsi, 776(%rsp)
movq %rdx, 784(%rsp)
leaq 512(%rsp), %r10
leaq 128(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq 96(%rsi), %rax
movq %r8, 88(%r10)
adcq 96(%r12), %rax
movq 104(%rsi), %rcx
movq %rax, 96(%r10)
adcq 104(%r12), %rcx
movq 112(%rsi), %r8
movq %rcx, 104(%r10)
adcq 112(%r12), %r8
movq 120(%rsi), %rax
movq %r8, 112(%r10)
adcq 120(%r12), %rax
movq %rax, 120(%r10)
adcq $0x00, %r13
movq %r13, 792(%rsp)
leaq 640(%rsp), %r11
leaq 128(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq 96(%rdx), %rax
movq %r8, 88(%r11)
adcq 96(%r12), %rax
movq 104(%rdx), %rcx
movq %rax, 96(%r11)
adcq 104(%r12), %rcx
movq 112(%rdx), %r8
movq %rcx, 104(%r11)
adcq 112(%r12), %r8
movq 120(%rdx), %rax
movq %r8, 112(%r11)
adcq 120(%r12), %rax
movq %rax, 120(%r11)
adcq $0x00, %r14
movq %r14, 800(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_mul_16@plt
#else
callq _sp_2048_mul_16
#endif /* __APPLE__ */
movq 784(%rsp), %rdx
movq 776(%rsp), %rsi
leaq 256(%rsp), %rdi
addq $0x80, %rdx
addq $0x80, %rsi
#ifndef __APPLE__
callq sp_2048_mul_16@plt
#else
callq _sp_2048_mul_16
#endif /* __APPLE__ */
movq 784(%rsp), %rdx
movq 776(%rsp), %rsi
movq 768(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_mul_16@plt
#else
callq _sp_2048_mul_16
#endif /* __APPLE__ */
#ifdef _WIN64
movq 784(%rsp), %rdx
movq 776(%rsp), %rsi
movq 768(%rsp), %rdi
#endif /* _WIN64 */
movq 792(%rsp), %r13
movq 800(%rsp), %r14
movq 768(%rsp), %r15
movq %r13, %r9
leaq 512(%rsp), %r10
leaq 640(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0x100, %r15
movq (%r10), %rax
movq (%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, (%r10)
movq %rcx, (%r11)
movq 8(%r10), %rax
movq 8(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 8(%r10)
movq %rcx, 8(%r11)
movq 16(%r10), %rax
movq 16(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 16(%r10)
movq %rcx, 16(%r11)
movq 24(%r10), %rax
movq 24(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 24(%r10)
movq %rcx, 24(%r11)
movq 32(%r10), %rax
movq 32(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 32(%r10)
movq %rcx, 32(%r11)
movq 40(%r10), %rax
movq 40(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 40(%r10)
movq %rcx, 40(%r11)
movq 48(%r10), %rax
movq 48(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 48(%r10)
movq %rcx, 48(%r11)
movq 56(%r10), %rax
movq 56(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 56(%r10)
movq %rcx, 56(%r11)
movq 64(%r10), %rax
movq 64(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 64(%r10)
movq %rcx, 64(%r11)
movq 72(%r10), %rax
movq 72(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 72(%r10)
movq %rcx, 72(%r11)
movq 80(%r10), %rax
movq 80(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 80(%r10)
movq %rcx, 80(%r11)
movq 88(%r10), %rax
movq 88(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 88(%r10)
movq %rcx, 88(%r11)
movq 96(%r10), %rax
movq 96(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 96(%r10)
movq %rcx, 96(%r11)
movq 104(%r10), %rax
movq 104(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 104(%r10)
movq %rcx, 104(%r11)
movq 112(%r10), %rax
movq 112(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 112(%r10)
movq %rcx, 112(%r11)
movq 120(%r10), %rax
movq 120(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 120(%r10)
movq %rcx, 120(%r11)
movq (%r10), %rax
addq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq %rax, 120(%r15)
adcq $0x00, %r9
leaq 256(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%r11), %rcx
movq %rcx, 248(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%rdi), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%rdi), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%rdi), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%rdi), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%rdi), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%rdi), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%rdi), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%rdi), %rcx
movq %rcx, 248(%r10)
sbbq $0x00, %r9
subq $0x80, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r10), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r10), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r10), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r10), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r10), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r10), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r10), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r10), %rcx
movq %rcx, 248(%r15)
adcq $0x00, %r9
movq %r9, 384(%rdi)
addq $0x80, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq %rcx, 128(%r15)
# Add to zero
movq 136(%r11), %rax
adcq $0x00, %rax
movq 144(%r11), %rcx
movq %rax, 136(%r15)
adcq $0x00, %rcx
movq 152(%r11), %r8
movq %rcx, 144(%r15)
adcq $0x00, %r8
movq 160(%r11), %rax
movq %r8, 152(%r15)
adcq $0x00, %rax
movq 168(%r11), %rcx
movq %rax, 160(%r15)
adcq $0x00, %rcx
movq 176(%r11), %r8
movq %rcx, 168(%r15)
adcq $0x00, %r8
movq 184(%r11), %rax
movq %r8, 176(%r15)
adcq $0x00, %rax
movq 192(%r11), %rcx
movq %rax, 184(%r15)
adcq $0x00, %rcx
movq 200(%r11), %r8
movq %rcx, 192(%r15)
adcq $0x00, %r8
movq 208(%r11), %rax
movq %r8, 200(%r15)
adcq $0x00, %rax
movq 216(%r11), %rcx
movq %rax, 208(%r15)
adcq $0x00, %rcx
movq 224(%r11), %r8
movq %rcx, 216(%r15)
adcq $0x00, %r8
movq 232(%r11), %rax
movq %r8, 224(%r15)
adcq $0x00, %rax
movq 240(%r11), %rcx
movq %rax, 232(%r15)
adcq $0x00, %rcx
movq 248(%r11), %r8
movq %rcx, 240(%r15)
adcq $0x00, %r8
movq %r8, 248(%r15)
addq $0x328, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_mul_32,.-sp_2048_mul_32
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_avx2_32
.type sp_2048_mul_avx2_32,@function
.align 16
sp_2048_mul_avx2_32:
#else
.section __TEXT,__text
.globl _sp_2048_mul_avx2_32
.p2align 4
_sp_2048_mul_avx2_32:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x328, %rsp
movq %rdi, 768(%rsp)
movq %rsi, 776(%rsp)
movq %rdx, 784(%rsp)
leaq 512(%rsp), %r10
leaq 128(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq 96(%rsi), %rax
movq %r8, 88(%r10)
adcq 96(%r12), %rax
movq 104(%rsi), %rcx
movq %rax, 96(%r10)
adcq 104(%r12), %rcx
movq 112(%rsi), %r8
movq %rcx, 104(%r10)
adcq 112(%r12), %r8
movq 120(%rsi), %rax
movq %r8, 112(%r10)
adcq 120(%r12), %rax
movq %rax, 120(%r10)
adcq $0x00, %r13
movq %r13, 792(%rsp)
leaq 640(%rsp), %r11
leaq 128(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq 96(%rdx), %rax
movq %r8, 88(%r11)
adcq 96(%r12), %rax
movq 104(%rdx), %rcx
movq %rax, 96(%r11)
adcq 104(%r12), %rcx
movq 112(%rdx), %r8
movq %rcx, 104(%r11)
adcq 112(%r12), %r8
movq 120(%rdx), %rax
movq %r8, 112(%r11)
adcq 120(%r12), %rax
movq %rax, 120(%r11)
adcq $0x00, %r14
movq %r14, 800(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_mul_avx2_16@plt
#else
callq _sp_2048_mul_avx2_16
#endif /* __APPLE__ */
movq 784(%rsp), %rdx
movq 776(%rsp), %rsi
leaq 256(%rsp), %rdi
addq $0x80, %rdx
addq $0x80, %rsi
#ifndef __APPLE__
callq sp_2048_mul_avx2_16@plt
#else
callq _sp_2048_mul_avx2_16
#endif /* __APPLE__ */
movq 784(%rsp), %rdx
movq 776(%rsp), %rsi
movq 768(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_mul_avx2_16@plt
#else
callq _sp_2048_mul_avx2_16
#endif /* __APPLE__ */
#ifdef _WIN64
movq 784(%rsp), %rdx
movq 776(%rsp), %rsi
movq 768(%rsp), %rdi
#endif /* _WIN64 */
movq 792(%rsp), %r13
movq 800(%rsp), %r14
movq 768(%rsp), %r15
movq %r13, %r9
leaq 512(%rsp), %r10
leaq 640(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0x100, %r15
movq (%r10), %rax
movq (%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
addq %rcx, %rax
movq 8(%r10), %rcx
movq 8(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, (%r15)
adcq %r8, %rcx
movq 16(%r10), %r8
movq 16(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 8(%r15)
adcq %rax, %r8
movq 24(%r10), %rax
movq 24(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 16(%r15)
adcq %rcx, %rax
movq 32(%r10), %rcx
movq 32(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 24(%r15)
adcq %r8, %rcx
movq 40(%r10), %r8
movq 40(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 32(%r15)
adcq %rax, %r8
movq 48(%r10), %rax
movq 48(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 40(%r15)
adcq %rcx, %rax
movq 56(%r10), %rcx
movq 56(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 48(%r15)
adcq %r8, %rcx
movq 64(%r10), %r8
movq 64(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 56(%r15)
adcq %rax, %r8
movq 72(%r10), %rax
movq 72(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 64(%r15)
adcq %rcx, %rax
movq 80(%r10), %rcx
movq 80(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 72(%r15)
adcq %r8, %rcx
movq 88(%r10), %r8
movq 88(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 80(%r15)
adcq %rax, %r8
movq 96(%r10), %rax
movq 96(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 88(%r15)
adcq %rcx, %rax
movq 104(%r10), %rcx
movq 104(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 96(%r15)
adcq %r8, %rcx
movq 112(%r10), %r8
movq 112(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 104(%r15)
adcq %rax, %r8
movq 120(%r10), %rax
movq 120(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 112(%r15)
adcq %rcx, %rax
movq %rax, 120(%r15)
adcq $0x00, %r9
leaq 256(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%r11), %rcx
movq %rcx, 248(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%rdi), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%rdi), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%rdi), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%rdi), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%rdi), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%rdi), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%rdi), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%rdi), %rcx
movq %rcx, 248(%r10)
sbbq $0x00, %r9
subq $0x80, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r10), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r10), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r10), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r10), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r10), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r10), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r10), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r10), %rcx
movq %rcx, 248(%r15)
adcq $0x00, %r9
movq %r9, 384(%rdi)
addq $0x80, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq %rcx, 128(%r15)
# Add to zero
movq 136(%r11), %rax
adcq $0x00, %rax
movq 144(%r11), %rcx
movq %rax, 136(%r15)
adcq $0x00, %rcx
movq 152(%r11), %r8
movq %rcx, 144(%r15)
adcq $0x00, %r8
movq 160(%r11), %rax
movq %r8, 152(%r15)
adcq $0x00, %rax
movq 168(%r11), %rcx
movq %rax, 160(%r15)
adcq $0x00, %rcx
movq 176(%r11), %r8
movq %rcx, 168(%r15)
adcq $0x00, %r8
movq 184(%r11), %rax
movq %r8, 176(%r15)
adcq $0x00, %rax
movq 192(%r11), %rcx
movq %rax, 184(%r15)
adcq $0x00, %rcx
movq 200(%r11), %r8
movq %rcx, 192(%r15)
adcq $0x00, %r8
movq 208(%r11), %rax
movq %r8, 200(%r15)
adcq $0x00, %rax
movq 216(%r11), %rcx
movq %rax, 208(%r15)
adcq $0x00, %rcx
movq 224(%r11), %r8
movq %rcx, 216(%r15)
adcq $0x00, %r8
movq 232(%r11), %rax
movq %r8, 224(%r15)
adcq $0x00, %rax
movq 240(%r11), %rcx
movq %rax, 232(%r15)
adcq $0x00, %rcx
movq 248(%r11), %r8
movq %rcx, 240(%r15)
adcq $0x00, %r8
movq %r8, 248(%r15)
addq $0x328, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_mul_avx2_32,.-sp_2048_mul_avx2_32
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sqr_16
.type sp_2048_sqr_16,@function
.align 16
sp_2048_sqr_16:
#else
.section __TEXT,__text
.globl _sp_2048_sqr_16
.p2align 4
_sp_2048_sqr_16:
#endif /* __APPLE__ */
pushq %r12
subq $0x80, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r9, %r9
movq %rax, (%rsp)
movq %rdx, %r8
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 24(%rsp)
# A[0] * A[4]
movq 32(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 32(%rsp)
# A[0] * A[5]
movq 40(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[4]
movq 32(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 40(%rsp)
# A[0] * A[6]
movq 48(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[5]
movq 40(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[4]
movq 32(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 48(%rsp)
# A[0] * A[7]
movq 56(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[6]
movq 48(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[5]
movq 40(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[4]
movq 32(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 56(%rsp)
# A[0] * A[8]
movq 64(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[7]
movq 56(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[6]
movq 48(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[5]
movq 40(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[4]
movq 32(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 64(%rsp)
# A[0] * A[9]
movq 72(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[8]
movq 64(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[7]
movq 56(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[6]
movq 48(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[5]
movq 40(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 72(%rsp)
# A[0] * A[10]
movq 80(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[9]
movq 72(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[8]
movq 64(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[7]
movq 56(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[6]
movq 48(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[5]
movq 40(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 80(%rsp)
# A[0] * A[11]
movq 88(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[10]
movq 80(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[9]
movq 72(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[8]
movq 64(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[7]
movq 56(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[6]
movq 48(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 88(%rsp)
# A[0] * A[12]
movq 96(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[11]
movq 88(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[10]
movq 80(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[9]
movq 72(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[8]
movq 64(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[7]
movq 56(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[6]
movq 48(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 96(%rsp)
# A[0] * A[13]
movq 104(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[12]
movq 96(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[11]
movq 88(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[10]
movq 80(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[9]
movq 72(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[8]
movq 64(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[7]
movq 56(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 104(%rsp)
# A[0] * A[14]
movq 112(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[13]
movq 104(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[12]
movq 96(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[11]
movq 88(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[10]
movq 80(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[9]
movq 72(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[8]
movq 64(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[7]
movq 56(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 112(%rsp)
# A[0] * A[15]
movq 120(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[14]
movq 112(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[13]
movq 104(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[12]
movq 96(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[11]
movq 88(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[10]
movq 80(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[9]
movq 72(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[8]
movq 64(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 120(%rsp)
# A[1] * A[15]
movq 120(%rsi), %rax
mulq 8(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[2] * A[14]
movq 112(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[13]
movq 104(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[12]
movq 96(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[11]
movq 88(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[10]
movq 80(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[9]
movq 72(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[8]
movq 64(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 128(%rdi)
# A[2] * A[15]
movq 120(%rsi), %rax
mulq 16(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[3] * A[14]
movq 112(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[13]
movq 104(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[12]
movq 96(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[11]
movq 88(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[10]
movq 80(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[9]
movq 72(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 136(%rdi)
# A[3] * A[15]
movq 120(%rsi), %rax
mulq 24(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[4] * A[14]
movq 112(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[13]
movq 104(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[12]
movq 96(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[11]
movq 88(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[10]
movq 80(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[9]
movq 72(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 144(%rdi)
# A[4] * A[15]
movq 120(%rsi), %rax
mulq 32(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[5] * A[14]
movq 112(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[13]
movq 104(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[12]
movq 96(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[11]
movq 88(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[10]
movq 80(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 152(%rdi)
# A[5] * A[15]
movq 120(%rsi), %rax
mulq 40(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[6] * A[14]
movq 112(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[13]
movq 104(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[12]
movq 96(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[11]
movq 88(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[10]
movq 80(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 160(%rdi)
# A[6] * A[15]
movq 120(%rsi), %rax
mulq 48(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[7] * A[14]
movq 112(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[13]
movq 104(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[12]
movq 96(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[11]
movq 88(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 168(%rdi)
# A[7] * A[15]
movq 120(%rsi), %rax
mulq 56(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[8] * A[14]
movq 112(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[13]
movq 104(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[12]
movq 96(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[11] * A[11]
movq 88(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 176(%rdi)
# A[8] * A[15]
movq 120(%rsi), %rax
mulq 64(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[9] * A[14]
movq 112(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[13]
movq 104(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[11] * A[12]
movq 96(%rsi), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 184(%rdi)
# A[9] * A[15]
movq 120(%rsi), %rax
mulq 72(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[10] * A[14]
movq 112(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[11] * A[13]
movq 104(%rsi), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[12] * A[12]
movq 96(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 192(%rdi)
# A[10] * A[15]
movq 120(%rsi), %rax
mulq 80(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[11] * A[14]
movq 112(%rsi), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[12] * A[13]
movq 104(%rsi), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 200(%rdi)
# A[11] * A[15]
movq 120(%rsi), %rax
mulq 88(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[12] * A[14]
movq 112(%rsi), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[13] * A[13]
movq 104(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 208(%rdi)
# A[12] * A[15]
movq 120(%rsi), %rax
mulq 96(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * A[14]
movq 112(%rsi), %rax
mulq 104(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 216(%rdi)
# A[13] * A[15]
movq 120(%rsi), %rax
mulq 104(%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[14] * A[14]
movq 112(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 224(%rdi)
# A[14] * A[15]
movq 120(%rsi), %rax
mulq 112(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 232(%rdi)
# A[15] * A[15]
movq 120(%rsi), %rax
mulq %rax
addq %rax, %rcx
adcq %rdx, %r8
movq %rcx, 240(%rdi)
movq %r8, 248(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r10
movq 24(%rsp), %r11
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r10
movq 56(%rsp), %r11
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r10, 48(%rdi)
movq %r11, 56(%rdi)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r10
movq 88(%rsp), %r11
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq %r10, 80(%rdi)
movq %r11, 88(%rdi)
movq 96(%rsp), %rax
movq 104(%rsp), %rdx
movq 112(%rsp), %r10
movq 120(%rsp), %r11
movq %rax, 96(%rdi)
movq %rdx, 104(%rdi)
movq %r10, 112(%rdi)
movq %r11, 120(%rdi)
addq $0x80, %rsp
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_sqr_16,.-sp_2048_sqr_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sqr_avx2_16
.type sp_2048_sqr_avx2_16,@function
.align 16
sp_2048_sqr_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_sqr_avx2_16
.p2align 4
_sp_2048_sqr_avx2_16:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
subq $0x80, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbp
cmovne %rdi, %rbp
addq $0x80, %rdi
xorq %r11, %r11
# Diagonal 1
# Zero into %r9
# Zero into %r10
# A[1] x A[0]
movq (%rsi), %rdx
mulxq 8(%rsi), %r8, %r9
# A[2] x A[0]
mulxq 16(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 8(%rbp)
movq %r9, 16(%rbp)
# Zero into %r8
# Zero into %r9
# A[3] x A[0]
mulxq 24(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
# A[4] x A[0]
mulxq 32(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r11, %r9
movq %r10, 24(%rbp)
movq %r8, 32(%rbp)
# Zero into %r10
# Zero into %r8
# A[5] x A[0]
mulxq 40(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
# A[6] x A[0]
mulxq 48(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r9, 40(%rbp)
movq %r10, 48(%rbp)
# Zero into %r9
# Zero into %r10
# A[7] x A[0]
mulxq 56(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r11, %r9
# A[8] x A[0]
mulxq 64(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 56(%rbp)
movq %r9, 64(%rbp)
# Zero into %r8
# Zero into %r9
# A[9] x A[0]
mulxq 72(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
# A[10] x A[0]
mulxq 80(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r11, %r9
movq %r10, 72(%rbp)
movq %r8, 80(%rbp)
# No load %r13 - %r10
# A[11] x A[0]
mulxq 88(%rsi), %rax, %r13
adcxq %rax, %r9
adoxq %r11, %r13
# A[12] x A[0]
mulxq 96(%rsi), %rax, %r14
adcxq %rax, %r13
adoxq %r11, %r14
movq %r9, 88(%rbp)
# No store %r13 - %r10
# No load %r15 - %r9
# A[13] x A[0]
mulxq 104(%rsi), %rax, %r15
adcxq %rax, %r14
adoxq %r11, %r15
# A[14] x A[0]
mulxq 112(%rsi), %rax, %rbx
adcxq %rax, %r15
adoxq %r11, %rbx
# No store %r14 - %r8
# No store %r15 - %r9
# Zero into %r8
# Zero into %r9
# A[15] x A[0]
mulxq 120(%rsi), %rax, %r8
adcxq %rax, %rbx
adoxq %r11, %r8
# No store %rbx - %r10
# Carry
adcxq %r11, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, (%rdi)
# Diagonal 2
movq 24(%rbp), %r8
movq 32(%rbp), %r9
movq 40(%rbp), %r10
# A[2] x A[1]
movq 8(%rsi), %rdx
mulxq 16(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] x A[1]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 24(%rbp)
movq %r9, 32(%rbp)
movq 48(%rbp), %r8
movq 56(%rbp), %r9
# A[4] x A[1]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[5] x A[1]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 40(%rbp)
movq %r8, 48(%rbp)
movq 64(%rbp), %r10
movq 72(%rbp), %r8
# A[6] x A[1]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] x A[1]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 56(%rbp)
movq %r10, 64(%rbp)
movq 80(%rbp), %r9
movq 88(%rbp), %r10
# A[8] x A[1]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] x A[1]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 72(%rbp)
movq %r9, 80(%rbp)
# No load %r13 - %r8
# A[10] x A[1]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r13
# A[11] x A[1]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r10, 88(%rbp)
# No store %r13 - %r8
# No load %r15 - %r10
# A[12] x A[1]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[13] x A[1]
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r9
# No store %r15 - %r10
movq (%rdi), %r9
# Zero into %r10
# A[14] x A[1]
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# A[15] x A[1]
mulxq 120(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
# No store %rbx - %r8
movq %r9, (%rdi)
# Zero into %r8
# Zero into %r9
# A[15] x A[2]
movq 16(%rsi), %rdx
mulxq 120(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 8(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 16(%rdi)
# Diagonal 3
movq 40(%rbp), %r8
movq 48(%rbp), %r9
movq 56(%rbp), %r10
# A[3] x A[2]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] x A[2]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 40(%rbp)
movq %r9, 48(%rbp)
movq 64(%rbp), %r8
movq 72(%rbp), %r9
# A[5] x A[2]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[6] x A[2]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 56(%rbp)
movq %r8, 64(%rbp)
movq 80(%rbp), %r10
movq 88(%rbp), %r8
# A[7] x A[2]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] x A[2]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 72(%rbp)
movq %r10, 80(%rbp)
# No load %r13 - %r9
# A[9] x A[2]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r13
# A[10] x A[2]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r8, 88(%rbp)
# No store %r13 - %r9
# No load %r15 - %r8
# A[11] x A[2]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[12] x A[2]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r10
# No store %r15 - %r8
movq (%rdi), %r10
movq 8(%rdi), %r8
# A[13] x A[2]
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r10
# A[14] x A[2]
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# No store %rbx - %r9
movq %r10, (%rdi)
movq 16(%rdi), %r9
# Zero into %r10
# A[14] x A[3]
movq 24(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] x A[4]
movq 32(%rsi), %rdx
mulxq 112(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
# Zero into %r8
# Zero into %r9
# A[14] x A[5]
movq 40(%rsi), %rdx
mulxq 112(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 24(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 32(%rdi)
# Diagonal 4
movq 56(%rbp), %r8
movq 64(%rbp), %r9
movq 72(%rbp), %r10
# A[4] x A[3]
movq 24(%rsi), %rdx
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] x A[3]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 56(%rbp)
movq %r9, 64(%rbp)
movq 80(%rbp), %r8
movq 88(%rbp), %r9
# A[6] x A[3]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[7] x A[3]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 72(%rbp)
movq %r8, 80(%rbp)
# No load %r13 - %r10
# A[8] x A[3]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r13
# A[9] x A[3]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r9, 88(%rbp)
# No store %r13 - %r10
# No load %r15 - %r9
# A[10] x A[3]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[11] x A[3]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r8
# No store %r15 - %r9
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[12] x A[3]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# A[13] x A[3]
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# No store %rbx - %r10
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[13] x A[4]
movq 32(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] x A[5]
movq 40(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
# Zero into %r10
# A[13] x A[6]
movq 48(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] x A[7]
movq 56(%rsi), %rdx
mulxq 104(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
# Zero into %r8
# Zero into %r9
# A[13] x A[8]
movq 64(%rsi), %rdx
mulxq 104(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 40(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 48(%rdi)
# Diagonal 5
movq 72(%rbp), %r8
movq 80(%rbp), %r9
movq 88(%rbp), %r10
# A[5] x A[4]
movq 32(%rsi), %rdx
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] x A[4]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 72(%rbp)
movq %r9, 80(%rbp)
# No load %r13 - %r8
# A[7] x A[4]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r13
# A[8] x A[4]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r10, 88(%rbp)
# No store %r13 - %r8
# No load %r15 - %r10
# A[9] x A[4]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[10] x A[4]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r9
# No store %r15 - %r10
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[11] x A[4]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# A[12] x A[4]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# No store %rbx - %r8
movq %r9, (%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[12] x A[5]
movq 40(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[12] x A[6]
movq 48(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 8(%rdi)
movq %r8, 16(%rdi)
movq 32(%rdi), %r10
movq 40(%rdi), %r8
# A[12] x A[7]
movq 56(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] x A[8]
movq 64(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq 48(%rdi), %r9
# Zero into %r10
# A[12] x A[9]
movq 72(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[12] x A[10]
movq 80(%rsi), %rdx
mulxq 96(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
# Zero into %r8
# Zero into %r9
# A[12] x A[11]
movq 88(%rsi), %rdx
mulxq 96(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 56(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 64(%rdi)
# Diagonal 6
movq 88(%rbp), %r8
# No load %r13 - %r9
# A[6] x A[5]
movq 40(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r13
# A[7] x A[5]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r8, 88(%rbp)
# No store %r13 - %r9
# No load %r15 - %r8
# A[8] x A[5]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[9] x A[5]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r10
# No store %r15 - %r8
movq (%rdi), %r10
movq 8(%rdi), %r8
# A[10] x A[5]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r10
# A[11] x A[5]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# No store %rbx - %r9
movq %r10, (%rdi)
movq 16(%rdi), %r9
movq 24(%rdi), %r10
# A[11] x A[6]
movq 48(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] x A[7]
movq 56(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[11] x A[8]
movq 64(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[11] x A[9]
movq 72(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 24(%rdi)
movq %r8, 32(%rdi)
movq 48(%rdi), %r10
movq 56(%rdi), %r8
# A[11] x A[10]
movq 80(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] x A[9]
movq 72(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 40(%rdi)
movq %r10, 48(%rdi)
movq 64(%rdi), %r9
# Zero into %r10
# A[13] x A[10]
movq 80(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] x A[11]
movq 88(%rsi), %rdx
mulxq 104(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 56(%rdi)
movq %r9, 64(%rdi)
# Zero into %r8
# Zero into %r9
# A[13] x A[12]
movq 96(%rsi), %rdx
mulxq 104(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 72(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 80(%rdi)
# Diagonal 7
# No load %r15 - %r9
# A[7] x A[6]
movq 48(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[8] x A[6]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r8
# No store %r15 - %r9
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[9] x A[6]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# A[10] x A[6]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# No store %rbx - %r10
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[10] x A[7]
movq 56(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] x A[8]
movq 64(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[10] x A[9]
movq 72(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] x A[6]
movq 48(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[14] x A[7]
movq 56(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[14] x A[8]
movq 64(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 40(%rdi)
movq %r8, 48(%rdi)
movq 64(%rdi), %r10
movq 72(%rdi), %r8
# A[14] x A[9]
movq 72(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[14] x A[10]
movq 80(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 56(%rdi)
movq %r10, 64(%rdi)
movq 80(%rdi), %r9
# Zero into %r10
# A[14] x A[11]
movq 88(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] x A[12]
movq 96(%rsi), %rdx
mulxq 112(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
# Zero into %r8
# Zero into %r9
# A[14] x A[13]
movq 104(%rsi), %rdx
mulxq 112(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 88(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 96(%rdi)
# Diagonal 8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[8] x A[7]
movq 56(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# A[9] x A[7]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# No store %rbx - %r8
movq %r9, (%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[9] x A[8]
movq 64(%rsi), %rdx
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[15] x A[3]
movq 24(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 8(%rdi)
movq %r8, 16(%rdi)
movq 32(%rdi), %r10
movq 40(%rdi), %r8
# A[15] x A[4]
movq 32(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] x A[5]
movq 40(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq 48(%rdi), %r9
movq 56(%rdi), %r10
# A[15] x A[6]
movq 48(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] x A[7]
movq 56(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq 64(%rdi), %r8
movq 72(%rdi), %r9
# A[15] x A[8]
movq 64(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[15] x A[9]
movq 72(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 56(%rdi)
movq %r8, 64(%rdi)
movq 80(%rdi), %r10
movq 88(%rdi), %r8
# A[15] x A[10]
movq 80(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] x A[11]
movq 88(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 72(%rdi)
movq %r10, 80(%rdi)
movq 96(%rdi), %r9
# Zero into %r10
# A[15] x A[12]
movq 96(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] x A[13]
movq 104(%rsi), %rdx
mulxq 120(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 88(%rdi)
movq %r9, 96(%rdi)
# Zero into %r8
# Zero into %r9
# A[15] x A[14]
movq 112(%rsi), %rdx
mulxq 120(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 104(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 112(%rdi)
movq %r12, 120(%rdi)
# Double and Add in A[i] x A[i]
movq 8(%rbp), %r9
# A[0] x A[0]
movq (%rsi), %rdx
mulxq %rdx, %rax, %rcx
movq %rax, (%rbp)
adoxq %r9, %r9
adcxq %rcx, %r9
movq %r9, 8(%rbp)
movq 16(%rbp), %r8
movq 24(%rbp), %r9
# A[1] x A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rbp)
movq %r9, 24(%rbp)
movq 32(%rbp), %r8
movq 40(%rbp), %r9
# A[2] x A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 32(%rbp)
movq %r9, 40(%rbp)
movq 48(%rbp), %r8
movq 56(%rbp), %r9
# A[3] x A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 48(%rbp)
movq %r9, 56(%rbp)
movq 64(%rbp), %r8
movq 72(%rbp), %r9
# A[4] x A[4]
movq 32(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 64(%rbp)
movq %r9, 72(%rbp)
movq 80(%rbp), %r8
movq 88(%rbp), %r9
# A[5] x A[5]
movq 40(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 80(%rbp)
movq %r9, 88(%rbp)
# A[6] x A[6]
movq 48(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r13, %r13
adoxq %r14, %r14
adcxq %rax, %r13
adcxq %rcx, %r14
# A[7] x A[7]
movq 56(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r15, %r15
adoxq %rbx, %rbx
adcxq %rax, %r15
adcxq %rcx, %rbx
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[8] x A[8]
movq 64(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[9] x A[9]
movq 72(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[10] x A[10]
movq 80(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[11] x A[11]
movq 88(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rdi), %r8
movq 72(%rdi), %r9
# A[12] x A[12]
movq 96(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 64(%rdi)
movq %r9, 72(%rdi)
movq 80(%rdi), %r8
movq 88(%rdi), %r9
# A[13] x A[13]
movq 104(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rdi), %r8
movq 104(%rdi), %r9
# A[14] x A[14]
movq 112(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 96(%rdi)
movq %r9, 104(%rdi)
movq 112(%rdi), %r8
movq 120(%rdi), %r9
# A[15] x A[15]
movq 120(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
movq %r13, -32(%rdi)
movq %r14, -24(%rdi)
movq %r15, -16(%rdi)
movq %rbx, -8(%rdi)
subq $0x80, %rdi
cmpq %rdi, %rsi
jne L_end_2048_sqr_avx2_16
vmovdqu (%rbp), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbp), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbp), %xmm0
vmovups %xmm0, 32(%rdi)
vmovdqu 48(%rbp), %xmm0
vmovups %xmm0, 48(%rdi)
vmovdqu 64(%rbp), %xmm0
vmovups %xmm0, 64(%rdi)
vmovdqu 80(%rbp), %xmm0
vmovups %xmm0, 80(%rdi)
L_end_2048_sqr_avx2_16:
addq $0x80, %rsp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_2048_sqr_avx2_16,.-sp_2048_sqr_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sqr_32
.type sp_2048_sqr_32,@function
.align 16
sp_2048_sqr_32:
#else
.section __TEXT,__text
.globl _sp_2048_sqr_32
.p2align 4
_sp_2048_sqr_32:
#endif /* __APPLE__ */
subq $0x110, %rsp
movq %rdi, 256(%rsp)
movq %rsi, 264(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 128(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq 96(%rsi), %rdx
movq %rax, 88(%r8)
sbbq 96(%r9), %rdx
movq 104(%rsi), %rax
movq %rdx, 96(%r8)
sbbq 104(%r9), %rax
movq 112(%rsi), %rdx
movq %rax, 104(%r8)
sbbq 112(%r9), %rdx
movq 120(%rsi), %rax
movq %rdx, 112(%r8)
sbbq 120(%r9), %rax
movq %rax, 120(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 96(%r8), %rdx
setc %r9b
movq %rax, 88(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 104(%r8), %rax
setc %r9b
movq %rdx, 96(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 112(%r8), %rdx
setc %r9b
movq %rax, 104(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 120(%r8), %rax
setc %r9b
movq %rdx, 112(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 120(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_16@plt
#else
callq _sp_2048_sqr_16
#endif /* __APPLE__ */
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
addq $0x80, %rsi
addq $0x100, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_16@plt
#else
callq _sp_2048_sqr_16
#endif /* __APPLE__ */
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_sqr_16@plt
#else
callq _sp_2048_sqr_16
#endif /* __APPLE__ */
#ifdef _WIN64
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
#endif /* _WIN64 */
movq 256(%rsp), %rsi
leaq 128(%rsp), %r8
addq $0x180, %rsi
movq $0x00, %rcx
movq -128(%r8), %rax
subq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq %rdx, 120(%r8)
sbbq $0x00, %rcx
subq $0x100, %rsi
movq -128(%r8), %rax
subq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq %rdx, 120(%r8)
sbbq $0x00, %rcx
movq 256(%rsp), %rdi
negq %rcx
addq $0x100, %rdi
movq -128(%rdi), %rax
subq -128(%r8), %rax
movq -120(%rdi), %rdx
movq %rax, -128(%rdi)
sbbq -120(%r8), %rdx
movq -112(%rdi), %rax
movq %rdx, -120(%rdi)
sbbq -112(%r8), %rax
movq -104(%rdi), %rdx
movq %rax, -112(%rdi)
sbbq -104(%r8), %rdx
movq -96(%rdi), %rax
movq %rdx, -104(%rdi)
sbbq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
sbbq 96(%r8), %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
sbbq 104(%r8), %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
sbbq 112(%r8), %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
sbbq 120(%r8), %rdx
movq %rdx, 120(%rdi)
sbbq $0x00, %rcx
movq 256(%rsp), %rdi
addq $0x180, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
adcq $0x00, %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
adcq $0x00, %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
adcq $0x00, %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
adcq $0x00, %rdx
movq %rdx, 120(%rdi)
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
addq $0x110, %rsp
repz retq
#ifndef __APPLE__
.size sp_2048_sqr_32,.-sp_2048_sqr_32
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sqr_avx2_32
.type sp_2048_sqr_avx2_32,@function
.align 16
sp_2048_sqr_avx2_32:
#else
.section __TEXT,__text
.globl _sp_2048_sqr_avx2_32
.p2align 4
_sp_2048_sqr_avx2_32:
#endif /* __APPLE__ */
subq $0x110, %rsp
movq %rdi, 256(%rsp)
movq %rsi, 264(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 128(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq 96(%rsi), %rdx
movq %rax, 88(%r8)
sbbq 96(%r9), %rdx
movq 104(%rsi), %rax
movq %rdx, 96(%r8)
sbbq 104(%r9), %rax
movq 112(%rsi), %rdx
movq %rax, 104(%r8)
sbbq 112(%r9), %rdx
movq 120(%rsi), %rax
movq %rdx, 112(%r8)
sbbq 120(%r9), %rax
movq %rax, 120(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 96(%r8), %rdx
setc %r9b
movq %rax, 88(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 104(%r8), %rax
setc %r9b
movq %rdx, 96(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 112(%r8), %rdx
setc %r9b
movq %rax, 104(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 120(%r8), %rax
setc %r9b
movq %rdx, 112(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 120(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_avx2_16@plt
#else
callq _sp_2048_sqr_avx2_16
#endif /* __APPLE__ */
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
addq $0x80, %rsi
addq $0x100, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_avx2_16@plt
#else
callq _sp_2048_sqr_avx2_16
#endif /* __APPLE__ */
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_sqr_avx2_16@plt
#else
callq _sp_2048_sqr_avx2_16
#endif /* __APPLE__ */
#ifdef _WIN64
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
#endif /* _WIN64 */
movq 256(%rsp), %rsi
leaq 128(%rsp), %r8
addq $0x180, %rsi
movq $0x00, %rcx
movq -128(%r8), %rax
subq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq %rdx, 120(%r8)
sbbq $0x00, %rcx
subq $0x100, %rsi
movq -128(%r8), %rax
subq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq %rdx, 120(%r8)
sbbq $0x00, %rcx
movq 256(%rsp), %rdi
negq %rcx
addq $0x100, %rdi
movq -128(%rdi), %rax
subq -128(%r8), %rax
movq -120(%rdi), %rdx
movq %rax, -128(%rdi)
sbbq -120(%r8), %rdx
movq -112(%rdi), %rax
movq %rdx, -120(%rdi)
sbbq -112(%r8), %rax
movq -104(%rdi), %rdx
movq %rax, -112(%rdi)
sbbq -104(%r8), %rdx
movq -96(%rdi), %rax
movq %rdx, -104(%rdi)
sbbq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
sbbq 96(%r8), %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
sbbq 104(%r8), %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
sbbq 112(%r8), %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
sbbq 120(%r8), %rdx
movq %rdx, 120(%rdi)
sbbq $0x00, %rcx
movq 256(%rsp), %rdi
addq $0x180, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
adcq $0x00, %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
adcq $0x00, %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
adcq $0x00, %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
adcq $0x00, %rdx
movq %rdx, 120(%rdi)
movq 264(%rsp), %rsi
movq 256(%rsp), %rdi
addq $0x110, %rsp
repz retq
#ifndef __APPLE__
.size sp_2048_sqr_avx2_32,.-sp_2048_sqr_avx2_32
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sub_in_place_16
.type sp_2048_sub_in_place_16,@function
.align 16
sp_2048_sub_in_place_16:
#else
.section __TEXT,__text
.globl _sp_2048_sub_in_place_16
.p2align 4
_sp_2048_sub_in_place_16:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq 72(%rdi), %rcx
movq %rdx, 64(%rdi)
sbbq 72(%rsi), %rcx
movq 80(%rdi), %rdx
movq %rcx, 72(%rdi)
sbbq 80(%rsi), %rdx
movq 88(%rdi), %rcx
movq %rdx, 80(%rdi)
sbbq 88(%rsi), %rcx
movq 96(%rdi), %rdx
movq %rcx, 88(%rdi)
sbbq 96(%rsi), %rdx
movq 104(%rdi), %rcx
movq %rdx, 96(%rdi)
sbbq 104(%rsi), %rcx
movq 112(%rdi), %rdx
movq %rcx, 104(%rdi)
sbbq 112(%rsi), %rdx
movq 120(%rdi), %rcx
movq %rdx, 112(%rdi)
sbbq 120(%rsi), %rcx
movq %rcx, 120(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_sub_in_place_16,.-sp_2048_sub_in_place_16
#endif /* __APPLE__ */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_d_32
.type sp_2048_mul_d_32,@function
.align 16
sp_2048_mul_d_32:
#else
.section __TEXT,__text
.globl _sp_2048_mul_d_32
.p2align 4
_sp_2048_mul_d_32:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 64(%rsi)
addq %rax, %r10
movq %r10, 64(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 72(%rsi)
addq %rax, %r8
movq %r8, 72(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 80(%rsi)
addq %rax, %r9
movq %r9, 80(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 88(%rsi)
addq %rax, %r10
movq %r10, 88(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 96(%rsi)
addq %rax, %r8
movq %r8, 96(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 104(%rsi)
addq %rax, %r9
movq %r9, 104(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 112(%rsi)
addq %rax, %r10
movq %r10, 112(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 120(%rsi)
addq %rax, %r8
movq %r8, 120(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[16] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 128(%rsi)
addq %rax, %r9
movq %r9, 128(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[17] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 136(%rsi)
addq %rax, %r10
movq %r10, 136(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[18] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 144(%rsi)
addq %rax, %r8
movq %r8, 144(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[19] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 152(%rsi)
addq %rax, %r9
movq %r9, 152(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[20] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 160(%rsi)
addq %rax, %r10
movq %r10, 160(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[21] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 168(%rsi)
addq %rax, %r8
movq %r8, 168(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[22] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 176(%rsi)
addq %rax, %r9
movq %r9, 176(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[23] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 184(%rsi)
addq %rax, %r10
movq %r10, 184(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[24] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 192(%rsi)
addq %rax, %r8
movq %r8, 192(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[25] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 200(%rsi)
addq %rax, %r9
movq %r9, 200(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[26] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 208(%rsi)
addq %rax, %r10
movq %r10, 208(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[27] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 216(%rsi)
addq %rax, %r8
movq %r8, 216(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[28] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 224(%rsi)
addq %rax, %r9
movq %r9, 224(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[29] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 232(%rsi)
addq %rax, %r10
movq %r10, 232(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[30] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 240(%rsi)
addq %rax, %r8
movq %r8, 240(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[31] * B
movq %rcx, %rax
mulq 248(%rsi)
addq %rax, %r9
adcq %rdx, %r10
movq %r9, 248(%rdi)
movq %r10, 256(%rdi)
repz retq
#ifndef __APPLE__
.size sp_2048_mul_d_32,.-sp_2048_mul_d_32
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cond_sub_16
.type sp_2048_cond_sub_16,@function
.align 16
sp_2048_cond_sub_16:
#else
.section __TEXT,__text
.globl _sp_2048_cond_sub_16
.p2align 4
_sp_2048_cond_sub_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq %rax, %rax
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_2048_cond_sub_16,.-sp_2048_cond_sub_16
#endif /* __APPLE__ */
/* Reduce the number back to 2048 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mont_reduce_16
.type sp_2048_mont_reduce_16,@function
.align 16
sp_2048_mont_reduce_16:
#else
.section __TEXT,__text
.globl _sp_2048_mont_reduce_16
.p2align 4
_sp_2048_mont_reduce_16:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 16
movq $16, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_2048_mont_reduce_16_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 64(%rdi)
adcq $0x00, %r10
# a[i+9] += m[9] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 72(%rsi)
movq 72(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 72(%rdi)
adcq $0x00, %r9
# a[i+10] += m[10] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 80(%rsi)
movq 80(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 80(%rdi)
adcq $0x00, %r10
# a[i+11] += m[11] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 88(%rsi)
movq 88(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 88(%rdi)
adcq $0x00, %r9
# a[i+12] += m[12] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 96(%rsi)
movq 96(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 96(%rdi)
adcq $0x00, %r10
# a[i+13] += m[13] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 104(%rsi)
movq 104(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 104(%rdi)
adcq $0x00, %r9
# a[i+14] += m[14] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 112(%rsi)
movq 112(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 112(%rdi)
adcq $0x00, %r10
# a[i+15] += m[15] * mu
movq %r11, %rax
mulq 120(%rsi)
movq 120(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 120(%rdi)
adcq %rdx, 128(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_2048_mont_reduce_16_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $0x80, %rdi
#ifndef __APPLE__
callq sp_2048_cond_sub_16@plt
#else
callq _sp_2048_cond_sub_16
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_mont_reduce_16,.-sp_2048_mont_reduce_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cond_sub_avx2_16
.type sp_2048_cond_sub_avx2_16,@function
.align 16
sp_2048_cond_sub_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_cond_sub_avx2_16
.p2align 4
_sp_2048_cond_sub_avx2_16:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
sbbq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
sbbq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
sbbq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
sbbq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
sbbq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
sbbq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
sbbq %r9, %r8
movq %r8, 120(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_cond_sub_avx2_16,.-sp_2048_cond_sub_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_d_16
.type sp_2048_mul_d_16,@function
.align 16
sp_2048_mul_d_16:
#else
.section __TEXT,__text
.globl _sp_2048_mul_d_16
.p2align 4
_sp_2048_mul_d_16:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 64(%rsi)
addq %rax, %r10
movq %r10, 64(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 72(%rsi)
addq %rax, %r8
movq %r8, 72(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 80(%rsi)
addq %rax, %r9
movq %r9, 80(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 88(%rsi)
addq %rax, %r10
movq %r10, 88(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 96(%rsi)
addq %rax, %r8
movq %r8, 96(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 104(%rsi)
addq %rax, %r9
movq %r9, 104(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 112(%rsi)
addq %rax, %r10
movq %r10, 112(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B
movq %rcx, %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 120(%rdi)
movq %r9, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_2048_mul_d_16,.-sp_2048_mul_d_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_d_avx2_16
.type sp_2048_mul_d_avx2_16,@function
.align 16
sp_2048_mul_d_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_mul_d_avx2_16
.p2align 4
_sp_2048_mul_d_avx2_16:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# A[9] * B
mulxq 72(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
# A[10] * B
mulxq 80(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 80(%rdi)
# A[11] * B
mulxq 88(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 88(%rdi)
# A[12] * B
mulxq 96(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 96(%rdi)
# A[13] * B
mulxq 104(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 104(%rdi)
# A[14] * B
mulxq 112(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 112(%rdi)
# A[15] * B
mulxq 120(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 120(%rdi)
movq %r9, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_2048_mul_d_avx2_16,.-sp_2048_mul_d_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_2048_word_asm_16
.type div_2048_word_asm_16,@function
.align 16
div_2048_word_asm_16:
#else
.section __TEXT,__text
.globl _div_2048_word_asm_16
.p2align 4
_div_2048_word_asm_16:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_2048_word_asm_16,.-div_2048_word_asm_16
#endif /* __APPLE__ */
#endif /* _WIN64 */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cmp_16
.type sp_2048_cmp_16,@function
.align 16
sp_2048_cmp_16:
#else
.section __TEXT,__text
.globl _sp_2048_cmp_16
.p2align 4
_sp_2048_cmp_16:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 120(%rdi), %r9
movq 120(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 112(%rdi), %r9
movq 112(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 104(%rdi), %r9
movq 104(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 96(%rdi), %r9
movq 96(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 88(%rdi), %r9
movq 88(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 80(%rdi), %r9
movq 80(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 72(%rdi), %r9
movq 72(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_cmp_16,.-sp_2048_cmp_16
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_2048_get_from_table_16
.type sp_2048_get_from_table_16,@function
.align 16
sp_2048_get_from_table_16:
#else
.section __TEXT,__text
.globl _sp_2048_get_from_table_16
.p2align 4
_sp_2048_get_from_table_16:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
pxor %xmm13, %xmm13
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm10, %xmm10
# START: 0-7
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 0-7
# START: 8-15
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
# END: 8-15
repz retq
#ifndef __APPLE__
.size sp_2048_get_from_table_16,.-sp_2048_get_from_table_16
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 2048 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mont_reduce_avx2_16
.type sp_2048_mont_reduce_avx2_16,@function
.align 16
sp_2048_mont_reduce_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_mont_reduce_avx2_16
.p2align 4
_sp_2048_mont_reduce_avx2_16:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 16
movq $16, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $0x40, %rdi
xorq %rbp, %rbp
L_2048_mont_reduce_avx2_16_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -32(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -24(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -24(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq -8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -16(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq (%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -8(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, (%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq 56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq 64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 56(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 64(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -24(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -16(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -8(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -16(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq (%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -8(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq 8(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, (%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 16(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq 24(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 16(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq 32(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 24(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq 40(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 32(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq 48(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 40(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq 56(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 48(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq 64(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 56(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq 72(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 64(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 72(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 2
addq $16, %rdi
# i -= 2
subq $2, %r9
jnz L_2048_mont_reduce_avx2_16_loop
subq $0x40, %rdi
negq %rbp
movq %rdi, %r8
subq $0x80, %rdi
movq (%rsi), %rcx
movq %r12, %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq %r13, %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq %r14, %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq %r15, %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq 72(%rsi), %rax
movq 72(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 64(%rdi)
sbbq %rax, %rdx
movq 80(%rsi), %rcx
movq 80(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 72(%rdi)
sbbq %rcx, %rax
movq 88(%rsi), %rdx
movq 88(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 80(%rdi)
sbbq %rdx, %rcx
movq 96(%rsi), %rax
movq 96(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 88(%rdi)
sbbq %rax, %rdx
movq 104(%rsi), %rcx
movq 104(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 96(%rdi)
sbbq %rcx, %rax
movq 112(%rsi), %rdx
movq 112(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 104(%rdi)
sbbq %rdx, %rcx
movq 120(%rsi), %rax
movq 120(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 112(%rdi)
sbbq %rax, %rdx
movq %rdx, 120(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_mont_reduce_avx2_16,.-sp_2048_mont_reduce_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_2048_get_from_table_avx2_16
.type sp_2048_get_from_table_avx2_16,@function
.align 16
sp_2048_get_from_table_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_get_from_table_avx2_16
.p2align 4
_sp_2048_get_from_table_avx2_16:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
vpxor %ymm13, %ymm13, %ymm13
vpermd %ymm10, %ymm13, %ymm10
vpermd %ymm11, %ymm13, %ymm11
# START: 0-15
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 16
movq 128(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 17
movq 136(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 18
movq 144(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 19
movq 152(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 20
movq 160(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 21
movq 168(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 22
movq 176(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 23
movq 184(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 24
movq 192(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 25
movq 200(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 26
movq 208(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 27
movq 216(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 28
movq 224(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 29
movq 232(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 30
movq 240(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 31
movq 248(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
# END: 0-15
repz retq
#ifndef __APPLE__
.size sp_2048_get_from_table_avx2_16,.-sp_2048_get_from_table_avx2_16
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cond_sub_32
.type sp_2048_cond_sub_32,@function
.align 16
sp_2048_cond_sub_32:
#else
.section __TEXT,__text
.globl _sp_2048_cond_sub_32
.p2align 4
_sp_2048_cond_sub_32:
#endif /* __APPLE__ */
subq $0x100, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq 128(%rdx), %r8
movq 136(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 128(%rsp)
movq %r9, 136(%rsp)
movq 144(%rdx), %r8
movq 152(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 144(%rsp)
movq %r9, 152(%rsp)
movq 160(%rdx), %r8
movq 168(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 160(%rsp)
movq %r9, 168(%rsp)
movq 176(%rdx), %r8
movq 184(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 176(%rsp)
movq %r9, 184(%rsp)
movq 192(%rdx), %r8
movq 200(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 192(%rsp)
movq %r9, 200(%rsp)
movq 208(%rdx), %r8
movq 216(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 208(%rsp)
movq %r9, 216(%rsp)
movq 224(%rdx), %r8
movq 232(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 224(%rsp)
movq %r9, 232(%rsp)
movq 240(%rdx), %r8
movq 248(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 240(%rsp)
movq %r9, 248(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 112(%rdi)
movq 128(%rsi), %r8
movq 128(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 120(%rdi)
movq 136(%rsi), %r9
movq 136(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 128(%rdi)
movq 144(%rsi), %r8
movq 144(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 136(%rdi)
movq 152(%rsi), %r9
movq 152(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 144(%rdi)
movq 160(%rsi), %r8
movq 160(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 152(%rdi)
movq 168(%rsi), %r9
movq 168(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 160(%rdi)
movq 176(%rsi), %r8
movq 176(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 168(%rdi)
movq 184(%rsi), %r9
movq 184(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 176(%rdi)
movq 192(%rsi), %r8
movq 192(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 184(%rdi)
movq 200(%rsi), %r9
movq 200(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 192(%rdi)
movq 208(%rsi), %r8
movq 208(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 200(%rdi)
movq 216(%rsi), %r9
movq 216(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 208(%rdi)
movq 224(%rsi), %r8
movq 224(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 216(%rdi)
movq 232(%rsi), %r9
movq 232(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 224(%rdi)
movq 240(%rsi), %r8
movq 240(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 232(%rdi)
movq 248(%rsi), %r9
movq 248(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
sbbq %rax, %rax
addq $0x100, %rsp
repz retq
#ifndef __APPLE__
.size sp_2048_cond_sub_32,.-sp_2048_cond_sub_32
#endif /* __APPLE__ */
/* Reduce the number back to 2048 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mont_reduce_32
.type sp_2048_mont_reduce_32,@function
.align 16
sp_2048_mont_reduce_32:
#else
.section __TEXT,__text
.globl _sp_2048_mont_reduce_32
.p2align 4
_sp_2048_mont_reduce_32:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 32
movq $32, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_2048_mont_reduce_32_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 64(%rdi)
adcq $0x00, %r10
# a[i+9] += m[9] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 72(%rsi)
movq 72(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 72(%rdi)
adcq $0x00, %r9
# a[i+10] += m[10] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 80(%rsi)
movq 80(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 80(%rdi)
adcq $0x00, %r10
# a[i+11] += m[11] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 88(%rsi)
movq 88(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 88(%rdi)
adcq $0x00, %r9
# a[i+12] += m[12] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 96(%rsi)
movq 96(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 96(%rdi)
adcq $0x00, %r10
# a[i+13] += m[13] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 104(%rsi)
movq 104(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 104(%rdi)
adcq $0x00, %r9
# a[i+14] += m[14] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 112(%rsi)
movq 112(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 112(%rdi)
adcq $0x00, %r10
# a[i+15] += m[15] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 120(%rsi)
movq 120(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 120(%rdi)
adcq $0x00, %r9
# a[i+16] += m[16] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 128(%rsi)
movq 128(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 128(%rdi)
adcq $0x00, %r10
# a[i+17] += m[17] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 136(%rsi)
movq 136(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 136(%rdi)
adcq $0x00, %r9
# a[i+18] += m[18] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 144(%rsi)
movq 144(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 144(%rdi)
adcq $0x00, %r10
# a[i+19] += m[19] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 152(%rsi)
movq 152(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 152(%rdi)
adcq $0x00, %r9
# a[i+20] += m[20] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 160(%rsi)
movq 160(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 160(%rdi)
adcq $0x00, %r10
# a[i+21] += m[21] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 168(%rsi)
movq 168(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 168(%rdi)
adcq $0x00, %r9
# a[i+22] += m[22] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 176(%rsi)
movq 176(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 176(%rdi)
adcq $0x00, %r10
# a[i+23] += m[23] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 184(%rsi)
movq 184(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 184(%rdi)
adcq $0x00, %r9
# a[i+24] += m[24] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 192(%rsi)
movq 192(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 192(%rdi)
adcq $0x00, %r10
# a[i+25] += m[25] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 200(%rsi)
movq 200(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 200(%rdi)
adcq $0x00, %r9
# a[i+26] += m[26] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 208(%rsi)
movq 208(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 208(%rdi)
adcq $0x00, %r10
# a[i+27] += m[27] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 216(%rsi)
movq 216(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 216(%rdi)
adcq $0x00, %r9
# a[i+28] += m[28] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 224(%rsi)
movq 224(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 224(%rdi)
adcq $0x00, %r10
# a[i+29] += m[29] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 232(%rsi)
movq 232(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 232(%rdi)
adcq $0x00, %r9
# a[i+30] += m[30] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 240(%rsi)
movq 240(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 240(%rdi)
adcq $0x00, %r10
# a[i+31] += m[31] * mu
movq %r11, %rax
mulq 248(%rsi)
movq 248(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 248(%rdi)
adcq %rdx, 256(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_2048_mont_reduce_32_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $0x100, %rdi
#ifndef __APPLE__
callq sp_2048_cond_sub_32@plt
#else
callq _sp_2048_cond_sub_32
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_mont_reduce_32,.-sp_2048_mont_reduce_32
#endif /* __APPLE__ */
/* Sub b from a into r. (r = a - b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_2048_sub_32
.type sp_2048_sub_32,@function
.align 16
sp_2048_sub_32:
#else
.section __TEXT,__text
.globl _sp_2048_sub_32
.p2align 4
_sp_2048_sub_32:
#endif /* __APPLE__ */
movq (%rsi), %rcx
subq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
sbbq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
sbbq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
sbbq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
sbbq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
sbbq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
sbbq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
sbbq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
sbbq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
sbbq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
sbbq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
sbbq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
sbbq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
sbbq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
sbbq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
sbbq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
sbbq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
sbbq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
sbbq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
sbbq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
sbbq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
sbbq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
sbbq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
sbbq 184(%rdx), %r8
movq 192(%rsi), %rcx
movq %r8, 184(%rdi)
sbbq 192(%rdx), %rcx
movq 200(%rsi), %r8
movq %rcx, 192(%rdi)
sbbq 200(%rdx), %r8
movq 208(%rsi), %rcx
movq %r8, 200(%rdi)
sbbq 208(%rdx), %rcx
movq 216(%rsi), %r8
movq %rcx, 208(%rdi)
sbbq 216(%rdx), %r8
movq 224(%rsi), %rcx
movq %r8, 216(%rdi)
sbbq 224(%rdx), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%rdi)
sbbq 232(%rdx), %r8
movq 240(%rsi), %rcx
movq %r8, 232(%rdi)
sbbq 240(%rdx), %rcx
movq 248(%rsi), %r8
movq %rcx, 240(%rdi)
sbbq 248(%rdx), %r8
movq %r8, 248(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_sub_32,.-sp_2048_sub_32
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mul_d_avx2_32
.type sp_2048_mul_d_avx2_32,@function
.align 16
sp_2048_mul_d_avx2_32:
#else
.section __TEXT,__text
.globl _sp_2048_mul_d_avx2_32
.p2align 4
_sp_2048_mul_d_avx2_32:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# A[9] * B
mulxq 72(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
# A[10] * B
mulxq 80(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 80(%rdi)
# A[11] * B
mulxq 88(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 88(%rdi)
# A[12] * B
mulxq 96(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 96(%rdi)
# A[13] * B
mulxq 104(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 104(%rdi)
# A[14] * B
mulxq 112(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 112(%rdi)
# A[15] * B
mulxq 120(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 120(%rdi)
# A[16] * B
mulxq 128(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 128(%rdi)
# A[17] * B
mulxq 136(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 136(%rdi)
# A[18] * B
mulxq 144(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 144(%rdi)
# A[19] * B
mulxq 152(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 152(%rdi)
# A[20] * B
mulxq 160(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 160(%rdi)
# A[21] * B
mulxq 168(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 168(%rdi)
# A[22] * B
mulxq 176(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 176(%rdi)
# A[23] * B
mulxq 184(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 184(%rdi)
# A[24] * B
mulxq 192(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 192(%rdi)
# A[25] * B
mulxq 200(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 200(%rdi)
# A[26] * B
mulxq 208(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 208(%rdi)
# A[27] * B
mulxq 216(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 216(%rdi)
# A[28] * B
mulxq 224(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 224(%rdi)
# A[29] * B
mulxq 232(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 232(%rdi)
# A[30] * B
mulxq 240(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 240(%rdi)
# A[31] * B
mulxq 248(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 248(%rdi)
movq %r9, 256(%rdi)
repz retq
#ifndef __APPLE__
.size sp_2048_mul_d_avx2_32,.-sp_2048_mul_d_avx2_32
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_2048_word_asm_32
.type div_2048_word_asm_32,@function
.align 16
div_2048_word_asm_32:
#else
.section __TEXT,__text
.globl _div_2048_word_asm_32
.p2align 4
_div_2048_word_asm_32:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_2048_word_asm_32,.-div_2048_word_asm_32
#endif /* __APPLE__ */
#endif /* _WIN64 */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cond_sub_avx2_32
.type sp_2048_cond_sub_avx2_32,@function
.align 16
sp_2048_cond_sub_avx2_32:
#else
.section __TEXT,__text
.globl _sp_2048_cond_sub_avx2_32
.p2align 4
_sp_2048_cond_sub_avx2_32:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
sbbq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
sbbq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
sbbq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
sbbq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
sbbq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
sbbq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
sbbq %r9, %r8
movq 128(%rdx), %r10
movq 128(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 120(%rdi)
sbbq %r10, %r9
movq 136(%rdx), %r8
movq 136(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 128(%rdi)
sbbq %r8, %r10
movq 144(%rdx), %r9
movq 144(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 136(%rdi)
sbbq %r9, %r8
movq 152(%rdx), %r10
movq 152(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 144(%rdi)
sbbq %r10, %r9
movq 160(%rdx), %r8
movq 160(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 152(%rdi)
sbbq %r8, %r10
movq 168(%rdx), %r9
movq 168(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 160(%rdi)
sbbq %r9, %r8
movq 176(%rdx), %r10
movq 176(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 168(%rdi)
sbbq %r10, %r9
movq 184(%rdx), %r8
movq 184(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 176(%rdi)
sbbq %r8, %r10
movq 192(%rdx), %r9
movq 192(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 184(%rdi)
sbbq %r9, %r8
movq 200(%rdx), %r10
movq 200(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 192(%rdi)
sbbq %r10, %r9
movq 208(%rdx), %r8
movq 208(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 200(%rdi)
sbbq %r8, %r10
movq 216(%rdx), %r9
movq 216(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 208(%rdi)
sbbq %r9, %r8
movq 224(%rdx), %r10
movq 224(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 216(%rdi)
sbbq %r10, %r9
movq 232(%rdx), %r8
movq 232(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 224(%rdi)
sbbq %r8, %r10
movq 240(%rdx), %r9
movq 240(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 232(%rdi)
sbbq %r9, %r8
movq 248(%rdx), %r10
movq 248(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 240(%rdi)
sbbq %r10, %r9
movq %r9, 248(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_cond_sub_avx2_32,.-sp_2048_cond_sub_avx2_32
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cmp_32
.type sp_2048_cmp_32,@function
.align 16
sp_2048_cmp_32:
#else
.section __TEXT,__text
.globl _sp_2048_cmp_32
.p2align 4
_sp_2048_cmp_32:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 248(%rdi), %r9
movq 248(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 240(%rdi), %r9
movq 240(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 232(%rdi), %r9
movq 232(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 224(%rdi), %r9
movq 224(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 216(%rdi), %r9
movq 216(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 208(%rdi), %r9
movq 208(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 200(%rdi), %r9
movq 200(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 192(%rdi), %r9
movq 192(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 184(%rdi), %r9
movq 184(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 176(%rdi), %r9
movq 176(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 168(%rdi), %r9
movq 168(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 160(%rdi), %r9
movq 160(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 152(%rdi), %r9
movq 152(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 144(%rdi), %r9
movq 144(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 136(%rdi), %r9
movq 136(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 128(%rdi), %r9
movq 128(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 120(%rdi), %r9
movq 120(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 112(%rdi), %r9
movq 112(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 104(%rdi), %r9
movq 104(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 96(%rdi), %r9
movq 96(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 88(%rdi), %r9
movq 88(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 80(%rdi), %r9
movq 80(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 72(%rdi), %r9
movq 72(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_cmp_32,.-sp_2048_cmp_32
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_2048_get_from_table_32
.type sp_2048_get_from_table_32,@function
.align 16
sp_2048_get_from_table_32:
#else
.section __TEXT,__text
.globl _sp_2048_get_from_table_32
.p2align 4
_sp_2048_get_from_table_32:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
pxor %xmm13, %xmm13
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm10, %xmm10
# START: 0-7
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 32
movq 256(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 33
movq 264(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 34
movq 272(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 35
movq 280(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 36
movq 288(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 37
movq 296(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 38
movq 304(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 39
movq 312(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 40
movq 320(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 41
movq 328(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 42
movq 336(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 43
movq 344(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 44
movq 352(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 45
movq 360(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 46
movq 368(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 47
movq 376(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 48
movq 384(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 49
movq 392(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 50
movq 400(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 51
movq 408(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 52
movq 416(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 53
movq 424(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 54
movq 432(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 55
movq 440(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 56
movq 448(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 57
movq 456(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 58
movq 464(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 59
movq 472(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 60
movq 480(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 61
movq 488(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 62
movq 496(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 63
movq 504(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 0-7
# START: 8-15
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 32
movq 256(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 33
movq 264(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 34
movq 272(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 35
movq 280(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 36
movq 288(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 37
movq 296(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 38
movq 304(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 39
movq 312(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 40
movq 320(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 41
movq 328(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 42
movq 336(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 43
movq 344(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 44
movq 352(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 45
movq 360(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 46
movq 368(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 47
movq 376(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 48
movq 384(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 49
movq 392(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 50
movq 400(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 51
movq 408(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 52
movq 416(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 53
movq 424(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 54
movq 432(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 55
movq 440(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 56
movq 448(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 57
movq 456(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 58
movq 464(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 59
movq 472(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 60
movq 480(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 61
movq 488(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 62
movq 496(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 63
movq 504(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 8-15
# START: 16-23
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 32
movq 256(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 33
movq 264(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 34
movq 272(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 35
movq 280(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 36
movq 288(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 37
movq 296(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 38
movq 304(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 39
movq 312(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 40
movq 320(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 41
movq 328(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 42
movq 336(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 43
movq 344(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 44
movq 352(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 45
movq 360(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 46
movq 368(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 47
movq 376(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 48
movq 384(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 49
movq 392(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 50
movq 400(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 51
movq 408(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 52
movq 416(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 53
movq 424(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 54
movq 432(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 55
movq 440(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 56
movq 448(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 57
movq 456(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 58
movq 464(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 59
movq 472(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 60
movq 480(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 61
movq 488(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 62
movq 496(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 63
movq 504(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 16-23
# START: 24-31
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 32
movq 256(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 33
movq 264(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 34
movq 272(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 35
movq 280(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 36
movq 288(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 37
movq 296(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 38
movq 304(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 39
movq 312(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 40
movq 320(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 41
movq 328(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 42
movq 336(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 43
movq 344(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 44
movq 352(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 45
movq 360(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 46
movq 368(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 47
movq 376(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 48
movq 384(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 49
movq 392(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 50
movq 400(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 51
movq 408(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 52
movq 416(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 53
movq 424(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 54
movq 432(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 55
movq 440(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 56
movq 448(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 57
movq 456(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 58
movq 464(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 59
movq 472(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 60
movq 480(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 61
movq 488(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 62
movq 496(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 63
movq 504(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
# END: 24-31
repz retq
#ifndef __APPLE__
.size sp_2048_get_from_table_32,.-sp_2048_get_from_table_32
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 2048 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_2048_mont_reduce_avx2_32
.type sp_2048_mont_reduce_avx2_32,@function
.align 16
sp_2048_mont_reduce_avx2_32:
#else
.section __TEXT,__text
.globl _sp_2048_mont_reduce_avx2_32
.p2align 4
_sp_2048_mont_reduce_avx2_32:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 32
movq $32, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $0x80, %rdi
xorq %rbp, %rbp
L_2048_mont_reduce_avx2_32_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -96(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -88(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -88(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq -72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -80(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq -64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -72(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq -56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -64(%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq -48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -56(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq -40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -48(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq -32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -40(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq -24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -32(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq -16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -24(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq -8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -16(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq (%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -8(%rdi)
# a[i+16] += m[16] * mu
mulxq 128(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, (%rdi)
# a[i+17] += m[17] * mu
mulxq 136(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+18] += m[18] * mu
mulxq 144(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+19] += m[19] * mu
mulxq 152(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+20] += m[20] * mu
mulxq 160(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+21] += m[21] * mu
mulxq 168(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
# a[i+22] += m[22] * mu
mulxq 176(%rsi), %rax, %rcx
movq 56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
# a[i+23] += m[23] * mu
mulxq 184(%rsi), %rax, %rcx
movq 64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 56(%rdi)
# a[i+24] += m[24] * mu
mulxq 192(%rsi), %rax, %rcx
movq 72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 64(%rdi)
# a[i+25] += m[25] * mu
mulxq 200(%rsi), %rax, %rcx
movq 80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 72(%rdi)
# a[i+26] += m[26] * mu
mulxq 208(%rsi), %rax, %rcx
movq 88(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 80(%rdi)
# a[i+27] += m[27] * mu
mulxq 216(%rsi), %rax, %rcx
movq 96(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 88(%rdi)
# a[i+28] += m[28] * mu
mulxq 224(%rsi), %rax, %rcx
movq 104(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rdi)
# a[i+29] += m[29] * mu
mulxq 232(%rsi), %rax, %rcx
movq 112(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 104(%rdi)
# a[i+30] += m[30] * mu
mulxq 240(%rsi), %rax, %rcx
movq 120(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 112(%rdi)
# a[i+31] += m[31] * mu
mulxq 248(%rsi), %rax, %rcx
movq 128(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 120(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 128(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 1
addq $8, %rdi
# i -= 1
subq $0x01, %r9
jnz L_2048_mont_reduce_avx2_32_loop
subq $0x80, %rdi
negq %rbp
movq %rdi, %r8
subq $0x100, %rdi
movq (%rsi), %rcx
movq %r12, %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq %r13, %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq %r14, %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq %r15, %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq 72(%rsi), %rax
movq 72(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 64(%rdi)
sbbq %rax, %rdx
movq 80(%rsi), %rcx
movq 80(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 72(%rdi)
sbbq %rcx, %rax
movq 88(%rsi), %rdx
movq 88(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 80(%rdi)
sbbq %rdx, %rcx
movq 96(%rsi), %rax
movq 96(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 88(%rdi)
sbbq %rax, %rdx
movq 104(%rsi), %rcx
movq 104(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 96(%rdi)
sbbq %rcx, %rax
movq 112(%rsi), %rdx
movq 112(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 104(%rdi)
sbbq %rdx, %rcx
movq 120(%rsi), %rax
movq 120(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 112(%rdi)
sbbq %rax, %rdx
movq 128(%rsi), %rcx
movq 128(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 120(%rdi)
sbbq %rcx, %rax
movq 136(%rsi), %rdx
movq 136(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 128(%rdi)
sbbq %rdx, %rcx
movq 144(%rsi), %rax
movq 144(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 136(%rdi)
sbbq %rax, %rdx
movq 152(%rsi), %rcx
movq 152(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 144(%rdi)
sbbq %rcx, %rax
movq 160(%rsi), %rdx
movq 160(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 152(%rdi)
sbbq %rdx, %rcx
movq 168(%rsi), %rax
movq 168(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 160(%rdi)
sbbq %rax, %rdx
movq 176(%rsi), %rcx
movq 176(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 168(%rdi)
sbbq %rcx, %rax
movq 184(%rsi), %rdx
movq 184(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 176(%rdi)
sbbq %rdx, %rcx
movq 192(%rsi), %rax
movq 192(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 184(%rdi)
sbbq %rax, %rdx
movq 200(%rsi), %rcx
movq 200(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 192(%rdi)
sbbq %rcx, %rax
movq 208(%rsi), %rdx
movq 208(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 200(%rdi)
sbbq %rdx, %rcx
movq 216(%rsi), %rax
movq 216(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 208(%rdi)
sbbq %rax, %rdx
movq 224(%rsi), %rcx
movq 224(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 216(%rdi)
sbbq %rcx, %rax
movq 232(%rsi), %rdx
movq 232(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 224(%rdi)
sbbq %rdx, %rcx
movq 240(%rsi), %rax
movq 240(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 232(%rdi)
sbbq %rax, %rdx
movq 248(%rsi), %rcx
movq 248(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 240(%rdi)
sbbq %rcx, %rax
movq %rax, 248(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_2048_mont_reduce_avx2_32,.-sp_2048_mont_reduce_avx2_32
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_2048_get_from_table_avx2_32
.type sp_2048_get_from_table_avx2_32,@function
.align 16
sp_2048_get_from_table_avx2_32:
#else
.section __TEXT,__text
.globl _sp_2048_get_from_table_avx2_32
.p2align 4
_sp_2048_get_from_table_avx2_32:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
vpxor %ymm13, %ymm13, %ymm13
vpermd %ymm10, %ymm13, %ymm10
vpermd %ymm11, %ymm13, %ymm11
# START: 0-15
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 16
movq 128(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 17
movq 136(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 18
movq 144(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 19
movq 152(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 20
movq 160(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 21
movq 168(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 22
movq 176(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 23
movq 184(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 24
movq 192(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 25
movq 200(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 26
movq 208(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 27
movq 216(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 28
movq 224(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 29
movq 232(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 30
movq 240(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 31
movq 248(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 32
movq 256(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 33
movq 264(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 34
movq 272(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 35
movq 280(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 36
movq 288(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 37
movq 296(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 38
movq 304(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 39
movq 312(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 40
movq 320(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 41
movq 328(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 42
movq 336(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 43
movq 344(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 44
movq 352(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 45
movq 360(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 46
movq 368(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 47
movq 376(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 48
movq 384(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 49
movq 392(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 50
movq 400(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 51
movq 408(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 52
movq 416(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 53
movq 424(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 54
movq 432(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 55
movq 440(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 56
movq 448(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 57
movq 456(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 58
movq 464(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 59
movq 472(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 60
movq 480(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 61
movq 488(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 62
movq 496(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 63
movq 504(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 0-15
# START: 16-31
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 32
movq 256(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 33
movq 264(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 34
movq 272(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 35
movq 280(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 36
movq 288(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 37
movq 296(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 38
movq 304(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 39
movq 312(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 40
movq 320(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 41
movq 328(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 42
movq 336(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 43
movq 344(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 44
movq 352(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 45
movq 360(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 46
movq 368(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 47
movq 376(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 48
movq 384(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 49
movq 392(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 50
movq 400(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 51
movq 408(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 52
movq 416(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 53
movq 424(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 54
movq 432(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 55
movq 440(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 56
movq 448(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 57
movq 456(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 58
movq 464(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 59
movq 472(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 60
movq 480(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 61
movq 488(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 62
movq 496(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 63
movq 504(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
# END: 16-31
repz retq
#ifndef __APPLE__
.size sp_2048_get_from_table_avx2_32,.-sp_2048_get_from_table_avx2_32
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Conditionally add a and b using the mask m.
* m is -1 to add and 0 when not.
*
* r A single precision number representing conditional add result.
* a A single precision number to add with.
* b A single precision number to add.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cond_add_16
.type sp_2048_cond_add_16,@function
.align 16
sp_2048_cond_add_16:
#else
.section __TEXT,__text
.globl _sp_2048_cond_add_16
.p2align 4
_sp_2048_cond_add_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq $0x00, %rax
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
addq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
adcq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
adcq $0x00, %rax
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_2048_cond_add_16,.-sp_2048_cond_add_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Conditionally add a and b using the mask m.
* m is -1 to add and 0 when not.
*
* r A single precision number representing conditional add result.
* a A single precision number to add with.
* b A single precision number to add.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_2048_cond_add_avx2_16
.type sp_2048_cond_add_avx2_16,@function
.align 16
sp_2048_cond_add_avx2_16:
#else
.section __TEXT,__text
.globl _sp_2048_cond_add_avx2_16
.p2align 4
_sp_2048_cond_add_avx2_16:
#endif /* __APPLE__ */
movq $0x00, %rax
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
addq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
adcq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
adcq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
adcq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
adcq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
adcq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
adcq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
adcq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
adcq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
adcq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
adcq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
adcq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
adcq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
adcq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
adcq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
adcq %r9, %r8
movq %r8, 120(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_2048_cond_add_avx2_16,.-sp_2048_cond_add_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Shift number left by n bit. (r = a << n)
*
* r Result of left shift by n.
* a Number to shift.
* n Amoutnt o shift.
*/
#ifndef __APPLE__
.text
.globl sp_2048_lshift_32
.type sp_2048_lshift_32,@function
.align 16
sp_2048_lshift_32:
#else
.section __TEXT,__text
.globl _sp_2048_lshift_32
.p2align 4
_sp_2048_lshift_32:
#endif /* __APPLE__ */
movb %dl, %cl
movq $0x00, %r10
movq 216(%rsi), %r11
movq 224(%rsi), %rdx
movq 232(%rsi), %rax
movq 240(%rsi), %r8
movq 248(%rsi), %r9
shldq %cl, %r9, %r10
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 224(%rdi)
movq %rax, 232(%rdi)
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
movq %r10, 256(%rdi)
movq 184(%rsi), %r9
movq 192(%rsi), %rdx
movq 200(%rsi), %rax
movq 208(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 192(%rdi)
movq %rax, 200(%rdi)
movq %r8, 208(%rdi)
movq %r11, 216(%rdi)
movq 152(%rsi), %r11
movq 160(%rsi), %rdx
movq 168(%rsi), %rax
movq 176(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 160(%rdi)
movq %rax, 168(%rdi)
movq %r8, 176(%rdi)
movq %r9, 184(%rdi)
movq 120(%rsi), %r9
movq 128(%rsi), %rdx
movq 136(%rsi), %rax
movq 144(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 128(%rdi)
movq %rax, 136(%rdi)
movq %r8, 144(%rdi)
movq %r11, 152(%rdi)
movq 88(%rsi), %r11
movq 96(%rsi), %rdx
movq 104(%rsi), %rax
movq 112(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 96(%rdi)
movq %rax, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
movq 56(%rsi), %r9
movq 64(%rsi), %rdx
movq 72(%rsi), %rax
movq 80(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 64(%rdi)
movq %rax, 72(%rdi)
movq %r8, 80(%rdi)
movq %r11, 88(%rdi)
movq 24(%rsi), %r11
movq 32(%rsi), %rdx
movq 40(%rsi), %rax
movq 48(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 32(%rdi)
movq %rax, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shlq %cl, %rdx
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %r8, 16(%rdi)
movq %r11, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_2048_lshift_32,.-sp_2048_lshift_32
#endif /* __APPLE__ */
#endif /* !WOLFSSL_SP_NO_2048 */
#endif /* !WOLFSSL_SP_NO_2048 */
#ifndef WOLFSSL_SP_NO_3072
#ifndef WOLFSSL_SP_NO_3072
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_3072_from_bin_bswap
.type sp_3072_from_bin_bswap,@function
.align 16
sp_3072_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_3072_from_bin_bswap
.p2align 4
_sp_3072_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x180, %r10
xorq %r11, %r11
jmp L_3072_from_bin_bswap_64_end
L_3072_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_3072_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_3072_from_bin_bswap_64_start
jmp L_3072_from_bin_bswap_8_end
L_3072_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_3072_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_3072_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_3072_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_3072_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_3072_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_3072_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_3072_from_bin_bswap_zero_end
L_3072_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_3072_from_bin_bswap_zero_start
L_3072_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_3072_from_bin_bswap,.-sp_3072_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_3072_from_bin_movbe
.type sp_3072_from_bin_movbe,@function
.align 16
sp_3072_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_3072_from_bin_movbe
.p2align 4
_sp_3072_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x180, %r10
jmp L_3072_from_bin_movbe_64_end
L_3072_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_3072_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_3072_from_bin_movbe_64_start
jmp L_3072_from_bin_movbe_8_end
L_3072_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_3072_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_3072_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_3072_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_3072_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_3072_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_3072_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_3072_from_bin_movbe_zero_end
L_3072_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_3072_from_bin_movbe_zero_start
L_3072_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_3072_from_bin_movbe,.-sp_3072_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 384
* Uses the bswap instruction.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_3072_to_bin_bswap_48
.type sp_3072_to_bin_bswap_48,@function
.align 16
sp_3072_to_bin_bswap_48:
#else
.section __TEXT,__text
.globl _sp_3072_to_bin_bswap_48
.p2align 4
_sp_3072_to_bin_bswap_48:
#endif /* __APPLE__ */
movq 376(%rdi), %rdx
movq 368(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movq 360(%rdi), %rdx
movq 352(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movq 344(%rdi), %rdx
movq 336(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
movq 328(%rdi), %rdx
movq 320(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 48(%rsi)
movq %rax, 56(%rsi)
movq 312(%rdi), %rdx
movq 304(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 64(%rsi)
movq %rax, 72(%rsi)
movq 296(%rdi), %rdx
movq 288(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 80(%rsi)
movq %rax, 88(%rsi)
movq 280(%rdi), %rdx
movq 272(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 96(%rsi)
movq %rax, 104(%rsi)
movq 264(%rdi), %rdx
movq 256(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 112(%rsi)
movq %rax, 120(%rsi)
movq 248(%rdi), %rdx
movq 240(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 128(%rsi)
movq %rax, 136(%rsi)
movq 232(%rdi), %rdx
movq 224(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 144(%rsi)
movq %rax, 152(%rsi)
movq 216(%rdi), %rdx
movq 208(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 160(%rsi)
movq %rax, 168(%rsi)
movq 200(%rdi), %rdx
movq 192(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 176(%rsi)
movq %rax, 184(%rsi)
movq 184(%rdi), %rdx
movq 176(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 192(%rsi)
movq %rax, 200(%rsi)
movq 168(%rdi), %rdx
movq 160(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 208(%rsi)
movq %rax, 216(%rsi)
movq 152(%rdi), %rdx
movq 144(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 224(%rsi)
movq %rax, 232(%rsi)
movq 136(%rdi), %rdx
movq 128(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 240(%rsi)
movq %rax, 248(%rsi)
movq 120(%rdi), %rdx
movq 112(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 256(%rsi)
movq %rax, 264(%rsi)
movq 104(%rdi), %rdx
movq 96(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 272(%rsi)
movq %rax, 280(%rsi)
movq 88(%rdi), %rdx
movq 80(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 288(%rsi)
movq %rax, 296(%rsi)
movq 72(%rdi), %rdx
movq 64(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 304(%rsi)
movq %rax, 312(%rsi)
movq 56(%rdi), %rdx
movq 48(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 320(%rsi)
movq %rax, 328(%rsi)
movq 40(%rdi), %rdx
movq 32(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 336(%rsi)
movq %rax, 344(%rsi)
movq 24(%rdi), %rdx
movq 16(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 352(%rsi)
movq %rax, 360(%rsi)
movq 8(%rdi), %rdx
movq (%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 368(%rsi)
movq %rax, 376(%rsi)
repz retq
#ifndef __APPLE__
.size sp_3072_to_bin_bswap_48,.-sp_3072_to_bin_bswap_48
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 384
* Uses the movbe instruction which is optional.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_3072_to_bin_movbe_48
.type sp_3072_to_bin_movbe_48,@function
.align 16
sp_3072_to_bin_movbe_48:
#else
.section __TEXT,__text
.globl _sp_3072_to_bin_movbe_48
.p2align 4
_sp_3072_to_bin_movbe_48:
#endif /* __APPLE__ */
movbeq 376(%rdi), %rdx
movbeq 368(%rdi), %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movbeq 360(%rdi), %rdx
movbeq 352(%rdi), %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movbeq 344(%rdi), %rdx
movbeq 336(%rdi), %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
movbeq 328(%rdi), %rdx
movbeq 320(%rdi), %rax
movq %rdx, 48(%rsi)
movq %rax, 56(%rsi)
movbeq 312(%rdi), %rdx
movbeq 304(%rdi), %rax
movq %rdx, 64(%rsi)
movq %rax, 72(%rsi)
movbeq 296(%rdi), %rdx
movbeq 288(%rdi), %rax
movq %rdx, 80(%rsi)
movq %rax, 88(%rsi)
movbeq 280(%rdi), %rdx
movbeq 272(%rdi), %rax
movq %rdx, 96(%rsi)
movq %rax, 104(%rsi)
movbeq 264(%rdi), %rdx
movbeq 256(%rdi), %rax
movq %rdx, 112(%rsi)
movq %rax, 120(%rsi)
movbeq 248(%rdi), %rdx
movbeq 240(%rdi), %rax
movq %rdx, 128(%rsi)
movq %rax, 136(%rsi)
movbeq 232(%rdi), %rdx
movbeq 224(%rdi), %rax
movq %rdx, 144(%rsi)
movq %rax, 152(%rsi)
movbeq 216(%rdi), %rdx
movbeq 208(%rdi), %rax
movq %rdx, 160(%rsi)
movq %rax, 168(%rsi)
movbeq 200(%rdi), %rdx
movbeq 192(%rdi), %rax
movq %rdx, 176(%rsi)
movq %rax, 184(%rsi)
movbeq 184(%rdi), %rdx
movbeq 176(%rdi), %rax
movq %rdx, 192(%rsi)
movq %rax, 200(%rsi)
movbeq 168(%rdi), %rdx
movbeq 160(%rdi), %rax
movq %rdx, 208(%rsi)
movq %rax, 216(%rsi)
movbeq 152(%rdi), %rdx
movbeq 144(%rdi), %rax
movq %rdx, 224(%rsi)
movq %rax, 232(%rsi)
movbeq 136(%rdi), %rdx
movbeq 128(%rdi), %rax
movq %rdx, 240(%rsi)
movq %rax, 248(%rsi)
movbeq 120(%rdi), %rdx
movbeq 112(%rdi), %rax
movq %rdx, 256(%rsi)
movq %rax, 264(%rsi)
movbeq 104(%rdi), %rdx
movbeq 96(%rdi), %rax
movq %rdx, 272(%rsi)
movq %rax, 280(%rsi)
movbeq 88(%rdi), %rdx
movbeq 80(%rdi), %rax
movq %rdx, 288(%rsi)
movq %rax, 296(%rsi)
movbeq 72(%rdi), %rdx
movbeq 64(%rdi), %rax
movq %rdx, 304(%rsi)
movq %rax, 312(%rsi)
movbeq 56(%rdi), %rdx
movbeq 48(%rdi), %rax
movq %rdx, 320(%rsi)
movq %rax, 328(%rsi)
movbeq 40(%rdi), %rdx
movbeq 32(%rdi), %rax
movq %rdx, 336(%rsi)
movq %rax, 344(%rsi)
movbeq 24(%rdi), %rdx
movbeq 16(%rdi), %rax
movq %rdx, 352(%rsi)
movq %rax, 360(%rsi)
movbeq 8(%rdi), %rdx
movbeq (%rdi), %rax
movq %rdx, 368(%rsi)
movq %rax, 376(%rsi)
repz retq
#ifndef __APPLE__
.size sp_3072_to_bin_movbe_48,.-sp_3072_to_bin_movbe_48
#endif /* __APPLE__ */
#endif /* NO_MOVBE_SUPPORT */
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_12
.type sp_3072_mul_12,@function
.align 16
sp_3072_mul_12:
#else
.section __TEXT,__text
.globl _sp_3072_mul_12
.p2align 4
_sp_3072_mul_12:
#endif /* __APPLE__ */
movq %rdx, %rcx
subq $0x60, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[0] * B[4]
movq 32(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[0]
movq (%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rsp)
# A[0] * B[5]
movq 40(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[4]
movq 32(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[1]
movq 8(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[0]
movq (%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 40(%rsp)
# A[0] * B[6]
movq 48(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[5]
movq 40(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[4]
movq 32(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[2]
movq 16(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[1]
movq 8(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[0]
movq (%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 48(%rsp)
# A[0] * B[7]
movq 56(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[6]
movq 48(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[5]
movq 40(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[4]
movq 32(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[3]
movq 24(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[2]
movq 16(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[1]
movq 8(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[0]
movq (%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 56(%rsp)
# A[0] * B[8]
movq 64(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[7]
movq 56(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[6]
movq 48(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[5]
movq 40(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[4]
movq 32(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[3]
movq 24(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[2]
movq 16(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[1]
movq 8(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[0]
movq (%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 64(%rsp)
# A[0] * B[9]
movq 72(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[8]
movq 64(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[7]
movq 56(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[6]
movq 48(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[5]
movq 40(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[4]
movq 32(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[3]
movq 24(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[2]
movq 16(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[1]
movq 8(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[0]
movq (%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 72(%rsp)
# A[0] * B[10]
movq 80(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[9]
movq 72(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[8]
movq 64(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[7]
movq 56(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[6]
movq 48(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[5]
movq 40(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[4]
movq 32(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[3]
movq 24(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[2]
movq 16(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[1]
movq 8(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[0]
movq (%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 80(%rsp)
# A[0] * B[11]
movq 88(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[10]
movq 80(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[9]
movq 72(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[8]
movq 64(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[7]
movq 56(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[6]
movq 48(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[5]
movq 40(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[4]
movq 32(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[3]
movq 24(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[2]
movq 16(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[1]
movq 8(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[0]
movq (%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 88(%rsp)
# A[1] * B[11]
movq 88(%rcx), %rax
mulq 8(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[10]
movq 80(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[9]
movq 72(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[8]
movq 64(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[7]
movq 56(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[6]
movq 48(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[5]
movq 40(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[4]
movq 32(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[3]
movq 24(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[2]
movq 16(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[1]
movq 8(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 96(%rdi)
# A[2] * B[11]
movq 88(%rcx), %rax
mulq 16(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[10]
movq 80(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[9]
movq 72(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[8]
movq 64(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[7]
movq 56(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[6]
movq 48(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[5]
movq 40(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[4]
movq 32(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[3]
movq 24(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[2]
movq 16(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 104(%rdi)
# A[3] * B[11]
movq 88(%rcx), %rax
mulq 24(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[10]
movq 80(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[9]
movq 72(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[8]
movq 64(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[7]
movq 56(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[6]
movq 48(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[5]
movq 40(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[4]
movq 32(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[3]
movq 24(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 112(%rdi)
# A[4] * B[11]
movq 88(%rcx), %rax
mulq 32(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[10]
movq 80(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[9]
movq 72(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[8]
movq 64(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[7]
movq 56(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[6]
movq 48(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[5]
movq 40(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[4]
movq 32(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 120(%rdi)
# A[5] * B[11]
movq 88(%rcx), %rax
mulq 40(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[10]
movq 80(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[9]
movq 72(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[8]
movq 64(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[7]
movq 56(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[6]
movq 48(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[5]
movq 40(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 128(%rdi)
# A[6] * B[11]
movq 88(%rcx), %rax
mulq 48(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[10]
movq 80(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[9]
movq 72(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[8]
movq 64(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[7]
movq 56(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[6]
movq 48(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 136(%rdi)
# A[7] * B[11]
movq 88(%rcx), %rax
mulq 56(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[10]
movq 80(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[9]
movq 72(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[8]
movq 64(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[7]
movq 56(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 144(%rdi)
# A[8] * B[11]
movq 88(%rcx), %rax
mulq 64(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[10]
movq 80(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[9]
movq 72(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[8]
movq 64(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 152(%rdi)
# A[9] * B[11]
movq 88(%rcx), %rax
mulq 72(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[10]
movq 80(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[9]
movq 72(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 160(%rdi)
# A[10] * B[11]
movq 88(%rcx), %rax
mulq 80(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[10]
movq 80(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 168(%rdi)
# A[11] * B[11]
movq 88(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
movq %r9, 176(%rdi)
movq %r10, 184(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r8
movq 24(%rsp), %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r8
movq 56(%rsp), %r9
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r8
movq 88(%rsp), %r9
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
addq $0x60, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_mul_12,.-sp_3072_mul_12
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r Result of multiplication.
* a First number to multiply.
* b Second number to multiply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_avx2_12
.type sp_3072_mul_avx2_12,@function
.align 16
sp_3072_mul_avx2_12:
#else
.section __TEXT,__text
.globl _sp_3072_mul_avx2_12
.p2align 4
_sp_3072_mul_avx2_12:
#endif /* __APPLE__ */
pushq %rbx
pushq %rbp
pushq %r12
movq %rdx, %rbp
subq $0x60, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbx
cmovne %rdi, %rbx
cmpq %rdi, %rbp
cmove %rsp, %rbx
addq $0x60, %rdi
xorq %r12, %r12
movq (%rsi), %rdx
# A[0] * B[0]
mulx (%rbp), %r8, %r9
# A[0] * B[1]
mulx 8(%rbp), %rax, %r10
movq %r8, (%rbx)
adcxq %rax, %r9
movq %r9, 8(%rbx)
# A[0] * B[2]
mulx 16(%rbp), %rax, %r8
adcxq %rax, %r10
# A[0] * B[3]
mulx 24(%rbp), %rax, %r9
movq %r10, 16(%rbx)
adcxq %rax, %r8
movq %r8, 24(%rbx)
# A[0] * B[4]
mulx 32(%rbp), %rax, %r10
adcxq %rax, %r9
# A[0] * B[5]
mulx 40(%rbp), %rax, %r8
movq %r9, 32(%rbx)
adcxq %rax, %r10
movq %r10, 40(%rbx)
# A[0] * B[6]
mulx 48(%rbp), %rax, %r9
adcxq %rax, %r8
# A[0] * B[7]
mulx 56(%rbp), %rax, %r10
movq %r8, 48(%rbx)
adcxq %rax, %r9
movq %r9, 56(%rbx)
# A[0] * B[8]
mulx 64(%rbp), %rax, %r8
adcxq %rax, %r10
# A[0] * B[9]
mulx 72(%rbp), %rax, %r9
movq %r10, 64(%rbx)
adcxq %rax, %r8
movq %r8, 72(%rbx)
# A[0] * B[10]
mulx 80(%rbp), %rax, %r10
adcxq %rax, %r9
# A[0] * B[11]
mulx 88(%rbp), %rax, %r8
movq %r9, 80(%rbx)
adcxq %rax, %r10
adcxq %r12, %r8
movq %r12, %r11
adcxq %r12, %r11
movq %r10, 88(%rbx)
movq %r8, (%rdi)
movq 8(%rsi), %rdx
movq 8(%rbx), %r9
movq 16(%rbx), %r10
movq 24(%rbx), %r8
# A[1] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 8(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 16(%rbx)
movq 32(%rbx), %r9
movq 40(%rbx), %r10
# A[1] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 24(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rbx)
movq 48(%rbx), %r8
movq 56(%rbx), %r9
# A[1] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[1] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 40(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 48(%rbx)
movq 64(%rbx), %r10
movq 72(%rbx), %r8
# A[1] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 56(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 64(%rbx)
movq 80(%rbx), %r9
movq 88(%rbx), %r10
# A[1] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 72(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rbx)
movq (%rdi), %r8
# A[1] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[1] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 88(%rbx)
movq %r12, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r11, %r9
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq 16(%rsi), %rdx
movq 16(%rbx), %r10
movq 24(%rbx), %r8
movq 32(%rbx), %r9
# A[2] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[2] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rbx)
movq 40(%rbx), %r10
movq 48(%rbx), %r8
# A[2] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 32(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 40(%rbx)
movq 56(%rbx), %r9
movq 64(%rbx), %r10
# A[2] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 48(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 56(%rbx)
movq 72(%rbx), %r8
movq 80(%rbx), %r9
# A[2] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[2] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 64(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 72(%rbx)
movq 88(%rbx), %r10
movq (%rdi), %r8
# A[2] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 80(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 88(%rbx)
movq 8(%rdi), %r9
# A[2] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, (%rdi)
movq %r12, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r11, %r10
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq 24(%rsi), %rdx
movq 24(%rbx), %r8
movq 32(%rbx), %r9
movq 40(%rbx), %r10
# A[3] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 24(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rbx)
movq 48(%rbx), %r8
movq 56(%rbx), %r9
# A[3] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[3] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 40(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 48(%rbx)
movq 64(%rbx), %r10
movq 72(%rbx), %r8
# A[3] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 56(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 64(%rbx)
movq 80(%rbx), %r9
movq 88(%rbx), %r10
# A[3] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 72(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rbx)
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[3] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[3] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 88(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r10
# A[3] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 8(%rdi)
movq %r12, %r8
adcxq %rax, %r10
adoxq %rcx, %r8
adcxq %r11, %r8
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r10, 16(%rdi)
movq %r8, 24(%rdi)
movq 32(%rsi), %rdx
movq 32(%rbx), %r9
movq 40(%rbx), %r10
movq 48(%rbx), %r8
# A[4] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 32(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 40(%rbx)
movq 56(%rbx), %r9
movq 64(%rbx), %r10
# A[4] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 48(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 56(%rbx)
movq 72(%rbx), %r8
movq 80(%rbx), %r9
# A[4] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[4] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 64(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 72(%rbx)
movq 88(%rbx), %r10
movq (%rdi), %r8
# A[4] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 80(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 88(%rbx)
movq 8(%rdi), %r9
movq 16(%rdi), %r10
# A[4] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, (%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 8(%rdi)
movq 24(%rdi), %r8
# A[4] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[4] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 16(%rdi)
movq %r12, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r11, %r9
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq 40(%rsi), %rdx
movq 40(%rbx), %r10
movq 48(%rbx), %r8
movq 56(%rbx), %r9
# A[5] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[5] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 40(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 48(%rbx)
movq 64(%rbx), %r10
movq 72(%rbx), %r8
# A[5] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 56(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 64(%rbx)
movq 80(%rbx), %r9
movq 88(%rbx), %r10
# A[5] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 72(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rbx)
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[5] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[5] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 88(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[5] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 8(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
# A[5] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
movq %r12, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r11, %r10
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq 48(%rsi), %rdx
movq 48(%rbx), %r8
movq 56(%rbx), %r9
movq 64(%rbx), %r10
# A[6] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 48(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 56(%rbx)
movq 72(%rbx), %r8
movq 80(%rbx), %r9
# A[6] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[6] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 64(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 72(%rbx)
movq 88(%rbx), %r10
movq (%rdi), %r8
# A[6] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 80(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 88(%rbx)
movq 8(%rdi), %r9
movq 16(%rdi), %r10
# A[6] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, (%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 8(%rdi)
movq 24(%rdi), %r8
movq 32(%rdi), %r9
# A[6] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[6] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 16(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rdi)
movq 40(%rdi), %r10
# A[6] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 32(%rdi)
movq %r12, %r8
adcxq %rax, %r10
adoxq %rcx, %r8
adcxq %r11, %r8
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r10, 40(%rdi)
movq %r8, 48(%rdi)
movq 56(%rsi), %rdx
movq 56(%rbx), %r9
movq 64(%rbx), %r10
movq 72(%rbx), %r8
# A[7] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 56(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 64(%rbx)
movq 80(%rbx), %r9
movq 88(%rbx), %r10
# A[7] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 72(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rbx)
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[7] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[7] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 88(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[7] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 8(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[7] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rdi)
movq 48(%rdi), %r8
# A[7] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[7] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 40(%rdi)
movq %r12, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r11, %r9
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsi), %rdx
movq 64(%rbx), %r10
movq 72(%rbx), %r8
movq 80(%rbx), %r9
# A[8] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[8] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 64(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 72(%rbx)
movq 88(%rbx), %r10
movq (%rdi), %r8
# A[8] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 80(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 88(%rbx)
movq 8(%rdi), %r9
movq 16(%rdi), %r10
# A[8] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, (%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 8(%rdi)
movq 24(%rdi), %r8
movq 32(%rdi), %r9
# A[8] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[8] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 16(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rdi)
movq 40(%rdi), %r10
movq 48(%rdi), %r8
# A[8] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 32(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 40(%rdi)
movq 56(%rdi), %r9
# A[8] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 48(%rdi)
movq %r12, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r11, %r10
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r9, 56(%rdi)
movq %r10, 64(%rdi)
movq 72(%rsi), %rdx
movq 72(%rbx), %r8
movq 80(%rbx), %r9
movq 88(%rbx), %r10
# A[9] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 72(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rbx)
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[9] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[9] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 88(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[9] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[9] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 8(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[9] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[9] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[9] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 40(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 48(%rdi)
movq 64(%rdi), %r10
# A[9] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[9] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 56(%rdi)
movq %r12, %r8
adcxq %rax, %r10
adoxq %rcx, %r8
adcxq %r11, %r8
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r10, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rsi), %rdx
movq 80(%rbx), %r9
movq 88(%rbx), %r10
movq (%rdi), %r8
# A[10] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 80(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 88(%rbx)
movq 8(%rdi), %r9
movq 16(%rdi), %r10
# A[10] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, (%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 8(%rdi)
movq 24(%rdi), %r8
movq 32(%rdi), %r9
# A[10] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[10] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 16(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rdi)
movq 40(%rdi), %r10
movq 48(%rdi), %r8
# A[10] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 32(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 40(%rdi)
movq 56(%rdi), %r9
movq 64(%rdi), %r10
# A[10] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 48(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 56(%rdi)
movq 72(%rdi), %r8
# A[10] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[10] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 64(%rdi)
movq %r12, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r11, %r9
movq %r12, %r11
adoxq %r12, %r11
adcxq %r12, %r11
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq 88(%rsi), %rdx
movq 88(%rbx), %r10
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[11] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[11] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 88(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[11] * B[2]
mulx 16(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 8(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[11] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[11] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[11] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 40(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 48(%rdi)
movq 64(%rdi), %r10
movq 72(%rdi), %r8
# A[11] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 56(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r10, 64(%rdi)
movq 80(%rdi), %r9
# A[11] * B[10]
mulx 80(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
movq %r12, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r11, %r10
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
subq $0x60, %rdi
cmpq %rdi, %rsi
je L_start_3072_mul_avx2_12
cmpq %rdi, %rbp
jne L_end_3072_mul_avx2_12
L_start_3072_mul_avx2_12:
vmovdqu (%rbx), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbx), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbx), %xmm0
vmovups %xmm0, 32(%rdi)
vmovdqu 48(%rbx), %xmm0
vmovups %xmm0, 48(%rdi)
vmovdqu 64(%rbx), %xmm0
vmovups %xmm0, 64(%rdi)
vmovdqu 80(%rbx), %xmm0
vmovups %xmm0, 80(%rdi)
L_end_3072_mul_avx2_12:
addq $0x60, %rsp
popq %r12
popq %rbp
popq %rbx
repz retq
#ifndef __APPLE__
.size sp_3072_mul_avx2_12,.-sp_3072_mul_avx2_12
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_add_12
.type sp_3072_add_12,@function
.align 16
sp_3072_add_12:
#else
.section __TEXT,__text
.globl _sp_3072_add_12
.p2align 4
_sp_3072_add_12:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq %r8, 88(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_add_12,.-sp_3072_add_12
#endif /* __APPLE__ */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sub_in_place_24
.type sp_3072_sub_in_place_24,@function
.align 16
sp_3072_sub_in_place_24:
#else
.section __TEXT,__text
.globl _sp_3072_sub_in_place_24
.p2align 4
_sp_3072_sub_in_place_24:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq 72(%rdi), %rcx
movq %rdx, 64(%rdi)
sbbq 72(%rsi), %rcx
movq 80(%rdi), %rdx
movq %rcx, 72(%rdi)
sbbq 80(%rsi), %rdx
movq 88(%rdi), %rcx
movq %rdx, 80(%rdi)
sbbq 88(%rsi), %rcx
movq 96(%rdi), %rdx
movq %rcx, 88(%rdi)
sbbq 96(%rsi), %rdx
movq 104(%rdi), %rcx
movq %rdx, 96(%rdi)
sbbq 104(%rsi), %rcx
movq 112(%rdi), %rdx
movq %rcx, 104(%rdi)
sbbq 112(%rsi), %rdx
movq 120(%rdi), %rcx
movq %rdx, 112(%rdi)
sbbq 120(%rsi), %rcx
movq 128(%rdi), %rdx
movq %rcx, 120(%rdi)
sbbq 128(%rsi), %rdx
movq 136(%rdi), %rcx
movq %rdx, 128(%rdi)
sbbq 136(%rsi), %rcx
movq 144(%rdi), %rdx
movq %rcx, 136(%rdi)
sbbq 144(%rsi), %rdx
movq 152(%rdi), %rcx
movq %rdx, 144(%rdi)
sbbq 152(%rsi), %rcx
movq 160(%rdi), %rdx
movq %rcx, 152(%rdi)
sbbq 160(%rsi), %rdx
movq 168(%rdi), %rcx
movq %rdx, 160(%rdi)
sbbq 168(%rsi), %rcx
movq 176(%rdi), %rdx
movq %rcx, 168(%rdi)
sbbq 176(%rsi), %rdx
movq 184(%rdi), %rcx
movq %rdx, 176(%rdi)
sbbq 184(%rsi), %rcx
movq %rcx, 184(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_sub_in_place_24,.-sp_3072_sub_in_place_24
#endif /* __APPLE__ */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_add_24
.type sp_3072_add_24,@function
.align 16
sp_3072_add_24:
#else
.section __TEXT,__text
.globl _sp_3072_add_24
.p2align 4
_sp_3072_add_24:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
adcq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
adcq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
adcq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
adcq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
adcq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
adcq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
adcq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
adcq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
adcq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
adcq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
adcq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
adcq 184(%rdx), %r8
movq %r8, 184(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_add_24,.-sp_3072_add_24
#endif /* __APPLE__ */
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_24
.type sp_3072_mul_24,@function
.align 16
sp_3072_mul_24:
#else
.section __TEXT,__text
.globl _sp_3072_mul_24
.p2align 4
_sp_3072_mul_24:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x268, %rsp
movq %rdi, 576(%rsp)
movq %rsi, 584(%rsp)
movq %rdx, 592(%rsp)
leaq 384(%rsp), %r10
leaq 96(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq %r8, 88(%r10)
adcq $0x00, %r13
movq %r13, 600(%rsp)
leaq 480(%rsp), %r11
leaq 96(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq %r8, 88(%r11)
adcq $0x00, %r14
movq %r14, 608(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_mul_12@plt
#else
callq _sp_3072_mul_12
#endif /* __APPLE__ */
movq 592(%rsp), %rdx
movq 584(%rsp), %rsi
leaq 192(%rsp), %rdi
addq $0x60, %rdx
addq $0x60, %rsi
#ifndef __APPLE__
callq sp_3072_mul_12@plt
#else
callq _sp_3072_mul_12
#endif /* __APPLE__ */
movq 592(%rsp), %rdx
movq 584(%rsp), %rsi
movq 576(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_mul_12@plt
#else
callq _sp_3072_mul_12
#endif /* __APPLE__ */
#ifdef _WIN64
movq 592(%rsp), %rdx
movq 584(%rsp), %rsi
movq 576(%rsp), %rdi
#endif /* _WIN64 */
movq 600(%rsp), %r13
movq 608(%rsp), %r14
movq 576(%rsp), %r15
movq %r13, %r9
leaq 384(%rsp), %r10
leaq 480(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0xc0, %r15
movq (%r10), %rax
movq (%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, (%r10)
movq %rcx, (%r11)
movq 8(%r10), %rax
movq 8(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 8(%r10)
movq %rcx, 8(%r11)
movq 16(%r10), %rax
movq 16(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 16(%r10)
movq %rcx, 16(%r11)
movq 24(%r10), %rax
movq 24(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 24(%r10)
movq %rcx, 24(%r11)
movq 32(%r10), %rax
movq 32(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 32(%r10)
movq %rcx, 32(%r11)
movq 40(%r10), %rax
movq 40(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 40(%r10)
movq %rcx, 40(%r11)
movq 48(%r10), %rax
movq 48(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 48(%r10)
movq %rcx, 48(%r11)
movq 56(%r10), %rax
movq 56(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 56(%r10)
movq %rcx, 56(%r11)
movq 64(%r10), %rax
movq 64(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 64(%r10)
movq %rcx, 64(%r11)
movq 72(%r10), %rax
movq 72(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 72(%r10)
movq %rcx, 72(%r11)
movq 80(%r10), %rax
movq 80(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 80(%r10)
movq %rcx, 80(%r11)
movq 88(%r10), %rax
movq 88(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 88(%r10)
movq %rcx, 88(%r11)
movq (%r10), %rax
addq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq %r8, 88(%r15)
adcq $0x00, %r9
leaq 192(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq %r8, 184(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq %r8, 184(%r10)
sbbq $0x00, %r9
subq $0x60, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq %r8, 184(%r15)
adcq $0x00, %r9
movq %r9, 288(%rdi)
addq $0x60, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq %rax, 96(%r15)
# Add to zero
movq 104(%r11), %rax
adcq $0x00, %rax
movq 112(%r11), %rcx
movq %rax, 104(%r15)
adcq $0x00, %rcx
movq 120(%r11), %r8
movq %rcx, 112(%r15)
adcq $0x00, %r8
movq 128(%r11), %rax
movq %r8, 120(%r15)
adcq $0x00, %rax
movq 136(%r11), %rcx
movq %rax, 128(%r15)
adcq $0x00, %rcx
movq 144(%r11), %r8
movq %rcx, 136(%r15)
adcq $0x00, %r8
movq 152(%r11), %rax
movq %r8, 144(%r15)
adcq $0x00, %rax
movq 160(%r11), %rcx
movq %rax, 152(%r15)
adcq $0x00, %rcx
movq 168(%r11), %r8
movq %rcx, 160(%r15)
adcq $0x00, %r8
movq 176(%r11), %rax
movq %r8, 168(%r15)
adcq $0x00, %rax
movq 184(%r11), %rcx
movq %rax, 176(%r15)
adcq $0x00, %rcx
movq %rcx, 184(%r15)
addq $0x268, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mul_24,.-sp_3072_mul_24
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_avx2_24
.type sp_3072_mul_avx2_24,@function
.align 16
sp_3072_mul_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_mul_avx2_24
.p2align 4
_sp_3072_mul_avx2_24:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x268, %rsp
movq %rdi, 576(%rsp)
movq %rsi, 584(%rsp)
movq %rdx, 592(%rsp)
leaq 384(%rsp), %r10
leaq 96(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq %r8, 88(%r10)
adcq $0x00, %r13
movq %r13, 600(%rsp)
leaq 480(%rsp), %r11
leaq 96(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq %r8, 88(%r11)
adcq $0x00, %r14
movq %r14, 608(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_mul_avx2_12@plt
#else
callq _sp_3072_mul_avx2_12
#endif /* __APPLE__ */
movq 592(%rsp), %rdx
movq 584(%rsp), %rsi
leaq 192(%rsp), %rdi
addq $0x60, %rdx
addq $0x60, %rsi
#ifndef __APPLE__
callq sp_3072_mul_avx2_12@plt
#else
callq _sp_3072_mul_avx2_12
#endif /* __APPLE__ */
movq 592(%rsp), %rdx
movq 584(%rsp), %rsi
movq 576(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_mul_avx2_12@plt
#else
callq _sp_3072_mul_avx2_12
#endif /* __APPLE__ */
#ifdef _WIN64
movq 592(%rsp), %rdx
movq 584(%rsp), %rsi
movq 576(%rsp), %rdi
#endif /* _WIN64 */
movq 600(%rsp), %r13
movq 608(%rsp), %r14
movq 576(%rsp), %r15
movq %r13, %r9
leaq 384(%rsp), %r10
leaq 480(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0xc0, %r15
movq (%r10), %rax
movq (%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
addq %rcx, %rax
movq 8(%r10), %rcx
movq 8(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, (%r15)
adcq %r8, %rcx
movq 16(%r10), %r8
movq 16(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 8(%r15)
adcq %rax, %r8
movq 24(%r10), %rax
movq 24(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 16(%r15)
adcq %rcx, %rax
movq 32(%r10), %rcx
movq 32(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 24(%r15)
adcq %r8, %rcx
movq 40(%r10), %r8
movq 40(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 32(%r15)
adcq %rax, %r8
movq 48(%r10), %rax
movq 48(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 40(%r15)
adcq %rcx, %rax
movq 56(%r10), %rcx
movq 56(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 48(%r15)
adcq %r8, %rcx
movq 64(%r10), %r8
movq 64(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 56(%r15)
adcq %rax, %r8
movq 72(%r10), %rax
movq 72(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 64(%r15)
adcq %rcx, %rax
movq 80(%r10), %rcx
movq 80(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 72(%r15)
adcq %r8, %rcx
movq 88(%r10), %r8
movq 88(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 80(%r15)
adcq %rax, %r8
movq %r8, 88(%r15)
adcq $0x00, %r9
leaq 192(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq %r8, 184(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq %r8, 184(%r10)
sbbq $0x00, %r9
subq $0x60, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq %r8, 184(%r15)
adcq $0x00, %r9
movq %r9, 288(%rdi)
addq $0x60, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq %rax, 96(%r15)
# Add to zero
movq 104(%r11), %rax
adcq $0x00, %rax
movq 112(%r11), %rcx
movq %rax, 104(%r15)
adcq $0x00, %rcx
movq 120(%r11), %r8
movq %rcx, 112(%r15)
adcq $0x00, %r8
movq 128(%r11), %rax
movq %r8, 120(%r15)
adcq $0x00, %rax
movq 136(%r11), %rcx
movq %rax, 128(%r15)
adcq $0x00, %rcx
movq 144(%r11), %r8
movq %rcx, 136(%r15)
adcq $0x00, %r8
movq 152(%r11), %rax
movq %r8, 144(%r15)
adcq $0x00, %rax
movq 160(%r11), %rcx
movq %rax, 152(%r15)
adcq $0x00, %rcx
movq 168(%r11), %r8
movq %rcx, 160(%r15)
adcq $0x00, %r8
movq 176(%r11), %rax
movq %r8, 168(%r15)
adcq $0x00, %rax
movq 184(%r11), %rcx
movq %rax, 176(%r15)
adcq $0x00, %rcx
movq %rcx, 184(%r15)
addq $0x268, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mul_avx2_24,.-sp_3072_mul_avx2_24
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sub_in_place_48
.type sp_3072_sub_in_place_48,@function
.align 16
sp_3072_sub_in_place_48:
#else
.section __TEXT,__text
.globl _sp_3072_sub_in_place_48
.p2align 4
_sp_3072_sub_in_place_48:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq 72(%rdi), %rcx
movq %rdx, 64(%rdi)
sbbq 72(%rsi), %rcx
movq 80(%rdi), %rdx
movq %rcx, 72(%rdi)
sbbq 80(%rsi), %rdx
movq 88(%rdi), %rcx
movq %rdx, 80(%rdi)
sbbq 88(%rsi), %rcx
movq 96(%rdi), %rdx
movq %rcx, 88(%rdi)
sbbq 96(%rsi), %rdx
movq 104(%rdi), %rcx
movq %rdx, 96(%rdi)
sbbq 104(%rsi), %rcx
movq 112(%rdi), %rdx
movq %rcx, 104(%rdi)
sbbq 112(%rsi), %rdx
movq 120(%rdi), %rcx
movq %rdx, 112(%rdi)
sbbq 120(%rsi), %rcx
movq 128(%rdi), %rdx
movq %rcx, 120(%rdi)
sbbq 128(%rsi), %rdx
movq 136(%rdi), %rcx
movq %rdx, 128(%rdi)
sbbq 136(%rsi), %rcx
movq 144(%rdi), %rdx
movq %rcx, 136(%rdi)
sbbq 144(%rsi), %rdx
movq 152(%rdi), %rcx
movq %rdx, 144(%rdi)
sbbq 152(%rsi), %rcx
movq 160(%rdi), %rdx
movq %rcx, 152(%rdi)
sbbq 160(%rsi), %rdx
movq 168(%rdi), %rcx
movq %rdx, 160(%rdi)
sbbq 168(%rsi), %rcx
movq 176(%rdi), %rdx
movq %rcx, 168(%rdi)
sbbq 176(%rsi), %rdx
movq 184(%rdi), %rcx
movq %rdx, 176(%rdi)
sbbq 184(%rsi), %rcx
movq 192(%rdi), %rdx
movq %rcx, 184(%rdi)
sbbq 192(%rsi), %rdx
movq 200(%rdi), %rcx
movq %rdx, 192(%rdi)
sbbq 200(%rsi), %rcx
movq 208(%rdi), %rdx
movq %rcx, 200(%rdi)
sbbq 208(%rsi), %rdx
movq 216(%rdi), %rcx
movq %rdx, 208(%rdi)
sbbq 216(%rsi), %rcx
movq 224(%rdi), %rdx
movq %rcx, 216(%rdi)
sbbq 224(%rsi), %rdx
movq 232(%rdi), %rcx
movq %rdx, 224(%rdi)
sbbq 232(%rsi), %rcx
movq 240(%rdi), %rdx
movq %rcx, 232(%rdi)
sbbq 240(%rsi), %rdx
movq 248(%rdi), %rcx
movq %rdx, 240(%rdi)
sbbq 248(%rsi), %rcx
movq 256(%rdi), %rdx
movq %rcx, 248(%rdi)
sbbq 256(%rsi), %rdx
movq 264(%rdi), %rcx
movq %rdx, 256(%rdi)
sbbq 264(%rsi), %rcx
movq 272(%rdi), %rdx
movq %rcx, 264(%rdi)
sbbq 272(%rsi), %rdx
movq 280(%rdi), %rcx
movq %rdx, 272(%rdi)
sbbq 280(%rsi), %rcx
movq 288(%rdi), %rdx
movq %rcx, 280(%rdi)
sbbq 288(%rsi), %rdx
movq 296(%rdi), %rcx
movq %rdx, 288(%rdi)
sbbq 296(%rsi), %rcx
movq 304(%rdi), %rdx
movq %rcx, 296(%rdi)
sbbq 304(%rsi), %rdx
movq 312(%rdi), %rcx
movq %rdx, 304(%rdi)
sbbq 312(%rsi), %rcx
movq 320(%rdi), %rdx
movq %rcx, 312(%rdi)
sbbq 320(%rsi), %rdx
movq 328(%rdi), %rcx
movq %rdx, 320(%rdi)
sbbq 328(%rsi), %rcx
movq 336(%rdi), %rdx
movq %rcx, 328(%rdi)
sbbq 336(%rsi), %rdx
movq 344(%rdi), %rcx
movq %rdx, 336(%rdi)
sbbq 344(%rsi), %rcx
movq 352(%rdi), %rdx
movq %rcx, 344(%rdi)
sbbq 352(%rsi), %rdx
movq 360(%rdi), %rcx
movq %rdx, 352(%rdi)
sbbq 360(%rsi), %rcx
movq 368(%rdi), %rdx
movq %rcx, 360(%rdi)
sbbq 368(%rsi), %rdx
movq 376(%rdi), %rcx
movq %rdx, 368(%rdi)
sbbq 376(%rsi), %rcx
movq %rcx, 376(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_sub_in_place_48,.-sp_3072_sub_in_place_48
#endif /* __APPLE__ */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_add_48
.type sp_3072_add_48,@function
.align 16
sp_3072_add_48:
#else
.section __TEXT,__text
.globl _sp_3072_add_48
.p2align 4
_sp_3072_add_48:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
adcq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
adcq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
adcq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
adcq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
adcq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
adcq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
adcq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
adcq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
adcq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
adcq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
adcq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
adcq 184(%rdx), %r8
movq 192(%rsi), %rcx
movq %r8, 184(%rdi)
adcq 192(%rdx), %rcx
movq 200(%rsi), %r8
movq %rcx, 192(%rdi)
adcq 200(%rdx), %r8
movq 208(%rsi), %rcx
movq %r8, 200(%rdi)
adcq 208(%rdx), %rcx
movq 216(%rsi), %r8
movq %rcx, 208(%rdi)
adcq 216(%rdx), %r8
movq 224(%rsi), %rcx
movq %r8, 216(%rdi)
adcq 224(%rdx), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%rdi)
adcq 232(%rdx), %r8
movq 240(%rsi), %rcx
movq %r8, 232(%rdi)
adcq 240(%rdx), %rcx
movq 248(%rsi), %r8
movq %rcx, 240(%rdi)
adcq 248(%rdx), %r8
movq 256(%rsi), %rcx
movq %r8, 248(%rdi)
adcq 256(%rdx), %rcx
movq 264(%rsi), %r8
movq %rcx, 256(%rdi)
adcq 264(%rdx), %r8
movq 272(%rsi), %rcx
movq %r8, 264(%rdi)
adcq 272(%rdx), %rcx
movq 280(%rsi), %r8
movq %rcx, 272(%rdi)
adcq 280(%rdx), %r8
movq 288(%rsi), %rcx
movq %r8, 280(%rdi)
adcq 288(%rdx), %rcx
movq 296(%rsi), %r8
movq %rcx, 288(%rdi)
adcq 296(%rdx), %r8
movq 304(%rsi), %rcx
movq %r8, 296(%rdi)
adcq 304(%rdx), %rcx
movq 312(%rsi), %r8
movq %rcx, 304(%rdi)
adcq 312(%rdx), %r8
movq 320(%rsi), %rcx
movq %r8, 312(%rdi)
adcq 320(%rdx), %rcx
movq 328(%rsi), %r8
movq %rcx, 320(%rdi)
adcq 328(%rdx), %r8
movq 336(%rsi), %rcx
movq %r8, 328(%rdi)
adcq 336(%rdx), %rcx
movq 344(%rsi), %r8
movq %rcx, 336(%rdi)
adcq 344(%rdx), %r8
movq 352(%rsi), %rcx
movq %r8, 344(%rdi)
adcq 352(%rdx), %rcx
movq 360(%rsi), %r8
movq %rcx, 352(%rdi)
adcq 360(%rdx), %r8
movq 368(%rsi), %rcx
movq %r8, 360(%rdi)
adcq 368(%rdx), %rcx
movq 376(%rsi), %r8
movq %rcx, 368(%rdi)
adcq 376(%rdx), %r8
movq %r8, 376(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_add_48,.-sp_3072_add_48
#endif /* __APPLE__ */
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_48
.type sp_3072_mul_48,@function
.align 16
sp_3072_mul_48:
#else
.section __TEXT,__text
.globl _sp_3072_mul_48
.p2align 4
_sp_3072_mul_48:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x4a8, %rsp
movq %rdi, 1152(%rsp)
movq %rsi, 1160(%rsp)
movq %rdx, 1168(%rsp)
leaq 768(%rsp), %r10
leaq 192(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq 96(%rsi), %rax
movq %r8, 88(%r10)
adcq 96(%r12), %rax
movq 104(%rsi), %rcx
movq %rax, 96(%r10)
adcq 104(%r12), %rcx
movq 112(%rsi), %r8
movq %rcx, 104(%r10)
adcq 112(%r12), %r8
movq 120(%rsi), %rax
movq %r8, 112(%r10)
adcq 120(%r12), %rax
movq 128(%rsi), %rcx
movq %rax, 120(%r10)
adcq 128(%r12), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%r10)
adcq 136(%r12), %r8
movq 144(%rsi), %rax
movq %r8, 136(%r10)
adcq 144(%r12), %rax
movq 152(%rsi), %rcx
movq %rax, 144(%r10)
adcq 152(%r12), %rcx
movq 160(%rsi), %r8
movq %rcx, 152(%r10)
adcq 160(%r12), %r8
movq 168(%rsi), %rax
movq %r8, 160(%r10)
adcq 168(%r12), %rax
movq 176(%rsi), %rcx
movq %rax, 168(%r10)
adcq 176(%r12), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%r10)
adcq 184(%r12), %r8
movq %r8, 184(%r10)
adcq $0x00, %r13
movq %r13, 1176(%rsp)
leaq 960(%rsp), %r11
leaq 192(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq 96(%rdx), %rax
movq %r8, 88(%r11)
adcq 96(%r12), %rax
movq 104(%rdx), %rcx
movq %rax, 96(%r11)
adcq 104(%r12), %rcx
movq 112(%rdx), %r8
movq %rcx, 104(%r11)
adcq 112(%r12), %r8
movq 120(%rdx), %rax
movq %r8, 112(%r11)
adcq 120(%r12), %rax
movq 128(%rdx), %rcx
movq %rax, 120(%r11)
adcq 128(%r12), %rcx
movq 136(%rdx), %r8
movq %rcx, 128(%r11)
adcq 136(%r12), %r8
movq 144(%rdx), %rax
movq %r8, 136(%r11)
adcq 144(%r12), %rax
movq 152(%rdx), %rcx
movq %rax, 144(%r11)
adcq 152(%r12), %rcx
movq 160(%rdx), %r8
movq %rcx, 152(%r11)
adcq 160(%r12), %r8
movq 168(%rdx), %rax
movq %r8, 160(%r11)
adcq 168(%r12), %rax
movq 176(%rdx), %rcx
movq %rax, 168(%r11)
adcq 176(%r12), %rcx
movq 184(%rdx), %r8
movq %rcx, 176(%r11)
adcq 184(%r12), %r8
movq %r8, 184(%r11)
adcq $0x00, %r14
movq %r14, 1184(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_mul_24@plt
#else
callq _sp_3072_mul_24
#endif /* __APPLE__ */
movq 1168(%rsp), %rdx
movq 1160(%rsp), %rsi
leaq 384(%rsp), %rdi
addq $0xc0, %rdx
addq $0xc0, %rsi
#ifndef __APPLE__
callq sp_3072_mul_24@plt
#else
callq _sp_3072_mul_24
#endif /* __APPLE__ */
movq 1168(%rsp), %rdx
movq 1160(%rsp), %rsi
movq 1152(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_mul_24@plt
#else
callq _sp_3072_mul_24
#endif /* __APPLE__ */
#ifdef _WIN64
movq 1168(%rsp), %rdx
movq 1160(%rsp), %rsi
movq 1152(%rsp), %rdi
#endif /* _WIN64 */
movq 1176(%rsp), %r13
movq 1184(%rsp), %r14
movq 1152(%rsp), %r15
movq %r13, %r9
leaq 768(%rsp), %r10
leaq 960(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0x180, %r15
movq (%r10), %rax
movq (%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, (%r10)
movq %rcx, (%r11)
movq 8(%r10), %rax
movq 8(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 8(%r10)
movq %rcx, 8(%r11)
movq 16(%r10), %rax
movq 16(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 16(%r10)
movq %rcx, 16(%r11)
movq 24(%r10), %rax
movq 24(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 24(%r10)
movq %rcx, 24(%r11)
movq 32(%r10), %rax
movq 32(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 32(%r10)
movq %rcx, 32(%r11)
movq 40(%r10), %rax
movq 40(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 40(%r10)
movq %rcx, 40(%r11)
movq 48(%r10), %rax
movq 48(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 48(%r10)
movq %rcx, 48(%r11)
movq 56(%r10), %rax
movq 56(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 56(%r10)
movq %rcx, 56(%r11)
movq 64(%r10), %rax
movq 64(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 64(%r10)
movq %rcx, 64(%r11)
movq 72(%r10), %rax
movq 72(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 72(%r10)
movq %rcx, 72(%r11)
movq 80(%r10), %rax
movq 80(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 80(%r10)
movq %rcx, 80(%r11)
movq 88(%r10), %rax
movq 88(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 88(%r10)
movq %rcx, 88(%r11)
movq 96(%r10), %rax
movq 96(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 96(%r10)
movq %rcx, 96(%r11)
movq 104(%r10), %rax
movq 104(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 104(%r10)
movq %rcx, 104(%r11)
movq 112(%r10), %rax
movq 112(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 112(%r10)
movq %rcx, 112(%r11)
movq 120(%r10), %rax
movq 120(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 120(%r10)
movq %rcx, 120(%r11)
movq 128(%r10), %rax
movq 128(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 128(%r10)
movq %rcx, 128(%r11)
movq 136(%r10), %rax
movq 136(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 136(%r10)
movq %rcx, 136(%r11)
movq 144(%r10), %rax
movq 144(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 144(%r10)
movq %rcx, 144(%r11)
movq 152(%r10), %rax
movq 152(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 152(%r10)
movq %rcx, 152(%r11)
movq 160(%r10), %rax
movq 160(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 160(%r10)
movq %rcx, 160(%r11)
movq 168(%r10), %rax
movq 168(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 168(%r10)
movq %rcx, 168(%r11)
movq 176(%r10), %rax
movq 176(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 176(%r10)
movq %rcx, 176(%r11)
movq 184(%r10), %rax
movq 184(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 184(%r10)
movq %rcx, 184(%r11)
movq (%r10), %rax
addq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r15)
adcq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r15)
adcq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r15)
adcq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r15)
adcq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r15)
adcq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r15)
adcq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r15)
adcq 184(%r11), %r8
movq %r8, 184(%r15)
adcq $0x00, %r9
leaq 384(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%r11), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%r11), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%r11), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%r11), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%r11), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%r11), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%r11), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%r11), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%r11), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%r11), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%r11), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%r11), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%r11), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%r11), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%r11), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%r11), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%r11), %r8
movq %r8, 376(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%rdi), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%rdi), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%rdi), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%rdi), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%rdi), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%rdi), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%rdi), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%rdi), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%rdi), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%rdi), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%rdi), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%rdi), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%rdi), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%rdi), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%rdi), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%rdi), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%rdi), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%rdi), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%rdi), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%rdi), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%rdi), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%rdi), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%rdi), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%rdi), %r8
movq %r8, 376(%r10)
sbbq $0x00, %r9
subq $0xc0, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r10), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r10), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r10), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r10), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r10), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r10), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r10), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r10), %rcx
movq 256(%r15), %r8
movq %rcx, 248(%r15)
adcq 256(%r10), %r8
movq 264(%r15), %rax
movq %r8, 256(%r15)
adcq 264(%r10), %rax
movq 272(%r15), %rcx
movq %rax, 264(%r15)
adcq 272(%r10), %rcx
movq 280(%r15), %r8
movq %rcx, 272(%r15)
adcq 280(%r10), %r8
movq 288(%r15), %rax
movq %r8, 280(%r15)
adcq 288(%r10), %rax
movq 296(%r15), %rcx
movq %rax, 288(%r15)
adcq 296(%r10), %rcx
movq 304(%r15), %r8
movq %rcx, 296(%r15)
adcq 304(%r10), %r8
movq 312(%r15), %rax
movq %r8, 304(%r15)
adcq 312(%r10), %rax
movq 320(%r15), %rcx
movq %rax, 312(%r15)
adcq 320(%r10), %rcx
movq 328(%r15), %r8
movq %rcx, 320(%r15)
adcq 328(%r10), %r8
movq 336(%r15), %rax
movq %r8, 328(%r15)
adcq 336(%r10), %rax
movq 344(%r15), %rcx
movq %rax, 336(%r15)
adcq 344(%r10), %rcx
movq 352(%r15), %r8
movq %rcx, 344(%r15)
adcq 352(%r10), %r8
movq 360(%r15), %rax
movq %r8, 352(%r15)
adcq 360(%r10), %rax
movq 368(%r15), %rcx
movq %rax, 360(%r15)
adcq 368(%r10), %rcx
movq 376(%r15), %r8
movq %rcx, 368(%r15)
adcq 376(%r10), %r8
movq %r8, 376(%r15)
adcq $0x00, %r9
movq %r9, 576(%rdi)
addq $0xc0, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r11), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r11), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r11), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r11), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r11), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r11), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r11), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r11), %rax
movq %rax, 192(%r15)
# Add to zero
movq 200(%r11), %rax
adcq $0x00, %rax
movq 208(%r11), %rcx
movq %rax, 200(%r15)
adcq $0x00, %rcx
movq 216(%r11), %r8
movq %rcx, 208(%r15)
adcq $0x00, %r8
movq 224(%r11), %rax
movq %r8, 216(%r15)
adcq $0x00, %rax
movq 232(%r11), %rcx
movq %rax, 224(%r15)
adcq $0x00, %rcx
movq 240(%r11), %r8
movq %rcx, 232(%r15)
adcq $0x00, %r8
movq 248(%r11), %rax
movq %r8, 240(%r15)
adcq $0x00, %rax
movq 256(%r11), %rcx
movq %rax, 248(%r15)
adcq $0x00, %rcx
movq 264(%r11), %r8
movq %rcx, 256(%r15)
adcq $0x00, %r8
movq 272(%r11), %rax
movq %r8, 264(%r15)
adcq $0x00, %rax
movq 280(%r11), %rcx
movq %rax, 272(%r15)
adcq $0x00, %rcx
movq 288(%r11), %r8
movq %rcx, 280(%r15)
adcq $0x00, %r8
movq 296(%r11), %rax
movq %r8, 288(%r15)
adcq $0x00, %rax
movq 304(%r11), %rcx
movq %rax, 296(%r15)
adcq $0x00, %rcx
movq 312(%r11), %r8
movq %rcx, 304(%r15)
adcq $0x00, %r8
movq 320(%r11), %rax
movq %r8, 312(%r15)
adcq $0x00, %rax
movq 328(%r11), %rcx
movq %rax, 320(%r15)
adcq $0x00, %rcx
movq 336(%r11), %r8
movq %rcx, 328(%r15)
adcq $0x00, %r8
movq 344(%r11), %rax
movq %r8, 336(%r15)
adcq $0x00, %rax
movq 352(%r11), %rcx
movq %rax, 344(%r15)
adcq $0x00, %rcx
movq 360(%r11), %r8
movq %rcx, 352(%r15)
adcq $0x00, %r8
movq 368(%r11), %rax
movq %r8, 360(%r15)
adcq $0x00, %rax
movq 376(%r11), %rcx
movq %rax, 368(%r15)
adcq $0x00, %rcx
movq %rcx, 376(%r15)
addq $0x4a8, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mul_48,.-sp_3072_mul_48
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_avx2_48
.type sp_3072_mul_avx2_48,@function
.align 16
sp_3072_mul_avx2_48:
#else
.section __TEXT,__text
.globl _sp_3072_mul_avx2_48
.p2align 4
_sp_3072_mul_avx2_48:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x4a8, %rsp
movq %rdi, 1152(%rsp)
movq %rsi, 1160(%rsp)
movq %rdx, 1168(%rsp)
leaq 768(%rsp), %r10
leaq 192(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq 96(%rsi), %rax
movq %r8, 88(%r10)
adcq 96(%r12), %rax
movq 104(%rsi), %rcx
movq %rax, 96(%r10)
adcq 104(%r12), %rcx
movq 112(%rsi), %r8
movq %rcx, 104(%r10)
adcq 112(%r12), %r8
movq 120(%rsi), %rax
movq %r8, 112(%r10)
adcq 120(%r12), %rax
movq 128(%rsi), %rcx
movq %rax, 120(%r10)
adcq 128(%r12), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%r10)
adcq 136(%r12), %r8
movq 144(%rsi), %rax
movq %r8, 136(%r10)
adcq 144(%r12), %rax
movq 152(%rsi), %rcx
movq %rax, 144(%r10)
adcq 152(%r12), %rcx
movq 160(%rsi), %r8
movq %rcx, 152(%r10)
adcq 160(%r12), %r8
movq 168(%rsi), %rax
movq %r8, 160(%r10)
adcq 168(%r12), %rax
movq 176(%rsi), %rcx
movq %rax, 168(%r10)
adcq 176(%r12), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%r10)
adcq 184(%r12), %r8
movq %r8, 184(%r10)
adcq $0x00, %r13
movq %r13, 1176(%rsp)
leaq 960(%rsp), %r11
leaq 192(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq 96(%rdx), %rax
movq %r8, 88(%r11)
adcq 96(%r12), %rax
movq 104(%rdx), %rcx
movq %rax, 96(%r11)
adcq 104(%r12), %rcx
movq 112(%rdx), %r8
movq %rcx, 104(%r11)
adcq 112(%r12), %r8
movq 120(%rdx), %rax
movq %r8, 112(%r11)
adcq 120(%r12), %rax
movq 128(%rdx), %rcx
movq %rax, 120(%r11)
adcq 128(%r12), %rcx
movq 136(%rdx), %r8
movq %rcx, 128(%r11)
adcq 136(%r12), %r8
movq 144(%rdx), %rax
movq %r8, 136(%r11)
adcq 144(%r12), %rax
movq 152(%rdx), %rcx
movq %rax, 144(%r11)
adcq 152(%r12), %rcx
movq 160(%rdx), %r8
movq %rcx, 152(%r11)
adcq 160(%r12), %r8
movq 168(%rdx), %rax
movq %r8, 160(%r11)
adcq 168(%r12), %rax
movq 176(%rdx), %rcx
movq %rax, 168(%r11)
adcq 176(%r12), %rcx
movq 184(%rdx), %r8
movq %rcx, 176(%r11)
adcq 184(%r12), %r8
movq %r8, 184(%r11)
adcq $0x00, %r14
movq %r14, 1184(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_mul_avx2_24@plt
#else
callq _sp_3072_mul_avx2_24
#endif /* __APPLE__ */
movq 1168(%rsp), %rdx
movq 1160(%rsp), %rsi
leaq 384(%rsp), %rdi
addq $0xc0, %rdx
addq $0xc0, %rsi
#ifndef __APPLE__
callq sp_3072_mul_avx2_24@plt
#else
callq _sp_3072_mul_avx2_24
#endif /* __APPLE__ */
movq 1168(%rsp), %rdx
movq 1160(%rsp), %rsi
movq 1152(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_mul_avx2_24@plt
#else
callq _sp_3072_mul_avx2_24
#endif /* __APPLE__ */
#ifdef _WIN64
movq 1168(%rsp), %rdx
movq 1160(%rsp), %rsi
movq 1152(%rsp), %rdi
#endif /* _WIN64 */
movq 1176(%rsp), %r13
movq 1184(%rsp), %r14
movq 1152(%rsp), %r15
movq %r13, %r9
leaq 768(%rsp), %r10
leaq 960(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0x180, %r15
movq (%r10), %rax
movq (%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
addq %rcx, %rax
movq 8(%r10), %rcx
movq 8(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, (%r15)
adcq %r8, %rcx
movq 16(%r10), %r8
movq 16(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 8(%r15)
adcq %rax, %r8
movq 24(%r10), %rax
movq 24(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 16(%r15)
adcq %rcx, %rax
movq 32(%r10), %rcx
movq 32(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 24(%r15)
adcq %r8, %rcx
movq 40(%r10), %r8
movq 40(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 32(%r15)
adcq %rax, %r8
movq 48(%r10), %rax
movq 48(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 40(%r15)
adcq %rcx, %rax
movq 56(%r10), %rcx
movq 56(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 48(%r15)
adcq %r8, %rcx
movq 64(%r10), %r8
movq 64(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 56(%r15)
adcq %rax, %r8
movq 72(%r10), %rax
movq 72(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 64(%r15)
adcq %rcx, %rax
movq 80(%r10), %rcx
movq 80(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 72(%r15)
adcq %r8, %rcx
movq 88(%r10), %r8
movq 88(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 80(%r15)
adcq %rax, %r8
movq 96(%r10), %rax
movq 96(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 88(%r15)
adcq %rcx, %rax
movq 104(%r10), %rcx
movq 104(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 96(%r15)
adcq %r8, %rcx
movq 112(%r10), %r8
movq 112(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 104(%r15)
adcq %rax, %r8
movq 120(%r10), %rax
movq 120(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 112(%r15)
adcq %rcx, %rax
movq 128(%r10), %rcx
movq 128(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 120(%r15)
adcq %r8, %rcx
movq 136(%r10), %r8
movq 136(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 128(%r15)
adcq %rax, %r8
movq 144(%r10), %rax
movq 144(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 136(%r15)
adcq %rcx, %rax
movq 152(%r10), %rcx
movq 152(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 144(%r15)
adcq %r8, %rcx
movq 160(%r10), %r8
movq 160(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 152(%r15)
adcq %rax, %r8
movq 168(%r10), %rax
movq 168(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 160(%r15)
adcq %rcx, %rax
movq 176(%r10), %rcx
movq 176(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 168(%r15)
adcq %r8, %rcx
movq 184(%r10), %r8
movq 184(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 176(%r15)
adcq %rax, %r8
movq %r8, 184(%r15)
adcq $0x00, %r9
leaq 384(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%r11), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%r11), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%r11), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%r11), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%r11), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%r11), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%r11), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%r11), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%r11), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%r11), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%r11), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%r11), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%r11), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%r11), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%r11), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%r11), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%r11), %r8
movq %r8, 376(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%rdi), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%rdi), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%rdi), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%rdi), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%rdi), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%rdi), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%rdi), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%rdi), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%rdi), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%rdi), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%rdi), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%rdi), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%rdi), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%rdi), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%rdi), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%rdi), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%rdi), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%rdi), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%rdi), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%rdi), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%rdi), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%rdi), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%rdi), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%rdi), %r8
movq %r8, 376(%r10)
sbbq $0x00, %r9
subq $0xc0, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r10), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r10), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r10), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r10), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r10), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r10), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r10), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r10), %rcx
movq 256(%r15), %r8
movq %rcx, 248(%r15)
adcq 256(%r10), %r8
movq 264(%r15), %rax
movq %r8, 256(%r15)
adcq 264(%r10), %rax
movq 272(%r15), %rcx
movq %rax, 264(%r15)
adcq 272(%r10), %rcx
movq 280(%r15), %r8
movq %rcx, 272(%r15)
adcq 280(%r10), %r8
movq 288(%r15), %rax
movq %r8, 280(%r15)
adcq 288(%r10), %rax
movq 296(%r15), %rcx
movq %rax, 288(%r15)
adcq 296(%r10), %rcx
movq 304(%r15), %r8
movq %rcx, 296(%r15)
adcq 304(%r10), %r8
movq 312(%r15), %rax
movq %r8, 304(%r15)
adcq 312(%r10), %rax
movq 320(%r15), %rcx
movq %rax, 312(%r15)
adcq 320(%r10), %rcx
movq 328(%r15), %r8
movq %rcx, 320(%r15)
adcq 328(%r10), %r8
movq 336(%r15), %rax
movq %r8, 328(%r15)
adcq 336(%r10), %rax
movq 344(%r15), %rcx
movq %rax, 336(%r15)
adcq 344(%r10), %rcx
movq 352(%r15), %r8
movq %rcx, 344(%r15)
adcq 352(%r10), %r8
movq 360(%r15), %rax
movq %r8, 352(%r15)
adcq 360(%r10), %rax
movq 368(%r15), %rcx
movq %rax, 360(%r15)
adcq 368(%r10), %rcx
movq 376(%r15), %r8
movq %rcx, 368(%r15)
adcq 376(%r10), %r8
movq %r8, 376(%r15)
adcq $0x00, %r9
movq %r9, 576(%rdi)
addq $0xc0, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r11), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r11), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r11), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r11), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r11), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r11), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r11), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r11), %rax
movq %rax, 192(%r15)
# Add to zero
movq 200(%r11), %rax
adcq $0x00, %rax
movq 208(%r11), %rcx
movq %rax, 200(%r15)
adcq $0x00, %rcx
movq 216(%r11), %r8
movq %rcx, 208(%r15)
adcq $0x00, %r8
movq 224(%r11), %rax
movq %r8, 216(%r15)
adcq $0x00, %rax
movq 232(%r11), %rcx
movq %rax, 224(%r15)
adcq $0x00, %rcx
movq 240(%r11), %r8
movq %rcx, 232(%r15)
adcq $0x00, %r8
movq 248(%r11), %rax
movq %r8, 240(%r15)
adcq $0x00, %rax
movq 256(%r11), %rcx
movq %rax, 248(%r15)
adcq $0x00, %rcx
movq 264(%r11), %r8
movq %rcx, 256(%r15)
adcq $0x00, %r8
movq 272(%r11), %rax
movq %r8, 264(%r15)
adcq $0x00, %rax
movq 280(%r11), %rcx
movq %rax, 272(%r15)
adcq $0x00, %rcx
movq 288(%r11), %r8
movq %rcx, 280(%r15)
adcq $0x00, %r8
movq 296(%r11), %rax
movq %r8, 288(%r15)
adcq $0x00, %rax
movq 304(%r11), %rcx
movq %rax, 296(%r15)
adcq $0x00, %rcx
movq 312(%r11), %r8
movq %rcx, 304(%r15)
adcq $0x00, %r8
movq 320(%r11), %rax
movq %r8, 312(%r15)
adcq $0x00, %rax
movq 328(%r11), %rcx
movq %rax, 320(%r15)
adcq $0x00, %rcx
movq 336(%r11), %r8
movq %rcx, 328(%r15)
adcq $0x00, %r8
movq 344(%r11), %rax
movq %r8, 336(%r15)
adcq $0x00, %rax
movq 352(%r11), %rcx
movq %rax, 344(%r15)
adcq $0x00, %rcx
movq 360(%r11), %r8
movq %rcx, 352(%r15)
adcq $0x00, %r8
movq 368(%r11), %rax
movq %r8, 360(%r15)
adcq $0x00, %rax
movq 376(%r11), %rcx
movq %rax, 368(%r15)
adcq $0x00, %rcx
movq %rcx, 376(%r15)
addq $0x4a8, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mul_avx2_48,.-sp_3072_mul_avx2_48
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sqr_12
.type sp_3072_sqr_12,@function
.align 16
sp_3072_sqr_12:
#else
.section __TEXT,__text
.globl _sp_3072_sqr_12
.p2align 4
_sp_3072_sqr_12:
#endif /* __APPLE__ */
pushq %r12
subq $0x60, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r9, %r9
movq %rax, (%rsp)
movq %rdx, %r8
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 24(%rsp)
# A[0] * A[4]
movq 32(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 32(%rsp)
# A[0] * A[5]
movq 40(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[4]
movq 32(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 40(%rsp)
# A[0] * A[6]
movq 48(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[5]
movq 40(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[4]
movq 32(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 48(%rsp)
# A[0] * A[7]
movq 56(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[6]
movq 48(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[5]
movq 40(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[4]
movq 32(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 56(%rsp)
# A[0] * A[8]
movq 64(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[7]
movq 56(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[6]
movq 48(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[5]
movq 40(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[4]
movq 32(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 64(%rsp)
# A[0] * A[9]
movq 72(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[8]
movq 64(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[7]
movq 56(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[6]
movq 48(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[5]
movq 40(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 72(%rsp)
# A[0] * A[10]
movq 80(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[9]
movq 72(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[8]
movq 64(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[7]
movq 56(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[6]
movq 48(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[5]
movq 40(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 80(%rsp)
# A[0] * A[11]
movq 88(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[10]
movq 80(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[9]
movq 72(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[8]
movq 64(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[7]
movq 56(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[6]
movq 48(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 88(%rsp)
# A[1] * A[11]
movq 88(%rsi), %rax
mulq 8(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[2] * A[10]
movq 80(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[9]
movq 72(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[8]
movq 64(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[7]
movq 56(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[6]
movq 48(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 96(%rdi)
# A[2] * A[11]
movq 88(%rsi), %rax
mulq 16(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[3] * A[10]
movq 80(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[9]
movq 72(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[8]
movq 64(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[7]
movq 56(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 104(%rdi)
# A[3] * A[11]
movq 88(%rsi), %rax
mulq 24(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[4] * A[10]
movq 80(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[9]
movq 72(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[8]
movq 64(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[7]
movq 56(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 112(%rdi)
# A[4] * A[11]
movq 88(%rsi), %rax
mulq 32(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[5] * A[10]
movq 80(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[9]
movq 72(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[8]
movq 64(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 120(%rdi)
# A[5] * A[11]
movq 88(%rsi), %rax
mulq 40(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[6] * A[10]
movq 80(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[9]
movq 72(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[8]
movq 64(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 128(%rdi)
# A[6] * A[11]
movq 88(%rsi), %rax
mulq 48(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[7] * A[10]
movq 80(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[9]
movq 72(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 136(%rdi)
# A[7] * A[11]
movq 88(%rsi), %rax
mulq 56(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * A[10]
movq 80(%rsi), %rax
mulq 64(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * A[9]
movq 72(%rsi), %rax
mulq %rax
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 144(%rdi)
# A[8] * A[11]
movq 88(%rsi), %rax
mulq 64(%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[9] * A[10]
movq 80(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 152(%rdi)
# A[9] * A[11]
movq 88(%rsi), %rax
mulq 72(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[10] * A[10]
movq 80(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 160(%rdi)
# A[10] * A[11]
movq 88(%rsi), %rax
mulq 80(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 168(%rdi)
# A[11] * A[11]
movq 88(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 176(%rdi)
movq %r9, 184(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r10
movq 24(%rsp), %r11
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r10
movq 56(%rsp), %r11
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r10, 48(%rdi)
movq %r11, 56(%rdi)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r10
movq 88(%rsp), %r11
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq %r10, 80(%rdi)
movq %r11, 88(%rdi)
addq $0x60, %rsp
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_sqr_12,.-sp_3072_sqr_12
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sqr_avx2_12
.type sp_3072_sqr_avx2_12,@function
.align 16
sp_3072_sqr_avx2_12:
#else
.section __TEXT,__text
.globl _sp_3072_sqr_avx2_12
.p2align 4
_sp_3072_sqr_avx2_12:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
subq $0x60, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbp
cmovne %rdi, %rbp
addq $0x60, %rdi
xorq %r10, %r10
# Diagonal 1
# Zero into %r9
# A[1] x A[0]
movq (%rsi), %rdx
mulxq 8(%rsi), %r8, %r9
movq %r8, 8(%rbp)
# Zero into %r8
# A[2] x A[0]
mulxq 16(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 16(%rbp)
# Zero into %r9
# A[3] x A[0]
mulxq 24(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 24(%rbp)
# Zero into %r8
# A[4] x A[0]
mulxq 32(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 32(%rbp)
# Zero into %r9
# A[5] x A[0]
mulxq 40(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 40(%rbp)
# No load %r12 - %r8
# A[6] x A[0]
mulxq 48(%rsi), %rax, %r12
adcxq %rax, %r9
adoxq %r10, %r12
movq %r9, 48(%rbp)
# No load %r13 - %r9
# A[7] x A[0]
mulxq 56(%rsi), %rax, %r13
adcxq %rax, %r12
adoxq %r10, %r13
# No store %r12 - %r8
# No load %r14 - %r8
# A[8] x A[0]
mulxq 64(%rsi), %rax, %r14
adcxq %rax, %r13
adoxq %r10, %r14
# No store %r13 - %r9
# No load %r15 - %r9
# A[9] x A[0]
mulxq 72(%rsi), %rax, %r15
adcxq %rax, %r14
adoxq %r10, %r15
# No store %r14 - %r8
# No load %rbx - %r8
# A[10] x A[0]
mulxq 80(%rsi), %rax, %rbx
adcxq %rax, %r15
adoxq %r10, %rbx
# No store %r15 - %r9
# Zero into %r9
# A[11] x A[0]
mulxq 88(%rsi), %rax, %r9
adcxq %rax, %rbx
adoxq %r10, %r9
# No store %rbx - %r8
# Carry
adcxq %r10, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, (%rdi)
# Diagonal 2
movq 24(%rbp), %r9
movq 32(%rbp), %r8
# A[2] x A[1]
movq 8(%rsi), %rdx
mulxq 16(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 24(%rbp)
movq 40(%rbp), %r9
# A[3] x A[1]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rbp)
movq 48(%rbp), %r8
# A[4] x A[1]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 40(%rbp)
# No load %r12 - %r9
# A[5] x A[1]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r12
movq %r8, 48(%rbp)
# No load %r13 - %r8
# A[6] x A[1]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# No store %r12 - %r9
# No load %r14 - %r9
# A[7] x A[1]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r8
# No load %r15 - %r8
# A[8] x A[1]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r9
# No load %rbx - %r9
# A[9] x A[1]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r8
movq (%rdi), %r8
# A[10] x A[1]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# No store %rbx - %r9
# Zero into %r9
# A[11] x A[1]
mulxq 88(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, (%rdi)
# Zero into %r8
# A[11] x A[2]
movq 16(%rsi), %rdx
mulxq 88(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 8(%rdi)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 16(%rdi)
# Diagonal 3
movq 40(%rbp), %r8
movq 48(%rbp), %r9
# A[3] x A[2]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 40(%rbp)
# No load %r12 - %r8
# A[4] x A[2]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r12
movq %r9, 48(%rbp)
# No load %r13 - %r9
# A[5] x A[2]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# No store %r12 - %r8
# No load %r14 - %r8
# A[6] x A[2]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r9
# No load %r15 - %r9
# A[7] x A[2]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r8
# No load %rbx - %r8
# A[8] x A[2]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r9
movq (%rdi), %r9
# A[9] x A[2]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# No store %rbx - %r8
movq 8(%rdi), %r8
# A[10] x A[2]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, (%rdi)
movq 16(%rdi), %r9
# A[10] x A[3]
movq 24(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 8(%rdi)
# Zero into %r8
# A[10] x A[4]
movq 32(%rsi), %rdx
mulxq 80(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 16(%rdi)
# Zero into %r9
# A[10] x A[5]
movq 40(%rsi), %rdx
mulxq 80(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 24(%rdi)
# Carry
adcxq %r11, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, 32(%rdi)
# Diagonal 4
# No load %r13 - %r8
# A[4] x A[3]
movq 24(%rsi), %rdx
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# No store %r12 - %r9
# No load %r14 - %r9
# A[5] x A[3]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r8
# No load %r15 - %r8
# A[6] x A[3]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r9
# No load %rbx - %r9
# A[7] x A[3]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r8
movq (%rdi), %r8
# A[8] x A[3]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# No store %rbx - %r9
movq 8(%rdi), %r9
# A[9] x A[3]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r8
# A[9] x A[4]
movq 32(%rsi), %rdx
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
# A[9] x A[5]
movq 40(%rsi), %rdx
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 16(%rdi)
movq 32(%rdi), %r8
# A[9] x A[6]
movq 48(%rsi), %rdx
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 24(%rdi)
# Zero into %r9
# A[9] x A[7]
movq 56(%rsi), %rdx
mulxq 72(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 32(%rdi)
# Zero into %r8
# A[9] x A[8]
movq 64(%rsi), %rdx
mulxq 72(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 40(%rdi)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 48(%rdi)
# Diagonal 5
# No load %r15 - %r9
# A[5] x A[4]
movq 32(%rsi), %rdx
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r8
# No load %rbx - %r8
# A[6] x A[4]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r9
movq (%rdi), %r9
# A[7] x A[4]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# No store %rbx - %r8
movq 8(%rdi), %r8
# A[8] x A[4]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, (%rdi)
movq 16(%rdi), %r9
# A[8] x A[5]
movq 40(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 8(%rdi)
movq 24(%rdi), %r8
# A[8] x A[6]
movq 48(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 16(%rdi)
movq 32(%rdi), %r9
# A[8] x A[7]
movq 56(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rdi)
movq 40(%rdi), %r8
# A[10] x A[6]
movq 48(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 32(%rdi)
movq 48(%rdi), %r9
# A[10] x A[7]
movq 56(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 40(%rdi)
# Zero into %r8
# A[10] x A[8]
movq 64(%rsi), %rdx
mulxq 80(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 48(%rdi)
# Zero into %r9
# A[10] x A[9]
movq 72(%rsi), %rdx
mulxq 80(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 56(%rdi)
# Carry
adcxq %r11, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, 64(%rdi)
# Diagonal 6
movq (%rdi), %r8
# A[6] x A[5]
movq 40(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# No store %rbx - %r9
movq 8(%rdi), %r9
# A[7] x A[5]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r8
# A[7] x A[6]
movq 48(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
# A[11] x A[3]
movq 24(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 16(%rdi)
movq 32(%rdi), %r8
# A[11] x A[4]
movq 32(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 24(%rdi)
movq 40(%rdi), %r9
# A[11] x A[5]
movq 40(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rdi)
movq 48(%rdi), %r8
# A[11] x A[6]
movq 48(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 40(%rdi)
movq 56(%rdi), %r9
# A[11] x A[7]
movq 56(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 48(%rdi)
movq 64(%rdi), %r8
# A[11] x A[8]
movq 64(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 56(%rdi)
# Zero into %r9
# A[11] x A[9]
movq 72(%rsi), %rdx
mulxq 88(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 64(%rdi)
# Zero into %r8
# A[11] x A[10]
movq 80(%rsi), %rdx
mulxq 88(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 72(%rdi)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 80(%rdi)
movq %r11, 88(%rdi)
# Double and Add in A[i] x A[i]
movq 8(%rbp), %r9
# A[0] x A[0]
movq (%rsi), %rdx
mulxq %rdx, %rax, %rcx
movq %rax, (%rbp)
adoxq %r9, %r9
adcxq %rcx, %r9
movq %r9, 8(%rbp)
movq 16(%rbp), %r8
movq 24(%rbp), %r9
# A[1] x A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rbp)
movq %r9, 24(%rbp)
movq 32(%rbp), %r8
movq 40(%rbp), %r9
# A[2] x A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 32(%rbp)
movq %r9, 40(%rbp)
movq 48(%rbp), %r8
# A[3] x A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r12, %r12
adcxq %rax, %r8
adcxq %rcx, %r12
movq %r8, 48(%rbp)
# A[4] x A[4]
movq 32(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r13, %r13
adoxq %r14, %r14
adcxq %rax, %r13
adcxq %rcx, %r14
# A[5] x A[5]
movq 40(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r15, %r15
adoxq %rbx, %rbx
adcxq %rax, %r15
adcxq %rcx, %rbx
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[6] x A[6]
movq 48(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[7] x A[7]
movq 56(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[8] x A[8]
movq 64(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[9] x A[9]
movq 72(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rdi), %r8
movq 72(%rdi), %r9
# A[10] x A[10]
movq 80(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 64(%rdi)
movq %r9, 72(%rdi)
movq 80(%rdi), %r8
movq 88(%rdi), %r9
# A[11] x A[11]
movq 88(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq %r12, -40(%rdi)
movq %r13, -32(%rdi)
movq %r14, -24(%rdi)
movq %r15, -16(%rdi)
movq %rbx, -8(%rdi)
subq $0x60, %rdi
cmpq %rdi, %rsi
jne L_end_3072_sqr_avx2_12
vmovdqu (%rbp), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbp), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbp), %xmm0
vmovups %xmm0, 32(%rdi)
movq 48(%rbp), %rax
movq %rax, 48(%rdi)
L_end_3072_sqr_avx2_12:
addq $0x60, %rsp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_3072_sqr_avx2_12,.-sp_3072_sqr_avx2_12
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sqr_24
.type sp_3072_sqr_24,@function
.align 16
sp_3072_sqr_24:
#else
.section __TEXT,__text
.globl _sp_3072_sqr_24
.p2align 4
_sp_3072_sqr_24:
#endif /* __APPLE__ */
subq $0xd0, %rsp
movq %rdi, 192(%rsp)
movq %rsi, 200(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 96(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq %rax, 88(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 88(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_12@plt
#else
callq _sp_3072_sqr_12
#endif /* __APPLE__ */
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
addq $0x60, %rsi
addq $0xc0, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_12@plt
#else
callq _sp_3072_sqr_12
#endif /* __APPLE__ */
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_sqr_12@plt
#else
callq _sp_3072_sqr_12
#endif /* __APPLE__ */
#ifdef _WIN64
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
#endif /* _WIN64 */
movq 192(%rsp), %rsi
leaq 96(%rsp), %r8
addq $0x120, %rsi
movq $0x00, %rcx
movq -96(%r8), %rax
subq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq %rdx, 88(%r8)
sbbq $0x00, %rcx
subq $0xc0, %rsi
movq -96(%r8), %rax
subq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq %rdx, 88(%r8)
sbbq $0x00, %rcx
movq 192(%rsp), %rdi
negq %rcx
addq $0xc0, %rdi
movq -96(%rdi), %rax
subq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq %rdx, 88(%rdi)
sbbq $0x00, %rcx
movq 192(%rsp), %rdi
addq $0x120, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq %rdx, 88(%rdi)
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
addq $0xd0, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_sqr_24,.-sp_3072_sqr_24
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sqr_avx2_24
.type sp_3072_sqr_avx2_24,@function
.align 16
sp_3072_sqr_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_sqr_avx2_24
.p2align 4
_sp_3072_sqr_avx2_24:
#endif /* __APPLE__ */
subq $0xd0, %rsp
movq %rdi, 192(%rsp)
movq %rsi, 200(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 96(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq %rax, 88(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 88(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_avx2_12@plt
#else
callq _sp_3072_sqr_avx2_12
#endif /* __APPLE__ */
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
addq $0x60, %rsi
addq $0xc0, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_avx2_12@plt
#else
callq _sp_3072_sqr_avx2_12
#endif /* __APPLE__ */
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_sqr_avx2_12@plt
#else
callq _sp_3072_sqr_avx2_12
#endif /* __APPLE__ */
#ifdef _WIN64
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
#endif /* _WIN64 */
movq 192(%rsp), %rsi
leaq 96(%rsp), %r8
addq $0x120, %rsi
movq $0x00, %rcx
movq -96(%r8), %rax
subq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq %rdx, 88(%r8)
sbbq $0x00, %rcx
subq $0xc0, %rsi
movq -96(%r8), %rax
subq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq %rdx, 88(%r8)
sbbq $0x00, %rcx
movq 192(%rsp), %rdi
negq %rcx
addq $0xc0, %rdi
movq -96(%rdi), %rax
subq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq %rdx, 88(%rdi)
sbbq $0x00, %rcx
movq 192(%rsp), %rdi
addq $0x120, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq %rdx, 88(%rdi)
movq 200(%rsp), %rsi
movq 192(%rsp), %rdi
addq $0xd0, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_sqr_avx2_24,.-sp_3072_sqr_avx2_24
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sqr_48
.type sp_3072_sqr_48,@function
.align 16
sp_3072_sqr_48:
#else
.section __TEXT,__text
.globl _sp_3072_sqr_48
.p2align 4
_sp_3072_sqr_48:
#endif /* __APPLE__ */
subq $0x190, %rsp
movq %rdi, 384(%rsp)
movq %rsi, 392(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 192(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq 96(%rsi), %rdx
movq %rax, 88(%r8)
sbbq 96(%r9), %rdx
movq 104(%rsi), %rax
movq %rdx, 96(%r8)
sbbq 104(%r9), %rax
movq 112(%rsi), %rdx
movq %rax, 104(%r8)
sbbq 112(%r9), %rdx
movq 120(%rsi), %rax
movq %rdx, 112(%r8)
sbbq 120(%r9), %rax
movq 128(%rsi), %rdx
movq %rax, 120(%r8)
sbbq 128(%r9), %rdx
movq 136(%rsi), %rax
movq %rdx, 128(%r8)
sbbq 136(%r9), %rax
movq 144(%rsi), %rdx
movq %rax, 136(%r8)
sbbq 144(%r9), %rdx
movq 152(%rsi), %rax
movq %rdx, 144(%r8)
sbbq 152(%r9), %rax
movq 160(%rsi), %rdx
movq %rax, 152(%r8)
sbbq 160(%r9), %rdx
movq 168(%rsi), %rax
movq %rdx, 160(%r8)
sbbq 168(%r9), %rax
movq 176(%rsi), %rdx
movq %rax, 168(%r8)
sbbq 176(%r9), %rdx
movq 184(%rsi), %rax
movq %rdx, 176(%r8)
sbbq 184(%r9), %rax
movq %rax, 184(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 96(%r8), %rdx
setc %r9b
movq %rax, 88(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 104(%r8), %rax
setc %r9b
movq %rdx, 96(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 112(%r8), %rdx
setc %r9b
movq %rax, 104(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 120(%r8), %rax
setc %r9b
movq %rdx, 112(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 128(%r8), %rdx
setc %r9b
movq %rax, 120(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 136(%r8), %rax
setc %r9b
movq %rdx, 128(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 144(%r8), %rdx
setc %r9b
movq %rax, 136(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 152(%r8), %rax
setc %r9b
movq %rdx, 144(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 160(%r8), %rdx
setc %r9b
movq %rax, 152(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 168(%r8), %rax
setc %r9b
movq %rdx, 160(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 176(%r8), %rdx
setc %r9b
movq %rax, 168(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 184(%r8), %rax
setc %r9b
movq %rdx, 176(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 184(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_24@plt
#else
callq _sp_3072_sqr_24
#endif /* __APPLE__ */
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
addq $0xc0, %rsi
addq $0x180, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_24@plt
#else
callq _sp_3072_sqr_24
#endif /* __APPLE__ */
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_sqr_24@plt
#else
callq _sp_3072_sqr_24
#endif /* __APPLE__ */
#ifdef _WIN64
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
#endif /* _WIN64 */
movq 384(%rsp), %rsi
leaq 192(%rsp), %r8
addq $0x240, %rsi
movq $0x00, %rcx
movq -192(%r8), %rax
subq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq %rdx, 184(%r8)
sbbq $0x00, %rcx
subq $0x180, %rsi
movq -192(%r8), %rax
subq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq %rdx, 184(%r8)
sbbq $0x00, %rcx
movq 384(%rsp), %rdi
negq %rcx
addq $0x180, %rdi
movq -192(%rdi), %rax
subq -192(%r8), %rax
movq -184(%rdi), %rdx
movq %rax, -192(%rdi)
sbbq -184(%r8), %rdx
movq -176(%rdi), %rax
movq %rdx, -184(%rdi)
sbbq -176(%r8), %rax
movq -168(%rdi), %rdx
movq %rax, -176(%rdi)
sbbq -168(%r8), %rdx
movq -160(%rdi), %rax
movq %rdx, -168(%rdi)
sbbq -160(%r8), %rax
movq -152(%rdi), %rdx
movq %rax, -160(%rdi)
sbbq -152(%r8), %rdx
movq -144(%rdi), %rax
movq %rdx, -152(%rdi)
sbbq -144(%r8), %rax
movq -136(%rdi), %rdx
movq %rax, -144(%rdi)
sbbq -136(%r8), %rdx
movq -128(%rdi), %rax
movq %rdx, -136(%rdi)
sbbq -128(%r8), %rax
movq -120(%rdi), %rdx
movq %rax, -128(%rdi)
sbbq -120(%r8), %rdx
movq -112(%rdi), %rax
movq %rdx, -120(%rdi)
sbbq -112(%r8), %rax
movq -104(%rdi), %rdx
movq %rax, -112(%rdi)
sbbq -104(%r8), %rdx
movq -96(%rdi), %rax
movq %rdx, -104(%rdi)
sbbq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
sbbq 96(%r8), %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
sbbq 104(%r8), %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
sbbq 112(%r8), %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
sbbq 120(%r8), %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
sbbq 128(%r8), %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
sbbq 136(%r8), %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
sbbq 144(%r8), %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
sbbq 152(%r8), %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
sbbq 160(%r8), %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
sbbq 168(%r8), %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
sbbq 176(%r8), %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
sbbq 184(%r8), %rdx
movq %rdx, 184(%rdi)
sbbq $0x00, %rcx
movq 384(%rsp), %rdi
addq $0x240, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
adcq $0x00, %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
adcq $0x00, %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
adcq $0x00, %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
adcq $0x00, %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
adcq $0x00, %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
adcq $0x00, %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
adcq $0x00, %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
adcq $0x00, %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
adcq $0x00, %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
adcq $0x00, %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
adcq $0x00, %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
adcq $0x00, %rdx
movq %rdx, 184(%rdi)
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
addq $0x190, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_sqr_48,.-sp_3072_sqr_48
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sqr_avx2_48
.type sp_3072_sqr_avx2_48,@function
.align 16
sp_3072_sqr_avx2_48:
#else
.section __TEXT,__text
.globl _sp_3072_sqr_avx2_48
.p2align 4
_sp_3072_sqr_avx2_48:
#endif /* __APPLE__ */
subq $0x190, %rsp
movq %rdi, 384(%rsp)
movq %rsi, 392(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 192(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq 96(%rsi), %rdx
movq %rax, 88(%r8)
sbbq 96(%r9), %rdx
movq 104(%rsi), %rax
movq %rdx, 96(%r8)
sbbq 104(%r9), %rax
movq 112(%rsi), %rdx
movq %rax, 104(%r8)
sbbq 112(%r9), %rdx
movq 120(%rsi), %rax
movq %rdx, 112(%r8)
sbbq 120(%r9), %rax
movq 128(%rsi), %rdx
movq %rax, 120(%r8)
sbbq 128(%r9), %rdx
movq 136(%rsi), %rax
movq %rdx, 128(%r8)
sbbq 136(%r9), %rax
movq 144(%rsi), %rdx
movq %rax, 136(%r8)
sbbq 144(%r9), %rdx
movq 152(%rsi), %rax
movq %rdx, 144(%r8)
sbbq 152(%r9), %rax
movq 160(%rsi), %rdx
movq %rax, 152(%r8)
sbbq 160(%r9), %rdx
movq 168(%rsi), %rax
movq %rdx, 160(%r8)
sbbq 168(%r9), %rax
movq 176(%rsi), %rdx
movq %rax, 168(%r8)
sbbq 176(%r9), %rdx
movq 184(%rsi), %rax
movq %rdx, 176(%r8)
sbbq 184(%r9), %rax
movq %rax, 184(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 96(%r8), %rdx
setc %r9b
movq %rax, 88(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 104(%r8), %rax
setc %r9b
movq %rdx, 96(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 112(%r8), %rdx
setc %r9b
movq %rax, 104(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 120(%r8), %rax
setc %r9b
movq %rdx, 112(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 128(%r8), %rdx
setc %r9b
movq %rax, 120(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 136(%r8), %rax
setc %r9b
movq %rdx, 128(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 144(%r8), %rdx
setc %r9b
movq %rax, 136(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 152(%r8), %rax
setc %r9b
movq %rdx, 144(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 160(%r8), %rdx
setc %r9b
movq %rax, 152(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 168(%r8), %rax
setc %r9b
movq %rdx, 160(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 176(%r8), %rdx
setc %r9b
movq %rax, 168(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 184(%r8), %rax
setc %r9b
movq %rdx, 176(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 184(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_avx2_24@plt
#else
callq _sp_3072_sqr_avx2_24
#endif /* __APPLE__ */
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
addq $0xc0, %rsi
addq $0x180, %rdi
#ifndef __APPLE__
callq sp_3072_sqr_avx2_24@plt
#else
callq _sp_3072_sqr_avx2_24
#endif /* __APPLE__ */
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
#ifndef __APPLE__
callq sp_3072_sqr_avx2_24@plt
#else
callq _sp_3072_sqr_avx2_24
#endif /* __APPLE__ */
#ifdef _WIN64
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
#endif /* _WIN64 */
movq 384(%rsp), %rsi
leaq 192(%rsp), %r8
addq $0x240, %rsi
movq $0x00, %rcx
movq -192(%r8), %rax
subq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq %rdx, 184(%r8)
sbbq $0x00, %rcx
subq $0x180, %rsi
movq -192(%r8), %rax
subq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq %rdx, 184(%r8)
sbbq $0x00, %rcx
movq 384(%rsp), %rdi
negq %rcx
addq $0x180, %rdi
movq -192(%rdi), %rax
subq -192(%r8), %rax
movq -184(%rdi), %rdx
movq %rax, -192(%rdi)
sbbq -184(%r8), %rdx
movq -176(%rdi), %rax
movq %rdx, -184(%rdi)
sbbq -176(%r8), %rax
movq -168(%rdi), %rdx
movq %rax, -176(%rdi)
sbbq -168(%r8), %rdx
movq -160(%rdi), %rax
movq %rdx, -168(%rdi)
sbbq -160(%r8), %rax
movq -152(%rdi), %rdx
movq %rax, -160(%rdi)
sbbq -152(%r8), %rdx
movq -144(%rdi), %rax
movq %rdx, -152(%rdi)
sbbq -144(%r8), %rax
movq -136(%rdi), %rdx
movq %rax, -144(%rdi)
sbbq -136(%r8), %rdx
movq -128(%rdi), %rax
movq %rdx, -136(%rdi)
sbbq -128(%r8), %rax
movq -120(%rdi), %rdx
movq %rax, -128(%rdi)
sbbq -120(%r8), %rdx
movq -112(%rdi), %rax
movq %rdx, -120(%rdi)
sbbq -112(%r8), %rax
movq -104(%rdi), %rdx
movq %rax, -112(%rdi)
sbbq -104(%r8), %rdx
movq -96(%rdi), %rax
movq %rdx, -104(%rdi)
sbbq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
sbbq 96(%r8), %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
sbbq 104(%r8), %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
sbbq 112(%r8), %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
sbbq 120(%r8), %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
sbbq 128(%r8), %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
sbbq 136(%r8), %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
sbbq 144(%r8), %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
sbbq 152(%r8), %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
sbbq 160(%r8), %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
sbbq 168(%r8), %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
sbbq 176(%r8), %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
sbbq 184(%r8), %rdx
movq %rdx, 184(%rdi)
sbbq $0x00, %rcx
movq 384(%rsp), %rdi
addq $0x240, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
adcq $0x00, %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
adcq $0x00, %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
adcq $0x00, %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
adcq $0x00, %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
adcq $0x00, %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
adcq $0x00, %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
adcq $0x00, %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
adcq $0x00, %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
adcq $0x00, %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
adcq $0x00, %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
adcq $0x00, %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
adcq $0x00, %rdx
movq %rdx, 184(%rdi)
movq 392(%rsp), %rsi
movq 384(%rsp), %rdi
addq $0x190, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_sqr_avx2_48,.-sp_3072_sqr_avx2_48
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_d_48
.type sp_3072_mul_d_48,@function
.align 16
sp_3072_mul_d_48:
#else
.section __TEXT,__text
.globl _sp_3072_mul_d_48
.p2align 4
_sp_3072_mul_d_48:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 64(%rsi)
addq %rax, %r10
movq %r10, 64(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 72(%rsi)
addq %rax, %r8
movq %r8, 72(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 80(%rsi)
addq %rax, %r9
movq %r9, 80(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 88(%rsi)
addq %rax, %r10
movq %r10, 88(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 96(%rsi)
addq %rax, %r8
movq %r8, 96(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 104(%rsi)
addq %rax, %r9
movq %r9, 104(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 112(%rsi)
addq %rax, %r10
movq %r10, 112(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 120(%rsi)
addq %rax, %r8
movq %r8, 120(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[16] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 128(%rsi)
addq %rax, %r9
movq %r9, 128(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[17] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 136(%rsi)
addq %rax, %r10
movq %r10, 136(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[18] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 144(%rsi)
addq %rax, %r8
movq %r8, 144(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[19] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 152(%rsi)
addq %rax, %r9
movq %r9, 152(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[20] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 160(%rsi)
addq %rax, %r10
movq %r10, 160(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[21] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 168(%rsi)
addq %rax, %r8
movq %r8, 168(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[22] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 176(%rsi)
addq %rax, %r9
movq %r9, 176(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[23] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 184(%rsi)
addq %rax, %r10
movq %r10, 184(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[24] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 192(%rsi)
addq %rax, %r8
movq %r8, 192(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[25] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 200(%rsi)
addq %rax, %r9
movq %r9, 200(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[26] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 208(%rsi)
addq %rax, %r10
movq %r10, 208(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[27] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 216(%rsi)
addq %rax, %r8
movq %r8, 216(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[28] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 224(%rsi)
addq %rax, %r9
movq %r9, 224(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[29] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 232(%rsi)
addq %rax, %r10
movq %r10, 232(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[30] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 240(%rsi)
addq %rax, %r8
movq %r8, 240(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[31] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 248(%rsi)
addq %rax, %r9
movq %r9, 248(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[32] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 256(%rsi)
addq %rax, %r10
movq %r10, 256(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[33] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 264(%rsi)
addq %rax, %r8
movq %r8, 264(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[34] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 272(%rsi)
addq %rax, %r9
movq %r9, 272(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[35] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 280(%rsi)
addq %rax, %r10
movq %r10, 280(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[36] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 288(%rsi)
addq %rax, %r8
movq %r8, 288(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[37] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 296(%rsi)
addq %rax, %r9
movq %r9, 296(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[38] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 304(%rsi)
addq %rax, %r10
movq %r10, 304(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[39] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 312(%rsi)
addq %rax, %r8
movq %r8, 312(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[40] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 320(%rsi)
addq %rax, %r9
movq %r9, 320(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[41] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 328(%rsi)
addq %rax, %r10
movq %r10, 328(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[42] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 336(%rsi)
addq %rax, %r8
movq %r8, 336(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[43] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 344(%rsi)
addq %rax, %r9
movq %r9, 344(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[44] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 352(%rsi)
addq %rax, %r10
movq %r10, 352(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[45] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 360(%rsi)
addq %rax, %r8
movq %r8, 360(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[46] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 368(%rsi)
addq %rax, %r9
movq %r9, 368(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[47] * B
movq %rcx, %rax
mulq 376(%rsi)
addq %rax, %r10
adcq %rdx, %r8
movq %r10, 376(%rdi)
movq %r8, 384(%rdi)
repz retq
#ifndef __APPLE__
.size sp_3072_mul_d_48,.-sp_3072_mul_d_48
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cond_sub_24
.type sp_3072_cond_sub_24,@function
.align 16
sp_3072_cond_sub_24:
#else
.section __TEXT,__text
.globl _sp_3072_cond_sub_24
.p2align 4
_sp_3072_cond_sub_24:
#endif /* __APPLE__ */
subq $0xc0, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq 128(%rdx), %r8
movq 136(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 128(%rsp)
movq %r9, 136(%rsp)
movq 144(%rdx), %r8
movq 152(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 144(%rsp)
movq %r9, 152(%rsp)
movq 160(%rdx), %r8
movq 168(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 160(%rsp)
movq %r9, 168(%rsp)
movq 176(%rdx), %r8
movq 184(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 176(%rsp)
movq %r9, 184(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 112(%rdi)
movq 128(%rsi), %r8
movq 128(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 120(%rdi)
movq 136(%rsi), %r9
movq 136(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 128(%rdi)
movq 144(%rsi), %r8
movq 144(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 136(%rdi)
movq 152(%rsi), %r9
movq 152(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 144(%rdi)
movq 160(%rsi), %r8
movq 160(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 152(%rdi)
movq 168(%rsi), %r9
movq 168(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 160(%rdi)
movq 176(%rsi), %r8
movq 176(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 168(%rdi)
movq 184(%rsi), %r9
movq 184(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 176(%rdi)
movq %r9, 184(%rdi)
sbbq %rax, %rax
addq $0xc0, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_cond_sub_24,.-sp_3072_cond_sub_24
#endif /* __APPLE__ */
/* Reduce the number back to 3072 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mont_reduce_24
.type sp_3072_mont_reduce_24,@function
.align 16
sp_3072_mont_reduce_24:
#else
.section __TEXT,__text
.globl _sp_3072_mont_reduce_24
.p2align 4
_sp_3072_mont_reduce_24:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 24
movq $24, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_3072_mont_reduce_24_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 64(%rdi)
adcq $0x00, %r10
# a[i+9] += m[9] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 72(%rsi)
movq 72(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 72(%rdi)
adcq $0x00, %r9
# a[i+10] += m[10] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 80(%rsi)
movq 80(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 80(%rdi)
adcq $0x00, %r10
# a[i+11] += m[11] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 88(%rsi)
movq 88(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 88(%rdi)
adcq $0x00, %r9
# a[i+12] += m[12] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 96(%rsi)
movq 96(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 96(%rdi)
adcq $0x00, %r10
# a[i+13] += m[13] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 104(%rsi)
movq 104(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 104(%rdi)
adcq $0x00, %r9
# a[i+14] += m[14] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 112(%rsi)
movq 112(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 112(%rdi)
adcq $0x00, %r10
# a[i+15] += m[15] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 120(%rsi)
movq 120(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 120(%rdi)
adcq $0x00, %r9
# a[i+16] += m[16] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 128(%rsi)
movq 128(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 128(%rdi)
adcq $0x00, %r10
# a[i+17] += m[17] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 136(%rsi)
movq 136(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 136(%rdi)
adcq $0x00, %r9
# a[i+18] += m[18] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 144(%rsi)
movq 144(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 144(%rdi)
adcq $0x00, %r10
# a[i+19] += m[19] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 152(%rsi)
movq 152(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 152(%rdi)
adcq $0x00, %r9
# a[i+20] += m[20] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 160(%rsi)
movq 160(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 160(%rdi)
adcq $0x00, %r10
# a[i+21] += m[21] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 168(%rsi)
movq 168(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 168(%rdi)
adcq $0x00, %r9
# a[i+22] += m[22] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 176(%rsi)
movq 176(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 176(%rdi)
adcq $0x00, %r10
# a[i+23] += m[23] * mu
movq %r11, %rax
mulq 184(%rsi)
movq 184(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 184(%rdi)
adcq %rdx, 192(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_3072_mont_reduce_24_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $0xc0, %rdi
#ifndef __APPLE__
callq sp_3072_cond_sub_24@plt
#else
callq _sp_3072_cond_sub_24
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mont_reduce_24,.-sp_3072_mont_reduce_24
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cond_sub_avx2_24
.type sp_3072_cond_sub_avx2_24,@function
.align 16
sp_3072_cond_sub_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_cond_sub_avx2_24
.p2align 4
_sp_3072_cond_sub_avx2_24:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
sbbq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
sbbq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
sbbq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
sbbq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
sbbq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
sbbq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
sbbq %r9, %r8
movq 128(%rdx), %r10
movq 128(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 120(%rdi)
sbbq %r10, %r9
movq 136(%rdx), %r8
movq 136(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 128(%rdi)
sbbq %r8, %r10
movq 144(%rdx), %r9
movq 144(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 136(%rdi)
sbbq %r9, %r8
movq 152(%rdx), %r10
movq 152(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 144(%rdi)
sbbq %r10, %r9
movq 160(%rdx), %r8
movq 160(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 152(%rdi)
sbbq %r8, %r10
movq 168(%rdx), %r9
movq 168(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 160(%rdi)
sbbq %r9, %r8
movq 176(%rdx), %r10
movq 176(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 168(%rdi)
sbbq %r10, %r9
movq 184(%rdx), %r8
movq 184(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 176(%rdi)
sbbq %r8, %r10
movq %r10, 184(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_cond_sub_avx2_24,.-sp_3072_cond_sub_avx2_24
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_d_24
.type sp_3072_mul_d_24,@function
.align 16
sp_3072_mul_d_24:
#else
.section __TEXT,__text
.globl _sp_3072_mul_d_24
.p2align 4
_sp_3072_mul_d_24:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 64(%rsi)
addq %rax, %r10
movq %r10, 64(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 72(%rsi)
addq %rax, %r8
movq %r8, 72(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 80(%rsi)
addq %rax, %r9
movq %r9, 80(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 88(%rsi)
addq %rax, %r10
movq %r10, 88(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 96(%rsi)
addq %rax, %r8
movq %r8, 96(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 104(%rsi)
addq %rax, %r9
movq %r9, 104(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 112(%rsi)
addq %rax, %r10
movq %r10, 112(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 120(%rsi)
addq %rax, %r8
movq %r8, 120(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[16] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 128(%rsi)
addq %rax, %r9
movq %r9, 128(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[17] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 136(%rsi)
addq %rax, %r10
movq %r10, 136(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[18] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 144(%rsi)
addq %rax, %r8
movq %r8, 144(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[19] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 152(%rsi)
addq %rax, %r9
movq %r9, 152(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[20] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 160(%rsi)
addq %rax, %r10
movq %r10, 160(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[21] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 168(%rsi)
addq %rax, %r8
movq %r8, 168(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[22] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 176(%rsi)
addq %rax, %r9
movq %r9, 176(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[23] * B
movq %rcx, %rax
mulq 184(%rsi)
addq %rax, %r10
adcq %rdx, %r8
movq %r10, 184(%rdi)
movq %r8, 192(%rdi)
repz retq
#ifndef __APPLE__
.size sp_3072_mul_d_24,.-sp_3072_mul_d_24
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_d_avx2_24
.type sp_3072_mul_d_avx2_24,@function
.align 16
sp_3072_mul_d_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_mul_d_avx2_24
.p2align 4
_sp_3072_mul_d_avx2_24:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# A[9] * B
mulxq 72(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
# A[10] * B
mulxq 80(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 80(%rdi)
# A[11] * B
mulxq 88(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 88(%rdi)
# A[12] * B
mulxq 96(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 96(%rdi)
# A[13] * B
mulxq 104(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 104(%rdi)
# A[14] * B
mulxq 112(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 112(%rdi)
# A[15] * B
mulxq 120(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 120(%rdi)
# A[16] * B
mulxq 128(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 128(%rdi)
# A[17] * B
mulxq 136(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 136(%rdi)
# A[18] * B
mulxq 144(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 144(%rdi)
# A[19] * B
mulxq 152(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 152(%rdi)
# A[20] * B
mulxq 160(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 160(%rdi)
# A[21] * B
mulxq 168(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 168(%rdi)
# A[22] * B
mulxq 176(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 176(%rdi)
# A[23] * B
mulxq 184(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 184(%rdi)
movq %r9, 192(%rdi)
repz retq
#ifndef __APPLE__
.size sp_3072_mul_d_avx2_24,.-sp_3072_mul_d_avx2_24
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_3072_word_asm_24
.type div_3072_word_asm_24,@function
.align 16
div_3072_word_asm_24:
#else
.section __TEXT,__text
.globl _div_3072_word_asm_24
.p2align 4
_div_3072_word_asm_24:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_3072_word_asm_24,.-div_3072_word_asm_24
#endif /* __APPLE__ */
#endif /* _WIN64 */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cmp_24
.type sp_3072_cmp_24,@function
.align 16
sp_3072_cmp_24:
#else
.section __TEXT,__text
.globl _sp_3072_cmp_24
.p2align 4
_sp_3072_cmp_24:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 184(%rdi), %r9
movq 184(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 176(%rdi), %r9
movq 176(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 168(%rdi), %r9
movq 168(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 160(%rdi), %r9
movq 160(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 152(%rdi), %r9
movq 152(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 144(%rdi), %r9
movq 144(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 136(%rdi), %r9
movq 136(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 128(%rdi), %r9
movq 128(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 120(%rdi), %r9
movq 120(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 112(%rdi), %r9
movq 112(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 104(%rdi), %r9
movq 104(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 96(%rdi), %r9
movq 96(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 88(%rdi), %r9
movq 88(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 80(%rdi), %r9
movq 80(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 72(%rdi), %r9
movq 72(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_cmp_24,.-sp_3072_cmp_24
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_3072_get_from_table_24
.type sp_3072_get_from_table_24,@function
.align 16
sp_3072_get_from_table_24:
#else
.section __TEXT,__text
.globl _sp_3072_get_from_table_24
.p2align 4
_sp_3072_get_from_table_24:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
pxor %xmm13, %xmm13
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm10, %xmm10
# START: 0-7
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 0-7
# START: 8-15
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 8-15
# START: 16-23
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
# END: 16-23
repz retq
#ifndef __APPLE__
.size sp_3072_get_from_table_24,.-sp_3072_get_from_table_24
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 3072 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mont_reduce_avx2_24
.type sp_3072_mont_reduce_avx2_24,@function
.align 16
sp_3072_mont_reduce_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_mont_reduce_avx2_24
.p2align 4
_sp_3072_mont_reduce_avx2_24:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 24
movq $24, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $0x60, %rdi
xorq %rbp, %rbp
L_3072_mont_reduce_avx2_24_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -64(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -56(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -56(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq -40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -48(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq -32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -40(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq -24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -32(%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq -16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -24(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq -8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -16(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq (%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -8(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, (%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+16] += m[16] * mu
mulxq 128(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+17] += m[17] * mu
mulxq 136(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
# a[i+18] += m[18] * mu
mulxq 144(%rsi), %rax, %rcx
movq 56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
# a[i+19] += m[19] * mu
mulxq 152(%rsi), %rax, %rcx
movq 64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 56(%rdi)
# a[i+20] += m[20] * mu
mulxq 160(%rsi), %rax, %rcx
movq 72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 64(%rdi)
# a[i+21] += m[21] * mu
mulxq 168(%rsi), %rax, %rcx
movq 80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 72(%rdi)
# a[i+22] += m[22] * mu
mulxq 176(%rsi), %rax, %rcx
movq 88(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 80(%rdi)
# a[i+23] += m[23] * mu
mulxq 184(%rsi), %rax, %rcx
movq 96(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 88(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 96(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 1
addq $8, %rdi
# i -= 1
subq $0x01, %r9
jnz L_3072_mont_reduce_avx2_24_loop
subq $0x60, %rdi
negq %rbp
movq %rdi, %r8
subq $0xc0, %rdi
movq (%rsi), %rcx
movq %r12, %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq %r13, %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq %r14, %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq %r15, %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq 72(%rsi), %rax
movq 72(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 64(%rdi)
sbbq %rax, %rdx
movq 80(%rsi), %rcx
movq 80(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 72(%rdi)
sbbq %rcx, %rax
movq 88(%rsi), %rdx
movq 88(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 80(%rdi)
sbbq %rdx, %rcx
movq 96(%rsi), %rax
movq 96(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 88(%rdi)
sbbq %rax, %rdx
movq 104(%rsi), %rcx
movq 104(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 96(%rdi)
sbbq %rcx, %rax
movq 112(%rsi), %rdx
movq 112(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 104(%rdi)
sbbq %rdx, %rcx
movq 120(%rsi), %rax
movq 120(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 112(%rdi)
sbbq %rax, %rdx
movq 128(%rsi), %rcx
movq 128(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 120(%rdi)
sbbq %rcx, %rax
movq 136(%rsi), %rdx
movq 136(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 128(%rdi)
sbbq %rdx, %rcx
movq 144(%rsi), %rax
movq 144(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 136(%rdi)
sbbq %rax, %rdx
movq 152(%rsi), %rcx
movq 152(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 144(%rdi)
sbbq %rcx, %rax
movq 160(%rsi), %rdx
movq 160(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 152(%rdi)
sbbq %rdx, %rcx
movq 168(%rsi), %rax
movq 168(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 160(%rdi)
sbbq %rax, %rdx
movq 176(%rsi), %rcx
movq 176(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 168(%rdi)
sbbq %rcx, %rax
movq 184(%rsi), %rdx
movq 184(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 176(%rdi)
sbbq %rdx, %rcx
movq %rcx, 184(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mont_reduce_avx2_24,.-sp_3072_mont_reduce_avx2_24
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_3072_get_from_table_avx2_24
.type sp_3072_get_from_table_avx2_24,@function
.align 16
sp_3072_get_from_table_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_get_from_table_avx2_24
.p2align 4
_sp_3072_get_from_table_avx2_24:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
vpxor %ymm13, %ymm13, %ymm13
vpermd %ymm10, %ymm13, %ymm10
vpermd %ymm11, %ymm13, %ymm11
# START: 0-15
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 16
movq 128(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 17
movq 136(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 18
movq 144(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 19
movq 152(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 20
movq 160(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 21
movq 168(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 22
movq 176(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 23
movq 184(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 24
movq 192(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 25
movq 200(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 26
movq 208(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 27
movq 216(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 28
movq 224(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 29
movq 232(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 30
movq 240(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 31
movq 248(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 0-15
# START: 16-23
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 16
movq 128(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 17
movq 136(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 18
movq 144(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 19
movq 152(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 20
movq 160(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 21
movq 168(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 22
movq 176(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 23
movq 184(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 24
movq 192(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 25
movq 200(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 26
movq 208(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 27
movq 216(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 28
movq 224(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 29
movq 232(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 30
movq 240(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 31
movq 248(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
# END: 16-23
repz retq
#ifndef __APPLE__
.size sp_3072_get_from_table_avx2_24,.-sp_3072_get_from_table_avx2_24
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cond_sub_48
.type sp_3072_cond_sub_48,@function
.align 16
sp_3072_cond_sub_48:
#else
.section __TEXT,__text
.globl _sp_3072_cond_sub_48
.p2align 4
_sp_3072_cond_sub_48:
#endif /* __APPLE__ */
subq $0x180, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq 128(%rdx), %r8
movq 136(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 128(%rsp)
movq %r9, 136(%rsp)
movq 144(%rdx), %r8
movq 152(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 144(%rsp)
movq %r9, 152(%rsp)
movq 160(%rdx), %r8
movq 168(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 160(%rsp)
movq %r9, 168(%rsp)
movq 176(%rdx), %r8
movq 184(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 176(%rsp)
movq %r9, 184(%rsp)
movq 192(%rdx), %r8
movq 200(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 192(%rsp)
movq %r9, 200(%rsp)
movq 208(%rdx), %r8
movq 216(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 208(%rsp)
movq %r9, 216(%rsp)
movq 224(%rdx), %r8
movq 232(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 224(%rsp)
movq %r9, 232(%rsp)
movq 240(%rdx), %r8
movq 248(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 240(%rsp)
movq %r9, 248(%rsp)
movq 256(%rdx), %r8
movq 264(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 256(%rsp)
movq %r9, 264(%rsp)
movq 272(%rdx), %r8
movq 280(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 272(%rsp)
movq %r9, 280(%rsp)
movq 288(%rdx), %r8
movq 296(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 288(%rsp)
movq %r9, 296(%rsp)
movq 304(%rdx), %r8
movq 312(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 304(%rsp)
movq %r9, 312(%rsp)
movq 320(%rdx), %r8
movq 328(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 320(%rsp)
movq %r9, 328(%rsp)
movq 336(%rdx), %r8
movq 344(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 336(%rsp)
movq %r9, 344(%rsp)
movq 352(%rdx), %r8
movq 360(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 352(%rsp)
movq %r9, 360(%rsp)
movq 368(%rdx), %r8
movq 376(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 368(%rsp)
movq %r9, 376(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 112(%rdi)
movq 128(%rsi), %r8
movq 128(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 120(%rdi)
movq 136(%rsi), %r9
movq 136(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 128(%rdi)
movq 144(%rsi), %r8
movq 144(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 136(%rdi)
movq 152(%rsi), %r9
movq 152(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 144(%rdi)
movq 160(%rsi), %r8
movq 160(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 152(%rdi)
movq 168(%rsi), %r9
movq 168(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 160(%rdi)
movq 176(%rsi), %r8
movq 176(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 168(%rdi)
movq 184(%rsi), %r9
movq 184(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 176(%rdi)
movq 192(%rsi), %r8
movq 192(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 184(%rdi)
movq 200(%rsi), %r9
movq 200(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 192(%rdi)
movq 208(%rsi), %r8
movq 208(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 200(%rdi)
movq 216(%rsi), %r9
movq 216(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 208(%rdi)
movq 224(%rsi), %r8
movq 224(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 216(%rdi)
movq 232(%rsi), %r9
movq 232(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 224(%rdi)
movq 240(%rsi), %r8
movq 240(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 232(%rdi)
movq 248(%rsi), %r9
movq 248(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 240(%rdi)
movq 256(%rsi), %r8
movq 256(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 248(%rdi)
movq 264(%rsi), %r9
movq 264(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 256(%rdi)
movq 272(%rsi), %r8
movq 272(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 264(%rdi)
movq 280(%rsi), %r9
movq 280(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 272(%rdi)
movq 288(%rsi), %r8
movq 288(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 280(%rdi)
movq 296(%rsi), %r9
movq 296(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 288(%rdi)
movq 304(%rsi), %r8
movq 304(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 296(%rdi)
movq 312(%rsi), %r9
movq 312(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 304(%rdi)
movq 320(%rsi), %r8
movq 320(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 312(%rdi)
movq 328(%rsi), %r9
movq 328(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 320(%rdi)
movq 336(%rsi), %r8
movq 336(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 328(%rdi)
movq 344(%rsi), %r9
movq 344(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 336(%rdi)
movq 352(%rsi), %r8
movq 352(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 344(%rdi)
movq 360(%rsi), %r9
movq 360(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 352(%rdi)
movq 368(%rsi), %r8
movq 368(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 360(%rdi)
movq 376(%rsi), %r9
movq 376(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 368(%rdi)
movq %r9, 376(%rdi)
sbbq %rax, %rax
addq $0x180, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_cond_sub_48,.-sp_3072_cond_sub_48
#endif /* __APPLE__ */
/* Reduce the number back to 3072 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mont_reduce_48
.type sp_3072_mont_reduce_48,@function
.align 16
sp_3072_mont_reduce_48:
#else
.section __TEXT,__text
.globl _sp_3072_mont_reduce_48
.p2align 4
_sp_3072_mont_reduce_48:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 48
movq $48, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_3072_mont_reduce_48_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 64(%rdi)
adcq $0x00, %r10
# a[i+9] += m[9] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 72(%rsi)
movq 72(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 72(%rdi)
adcq $0x00, %r9
# a[i+10] += m[10] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 80(%rsi)
movq 80(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 80(%rdi)
adcq $0x00, %r10
# a[i+11] += m[11] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 88(%rsi)
movq 88(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 88(%rdi)
adcq $0x00, %r9
# a[i+12] += m[12] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 96(%rsi)
movq 96(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 96(%rdi)
adcq $0x00, %r10
# a[i+13] += m[13] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 104(%rsi)
movq 104(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 104(%rdi)
adcq $0x00, %r9
# a[i+14] += m[14] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 112(%rsi)
movq 112(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 112(%rdi)
adcq $0x00, %r10
# a[i+15] += m[15] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 120(%rsi)
movq 120(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 120(%rdi)
adcq $0x00, %r9
# a[i+16] += m[16] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 128(%rsi)
movq 128(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 128(%rdi)
adcq $0x00, %r10
# a[i+17] += m[17] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 136(%rsi)
movq 136(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 136(%rdi)
adcq $0x00, %r9
# a[i+18] += m[18] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 144(%rsi)
movq 144(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 144(%rdi)
adcq $0x00, %r10
# a[i+19] += m[19] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 152(%rsi)
movq 152(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 152(%rdi)
adcq $0x00, %r9
# a[i+20] += m[20] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 160(%rsi)
movq 160(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 160(%rdi)
adcq $0x00, %r10
# a[i+21] += m[21] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 168(%rsi)
movq 168(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 168(%rdi)
adcq $0x00, %r9
# a[i+22] += m[22] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 176(%rsi)
movq 176(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 176(%rdi)
adcq $0x00, %r10
# a[i+23] += m[23] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 184(%rsi)
movq 184(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 184(%rdi)
adcq $0x00, %r9
# a[i+24] += m[24] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 192(%rsi)
movq 192(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 192(%rdi)
adcq $0x00, %r10
# a[i+25] += m[25] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 200(%rsi)
movq 200(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 200(%rdi)
adcq $0x00, %r9
# a[i+26] += m[26] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 208(%rsi)
movq 208(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 208(%rdi)
adcq $0x00, %r10
# a[i+27] += m[27] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 216(%rsi)
movq 216(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 216(%rdi)
adcq $0x00, %r9
# a[i+28] += m[28] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 224(%rsi)
movq 224(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 224(%rdi)
adcq $0x00, %r10
# a[i+29] += m[29] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 232(%rsi)
movq 232(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 232(%rdi)
adcq $0x00, %r9
# a[i+30] += m[30] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 240(%rsi)
movq 240(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 240(%rdi)
adcq $0x00, %r10
# a[i+31] += m[31] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 248(%rsi)
movq 248(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 248(%rdi)
adcq $0x00, %r9
# a[i+32] += m[32] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 256(%rsi)
movq 256(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 256(%rdi)
adcq $0x00, %r10
# a[i+33] += m[33] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 264(%rsi)
movq 264(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 264(%rdi)
adcq $0x00, %r9
# a[i+34] += m[34] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 272(%rsi)
movq 272(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 272(%rdi)
adcq $0x00, %r10
# a[i+35] += m[35] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 280(%rsi)
movq 280(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 280(%rdi)
adcq $0x00, %r9
# a[i+36] += m[36] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 288(%rsi)
movq 288(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 288(%rdi)
adcq $0x00, %r10
# a[i+37] += m[37] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 296(%rsi)
movq 296(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 296(%rdi)
adcq $0x00, %r9
# a[i+38] += m[38] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 304(%rsi)
movq 304(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 304(%rdi)
adcq $0x00, %r10
# a[i+39] += m[39] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 312(%rsi)
movq 312(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 312(%rdi)
adcq $0x00, %r9
# a[i+40] += m[40] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 320(%rsi)
movq 320(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 320(%rdi)
adcq $0x00, %r10
# a[i+41] += m[41] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 328(%rsi)
movq 328(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 328(%rdi)
adcq $0x00, %r9
# a[i+42] += m[42] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 336(%rsi)
movq 336(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 336(%rdi)
adcq $0x00, %r10
# a[i+43] += m[43] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 344(%rsi)
movq 344(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 344(%rdi)
adcq $0x00, %r9
# a[i+44] += m[44] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 352(%rsi)
movq 352(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 352(%rdi)
adcq $0x00, %r10
# a[i+45] += m[45] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 360(%rsi)
movq 360(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 360(%rdi)
adcq $0x00, %r9
# a[i+46] += m[46] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 368(%rsi)
movq 368(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 368(%rdi)
adcq $0x00, %r10
# a[i+47] += m[47] * mu
movq %r11, %rax
mulq 376(%rsi)
movq 376(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 376(%rdi)
adcq %rdx, 384(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_3072_mont_reduce_48_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $0x180, %rdi
#ifndef __APPLE__
callq sp_3072_cond_sub_48@plt
#else
callq _sp_3072_cond_sub_48
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mont_reduce_48,.-sp_3072_mont_reduce_48
#endif /* __APPLE__ */
/* Sub b from a into r. (r = a - b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_3072_sub_48
.type sp_3072_sub_48,@function
.align 16
sp_3072_sub_48:
#else
.section __TEXT,__text
.globl _sp_3072_sub_48
.p2align 4
_sp_3072_sub_48:
#endif /* __APPLE__ */
movq (%rsi), %rcx
subq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
sbbq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
sbbq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
sbbq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
sbbq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
sbbq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
sbbq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
sbbq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
sbbq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
sbbq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
sbbq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
sbbq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
sbbq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
sbbq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
sbbq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
sbbq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
sbbq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
sbbq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
sbbq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
sbbq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
sbbq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
sbbq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
sbbq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
sbbq 184(%rdx), %r8
movq 192(%rsi), %rcx
movq %r8, 184(%rdi)
sbbq 192(%rdx), %rcx
movq 200(%rsi), %r8
movq %rcx, 192(%rdi)
sbbq 200(%rdx), %r8
movq 208(%rsi), %rcx
movq %r8, 200(%rdi)
sbbq 208(%rdx), %rcx
movq 216(%rsi), %r8
movq %rcx, 208(%rdi)
sbbq 216(%rdx), %r8
movq 224(%rsi), %rcx
movq %r8, 216(%rdi)
sbbq 224(%rdx), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%rdi)
sbbq 232(%rdx), %r8
movq 240(%rsi), %rcx
movq %r8, 232(%rdi)
sbbq 240(%rdx), %rcx
movq 248(%rsi), %r8
movq %rcx, 240(%rdi)
sbbq 248(%rdx), %r8
movq 256(%rsi), %rcx
movq %r8, 248(%rdi)
sbbq 256(%rdx), %rcx
movq 264(%rsi), %r8
movq %rcx, 256(%rdi)
sbbq 264(%rdx), %r8
movq 272(%rsi), %rcx
movq %r8, 264(%rdi)
sbbq 272(%rdx), %rcx
movq 280(%rsi), %r8
movq %rcx, 272(%rdi)
sbbq 280(%rdx), %r8
movq 288(%rsi), %rcx
movq %r8, 280(%rdi)
sbbq 288(%rdx), %rcx
movq 296(%rsi), %r8
movq %rcx, 288(%rdi)
sbbq 296(%rdx), %r8
movq 304(%rsi), %rcx
movq %r8, 296(%rdi)
sbbq 304(%rdx), %rcx
movq 312(%rsi), %r8
movq %rcx, 304(%rdi)
sbbq 312(%rdx), %r8
movq 320(%rsi), %rcx
movq %r8, 312(%rdi)
sbbq 320(%rdx), %rcx
movq 328(%rsi), %r8
movq %rcx, 320(%rdi)
sbbq 328(%rdx), %r8
movq 336(%rsi), %rcx
movq %r8, 328(%rdi)
sbbq 336(%rdx), %rcx
movq 344(%rsi), %r8
movq %rcx, 336(%rdi)
sbbq 344(%rdx), %r8
movq 352(%rsi), %rcx
movq %r8, 344(%rdi)
sbbq 352(%rdx), %rcx
movq 360(%rsi), %r8
movq %rcx, 352(%rdi)
sbbq 360(%rdx), %r8
movq 368(%rsi), %rcx
movq %r8, 360(%rdi)
sbbq 368(%rdx), %rcx
movq 376(%rsi), %r8
movq %rcx, 368(%rdi)
sbbq 376(%rdx), %r8
movq %r8, 376(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_sub_48,.-sp_3072_sub_48
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mul_d_avx2_48
.type sp_3072_mul_d_avx2_48,@function
.align 16
sp_3072_mul_d_avx2_48:
#else
.section __TEXT,__text
.globl _sp_3072_mul_d_avx2_48
.p2align 4
_sp_3072_mul_d_avx2_48:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# A[9] * B
mulxq 72(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
# A[10] * B
mulxq 80(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 80(%rdi)
# A[11] * B
mulxq 88(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 88(%rdi)
# A[12] * B
mulxq 96(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 96(%rdi)
# A[13] * B
mulxq 104(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 104(%rdi)
# A[14] * B
mulxq 112(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 112(%rdi)
# A[15] * B
mulxq 120(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 120(%rdi)
# A[16] * B
mulxq 128(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 128(%rdi)
# A[17] * B
mulxq 136(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 136(%rdi)
# A[18] * B
mulxq 144(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 144(%rdi)
# A[19] * B
mulxq 152(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 152(%rdi)
# A[20] * B
mulxq 160(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 160(%rdi)
# A[21] * B
mulxq 168(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 168(%rdi)
# A[22] * B
mulxq 176(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 176(%rdi)
# A[23] * B
mulxq 184(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 184(%rdi)
# A[24] * B
mulxq 192(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 192(%rdi)
# A[25] * B
mulxq 200(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 200(%rdi)
# A[26] * B
mulxq 208(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 208(%rdi)
# A[27] * B
mulxq 216(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 216(%rdi)
# A[28] * B
mulxq 224(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 224(%rdi)
# A[29] * B
mulxq 232(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 232(%rdi)
# A[30] * B
mulxq 240(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 240(%rdi)
# A[31] * B
mulxq 248(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 248(%rdi)
# A[32] * B
mulxq 256(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 256(%rdi)
# A[33] * B
mulxq 264(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 264(%rdi)
# A[34] * B
mulxq 272(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 272(%rdi)
# A[35] * B
mulxq 280(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 280(%rdi)
# A[36] * B
mulxq 288(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 288(%rdi)
# A[37] * B
mulxq 296(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 296(%rdi)
# A[38] * B
mulxq 304(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 304(%rdi)
# A[39] * B
mulxq 312(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 312(%rdi)
# A[40] * B
mulxq 320(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 320(%rdi)
# A[41] * B
mulxq 328(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 328(%rdi)
# A[42] * B
mulxq 336(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 336(%rdi)
# A[43] * B
mulxq 344(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 344(%rdi)
# A[44] * B
mulxq 352(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 352(%rdi)
# A[45] * B
mulxq 360(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 360(%rdi)
# A[46] * B
mulxq 368(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 368(%rdi)
# A[47] * B
mulxq 376(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 376(%rdi)
movq %r9, 384(%rdi)
repz retq
#ifndef __APPLE__
.size sp_3072_mul_d_avx2_48,.-sp_3072_mul_d_avx2_48
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_3072_word_asm_48
.type div_3072_word_asm_48,@function
.align 16
div_3072_word_asm_48:
#else
.section __TEXT,__text
.globl _div_3072_word_asm_48
.p2align 4
_div_3072_word_asm_48:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_3072_word_asm_48,.-div_3072_word_asm_48
#endif /* __APPLE__ */
#endif /* _WIN64 */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cond_sub_avx2_48
.type sp_3072_cond_sub_avx2_48,@function
.align 16
sp_3072_cond_sub_avx2_48:
#else
.section __TEXT,__text
.globl _sp_3072_cond_sub_avx2_48
.p2align 4
_sp_3072_cond_sub_avx2_48:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
sbbq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
sbbq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
sbbq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
sbbq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
sbbq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
sbbq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
sbbq %r9, %r8
movq 128(%rdx), %r10
movq 128(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 120(%rdi)
sbbq %r10, %r9
movq 136(%rdx), %r8
movq 136(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 128(%rdi)
sbbq %r8, %r10
movq 144(%rdx), %r9
movq 144(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 136(%rdi)
sbbq %r9, %r8
movq 152(%rdx), %r10
movq 152(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 144(%rdi)
sbbq %r10, %r9
movq 160(%rdx), %r8
movq 160(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 152(%rdi)
sbbq %r8, %r10
movq 168(%rdx), %r9
movq 168(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 160(%rdi)
sbbq %r9, %r8
movq 176(%rdx), %r10
movq 176(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 168(%rdi)
sbbq %r10, %r9
movq 184(%rdx), %r8
movq 184(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 176(%rdi)
sbbq %r8, %r10
movq 192(%rdx), %r9
movq 192(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 184(%rdi)
sbbq %r9, %r8
movq 200(%rdx), %r10
movq 200(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 192(%rdi)
sbbq %r10, %r9
movq 208(%rdx), %r8
movq 208(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 200(%rdi)
sbbq %r8, %r10
movq 216(%rdx), %r9
movq 216(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 208(%rdi)
sbbq %r9, %r8
movq 224(%rdx), %r10
movq 224(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 216(%rdi)
sbbq %r10, %r9
movq 232(%rdx), %r8
movq 232(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 224(%rdi)
sbbq %r8, %r10
movq 240(%rdx), %r9
movq 240(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 232(%rdi)
sbbq %r9, %r8
movq 248(%rdx), %r10
movq 248(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 240(%rdi)
sbbq %r10, %r9
movq 256(%rdx), %r8
movq 256(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 248(%rdi)
sbbq %r8, %r10
movq 264(%rdx), %r9
movq 264(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 256(%rdi)
sbbq %r9, %r8
movq 272(%rdx), %r10
movq 272(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 264(%rdi)
sbbq %r10, %r9
movq 280(%rdx), %r8
movq 280(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 272(%rdi)
sbbq %r8, %r10
movq 288(%rdx), %r9
movq 288(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 280(%rdi)
sbbq %r9, %r8
movq 296(%rdx), %r10
movq 296(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 288(%rdi)
sbbq %r10, %r9
movq 304(%rdx), %r8
movq 304(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 296(%rdi)
sbbq %r8, %r10
movq 312(%rdx), %r9
movq 312(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 304(%rdi)
sbbq %r9, %r8
movq 320(%rdx), %r10
movq 320(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 312(%rdi)
sbbq %r10, %r9
movq 328(%rdx), %r8
movq 328(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 320(%rdi)
sbbq %r8, %r10
movq 336(%rdx), %r9
movq 336(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 328(%rdi)
sbbq %r9, %r8
movq 344(%rdx), %r10
movq 344(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 336(%rdi)
sbbq %r10, %r9
movq 352(%rdx), %r8
movq 352(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 344(%rdi)
sbbq %r8, %r10
movq 360(%rdx), %r9
movq 360(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 352(%rdi)
sbbq %r9, %r8
movq 368(%rdx), %r10
movq 368(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 360(%rdi)
sbbq %r10, %r9
movq 376(%rdx), %r8
movq 376(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 368(%rdi)
sbbq %r8, %r10
movq %r10, 376(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_cond_sub_avx2_48,.-sp_3072_cond_sub_avx2_48
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cmp_48
.type sp_3072_cmp_48,@function
.align 16
sp_3072_cmp_48:
#else
.section __TEXT,__text
.globl _sp_3072_cmp_48
.p2align 4
_sp_3072_cmp_48:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 376(%rdi), %r9
movq 376(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 368(%rdi), %r9
movq 368(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 360(%rdi), %r9
movq 360(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 352(%rdi), %r9
movq 352(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 344(%rdi), %r9
movq 344(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 336(%rdi), %r9
movq 336(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 328(%rdi), %r9
movq 328(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 320(%rdi), %r9
movq 320(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 312(%rdi), %r9
movq 312(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 304(%rdi), %r9
movq 304(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 296(%rdi), %r9
movq 296(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 288(%rdi), %r9
movq 288(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 280(%rdi), %r9
movq 280(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 272(%rdi), %r9
movq 272(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 264(%rdi), %r9
movq 264(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 256(%rdi), %r9
movq 256(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 248(%rdi), %r9
movq 248(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 240(%rdi), %r9
movq 240(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 232(%rdi), %r9
movq 232(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 224(%rdi), %r9
movq 224(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 216(%rdi), %r9
movq 216(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 208(%rdi), %r9
movq 208(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 200(%rdi), %r9
movq 200(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 192(%rdi), %r9
movq 192(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 184(%rdi), %r9
movq 184(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 176(%rdi), %r9
movq 176(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 168(%rdi), %r9
movq 168(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 160(%rdi), %r9
movq 160(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 152(%rdi), %r9
movq 152(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 144(%rdi), %r9
movq 144(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 136(%rdi), %r9
movq 136(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 128(%rdi), %r9
movq 128(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 120(%rdi), %r9
movq 120(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 112(%rdi), %r9
movq 112(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 104(%rdi), %r9
movq 104(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 96(%rdi), %r9
movq 96(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 88(%rdi), %r9
movq 88(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 80(%rdi), %r9
movq 80(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 72(%rdi), %r9
movq 72(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_cmp_48,.-sp_3072_cmp_48
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_3072_get_from_table_48
.type sp_3072_get_from_table_48,@function
.align 16
sp_3072_get_from_table_48:
#else
.section __TEXT,__text
.globl _sp_3072_get_from_table_48
.p2align 4
_sp_3072_get_from_table_48:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
pxor %xmm13, %xmm13
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm10, %xmm10
# START: 0-7
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 0-7
# START: 8-15
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 8-15
# START: 16-23
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 16-23
# START: 24-31
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 24-31
# START: 32-39
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 32-39
# START: 40-47
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
# END: 40-47
repz retq
#ifndef __APPLE__
.size sp_3072_get_from_table_48,.-sp_3072_get_from_table_48
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 3072 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_3072_mont_reduce_avx2_48
.type sp_3072_mont_reduce_avx2_48,@function
.align 16
sp_3072_mont_reduce_avx2_48:
#else
.section __TEXT,__text
.globl _sp_3072_mont_reduce_avx2_48
.p2align 4
_sp_3072_mont_reduce_avx2_48:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 48
movq $48, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $0xc0, %rdi
xorq %rbp, %rbp
L_3072_mont_reduce_avx2_48_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -160(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -152(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -144(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -152(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq -136(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -144(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq -128(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -136(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq -120(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -128(%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq -112(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -120(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq -104(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -112(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq -96(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -104(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq -88(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -96(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq -80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -88(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq -72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -80(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq -64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -72(%rdi)
# a[i+16] += m[16] * mu
mulxq 128(%rsi), %rax, %rcx
movq -56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -64(%rdi)
# a[i+17] += m[17] * mu
mulxq 136(%rsi), %rax, %rcx
movq -48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -56(%rdi)
# a[i+18] += m[18] * mu
mulxq 144(%rsi), %rax, %rcx
movq -40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -48(%rdi)
# a[i+19] += m[19] * mu
mulxq 152(%rsi), %rax, %rcx
movq -32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -40(%rdi)
# a[i+20] += m[20] * mu
mulxq 160(%rsi), %rax, %rcx
movq -24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -32(%rdi)
# a[i+21] += m[21] * mu
mulxq 168(%rsi), %rax, %rcx
movq -16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -24(%rdi)
# a[i+22] += m[22] * mu
mulxq 176(%rsi), %rax, %rcx
movq -8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -16(%rdi)
# a[i+23] += m[23] * mu
mulxq 184(%rsi), %rax, %rcx
movq (%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -8(%rdi)
# a[i+24] += m[24] * mu
mulxq 192(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, (%rdi)
# a[i+25] += m[25] * mu
mulxq 200(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+26] += m[26] * mu
mulxq 208(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+27] += m[27] * mu
mulxq 216(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+28] += m[28] * mu
mulxq 224(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+29] += m[29] * mu
mulxq 232(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
# a[i+30] += m[30] * mu
mulxq 240(%rsi), %rax, %rcx
movq 56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
# a[i+31] += m[31] * mu
mulxq 248(%rsi), %rax, %rcx
movq 64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 56(%rdi)
# a[i+32] += m[32] * mu
mulxq 256(%rsi), %rax, %rcx
movq 72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 64(%rdi)
# a[i+33] += m[33] * mu
mulxq 264(%rsi), %rax, %rcx
movq 80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 72(%rdi)
# a[i+34] += m[34] * mu
mulxq 272(%rsi), %rax, %rcx
movq 88(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 80(%rdi)
# a[i+35] += m[35] * mu
mulxq 280(%rsi), %rax, %rcx
movq 96(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 88(%rdi)
# a[i+36] += m[36] * mu
mulxq 288(%rsi), %rax, %rcx
movq 104(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rdi)
# a[i+37] += m[37] * mu
mulxq 296(%rsi), %rax, %rcx
movq 112(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 104(%rdi)
# a[i+38] += m[38] * mu
mulxq 304(%rsi), %rax, %rcx
movq 120(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 112(%rdi)
# a[i+39] += m[39] * mu
mulxq 312(%rsi), %rax, %rcx
movq 128(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 120(%rdi)
# a[i+40] += m[40] * mu
mulxq 320(%rsi), %rax, %rcx
movq 136(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 128(%rdi)
# a[i+41] += m[41] * mu
mulxq 328(%rsi), %rax, %rcx
movq 144(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 136(%rdi)
# a[i+42] += m[42] * mu
mulxq 336(%rsi), %rax, %rcx
movq 152(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 144(%rdi)
# a[i+43] += m[43] * mu
mulxq 344(%rsi), %rax, %rcx
movq 160(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 152(%rdi)
# a[i+44] += m[44] * mu
mulxq 352(%rsi), %rax, %rcx
movq 168(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 160(%rdi)
# a[i+45] += m[45] * mu
mulxq 360(%rsi), %rax, %rcx
movq 176(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 168(%rdi)
# a[i+46] += m[46] * mu
mulxq 368(%rsi), %rax, %rcx
movq 184(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 176(%rdi)
# a[i+47] += m[47] * mu
mulxq 376(%rsi), %rax, %rcx
movq 192(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 184(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 192(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 1
addq $8, %rdi
# i -= 1
subq $0x01, %r9
jnz L_3072_mont_reduce_avx2_48_loop
subq $0xc0, %rdi
negq %rbp
movq %rdi, %r8
subq $0x180, %rdi
movq (%rsi), %rcx
movq %r12, %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq %r13, %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq %r14, %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq %r15, %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq 72(%rsi), %rax
movq 72(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 64(%rdi)
sbbq %rax, %rdx
movq 80(%rsi), %rcx
movq 80(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 72(%rdi)
sbbq %rcx, %rax
movq 88(%rsi), %rdx
movq 88(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 80(%rdi)
sbbq %rdx, %rcx
movq 96(%rsi), %rax
movq 96(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 88(%rdi)
sbbq %rax, %rdx
movq 104(%rsi), %rcx
movq 104(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 96(%rdi)
sbbq %rcx, %rax
movq 112(%rsi), %rdx
movq 112(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 104(%rdi)
sbbq %rdx, %rcx
movq 120(%rsi), %rax
movq 120(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 112(%rdi)
sbbq %rax, %rdx
movq 128(%rsi), %rcx
movq 128(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 120(%rdi)
sbbq %rcx, %rax
movq 136(%rsi), %rdx
movq 136(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 128(%rdi)
sbbq %rdx, %rcx
movq 144(%rsi), %rax
movq 144(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 136(%rdi)
sbbq %rax, %rdx
movq 152(%rsi), %rcx
movq 152(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 144(%rdi)
sbbq %rcx, %rax
movq 160(%rsi), %rdx
movq 160(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 152(%rdi)
sbbq %rdx, %rcx
movq 168(%rsi), %rax
movq 168(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 160(%rdi)
sbbq %rax, %rdx
movq 176(%rsi), %rcx
movq 176(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 168(%rdi)
sbbq %rcx, %rax
movq 184(%rsi), %rdx
movq 184(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 176(%rdi)
sbbq %rdx, %rcx
movq 192(%rsi), %rax
movq 192(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 184(%rdi)
sbbq %rax, %rdx
movq 200(%rsi), %rcx
movq 200(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 192(%rdi)
sbbq %rcx, %rax
movq 208(%rsi), %rdx
movq 208(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 200(%rdi)
sbbq %rdx, %rcx
movq 216(%rsi), %rax
movq 216(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 208(%rdi)
sbbq %rax, %rdx
movq 224(%rsi), %rcx
movq 224(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 216(%rdi)
sbbq %rcx, %rax
movq 232(%rsi), %rdx
movq 232(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 224(%rdi)
sbbq %rdx, %rcx
movq 240(%rsi), %rax
movq 240(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 232(%rdi)
sbbq %rax, %rdx
movq 248(%rsi), %rcx
movq 248(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 240(%rdi)
sbbq %rcx, %rax
movq 256(%rsi), %rdx
movq 256(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 248(%rdi)
sbbq %rdx, %rcx
movq 264(%rsi), %rax
movq 264(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 256(%rdi)
sbbq %rax, %rdx
movq 272(%rsi), %rcx
movq 272(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 264(%rdi)
sbbq %rcx, %rax
movq 280(%rsi), %rdx
movq 280(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 272(%rdi)
sbbq %rdx, %rcx
movq 288(%rsi), %rax
movq 288(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 280(%rdi)
sbbq %rax, %rdx
movq 296(%rsi), %rcx
movq 296(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 288(%rdi)
sbbq %rcx, %rax
movq 304(%rsi), %rdx
movq 304(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 296(%rdi)
sbbq %rdx, %rcx
movq 312(%rsi), %rax
movq 312(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 304(%rdi)
sbbq %rax, %rdx
movq 320(%rsi), %rcx
movq 320(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 312(%rdi)
sbbq %rcx, %rax
movq 328(%rsi), %rdx
movq 328(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 320(%rdi)
sbbq %rdx, %rcx
movq 336(%rsi), %rax
movq 336(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 328(%rdi)
sbbq %rax, %rdx
movq 344(%rsi), %rcx
movq 344(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 336(%rdi)
sbbq %rcx, %rax
movq 352(%rsi), %rdx
movq 352(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 344(%rdi)
sbbq %rdx, %rcx
movq 360(%rsi), %rax
movq 360(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 352(%rdi)
sbbq %rax, %rdx
movq 368(%rsi), %rcx
movq 368(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 360(%rdi)
sbbq %rcx, %rax
movq 376(%rsi), %rdx
movq 376(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 368(%rdi)
sbbq %rdx, %rcx
movq %rcx, 376(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_3072_mont_reduce_avx2_48,.-sp_3072_mont_reduce_avx2_48
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_3072_get_from_table_avx2_48
.type sp_3072_get_from_table_avx2_48,@function
.align 16
sp_3072_get_from_table_avx2_48:
#else
.section __TEXT,__text
.globl _sp_3072_get_from_table_avx2_48
.p2align 4
_sp_3072_get_from_table_avx2_48:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
vpxor %ymm13, %ymm13, %ymm13
vpermd %ymm10, %ymm13, %ymm10
vpermd %ymm11, %ymm13, %ymm11
# START: 0-15
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 0-15
# START: 16-31
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 16-31
# START: 32-47
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
# END: 32-47
repz retq
#ifndef __APPLE__
.size sp_3072_get_from_table_avx2_48,.-sp_3072_get_from_table_avx2_48
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Conditionally add a and b using the mask m.
* m is -1 to add and 0 when not.
*
* r A single precision number representing conditional add result.
* a A single precision number to add with.
* b A single precision number to add.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cond_add_24
.type sp_3072_cond_add_24,@function
.align 16
sp_3072_cond_add_24:
#else
.section __TEXT,__text
.globl _sp_3072_cond_add_24
.p2align 4
_sp_3072_cond_add_24:
#endif /* __APPLE__ */
subq $0xc0, %rsp
movq $0x00, %rax
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq 128(%rdx), %r8
movq 136(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 128(%rsp)
movq %r9, 136(%rsp)
movq 144(%rdx), %r8
movq 152(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 144(%rsp)
movq %r9, 152(%rsp)
movq 160(%rdx), %r8
movq 168(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 160(%rsp)
movq %r9, 168(%rsp)
movq 176(%rdx), %r8
movq 184(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 176(%rsp)
movq %r9, 184(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
addq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
adcq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 112(%rdi)
movq 128(%rsi), %r8
movq 128(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 120(%rdi)
movq 136(%rsi), %r9
movq 136(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 128(%rdi)
movq 144(%rsi), %r8
movq 144(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 136(%rdi)
movq 152(%rsi), %r9
movq 152(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 144(%rdi)
movq 160(%rsi), %r8
movq 160(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 152(%rdi)
movq 168(%rsi), %r9
movq 168(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 160(%rdi)
movq 176(%rsi), %r8
movq 176(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 168(%rdi)
movq 184(%rsi), %r9
movq 184(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 176(%rdi)
movq %r9, 184(%rdi)
adcq $0x00, %rax
addq $0xc0, %rsp
repz retq
#ifndef __APPLE__
.size sp_3072_cond_add_24,.-sp_3072_cond_add_24
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Conditionally add a and b using the mask m.
* m is -1 to add and 0 when not.
*
* r A single precision number representing conditional add result.
* a A single precision number to add with.
* b A single precision number to add.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_3072_cond_add_avx2_24
.type sp_3072_cond_add_avx2_24,@function
.align 16
sp_3072_cond_add_avx2_24:
#else
.section __TEXT,__text
.globl _sp_3072_cond_add_avx2_24
.p2align 4
_sp_3072_cond_add_avx2_24:
#endif /* __APPLE__ */
movq $0x00, %rax
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
addq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
adcq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
adcq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
adcq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
adcq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
adcq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
adcq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
adcq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
adcq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
adcq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
adcq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
adcq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
adcq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
adcq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
adcq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
adcq %r9, %r8
movq 128(%rdx), %r10
movq 128(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 120(%rdi)
adcq %r10, %r9
movq 136(%rdx), %r8
movq 136(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 128(%rdi)
adcq %r8, %r10
movq 144(%rdx), %r9
movq 144(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 136(%rdi)
adcq %r9, %r8
movq 152(%rdx), %r10
movq 152(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 144(%rdi)
adcq %r10, %r9
movq 160(%rdx), %r8
movq 160(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 152(%rdi)
adcq %r8, %r10
movq 168(%rdx), %r9
movq 168(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 160(%rdi)
adcq %r9, %r8
movq 176(%rdx), %r10
movq 176(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 168(%rdi)
adcq %r10, %r9
movq 184(%rdx), %r8
movq 184(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 176(%rdi)
adcq %r8, %r10
movq %r10, 184(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_3072_cond_add_avx2_24,.-sp_3072_cond_add_avx2_24
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Shift number left by n bit. (r = a << n)
*
* r Result of left shift by n.
* a Number to shift.
* n Amoutnt o shift.
*/
#ifndef __APPLE__
.text
.globl sp_3072_lshift_48
.type sp_3072_lshift_48,@function
.align 16
sp_3072_lshift_48:
#else
.section __TEXT,__text
.globl _sp_3072_lshift_48
.p2align 4
_sp_3072_lshift_48:
#endif /* __APPLE__ */
movb %dl, %cl
movq $0x00, %r10
movq 344(%rsi), %r11
movq 352(%rsi), %rdx
movq 360(%rsi), %rax
movq 368(%rsi), %r8
movq 376(%rsi), %r9
shldq %cl, %r9, %r10
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 352(%rdi)
movq %rax, 360(%rdi)
movq %r8, 368(%rdi)
movq %r9, 376(%rdi)
movq %r10, 384(%rdi)
movq 312(%rsi), %r9
movq 320(%rsi), %rdx
movq 328(%rsi), %rax
movq 336(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 320(%rdi)
movq %rax, 328(%rdi)
movq %r8, 336(%rdi)
movq %r11, 344(%rdi)
movq 280(%rsi), %r11
movq 288(%rsi), %rdx
movq 296(%rsi), %rax
movq 304(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 288(%rdi)
movq %rax, 296(%rdi)
movq %r8, 304(%rdi)
movq %r9, 312(%rdi)
movq 248(%rsi), %r9
movq 256(%rsi), %rdx
movq 264(%rsi), %rax
movq 272(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 256(%rdi)
movq %rax, 264(%rdi)
movq %r8, 272(%rdi)
movq %r11, 280(%rdi)
movq 216(%rsi), %r11
movq 224(%rsi), %rdx
movq 232(%rsi), %rax
movq 240(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 224(%rdi)
movq %rax, 232(%rdi)
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
movq 184(%rsi), %r9
movq 192(%rsi), %rdx
movq 200(%rsi), %rax
movq 208(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 192(%rdi)
movq %rax, 200(%rdi)
movq %r8, 208(%rdi)
movq %r11, 216(%rdi)
movq 152(%rsi), %r11
movq 160(%rsi), %rdx
movq 168(%rsi), %rax
movq 176(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 160(%rdi)
movq %rax, 168(%rdi)
movq %r8, 176(%rdi)
movq %r9, 184(%rdi)
movq 120(%rsi), %r9
movq 128(%rsi), %rdx
movq 136(%rsi), %rax
movq 144(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 128(%rdi)
movq %rax, 136(%rdi)
movq %r8, 144(%rdi)
movq %r11, 152(%rdi)
movq 88(%rsi), %r11
movq 96(%rsi), %rdx
movq 104(%rsi), %rax
movq 112(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 96(%rdi)
movq %rax, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
movq 56(%rsi), %r9
movq 64(%rsi), %rdx
movq 72(%rsi), %rax
movq 80(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 64(%rdi)
movq %rax, 72(%rdi)
movq %r8, 80(%rdi)
movq %r11, 88(%rdi)
movq 24(%rsi), %r11
movq 32(%rsi), %rdx
movq 40(%rsi), %rax
movq 48(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 32(%rdi)
movq %rax, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shlq %cl, %rdx
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %r8, 16(%rdi)
movq %r11, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_3072_lshift_48,.-sp_3072_lshift_48
#endif /* __APPLE__ */
#endif /* !WOLFSSL_SP_NO_3072 */
#endif /* !WOLFSSL_SP_NO_3072 */
#ifdef WOLFSSL_SP_4096
#ifdef WOLFSSL_SP_4096
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_4096_from_bin_bswap
.type sp_4096_from_bin_bswap,@function
.align 16
sp_4096_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_4096_from_bin_bswap
.p2align 4
_sp_4096_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x200, %r10
xorq %r11, %r11
jmp L_4096_from_bin_bswap_64_end
L_4096_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_4096_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_4096_from_bin_bswap_64_start
jmp L_4096_from_bin_bswap_8_end
L_4096_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_4096_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_4096_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_4096_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_4096_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_4096_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_4096_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_4096_from_bin_bswap_zero_end
L_4096_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_4096_from_bin_bswap_zero_start
L_4096_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_4096_from_bin_bswap,.-sp_4096_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_4096_from_bin_movbe
.type sp_4096_from_bin_movbe,@function
.align 16
sp_4096_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_4096_from_bin_movbe
.p2align 4
_sp_4096_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x200, %r10
jmp L_4096_from_bin_movbe_64_end
L_4096_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_4096_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_4096_from_bin_movbe_64_start
jmp L_4096_from_bin_movbe_8_end
L_4096_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_4096_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_4096_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_4096_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_4096_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_4096_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_4096_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_4096_from_bin_movbe_zero_end
L_4096_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_4096_from_bin_movbe_zero_start
L_4096_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_4096_from_bin_movbe,.-sp_4096_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 512
* Uses the bswap instruction.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_4096_to_bin_bswap_64
.type sp_4096_to_bin_bswap_64,@function
.align 16
sp_4096_to_bin_bswap_64:
#else
.section __TEXT,__text
.globl _sp_4096_to_bin_bswap_64
.p2align 4
_sp_4096_to_bin_bswap_64:
#endif /* __APPLE__ */
movq 504(%rdi), %rdx
movq 496(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movq 488(%rdi), %rdx
movq 480(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movq 472(%rdi), %rdx
movq 464(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
movq 456(%rdi), %rdx
movq 448(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 48(%rsi)
movq %rax, 56(%rsi)
movq 440(%rdi), %rdx
movq 432(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 64(%rsi)
movq %rax, 72(%rsi)
movq 424(%rdi), %rdx
movq 416(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 80(%rsi)
movq %rax, 88(%rsi)
movq 408(%rdi), %rdx
movq 400(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 96(%rsi)
movq %rax, 104(%rsi)
movq 392(%rdi), %rdx
movq 384(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 112(%rsi)
movq %rax, 120(%rsi)
movq 376(%rdi), %rdx
movq 368(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 128(%rsi)
movq %rax, 136(%rsi)
movq 360(%rdi), %rdx
movq 352(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 144(%rsi)
movq %rax, 152(%rsi)
movq 344(%rdi), %rdx
movq 336(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 160(%rsi)
movq %rax, 168(%rsi)
movq 328(%rdi), %rdx
movq 320(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 176(%rsi)
movq %rax, 184(%rsi)
movq 312(%rdi), %rdx
movq 304(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 192(%rsi)
movq %rax, 200(%rsi)
movq 296(%rdi), %rdx
movq 288(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 208(%rsi)
movq %rax, 216(%rsi)
movq 280(%rdi), %rdx
movq 272(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 224(%rsi)
movq %rax, 232(%rsi)
movq 264(%rdi), %rdx
movq 256(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 240(%rsi)
movq %rax, 248(%rsi)
movq 248(%rdi), %rdx
movq 240(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 256(%rsi)
movq %rax, 264(%rsi)
movq 232(%rdi), %rdx
movq 224(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 272(%rsi)
movq %rax, 280(%rsi)
movq 216(%rdi), %rdx
movq 208(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 288(%rsi)
movq %rax, 296(%rsi)
movq 200(%rdi), %rdx
movq 192(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 304(%rsi)
movq %rax, 312(%rsi)
movq 184(%rdi), %rdx
movq 176(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 320(%rsi)
movq %rax, 328(%rsi)
movq 168(%rdi), %rdx
movq 160(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 336(%rsi)
movq %rax, 344(%rsi)
movq 152(%rdi), %rdx
movq 144(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 352(%rsi)
movq %rax, 360(%rsi)
movq 136(%rdi), %rdx
movq 128(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 368(%rsi)
movq %rax, 376(%rsi)
movq 120(%rdi), %rdx
movq 112(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 384(%rsi)
movq %rax, 392(%rsi)
movq 104(%rdi), %rdx
movq 96(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 400(%rsi)
movq %rax, 408(%rsi)
movq 88(%rdi), %rdx
movq 80(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 416(%rsi)
movq %rax, 424(%rsi)
movq 72(%rdi), %rdx
movq 64(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 432(%rsi)
movq %rax, 440(%rsi)
movq 56(%rdi), %rdx
movq 48(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 448(%rsi)
movq %rax, 456(%rsi)
movq 40(%rdi), %rdx
movq 32(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 464(%rsi)
movq %rax, 472(%rsi)
movq 24(%rdi), %rdx
movq 16(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 480(%rsi)
movq %rax, 488(%rsi)
movq 8(%rdi), %rdx
movq (%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 496(%rsi)
movq %rax, 504(%rsi)
repz retq
#ifndef __APPLE__
.size sp_4096_to_bin_bswap_64,.-sp_4096_to_bin_bswap_64
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 512
* Uses the movbe instruction which is optional.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_4096_to_bin_movbe_64
.type sp_4096_to_bin_movbe_64,@function
.align 16
sp_4096_to_bin_movbe_64:
#else
.section __TEXT,__text
.globl _sp_4096_to_bin_movbe_64
.p2align 4
_sp_4096_to_bin_movbe_64:
#endif /* __APPLE__ */
movbeq 504(%rdi), %rdx
movbeq 496(%rdi), %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movbeq 488(%rdi), %rdx
movbeq 480(%rdi), %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movbeq 472(%rdi), %rdx
movbeq 464(%rdi), %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
movbeq 456(%rdi), %rdx
movbeq 448(%rdi), %rax
movq %rdx, 48(%rsi)
movq %rax, 56(%rsi)
movbeq 440(%rdi), %rdx
movbeq 432(%rdi), %rax
movq %rdx, 64(%rsi)
movq %rax, 72(%rsi)
movbeq 424(%rdi), %rdx
movbeq 416(%rdi), %rax
movq %rdx, 80(%rsi)
movq %rax, 88(%rsi)
movbeq 408(%rdi), %rdx
movbeq 400(%rdi), %rax
movq %rdx, 96(%rsi)
movq %rax, 104(%rsi)
movbeq 392(%rdi), %rdx
movbeq 384(%rdi), %rax
movq %rdx, 112(%rsi)
movq %rax, 120(%rsi)
movbeq 376(%rdi), %rdx
movbeq 368(%rdi), %rax
movq %rdx, 128(%rsi)
movq %rax, 136(%rsi)
movbeq 360(%rdi), %rdx
movbeq 352(%rdi), %rax
movq %rdx, 144(%rsi)
movq %rax, 152(%rsi)
movbeq 344(%rdi), %rdx
movbeq 336(%rdi), %rax
movq %rdx, 160(%rsi)
movq %rax, 168(%rsi)
movbeq 328(%rdi), %rdx
movbeq 320(%rdi), %rax
movq %rdx, 176(%rsi)
movq %rax, 184(%rsi)
movbeq 312(%rdi), %rdx
movbeq 304(%rdi), %rax
movq %rdx, 192(%rsi)
movq %rax, 200(%rsi)
movbeq 296(%rdi), %rdx
movbeq 288(%rdi), %rax
movq %rdx, 208(%rsi)
movq %rax, 216(%rsi)
movbeq 280(%rdi), %rdx
movbeq 272(%rdi), %rax
movq %rdx, 224(%rsi)
movq %rax, 232(%rsi)
movbeq 264(%rdi), %rdx
movbeq 256(%rdi), %rax
movq %rdx, 240(%rsi)
movq %rax, 248(%rsi)
movbeq 248(%rdi), %rdx
movbeq 240(%rdi), %rax
movq %rdx, 256(%rsi)
movq %rax, 264(%rsi)
movbeq 232(%rdi), %rdx
movbeq 224(%rdi), %rax
movq %rdx, 272(%rsi)
movq %rax, 280(%rsi)
movbeq 216(%rdi), %rdx
movbeq 208(%rdi), %rax
movq %rdx, 288(%rsi)
movq %rax, 296(%rsi)
movbeq 200(%rdi), %rdx
movbeq 192(%rdi), %rax
movq %rdx, 304(%rsi)
movq %rax, 312(%rsi)
movbeq 184(%rdi), %rdx
movbeq 176(%rdi), %rax
movq %rdx, 320(%rsi)
movq %rax, 328(%rsi)
movbeq 168(%rdi), %rdx
movbeq 160(%rdi), %rax
movq %rdx, 336(%rsi)
movq %rax, 344(%rsi)
movbeq 152(%rdi), %rdx
movbeq 144(%rdi), %rax
movq %rdx, 352(%rsi)
movq %rax, 360(%rsi)
movbeq 136(%rdi), %rdx
movbeq 128(%rdi), %rax
movq %rdx, 368(%rsi)
movq %rax, 376(%rsi)
movbeq 120(%rdi), %rdx
movbeq 112(%rdi), %rax
movq %rdx, 384(%rsi)
movq %rax, 392(%rsi)
movbeq 104(%rdi), %rdx
movbeq 96(%rdi), %rax
movq %rdx, 400(%rsi)
movq %rax, 408(%rsi)
movbeq 88(%rdi), %rdx
movbeq 80(%rdi), %rax
movq %rdx, 416(%rsi)
movq %rax, 424(%rsi)
movbeq 72(%rdi), %rdx
movbeq 64(%rdi), %rax
movq %rdx, 432(%rsi)
movq %rax, 440(%rsi)
movbeq 56(%rdi), %rdx
movbeq 48(%rdi), %rax
movq %rdx, 448(%rsi)
movq %rax, 456(%rsi)
movbeq 40(%rdi), %rdx
movbeq 32(%rdi), %rax
movq %rdx, 464(%rsi)
movq %rax, 472(%rsi)
movbeq 24(%rdi), %rdx
movbeq 16(%rdi), %rax
movq %rdx, 480(%rsi)
movq %rax, 488(%rsi)
movbeq 8(%rdi), %rdx
movbeq (%rdi), %rax
movq %rdx, 496(%rsi)
movq %rax, 504(%rsi)
repz retq
#ifndef __APPLE__
.size sp_4096_to_bin_movbe_64,.-sp_4096_to_bin_movbe_64
#endif /* __APPLE__ */
#endif /* NO_MOVBE_SUPPORT */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_sub_in_place_64
.type sp_4096_sub_in_place_64,@function
.align 16
sp_4096_sub_in_place_64:
#else
.section __TEXT,__text
.globl _sp_4096_sub_in_place_64
.p2align 4
_sp_4096_sub_in_place_64:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq 72(%rdi), %rcx
movq %rdx, 64(%rdi)
sbbq 72(%rsi), %rcx
movq 80(%rdi), %rdx
movq %rcx, 72(%rdi)
sbbq 80(%rsi), %rdx
movq 88(%rdi), %rcx
movq %rdx, 80(%rdi)
sbbq 88(%rsi), %rcx
movq 96(%rdi), %rdx
movq %rcx, 88(%rdi)
sbbq 96(%rsi), %rdx
movq 104(%rdi), %rcx
movq %rdx, 96(%rdi)
sbbq 104(%rsi), %rcx
movq 112(%rdi), %rdx
movq %rcx, 104(%rdi)
sbbq 112(%rsi), %rdx
movq 120(%rdi), %rcx
movq %rdx, 112(%rdi)
sbbq 120(%rsi), %rcx
movq 128(%rdi), %rdx
movq %rcx, 120(%rdi)
sbbq 128(%rsi), %rdx
movq 136(%rdi), %rcx
movq %rdx, 128(%rdi)
sbbq 136(%rsi), %rcx
movq 144(%rdi), %rdx
movq %rcx, 136(%rdi)
sbbq 144(%rsi), %rdx
movq 152(%rdi), %rcx
movq %rdx, 144(%rdi)
sbbq 152(%rsi), %rcx
movq 160(%rdi), %rdx
movq %rcx, 152(%rdi)
sbbq 160(%rsi), %rdx
movq 168(%rdi), %rcx
movq %rdx, 160(%rdi)
sbbq 168(%rsi), %rcx
movq 176(%rdi), %rdx
movq %rcx, 168(%rdi)
sbbq 176(%rsi), %rdx
movq 184(%rdi), %rcx
movq %rdx, 176(%rdi)
sbbq 184(%rsi), %rcx
movq 192(%rdi), %rdx
movq %rcx, 184(%rdi)
sbbq 192(%rsi), %rdx
movq 200(%rdi), %rcx
movq %rdx, 192(%rdi)
sbbq 200(%rsi), %rcx
movq 208(%rdi), %rdx
movq %rcx, 200(%rdi)
sbbq 208(%rsi), %rdx
movq 216(%rdi), %rcx
movq %rdx, 208(%rdi)
sbbq 216(%rsi), %rcx
movq 224(%rdi), %rdx
movq %rcx, 216(%rdi)
sbbq 224(%rsi), %rdx
movq 232(%rdi), %rcx
movq %rdx, 224(%rdi)
sbbq 232(%rsi), %rcx
movq 240(%rdi), %rdx
movq %rcx, 232(%rdi)
sbbq 240(%rsi), %rdx
movq 248(%rdi), %rcx
movq %rdx, 240(%rdi)
sbbq 248(%rsi), %rcx
movq 256(%rdi), %rdx
movq %rcx, 248(%rdi)
sbbq 256(%rsi), %rdx
movq 264(%rdi), %rcx
movq %rdx, 256(%rdi)
sbbq 264(%rsi), %rcx
movq 272(%rdi), %rdx
movq %rcx, 264(%rdi)
sbbq 272(%rsi), %rdx
movq 280(%rdi), %rcx
movq %rdx, 272(%rdi)
sbbq 280(%rsi), %rcx
movq 288(%rdi), %rdx
movq %rcx, 280(%rdi)
sbbq 288(%rsi), %rdx
movq 296(%rdi), %rcx
movq %rdx, 288(%rdi)
sbbq 296(%rsi), %rcx
movq 304(%rdi), %rdx
movq %rcx, 296(%rdi)
sbbq 304(%rsi), %rdx
movq 312(%rdi), %rcx
movq %rdx, 304(%rdi)
sbbq 312(%rsi), %rcx
movq 320(%rdi), %rdx
movq %rcx, 312(%rdi)
sbbq 320(%rsi), %rdx
movq 328(%rdi), %rcx
movq %rdx, 320(%rdi)
sbbq 328(%rsi), %rcx
movq 336(%rdi), %rdx
movq %rcx, 328(%rdi)
sbbq 336(%rsi), %rdx
movq 344(%rdi), %rcx
movq %rdx, 336(%rdi)
sbbq 344(%rsi), %rcx
movq 352(%rdi), %rdx
movq %rcx, 344(%rdi)
sbbq 352(%rsi), %rdx
movq 360(%rdi), %rcx
movq %rdx, 352(%rdi)
sbbq 360(%rsi), %rcx
movq 368(%rdi), %rdx
movq %rcx, 360(%rdi)
sbbq 368(%rsi), %rdx
movq 376(%rdi), %rcx
movq %rdx, 368(%rdi)
sbbq 376(%rsi), %rcx
movq 384(%rdi), %rdx
movq %rcx, 376(%rdi)
sbbq 384(%rsi), %rdx
movq 392(%rdi), %rcx
movq %rdx, 384(%rdi)
sbbq 392(%rsi), %rcx
movq 400(%rdi), %rdx
movq %rcx, 392(%rdi)
sbbq 400(%rsi), %rdx
movq 408(%rdi), %rcx
movq %rdx, 400(%rdi)
sbbq 408(%rsi), %rcx
movq 416(%rdi), %rdx
movq %rcx, 408(%rdi)
sbbq 416(%rsi), %rdx
movq 424(%rdi), %rcx
movq %rdx, 416(%rdi)
sbbq 424(%rsi), %rcx
movq 432(%rdi), %rdx
movq %rcx, 424(%rdi)
sbbq 432(%rsi), %rdx
movq 440(%rdi), %rcx
movq %rdx, 432(%rdi)
sbbq 440(%rsi), %rcx
movq 448(%rdi), %rdx
movq %rcx, 440(%rdi)
sbbq 448(%rsi), %rdx
movq 456(%rdi), %rcx
movq %rdx, 448(%rdi)
sbbq 456(%rsi), %rcx
movq 464(%rdi), %rdx
movq %rcx, 456(%rdi)
sbbq 464(%rsi), %rdx
movq 472(%rdi), %rcx
movq %rdx, 464(%rdi)
sbbq 472(%rsi), %rcx
movq 480(%rdi), %rdx
movq %rcx, 472(%rdi)
sbbq 480(%rsi), %rdx
movq 488(%rdi), %rcx
movq %rdx, 480(%rdi)
sbbq 488(%rsi), %rcx
movq 496(%rdi), %rdx
movq %rcx, 488(%rdi)
sbbq 496(%rsi), %rdx
movq 504(%rdi), %rcx
movq %rdx, 496(%rdi)
sbbq 504(%rsi), %rcx
movq %rcx, 504(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_4096_sub_in_place_64,.-sp_4096_sub_in_place_64
#endif /* __APPLE__ */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_add_64
.type sp_4096_add_64,@function
.align 16
sp_4096_add_64:
#else
.section __TEXT,__text
.globl _sp_4096_add_64
.p2align 4
_sp_4096_add_64:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
adcq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
adcq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
adcq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
adcq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
adcq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
adcq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
adcq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
adcq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
adcq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
adcq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
adcq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
adcq 184(%rdx), %r8
movq 192(%rsi), %rcx
movq %r8, 184(%rdi)
adcq 192(%rdx), %rcx
movq 200(%rsi), %r8
movq %rcx, 192(%rdi)
adcq 200(%rdx), %r8
movq 208(%rsi), %rcx
movq %r8, 200(%rdi)
adcq 208(%rdx), %rcx
movq 216(%rsi), %r8
movq %rcx, 208(%rdi)
adcq 216(%rdx), %r8
movq 224(%rsi), %rcx
movq %r8, 216(%rdi)
adcq 224(%rdx), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%rdi)
adcq 232(%rdx), %r8
movq 240(%rsi), %rcx
movq %r8, 232(%rdi)
adcq 240(%rdx), %rcx
movq 248(%rsi), %r8
movq %rcx, 240(%rdi)
adcq 248(%rdx), %r8
movq 256(%rsi), %rcx
movq %r8, 248(%rdi)
adcq 256(%rdx), %rcx
movq 264(%rsi), %r8
movq %rcx, 256(%rdi)
adcq 264(%rdx), %r8
movq 272(%rsi), %rcx
movq %r8, 264(%rdi)
adcq 272(%rdx), %rcx
movq 280(%rsi), %r8
movq %rcx, 272(%rdi)
adcq 280(%rdx), %r8
movq 288(%rsi), %rcx
movq %r8, 280(%rdi)
adcq 288(%rdx), %rcx
movq 296(%rsi), %r8
movq %rcx, 288(%rdi)
adcq 296(%rdx), %r8
movq 304(%rsi), %rcx
movq %r8, 296(%rdi)
adcq 304(%rdx), %rcx
movq 312(%rsi), %r8
movq %rcx, 304(%rdi)
adcq 312(%rdx), %r8
movq 320(%rsi), %rcx
movq %r8, 312(%rdi)
adcq 320(%rdx), %rcx
movq 328(%rsi), %r8
movq %rcx, 320(%rdi)
adcq 328(%rdx), %r8
movq 336(%rsi), %rcx
movq %r8, 328(%rdi)
adcq 336(%rdx), %rcx
movq 344(%rsi), %r8
movq %rcx, 336(%rdi)
adcq 344(%rdx), %r8
movq 352(%rsi), %rcx
movq %r8, 344(%rdi)
adcq 352(%rdx), %rcx
movq 360(%rsi), %r8
movq %rcx, 352(%rdi)
adcq 360(%rdx), %r8
movq 368(%rsi), %rcx
movq %r8, 360(%rdi)
adcq 368(%rdx), %rcx
movq 376(%rsi), %r8
movq %rcx, 368(%rdi)
adcq 376(%rdx), %r8
movq 384(%rsi), %rcx
movq %r8, 376(%rdi)
adcq 384(%rdx), %rcx
movq 392(%rsi), %r8
movq %rcx, 384(%rdi)
adcq 392(%rdx), %r8
movq 400(%rsi), %rcx
movq %r8, 392(%rdi)
adcq 400(%rdx), %rcx
movq 408(%rsi), %r8
movq %rcx, 400(%rdi)
adcq 408(%rdx), %r8
movq 416(%rsi), %rcx
movq %r8, 408(%rdi)
adcq 416(%rdx), %rcx
movq 424(%rsi), %r8
movq %rcx, 416(%rdi)
adcq 424(%rdx), %r8
movq 432(%rsi), %rcx
movq %r8, 424(%rdi)
adcq 432(%rdx), %rcx
movq 440(%rsi), %r8
movq %rcx, 432(%rdi)
adcq 440(%rdx), %r8
movq 448(%rsi), %rcx
movq %r8, 440(%rdi)
adcq 448(%rdx), %rcx
movq 456(%rsi), %r8
movq %rcx, 448(%rdi)
adcq 456(%rdx), %r8
movq 464(%rsi), %rcx
movq %r8, 456(%rdi)
adcq 464(%rdx), %rcx
movq 472(%rsi), %r8
movq %rcx, 464(%rdi)
adcq 472(%rdx), %r8
movq 480(%rsi), %rcx
movq %r8, 472(%rdi)
adcq 480(%rdx), %rcx
movq 488(%rsi), %r8
movq %rcx, 480(%rdi)
adcq 488(%rdx), %r8
movq 496(%rsi), %rcx
movq %r8, 488(%rdi)
adcq 496(%rdx), %rcx
movq 504(%rsi), %r8
movq %rcx, 496(%rdi)
adcq 504(%rdx), %r8
movq %r8, 504(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_4096_add_64,.-sp_4096_add_64
#endif /* __APPLE__ */
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_mul_64
.type sp_4096_mul_64,@function
.align 16
sp_4096_mul_64:
#else
.section __TEXT,__text
.globl _sp_4096_mul_64
.p2align 4
_sp_4096_mul_64:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x628, %rsp
movq %rdi, 1536(%rsp)
movq %rsi, 1544(%rsp)
movq %rdx, 1552(%rsp)
leaq 1024(%rsp), %r10
leaq 256(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq 96(%rsi), %rax
movq %r8, 88(%r10)
adcq 96(%r12), %rax
movq 104(%rsi), %rcx
movq %rax, 96(%r10)
adcq 104(%r12), %rcx
movq 112(%rsi), %r8
movq %rcx, 104(%r10)
adcq 112(%r12), %r8
movq 120(%rsi), %rax
movq %r8, 112(%r10)
adcq 120(%r12), %rax
movq 128(%rsi), %rcx
movq %rax, 120(%r10)
adcq 128(%r12), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%r10)
adcq 136(%r12), %r8
movq 144(%rsi), %rax
movq %r8, 136(%r10)
adcq 144(%r12), %rax
movq 152(%rsi), %rcx
movq %rax, 144(%r10)
adcq 152(%r12), %rcx
movq 160(%rsi), %r8
movq %rcx, 152(%r10)
adcq 160(%r12), %r8
movq 168(%rsi), %rax
movq %r8, 160(%r10)
adcq 168(%r12), %rax
movq 176(%rsi), %rcx
movq %rax, 168(%r10)
adcq 176(%r12), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%r10)
adcq 184(%r12), %r8
movq 192(%rsi), %rax
movq %r8, 184(%r10)
adcq 192(%r12), %rax
movq 200(%rsi), %rcx
movq %rax, 192(%r10)
adcq 200(%r12), %rcx
movq 208(%rsi), %r8
movq %rcx, 200(%r10)
adcq 208(%r12), %r8
movq 216(%rsi), %rax
movq %r8, 208(%r10)
adcq 216(%r12), %rax
movq 224(%rsi), %rcx
movq %rax, 216(%r10)
adcq 224(%r12), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%r10)
adcq 232(%r12), %r8
movq 240(%rsi), %rax
movq %r8, 232(%r10)
adcq 240(%r12), %rax
movq 248(%rsi), %rcx
movq %rax, 240(%r10)
adcq 248(%r12), %rcx
movq %rcx, 248(%r10)
adcq $0x00, %r13
movq %r13, 1560(%rsp)
leaq 1280(%rsp), %r11
leaq 256(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq 96(%rdx), %rax
movq %r8, 88(%r11)
adcq 96(%r12), %rax
movq 104(%rdx), %rcx
movq %rax, 96(%r11)
adcq 104(%r12), %rcx
movq 112(%rdx), %r8
movq %rcx, 104(%r11)
adcq 112(%r12), %r8
movq 120(%rdx), %rax
movq %r8, 112(%r11)
adcq 120(%r12), %rax
movq 128(%rdx), %rcx
movq %rax, 120(%r11)
adcq 128(%r12), %rcx
movq 136(%rdx), %r8
movq %rcx, 128(%r11)
adcq 136(%r12), %r8
movq 144(%rdx), %rax
movq %r8, 136(%r11)
adcq 144(%r12), %rax
movq 152(%rdx), %rcx
movq %rax, 144(%r11)
adcq 152(%r12), %rcx
movq 160(%rdx), %r8
movq %rcx, 152(%r11)
adcq 160(%r12), %r8
movq 168(%rdx), %rax
movq %r8, 160(%r11)
adcq 168(%r12), %rax
movq 176(%rdx), %rcx
movq %rax, 168(%r11)
adcq 176(%r12), %rcx
movq 184(%rdx), %r8
movq %rcx, 176(%r11)
adcq 184(%r12), %r8
movq 192(%rdx), %rax
movq %r8, 184(%r11)
adcq 192(%r12), %rax
movq 200(%rdx), %rcx
movq %rax, 192(%r11)
adcq 200(%r12), %rcx
movq 208(%rdx), %r8
movq %rcx, 200(%r11)
adcq 208(%r12), %r8
movq 216(%rdx), %rax
movq %r8, 208(%r11)
adcq 216(%r12), %rax
movq 224(%rdx), %rcx
movq %rax, 216(%r11)
adcq 224(%r12), %rcx
movq 232(%rdx), %r8
movq %rcx, 224(%r11)
adcq 232(%r12), %r8
movq 240(%rdx), %rax
movq %r8, 232(%r11)
adcq 240(%r12), %rax
movq 248(%rdx), %rcx
movq %rax, 240(%r11)
adcq 248(%r12), %rcx
movq %rcx, 248(%r11)
adcq $0x00, %r14
movq %r14, 1568(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_mul_32@plt
#else
callq _sp_2048_mul_32
#endif /* __APPLE__ */
movq 1552(%rsp), %rdx
movq 1544(%rsp), %rsi
leaq 512(%rsp), %rdi
addq $0x100, %rdx
addq $0x100, %rsi
#ifndef __APPLE__
callq sp_2048_mul_32@plt
#else
callq _sp_2048_mul_32
#endif /* __APPLE__ */
movq 1552(%rsp), %rdx
movq 1544(%rsp), %rsi
movq 1536(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_mul_32@plt
#else
callq _sp_2048_mul_32
#endif /* __APPLE__ */
#ifdef _WIN64
movq 1552(%rsp), %rdx
movq 1544(%rsp), %rsi
movq 1536(%rsp), %rdi
#endif /* _WIN64 */
movq 1560(%rsp), %r13
movq 1568(%rsp), %r14
movq 1536(%rsp), %r15
movq %r13, %r9
leaq 1024(%rsp), %r10
leaq 1280(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0x200, %r15
movq (%r10), %rax
movq (%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, (%r10)
movq %rcx, (%r11)
movq 8(%r10), %rax
movq 8(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 8(%r10)
movq %rcx, 8(%r11)
movq 16(%r10), %rax
movq 16(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 16(%r10)
movq %rcx, 16(%r11)
movq 24(%r10), %rax
movq 24(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 24(%r10)
movq %rcx, 24(%r11)
movq 32(%r10), %rax
movq 32(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 32(%r10)
movq %rcx, 32(%r11)
movq 40(%r10), %rax
movq 40(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 40(%r10)
movq %rcx, 40(%r11)
movq 48(%r10), %rax
movq 48(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 48(%r10)
movq %rcx, 48(%r11)
movq 56(%r10), %rax
movq 56(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 56(%r10)
movq %rcx, 56(%r11)
movq 64(%r10), %rax
movq 64(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 64(%r10)
movq %rcx, 64(%r11)
movq 72(%r10), %rax
movq 72(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 72(%r10)
movq %rcx, 72(%r11)
movq 80(%r10), %rax
movq 80(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 80(%r10)
movq %rcx, 80(%r11)
movq 88(%r10), %rax
movq 88(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 88(%r10)
movq %rcx, 88(%r11)
movq 96(%r10), %rax
movq 96(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 96(%r10)
movq %rcx, 96(%r11)
movq 104(%r10), %rax
movq 104(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 104(%r10)
movq %rcx, 104(%r11)
movq 112(%r10), %rax
movq 112(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 112(%r10)
movq %rcx, 112(%r11)
movq 120(%r10), %rax
movq 120(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 120(%r10)
movq %rcx, 120(%r11)
movq 128(%r10), %rax
movq 128(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 128(%r10)
movq %rcx, 128(%r11)
movq 136(%r10), %rax
movq 136(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 136(%r10)
movq %rcx, 136(%r11)
movq 144(%r10), %rax
movq 144(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 144(%r10)
movq %rcx, 144(%r11)
movq 152(%r10), %rax
movq 152(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 152(%r10)
movq %rcx, 152(%r11)
movq 160(%r10), %rax
movq 160(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 160(%r10)
movq %rcx, 160(%r11)
movq 168(%r10), %rax
movq 168(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 168(%r10)
movq %rcx, 168(%r11)
movq 176(%r10), %rax
movq 176(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 176(%r10)
movq %rcx, 176(%r11)
movq 184(%r10), %rax
movq 184(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 184(%r10)
movq %rcx, 184(%r11)
movq 192(%r10), %rax
movq 192(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 192(%r10)
movq %rcx, 192(%r11)
movq 200(%r10), %rax
movq 200(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 200(%r10)
movq %rcx, 200(%r11)
movq 208(%r10), %rax
movq 208(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 208(%r10)
movq %rcx, 208(%r11)
movq 216(%r10), %rax
movq 216(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 216(%r10)
movq %rcx, 216(%r11)
movq 224(%r10), %rax
movq 224(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 224(%r10)
movq %rcx, 224(%r11)
movq 232(%r10), %rax
movq 232(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 232(%r10)
movq %rcx, 232(%r11)
movq 240(%r10), %rax
movq 240(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 240(%r10)
movq %rcx, 240(%r11)
movq 248(%r10), %rax
movq 248(%r11), %rcx
andq %r14, %rax
andq %r13, %rcx
movq %rax, 248(%r10)
movq %rcx, 248(%r11)
movq (%r10), %rax
addq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r15)
adcq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r15)
adcq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r15)
adcq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r15)
adcq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r15)
adcq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r15)
adcq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r15)
adcq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r15)
adcq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r15)
adcq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r15)
adcq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r15)
adcq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r15)
adcq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r15)
adcq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r15)
adcq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r15)
adcq 248(%r11), %rcx
movq %rcx, 248(%r15)
adcq $0x00, %r9
leaq 512(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%r11), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%r11), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%r11), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%r11), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%r11), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%r11), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%r11), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%r11), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%r11), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%r11), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%r11), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%r11), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%r11), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%r11), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%r11), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%r11), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%r11), %r8
movq 384(%r10), %rax
movq %r8, 376(%r10)
sbbq 384(%r11), %rax
movq 392(%r10), %rcx
movq %rax, 384(%r10)
sbbq 392(%r11), %rcx
movq 400(%r10), %r8
movq %rcx, 392(%r10)
sbbq 400(%r11), %r8
movq 408(%r10), %rax
movq %r8, 400(%r10)
sbbq 408(%r11), %rax
movq 416(%r10), %rcx
movq %rax, 408(%r10)
sbbq 416(%r11), %rcx
movq 424(%r10), %r8
movq %rcx, 416(%r10)
sbbq 424(%r11), %r8
movq 432(%r10), %rax
movq %r8, 424(%r10)
sbbq 432(%r11), %rax
movq 440(%r10), %rcx
movq %rax, 432(%r10)
sbbq 440(%r11), %rcx
movq 448(%r10), %r8
movq %rcx, 440(%r10)
sbbq 448(%r11), %r8
movq 456(%r10), %rax
movq %r8, 448(%r10)
sbbq 456(%r11), %rax
movq 464(%r10), %rcx
movq %rax, 456(%r10)
sbbq 464(%r11), %rcx
movq 472(%r10), %r8
movq %rcx, 464(%r10)
sbbq 472(%r11), %r8
movq 480(%r10), %rax
movq %r8, 472(%r10)
sbbq 480(%r11), %rax
movq 488(%r10), %rcx
movq %rax, 480(%r10)
sbbq 488(%r11), %rcx
movq 496(%r10), %r8
movq %rcx, 488(%r10)
sbbq 496(%r11), %r8
movq 504(%r10), %rax
movq %r8, 496(%r10)
sbbq 504(%r11), %rax
movq %rax, 504(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%rdi), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%rdi), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%rdi), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%rdi), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%rdi), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%rdi), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%rdi), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%rdi), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%rdi), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%rdi), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%rdi), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%rdi), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%rdi), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%rdi), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%rdi), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%rdi), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%rdi), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%rdi), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%rdi), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%rdi), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%rdi), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%rdi), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%rdi), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%rdi), %r8
movq 384(%r10), %rax
movq %r8, 376(%r10)
sbbq 384(%rdi), %rax
movq 392(%r10), %rcx
movq %rax, 384(%r10)
sbbq 392(%rdi), %rcx
movq 400(%r10), %r8
movq %rcx, 392(%r10)
sbbq 400(%rdi), %r8
movq 408(%r10), %rax
movq %r8, 400(%r10)
sbbq 408(%rdi), %rax
movq 416(%r10), %rcx
movq %rax, 408(%r10)
sbbq 416(%rdi), %rcx
movq 424(%r10), %r8
movq %rcx, 416(%r10)
sbbq 424(%rdi), %r8
movq 432(%r10), %rax
movq %r8, 424(%r10)
sbbq 432(%rdi), %rax
movq 440(%r10), %rcx
movq %rax, 432(%r10)
sbbq 440(%rdi), %rcx
movq 448(%r10), %r8
movq %rcx, 440(%r10)
sbbq 448(%rdi), %r8
movq 456(%r10), %rax
movq %r8, 448(%r10)
sbbq 456(%rdi), %rax
movq 464(%r10), %rcx
movq %rax, 456(%r10)
sbbq 464(%rdi), %rcx
movq 472(%r10), %r8
movq %rcx, 464(%r10)
sbbq 472(%rdi), %r8
movq 480(%r10), %rax
movq %r8, 472(%r10)
sbbq 480(%rdi), %rax
movq 488(%r10), %rcx
movq %rax, 480(%r10)
sbbq 488(%rdi), %rcx
movq 496(%r10), %r8
movq %rcx, 488(%r10)
sbbq 496(%rdi), %r8
movq 504(%r10), %rax
movq %r8, 496(%r10)
sbbq 504(%rdi), %rax
movq %rax, 504(%r10)
sbbq $0x00, %r9
subq $0x100, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r10), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r10), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r10), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r10), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r10), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r10), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r10), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r10), %rcx
movq 256(%r15), %r8
movq %rcx, 248(%r15)
adcq 256(%r10), %r8
movq 264(%r15), %rax
movq %r8, 256(%r15)
adcq 264(%r10), %rax
movq 272(%r15), %rcx
movq %rax, 264(%r15)
adcq 272(%r10), %rcx
movq 280(%r15), %r8
movq %rcx, 272(%r15)
adcq 280(%r10), %r8
movq 288(%r15), %rax
movq %r8, 280(%r15)
adcq 288(%r10), %rax
movq 296(%r15), %rcx
movq %rax, 288(%r15)
adcq 296(%r10), %rcx
movq 304(%r15), %r8
movq %rcx, 296(%r15)
adcq 304(%r10), %r8
movq 312(%r15), %rax
movq %r8, 304(%r15)
adcq 312(%r10), %rax
movq 320(%r15), %rcx
movq %rax, 312(%r15)
adcq 320(%r10), %rcx
movq 328(%r15), %r8
movq %rcx, 320(%r15)
adcq 328(%r10), %r8
movq 336(%r15), %rax
movq %r8, 328(%r15)
adcq 336(%r10), %rax
movq 344(%r15), %rcx
movq %rax, 336(%r15)
adcq 344(%r10), %rcx
movq 352(%r15), %r8
movq %rcx, 344(%r15)
adcq 352(%r10), %r8
movq 360(%r15), %rax
movq %r8, 352(%r15)
adcq 360(%r10), %rax
movq 368(%r15), %rcx
movq %rax, 360(%r15)
adcq 368(%r10), %rcx
movq 376(%r15), %r8
movq %rcx, 368(%r15)
adcq 376(%r10), %r8
movq 384(%r15), %rax
movq %r8, 376(%r15)
adcq 384(%r10), %rax
movq 392(%r15), %rcx
movq %rax, 384(%r15)
adcq 392(%r10), %rcx
movq 400(%r15), %r8
movq %rcx, 392(%r15)
adcq 400(%r10), %r8
movq 408(%r15), %rax
movq %r8, 400(%r15)
adcq 408(%r10), %rax
movq 416(%r15), %rcx
movq %rax, 408(%r15)
adcq 416(%r10), %rcx
movq 424(%r15), %r8
movq %rcx, 416(%r15)
adcq 424(%r10), %r8
movq 432(%r15), %rax
movq %r8, 424(%r15)
adcq 432(%r10), %rax
movq 440(%r15), %rcx
movq %rax, 432(%r15)
adcq 440(%r10), %rcx
movq 448(%r15), %r8
movq %rcx, 440(%r15)
adcq 448(%r10), %r8
movq 456(%r15), %rax
movq %r8, 448(%r15)
adcq 456(%r10), %rax
movq 464(%r15), %rcx
movq %rax, 456(%r15)
adcq 464(%r10), %rcx
movq 472(%r15), %r8
movq %rcx, 464(%r15)
adcq 472(%r10), %r8
movq 480(%r15), %rax
movq %r8, 472(%r15)
adcq 480(%r10), %rax
movq 488(%r15), %rcx
movq %rax, 480(%r15)
adcq 488(%r10), %rcx
movq 496(%r15), %r8
movq %rcx, 488(%r15)
adcq 496(%r10), %r8
movq 504(%r15), %rax
movq %r8, 496(%r15)
adcq 504(%r10), %rax
movq %rax, 504(%r15)
adcq $0x00, %r9
movq %r9, 768(%rdi)
addq $0x100, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r11), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r11), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r11), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r11), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r11), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r11), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r11), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r11), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r11), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r11), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r11), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r11), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r11), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r11), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r11), %rcx
movq 256(%r15), %r8
movq %rcx, 248(%r15)
adcq 256(%r11), %r8
movq %r8, 256(%r15)
# Add to zero
movq 264(%r11), %rax
adcq $0x00, %rax
movq 272(%r11), %rcx
movq %rax, 264(%r15)
adcq $0x00, %rcx
movq 280(%r11), %r8
movq %rcx, 272(%r15)
adcq $0x00, %r8
movq 288(%r11), %rax
movq %r8, 280(%r15)
adcq $0x00, %rax
movq 296(%r11), %rcx
movq %rax, 288(%r15)
adcq $0x00, %rcx
movq 304(%r11), %r8
movq %rcx, 296(%r15)
adcq $0x00, %r8
movq 312(%r11), %rax
movq %r8, 304(%r15)
adcq $0x00, %rax
movq 320(%r11), %rcx
movq %rax, 312(%r15)
adcq $0x00, %rcx
movq 328(%r11), %r8
movq %rcx, 320(%r15)
adcq $0x00, %r8
movq 336(%r11), %rax
movq %r8, 328(%r15)
adcq $0x00, %rax
movq 344(%r11), %rcx
movq %rax, 336(%r15)
adcq $0x00, %rcx
movq 352(%r11), %r8
movq %rcx, 344(%r15)
adcq $0x00, %r8
movq 360(%r11), %rax
movq %r8, 352(%r15)
adcq $0x00, %rax
movq 368(%r11), %rcx
movq %rax, 360(%r15)
adcq $0x00, %rcx
movq 376(%r11), %r8
movq %rcx, 368(%r15)
adcq $0x00, %r8
movq 384(%r11), %rax
movq %r8, 376(%r15)
adcq $0x00, %rax
movq 392(%r11), %rcx
movq %rax, 384(%r15)
adcq $0x00, %rcx
movq 400(%r11), %r8
movq %rcx, 392(%r15)
adcq $0x00, %r8
movq 408(%r11), %rax
movq %r8, 400(%r15)
adcq $0x00, %rax
movq 416(%r11), %rcx
movq %rax, 408(%r15)
adcq $0x00, %rcx
movq 424(%r11), %r8
movq %rcx, 416(%r15)
adcq $0x00, %r8
movq 432(%r11), %rax
movq %r8, 424(%r15)
adcq $0x00, %rax
movq 440(%r11), %rcx
movq %rax, 432(%r15)
adcq $0x00, %rcx
movq 448(%r11), %r8
movq %rcx, 440(%r15)
adcq $0x00, %r8
movq 456(%r11), %rax
movq %r8, 448(%r15)
adcq $0x00, %rax
movq 464(%r11), %rcx
movq %rax, 456(%r15)
adcq $0x00, %rcx
movq 472(%r11), %r8
movq %rcx, 464(%r15)
adcq $0x00, %r8
movq 480(%r11), %rax
movq %r8, 472(%r15)
adcq $0x00, %rax
movq 488(%r11), %rcx
movq %rax, 480(%r15)
adcq $0x00, %rcx
movq 496(%r11), %r8
movq %rcx, 488(%r15)
adcq $0x00, %r8
movq 504(%r11), %rax
movq %r8, 496(%r15)
adcq $0x00, %rax
movq %rax, 504(%r15)
addq $0x628, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_4096_mul_64,.-sp_4096_mul_64
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_mul_avx2_64
.type sp_4096_mul_avx2_64,@function
.align 16
sp_4096_mul_avx2_64:
#else
.section __TEXT,__text
.globl _sp_4096_mul_avx2_64
.p2align 4
_sp_4096_mul_avx2_64:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x628, %rsp
movq %rdi, 1536(%rsp)
movq %rsi, 1544(%rsp)
movq %rdx, 1552(%rsp)
leaq 1024(%rsp), %r10
leaq 256(%rsi), %r12
# Add
movq (%rsi), %rax
xorq %r13, %r13
addq (%r12), %rax
movq 8(%rsi), %rcx
movq %rax, (%r10)
adcq 8(%r12), %rcx
movq 16(%rsi), %r8
movq %rcx, 8(%r10)
adcq 16(%r12), %r8
movq 24(%rsi), %rax
movq %r8, 16(%r10)
adcq 24(%r12), %rax
movq 32(%rsi), %rcx
movq %rax, 24(%r10)
adcq 32(%r12), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%r10)
adcq 40(%r12), %r8
movq 48(%rsi), %rax
movq %r8, 40(%r10)
adcq 48(%r12), %rax
movq 56(%rsi), %rcx
movq %rax, 48(%r10)
adcq 56(%r12), %rcx
movq 64(%rsi), %r8
movq %rcx, 56(%r10)
adcq 64(%r12), %r8
movq 72(%rsi), %rax
movq %r8, 64(%r10)
adcq 72(%r12), %rax
movq 80(%rsi), %rcx
movq %rax, 72(%r10)
adcq 80(%r12), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%r10)
adcq 88(%r12), %r8
movq 96(%rsi), %rax
movq %r8, 88(%r10)
adcq 96(%r12), %rax
movq 104(%rsi), %rcx
movq %rax, 96(%r10)
adcq 104(%r12), %rcx
movq 112(%rsi), %r8
movq %rcx, 104(%r10)
adcq 112(%r12), %r8
movq 120(%rsi), %rax
movq %r8, 112(%r10)
adcq 120(%r12), %rax
movq 128(%rsi), %rcx
movq %rax, 120(%r10)
adcq 128(%r12), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%r10)
adcq 136(%r12), %r8
movq 144(%rsi), %rax
movq %r8, 136(%r10)
adcq 144(%r12), %rax
movq 152(%rsi), %rcx
movq %rax, 144(%r10)
adcq 152(%r12), %rcx
movq 160(%rsi), %r8
movq %rcx, 152(%r10)
adcq 160(%r12), %r8
movq 168(%rsi), %rax
movq %r8, 160(%r10)
adcq 168(%r12), %rax
movq 176(%rsi), %rcx
movq %rax, 168(%r10)
adcq 176(%r12), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%r10)
adcq 184(%r12), %r8
movq 192(%rsi), %rax
movq %r8, 184(%r10)
adcq 192(%r12), %rax
movq 200(%rsi), %rcx
movq %rax, 192(%r10)
adcq 200(%r12), %rcx
movq 208(%rsi), %r8
movq %rcx, 200(%r10)
adcq 208(%r12), %r8
movq 216(%rsi), %rax
movq %r8, 208(%r10)
adcq 216(%r12), %rax
movq 224(%rsi), %rcx
movq %rax, 216(%r10)
adcq 224(%r12), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%r10)
adcq 232(%r12), %r8
movq 240(%rsi), %rax
movq %r8, 232(%r10)
adcq 240(%r12), %rax
movq 248(%rsi), %rcx
movq %rax, 240(%r10)
adcq 248(%r12), %rcx
movq %rcx, 248(%r10)
adcq $0x00, %r13
movq %r13, 1560(%rsp)
leaq 1280(%rsp), %r11
leaq 256(%rdx), %r12
# Add
movq (%rdx), %rax
xorq %r14, %r14
addq (%r12), %rax
movq 8(%rdx), %rcx
movq %rax, (%r11)
adcq 8(%r12), %rcx
movq 16(%rdx), %r8
movq %rcx, 8(%r11)
adcq 16(%r12), %r8
movq 24(%rdx), %rax
movq %r8, 16(%r11)
adcq 24(%r12), %rax
movq 32(%rdx), %rcx
movq %rax, 24(%r11)
adcq 32(%r12), %rcx
movq 40(%rdx), %r8
movq %rcx, 32(%r11)
adcq 40(%r12), %r8
movq 48(%rdx), %rax
movq %r8, 40(%r11)
adcq 48(%r12), %rax
movq 56(%rdx), %rcx
movq %rax, 48(%r11)
adcq 56(%r12), %rcx
movq 64(%rdx), %r8
movq %rcx, 56(%r11)
adcq 64(%r12), %r8
movq 72(%rdx), %rax
movq %r8, 64(%r11)
adcq 72(%r12), %rax
movq 80(%rdx), %rcx
movq %rax, 72(%r11)
adcq 80(%r12), %rcx
movq 88(%rdx), %r8
movq %rcx, 80(%r11)
adcq 88(%r12), %r8
movq 96(%rdx), %rax
movq %r8, 88(%r11)
adcq 96(%r12), %rax
movq 104(%rdx), %rcx
movq %rax, 96(%r11)
adcq 104(%r12), %rcx
movq 112(%rdx), %r8
movq %rcx, 104(%r11)
adcq 112(%r12), %r8
movq 120(%rdx), %rax
movq %r8, 112(%r11)
adcq 120(%r12), %rax
movq 128(%rdx), %rcx
movq %rax, 120(%r11)
adcq 128(%r12), %rcx
movq 136(%rdx), %r8
movq %rcx, 128(%r11)
adcq 136(%r12), %r8
movq 144(%rdx), %rax
movq %r8, 136(%r11)
adcq 144(%r12), %rax
movq 152(%rdx), %rcx
movq %rax, 144(%r11)
adcq 152(%r12), %rcx
movq 160(%rdx), %r8
movq %rcx, 152(%r11)
adcq 160(%r12), %r8
movq 168(%rdx), %rax
movq %r8, 160(%r11)
adcq 168(%r12), %rax
movq 176(%rdx), %rcx
movq %rax, 168(%r11)
adcq 176(%r12), %rcx
movq 184(%rdx), %r8
movq %rcx, 176(%r11)
adcq 184(%r12), %r8
movq 192(%rdx), %rax
movq %r8, 184(%r11)
adcq 192(%r12), %rax
movq 200(%rdx), %rcx
movq %rax, 192(%r11)
adcq 200(%r12), %rcx
movq 208(%rdx), %r8
movq %rcx, 200(%r11)
adcq 208(%r12), %r8
movq 216(%rdx), %rax
movq %r8, 208(%r11)
adcq 216(%r12), %rax
movq 224(%rdx), %rcx
movq %rax, 216(%r11)
adcq 224(%r12), %rcx
movq 232(%rdx), %r8
movq %rcx, 224(%r11)
adcq 232(%r12), %r8
movq 240(%rdx), %rax
movq %r8, 232(%r11)
adcq 240(%r12), %rax
movq 248(%rdx), %rcx
movq %rax, 240(%r11)
adcq 248(%r12), %rcx
movq %rcx, 248(%r11)
adcq $0x00, %r14
movq %r14, 1568(%rsp)
movq %r11, %rdx
movq %r10, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_mul_avx2_32@plt
#else
callq _sp_2048_mul_avx2_32
#endif /* __APPLE__ */
movq 1552(%rsp), %rdx
movq 1544(%rsp), %rsi
leaq 512(%rsp), %rdi
addq $0x100, %rdx
addq $0x100, %rsi
#ifndef __APPLE__
callq sp_2048_mul_avx2_32@plt
#else
callq _sp_2048_mul_avx2_32
#endif /* __APPLE__ */
movq 1552(%rsp), %rdx
movq 1544(%rsp), %rsi
movq 1536(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_mul_avx2_32@plt
#else
callq _sp_2048_mul_avx2_32
#endif /* __APPLE__ */
#ifdef _WIN64
movq 1552(%rsp), %rdx
movq 1544(%rsp), %rsi
movq 1536(%rsp), %rdi
#endif /* _WIN64 */
movq 1560(%rsp), %r13
movq 1568(%rsp), %r14
movq 1536(%rsp), %r15
movq %r13, %r9
leaq 1024(%rsp), %r10
leaq 1280(%rsp), %r11
andq %r14, %r9
negq %r13
negq %r14
addq $0x200, %r15
movq (%r10), %rax
movq (%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
addq %rcx, %rax
movq 8(%r10), %rcx
movq 8(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, (%r15)
adcq %r8, %rcx
movq 16(%r10), %r8
movq 16(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 8(%r15)
adcq %rax, %r8
movq 24(%r10), %rax
movq 24(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 16(%r15)
adcq %rcx, %rax
movq 32(%r10), %rcx
movq 32(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 24(%r15)
adcq %r8, %rcx
movq 40(%r10), %r8
movq 40(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 32(%r15)
adcq %rax, %r8
movq 48(%r10), %rax
movq 48(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 40(%r15)
adcq %rcx, %rax
movq 56(%r10), %rcx
movq 56(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 48(%r15)
adcq %r8, %rcx
movq 64(%r10), %r8
movq 64(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 56(%r15)
adcq %rax, %r8
movq 72(%r10), %rax
movq 72(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 64(%r15)
adcq %rcx, %rax
movq 80(%r10), %rcx
movq 80(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 72(%r15)
adcq %r8, %rcx
movq 88(%r10), %r8
movq 88(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 80(%r15)
adcq %rax, %r8
movq 96(%r10), %rax
movq 96(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 88(%r15)
adcq %rcx, %rax
movq 104(%r10), %rcx
movq 104(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 96(%r15)
adcq %r8, %rcx
movq 112(%r10), %r8
movq 112(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 104(%r15)
adcq %rax, %r8
movq 120(%r10), %rax
movq 120(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 112(%r15)
adcq %rcx, %rax
movq 128(%r10), %rcx
movq 128(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 120(%r15)
adcq %r8, %rcx
movq 136(%r10), %r8
movq 136(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 128(%r15)
adcq %rax, %r8
movq 144(%r10), %rax
movq 144(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 136(%r15)
adcq %rcx, %rax
movq 152(%r10), %rcx
movq 152(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 144(%r15)
adcq %r8, %rcx
movq 160(%r10), %r8
movq 160(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 152(%r15)
adcq %rax, %r8
movq 168(%r10), %rax
movq 168(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 160(%r15)
adcq %rcx, %rax
movq 176(%r10), %rcx
movq 176(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 168(%r15)
adcq %r8, %rcx
movq 184(%r10), %r8
movq 184(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 176(%r15)
adcq %rax, %r8
movq 192(%r10), %rax
movq 192(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 184(%r15)
adcq %rcx, %rax
movq 200(%r10), %rcx
movq 200(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 192(%r15)
adcq %r8, %rcx
movq 208(%r10), %r8
movq 208(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 200(%r15)
adcq %rax, %r8
movq 216(%r10), %rax
movq 216(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 208(%r15)
adcq %rcx, %rax
movq 224(%r10), %rcx
movq 224(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 216(%r15)
adcq %r8, %rcx
movq 232(%r10), %r8
movq 232(%r11), %rax
pextq %r14, %r8, %r8
pextq %r13, %rax, %rax
movq %rcx, 224(%r15)
adcq %rax, %r8
movq 240(%r10), %rax
movq 240(%r11), %rcx
pextq %r14, %rax, %rax
pextq %r13, %rcx, %rcx
movq %r8, 232(%r15)
adcq %rcx, %rax
movq 248(%r10), %rcx
movq 248(%r11), %r8
pextq %r14, %rcx, %rcx
pextq %r13, %r8, %r8
movq %rax, 240(%r15)
adcq %r8, %rcx
movq %rcx, 248(%r15)
adcq $0x00, %r9
leaq 512(%rsp), %r11
movq %rsp, %r10
movq (%r10), %rax
subq (%r11), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%r11), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%r11), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%r11), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%r11), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%r11), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%r11), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%r11), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%r11), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%r11), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%r11), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%r11), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%r11), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%r11), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%r11), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%r11), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%r11), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%r11), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%r11), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%r11), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%r11), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%r11), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%r11), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%r11), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%r11), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%r11), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%r11), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%r11), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%r11), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%r11), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%r11), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%r11), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%r11), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%r11), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%r11), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%r11), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%r11), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%r11), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%r11), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%r11), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%r11), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%r11), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%r11), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%r11), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%r11), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%r11), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%r11), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%r11), %r8
movq 384(%r10), %rax
movq %r8, 376(%r10)
sbbq 384(%r11), %rax
movq 392(%r10), %rcx
movq %rax, 384(%r10)
sbbq 392(%r11), %rcx
movq 400(%r10), %r8
movq %rcx, 392(%r10)
sbbq 400(%r11), %r8
movq 408(%r10), %rax
movq %r8, 400(%r10)
sbbq 408(%r11), %rax
movq 416(%r10), %rcx
movq %rax, 408(%r10)
sbbq 416(%r11), %rcx
movq 424(%r10), %r8
movq %rcx, 416(%r10)
sbbq 424(%r11), %r8
movq 432(%r10), %rax
movq %r8, 424(%r10)
sbbq 432(%r11), %rax
movq 440(%r10), %rcx
movq %rax, 432(%r10)
sbbq 440(%r11), %rcx
movq 448(%r10), %r8
movq %rcx, 440(%r10)
sbbq 448(%r11), %r8
movq 456(%r10), %rax
movq %r8, 448(%r10)
sbbq 456(%r11), %rax
movq 464(%r10), %rcx
movq %rax, 456(%r10)
sbbq 464(%r11), %rcx
movq 472(%r10), %r8
movq %rcx, 464(%r10)
sbbq 472(%r11), %r8
movq 480(%r10), %rax
movq %r8, 472(%r10)
sbbq 480(%r11), %rax
movq 488(%r10), %rcx
movq %rax, 480(%r10)
sbbq 488(%r11), %rcx
movq 496(%r10), %r8
movq %rcx, 488(%r10)
sbbq 496(%r11), %r8
movq 504(%r10), %rax
movq %r8, 496(%r10)
sbbq 504(%r11), %rax
movq %rax, 504(%r10)
sbbq $0x00, %r9
movq (%r10), %rax
subq (%rdi), %rax
movq 8(%r10), %rcx
movq %rax, (%r10)
sbbq 8(%rdi), %rcx
movq 16(%r10), %r8
movq %rcx, 8(%r10)
sbbq 16(%rdi), %r8
movq 24(%r10), %rax
movq %r8, 16(%r10)
sbbq 24(%rdi), %rax
movq 32(%r10), %rcx
movq %rax, 24(%r10)
sbbq 32(%rdi), %rcx
movq 40(%r10), %r8
movq %rcx, 32(%r10)
sbbq 40(%rdi), %r8
movq 48(%r10), %rax
movq %r8, 40(%r10)
sbbq 48(%rdi), %rax
movq 56(%r10), %rcx
movq %rax, 48(%r10)
sbbq 56(%rdi), %rcx
movq 64(%r10), %r8
movq %rcx, 56(%r10)
sbbq 64(%rdi), %r8
movq 72(%r10), %rax
movq %r8, 64(%r10)
sbbq 72(%rdi), %rax
movq 80(%r10), %rcx
movq %rax, 72(%r10)
sbbq 80(%rdi), %rcx
movq 88(%r10), %r8
movq %rcx, 80(%r10)
sbbq 88(%rdi), %r8
movq 96(%r10), %rax
movq %r8, 88(%r10)
sbbq 96(%rdi), %rax
movq 104(%r10), %rcx
movq %rax, 96(%r10)
sbbq 104(%rdi), %rcx
movq 112(%r10), %r8
movq %rcx, 104(%r10)
sbbq 112(%rdi), %r8
movq 120(%r10), %rax
movq %r8, 112(%r10)
sbbq 120(%rdi), %rax
movq 128(%r10), %rcx
movq %rax, 120(%r10)
sbbq 128(%rdi), %rcx
movq 136(%r10), %r8
movq %rcx, 128(%r10)
sbbq 136(%rdi), %r8
movq 144(%r10), %rax
movq %r8, 136(%r10)
sbbq 144(%rdi), %rax
movq 152(%r10), %rcx
movq %rax, 144(%r10)
sbbq 152(%rdi), %rcx
movq 160(%r10), %r8
movq %rcx, 152(%r10)
sbbq 160(%rdi), %r8
movq 168(%r10), %rax
movq %r8, 160(%r10)
sbbq 168(%rdi), %rax
movq 176(%r10), %rcx
movq %rax, 168(%r10)
sbbq 176(%rdi), %rcx
movq 184(%r10), %r8
movq %rcx, 176(%r10)
sbbq 184(%rdi), %r8
movq 192(%r10), %rax
movq %r8, 184(%r10)
sbbq 192(%rdi), %rax
movq 200(%r10), %rcx
movq %rax, 192(%r10)
sbbq 200(%rdi), %rcx
movq 208(%r10), %r8
movq %rcx, 200(%r10)
sbbq 208(%rdi), %r8
movq 216(%r10), %rax
movq %r8, 208(%r10)
sbbq 216(%rdi), %rax
movq 224(%r10), %rcx
movq %rax, 216(%r10)
sbbq 224(%rdi), %rcx
movq 232(%r10), %r8
movq %rcx, 224(%r10)
sbbq 232(%rdi), %r8
movq 240(%r10), %rax
movq %r8, 232(%r10)
sbbq 240(%rdi), %rax
movq 248(%r10), %rcx
movq %rax, 240(%r10)
sbbq 248(%rdi), %rcx
movq 256(%r10), %r8
movq %rcx, 248(%r10)
sbbq 256(%rdi), %r8
movq 264(%r10), %rax
movq %r8, 256(%r10)
sbbq 264(%rdi), %rax
movq 272(%r10), %rcx
movq %rax, 264(%r10)
sbbq 272(%rdi), %rcx
movq 280(%r10), %r8
movq %rcx, 272(%r10)
sbbq 280(%rdi), %r8
movq 288(%r10), %rax
movq %r8, 280(%r10)
sbbq 288(%rdi), %rax
movq 296(%r10), %rcx
movq %rax, 288(%r10)
sbbq 296(%rdi), %rcx
movq 304(%r10), %r8
movq %rcx, 296(%r10)
sbbq 304(%rdi), %r8
movq 312(%r10), %rax
movq %r8, 304(%r10)
sbbq 312(%rdi), %rax
movq 320(%r10), %rcx
movq %rax, 312(%r10)
sbbq 320(%rdi), %rcx
movq 328(%r10), %r8
movq %rcx, 320(%r10)
sbbq 328(%rdi), %r8
movq 336(%r10), %rax
movq %r8, 328(%r10)
sbbq 336(%rdi), %rax
movq 344(%r10), %rcx
movq %rax, 336(%r10)
sbbq 344(%rdi), %rcx
movq 352(%r10), %r8
movq %rcx, 344(%r10)
sbbq 352(%rdi), %r8
movq 360(%r10), %rax
movq %r8, 352(%r10)
sbbq 360(%rdi), %rax
movq 368(%r10), %rcx
movq %rax, 360(%r10)
sbbq 368(%rdi), %rcx
movq 376(%r10), %r8
movq %rcx, 368(%r10)
sbbq 376(%rdi), %r8
movq 384(%r10), %rax
movq %r8, 376(%r10)
sbbq 384(%rdi), %rax
movq 392(%r10), %rcx
movq %rax, 384(%r10)
sbbq 392(%rdi), %rcx
movq 400(%r10), %r8
movq %rcx, 392(%r10)
sbbq 400(%rdi), %r8
movq 408(%r10), %rax
movq %r8, 400(%r10)
sbbq 408(%rdi), %rax
movq 416(%r10), %rcx
movq %rax, 408(%r10)
sbbq 416(%rdi), %rcx
movq 424(%r10), %r8
movq %rcx, 416(%r10)
sbbq 424(%rdi), %r8
movq 432(%r10), %rax
movq %r8, 424(%r10)
sbbq 432(%rdi), %rax
movq 440(%r10), %rcx
movq %rax, 432(%r10)
sbbq 440(%rdi), %rcx
movq 448(%r10), %r8
movq %rcx, 440(%r10)
sbbq 448(%rdi), %r8
movq 456(%r10), %rax
movq %r8, 448(%r10)
sbbq 456(%rdi), %rax
movq 464(%r10), %rcx
movq %rax, 456(%r10)
sbbq 464(%rdi), %rcx
movq 472(%r10), %r8
movq %rcx, 464(%r10)
sbbq 472(%rdi), %r8
movq 480(%r10), %rax
movq %r8, 472(%r10)
sbbq 480(%rdi), %rax
movq 488(%r10), %rcx
movq %rax, 480(%r10)
sbbq 488(%rdi), %rcx
movq 496(%r10), %r8
movq %rcx, 488(%r10)
sbbq 496(%rdi), %r8
movq 504(%r10), %rax
movq %r8, 496(%r10)
sbbq 504(%rdi), %rax
movq %rax, 504(%r10)
sbbq $0x00, %r9
subq $0x100, %r15
# Add
movq (%r15), %rax
addq (%r10), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r10), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r10), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r10), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r10), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r10), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r10), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r10), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r10), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r10), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r10), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r10), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r10), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r10), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r10), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r10), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r10), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r10), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r10), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r10), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r10), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r10), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r10), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r10), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r10), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r10), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r10), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r10), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r10), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r10), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r10), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r10), %rcx
movq 256(%r15), %r8
movq %rcx, 248(%r15)
adcq 256(%r10), %r8
movq 264(%r15), %rax
movq %r8, 256(%r15)
adcq 264(%r10), %rax
movq 272(%r15), %rcx
movq %rax, 264(%r15)
adcq 272(%r10), %rcx
movq 280(%r15), %r8
movq %rcx, 272(%r15)
adcq 280(%r10), %r8
movq 288(%r15), %rax
movq %r8, 280(%r15)
adcq 288(%r10), %rax
movq 296(%r15), %rcx
movq %rax, 288(%r15)
adcq 296(%r10), %rcx
movq 304(%r15), %r8
movq %rcx, 296(%r15)
adcq 304(%r10), %r8
movq 312(%r15), %rax
movq %r8, 304(%r15)
adcq 312(%r10), %rax
movq 320(%r15), %rcx
movq %rax, 312(%r15)
adcq 320(%r10), %rcx
movq 328(%r15), %r8
movq %rcx, 320(%r15)
adcq 328(%r10), %r8
movq 336(%r15), %rax
movq %r8, 328(%r15)
adcq 336(%r10), %rax
movq 344(%r15), %rcx
movq %rax, 336(%r15)
adcq 344(%r10), %rcx
movq 352(%r15), %r8
movq %rcx, 344(%r15)
adcq 352(%r10), %r8
movq 360(%r15), %rax
movq %r8, 352(%r15)
adcq 360(%r10), %rax
movq 368(%r15), %rcx
movq %rax, 360(%r15)
adcq 368(%r10), %rcx
movq 376(%r15), %r8
movq %rcx, 368(%r15)
adcq 376(%r10), %r8
movq 384(%r15), %rax
movq %r8, 376(%r15)
adcq 384(%r10), %rax
movq 392(%r15), %rcx
movq %rax, 384(%r15)
adcq 392(%r10), %rcx
movq 400(%r15), %r8
movq %rcx, 392(%r15)
adcq 400(%r10), %r8
movq 408(%r15), %rax
movq %r8, 400(%r15)
adcq 408(%r10), %rax
movq 416(%r15), %rcx
movq %rax, 408(%r15)
adcq 416(%r10), %rcx
movq 424(%r15), %r8
movq %rcx, 416(%r15)
adcq 424(%r10), %r8
movq 432(%r15), %rax
movq %r8, 424(%r15)
adcq 432(%r10), %rax
movq 440(%r15), %rcx
movq %rax, 432(%r15)
adcq 440(%r10), %rcx
movq 448(%r15), %r8
movq %rcx, 440(%r15)
adcq 448(%r10), %r8
movq 456(%r15), %rax
movq %r8, 448(%r15)
adcq 456(%r10), %rax
movq 464(%r15), %rcx
movq %rax, 456(%r15)
adcq 464(%r10), %rcx
movq 472(%r15), %r8
movq %rcx, 464(%r15)
adcq 472(%r10), %r8
movq 480(%r15), %rax
movq %r8, 472(%r15)
adcq 480(%r10), %rax
movq 488(%r15), %rcx
movq %rax, 480(%r15)
adcq 488(%r10), %rcx
movq 496(%r15), %r8
movq %rcx, 488(%r15)
adcq 496(%r10), %r8
movq 504(%r15), %rax
movq %r8, 496(%r15)
adcq 504(%r10), %rax
movq %rax, 504(%r15)
adcq $0x00, %r9
movq %r9, 768(%rdi)
addq $0x100, %r15
# Add
movq (%r15), %rax
addq (%r11), %rax
movq 8(%r15), %rcx
movq %rax, (%r15)
adcq 8(%r11), %rcx
movq 16(%r15), %r8
movq %rcx, 8(%r15)
adcq 16(%r11), %r8
movq 24(%r15), %rax
movq %r8, 16(%r15)
adcq 24(%r11), %rax
movq 32(%r15), %rcx
movq %rax, 24(%r15)
adcq 32(%r11), %rcx
movq 40(%r15), %r8
movq %rcx, 32(%r15)
adcq 40(%r11), %r8
movq 48(%r15), %rax
movq %r8, 40(%r15)
adcq 48(%r11), %rax
movq 56(%r15), %rcx
movq %rax, 48(%r15)
adcq 56(%r11), %rcx
movq 64(%r15), %r8
movq %rcx, 56(%r15)
adcq 64(%r11), %r8
movq 72(%r15), %rax
movq %r8, 64(%r15)
adcq 72(%r11), %rax
movq 80(%r15), %rcx
movq %rax, 72(%r15)
adcq 80(%r11), %rcx
movq 88(%r15), %r8
movq %rcx, 80(%r15)
adcq 88(%r11), %r8
movq 96(%r15), %rax
movq %r8, 88(%r15)
adcq 96(%r11), %rax
movq 104(%r15), %rcx
movq %rax, 96(%r15)
adcq 104(%r11), %rcx
movq 112(%r15), %r8
movq %rcx, 104(%r15)
adcq 112(%r11), %r8
movq 120(%r15), %rax
movq %r8, 112(%r15)
adcq 120(%r11), %rax
movq 128(%r15), %rcx
movq %rax, 120(%r15)
adcq 128(%r11), %rcx
movq 136(%r15), %r8
movq %rcx, 128(%r15)
adcq 136(%r11), %r8
movq 144(%r15), %rax
movq %r8, 136(%r15)
adcq 144(%r11), %rax
movq 152(%r15), %rcx
movq %rax, 144(%r15)
adcq 152(%r11), %rcx
movq 160(%r15), %r8
movq %rcx, 152(%r15)
adcq 160(%r11), %r8
movq 168(%r15), %rax
movq %r8, 160(%r15)
adcq 168(%r11), %rax
movq 176(%r15), %rcx
movq %rax, 168(%r15)
adcq 176(%r11), %rcx
movq 184(%r15), %r8
movq %rcx, 176(%r15)
adcq 184(%r11), %r8
movq 192(%r15), %rax
movq %r8, 184(%r15)
adcq 192(%r11), %rax
movq 200(%r15), %rcx
movq %rax, 192(%r15)
adcq 200(%r11), %rcx
movq 208(%r15), %r8
movq %rcx, 200(%r15)
adcq 208(%r11), %r8
movq 216(%r15), %rax
movq %r8, 208(%r15)
adcq 216(%r11), %rax
movq 224(%r15), %rcx
movq %rax, 216(%r15)
adcq 224(%r11), %rcx
movq 232(%r15), %r8
movq %rcx, 224(%r15)
adcq 232(%r11), %r8
movq 240(%r15), %rax
movq %r8, 232(%r15)
adcq 240(%r11), %rax
movq 248(%r15), %rcx
movq %rax, 240(%r15)
adcq 248(%r11), %rcx
movq 256(%r15), %r8
movq %rcx, 248(%r15)
adcq 256(%r11), %r8
movq %r8, 256(%r15)
# Add to zero
movq 264(%r11), %rax
adcq $0x00, %rax
movq 272(%r11), %rcx
movq %rax, 264(%r15)
adcq $0x00, %rcx
movq 280(%r11), %r8
movq %rcx, 272(%r15)
adcq $0x00, %r8
movq 288(%r11), %rax
movq %r8, 280(%r15)
adcq $0x00, %rax
movq 296(%r11), %rcx
movq %rax, 288(%r15)
adcq $0x00, %rcx
movq 304(%r11), %r8
movq %rcx, 296(%r15)
adcq $0x00, %r8
movq 312(%r11), %rax
movq %r8, 304(%r15)
adcq $0x00, %rax
movq 320(%r11), %rcx
movq %rax, 312(%r15)
adcq $0x00, %rcx
movq 328(%r11), %r8
movq %rcx, 320(%r15)
adcq $0x00, %r8
movq 336(%r11), %rax
movq %r8, 328(%r15)
adcq $0x00, %rax
movq 344(%r11), %rcx
movq %rax, 336(%r15)
adcq $0x00, %rcx
movq 352(%r11), %r8
movq %rcx, 344(%r15)
adcq $0x00, %r8
movq 360(%r11), %rax
movq %r8, 352(%r15)
adcq $0x00, %rax
movq 368(%r11), %rcx
movq %rax, 360(%r15)
adcq $0x00, %rcx
movq 376(%r11), %r8
movq %rcx, 368(%r15)
adcq $0x00, %r8
movq 384(%r11), %rax
movq %r8, 376(%r15)
adcq $0x00, %rax
movq 392(%r11), %rcx
movq %rax, 384(%r15)
adcq $0x00, %rcx
movq 400(%r11), %r8
movq %rcx, 392(%r15)
adcq $0x00, %r8
movq 408(%r11), %rax
movq %r8, 400(%r15)
adcq $0x00, %rax
movq 416(%r11), %rcx
movq %rax, 408(%r15)
adcq $0x00, %rcx
movq 424(%r11), %r8
movq %rcx, 416(%r15)
adcq $0x00, %r8
movq 432(%r11), %rax
movq %r8, 424(%r15)
adcq $0x00, %rax
movq 440(%r11), %rcx
movq %rax, 432(%r15)
adcq $0x00, %rcx
movq 448(%r11), %r8
movq %rcx, 440(%r15)
adcq $0x00, %r8
movq 456(%r11), %rax
movq %r8, 448(%r15)
adcq $0x00, %rax
movq 464(%r11), %rcx
movq %rax, 456(%r15)
adcq $0x00, %rcx
movq 472(%r11), %r8
movq %rcx, 464(%r15)
adcq $0x00, %r8
movq 480(%r11), %rax
movq %r8, 472(%r15)
adcq $0x00, %rax
movq 488(%r11), %rcx
movq %rax, 480(%r15)
adcq $0x00, %rcx
movq 496(%r11), %r8
movq %rcx, 488(%r15)
adcq $0x00, %r8
movq 504(%r11), %rax
movq %r8, 496(%r15)
adcq $0x00, %rax
movq %rax, 504(%r15)
addq $0x628, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_4096_mul_avx2_64,.-sp_4096_mul_avx2_64
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_sqr_64
.type sp_4096_sqr_64,@function
.align 16
sp_4096_sqr_64:
#else
.section __TEXT,__text
.globl _sp_4096_sqr_64
.p2align 4
_sp_4096_sqr_64:
#endif /* __APPLE__ */
subq $0x210, %rsp
movq %rdi, 512(%rsp)
movq %rsi, 520(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 256(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq 96(%rsi), %rdx
movq %rax, 88(%r8)
sbbq 96(%r9), %rdx
movq 104(%rsi), %rax
movq %rdx, 96(%r8)
sbbq 104(%r9), %rax
movq 112(%rsi), %rdx
movq %rax, 104(%r8)
sbbq 112(%r9), %rdx
movq 120(%rsi), %rax
movq %rdx, 112(%r8)
sbbq 120(%r9), %rax
movq 128(%rsi), %rdx
movq %rax, 120(%r8)
sbbq 128(%r9), %rdx
movq 136(%rsi), %rax
movq %rdx, 128(%r8)
sbbq 136(%r9), %rax
movq 144(%rsi), %rdx
movq %rax, 136(%r8)
sbbq 144(%r9), %rdx
movq 152(%rsi), %rax
movq %rdx, 144(%r8)
sbbq 152(%r9), %rax
movq 160(%rsi), %rdx
movq %rax, 152(%r8)
sbbq 160(%r9), %rdx
movq 168(%rsi), %rax
movq %rdx, 160(%r8)
sbbq 168(%r9), %rax
movq 176(%rsi), %rdx
movq %rax, 168(%r8)
sbbq 176(%r9), %rdx
movq 184(%rsi), %rax
movq %rdx, 176(%r8)
sbbq 184(%r9), %rax
movq 192(%rsi), %rdx
movq %rax, 184(%r8)
sbbq 192(%r9), %rdx
movq 200(%rsi), %rax
movq %rdx, 192(%r8)
sbbq 200(%r9), %rax
movq 208(%rsi), %rdx
movq %rax, 200(%r8)
sbbq 208(%r9), %rdx
movq 216(%rsi), %rax
movq %rdx, 208(%r8)
sbbq 216(%r9), %rax
movq 224(%rsi), %rdx
movq %rax, 216(%r8)
sbbq 224(%r9), %rdx
movq 232(%rsi), %rax
movq %rdx, 224(%r8)
sbbq 232(%r9), %rax
movq 240(%rsi), %rdx
movq %rax, 232(%r8)
sbbq 240(%r9), %rdx
movq 248(%rsi), %rax
movq %rdx, 240(%r8)
sbbq 248(%r9), %rax
movq %rax, 248(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 96(%r8), %rdx
setc %r9b
movq %rax, 88(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 104(%r8), %rax
setc %r9b
movq %rdx, 96(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 112(%r8), %rdx
setc %r9b
movq %rax, 104(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 120(%r8), %rax
setc %r9b
movq %rdx, 112(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 128(%r8), %rdx
setc %r9b
movq %rax, 120(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 136(%r8), %rax
setc %r9b
movq %rdx, 128(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 144(%r8), %rdx
setc %r9b
movq %rax, 136(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 152(%r8), %rax
setc %r9b
movq %rdx, 144(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 160(%r8), %rdx
setc %r9b
movq %rax, 152(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 168(%r8), %rax
setc %r9b
movq %rdx, 160(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 176(%r8), %rdx
setc %r9b
movq %rax, 168(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 184(%r8), %rax
setc %r9b
movq %rdx, 176(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 192(%r8), %rdx
setc %r9b
movq %rax, 184(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 200(%r8), %rax
setc %r9b
movq %rdx, 192(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 208(%r8), %rdx
setc %r9b
movq %rax, 200(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 216(%r8), %rax
setc %r9b
movq %rdx, 208(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 224(%r8), %rdx
setc %r9b
movq %rax, 216(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 232(%r8), %rax
setc %r9b
movq %rdx, 224(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 240(%r8), %rdx
setc %r9b
movq %rax, 232(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 248(%r8), %rax
setc %r9b
movq %rdx, 240(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 248(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_32@plt
#else
callq _sp_2048_sqr_32
#endif /* __APPLE__ */
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
addq $0x100, %rsi
addq $0x200, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_32@plt
#else
callq _sp_2048_sqr_32
#endif /* __APPLE__ */
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_sqr_32@plt
#else
callq _sp_2048_sqr_32
#endif /* __APPLE__ */
#ifdef _WIN64
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
#endif /* _WIN64 */
movq 512(%rsp), %rsi
leaq 256(%rsp), %r8
addq $0x300, %rsi
movq $0x00, %rcx
movq -256(%r8), %rax
subq -256(%rsi), %rax
movq -248(%r8), %rdx
movq %rax, -256(%r8)
sbbq -248(%rsi), %rdx
movq -240(%r8), %rax
movq %rdx, -248(%r8)
sbbq -240(%rsi), %rax
movq -232(%r8), %rdx
movq %rax, -240(%r8)
sbbq -232(%rsi), %rdx
movq -224(%r8), %rax
movq %rdx, -232(%r8)
sbbq -224(%rsi), %rax
movq -216(%r8), %rdx
movq %rax, -224(%r8)
sbbq -216(%rsi), %rdx
movq -208(%r8), %rax
movq %rdx, -216(%r8)
sbbq -208(%rsi), %rax
movq -200(%r8), %rdx
movq %rax, -208(%r8)
sbbq -200(%rsi), %rdx
movq -192(%r8), %rax
movq %rdx, -200(%r8)
sbbq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq 192(%r8), %rax
movq %rdx, 184(%r8)
sbbq 192(%rsi), %rax
movq 200(%r8), %rdx
movq %rax, 192(%r8)
sbbq 200(%rsi), %rdx
movq 208(%r8), %rax
movq %rdx, 200(%r8)
sbbq 208(%rsi), %rax
movq 216(%r8), %rdx
movq %rax, 208(%r8)
sbbq 216(%rsi), %rdx
movq 224(%r8), %rax
movq %rdx, 216(%r8)
sbbq 224(%rsi), %rax
movq 232(%r8), %rdx
movq %rax, 224(%r8)
sbbq 232(%rsi), %rdx
movq 240(%r8), %rax
movq %rdx, 232(%r8)
sbbq 240(%rsi), %rax
movq 248(%r8), %rdx
movq %rax, 240(%r8)
sbbq 248(%rsi), %rdx
movq %rdx, 248(%r8)
sbbq $0x00, %rcx
subq $0x200, %rsi
movq -256(%r8), %rax
subq -256(%rsi), %rax
movq -248(%r8), %rdx
movq %rax, -256(%r8)
sbbq -248(%rsi), %rdx
movq -240(%r8), %rax
movq %rdx, -248(%r8)
sbbq -240(%rsi), %rax
movq -232(%r8), %rdx
movq %rax, -240(%r8)
sbbq -232(%rsi), %rdx
movq -224(%r8), %rax
movq %rdx, -232(%r8)
sbbq -224(%rsi), %rax
movq -216(%r8), %rdx
movq %rax, -224(%r8)
sbbq -216(%rsi), %rdx
movq -208(%r8), %rax
movq %rdx, -216(%r8)
sbbq -208(%rsi), %rax
movq -200(%r8), %rdx
movq %rax, -208(%r8)
sbbq -200(%rsi), %rdx
movq -192(%r8), %rax
movq %rdx, -200(%r8)
sbbq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq 192(%r8), %rax
movq %rdx, 184(%r8)
sbbq 192(%rsi), %rax
movq 200(%r8), %rdx
movq %rax, 192(%r8)
sbbq 200(%rsi), %rdx
movq 208(%r8), %rax
movq %rdx, 200(%r8)
sbbq 208(%rsi), %rax
movq 216(%r8), %rdx
movq %rax, 208(%r8)
sbbq 216(%rsi), %rdx
movq 224(%r8), %rax
movq %rdx, 216(%r8)
sbbq 224(%rsi), %rax
movq 232(%r8), %rdx
movq %rax, 224(%r8)
sbbq 232(%rsi), %rdx
movq 240(%r8), %rax
movq %rdx, 232(%r8)
sbbq 240(%rsi), %rax
movq 248(%r8), %rdx
movq %rax, 240(%r8)
sbbq 248(%rsi), %rdx
movq %rdx, 248(%r8)
sbbq $0x00, %rcx
movq 512(%rsp), %rdi
negq %rcx
addq $0x200, %rdi
movq -256(%rdi), %rax
subq -256(%r8), %rax
movq -248(%rdi), %rdx
movq %rax, -256(%rdi)
sbbq -248(%r8), %rdx
movq -240(%rdi), %rax
movq %rdx, -248(%rdi)
sbbq -240(%r8), %rax
movq -232(%rdi), %rdx
movq %rax, -240(%rdi)
sbbq -232(%r8), %rdx
movq -224(%rdi), %rax
movq %rdx, -232(%rdi)
sbbq -224(%r8), %rax
movq -216(%rdi), %rdx
movq %rax, -224(%rdi)
sbbq -216(%r8), %rdx
movq -208(%rdi), %rax
movq %rdx, -216(%rdi)
sbbq -208(%r8), %rax
movq -200(%rdi), %rdx
movq %rax, -208(%rdi)
sbbq -200(%r8), %rdx
movq -192(%rdi), %rax
movq %rdx, -200(%rdi)
sbbq -192(%r8), %rax
movq -184(%rdi), %rdx
movq %rax, -192(%rdi)
sbbq -184(%r8), %rdx
movq -176(%rdi), %rax
movq %rdx, -184(%rdi)
sbbq -176(%r8), %rax
movq -168(%rdi), %rdx
movq %rax, -176(%rdi)
sbbq -168(%r8), %rdx
movq -160(%rdi), %rax
movq %rdx, -168(%rdi)
sbbq -160(%r8), %rax
movq -152(%rdi), %rdx
movq %rax, -160(%rdi)
sbbq -152(%r8), %rdx
movq -144(%rdi), %rax
movq %rdx, -152(%rdi)
sbbq -144(%r8), %rax
movq -136(%rdi), %rdx
movq %rax, -144(%rdi)
sbbq -136(%r8), %rdx
movq -128(%rdi), %rax
movq %rdx, -136(%rdi)
sbbq -128(%r8), %rax
movq -120(%rdi), %rdx
movq %rax, -128(%rdi)
sbbq -120(%r8), %rdx
movq -112(%rdi), %rax
movq %rdx, -120(%rdi)
sbbq -112(%r8), %rax
movq -104(%rdi), %rdx
movq %rax, -112(%rdi)
sbbq -104(%r8), %rdx
movq -96(%rdi), %rax
movq %rdx, -104(%rdi)
sbbq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
sbbq 96(%r8), %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
sbbq 104(%r8), %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
sbbq 112(%r8), %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
sbbq 120(%r8), %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
sbbq 128(%r8), %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
sbbq 136(%r8), %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
sbbq 144(%r8), %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
sbbq 152(%r8), %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
sbbq 160(%r8), %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
sbbq 168(%r8), %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
sbbq 176(%r8), %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
sbbq 184(%r8), %rdx
movq 192(%rdi), %rax
movq %rdx, 184(%rdi)
sbbq 192(%r8), %rax
movq 200(%rdi), %rdx
movq %rax, 192(%rdi)
sbbq 200(%r8), %rdx
movq 208(%rdi), %rax
movq %rdx, 200(%rdi)
sbbq 208(%r8), %rax
movq 216(%rdi), %rdx
movq %rax, 208(%rdi)
sbbq 216(%r8), %rdx
movq 224(%rdi), %rax
movq %rdx, 216(%rdi)
sbbq 224(%r8), %rax
movq 232(%rdi), %rdx
movq %rax, 224(%rdi)
sbbq 232(%r8), %rdx
movq 240(%rdi), %rax
movq %rdx, 232(%rdi)
sbbq 240(%r8), %rax
movq 248(%rdi), %rdx
movq %rax, 240(%rdi)
sbbq 248(%r8), %rdx
movq %rdx, 248(%rdi)
sbbq $0x00, %rcx
movq 512(%rsp), %rdi
addq $0x300, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
adcq $0x00, %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
adcq $0x00, %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
adcq $0x00, %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
adcq $0x00, %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
adcq $0x00, %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
adcq $0x00, %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
adcq $0x00, %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
adcq $0x00, %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
adcq $0x00, %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
adcq $0x00, %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
adcq $0x00, %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
adcq $0x00, %rdx
movq 192(%rdi), %rax
movq %rdx, 184(%rdi)
adcq $0x00, %rax
movq 200(%rdi), %rdx
movq %rax, 192(%rdi)
adcq $0x00, %rdx
movq 208(%rdi), %rax
movq %rdx, 200(%rdi)
adcq $0x00, %rax
movq 216(%rdi), %rdx
movq %rax, 208(%rdi)
adcq $0x00, %rdx
movq 224(%rdi), %rax
movq %rdx, 216(%rdi)
adcq $0x00, %rax
movq 232(%rdi), %rdx
movq %rax, 224(%rdi)
adcq $0x00, %rdx
movq 240(%rdi), %rax
movq %rdx, 232(%rdi)
adcq $0x00, %rax
movq 248(%rdi), %rdx
movq %rax, 240(%rdi)
adcq $0x00, %rdx
movq %rdx, 248(%rdi)
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
addq $0x210, %rsp
repz retq
#ifndef __APPLE__
.size sp_4096_sqr_64,.-sp_4096_sqr_64
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* Karatsuba: ah^2, al^2, (al - ah)^2
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_sqr_avx2_64
.type sp_4096_sqr_avx2_64,@function
.align 16
sp_4096_sqr_avx2_64:
#else
.section __TEXT,__text
.globl _sp_4096_sqr_avx2_64
.p2align 4
_sp_4096_sqr_avx2_64:
#endif /* __APPLE__ */
subq $0x210, %rsp
movq %rdi, 512(%rsp)
movq %rsi, 520(%rsp)
movq $0x00, %rcx
movq %rsp, %r8
leaq 256(%rsi), %r9
movq (%rsi), %rdx
subq (%r9), %rdx
movq 8(%rsi), %rax
movq %rdx, (%r8)
sbbq 8(%r9), %rax
movq 16(%rsi), %rdx
movq %rax, 8(%r8)
sbbq 16(%r9), %rdx
movq 24(%rsi), %rax
movq %rdx, 16(%r8)
sbbq 24(%r9), %rax
movq 32(%rsi), %rdx
movq %rax, 24(%r8)
sbbq 32(%r9), %rdx
movq 40(%rsi), %rax
movq %rdx, 32(%r8)
sbbq 40(%r9), %rax
movq 48(%rsi), %rdx
movq %rax, 40(%r8)
sbbq 48(%r9), %rdx
movq 56(%rsi), %rax
movq %rdx, 48(%r8)
sbbq 56(%r9), %rax
movq 64(%rsi), %rdx
movq %rax, 56(%r8)
sbbq 64(%r9), %rdx
movq 72(%rsi), %rax
movq %rdx, 64(%r8)
sbbq 72(%r9), %rax
movq 80(%rsi), %rdx
movq %rax, 72(%r8)
sbbq 80(%r9), %rdx
movq 88(%rsi), %rax
movq %rdx, 80(%r8)
sbbq 88(%r9), %rax
movq 96(%rsi), %rdx
movq %rax, 88(%r8)
sbbq 96(%r9), %rdx
movq 104(%rsi), %rax
movq %rdx, 96(%r8)
sbbq 104(%r9), %rax
movq 112(%rsi), %rdx
movq %rax, 104(%r8)
sbbq 112(%r9), %rdx
movq 120(%rsi), %rax
movq %rdx, 112(%r8)
sbbq 120(%r9), %rax
movq 128(%rsi), %rdx
movq %rax, 120(%r8)
sbbq 128(%r9), %rdx
movq 136(%rsi), %rax
movq %rdx, 128(%r8)
sbbq 136(%r9), %rax
movq 144(%rsi), %rdx
movq %rax, 136(%r8)
sbbq 144(%r9), %rdx
movq 152(%rsi), %rax
movq %rdx, 144(%r8)
sbbq 152(%r9), %rax
movq 160(%rsi), %rdx
movq %rax, 152(%r8)
sbbq 160(%r9), %rdx
movq 168(%rsi), %rax
movq %rdx, 160(%r8)
sbbq 168(%r9), %rax
movq 176(%rsi), %rdx
movq %rax, 168(%r8)
sbbq 176(%r9), %rdx
movq 184(%rsi), %rax
movq %rdx, 176(%r8)
sbbq 184(%r9), %rax
movq 192(%rsi), %rdx
movq %rax, 184(%r8)
sbbq 192(%r9), %rdx
movq 200(%rsi), %rax
movq %rdx, 192(%r8)
sbbq 200(%r9), %rax
movq 208(%rsi), %rdx
movq %rax, 200(%r8)
sbbq 208(%r9), %rdx
movq 216(%rsi), %rax
movq %rdx, 208(%r8)
sbbq 216(%r9), %rax
movq 224(%rsi), %rdx
movq %rax, 216(%r8)
sbbq 224(%r9), %rdx
movq 232(%rsi), %rax
movq %rdx, 224(%r8)
sbbq 232(%r9), %rax
movq 240(%rsi), %rdx
movq %rax, 232(%r8)
sbbq 240(%r9), %rdx
movq 248(%rsi), %rax
movq %rdx, 240(%r8)
sbbq 248(%r9), %rax
movq %rax, 248(%r8)
sbbq $0x00, %rcx
# Cond Negate
movq (%r8), %rdx
movq %rcx, %r9
xorq %rcx, %rdx
negq %r9
subq %rcx, %rdx
movq 8(%r8), %rax
sbbq $0x00, %r9
movq %rdx, (%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 16(%r8), %rdx
setc %r9b
movq %rax, 8(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 24(%r8), %rax
setc %r9b
movq %rdx, 16(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 32(%r8), %rdx
setc %r9b
movq %rax, 24(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 40(%r8), %rax
setc %r9b
movq %rdx, 32(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 48(%r8), %rdx
setc %r9b
movq %rax, 40(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 56(%r8), %rax
setc %r9b
movq %rdx, 48(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 64(%r8), %rdx
setc %r9b
movq %rax, 56(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 72(%r8), %rax
setc %r9b
movq %rdx, 64(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 80(%r8), %rdx
setc %r9b
movq %rax, 72(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 88(%r8), %rax
setc %r9b
movq %rdx, 80(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 96(%r8), %rdx
setc %r9b
movq %rax, 88(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 104(%r8), %rax
setc %r9b
movq %rdx, 96(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 112(%r8), %rdx
setc %r9b
movq %rax, 104(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 120(%r8), %rax
setc %r9b
movq %rdx, 112(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 128(%r8), %rdx
setc %r9b
movq %rax, 120(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 136(%r8), %rax
setc %r9b
movq %rdx, 128(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 144(%r8), %rdx
setc %r9b
movq %rax, 136(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 152(%r8), %rax
setc %r9b
movq %rdx, 144(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 160(%r8), %rdx
setc %r9b
movq %rax, 152(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 168(%r8), %rax
setc %r9b
movq %rdx, 160(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 176(%r8), %rdx
setc %r9b
movq %rax, 168(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 184(%r8), %rax
setc %r9b
movq %rdx, 176(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 192(%r8), %rdx
setc %r9b
movq %rax, 184(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 200(%r8), %rax
setc %r9b
movq %rdx, 192(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 208(%r8), %rdx
setc %r9b
movq %rax, 200(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 216(%r8), %rax
setc %r9b
movq %rdx, 208(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 224(%r8), %rdx
setc %r9b
movq %rax, 216(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 232(%r8), %rax
setc %r9b
movq %rdx, 224(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq 240(%r8), %rdx
setc %r9b
movq %rax, 232(%r8)
xorq %rcx, %rdx
addq %r9, %rdx
movq 248(%r8), %rax
setc %r9b
movq %rdx, 240(%r8)
xorq %rcx, %rax
addq %r9, %rax
movq %rax, 248(%r8)
movq %r8, %rsi
movq %rsp, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_avx2_32@plt
#else
callq _sp_2048_sqr_avx2_32
#endif /* __APPLE__ */
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
addq $0x100, %rsi
addq $0x200, %rdi
#ifndef __APPLE__
callq sp_2048_sqr_avx2_32@plt
#else
callq _sp_2048_sqr_avx2_32
#endif /* __APPLE__ */
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
#ifndef __APPLE__
callq sp_2048_sqr_avx2_32@plt
#else
callq _sp_2048_sqr_avx2_32
#endif /* __APPLE__ */
#ifdef _WIN64
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
#endif /* _WIN64 */
movq 512(%rsp), %rsi
leaq 256(%rsp), %r8
addq $0x300, %rsi
movq $0x00, %rcx
movq -256(%r8), %rax
subq -256(%rsi), %rax
movq -248(%r8), %rdx
movq %rax, -256(%r8)
sbbq -248(%rsi), %rdx
movq -240(%r8), %rax
movq %rdx, -248(%r8)
sbbq -240(%rsi), %rax
movq -232(%r8), %rdx
movq %rax, -240(%r8)
sbbq -232(%rsi), %rdx
movq -224(%r8), %rax
movq %rdx, -232(%r8)
sbbq -224(%rsi), %rax
movq -216(%r8), %rdx
movq %rax, -224(%r8)
sbbq -216(%rsi), %rdx
movq -208(%r8), %rax
movq %rdx, -216(%r8)
sbbq -208(%rsi), %rax
movq -200(%r8), %rdx
movq %rax, -208(%r8)
sbbq -200(%rsi), %rdx
movq -192(%r8), %rax
movq %rdx, -200(%r8)
sbbq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq 192(%r8), %rax
movq %rdx, 184(%r8)
sbbq 192(%rsi), %rax
movq 200(%r8), %rdx
movq %rax, 192(%r8)
sbbq 200(%rsi), %rdx
movq 208(%r8), %rax
movq %rdx, 200(%r8)
sbbq 208(%rsi), %rax
movq 216(%r8), %rdx
movq %rax, 208(%r8)
sbbq 216(%rsi), %rdx
movq 224(%r8), %rax
movq %rdx, 216(%r8)
sbbq 224(%rsi), %rax
movq 232(%r8), %rdx
movq %rax, 224(%r8)
sbbq 232(%rsi), %rdx
movq 240(%r8), %rax
movq %rdx, 232(%r8)
sbbq 240(%rsi), %rax
movq 248(%r8), %rdx
movq %rax, 240(%r8)
sbbq 248(%rsi), %rdx
movq %rdx, 248(%r8)
sbbq $0x00, %rcx
subq $0x200, %rsi
movq -256(%r8), %rax
subq -256(%rsi), %rax
movq -248(%r8), %rdx
movq %rax, -256(%r8)
sbbq -248(%rsi), %rdx
movq -240(%r8), %rax
movq %rdx, -248(%r8)
sbbq -240(%rsi), %rax
movq -232(%r8), %rdx
movq %rax, -240(%r8)
sbbq -232(%rsi), %rdx
movq -224(%r8), %rax
movq %rdx, -232(%r8)
sbbq -224(%rsi), %rax
movq -216(%r8), %rdx
movq %rax, -224(%r8)
sbbq -216(%rsi), %rdx
movq -208(%r8), %rax
movq %rdx, -216(%r8)
sbbq -208(%rsi), %rax
movq -200(%r8), %rdx
movq %rax, -208(%r8)
sbbq -200(%rsi), %rdx
movq -192(%r8), %rax
movq %rdx, -200(%r8)
sbbq -192(%rsi), %rax
movq -184(%r8), %rdx
movq %rax, -192(%r8)
sbbq -184(%rsi), %rdx
movq -176(%r8), %rax
movq %rdx, -184(%r8)
sbbq -176(%rsi), %rax
movq -168(%r8), %rdx
movq %rax, -176(%r8)
sbbq -168(%rsi), %rdx
movq -160(%r8), %rax
movq %rdx, -168(%r8)
sbbq -160(%rsi), %rax
movq -152(%r8), %rdx
movq %rax, -160(%r8)
sbbq -152(%rsi), %rdx
movq -144(%r8), %rax
movq %rdx, -152(%r8)
sbbq -144(%rsi), %rax
movq -136(%r8), %rdx
movq %rax, -144(%r8)
sbbq -136(%rsi), %rdx
movq -128(%r8), %rax
movq %rdx, -136(%r8)
sbbq -128(%rsi), %rax
movq -120(%r8), %rdx
movq %rax, -128(%r8)
sbbq -120(%rsi), %rdx
movq -112(%r8), %rax
movq %rdx, -120(%r8)
sbbq -112(%rsi), %rax
movq -104(%r8), %rdx
movq %rax, -112(%r8)
sbbq -104(%rsi), %rdx
movq -96(%r8), %rax
movq %rdx, -104(%r8)
sbbq -96(%rsi), %rax
movq -88(%r8), %rdx
movq %rax, -96(%r8)
sbbq -88(%rsi), %rdx
movq -80(%r8), %rax
movq %rdx, -88(%r8)
sbbq -80(%rsi), %rax
movq -72(%r8), %rdx
movq %rax, -80(%r8)
sbbq -72(%rsi), %rdx
movq -64(%r8), %rax
movq %rdx, -72(%r8)
sbbq -64(%rsi), %rax
movq -56(%r8), %rdx
movq %rax, -64(%r8)
sbbq -56(%rsi), %rdx
movq -48(%r8), %rax
movq %rdx, -56(%r8)
sbbq -48(%rsi), %rax
movq -40(%r8), %rdx
movq %rax, -48(%r8)
sbbq -40(%rsi), %rdx
movq -32(%r8), %rax
movq %rdx, -40(%r8)
sbbq -32(%rsi), %rax
movq -24(%r8), %rdx
movq %rax, -32(%r8)
sbbq -24(%rsi), %rdx
movq -16(%r8), %rax
movq %rdx, -24(%r8)
sbbq -16(%rsi), %rax
movq -8(%r8), %rdx
movq %rax, -16(%r8)
sbbq -8(%rsi), %rdx
movq (%r8), %rax
movq %rdx, -8(%r8)
sbbq (%rsi), %rax
movq 8(%r8), %rdx
movq %rax, (%r8)
sbbq 8(%rsi), %rdx
movq 16(%r8), %rax
movq %rdx, 8(%r8)
sbbq 16(%rsi), %rax
movq 24(%r8), %rdx
movq %rax, 16(%r8)
sbbq 24(%rsi), %rdx
movq 32(%r8), %rax
movq %rdx, 24(%r8)
sbbq 32(%rsi), %rax
movq 40(%r8), %rdx
movq %rax, 32(%r8)
sbbq 40(%rsi), %rdx
movq 48(%r8), %rax
movq %rdx, 40(%r8)
sbbq 48(%rsi), %rax
movq 56(%r8), %rdx
movq %rax, 48(%r8)
sbbq 56(%rsi), %rdx
movq 64(%r8), %rax
movq %rdx, 56(%r8)
sbbq 64(%rsi), %rax
movq 72(%r8), %rdx
movq %rax, 64(%r8)
sbbq 72(%rsi), %rdx
movq 80(%r8), %rax
movq %rdx, 72(%r8)
sbbq 80(%rsi), %rax
movq 88(%r8), %rdx
movq %rax, 80(%r8)
sbbq 88(%rsi), %rdx
movq 96(%r8), %rax
movq %rdx, 88(%r8)
sbbq 96(%rsi), %rax
movq 104(%r8), %rdx
movq %rax, 96(%r8)
sbbq 104(%rsi), %rdx
movq 112(%r8), %rax
movq %rdx, 104(%r8)
sbbq 112(%rsi), %rax
movq 120(%r8), %rdx
movq %rax, 112(%r8)
sbbq 120(%rsi), %rdx
movq 128(%r8), %rax
movq %rdx, 120(%r8)
sbbq 128(%rsi), %rax
movq 136(%r8), %rdx
movq %rax, 128(%r8)
sbbq 136(%rsi), %rdx
movq 144(%r8), %rax
movq %rdx, 136(%r8)
sbbq 144(%rsi), %rax
movq 152(%r8), %rdx
movq %rax, 144(%r8)
sbbq 152(%rsi), %rdx
movq 160(%r8), %rax
movq %rdx, 152(%r8)
sbbq 160(%rsi), %rax
movq 168(%r8), %rdx
movq %rax, 160(%r8)
sbbq 168(%rsi), %rdx
movq 176(%r8), %rax
movq %rdx, 168(%r8)
sbbq 176(%rsi), %rax
movq 184(%r8), %rdx
movq %rax, 176(%r8)
sbbq 184(%rsi), %rdx
movq 192(%r8), %rax
movq %rdx, 184(%r8)
sbbq 192(%rsi), %rax
movq 200(%r8), %rdx
movq %rax, 192(%r8)
sbbq 200(%rsi), %rdx
movq 208(%r8), %rax
movq %rdx, 200(%r8)
sbbq 208(%rsi), %rax
movq 216(%r8), %rdx
movq %rax, 208(%r8)
sbbq 216(%rsi), %rdx
movq 224(%r8), %rax
movq %rdx, 216(%r8)
sbbq 224(%rsi), %rax
movq 232(%r8), %rdx
movq %rax, 224(%r8)
sbbq 232(%rsi), %rdx
movq 240(%r8), %rax
movq %rdx, 232(%r8)
sbbq 240(%rsi), %rax
movq 248(%r8), %rdx
movq %rax, 240(%r8)
sbbq 248(%rsi), %rdx
movq %rdx, 248(%r8)
sbbq $0x00, %rcx
movq 512(%rsp), %rdi
negq %rcx
addq $0x200, %rdi
movq -256(%rdi), %rax
subq -256(%r8), %rax
movq -248(%rdi), %rdx
movq %rax, -256(%rdi)
sbbq -248(%r8), %rdx
movq -240(%rdi), %rax
movq %rdx, -248(%rdi)
sbbq -240(%r8), %rax
movq -232(%rdi), %rdx
movq %rax, -240(%rdi)
sbbq -232(%r8), %rdx
movq -224(%rdi), %rax
movq %rdx, -232(%rdi)
sbbq -224(%r8), %rax
movq -216(%rdi), %rdx
movq %rax, -224(%rdi)
sbbq -216(%r8), %rdx
movq -208(%rdi), %rax
movq %rdx, -216(%rdi)
sbbq -208(%r8), %rax
movq -200(%rdi), %rdx
movq %rax, -208(%rdi)
sbbq -200(%r8), %rdx
movq -192(%rdi), %rax
movq %rdx, -200(%rdi)
sbbq -192(%r8), %rax
movq -184(%rdi), %rdx
movq %rax, -192(%rdi)
sbbq -184(%r8), %rdx
movq -176(%rdi), %rax
movq %rdx, -184(%rdi)
sbbq -176(%r8), %rax
movq -168(%rdi), %rdx
movq %rax, -176(%rdi)
sbbq -168(%r8), %rdx
movq -160(%rdi), %rax
movq %rdx, -168(%rdi)
sbbq -160(%r8), %rax
movq -152(%rdi), %rdx
movq %rax, -160(%rdi)
sbbq -152(%r8), %rdx
movq -144(%rdi), %rax
movq %rdx, -152(%rdi)
sbbq -144(%r8), %rax
movq -136(%rdi), %rdx
movq %rax, -144(%rdi)
sbbq -136(%r8), %rdx
movq -128(%rdi), %rax
movq %rdx, -136(%rdi)
sbbq -128(%r8), %rax
movq -120(%rdi), %rdx
movq %rax, -128(%rdi)
sbbq -120(%r8), %rdx
movq -112(%rdi), %rax
movq %rdx, -120(%rdi)
sbbq -112(%r8), %rax
movq -104(%rdi), %rdx
movq %rax, -112(%rdi)
sbbq -104(%r8), %rdx
movq -96(%rdi), %rax
movq %rdx, -104(%rdi)
sbbq -96(%r8), %rax
movq -88(%rdi), %rdx
movq %rax, -96(%rdi)
sbbq -88(%r8), %rdx
movq -80(%rdi), %rax
movq %rdx, -88(%rdi)
sbbq -80(%r8), %rax
movq -72(%rdi), %rdx
movq %rax, -80(%rdi)
sbbq -72(%r8), %rdx
movq -64(%rdi), %rax
movq %rdx, -72(%rdi)
sbbq -64(%r8), %rax
movq -56(%rdi), %rdx
movq %rax, -64(%rdi)
sbbq -56(%r8), %rdx
movq -48(%rdi), %rax
movq %rdx, -56(%rdi)
sbbq -48(%r8), %rax
movq -40(%rdi), %rdx
movq %rax, -48(%rdi)
sbbq -40(%r8), %rdx
movq -32(%rdi), %rax
movq %rdx, -40(%rdi)
sbbq -32(%r8), %rax
movq -24(%rdi), %rdx
movq %rax, -32(%rdi)
sbbq -24(%r8), %rdx
movq -16(%rdi), %rax
movq %rdx, -24(%rdi)
sbbq -16(%r8), %rax
movq -8(%rdi), %rdx
movq %rax, -16(%rdi)
sbbq -8(%r8), %rdx
movq (%rdi), %rax
movq %rdx, -8(%rdi)
sbbq (%r8), %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
sbbq 8(%r8), %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
sbbq 16(%r8), %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
sbbq 24(%r8), %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
sbbq 32(%r8), %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
sbbq 40(%r8), %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
sbbq 48(%r8), %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
sbbq 56(%r8), %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
sbbq 64(%r8), %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
sbbq 72(%r8), %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
sbbq 80(%r8), %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
sbbq 88(%r8), %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
sbbq 96(%r8), %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
sbbq 104(%r8), %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
sbbq 112(%r8), %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
sbbq 120(%r8), %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
sbbq 128(%r8), %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
sbbq 136(%r8), %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
sbbq 144(%r8), %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
sbbq 152(%r8), %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
sbbq 160(%r8), %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
sbbq 168(%r8), %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
sbbq 176(%r8), %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
sbbq 184(%r8), %rdx
movq 192(%rdi), %rax
movq %rdx, 184(%rdi)
sbbq 192(%r8), %rax
movq 200(%rdi), %rdx
movq %rax, 192(%rdi)
sbbq 200(%r8), %rdx
movq 208(%rdi), %rax
movq %rdx, 200(%rdi)
sbbq 208(%r8), %rax
movq 216(%rdi), %rdx
movq %rax, 208(%rdi)
sbbq 216(%r8), %rdx
movq 224(%rdi), %rax
movq %rdx, 216(%rdi)
sbbq 224(%r8), %rax
movq 232(%rdi), %rdx
movq %rax, 224(%rdi)
sbbq 232(%r8), %rdx
movq 240(%rdi), %rax
movq %rdx, 232(%rdi)
sbbq 240(%r8), %rax
movq 248(%rdi), %rdx
movq %rax, 240(%rdi)
sbbq 248(%r8), %rdx
movq %rdx, 248(%rdi)
sbbq $0x00, %rcx
movq 512(%rsp), %rdi
addq $0x300, %rdi
# Add in word
movq (%rdi), %rax
addq %rcx, %rax
movq 8(%rdi), %rdx
movq %rax, (%rdi)
adcq $0x00, %rdx
movq 16(%rdi), %rax
movq %rdx, 8(%rdi)
adcq $0x00, %rax
movq 24(%rdi), %rdx
movq %rax, 16(%rdi)
adcq $0x00, %rdx
movq 32(%rdi), %rax
movq %rdx, 24(%rdi)
adcq $0x00, %rax
movq 40(%rdi), %rdx
movq %rax, 32(%rdi)
adcq $0x00, %rdx
movq 48(%rdi), %rax
movq %rdx, 40(%rdi)
adcq $0x00, %rax
movq 56(%rdi), %rdx
movq %rax, 48(%rdi)
adcq $0x00, %rdx
movq 64(%rdi), %rax
movq %rdx, 56(%rdi)
adcq $0x00, %rax
movq 72(%rdi), %rdx
movq %rax, 64(%rdi)
adcq $0x00, %rdx
movq 80(%rdi), %rax
movq %rdx, 72(%rdi)
adcq $0x00, %rax
movq 88(%rdi), %rdx
movq %rax, 80(%rdi)
adcq $0x00, %rdx
movq 96(%rdi), %rax
movq %rdx, 88(%rdi)
adcq $0x00, %rax
movq 104(%rdi), %rdx
movq %rax, 96(%rdi)
adcq $0x00, %rdx
movq 112(%rdi), %rax
movq %rdx, 104(%rdi)
adcq $0x00, %rax
movq 120(%rdi), %rdx
movq %rax, 112(%rdi)
adcq $0x00, %rdx
movq 128(%rdi), %rax
movq %rdx, 120(%rdi)
adcq $0x00, %rax
movq 136(%rdi), %rdx
movq %rax, 128(%rdi)
adcq $0x00, %rdx
movq 144(%rdi), %rax
movq %rdx, 136(%rdi)
adcq $0x00, %rax
movq 152(%rdi), %rdx
movq %rax, 144(%rdi)
adcq $0x00, %rdx
movq 160(%rdi), %rax
movq %rdx, 152(%rdi)
adcq $0x00, %rax
movq 168(%rdi), %rdx
movq %rax, 160(%rdi)
adcq $0x00, %rdx
movq 176(%rdi), %rax
movq %rdx, 168(%rdi)
adcq $0x00, %rax
movq 184(%rdi), %rdx
movq %rax, 176(%rdi)
adcq $0x00, %rdx
movq 192(%rdi), %rax
movq %rdx, 184(%rdi)
adcq $0x00, %rax
movq 200(%rdi), %rdx
movq %rax, 192(%rdi)
adcq $0x00, %rdx
movq 208(%rdi), %rax
movq %rdx, 200(%rdi)
adcq $0x00, %rax
movq 216(%rdi), %rdx
movq %rax, 208(%rdi)
adcq $0x00, %rdx
movq 224(%rdi), %rax
movq %rdx, 216(%rdi)
adcq $0x00, %rax
movq 232(%rdi), %rdx
movq %rax, 224(%rdi)
adcq $0x00, %rdx
movq 240(%rdi), %rax
movq %rdx, 232(%rdi)
adcq $0x00, %rax
movq 248(%rdi), %rdx
movq %rax, 240(%rdi)
adcq $0x00, %rdx
movq %rdx, 248(%rdi)
movq 520(%rsp), %rsi
movq 512(%rsp), %rdi
addq $0x210, %rsp
repz retq
#ifndef __APPLE__
.size sp_4096_sqr_avx2_64,.-sp_4096_sqr_avx2_64
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_4096_mul_d_64
.type sp_4096_mul_d_64,@function
.align 16
sp_4096_mul_d_64:
#else
.section __TEXT,__text
.globl _sp_4096_mul_d_64
.p2align 4
_sp_4096_mul_d_64:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 64(%rsi)
addq %rax, %r10
movq %r10, 64(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 72(%rsi)
addq %rax, %r8
movq %r8, 72(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 80(%rsi)
addq %rax, %r9
movq %r9, 80(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 88(%rsi)
addq %rax, %r10
movq %r10, 88(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 96(%rsi)
addq %rax, %r8
movq %r8, 96(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 104(%rsi)
addq %rax, %r9
movq %r9, 104(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 112(%rsi)
addq %rax, %r10
movq %r10, 112(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 120(%rsi)
addq %rax, %r8
movq %r8, 120(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[16] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 128(%rsi)
addq %rax, %r9
movq %r9, 128(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[17] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 136(%rsi)
addq %rax, %r10
movq %r10, 136(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[18] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 144(%rsi)
addq %rax, %r8
movq %r8, 144(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[19] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 152(%rsi)
addq %rax, %r9
movq %r9, 152(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[20] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 160(%rsi)
addq %rax, %r10
movq %r10, 160(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[21] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 168(%rsi)
addq %rax, %r8
movq %r8, 168(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[22] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 176(%rsi)
addq %rax, %r9
movq %r9, 176(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[23] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 184(%rsi)
addq %rax, %r10
movq %r10, 184(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[24] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 192(%rsi)
addq %rax, %r8
movq %r8, 192(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[25] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 200(%rsi)
addq %rax, %r9
movq %r9, 200(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[26] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 208(%rsi)
addq %rax, %r10
movq %r10, 208(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[27] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 216(%rsi)
addq %rax, %r8
movq %r8, 216(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[28] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 224(%rsi)
addq %rax, %r9
movq %r9, 224(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[29] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 232(%rsi)
addq %rax, %r10
movq %r10, 232(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[30] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 240(%rsi)
addq %rax, %r8
movq %r8, 240(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[31] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 248(%rsi)
addq %rax, %r9
movq %r9, 248(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[32] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 256(%rsi)
addq %rax, %r10
movq %r10, 256(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[33] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 264(%rsi)
addq %rax, %r8
movq %r8, 264(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[34] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 272(%rsi)
addq %rax, %r9
movq %r9, 272(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[35] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 280(%rsi)
addq %rax, %r10
movq %r10, 280(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[36] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 288(%rsi)
addq %rax, %r8
movq %r8, 288(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[37] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 296(%rsi)
addq %rax, %r9
movq %r9, 296(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[38] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 304(%rsi)
addq %rax, %r10
movq %r10, 304(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[39] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 312(%rsi)
addq %rax, %r8
movq %r8, 312(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[40] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 320(%rsi)
addq %rax, %r9
movq %r9, 320(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[41] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 328(%rsi)
addq %rax, %r10
movq %r10, 328(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[42] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 336(%rsi)
addq %rax, %r8
movq %r8, 336(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[43] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 344(%rsi)
addq %rax, %r9
movq %r9, 344(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[44] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 352(%rsi)
addq %rax, %r10
movq %r10, 352(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[45] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 360(%rsi)
addq %rax, %r8
movq %r8, 360(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[46] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 368(%rsi)
addq %rax, %r9
movq %r9, 368(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[47] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 376(%rsi)
addq %rax, %r10
movq %r10, 376(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[48] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 384(%rsi)
addq %rax, %r8
movq %r8, 384(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[49] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 392(%rsi)
addq %rax, %r9
movq %r9, 392(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[50] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 400(%rsi)
addq %rax, %r10
movq %r10, 400(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[51] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 408(%rsi)
addq %rax, %r8
movq %r8, 408(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[52] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 416(%rsi)
addq %rax, %r9
movq %r9, 416(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[53] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 424(%rsi)
addq %rax, %r10
movq %r10, 424(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[54] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 432(%rsi)
addq %rax, %r8
movq %r8, 432(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[55] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 440(%rsi)
addq %rax, %r9
movq %r9, 440(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[56] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 448(%rsi)
addq %rax, %r10
movq %r10, 448(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[57] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 456(%rsi)
addq %rax, %r8
movq %r8, 456(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[58] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 464(%rsi)
addq %rax, %r9
movq %r9, 464(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[59] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 472(%rsi)
addq %rax, %r10
movq %r10, 472(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[60] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 480(%rsi)
addq %rax, %r8
movq %r8, 480(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[61] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 488(%rsi)
addq %rax, %r9
movq %r9, 488(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[62] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 496(%rsi)
addq %rax, %r10
movq %r10, 496(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[63] * B
movq %rcx, %rax
mulq 504(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 504(%rdi)
movq %r9, 512(%rdi)
repz retq
#ifndef __APPLE__
.size sp_4096_mul_d_64,.-sp_4096_mul_d_64
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_4096_cond_sub_64
.type sp_4096_cond_sub_64,@function
.align 16
sp_4096_cond_sub_64:
#else
.section __TEXT,__text
.globl _sp_4096_cond_sub_64
.p2align 4
_sp_4096_cond_sub_64:
#endif /* __APPLE__ */
subq $0x200, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq 128(%rdx), %r8
movq 136(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 128(%rsp)
movq %r9, 136(%rsp)
movq 144(%rdx), %r8
movq 152(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 144(%rsp)
movq %r9, 152(%rsp)
movq 160(%rdx), %r8
movq 168(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 160(%rsp)
movq %r9, 168(%rsp)
movq 176(%rdx), %r8
movq 184(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 176(%rsp)
movq %r9, 184(%rsp)
movq 192(%rdx), %r8
movq 200(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 192(%rsp)
movq %r9, 200(%rsp)
movq 208(%rdx), %r8
movq 216(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 208(%rsp)
movq %r9, 216(%rsp)
movq 224(%rdx), %r8
movq 232(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 224(%rsp)
movq %r9, 232(%rsp)
movq 240(%rdx), %r8
movq 248(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 240(%rsp)
movq %r9, 248(%rsp)
movq 256(%rdx), %r8
movq 264(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 256(%rsp)
movq %r9, 264(%rsp)
movq 272(%rdx), %r8
movq 280(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 272(%rsp)
movq %r9, 280(%rsp)
movq 288(%rdx), %r8
movq 296(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 288(%rsp)
movq %r9, 296(%rsp)
movq 304(%rdx), %r8
movq 312(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 304(%rsp)
movq %r9, 312(%rsp)
movq 320(%rdx), %r8
movq 328(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 320(%rsp)
movq %r9, 328(%rsp)
movq 336(%rdx), %r8
movq 344(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 336(%rsp)
movq %r9, 344(%rsp)
movq 352(%rdx), %r8
movq 360(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 352(%rsp)
movq %r9, 360(%rsp)
movq 368(%rdx), %r8
movq 376(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 368(%rsp)
movq %r9, 376(%rsp)
movq 384(%rdx), %r8
movq 392(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 384(%rsp)
movq %r9, 392(%rsp)
movq 400(%rdx), %r8
movq 408(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 400(%rsp)
movq %r9, 408(%rsp)
movq 416(%rdx), %r8
movq 424(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 416(%rsp)
movq %r9, 424(%rsp)
movq 432(%rdx), %r8
movq 440(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 432(%rsp)
movq %r9, 440(%rsp)
movq 448(%rdx), %r8
movq 456(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 448(%rsp)
movq %r9, 456(%rsp)
movq 464(%rdx), %r8
movq 472(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 464(%rsp)
movq %r9, 472(%rsp)
movq 480(%rdx), %r8
movq 488(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 480(%rsp)
movq %r9, 488(%rsp)
movq 496(%rdx), %r8
movq 504(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 496(%rsp)
movq %r9, 504(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 112(%rdi)
movq 128(%rsi), %r8
movq 128(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 120(%rdi)
movq 136(%rsi), %r9
movq 136(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 128(%rdi)
movq 144(%rsi), %r8
movq 144(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 136(%rdi)
movq 152(%rsi), %r9
movq 152(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 144(%rdi)
movq 160(%rsi), %r8
movq 160(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 152(%rdi)
movq 168(%rsi), %r9
movq 168(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 160(%rdi)
movq 176(%rsi), %r8
movq 176(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 168(%rdi)
movq 184(%rsi), %r9
movq 184(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 176(%rdi)
movq 192(%rsi), %r8
movq 192(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 184(%rdi)
movq 200(%rsi), %r9
movq 200(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 192(%rdi)
movq 208(%rsi), %r8
movq 208(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 200(%rdi)
movq 216(%rsi), %r9
movq 216(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 208(%rdi)
movq 224(%rsi), %r8
movq 224(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 216(%rdi)
movq 232(%rsi), %r9
movq 232(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 224(%rdi)
movq 240(%rsi), %r8
movq 240(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 232(%rdi)
movq 248(%rsi), %r9
movq 248(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 240(%rdi)
movq 256(%rsi), %r8
movq 256(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 248(%rdi)
movq 264(%rsi), %r9
movq 264(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 256(%rdi)
movq 272(%rsi), %r8
movq 272(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 264(%rdi)
movq 280(%rsi), %r9
movq 280(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 272(%rdi)
movq 288(%rsi), %r8
movq 288(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 280(%rdi)
movq 296(%rsi), %r9
movq 296(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 288(%rdi)
movq 304(%rsi), %r8
movq 304(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 296(%rdi)
movq 312(%rsi), %r9
movq 312(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 304(%rdi)
movq 320(%rsi), %r8
movq 320(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 312(%rdi)
movq 328(%rsi), %r9
movq 328(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 320(%rdi)
movq 336(%rsi), %r8
movq 336(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 328(%rdi)
movq 344(%rsi), %r9
movq 344(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 336(%rdi)
movq 352(%rsi), %r8
movq 352(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 344(%rdi)
movq 360(%rsi), %r9
movq 360(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 352(%rdi)
movq 368(%rsi), %r8
movq 368(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 360(%rdi)
movq 376(%rsi), %r9
movq 376(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 368(%rdi)
movq 384(%rsi), %r8
movq 384(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 376(%rdi)
movq 392(%rsi), %r9
movq 392(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 384(%rdi)
movq 400(%rsi), %r8
movq 400(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 392(%rdi)
movq 408(%rsi), %r9
movq 408(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 400(%rdi)
movq 416(%rsi), %r8
movq 416(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 408(%rdi)
movq 424(%rsi), %r9
movq 424(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 416(%rdi)
movq 432(%rsi), %r8
movq 432(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 424(%rdi)
movq 440(%rsi), %r9
movq 440(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 432(%rdi)
movq 448(%rsi), %r8
movq 448(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 440(%rdi)
movq 456(%rsi), %r9
movq 456(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 448(%rdi)
movq 464(%rsi), %r8
movq 464(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 456(%rdi)
movq 472(%rsi), %r9
movq 472(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 464(%rdi)
movq 480(%rsi), %r8
movq 480(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 472(%rdi)
movq 488(%rsi), %r9
movq 488(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 480(%rdi)
movq 496(%rsi), %r8
movq 496(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 488(%rdi)
movq 504(%rsi), %r9
movq 504(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 496(%rdi)
movq %r9, 504(%rdi)
sbbq %rax, %rax
addq $0x200, %rsp
repz retq
#ifndef __APPLE__
.size sp_4096_cond_sub_64,.-sp_4096_cond_sub_64
#endif /* __APPLE__ */
/* Reduce the number back to 4096 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_4096_mont_reduce_64
.type sp_4096_mont_reduce_64,@function
.align 16
sp_4096_mont_reduce_64:
#else
.section __TEXT,__text
.globl _sp_4096_mont_reduce_64
.p2align 4
_sp_4096_mont_reduce_64:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 64
movq $0x40, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_4096_mont_reduce_64_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 64(%rdi)
adcq $0x00, %r10
# a[i+9] += m[9] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 72(%rsi)
movq 72(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 72(%rdi)
adcq $0x00, %r9
# a[i+10] += m[10] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 80(%rsi)
movq 80(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 80(%rdi)
adcq $0x00, %r10
# a[i+11] += m[11] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 88(%rsi)
movq 88(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 88(%rdi)
adcq $0x00, %r9
# a[i+12] += m[12] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 96(%rsi)
movq 96(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 96(%rdi)
adcq $0x00, %r10
# a[i+13] += m[13] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 104(%rsi)
movq 104(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 104(%rdi)
adcq $0x00, %r9
# a[i+14] += m[14] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 112(%rsi)
movq 112(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 112(%rdi)
adcq $0x00, %r10
# a[i+15] += m[15] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 120(%rsi)
movq 120(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 120(%rdi)
adcq $0x00, %r9
# a[i+16] += m[16] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 128(%rsi)
movq 128(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 128(%rdi)
adcq $0x00, %r10
# a[i+17] += m[17] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 136(%rsi)
movq 136(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 136(%rdi)
adcq $0x00, %r9
# a[i+18] += m[18] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 144(%rsi)
movq 144(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 144(%rdi)
adcq $0x00, %r10
# a[i+19] += m[19] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 152(%rsi)
movq 152(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 152(%rdi)
adcq $0x00, %r9
# a[i+20] += m[20] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 160(%rsi)
movq 160(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 160(%rdi)
adcq $0x00, %r10
# a[i+21] += m[21] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 168(%rsi)
movq 168(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 168(%rdi)
adcq $0x00, %r9
# a[i+22] += m[22] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 176(%rsi)
movq 176(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 176(%rdi)
adcq $0x00, %r10
# a[i+23] += m[23] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 184(%rsi)
movq 184(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 184(%rdi)
adcq $0x00, %r9
# a[i+24] += m[24] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 192(%rsi)
movq 192(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 192(%rdi)
adcq $0x00, %r10
# a[i+25] += m[25] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 200(%rsi)
movq 200(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 200(%rdi)
adcq $0x00, %r9
# a[i+26] += m[26] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 208(%rsi)
movq 208(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 208(%rdi)
adcq $0x00, %r10
# a[i+27] += m[27] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 216(%rsi)
movq 216(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 216(%rdi)
adcq $0x00, %r9
# a[i+28] += m[28] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 224(%rsi)
movq 224(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 224(%rdi)
adcq $0x00, %r10
# a[i+29] += m[29] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 232(%rsi)
movq 232(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 232(%rdi)
adcq $0x00, %r9
# a[i+30] += m[30] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 240(%rsi)
movq 240(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 240(%rdi)
adcq $0x00, %r10
# a[i+31] += m[31] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 248(%rsi)
movq 248(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 248(%rdi)
adcq $0x00, %r9
# a[i+32] += m[32] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 256(%rsi)
movq 256(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 256(%rdi)
adcq $0x00, %r10
# a[i+33] += m[33] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 264(%rsi)
movq 264(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 264(%rdi)
adcq $0x00, %r9
# a[i+34] += m[34] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 272(%rsi)
movq 272(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 272(%rdi)
adcq $0x00, %r10
# a[i+35] += m[35] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 280(%rsi)
movq 280(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 280(%rdi)
adcq $0x00, %r9
# a[i+36] += m[36] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 288(%rsi)
movq 288(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 288(%rdi)
adcq $0x00, %r10
# a[i+37] += m[37] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 296(%rsi)
movq 296(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 296(%rdi)
adcq $0x00, %r9
# a[i+38] += m[38] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 304(%rsi)
movq 304(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 304(%rdi)
adcq $0x00, %r10
# a[i+39] += m[39] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 312(%rsi)
movq 312(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 312(%rdi)
adcq $0x00, %r9
# a[i+40] += m[40] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 320(%rsi)
movq 320(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 320(%rdi)
adcq $0x00, %r10
# a[i+41] += m[41] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 328(%rsi)
movq 328(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 328(%rdi)
adcq $0x00, %r9
# a[i+42] += m[42] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 336(%rsi)
movq 336(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 336(%rdi)
adcq $0x00, %r10
# a[i+43] += m[43] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 344(%rsi)
movq 344(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 344(%rdi)
adcq $0x00, %r9
# a[i+44] += m[44] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 352(%rsi)
movq 352(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 352(%rdi)
adcq $0x00, %r10
# a[i+45] += m[45] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 360(%rsi)
movq 360(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 360(%rdi)
adcq $0x00, %r9
# a[i+46] += m[46] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 368(%rsi)
movq 368(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 368(%rdi)
adcq $0x00, %r10
# a[i+47] += m[47] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 376(%rsi)
movq 376(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 376(%rdi)
adcq $0x00, %r9
# a[i+48] += m[48] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 384(%rsi)
movq 384(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 384(%rdi)
adcq $0x00, %r10
# a[i+49] += m[49] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 392(%rsi)
movq 392(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 392(%rdi)
adcq $0x00, %r9
# a[i+50] += m[50] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 400(%rsi)
movq 400(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 400(%rdi)
adcq $0x00, %r10
# a[i+51] += m[51] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 408(%rsi)
movq 408(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 408(%rdi)
adcq $0x00, %r9
# a[i+52] += m[52] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 416(%rsi)
movq 416(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 416(%rdi)
adcq $0x00, %r10
# a[i+53] += m[53] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 424(%rsi)
movq 424(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 424(%rdi)
adcq $0x00, %r9
# a[i+54] += m[54] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 432(%rsi)
movq 432(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 432(%rdi)
adcq $0x00, %r10
# a[i+55] += m[55] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 440(%rsi)
movq 440(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 440(%rdi)
adcq $0x00, %r9
# a[i+56] += m[56] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 448(%rsi)
movq 448(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 448(%rdi)
adcq $0x00, %r10
# a[i+57] += m[57] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 456(%rsi)
movq 456(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 456(%rdi)
adcq $0x00, %r9
# a[i+58] += m[58] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 464(%rsi)
movq 464(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 464(%rdi)
adcq $0x00, %r10
# a[i+59] += m[59] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 472(%rsi)
movq 472(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 472(%rdi)
adcq $0x00, %r9
# a[i+60] += m[60] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 480(%rsi)
movq 480(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 480(%rdi)
adcq $0x00, %r10
# a[i+61] += m[61] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 488(%rsi)
movq 488(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 488(%rdi)
adcq $0x00, %r9
# a[i+62] += m[62] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 496(%rsi)
movq 496(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 496(%rdi)
adcq $0x00, %r10
# a[i+63] += m[63] * mu
movq %r11, %rax
mulq 504(%rsi)
movq 504(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 504(%rdi)
adcq %rdx, 512(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_4096_mont_reduce_64_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $0x200, %rdi
#ifndef __APPLE__
callq sp_4096_cond_sub_64@plt
#else
callq _sp_4096_cond_sub_64
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_4096_mont_reduce_64,.-sp_4096_mont_reduce_64
#endif /* __APPLE__ */
/* Sub b from a into r. (r = a - b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_4096_sub_64
.type sp_4096_sub_64,@function
.align 16
sp_4096_sub_64:
#else
.section __TEXT,__text
.globl _sp_4096_sub_64
.p2align 4
_sp_4096_sub_64:
#endif /* __APPLE__ */
movq (%rsi), %rcx
subq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
sbbq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
sbbq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
sbbq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
sbbq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
sbbq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
sbbq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
sbbq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
sbbq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
sbbq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
sbbq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
sbbq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
sbbq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
sbbq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
sbbq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
sbbq 120(%rdx), %r8
movq 128(%rsi), %rcx
movq %r8, 120(%rdi)
sbbq 128(%rdx), %rcx
movq 136(%rsi), %r8
movq %rcx, 128(%rdi)
sbbq 136(%rdx), %r8
movq 144(%rsi), %rcx
movq %r8, 136(%rdi)
sbbq 144(%rdx), %rcx
movq 152(%rsi), %r8
movq %rcx, 144(%rdi)
sbbq 152(%rdx), %r8
movq 160(%rsi), %rcx
movq %r8, 152(%rdi)
sbbq 160(%rdx), %rcx
movq 168(%rsi), %r8
movq %rcx, 160(%rdi)
sbbq 168(%rdx), %r8
movq 176(%rsi), %rcx
movq %r8, 168(%rdi)
sbbq 176(%rdx), %rcx
movq 184(%rsi), %r8
movq %rcx, 176(%rdi)
sbbq 184(%rdx), %r8
movq 192(%rsi), %rcx
movq %r8, 184(%rdi)
sbbq 192(%rdx), %rcx
movq 200(%rsi), %r8
movq %rcx, 192(%rdi)
sbbq 200(%rdx), %r8
movq 208(%rsi), %rcx
movq %r8, 200(%rdi)
sbbq 208(%rdx), %rcx
movq 216(%rsi), %r8
movq %rcx, 208(%rdi)
sbbq 216(%rdx), %r8
movq 224(%rsi), %rcx
movq %r8, 216(%rdi)
sbbq 224(%rdx), %rcx
movq 232(%rsi), %r8
movq %rcx, 224(%rdi)
sbbq 232(%rdx), %r8
movq 240(%rsi), %rcx
movq %r8, 232(%rdi)
sbbq 240(%rdx), %rcx
movq 248(%rsi), %r8
movq %rcx, 240(%rdi)
sbbq 248(%rdx), %r8
movq 256(%rsi), %rcx
movq %r8, 248(%rdi)
sbbq 256(%rdx), %rcx
movq 264(%rsi), %r8
movq %rcx, 256(%rdi)
sbbq 264(%rdx), %r8
movq 272(%rsi), %rcx
movq %r8, 264(%rdi)
sbbq 272(%rdx), %rcx
movq 280(%rsi), %r8
movq %rcx, 272(%rdi)
sbbq 280(%rdx), %r8
movq 288(%rsi), %rcx
movq %r8, 280(%rdi)
sbbq 288(%rdx), %rcx
movq 296(%rsi), %r8
movq %rcx, 288(%rdi)
sbbq 296(%rdx), %r8
movq 304(%rsi), %rcx
movq %r8, 296(%rdi)
sbbq 304(%rdx), %rcx
movq 312(%rsi), %r8
movq %rcx, 304(%rdi)
sbbq 312(%rdx), %r8
movq 320(%rsi), %rcx
movq %r8, 312(%rdi)
sbbq 320(%rdx), %rcx
movq 328(%rsi), %r8
movq %rcx, 320(%rdi)
sbbq 328(%rdx), %r8
movq 336(%rsi), %rcx
movq %r8, 328(%rdi)
sbbq 336(%rdx), %rcx
movq 344(%rsi), %r8
movq %rcx, 336(%rdi)
sbbq 344(%rdx), %r8
movq 352(%rsi), %rcx
movq %r8, 344(%rdi)
sbbq 352(%rdx), %rcx
movq 360(%rsi), %r8
movq %rcx, 352(%rdi)
sbbq 360(%rdx), %r8
movq 368(%rsi), %rcx
movq %r8, 360(%rdi)
sbbq 368(%rdx), %rcx
movq 376(%rsi), %r8
movq %rcx, 368(%rdi)
sbbq 376(%rdx), %r8
movq 384(%rsi), %rcx
movq %r8, 376(%rdi)
sbbq 384(%rdx), %rcx
movq 392(%rsi), %r8
movq %rcx, 384(%rdi)
sbbq 392(%rdx), %r8
movq 400(%rsi), %rcx
movq %r8, 392(%rdi)
sbbq 400(%rdx), %rcx
movq 408(%rsi), %r8
movq %rcx, 400(%rdi)
sbbq 408(%rdx), %r8
movq 416(%rsi), %rcx
movq %r8, 408(%rdi)
sbbq 416(%rdx), %rcx
movq 424(%rsi), %r8
movq %rcx, 416(%rdi)
sbbq 424(%rdx), %r8
movq 432(%rsi), %rcx
movq %r8, 424(%rdi)
sbbq 432(%rdx), %rcx
movq 440(%rsi), %r8
movq %rcx, 432(%rdi)
sbbq 440(%rdx), %r8
movq 448(%rsi), %rcx
movq %r8, 440(%rdi)
sbbq 448(%rdx), %rcx
movq 456(%rsi), %r8
movq %rcx, 448(%rdi)
sbbq 456(%rdx), %r8
movq 464(%rsi), %rcx
movq %r8, 456(%rdi)
sbbq 464(%rdx), %rcx
movq 472(%rsi), %r8
movq %rcx, 464(%rdi)
sbbq 472(%rdx), %r8
movq 480(%rsi), %rcx
movq %r8, 472(%rdi)
sbbq 480(%rdx), %rcx
movq 488(%rsi), %r8
movq %rcx, 480(%rdi)
sbbq 488(%rdx), %r8
movq 496(%rsi), %rcx
movq %r8, 488(%rdi)
sbbq 496(%rdx), %rcx
movq 504(%rsi), %r8
movq %rcx, 496(%rdi)
sbbq 504(%rdx), %r8
movq %r8, 504(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_4096_sub_64,.-sp_4096_sub_64
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_4096_mul_d_avx2_64
.type sp_4096_mul_d_avx2_64,@function
.align 16
sp_4096_mul_d_avx2_64:
#else
.section __TEXT,__text
.globl _sp_4096_mul_d_avx2_64
.p2align 4
_sp_4096_mul_d_avx2_64:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# A[9] * B
mulxq 72(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
# A[10] * B
mulxq 80(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 80(%rdi)
# A[11] * B
mulxq 88(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 88(%rdi)
# A[12] * B
mulxq 96(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 96(%rdi)
# A[13] * B
mulxq 104(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 104(%rdi)
# A[14] * B
mulxq 112(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 112(%rdi)
# A[15] * B
mulxq 120(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 120(%rdi)
# A[16] * B
mulxq 128(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 128(%rdi)
# A[17] * B
mulxq 136(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 136(%rdi)
# A[18] * B
mulxq 144(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 144(%rdi)
# A[19] * B
mulxq 152(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 152(%rdi)
# A[20] * B
mulxq 160(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 160(%rdi)
# A[21] * B
mulxq 168(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 168(%rdi)
# A[22] * B
mulxq 176(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 176(%rdi)
# A[23] * B
mulxq 184(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 184(%rdi)
# A[24] * B
mulxq 192(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 192(%rdi)
# A[25] * B
mulxq 200(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 200(%rdi)
# A[26] * B
mulxq 208(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 208(%rdi)
# A[27] * B
mulxq 216(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 216(%rdi)
# A[28] * B
mulxq 224(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 224(%rdi)
# A[29] * B
mulxq 232(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 232(%rdi)
# A[30] * B
mulxq 240(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 240(%rdi)
# A[31] * B
mulxq 248(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 248(%rdi)
# A[32] * B
mulxq 256(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 256(%rdi)
# A[33] * B
mulxq 264(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 264(%rdi)
# A[34] * B
mulxq 272(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 272(%rdi)
# A[35] * B
mulxq 280(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 280(%rdi)
# A[36] * B
mulxq 288(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 288(%rdi)
# A[37] * B
mulxq 296(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 296(%rdi)
# A[38] * B
mulxq 304(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 304(%rdi)
# A[39] * B
mulxq 312(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 312(%rdi)
# A[40] * B
mulxq 320(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 320(%rdi)
# A[41] * B
mulxq 328(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 328(%rdi)
# A[42] * B
mulxq 336(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 336(%rdi)
# A[43] * B
mulxq 344(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 344(%rdi)
# A[44] * B
mulxq 352(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 352(%rdi)
# A[45] * B
mulxq 360(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 360(%rdi)
# A[46] * B
mulxq 368(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 368(%rdi)
# A[47] * B
mulxq 376(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 376(%rdi)
# A[48] * B
mulxq 384(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 384(%rdi)
# A[49] * B
mulxq 392(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 392(%rdi)
# A[50] * B
mulxq 400(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 400(%rdi)
# A[51] * B
mulxq 408(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 408(%rdi)
# A[52] * B
mulxq 416(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 416(%rdi)
# A[53] * B
mulxq 424(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 424(%rdi)
# A[54] * B
mulxq 432(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 432(%rdi)
# A[55] * B
mulxq 440(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 440(%rdi)
# A[56] * B
mulxq 448(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 448(%rdi)
# A[57] * B
mulxq 456(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 456(%rdi)
# A[58] * B
mulxq 464(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 464(%rdi)
# A[59] * B
mulxq 472(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 472(%rdi)
# A[60] * B
mulxq 480(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 480(%rdi)
# A[61] * B
mulxq 488(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 488(%rdi)
# A[62] * B
mulxq 496(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 496(%rdi)
# A[63] * B
mulxq 504(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 504(%rdi)
movq %r9, 512(%rdi)
repz retq
#ifndef __APPLE__
.size sp_4096_mul_d_avx2_64,.-sp_4096_mul_d_avx2_64
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_4096_word_asm_64
.type div_4096_word_asm_64,@function
.align 16
div_4096_word_asm_64:
#else
.section __TEXT,__text
.globl _div_4096_word_asm_64
.p2align 4
_div_4096_word_asm_64:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_4096_word_asm_64,.-div_4096_word_asm_64
#endif /* __APPLE__ */
#endif /* _WIN64 */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_4096_cond_sub_avx2_64
.type sp_4096_cond_sub_avx2_64,@function
.align 16
sp_4096_cond_sub_avx2_64:
#else
.section __TEXT,__text
.globl _sp_4096_cond_sub_avx2_64
.p2align 4
_sp_4096_cond_sub_avx2_64:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
sbbq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
sbbq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
sbbq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
sbbq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
sbbq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
sbbq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
sbbq %r9, %r8
movq 128(%rdx), %r10
movq 128(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 120(%rdi)
sbbq %r10, %r9
movq 136(%rdx), %r8
movq 136(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 128(%rdi)
sbbq %r8, %r10
movq 144(%rdx), %r9
movq 144(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 136(%rdi)
sbbq %r9, %r8
movq 152(%rdx), %r10
movq 152(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 144(%rdi)
sbbq %r10, %r9
movq 160(%rdx), %r8
movq 160(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 152(%rdi)
sbbq %r8, %r10
movq 168(%rdx), %r9
movq 168(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 160(%rdi)
sbbq %r9, %r8
movq 176(%rdx), %r10
movq 176(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 168(%rdi)
sbbq %r10, %r9
movq 184(%rdx), %r8
movq 184(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 176(%rdi)
sbbq %r8, %r10
movq 192(%rdx), %r9
movq 192(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 184(%rdi)
sbbq %r9, %r8
movq 200(%rdx), %r10
movq 200(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 192(%rdi)
sbbq %r10, %r9
movq 208(%rdx), %r8
movq 208(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 200(%rdi)
sbbq %r8, %r10
movq 216(%rdx), %r9
movq 216(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 208(%rdi)
sbbq %r9, %r8
movq 224(%rdx), %r10
movq 224(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 216(%rdi)
sbbq %r10, %r9
movq 232(%rdx), %r8
movq 232(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 224(%rdi)
sbbq %r8, %r10
movq 240(%rdx), %r9
movq 240(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 232(%rdi)
sbbq %r9, %r8
movq 248(%rdx), %r10
movq 248(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 240(%rdi)
sbbq %r10, %r9
movq 256(%rdx), %r8
movq 256(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 248(%rdi)
sbbq %r8, %r10
movq 264(%rdx), %r9
movq 264(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 256(%rdi)
sbbq %r9, %r8
movq 272(%rdx), %r10
movq 272(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 264(%rdi)
sbbq %r10, %r9
movq 280(%rdx), %r8
movq 280(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 272(%rdi)
sbbq %r8, %r10
movq 288(%rdx), %r9
movq 288(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 280(%rdi)
sbbq %r9, %r8
movq 296(%rdx), %r10
movq 296(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 288(%rdi)
sbbq %r10, %r9
movq 304(%rdx), %r8
movq 304(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 296(%rdi)
sbbq %r8, %r10
movq 312(%rdx), %r9
movq 312(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 304(%rdi)
sbbq %r9, %r8
movq 320(%rdx), %r10
movq 320(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 312(%rdi)
sbbq %r10, %r9
movq 328(%rdx), %r8
movq 328(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 320(%rdi)
sbbq %r8, %r10
movq 336(%rdx), %r9
movq 336(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 328(%rdi)
sbbq %r9, %r8
movq 344(%rdx), %r10
movq 344(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 336(%rdi)
sbbq %r10, %r9
movq 352(%rdx), %r8
movq 352(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 344(%rdi)
sbbq %r8, %r10
movq 360(%rdx), %r9
movq 360(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 352(%rdi)
sbbq %r9, %r8
movq 368(%rdx), %r10
movq 368(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 360(%rdi)
sbbq %r10, %r9
movq 376(%rdx), %r8
movq 376(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 368(%rdi)
sbbq %r8, %r10
movq 384(%rdx), %r9
movq 384(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 376(%rdi)
sbbq %r9, %r8
movq 392(%rdx), %r10
movq 392(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 384(%rdi)
sbbq %r10, %r9
movq 400(%rdx), %r8
movq 400(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 392(%rdi)
sbbq %r8, %r10
movq 408(%rdx), %r9
movq 408(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 400(%rdi)
sbbq %r9, %r8
movq 416(%rdx), %r10
movq 416(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 408(%rdi)
sbbq %r10, %r9
movq 424(%rdx), %r8
movq 424(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 416(%rdi)
sbbq %r8, %r10
movq 432(%rdx), %r9
movq 432(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 424(%rdi)
sbbq %r9, %r8
movq 440(%rdx), %r10
movq 440(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 432(%rdi)
sbbq %r10, %r9
movq 448(%rdx), %r8
movq 448(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 440(%rdi)
sbbq %r8, %r10
movq 456(%rdx), %r9
movq 456(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 448(%rdi)
sbbq %r9, %r8
movq 464(%rdx), %r10
movq 464(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 456(%rdi)
sbbq %r10, %r9
movq 472(%rdx), %r8
movq 472(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 464(%rdi)
sbbq %r8, %r10
movq 480(%rdx), %r9
movq 480(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 472(%rdi)
sbbq %r9, %r8
movq 488(%rdx), %r10
movq 488(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 480(%rdi)
sbbq %r10, %r9
movq 496(%rdx), %r8
movq 496(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 488(%rdi)
sbbq %r8, %r10
movq 504(%rdx), %r9
movq 504(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 496(%rdi)
sbbq %r9, %r8
movq %r8, 504(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_4096_cond_sub_avx2_64,.-sp_4096_cond_sub_avx2_64
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_4096_cmp_64
.type sp_4096_cmp_64,@function
.align 16
sp_4096_cmp_64:
#else
.section __TEXT,__text
.globl _sp_4096_cmp_64
.p2align 4
_sp_4096_cmp_64:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 504(%rdi), %r9
movq 504(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 496(%rdi), %r9
movq 496(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 488(%rdi), %r9
movq 488(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 480(%rdi), %r9
movq 480(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 472(%rdi), %r9
movq 472(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 464(%rdi), %r9
movq 464(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 456(%rdi), %r9
movq 456(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 448(%rdi), %r9
movq 448(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 440(%rdi), %r9
movq 440(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 432(%rdi), %r9
movq 432(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 424(%rdi), %r9
movq 424(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 416(%rdi), %r9
movq 416(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 408(%rdi), %r9
movq 408(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 400(%rdi), %r9
movq 400(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 392(%rdi), %r9
movq 392(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 384(%rdi), %r9
movq 384(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 376(%rdi), %r9
movq 376(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 368(%rdi), %r9
movq 368(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 360(%rdi), %r9
movq 360(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 352(%rdi), %r9
movq 352(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 344(%rdi), %r9
movq 344(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 336(%rdi), %r9
movq 336(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 328(%rdi), %r9
movq 328(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 320(%rdi), %r9
movq 320(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 312(%rdi), %r9
movq 312(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 304(%rdi), %r9
movq 304(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 296(%rdi), %r9
movq 296(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 288(%rdi), %r9
movq 288(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 280(%rdi), %r9
movq 280(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 272(%rdi), %r9
movq 272(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 264(%rdi), %r9
movq 264(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 256(%rdi), %r9
movq 256(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 248(%rdi), %r9
movq 248(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 240(%rdi), %r9
movq 240(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 232(%rdi), %r9
movq 232(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 224(%rdi), %r9
movq 224(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 216(%rdi), %r9
movq 216(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 208(%rdi), %r9
movq 208(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 200(%rdi), %r9
movq 200(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 192(%rdi), %r9
movq 192(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 184(%rdi), %r9
movq 184(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 176(%rdi), %r9
movq 176(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 168(%rdi), %r9
movq 168(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 160(%rdi), %r9
movq 160(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 152(%rdi), %r9
movq 152(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 144(%rdi), %r9
movq 144(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 136(%rdi), %r9
movq 136(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 128(%rdi), %r9
movq 128(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 120(%rdi), %r9
movq 120(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 112(%rdi), %r9
movq 112(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 104(%rdi), %r9
movq 104(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 96(%rdi), %r9
movq 96(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 88(%rdi), %r9
movq 88(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 80(%rdi), %r9
movq 80(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 72(%rdi), %r9
movq 72(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_4096_cmp_64,.-sp_4096_cmp_64
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_4096_get_from_table_64
.type sp_4096_get_from_table_64,@function
.align 16
sp_4096_get_from_table_64:
#else
.section __TEXT,__text
.globl _sp_4096_get_from_table_64
.p2align 4
_sp_4096_get_from_table_64:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
pxor %xmm13, %xmm13
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm10, %xmm10
# START: 0-7
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 0-7
# START: 8-15
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x40, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 8-15
# START: 16-23
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 16-23
# START: 24-31
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0xc0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 24-31
# START: 32-39
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x100, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 32-39
# START: 40-47
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x140, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 40-47
# START: 48-55
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x180, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
addq $0x40, %rdi
# END: 48-55
# START: 56-63
pxor %xmm13, %xmm13
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
pxor %xmm6, %xmm6
pxor %xmm7, %xmm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x1c0, %rcx
movdqu %xmm13, %xmm12
pcmpeqd %xmm10, %xmm12
movdqu (%rcx), %xmm0
movdqu 16(%rcx), %xmm1
movdqu 32(%rcx), %xmm2
movdqu 48(%rcx), %xmm3
pand %xmm12, %xmm0
pand %xmm12, %xmm1
pand %xmm12, %xmm2
pand %xmm12, %xmm3
por %xmm0, %xmm4
por %xmm1, %xmm5
por %xmm2, %xmm6
por %xmm3, %xmm7
paddd %xmm11, %xmm13
movdqu %xmm4, (%rdi)
movdqu %xmm5, 16(%rdi)
movdqu %xmm6, 32(%rdi)
movdqu %xmm7, 48(%rdi)
# END: 56-63
repz retq
#ifndef __APPLE__
.size sp_4096_get_from_table_64,.-sp_4096_get_from_table_64
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 4096 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_4096_mont_reduce_avx2_64
.type sp_4096_mont_reduce_avx2_64,@function
.align 16
sp_4096_mont_reduce_avx2_64:
#else
.section __TEXT,__text
.globl _sp_4096_mont_reduce_avx2_64
.p2align 4
_sp_4096_mont_reduce_avx2_64:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 64
movq $0x40, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $0x100, %rdi
xorq %rbp, %rbp
L_4096_mont_reduce_avx2_64_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -224(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -216(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -208(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -216(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq -200(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -208(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq -192(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -200(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq -184(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -192(%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq -176(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -184(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq -168(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -176(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq -160(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -168(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq -152(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -160(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq -144(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -152(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq -136(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -144(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq -128(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -136(%rdi)
# a[i+16] += m[16] * mu
mulxq 128(%rsi), %rax, %rcx
movq -120(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -128(%rdi)
# a[i+17] += m[17] * mu
mulxq 136(%rsi), %rax, %rcx
movq -112(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -120(%rdi)
# a[i+18] += m[18] * mu
mulxq 144(%rsi), %rax, %rcx
movq -104(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -112(%rdi)
# a[i+19] += m[19] * mu
mulxq 152(%rsi), %rax, %rcx
movq -96(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -104(%rdi)
# a[i+20] += m[20] * mu
mulxq 160(%rsi), %rax, %rcx
movq -88(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -96(%rdi)
# a[i+21] += m[21] * mu
mulxq 168(%rsi), %rax, %rcx
movq -80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -88(%rdi)
# a[i+22] += m[22] * mu
mulxq 176(%rsi), %rax, %rcx
movq -72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -80(%rdi)
# a[i+23] += m[23] * mu
mulxq 184(%rsi), %rax, %rcx
movq -64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -72(%rdi)
# a[i+24] += m[24] * mu
mulxq 192(%rsi), %rax, %rcx
movq -56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -64(%rdi)
# a[i+25] += m[25] * mu
mulxq 200(%rsi), %rax, %rcx
movq -48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -56(%rdi)
# a[i+26] += m[26] * mu
mulxq 208(%rsi), %rax, %rcx
movq -40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -48(%rdi)
# a[i+27] += m[27] * mu
mulxq 216(%rsi), %rax, %rcx
movq -32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -40(%rdi)
# a[i+28] += m[28] * mu
mulxq 224(%rsi), %rax, %rcx
movq -24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -32(%rdi)
# a[i+29] += m[29] * mu
mulxq 232(%rsi), %rax, %rcx
movq -16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -24(%rdi)
# a[i+30] += m[30] * mu
mulxq 240(%rsi), %rax, %rcx
movq -8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -16(%rdi)
# a[i+31] += m[31] * mu
mulxq 248(%rsi), %rax, %rcx
movq (%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -8(%rdi)
# a[i+32] += m[32] * mu
mulxq 256(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, (%rdi)
# a[i+33] += m[33] * mu
mulxq 264(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+34] += m[34] * mu
mulxq 272(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+35] += m[35] * mu
mulxq 280(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+36] += m[36] * mu
mulxq 288(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+37] += m[37] * mu
mulxq 296(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
# a[i+38] += m[38] * mu
mulxq 304(%rsi), %rax, %rcx
movq 56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
# a[i+39] += m[39] * mu
mulxq 312(%rsi), %rax, %rcx
movq 64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 56(%rdi)
# a[i+40] += m[40] * mu
mulxq 320(%rsi), %rax, %rcx
movq 72(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 64(%rdi)
# a[i+41] += m[41] * mu
mulxq 328(%rsi), %rax, %rcx
movq 80(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 72(%rdi)
# a[i+42] += m[42] * mu
mulxq 336(%rsi), %rax, %rcx
movq 88(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 80(%rdi)
# a[i+43] += m[43] * mu
mulxq 344(%rsi), %rax, %rcx
movq 96(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 88(%rdi)
# a[i+44] += m[44] * mu
mulxq 352(%rsi), %rax, %rcx
movq 104(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rdi)
# a[i+45] += m[45] * mu
mulxq 360(%rsi), %rax, %rcx
movq 112(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 104(%rdi)
# a[i+46] += m[46] * mu
mulxq 368(%rsi), %rax, %rcx
movq 120(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 112(%rdi)
# a[i+47] += m[47] * mu
mulxq 376(%rsi), %rax, %rcx
movq 128(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 120(%rdi)
# a[i+48] += m[48] * mu
mulxq 384(%rsi), %rax, %rcx
movq 136(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 128(%rdi)
# a[i+49] += m[49] * mu
mulxq 392(%rsi), %rax, %rcx
movq 144(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 136(%rdi)
# a[i+50] += m[50] * mu
mulxq 400(%rsi), %rax, %rcx
movq 152(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 144(%rdi)
# a[i+51] += m[51] * mu
mulxq 408(%rsi), %rax, %rcx
movq 160(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 152(%rdi)
# a[i+52] += m[52] * mu
mulxq 416(%rsi), %rax, %rcx
movq 168(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 160(%rdi)
# a[i+53] += m[53] * mu
mulxq 424(%rsi), %rax, %rcx
movq 176(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 168(%rdi)
# a[i+54] += m[54] * mu
mulxq 432(%rsi), %rax, %rcx
movq 184(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 176(%rdi)
# a[i+55] += m[55] * mu
mulxq 440(%rsi), %rax, %rcx
movq 192(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 184(%rdi)
# a[i+56] += m[56] * mu
mulxq 448(%rsi), %rax, %rcx
movq 200(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 192(%rdi)
# a[i+57] += m[57] * mu
mulxq 456(%rsi), %rax, %rcx
movq 208(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 200(%rdi)
# a[i+58] += m[58] * mu
mulxq 464(%rsi), %rax, %rcx
movq 216(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 208(%rdi)
# a[i+59] += m[59] * mu
mulxq 472(%rsi), %rax, %rcx
movq 224(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 216(%rdi)
# a[i+60] += m[60] * mu
mulxq 480(%rsi), %rax, %rcx
movq 232(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 224(%rdi)
# a[i+61] += m[61] * mu
mulxq 488(%rsi), %rax, %rcx
movq 240(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 232(%rdi)
# a[i+62] += m[62] * mu
mulxq 496(%rsi), %rax, %rcx
movq 248(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 240(%rdi)
# a[i+63] += m[63] * mu
mulxq 504(%rsi), %rax, %rcx
movq 256(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 248(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 256(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 1
addq $8, %rdi
# i -= 1
subq $0x01, %r9
jnz L_4096_mont_reduce_avx2_64_loop
subq $0x100, %rdi
negq %rbp
movq %rdi, %r8
subq $0x200, %rdi
movq (%rsi), %rcx
movq %r12, %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq %r13, %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq %r14, %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq %r15, %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq 72(%rsi), %rax
movq 72(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 64(%rdi)
sbbq %rax, %rdx
movq 80(%rsi), %rcx
movq 80(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 72(%rdi)
sbbq %rcx, %rax
movq 88(%rsi), %rdx
movq 88(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 80(%rdi)
sbbq %rdx, %rcx
movq 96(%rsi), %rax
movq 96(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 88(%rdi)
sbbq %rax, %rdx
movq 104(%rsi), %rcx
movq 104(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 96(%rdi)
sbbq %rcx, %rax
movq 112(%rsi), %rdx
movq 112(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 104(%rdi)
sbbq %rdx, %rcx
movq 120(%rsi), %rax
movq 120(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 112(%rdi)
sbbq %rax, %rdx
movq 128(%rsi), %rcx
movq 128(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 120(%rdi)
sbbq %rcx, %rax
movq 136(%rsi), %rdx
movq 136(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 128(%rdi)
sbbq %rdx, %rcx
movq 144(%rsi), %rax
movq 144(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 136(%rdi)
sbbq %rax, %rdx
movq 152(%rsi), %rcx
movq 152(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 144(%rdi)
sbbq %rcx, %rax
movq 160(%rsi), %rdx
movq 160(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 152(%rdi)
sbbq %rdx, %rcx
movq 168(%rsi), %rax
movq 168(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 160(%rdi)
sbbq %rax, %rdx
movq 176(%rsi), %rcx
movq 176(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 168(%rdi)
sbbq %rcx, %rax
movq 184(%rsi), %rdx
movq 184(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 176(%rdi)
sbbq %rdx, %rcx
movq 192(%rsi), %rax
movq 192(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 184(%rdi)
sbbq %rax, %rdx
movq 200(%rsi), %rcx
movq 200(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 192(%rdi)
sbbq %rcx, %rax
movq 208(%rsi), %rdx
movq 208(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 200(%rdi)
sbbq %rdx, %rcx
movq 216(%rsi), %rax
movq 216(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 208(%rdi)
sbbq %rax, %rdx
movq 224(%rsi), %rcx
movq 224(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 216(%rdi)
sbbq %rcx, %rax
movq 232(%rsi), %rdx
movq 232(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 224(%rdi)
sbbq %rdx, %rcx
movq 240(%rsi), %rax
movq 240(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 232(%rdi)
sbbq %rax, %rdx
movq 248(%rsi), %rcx
movq 248(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 240(%rdi)
sbbq %rcx, %rax
movq 256(%rsi), %rdx
movq 256(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 248(%rdi)
sbbq %rdx, %rcx
movq 264(%rsi), %rax
movq 264(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 256(%rdi)
sbbq %rax, %rdx
movq 272(%rsi), %rcx
movq 272(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 264(%rdi)
sbbq %rcx, %rax
movq 280(%rsi), %rdx
movq 280(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 272(%rdi)
sbbq %rdx, %rcx
movq 288(%rsi), %rax
movq 288(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 280(%rdi)
sbbq %rax, %rdx
movq 296(%rsi), %rcx
movq 296(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 288(%rdi)
sbbq %rcx, %rax
movq 304(%rsi), %rdx
movq 304(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 296(%rdi)
sbbq %rdx, %rcx
movq 312(%rsi), %rax
movq 312(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 304(%rdi)
sbbq %rax, %rdx
movq 320(%rsi), %rcx
movq 320(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 312(%rdi)
sbbq %rcx, %rax
movq 328(%rsi), %rdx
movq 328(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 320(%rdi)
sbbq %rdx, %rcx
movq 336(%rsi), %rax
movq 336(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 328(%rdi)
sbbq %rax, %rdx
movq 344(%rsi), %rcx
movq 344(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 336(%rdi)
sbbq %rcx, %rax
movq 352(%rsi), %rdx
movq 352(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 344(%rdi)
sbbq %rdx, %rcx
movq 360(%rsi), %rax
movq 360(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 352(%rdi)
sbbq %rax, %rdx
movq 368(%rsi), %rcx
movq 368(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 360(%rdi)
sbbq %rcx, %rax
movq 376(%rsi), %rdx
movq 376(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 368(%rdi)
sbbq %rdx, %rcx
movq 384(%rsi), %rax
movq 384(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 376(%rdi)
sbbq %rax, %rdx
movq 392(%rsi), %rcx
movq 392(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 384(%rdi)
sbbq %rcx, %rax
movq 400(%rsi), %rdx
movq 400(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 392(%rdi)
sbbq %rdx, %rcx
movq 408(%rsi), %rax
movq 408(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 400(%rdi)
sbbq %rax, %rdx
movq 416(%rsi), %rcx
movq 416(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 408(%rdi)
sbbq %rcx, %rax
movq 424(%rsi), %rdx
movq 424(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 416(%rdi)
sbbq %rdx, %rcx
movq 432(%rsi), %rax
movq 432(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 424(%rdi)
sbbq %rax, %rdx
movq 440(%rsi), %rcx
movq 440(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 432(%rdi)
sbbq %rcx, %rax
movq 448(%rsi), %rdx
movq 448(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 440(%rdi)
sbbq %rdx, %rcx
movq 456(%rsi), %rax
movq 456(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 448(%rdi)
sbbq %rax, %rdx
movq 464(%rsi), %rcx
movq 464(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 456(%rdi)
sbbq %rcx, %rax
movq 472(%rsi), %rdx
movq 472(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 464(%rdi)
sbbq %rdx, %rcx
movq 480(%rsi), %rax
movq 480(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 472(%rdi)
sbbq %rax, %rdx
movq 488(%rsi), %rcx
movq 488(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 480(%rdi)
sbbq %rcx, %rax
movq 496(%rsi), %rdx
movq 496(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 488(%rdi)
sbbq %rdx, %rcx
movq 504(%rsi), %rax
movq 504(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 496(%rdi)
sbbq %rax, %rdx
movq %rdx, 504(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_4096_mont_reduce_avx2_64,.-sp_4096_mont_reduce_avx2_64
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
#ifndef __APPLE__
.text
.globl sp_4096_get_from_table_avx2_64
.type sp_4096_get_from_table_avx2_64,@function
.align 16
sp_4096_get_from_table_avx2_64:
#else
.section __TEXT,__text
.globl _sp_4096_get_from_table_avx2_64
.p2align 4
_sp_4096_get_from_table_avx2_64:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %rdx, %xmm10
movd %rax, %xmm11
vpxor %ymm13, %ymm13, %ymm13
vpermd %ymm10, %ymm13, %ymm10
vpermd %ymm11, %ymm13, %ymm11
# START: 0-15
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 0-15
# START: 16-31
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x80, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 16-31
# START: 32-47
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x100, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
addq $0x80, %rdi
# END: 32-47
# START: 48-63
vpxor %ymm13, %ymm13, %ymm13
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
vpxor %ymm6, %ymm6, %ymm6
vpxor %ymm7, %ymm7, %ymm7
# ENTRY: 0
movq (%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 1
movq 8(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 2
movq 16(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 3
movq 24(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 4
movq 32(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 5
movq 40(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 6
movq 48(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 7
movq 56(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 8
movq 64(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 9
movq 72(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 10
movq 80(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 11
movq 88(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 12
movq 96(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 13
movq 104(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 14
movq 112(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
# ENTRY: 15
movq 120(%rsi), %rcx
addq $0x180, %rcx
vpcmpeqd %ymm10, %ymm13, %ymm12
vmovdqu (%rcx), %ymm0
vmovdqu 32(%rcx), %ymm1
vmovdqu 64(%rcx), %ymm2
vmovdqu 96(%rcx), %ymm3
vpand %ymm12, %ymm0, %ymm0
vpand %ymm12, %ymm1, %ymm1
vpand %ymm12, %ymm2, %ymm2
vpand %ymm12, %ymm3, %ymm3
vpor %ymm0, %ymm4, %ymm4
vpor %ymm1, %ymm5, %ymm5
vpor %ymm2, %ymm6, %ymm6
vpor %ymm3, %ymm7, %ymm7
vpaddd %ymm11, %ymm13, %ymm13
vmovdqu %ymm4, (%rdi)
vmovdqu %ymm5, 32(%rdi)
vmovdqu %ymm6, 64(%rdi)
vmovdqu %ymm7, 96(%rdi)
# END: 48-63
repz retq
#ifndef __APPLE__
.size sp_4096_get_from_table_avx2_64,.-sp_4096_get_from_table_avx2_64
#endif /* __APPLE__ */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Conditionally add a and b using the mask m.
* m is -1 to add and 0 when not.
*
* r A single precision number representing conditional add result.
* a A single precision number to add with.
* b A single precision number to add.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_4096_cond_add_32
.type sp_4096_cond_add_32,@function
.align 16
sp_4096_cond_add_32:
#else
.section __TEXT,__text
.globl _sp_4096_cond_add_32
.p2align 4
_sp_4096_cond_add_32:
#endif /* __APPLE__ */
subq $0x100, %rsp
movq $0x00, %rax
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq 128(%rdx), %r8
movq 136(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 128(%rsp)
movq %r9, 136(%rsp)
movq 144(%rdx), %r8
movq 152(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 144(%rsp)
movq %r9, 152(%rsp)
movq 160(%rdx), %r8
movq 168(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 160(%rsp)
movq %r9, 168(%rsp)
movq 176(%rdx), %r8
movq 184(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 176(%rsp)
movq %r9, 184(%rsp)
movq 192(%rdx), %r8
movq 200(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 192(%rsp)
movq %r9, 200(%rsp)
movq 208(%rdx), %r8
movq 216(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 208(%rsp)
movq %r9, 216(%rsp)
movq 224(%rdx), %r8
movq 232(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 224(%rsp)
movq %r9, 232(%rsp)
movq 240(%rdx), %r8
movq 248(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 240(%rsp)
movq %r9, 248(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
addq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
adcq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 112(%rdi)
movq 128(%rsi), %r8
movq 128(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 120(%rdi)
movq 136(%rsi), %r9
movq 136(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 128(%rdi)
movq 144(%rsi), %r8
movq 144(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 136(%rdi)
movq 152(%rsi), %r9
movq 152(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 144(%rdi)
movq 160(%rsi), %r8
movq 160(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 152(%rdi)
movq 168(%rsi), %r9
movq 168(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 160(%rdi)
movq 176(%rsi), %r8
movq 176(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 168(%rdi)
movq 184(%rsi), %r9
movq 184(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 176(%rdi)
movq 192(%rsi), %r8
movq 192(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 184(%rdi)
movq 200(%rsi), %r9
movq 200(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 192(%rdi)
movq 208(%rsi), %r8
movq 208(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 200(%rdi)
movq 216(%rsi), %r9
movq 216(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 208(%rdi)
movq 224(%rsi), %r8
movq 224(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 216(%rdi)
movq 232(%rsi), %r9
movq 232(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 224(%rdi)
movq 240(%rsi), %r8
movq 240(%rsp), %rdx
adcq %rdx, %r8
movq %r9, 232(%rdi)
movq 248(%rsi), %r9
movq 248(%rsp), %rdx
adcq %rdx, %r9
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
adcq $0x00, %rax
addq $0x100, %rsp
repz retq
#ifndef __APPLE__
.size sp_4096_cond_add_32,.-sp_4096_cond_add_32
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Conditionally add a and b using the mask m.
* m is -1 to add and 0 when not.
*
* r A single precision number representing conditional add result.
* a A single precision number to add with.
* b A single precision number to add.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_4096_cond_add_avx2_32
.type sp_4096_cond_add_avx2_32,@function
.align 16
sp_4096_cond_add_avx2_32:
#else
.section __TEXT,__text
.globl _sp_4096_cond_add_avx2_32
.p2align 4
_sp_4096_cond_add_avx2_32:
#endif /* __APPLE__ */
movq $0x00, %rax
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
addq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
adcq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
adcq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
adcq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
adcq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
adcq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
adcq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
adcq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
adcq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
adcq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
adcq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
adcq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
adcq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
adcq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
adcq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
adcq %r9, %r8
movq 128(%rdx), %r10
movq 128(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 120(%rdi)
adcq %r10, %r9
movq 136(%rdx), %r8
movq 136(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 128(%rdi)
adcq %r8, %r10
movq 144(%rdx), %r9
movq 144(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 136(%rdi)
adcq %r9, %r8
movq 152(%rdx), %r10
movq 152(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 144(%rdi)
adcq %r10, %r9
movq 160(%rdx), %r8
movq 160(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 152(%rdi)
adcq %r8, %r10
movq 168(%rdx), %r9
movq 168(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 160(%rdi)
adcq %r9, %r8
movq 176(%rdx), %r10
movq 176(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 168(%rdi)
adcq %r10, %r9
movq 184(%rdx), %r8
movq 184(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 176(%rdi)
adcq %r8, %r10
movq 192(%rdx), %r9
movq 192(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 184(%rdi)
adcq %r9, %r8
movq 200(%rdx), %r10
movq 200(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 192(%rdi)
adcq %r10, %r9
movq 208(%rdx), %r8
movq 208(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 200(%rdi)
adcq %r8, %r10
movq 216(%rdx), %r9
movq 216(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 208(%rdi)
adcq %r9, %r8
movq 224(%rdx), %r10
movq 224(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 216(%rdi)
adcq %r10, %r9
movq 232(%rdx), %r8
movq 232(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 224(%rdi)
adcq %r8, %r10
movq 240(%rdx), %r9
movq 240(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 232(%rdi)
adcq %r9, %r8
movq 248(%rdx), %r10
movq 248(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 240(%rdi)
adcq %r10, %r9
movq %r9, 248(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_4096_cond_add_avx2_32,.-sp_4096_cond_add_avx2_32
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Shift number left by n bit. (r = a << n)
*
* r Result of left shift by n.
* a Number to shift.
* n Amoutnt o shift.
*/
#ifndef __APPLE__
.text
.globl sp_4096_lshift_64
.type sp_4096_lshift_64,@function
.align 16
sp_4096_lshift_64:
#else
.section __TEXT,__text
.globl _sp_4096_lshift_64
.p2align 4
_sp_4096_lshift_64:
#endif /* __APPLE__ */
movb %dl, %cl
movq $0x00, %r10
movq 472(%rsi), %r11
movq 480(%rsi), %rdx
movq 488(%rsi), %rax
movq 496(%rsi), %r8
movq 504(%rsi), %r9
shldq %cl, %r9, %r10
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 480(%rdi)
movq %rax, 488(%rdi)
movq %r8, 496(%rdi)
movq %r9, 504(%rdi)
movq %r10, 512(%rdi)
movq 440(%rsi), %r9
movq 448(%rsi), %rdx
movq 456(%rsi), %rax
movq 464(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 448(%rdi)
movq %rax, 456(%rdi)
movq %r8, 464(%rdi)
movq %r11, 472(%rdi)
movq 408(%rsi), %r11
movq 416(%rsi), %rdx
movq 424(%rsi), %rax
movq 432(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 416(%rdi)
movq %rax, 424(%rdi)
movq %r8, 432(%rdi)
movq %r9, 440(%rdi)
movq 376(%rsi), %r9
movq 384(%rsi), %rdx
movq 392(%rsi), %rax
movq 400(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 384(%rdi)
movq %rax, 392(%rdi)
movq %r8, 400(%rdi)
movq %r11, 408(%rdi)
movq 344(%rsi), %r11
movq 352(%rsi), %rdx
movq 360(%rsi), %rax
movq 368(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 352(%rdi)
movq %rax, 360(%rdi)
movq %r8, 368(%rdi)
movq %r9, 376(%rdi)
movq 312(%rsi), %r9
movq 320(%rsi), %rdx
movq 328(%rsi), %rax
movq 336(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 320(%rdi)
movq %rax, 328(%rdi)
movq %r8, 336(%rdi)
movq %r11, 344(%rdi)
movq 280(%rsi), %r11
movq 288(%rsi), %rdx
movq 296(%rsi), %rax
movq 304(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 288(%rdi)
movq %rax, 296(%rdi)
movq %r8, 304(%rdi)
movq %r9, 312(%rdi)
movq 248(%rsi), %r9
movq 256(%rsi), %rdx
movq 264(%rsi), %rax
movq 272(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 256(%rdi)
movq %rax, 264(%rdi)
movq %r8, 272(%rdi)
movq %r11, 280(%rdi)
movq 216(%rsi), %r11
movq 224(%rsi), %rdx
movq 232(%rsi), %rax
movq 240(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 224(%rdi)
movq %rax, 232(%rdi)
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
movq 184(%rsi), %r9
movq 192(%rsi), %rdx
movq 200(%rsi), %rax
movq 208(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 192(%rdi)
movq %rax, 200(%rdi)
movq %r8, 208(%rdi)
movq %r11, 216(%rdi)
movq 152(%rsi), %r11
movq 160(%rsi), %rdx
movq 168(%rsi), %rax
movq 176(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 160(%rdi)
movq %rax, 168(%rdi)
movq %r8, 176(%rdi)
movq %r9, 184(%rdi)
movq 120(%rsi), %r9
movq 128(%rsi), %rdx
movq 136(%rsi), %rax
movq 144(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 128(%rdi)
movq %rax, 136(%rdi)
movq %r8, 144(%rdi)
movq %r11, 152(%rdi)
movq 88(%rsi), %r11
movq 96(%rsi), %rdx
movq 104(%rsi), %rax
movq 112(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 96(%rdi)
movq %rax, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
movq 56(%rsi), %r9
movq 64(%rsi), %rdx
movq 72(%rsi), %rax
movq 80(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 64(%rdi)
movq %rax, 72(%rdi)
movq %r8, 80(%rdi)
movq %r11, 88(%rdi)
movq 24(%rsi), %r11
movq 32(%rsi), %rdx
movq 40(%rsi), %rax
movq 48(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 32(%rdi)
movq %rax, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shlq %cl, %rdx
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %r8, 16(%rdi)
movq %r11, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_4096_lshift_64,.-sp_4096_lshift_64
#endif /* __APPLE__ */
#endif /* WOLFSSL_SP_4096 */
#endif /* WOLFSSL_SP_4096 */
#ifndef WOLFSSL_SP_NO_256
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_256_mul_4
.type sp_256_mul_4,@function
.align 16
sp_256_mul_4:
#else
.section __TEXT,__text
.globl _sp_256_mul_4
.p2align 4
_sp_256_mul_4:
#endif /* __APPLE__ */
movq %rdx, %rcx
subq $32, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rdi)
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 40(%rdi)
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r8
movq 24(%rsp), %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
addq $32, %rsp
repz retq
#ifndef __APPLE__
.size sp_256_mul_4,.-sp_256_mul_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r Result of multiplication.
* a First number to multiply.
* b Second number to multiply.
*/
#ifndef __APPLE__
.text
.globl sp_256_mul_avx2_4
.type sp_256_mul_avx2_4,@function
.align 16
sp_256_mul_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mul_avx2_4
.p2align 4
_sp_256_mul_avx2_4:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq %rdx, %rbp
movq (%rsi), %rdx
movq 8(%rbp), %r14
# A[0] * B[0]
mulxq (%rbp), %r8, %r9
xorq %rbx, %rbx
# A[0] * B[1]
mulxq %r14, %rax, %r10
adcxq %rax, %r9
# A[0] * B[2]
mulxq 16(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[3]
mulxq 24(%rbp), %rax, %r12
adcxq %rax, %r11
movq 8(%rsi), %rdx
adcxq %rbx, %r12
# A[1] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r9
# A[1] * B[1]
mulxq %r14, %rax, %r15
adoxq %rcx, %r10
adcxq %rax, %r10
# A[1] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r11
adcxq %rax, %r11
# A[1] * B[3]
mulxq 24(%rbp), %rax, %r13
adoxq %rcx, %r12
adcxq %rax, %r12
adoxq %rbx, %r13
movq 16(%rsi), %rdx
adcxq %rbx, %r13
# A[2] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r10
# A[2] * B[1]
mulxq %r14, %rax, %r15
adoxq %rcx, %r11
adcxq %rax, %r11
# A[2] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r12
adcxq %rax, %r12
# A[2] * B[3]
mulxq 24(%rbp), %rax, %r14
adoxq %rcx, %r13
adcxq %rax, %r13
adoxq %rbx, %r14
movq 24(%rsi), %rdx
adcxq %rbx, %r14
# A[3] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r11
# A[3] * B[1]
mulxq 8(%rbp), %rax, %r15
adoxq %rcx, %r12
adcxq %rax, %r12
# A[3] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r13
adcxq %rax, %r13
# A[3] * B[3]
mulxq 24(%rbp), %rax, %r15
adoxq %rcx, %r14
adcxq %rax, %r14
adoxq %rbx, %r15
adcxq %rbx, %r15
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq %r12, 32(%rdi)
movq %r13, 40(%rdi)
movq %r14, 48(%rdi)
movq %r15, 56(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_256_mul_avx2_4,.-sp_256_mul_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_256_sqr_4
.type sp_256_sqr_4,@function
.align 16
sp_256_sqr_4:
#else
.section __TEXT,__text
.globl _sp_256_sqr_4
.p2align 4
_sp_256_sqr_4:
#endif /* __APPLE__ */
pushq %r12
subq $32, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r9, %r9
movq %rax, (%rsp)
movq %rdx, %r8
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 24(%rsp)
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 32(%rdi)
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 40(%rdi)
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %rax, %rcx
adcq %rdx, %r8
movq %rcx, 48(%rdi)
movq %r8, 56(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r10
movq 24(%rsp), %r11
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
addq $32, %rsp
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_sqr_4,.-sp_256_sqr_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* r Result of squaring.
* a Number to square in Montgomery form.
*/
#ifndef __APPLE__
.text
.globl sp_256_sqr_avx2_4
.type sp_256_sqr_avx2_4,@function
.align 16
sp_256_sqr_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_sqr_avx2_4
.p2align 4
_sp_256_sqr_avx2_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
xorq %r8, %r8
movq (%rsi), %rdx
movq 8(%rsi), %rcx
movq 16(%rsi), %rbx
movq 24(%rsi), %r15
# A[0] * A[1]
mulxq %rcx, %r9, %r10
# A[0] * A[2]
mulxq %rbx, %r8, %r11
adoxq %r8, %r10
# A[0] * A[3]
mulxq %r15, %r8, %r12
movq %rcx, %rdx
adoxq %r8, %r11
# A[1] * A[2]
mulxq %rbx, %r8, %rax
movq %r15, %rdx
adcxq %r8, %r11
# A[1] * A[3]
mulxq %rcx, %r8, %r13
movq $0x00, %r15
adoxq %rax, %r12
adcxq %r8, %r12
# A[2] * A[3]
mulxq %rbx, %r8, %r14
adoxq %r15, %r13
adcxq %r8, %r13
adoxq %r15, %r14
adcxq %r15, %r14
# Double with Carry Flag
xorq %r15, %r15
# A[0] * A[0]
movq (%rsi), %rdx
mulxq %rdx, %r8, %rax
adcxq %r9, %r9
adcxq %r10, %r10
adoxq %rax, %r9
# A[1] * A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rcx, %rbx
adcxq %r11, %r11
adoxq %rcx, %r10
# A[2] * A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adcxq %r12, %r12
adoxq %rbx, %r11
adcxq %r13, %r13
adoxq %rax, %r12
adcxq %r14, %r14
# A[3] * A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rbx
adoxq %rcx, %r13
adcxq %r15, %r15
adoxq %rax, %r14
adoxq %rbx, %r15
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq %r12, 32(%rdi)
movq %r13, 40(%rdi)
movq %r14, 48(%rdi)
movq %r15, 56(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_sqr_avx2_4,.-sp_256_sqr_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_256_add_4
.type sp_256_add_4,@function
.align 16
sp_256_add_4:
#else
.section __TEXT,__text
.globl _sp_256_add_4
.p2align 4
_sp_256_add_4:
#endif /* __APPLE__ */
xorq %rax, %rax
movq (%rsi), %rcx
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
addq (%rdx), %rcx
adcq 8(%rdx), %r8
adcq 16(%rdx), %r9
adcq 24(%rdx), %r10
movq %rcx, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_256_add_4,.-sp_256_add_4
#endif /* __APPLE__ */
/* Sub b from a into r. (r = a - b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_256_sub_4
.type sp_256_sub_4,@function
.align 16
sp_256_sub_4:
#else
.section __TEXT,__text
.globl _sp_256_sub_4
.p2align 4
_sp_256_sub_4:
#endif /* __APPLE__ */
xorq %rax, %rax
movq (%rsi), %rcx
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
subq (%rdx), %rcx
sbbq 8(%rdx), %r8
sbbq 16(%rdx), %r9
sbbq 24(%rdx), %r10
movq %rcx, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_256_sub_4,.-sp_256_sub_4
#endif /* __APPLE__ */
/* Conditionally copy a into r using the mask m.
* m is -1 to copy and 0 when not.
*
* r A single precision number to copy over.
* a A single precision number to copy.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_256_cond_copy_4
.type sp_256_cond_copy_4,@function
.align 16
sp_256_cond_copy_4:
#else
.section __TEXT,__text
.globl _sp_256_cond_copy_4
.p2align 4
_sp_256_cond_copy_4:
#endif /* __APPLE__ */
movq (%rdi), %rax
movq 8(%rdi), %rcx
movq 16(%rdi), %r8
movq 24(%rdi), %r9
xorq (%rsi), %rax
xorq 8(%rsi), %rcx
xorq 16(%rsi), %r8
xorq 24(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
xorq %rax, (%rdi)
xorq %rcx, 8(%rdi)
xorq %r8, 16(%rdi)
xorq %r9, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_cond_copy_4,.-sp_256_cond_copy_4
#endif /* __APPLE__ */
/* Multiply two Montgomery form numbers mod the modulus (prime).
* (r = a * b mod m)
*
* r Result of multiplication.
* a First number to multiply in Montgomery form.
* b Second number to multiply in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_mul_4
.type sp_256_mont_mul_4,@function
.align 16
sp_256_mont_mul_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_mul_4
.p2align 4
_sp_256_mont_mul_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq %rdx, %r8
# A[0] * B[0]
movq (%r8), %rax
mulq (%rsi)
movq %rax, %r9
movq %rdx, %r10
# A[0] * B[1]
movq 8(%r8), %rax
mulq (%rsi)
xorq %r11, %r11
addq %rax, %r10
adcq %rdx, %r11
# A[1] * B[0]
movq (%r8), %rax
mulq 8(%rsi)
xorq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[0] * B[2]
movq 16(%r8), %rax
mulq (%rsi)
addq %rax, %r11
adcq %rdx, %r12
# A[1] * B[1]
movq 8(%r8), %rax
mulq 8(%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * B[0]
movq (%r8), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[0] * B[3]
movq 24(%r8), %rax
mulq (%rsi)
xorq %r14, %r14
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r14
# A[1] * B[2]
movq 16(%r8), %rax
mulq 8(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r14
# A[2] * B[1]
movq 8(%r8), %rax
mulq 16(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r14
# A[3] * B[0]
movq (%r8), %rax
mulq 24(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r14
# A[1] * B[3]
movq 24(%r8), %rax
mulq 8(%rsi)
xorq %r15, %r15
addq %rax, %r13
adcq %rdx, %r14
adcq $0x00, %r15
# A[2] * B[2]
movq 16(%r8), %rax
mulq 16(%rsi)
addq %rax, %r13
adcq %rdx, %r14
adcq $0x00, %r15
# A[3] * B[1]
movq 8(%r8), %rax
mulq 24(%rsi)
addq %rax, %r13
adcq %rdx, %r14
adcq $0x00, %r15
# A[2] * B[3]
movq 24(%r8), %rax
mulq 16(%rsi)
xorq %rbx, %rbx
addq %rax, %r14
adcq %rdx, %r15
adcq $0x00, %rbx
# A[3] * B[2]
movq 16(%r8), %rax
mulq 24(%rsi)
addq %rax, %r14
adcq %rdx, %r15
adcq $0x00, %rbx
# A[3] * B[3]
movq 24(%r8), %rax
mulq 24(%rsi)
addq %rax, %r15
adcq %rdx, %rbx
# Start Reduction
# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192
# - a[0] << 32 << 192
# a[0]-a[3] + (a[0] * 2) << 192
movq %r9, %rax
leaq (%r12,%r9,2), %rdx
movq %r10, %rsi
movq %r11, %r8
movq %r11, %rcx
# a[0]-a[2] << 32
shlq $32, %r9
shldq $32, %rsi, %rcx
shldq $32, %rax, %r10
# - a[0] << 32 << 192
subq %r9, %rdx
# + a[0]-a[2] << 32 << 64
addq %r9, %rsi
adcq %r10, %r8
adcq %rcx, %rdx
# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu
xorq %rcx, %rcx
# a += mu << 256
addq %rax, %r13
adcq %rsi, %r14
adcq %r8, %r15
adcq %rdx, %rbx
sbbq %r9, %r9
# a += mu << 192
addq %rax, %r12
adcq %rsi, %r13
movq %rsi, %r10
adcq %r8, %r14
adcq %rdx, %r15
adcq $0x00, %rbx
sbbq $0x00, %r9
# mu <<= 32
shldq $32, %rdx, %rcx
shldq $32, %r8, %rdx
shldq $32, %rsi, %r8
shldq $32, %rax, %rsi
shlq $32, %rax
# a -= (mu << 32) << 192
subq %rax, %r12
sbbq %rsi, %r13
sbbq %r8, %r14
sbbq %rdx, %r15
sbbq %rcx, %rbx
adcq $0x00, %r9
# a += (mu << 32) << 64
subq %rax, %r10
adcq %rsi, %r11
adcq %r8, %r12
adcq %rdx, %r13
adcq %rcx, %r14
adcq $0x00, %r15
adcq $0x00, %rbx
sbbq $0x00, %r9
movq $0xffffffff00000001, %rsi
# mask m and sub from result if overflow
# m[0] = -1 & mask = mask
# m[2] = 0 & mask = 0
movl %r9d, %eax
andq %r9, %rsi
subq %r9, %r13
sbbq %rax, %r14
movq %r13, (%rdi)
sbbq $0x00, %r15
movq %r14, 8(%rdi)
sbbq %rsi, %rbx
movq %r15, 16(%rdi)
movq %rbx, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mont_mul_4,.-sp_256_mont_mul_4
#endif /* __APPLE__ */
/* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
*
* r Result of squaring.
* a Number to square in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_sqr_4
.type sp_256_mont_sqr_4,@function
.align 16
sp_256_mont_sqr_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_sqr_4
.p2align 4
_sp_256_mont_sqr_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
# A[0] * A[1]
movq (%rsi), %rax
mulq 8(%rsi)
movq %rax, %r9
movq %rdx, %r10
# A[0] * A[2]
movq (%rsi), %rax
mulq 16(%rsi)
xorq %r11, %r11
addq %rax, %r10
adcq %rdx, %r11
# A[0] * A[3]
movq (%rsi), %rax
mulq 24(%rsi)
xorq %r12, %r12
addq %rax, %r11
adcq %rdx, %r12
# A[1] * A[2]
movq 8(%rsi), %rax
mulq 16(%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[1] * A[3]
movq 8(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r12
adcq %rdx, %r13
# A[2] * A[3]
movq 16(%rsi), %rax
mulq 24(%rsi)
xorq %r14, %r14
addq %rax, %r13
adcq %rdx, %r14
# Double
xorq %r15, %r15
addq %r9, %r9
adcq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
adcq %r14, %r14
adcq $0x00, %r15
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
movq %rax, %rax
movq %rdx, %rdx
movq %rax, %r8
movq %rdx, %rbx
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
movq %rax, %rax
movq %rdx, %rdx
addq %rbx, %r9
adcq %rax, %r10
adcq $0x00, %rdx
movq %rdx, %rbx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
movq %rax, %rax
movq %rdx, %rdx
addq %rbx, %r11
adcq %rax, %r12
adcq $0x00, %rdx
movq %rdx, %rbx
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
movq %rax, %rax
movq %rdx, %rdx
addq %rbx, %r13
adcq %rax, %r14
adcq %rdx, %r15
# Start Reduction
# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192
# - a[0] << 32 << 192
# a[0]-a[3] + (a[0] * 2) << 192
movq %r8, %rax
leaq (%r11,%r8,2), %rdx
movq %r9, %rsi
movq %r10, %rbx
movq %r10, %rcx
# a[0]-a[2] << 32
shlq $32, %r8
shldq $32, %rsi, %rcx
shldq $32, %rax, %r9
# - a[0] << 32 << 192
subq %r8, %rdx
# + a[0]-a[2] << 32 << 64
addq %r8, %rsi
adcq %r9, %rbx
adcq %rcx, %rdx
# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu
xorq %rcx, %rcx
# a += mu << 256
addq %rax, %r12
adcq %rsi, %r13
adcq %rbx, %r14
adcq %rdx, %r15
sbbq %r8, %r8
# a += mu << 192
addq %rax, %r11
adcq %rsi, %r12
movq %rsi, %r9
adcq %rbx, %r13
adcq %rdx, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
# mu <<= 32
shldq $32, %rdx, %rcx
shldq $32, %rbx, %rdx
shldq $32, %rsi, %rbx
shldq $32, %rax, %rsi
shlq $32, %rax
# a -= (mu << 32) << 192
subq %rax, %r11
sbbq %rsi, %r12
sbbq %rbx, %r13
sbbq %rdx, %r14
sbbq %rcx, %r15
adcq $0x00, %r8
# a += (mu << 32) << 64
subq %rax, %r9
adcq %rsi, %r10
adcq %rbx, %r11
adcq %rdx, %r12
adcq %rcx, %r13
adcq $0x00, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
movq $0xffffffff00000001, %rsi
# mask m and sub from result if overflow
# m[0] = -1 & mask = mask
# m[2] = 0 & mask = 0
movl %r8d, %eax
andq %r8, %rsi
subq %r8, %r12
sbbq %rax, %r13
movq %r12, (%rdi)
sbbq $0x00, %r14
movq %r13, 8(%rdi)
sbbq %rsi, %r15
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mont_sqr_4,.-sp_256_mont_sqr_4
#endif /* __APPLE__ */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_256_cmp_4
.type sp_256_cmp_4,@function
.align 16
sp_256_cmp_4:
#else
.section __TEXT,__text
.globl _sp_256_cmp_4
.p2align 4
_sp_256_cmp_4:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_256_cmp_4,.-sp_256_cmp_4
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_256_cond_sub_4
.type sp_256_cond_sub_4,@function
.align 16
sp_256_cond_sub_4:
#else
.section __TEXT,__text
.globl _sp_256_cond_sub_4
.p2align 4
_sp_256_cond_sub_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rdx), %r12
movq 8(%rdx), %r13
movq 16(%rdx), %r14
movq 24(%rdx), %r15
andq %rcx, %r12
andq %rcx, %r13
andq %rcx, %r14
andq %rcx, %r15
movq (%rsi), %r8
movq 8(%rsi), %r9
movq 16(%rsi), %r10
movq 24(%rsi), %r11
subq %r12, %r8
sbbq %r13, %r9
sbbq %r14, %r10
sbbq %r15, %r11
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
sbbq %rax, %rax
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_cond_sub_4,.-sp_256_cond_sub_4
#endif /* __APPLE__ */
/* Reduce the number back to 256 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_reduce_4
.type sp_256_mont_reduce_4,@function
.align 16
sp_256_mont_reduce_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_reduce_4
.p2align 4
_sp_256_mont_reduce_4:
#endif /* __APPLE__ */
pushq %rbx
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rdi), %r8
movq 8(%rdi), %r9
movq 16(%rdi), %r10
movq 24(%rdi), %r11
movq 32(%rdi), %r12
movq 40(%rdi), %r13
movq 48(%rdi), %r14
movq 56(%rdi), %r15
# Start Reduction
# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192
# - a[0] << 32 << 192
# a[0]-a[3] + (a[0] * 2) << 192
movq %r8, %rax
leaq (%r11,%r8,2), %rdx
movq %r9, %rbx
movq %r10, %rcx
movq %r10, %rsi
# a[0]-a[2] << 32
shlq $32, %r8
shldq $32, %rbx, %rsi
shldq $32, %rax, %r9
# - a[0] << 32 << 192
subq %r8, %rdx
# + a[0]-a[2] << 32 << 64
addq %r8, %rbx
adcq %r9, %rcx
adcq %rsi, %rdx
# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu
xorq %rsi, %rsi
# a += mu << 256
addq %rax, %r12
adcq %rbx, %r13
adcq %rcx, %r14
adcq %rdx, %r15
sbbq %r8, %r8
# a += mu << 192
addq %rax, %r11
adcq %rbx, %r12
movq %rbx, %r9
adcq %rcx, %r13
adcq %rdx, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
# mu <<= 32
shldq $32, %rdx, %rsi
shldq $32, %rcx, %rdx
shldq $32, %rbx, %rcx
shldq $32, %rax, %rbx
shlq $32, %rax
# a -= (mu << 32) << 192
subq %rax, %r11
sbbq %rbx, %r12
sbbq %rcx, %r13
sbbq %rdx, %r14
sbbq %rsi, %r15
adcq $0x00, %r8
# a += (mu << 32) << 64
subq %rax, %r9
adcq %rbx, %r10
adcq %rcx, %r11
adcq %rdx, %r12
adcq %rsi, %r13
adcq $0x00, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
movq $0xffffffff00000001, %rbx
# mask m and sub from result if overflow
# m[0] = -1 & mask = mask
# m[2] = 0 & mask = 0
movl %r8d, %eax
andq %r8, %rbx
subq %r8, %r12
sbbq %rax, %r13
movq %r12, (%rdi)
sbbq $0x00, %r14
movq %r13, 8(%rdi)
sbbq %rbx, %r15
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbx
repz retq
#ifndef __APPLE__
.size sp_256_mont_reduce_4,.-sp_256_mont_reduce_4
#endif /* __APPLE__ */
/* Reduce the number back to 256 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_reduce_order_4
.type sp_256_mont_reduce_order_4,@function
.align 16
sp_256_mont_reduce_order_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_reduce_order_4
.p2align 4
_sp_256_mont_reduce_order_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
# i = 0
xorq %r14, %r14
movq $4, %r8
movq %rdi, %r13
L_mont_loop_4:
# mu = a[i] * mp
movq (%r13), %r12
imulq %rcx, %r12
# a[i+0] += m[0] * mu
movq (%rsi), %rax
movq 8(%rsi), %r10
mulq %r12
movq (%r13), %r15
addq %rax, %r15
movq %rdx, %r9
movq %r15, (%r13)
adcq $0x00, %r9
# a[i+1] += m[1] * mu
movq %r10, %rax
mulq %r12
movq 16(%rsi), %r10
movq 8(%r13), %r15
addq %r9, %rax
movq %rdx, %r11
adcq $0x00, %r11
addq %rax, %r15
movq %r15, 8(%r13)
adcq $0x00, %r11
# a[i+2] += m[2] * mu
movq %r10, %rax
mulq %r12
movq 24(%rsi), %r10
movq 16(%r13), %r15
addq %r11, %rax
movq %rdx, %r9
adcq $0x00, %r9
addq %rax, %r15
movq %r15, 16(%r13)
adcq $0x00, %r9
# a[i+3] += m[3] * mu
movq %r10, %rax
mulq %r12
movq 24(%r13), %r15
addq %r9, %rax
adcq %r14, %rdx
movq $0x00, %r14
adcq $0x00, %r14
addq %rax, %r15
movq %r15, 24(%r13)
adcq %rdx, 32(%r13)
adcq $0x00, %r14
# i += 1
addq $8, %r13
decq %r8
jnz L_mont_loop_4
xorq %rax, %rax
movq 32(%rdi), %rdx
movq 40(%rdi), %r8
movq 48(%rdi), %r15
movq 56(%rdi), %r9
subq %r14, %rax
movq (%rsi), %r10
movq 8(%rsi), %r11
movq 16(%rsi), %r12
movq 24(%rsi), %r13
andq %rax, %r10
andq %rax, %r11
andq %rax, %r12
andq %rax, %r13
subq %r10, %rdx
sbbq %r11, %r8
sbbq %r12, %r15
sbbq %r13, %r9
movq %rdx, (%rdi)
movq %r8, 8(%rdi)
movq %r15, 16(%rdi)
movq %r9, 24(%rdi)
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mont_reduce_order_4,.-sp_256_mont_reduce_order_4
#endif /* __APPLE__ */
/* Add two Montgomery form numbers (r = a + b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_add_4
.type sp_256_mont_add_4,@function
.align 16
sp_256_mont_add_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_add_4
.p2align 4
_sp_256_mont_add_4:
#endif /* __APPLE__ */
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
addq (%rdx), %rax
adcq 8(%rdx), %rcx
movq $0xffffffff00000001, %r11
adcq 16(%rdx), %r8
adcq 24(%rdx), %r9
sbbq %rsi, %rsi
movl %esi, %r10d
andq %rsi, %r11
subq %rsi, %rax
sbbq %r10, %rcx
sbbq $0x00, %r8
sbbq %r11, %r9
adcq $0x00, %rsi
andq %rsi, %r10
andq %rsi, %r11
subq %rsi, %rax
sbbq %r10, %rcx
movq %rax, (%rdi)
sbbq $0x00, %r8
movq %rcx, 8(%rdi)
sbbq %r11, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mont_add_4,.-sp_256_mont_add_4
#endif /* __APPLE__ */
/* Double a Montgomery form number (r = a + a % m).
*
* r Result of doubling.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_dbl_4
.type sp_256_mont_dbl_4,@function
.align 16
sp_256_mont_dbl_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_dbl_4
.p2align 4
_sp_256_mont_dbl_4:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
addq %rdx, %rdx
adcq %rax, %rax
movq $0xffffffff00000001, %r10
adcq %rcx, %rcx
movq %r8, %r11
adcq %r8, %r8
sarq $63, %r11
movl %r11d, %r9d
andq %r11, %r10
subq %r11, %rdx
sbbq %r9, %rax
sbbq $0x00, %rcx
sbbq %r10, %r8
adcq $0x00, %r11
andq %r11, %r9
andq %r11, %r10
subq %r11, %rdx
sbbq %r9, %rax
movq %rdx, (%rdi)
sbbq $0x00, %rcx
movq %rax, 8(%rdi)
sbbq %r10, %r8
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mont_dbl_4,.-sp_256_mont_dbl_4
#endif /* __APPLE__ */
/* Triple a Montgomery form number (r = a + a + a % m).
*
* r Result of Tripling.
* a Number to triple in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_tpl_4
.type sp_256_mont_tpl_4,@function
.align 16
sp_256_mont_tpl_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_tpl_4
.p2align 4
_sp_256_mont_tpl_4:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
addq %rdx, %rdx
adcq %rax, %rax
movq $0xffffffff00000001, %r10
adcq %rcx, %rcx
adcq %r8, %r8
sbbq %r11, %r11
movl %r11d, %r9d
andq %r11, %r10
subq %r11, %rdx
sbbq %r9, %rax
sbbq $0x00, %rcx
sbbq %r10, %r8
adcq $0x00, %r11
andq %r11, %r9
andq %r11, %r10
subq %r11, %rdx
sbbq %r9, %rax
sbbq $0x00, %rcx
sbbq %r10, %r8
addq (%rsi), %rdx
adcq 8(%rsi), %rax
movq $0xffffffff00000001, %r10
adcq 16(%rsi), %rcx
adcq 24(%rsi), %r8
sbbq $0x00, %r11
movl %r11d, %r9d
andq %r11, %r10
subq %r11, %rdx
sbbq %r9, %rax
sbbq $0x00, %rcx
sbbq %r10, %r8
adcq $0x00, %r11
andq %r11, %r9
andq %r11, %r10
subq %r11, %rdx
sbbq %r9, %rax
movq %rdx, (%rdi)
sbbq $0x00, %rcx
movq %rax, 8(%rdi)
sbbq %r10, %r8
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mont_tpl_4,.-sp_256_mont_tpl_4
#endif /* __APPLE__ */
/* Subtract two Montgomery form numbers (r = a - b % m).
*
* r Result of subtration.
* a Number to subtract from in Montgomery form.
* b Number to subtract with in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_sub_4
.type sp_256_mont_sub_4,@function
.align 16
sp_256_mont_sub_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_sub_4
.p2align 4
_sp_256_mont_sub_4:
#endif /* __APPLE__ */
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
subq (%rdx), %rax
sbbq 8(%rdx), %rcx
movq $0xffffffff00000001, %r11
sbbq 16(%rdx), %r8
sbbq 24(%rdx), %r9
sbbq %rsi, %rsi
movl %esi, %r10d
andq %rsi, %r11
addq %rsi, %rax
adcq %r10, %rcx
adcq $0x00, %r8
adcq %r11, %r9
adcq $0x00, %rsi
andq %rsi, %r10
andq %rsi, %r11
addq %rsi, %rax
adcq %r10, %rcx
movq %rax, (%rdi)
adcq $0x00, %r8
movq %rcx, 8(%rdi)
adcq %r11, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mont_sub_4,.-sp_256_mont_sub_4
#endif /* __APPLE__ */
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_div2_4
.type sp_256_mont_div2_4,@function
.align 16
sp_256_mont_div2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_div2_4
.p2align 4
_sp_256_mont_div2_4:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq $0xffffffff00000001, %r10
movq %rdx, %r11
andq $0x01, %r11
negq %r11
movl %r11d, %r9d
andq %r11, %r10
addq %r11, %rdx
adcq %r9, %rax
adcq $0x00, %rcx
adcq %r10, %r8
movq $0x00, %r11
adcq $0x00, %r11
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r11, %r8
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mont_div2_4,.-sp_256_mont_div2_4
#endif /* __APPLE__ */
/* Two Montgomery numbers, subtract double second from first (r = a - 2.b % m).
*
* r Result of subtration.
* a Number to subtract from in Montgomery form.
* b Number to double and subtract with in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_rsb_sub_dbl_4
.type sp_256_mont_rsb_sub_dbl_4,@function
.align 16
sp_256_mont_rsb_sub_dbl_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_rsb_sub_dbl_4
.p2align 4
_sp_256_mont_rsb_sub_dbl_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq (%rdx), %r10
movq 8(%rdx), %r11
movq 16(%rdx), %r12
movq 24(%rdx), %r13
addq %r10, %r10
adcq %r11, %r11
movq $0xffffffff00000001, %r15
adcq %r12, %r12
adcq %r13, %r13
sbbq %rsi, %rsi
movl %esi, %r14d
andq %rsi, %r15
subq %rsi, %r10
sbbq %r14, %r11
sbbq $0x00, %r12
sbbq %r15, %r13
adcq $0x00, %rsi
andq %rsi, %r14
andq %rsi, %r15
subq %rsi, %r10
sbbq %r14, %r11
sbbq $0x00, %r12
sbbq %r15, %r13
subq %r10, %rax
sbbq %r11, %rcx
movq $0xffffffff00000001, %r15
sbbq %r12, %r8
sbbq %r13, %r9
sbbq $0x00, %rsi
movl %esi, %r14d
andq %rsi, %r15
addq %rsi, %rax
adcq %r14, %rcx
adcq $0x00, %r8
adcq %r15, %r9
adcq $0x00, %rsi
andq %rsi, %r14
andq %rsi, %r15
addq %rsi, %rax
adcq %r14, %rcx
movq %rax, (%rdi)
adcq $0x00, %r8
movq %rcx, 8(%rdi)
adcq %r15, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq (%rdx), %r10
movq 8(%rdx), %r11
movq 16(%rdx), %r12
movq 24(%rdx), %r13
subq %rax, %r10
sbbq %rcx, %r11
movq $0xffffffff00000001, %r15
sbbq %r8, %r12
sbbq %r9, %r13
sbbq %rsi, %rsi
movl %esi, %r14d
andq %rsi, %r15
addq %rsi, %r10
adcq %r14, %r11
adcq $0x00, %r12
adcq %r15, %r13
adcq $0x00, %rsi
andq %rsi, %r14
andq %rsi, %r15
addq %rsi, %r10
adcq %r14, %r11
movq %r10, (%rdx)
adcq $0x00, %r12
movq %r11, 8(%rdx)
adcq %r15, %r13
movq %r12, 16(%rdx)
movq %r13, 24(%rdx)
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mont_rsb_sub_dbl_4,.-sp_256_mont_rsb_sub_dbl_4
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible point that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of point to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_256_get_point_33_4
.type sp_256_get_point_33_4,@function
.align 16
sp_256_get_point_33_4:
#else
.section __TEXT,__text
.globl _sp_256_get_point_33_4
.p2align 4
_sp_256_get_point_33_4:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm13
addq $0xc8, %rsi
movd %eax, %xmm15
movq $32, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
movdqa %xmm15, %xmm14
L_256_get_point_33_4_start_1:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
movdqu (%rsi), %xmm6
movdqu 16(%rsi), %xmm7
movdqu 64(%rsi), %xmm8
movdqu 80(%rsi), %xmm9
movdqu 128(%rsi), %xmm10
movdqu 144(%rsi), %xmm11
addq $0xc8, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
pand %xmm12, %xmm9
pand %xmm12, %xmm10
pand %xmm12, %xmm11
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
por %xmm9, %xmm3
por %xmm10, %xmm4
por %xmm11, %xmm5
decq %rax
jnz L_256_get_point_33_4_start_1
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 64(%rdi)
movdqu %xmm3, 80(%rdi)
movdqu %xmm4, 128(%rdi)
movdqu %xmm5, 144(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_get_point_33_4,.-sp_256_get_point_33_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible point that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of point to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_256_get_point_33_avx2_4
.type sp_256_get_point_33_avx2_4,@function
.align 16
sp_256_get_point_33_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_get_point_33_avx2_4
.p2align 4
_sp_256_get_point_33_avx2_4:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm7
addq $0xc8, %rsi
movd %eax, %xmm9
movq $32, %rax
vpxor %ymm8, %ymm8, %ymm8
vpermd %ymm7, %ymm8, %ymm7
vpermd %ymm9, %ymm8, %ymm9
vpxor %ymm0, %ymm0, %ymm0
vpxor %ymm1, %ymm1, %ymm1
vpxor %ymm2, %ymm2, %ymm2
vmovdqa %ymm9, %ymm8
L_256_get_point_33_avx2_4_start:
vpcmpeqd %ymm7, %ymm8, %ymm6
vpaddd %ymm9, %ymm8, %ymm8
vmovupd (%rsi), %ymm3
vmovupd 64(%rsi), %ymm4
vmovupd 128(%rsi), %ymm5
addq $0xc8, %rsi
vpand %ymm6, %ymm3, %ymm3
vpand %ymm6, %ymm4, %ymm4
vpand %ymm6, %ymm5, %ymm5
vpor %ymm3, %ymm0, %ymm0
vpor %ymm4, %ymm1, %ymm1
vpor %ymm5, %ymm2, %ymm2
decq %rax
jnz L_256_get_point_33_avx2_4_start
vmovupd %ymm0, (%rdi)
vmovupd %ymm1, 64(%rdi)
vmovupd %ymm2, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_get_point_33_avx2_4,.-sp_256_get_point_33_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Multiply two Montgomery form numbers mod the modulus (prime).
* (r = a * b mod m)
*
* r Result of multiplication.
* a First number to multiply in Montgomery form.
* b Second number to multiply in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_mul_avx2_4
.type sp_256_mont_mul_avx2_4,@function
.align 16
sp_256_mont_mul_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_mul_avx2_4
.p2align 4
_sp_256_mont_mul_avx2_4:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq %rdx, %rbp
movq (%rsi), %rdx
movq 8(%rbp), %r14
# A[0] * B[0]
mulxq (%rbp), %r8, %r9
xorq %rbx, %rbx
# A[0] * B[1]
mulxq %r14, %rax, %r10
adcxq %rax, %r9
# A[0] * B[2]
mulxq 16(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[3]
mulxq 24(%rbp), %rax, %r12
adcxq %rax, %r11
movq 8(%rsi), %rdx
adcxq %rbx, %r12
# A[1] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r9
# A[1] * B[1]
mulxq %r14, %rax, %r15
adoxq %rcx, %r10
adcxq %rax, %r10
# A[1] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r11
adcxq %rax, %r11
# A[1] * B[3]
mulxq 24(%rbp), %rax, %r13
adoxq %rcx, %r12
adcxq %rax, %r12
adoxq %rbx, %r13
movq 16(%rsi), %rdx
adcxq %rbx, %r13
# A[2] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r10
# A[2] * B[1]
mulxq %r14, %rax, %r15
adoxq %rcx, %r11
adcxq %rax, %r11
# A[2] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r12
adcxq %rax, %r12
# A[2] * B[3]
mulxq 24(%rbp), %rax, %r14
adoxq %rcx, %r13
adcxq %rax, %r13
adoxq %rbx, %r14
movq 24(%rsi), %rdx
adcxq %rbx, %r14
# A[3] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r11
# A[3] * B[1]
mulxq 8(%rbp), %rax, %r15
adoxq %rcx, %r12
adcxq %rax, %r12
# A[3] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r13
adcxq %rax, %r13
# A[3] * B[3]
mulxq 24(%rbp), %rax, %r15
adoxq %rcx, %r14
adcxq %rax, %r14
adoxq %rbx, %r15
adcxq %rbx, %r15
# Start Reduction
# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192
# - a[0] << 32 << 192
# a[0]-a[3] + (a[0] * 2) << 192
movq %r8, %rax
leaq (%r11,%r8,2), %rdx
movq %r9, %rsi
movq %r10, %rbp
movq %r10, %rcx
# a[0]-a[2] << 32
shlq $32, %r8
shldq $32, %rsi, %rcx
shldq $32, %rax, %r9
# - a[0] << 32 << 192
subq %r8, %rdx
# + a[0]-a[2] << 32 << 64
addq %r8, %rsi
adcq %r9, %rbp
adcq %rcx, %rdx
# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu
xorq %rcx, %rcx
# a += mu << 256
addq %rax, %r12
adcq %rsi, %r13
adcq %rbp, %r14
adcq %rdx, %r15
sbbq %r8, %r8
# a += mu << 192
addq %rax, %r11
adcq %rsi, %r12
movq %rsi, %r9
adcq %rbp, %r13
adcq %rdx, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
# mu <<= 32
shldq $32, %rdx, %rcx
shldq $32, %rbp, %rdx
shldq $32, %rsi, %rbp
shldq $32, %rax, %rsi
shlq $32, %rax
# a -= (mu << 32) << 192
subq %rax, %r11
sbbq %rsi, %r12
sbbq %rbp, %r13
sbbq %rdx, %r14
sbbq %rcx, %r15
adcq $0x00, %r8
# a += (mu << 32) << 64
subq %rax, %r9
adcq %rsi, %r10
adcq %rbp, %r11
adcq %rdx, %r12
adcq %rcx, %r13
adcq $0x00, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
movq $0xffffffff00000001, %rsi
# mask m and sub from result if overflow
# m[0] = -1 & mask = mask
# m[2] = 0 & mask = 0
movl %r8d, %eax
andq %r8, %rsi
subq %r8, %r12
sbbq %rax, %r13
movq %r12, (%rdi)
sbbq $0x00, %r14
movq %r13, 8(%rdi)
sbbq %rsi, %r15
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_256_mont_mul_avx2_4,.-sp_256_mont_mul_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
*
* r Result of squaring.
* a Number to square in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_sqr_avx2_4
.type sp_256_mont_sqr_avx2_4,@function
.align 16
sp_256_mont_sqr_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_sqr_avx2_4
.p2align 4
_sp_256_mont_sqr_avx2_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
xorq %r8, %r8
movq (%rsi), %rdx
movq 8(%rsi), %rcx
movq 16(%rsi), %rbx
movq 24(%rsi), %r15
# A[0] * A[1]
mulxq %rcx, %r9, %r10
# A[0] * A[2]
mulxq %rbx, %r8, %r11
adoxq %r8, %r10
# A[0] * A[3]
mulxq %r15, %r8, %r12
movq %rcx, %rdx
adoxq %r8, %r11
# A[1] * A[2]
mulxq %rbx, %r8, %rax
movq %r15, %rdx
adcxq %r8, %r11
# A[1] * A[3]
mulxq %rcx, %r8, %r13
movq $0x00, %r15
adoxq %rax, %r12
adcxq %r8, %r12
# A[2] * A[3]
mulxq %rbx, %r8, %r14
adoxq %r15, %r13
adcxq %r8, %r13
adoxq %r15, %r14
adcxq %r15, %r14
# Double with Carry Flag
xorq %r15, %r15
# A[0] * A[0]
movq (%rsi), %rdx
mulxq %rdx, %r8, %rax
adcxq %r9, %r9
adcxq %r10, %r10
adoxq %rax, %r9
# A[1] * A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rcx, %rbx
adcxq %r11, %r11
adoxq %rcx, %r10
# A[2] * A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adcxq %r12, %r12
adoxq %rbx, %r11
adcxq %r13, %r13
adoxq %rax, %r12
adcxq %r14, %r14
# A[3] * A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rbx
adoxq %rcx, %r13
adcxq %r15, %r15
adoxq %rax, %r14
adoxq %rbx, %r15
# Start Reduction
# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192
# - a[0] << 32 << 192
# a[0]-a[3] + (a[0] * 2) << 192
movq %r8, %rax
leaq (%r11,%r8,2), %rdx
movq %r9, %rsi
movq %r10, %rcx
movq %r10, %rbx
# a[0]-a[2] << 32
shlq $32, %r8
shldq $32, %rsi, %rbx
shldq $32, %rax, %r9
# - a[0] << 32 << 192
subq %r8, %rdx
# + a[0]-a[2] << 32 << 64
addq %r8, %rsi
adcq %r9, %rcx
adcq %rbx, %rdx
# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu
xorq %rbx, %rbx
# a += mu << 256
addq %rax, %r12
adcq %rsi, %r13
adcq %rcx, %r14
adcq %rdx, %r15
sbbq %r8, %r8
# a += mu << 192
addq %rax, %r11
adcq %rsi, %r12
movq %rsi, %r9
adcq %rcx, %r13
adcq %rdx, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
# mu <<= 32
shldq $32, %rdx, %rbx
shldq $32, %rcx, %rdx
shldq $32, %rsi, %rcx
shldq $32, %rax, %rsi
shlq $32, %rax
# a -= (mu << 32) << 192
subq %rax, %r11
sbbq %rsi, %r12
sbbq %rcx, %r13
sbbq %rdx, %r14
sbbq %rbx, %r15
adcq $0x00, %r8
# a += (mu << 32) << 64
subq %rax, %r9
adcq %rsi, %r10
adcq %rcx, %r11
adcq %rdx, %r12
adcq %rbx, %r13
adcq $0x00, %r14
adcq $0x00, %r15
sbbq $0x00, %r8
movq $0xffffffff00000001, %rsi
# mask m and sub from result if overflow
# m[0] = -1 & mask = mask
# m[2] = 0 & mask = 0
movl %r8d, %eax
andq %r8, %rsi
subq %r8, %r12
sbbq %rax, %r13
movq %r12, (%rdi)
sbbq $0x00, %r14
movq %r13, 8(%rdi)
sbbq %rsi, %r15
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mont_sqr_avx2_4,.-sp_256_mont_sqr_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_256_cond_sub_avx2_4
.type sp_256_cond_sub_avx2_4,@function
.align 16
sp_256_cond_sub_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_cond_sub_avx2_4
.p2align 4
_sp_256_cond_sub_avx2_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rdx), %r12
movq 8(%rdx), %r13
movq 16(%rdx), %r14
movq 24(%rdx), %r15
andq %rcx, %r12
andq %rcx, %r13
andq %rcx, %r14
andq %rcx, %r15
movq (%rsi), %r8
movq 8(%rsi), %r9
movq 16(%rsi), %r10
movq 24(%rsi), %r11
subq %r12, %r8
sbbq %r13, %r9
sbbq %r14, %r10
sbbq %r15, %r11
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
sbbq %rax, %rax
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_cond_sub_avx2_4,.-sp_256_cond_sub_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 256 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_reduce_order_avx2_4
.type sp_256_mont_reduce_order_avx2_4,@function
.align 16
sp_256_mont_reduce_order_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_reduce_order_avx2_4
.p2align 4
_sp_256_mont_reduce_order_avx2_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq %rdx, %rax
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
xorq %r11, %r11
xorq %r10, %r10
# a[0-4] += m[0-3] * mu = m[0-3] * (a[0] * mp)
movq 32(%rdi), %rbx
# mu = a[0] * mp
movq %r12, %rdx
mulxq %rax, %rdx, %rcx
# a[0] += m[0] * mu
mulx (%rsi), %r8, %r9
adcxq %r8, %r12
# a[1] += m[1] * mu
mulx 8(%rsi), %r8, %rcx
adoxq %r9, %r13
adcxq %r8, %r13
# a[2] += m[2] * mu
mulx 16(%rsi), %r8, %r9
adoxq %rcx, %r14
adcxq %r8, %r14
# a[3] += m[3] * mu
mulx 24(%rsi), %r8, %rcx
adoxq %r9, %r15
adcxq %r8, %r15
# a[4] += carry
adoxq %rcx, %rbx
adcxq %r10, %rbx
# carry
adoxq %r10, %r11
adcxq %r10, %r11
# a[1-5] += m[0-3] * mu = m[0-3] * (a[1] * mp)
movq 40(%rdi), %r12
# mu = a[1] * mp
movq %r13, %rdx
mulxq %rax, %rdx, %rcx
# a[1] += m[0] * mu
mulx (%rsi), %r8, %r9
adcxq %r8, %r13
# a[2] += m[1] * mu
mulx 8(%rsi), %r8, %rcx
adoxq %r9, %r14
adcxq %r8, %r14
# a[3] += m[2] * mu
mulx 16(%rsi), %r8, %r9
adoxq %rcx, %r15
adcxq %r8, %r15
# a[4] += m[3] * mu
mulx 24(%rsi), %r8, %rcx
adoxq %r9, %rbx
adcxq %r8, %rbx
# a[5] += carry
adoxq %rcx, %r12
adcxq %r11, %r12
movq %r10, %r11
# carry
adoxq %r10, %r11
adcxq %r10, %r11
# a[2-6] += m[0-3] * mu = m[0-3] * (a[2] * mp)
movq 48(%rdi), %r13
# mu = a[2] * mp
movq %r14, %rdx
mulxq %rax, %rdx, %rcx
# a[2] += m[0] * mu
mulx (%rsi), %r8, %r9
adcxq %r8, %r14
# a[3] += m[1] * mu
mulx 8(%rsi), %r8, %rcx
adoxq %r9, %r15
adcxq %r8, %r15
# a[4] += m[2] * mu
mulx 16(%rsi), %r8, %r9
adoxq %rcx, %rbx
adcxq %r8, %rbx
# a[5] += m[3] * mu
mulx 24(%rsi), %r8, %rcx
adoxq %r9, %r12
adcxq %r8, %r12
# a[6] += carry
adoxq %rcx, %r13
adcxq %r11, %r13
movq %r10, %r11
# carry
adoxq %r10, %r11
adcxq %r10, %r11
# a[3-7] += m[0-3] * mu = m[0-3] * (a[3] * mp)
movq 56(%rdi), %r14
# mu = a[3] * mp
movq %r15, %rdx
mulxq %rax, %rdx, %rcx
# a[3] += m[0] * mu
mulx (%rsi), %r8, %r9
adcxq %r8, %r15
# a[4] += m[1] * mu
mulx 8(%rsi), %r8, %rcx
adoxq %r9, %rbx
adcxq %r8, %rbx
# a[5] += m[2] * mu
mulx 16(%rsi), %r8, %r9
adoxq %rcx, %r12
adcxq %r8, %r12
# a[6] += m[3] * mu
mulx 24(%rsi), %r8, %rcx
adoxq %r9, %r13
adcxq %r8, %r13
# a[7] += carry
adoxq %rcx, %r14
adcxq %r11, %r14
movq %r10, %r11
# carry
adoxq %r10, %r11
adcxq %r10, %r11
# Subtract mod if carry
negq %r11
movq $0xf3b9cac2fc632551, %r8
movq $0xbce6faada7179e84, %r9
movq $0xffffffff00000000, %rdx
andq %r11, %r8
andq %r11, %r9
andq %r11, %rdx
subq %r8, %rbx
sbbq %r9, %r12
sbbq %r11, %r13
sbbq %rdx, %r14
movq %rbx, (%rdi)
movq %r12, 8(%rdi)
movq %r13, 16(%rdi)
movq %r14, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mont_reduce_order_avx2_4,.-sp_256_mont_reduce_order_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_div2_avx2_4
.type sp_256_mont_div2_avx2_4,@function
.align 16
sp_256_mont_div2_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_div2_avx2_4
.p2align 4
_sp_256_mont_div2_avx2_4:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq $0xffffffff00000001, %r10
movq %rdx, %r11
andq $0x01, %r11
negq %r11
movl %r11d, %r9d
andq %r11, %r10
addq %r11, %rdx
adcq %r9, %rax
adcq $0x00, %rcx
adcq %r10, %r8
movq $0x00, %r11
adcq $0x00, %r11
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r11, %r8
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mont_div2_avx2_4,.-sp_256_mont_div2_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_256_get_entry_64_4
.type sp_256_get_entry_64_4,@function
.align 16
sp_256_get_entry_64_4:
#else
.section __TEXT,__text
.globl _sp_256_get_entry_64_4
.p2align 4
_sp_256_get_entry_64_4:
#endif /* __APPLE__ */
# From entry 1
movq $0x01, %rax
movd %edx, %xmm9
addq $0x40, %rsi
movd %eax, %xmm11
movq $63, %rax
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm9, %xmm9
pxor %xmm10, %xmm10
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
movdqa %xmm11, %xmm10
L_256_get_entry_64_4_start_0:
movdqa %xmm10, %xmm8
paddd %xmm11, %xmm10
pcmpeqd %xmm9, %xmm8
movdqu (%rsi), %xmm4
movdqu 16(%rsi), %xmm5
movdqu 32(%rsi), %xmm6
movdqu 48(%rsi), %xmm7
addq $0x40, %rsi
pand %xmm8, %xmm4
pand %xmm8, %xmm5
pand %xmm8, %xmm6
pand %xmm8, %xmm7
por %xmm4, %xmm0
por %xmm5, %xmm1
por %xmm6, %xmm2
por %xmm7, %xmm3
decq %rax
jnz L_256_get_entry_64_4_start_0
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 64(%rdi)
movdqu %xmm3, 80(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_get_entry_64_4,.-sp_256_get_entry_64_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_256_get_entry_64_avx2_4
.type sp_256_get_entry_64_avx2_4,@function
.align 16
sp_256_get_entry_64_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_get_entry_64_avx2_4
.p2align 4
_sp_256_get_entry_64_avx2_4:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm5
addq $0x40, %rsi
movd %eax, %xmm7
movq $0x40, %rax
vpxor %ymm6, %ymm6, %ymm6
vpermd %ymm5, %ymm6, %ymm5
vpermd %ymm7, %ymm6, %ymm7
vpxor %ymm0, %ymm0, %ymm0
vpxor %ymm1, %ymm1, %ymm1
vmovdqa %ymm7, %ymm6
L_256_get_entry_64_avx2_4_start:
vpcmpeqd %ymm5, %ymm6, %ymm4
vpaddd %ymm7, %ymm6, %ymm6
vmovupd (%rsi), %ymm2
vmovupd 32(%rsi), %ymm3
addq $0x40, %rsi
vpand %ymm4, %ymm2, %ymm2
vpand %ymm4, %ymm3, %ymm3
vpor %ymm2, %ymm0, %ymm0
vpor %ymm3, %ymm1, %ymm1
decq %rax
jnz L_256_get_entry_64_avx2_4_start
vmovupd %ymm0, (%rdi)
vmovupd %ymm1, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_get_entry_64_avx2_4,.-sp_256_get_entry_64_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_256_get_entry_65_4
.type sp_256_get_entry_65_4,@function
.align 16
sp_256_get_entry_65_4:
#else
.section __TEXT,__text
.globl _sp_256_get_entry_65_4
.p2align 4
_sp_256_get_entry_65_4:
#endif /* __APPLE__ */
# From entry 1
movq $0x01, %rax
movd %edx, %xmm9
addq $0x40, %rsi
movd %eax, %xmm11
movq $0x40, %rax
pshufd $0x00, %xmm11, %xmm11
pshufd $0x00, %xmm9, %xmm9
pxor %xmm10, %xmm10
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
movdqa %xmm11, %xmm10
L_256_get_entry_65_4_start_0:
movdqa %xmm10, %xmm8
paddd %xmm11, %xmm10
pcmpeqd %xmm9, %xmm8
movdqu (%rsi), %xmm4
movdqu 16(%rsi), %xmm5
movdqu 32(%rsi), %xmm6
movdqu 48(%rsi), %xmm7
addq $0x40, %rsi
pand %xmm8, %xmm4
pand %xmm8, %xmm5
pand %xmm8, %xmm6
pand %xmm8, %xmm7
por %xmm4, %xmm0
por %xmm5, %xmm1
por %xmm6, %xmm2
por %xmm7, %xmm3
decq %rax
jnz L_256_get_entry_65_4_start_0
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 64(%rdi)
movdqu %xmm3, 80(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_get_entry_65_4,.-sp_256_get_entry_65_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_256_get_entry_65_avx2_4
.type sp_256_get_entry_65_avx2_4,@function
.align 16
sp_256_get_entry_65_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_get_entry_65_avx2_4
.p2align 4
_sp_256_get_entry_65_avx2_4:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm5
addq $0x40, %rsi
movd %eax, %xmm7
movq $0x41, %rax
vpxor %ymm6, %ymm6, %ymm6
vpermd %ymm5, %ymm6, %ymm5
vpermd %ymm7, %ymm6, %ymm7
vpxor %ymm0, %ymm0, %ymm0
vpxor %ymm1, %ymm1, %ymm1
vmovdqa %ymm7, %ymm6
L_256_get_entry_65_avx2_4_start:
vpcmpeqd %ymm5, %ymm6, %ymm4
vpaddd %ymm7, %ymm6, %ymm6
vmovupd (%rsi), %ymm2
vmovupd 32(%rsi), %ymm3
addq $0x40, %rsi
vpand %ymm4, %ymm2, %ymm2
vpand %ymm4, %ymm3, %ymm3
vpor %ymm2, %ymm0, %ymm0
vpor %ymm3, %ymm1, %ymm1
decq %rax
jnz L_256_get_entry_65_avx2_4_start
vmovupd %ymm0, (%rdi)
vmovupd %ymm1, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_get_entry_65_avx2_4,.-sp_256_get_entry_65_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Add 1 to a. (a = a + 1)
*
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_256_add_one_4
.type sp_256_add_one_4,@function
.align 16
sp_256_add_one_4:
#else
.section __TEXT,__text
.globl _sp_256_add_one_4
.p2align 4
_sp_256_add_one_4:
#endif /* __APPLE__ */
addq $0x01, (%rdi)
adcq $0x00, 8(%rdi)
adcq $0x00, 16(%rdi)
adcq $0x00, 24(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_add_one_4,.-sp_256_add_one_4
#endif /* __APPLE__ */
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_256_from_bin_bswap
.type sp_256_from_bin_bswap,@function
.align 16
sp_256_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_256_from_bin_bswap
.p2align 4
_sp_256_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $32, %r10
xorq %r11, %r11
jmp L_256_from_bin_bswap_64_end
L_256_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_256_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_256_from_bin_bswap_64_start
jmp L_256_from_bin_bswap_8_end
L_256_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_256_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_256_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_256_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_256_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_256_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_256_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_256_from_bin_bswap_zero_end
L_256_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_256_from_bin_bswap_zero_start
L_256_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_256_from_bin_bswap,.-sp_256_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_256_from_bin_movbe
.type sp_256_from_bin_movbe,@function
.align 16
sp_256_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_256_from_bin_movbe
.p2align 4
_sp_256_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $32, %r10
jmp L_256_from_bin_movbe_64_end
L_256_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_256_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_256_from_bin_movbe_64_start
jmp L_256_from_bin_movbe_8_end
L_256_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_256_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_256_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_256_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_256_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_256_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_256_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_256_from_bin_movbe_zero_end
L_256_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_256_from_bin_movbe_zero_start
L_256_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_256_from_bin_movbe,.-sp_256_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 32
* Uses the bswap instruction.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_256_to_bin_bswap_4
.type sp_256_to_bin_bswap_4,@function
.align 16
sp_256_to_bin_bswap_4:
#else
.section __TEXT,__text
.globl _sp_256_to_bin_bswap_4
.p2align 4
_sp_256_to_bin_bswap_4:
#endif /* __APPLE__ */
movq 24(%rdi), %rdx
movq 16(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movq 8(%rdi), %rdx
movq (%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
repz retq
#ifndef __APPLE__
.size sp_256_to_bin_bswap_4,.-sp_256_to_bin_bswap_4
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 32
* Uses the movbe instruction which is optional.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_256_to_bin_movbe_4
.type sp_256_to_bin_movbe_4,@function
.align 16
sp_256_to_bin_movbe_4:
#else
.section __TEXT,__text
.globl _sp_256_to_bin_movbe_4
.p2align 4
_sp_256_to_bin_movbe_4:
#endif /* __APPLE__ */
movbeq 24(%rdi), %rdx
movbeq 16(%rdi), %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movbeq 8(%rdi), %rdx
movbeq (%rdi), %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
repz retq
#ifndef __APPLE__
.size sp_256_to_bin_movbe_4,.-sp_256_to_bin_movbe_4
#endif /* __APPLE__ */
#endif /* NO_MOVBE_SUPPORT */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_256_sub_in_place_4
.type sp_256_sub_in_place_4,@function
.align 16
sp_256_sub_in_place_4:
#else
.section __TEXT,__text
.globl _sp_256_sub_in_place_4
.p2align 4
_sp_256_sub_in_place_4:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
subq %rdx, (%rdi)
sbbq %rcx, 8(%rdi)
sbbq %r8, 16(%rdi)
sbbq %r9, 24(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_256_sub_in_place_4,.-sp_256_sub_in_place_4
#endif /* __APPLE__ */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_256_mul_d_4
.type sp_256_mul_d_4,@function
.align 16
sp_256_mul_d_4:
#else
.section __TEXT,__text
.globl _sp_256_mul_d_4
.p2align 4
_sp_256_mul_d_4:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mul_d_4,.-sp_256_mul_d_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_256_mul_d_avx2_4
.type sp_256_mul_d_avx2_4,@function
.align 16
sp_256_mul_d_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mul_d_avx2_4
.p2align 4
_sp_256_mul_d_avx2_4:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 24(%rdi)
movq %r9, 32(%rdi)
repz retq
#ifndef __APPLE__
.size sp_256_mul_d_avx2_4,.-sp_256_mul_d_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_256_word_asm_4
.type div_256_word_asm_4,@function
.align 16
div_256_word_asm_4:
#else
.section __TEXT,__text
.globl _div_256_word_asm_4
.p2align 4
_div_256_word_asm_4:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_256_word_asm_4,.-div_256_word_asm_4
#endif /* __APPLE__ */
#endif /* _WIN64 */
#ifdef HAVE_INTEL_AVX2
/* Multiply two Montgomery form numbers mod the modulus (prime).
* (r = a * b mod m)
*
* r Result of multiplication.
* a First number to multiply in Montgomery form.
* b Second number to multiply in Montgomery form.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_mul_order_avx2_4
.type sp_256_mont_mul_order_avx2_4,@function
.align 16
sp_256_mont_mul_order_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_mul_order_avx2_4
.p2align 4
_sp_256_mont_mul_order_avx2_4:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq %rdx, %rbp
movq (%rsi), %rdx
movq 8(%rbp), %r14
# A[0] * B[0]
mulxq (%rbp), %r8, %r9
xorq %rbx, %rbx
# A[0] * B[1]
mulxq %r14, %rax, %r10
adcxq %rax, %r9
# A[0] * B[2]
mulxq 16(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[3]
mulxq 24(%rbp), %rax, %r12
adcxq %rax, %r11
movq 8(%rsi), %rdx
adcxq %rbx, %r12
# A[1] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r9
# A[1] * B[1]
mulxq %r14, %rax, %r15
adoxq %rcx, %r10
adcxq %rax, %r10
# A[1] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r11
adcxq %rax, %r11
# A[1] * B[3]
mulxq 24(%rbp), %rax, %r13
adoxq %rcx, %r12
adcxq %rax, %r12
adoxq %rbx, %r13
movq 16(%rsi), %rdx
adcxq %rbx, %r13
# A[2] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r10
# A[2] * B[1]
mulxq %r14, %rax, %r15
adoxq %rcx, %r11
adcxq %rax, %r11
# A[2] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r12
adcxq %rax, %r12
# A[2] * B[3]
mulxq 24(%rbp), %rax, %r14
adoxq %rcx, %r13
adcxq %rax, %r13
adoxq %rbx, %r14
movq 24(%rsi), %rdx
adcxq %rbx, %r14
# A[3] * B[0]
mulxq (%rbp), %rax, %rcx
xorq %rbx, %rbx
adcxq %rax, %r11
# A[3] * B[1]
mulxq 8(%rbp), %rax, %r15
adoxq %rcx, %r12
adcxq %rax, %r12
# A[3] * B[2]
mulxq 16(%rbp), %rax, %rcx
adoxq %r15, %r13
adcxq %rax, %r13
# A[3] * B[3]
mulxq 24(%rbp), %rax, %r15
adoxq %rcx, %r14
adcxq %rax, %r14
adoxq %rbx, %r15
adcxq %rbx, %r15
# Start Reduction
movq $0xccd1c8aaee00bc4f, %rbx
# A[0]
movq %rbx, %rdx
imulq %r8, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r8
adoxq %rsi, %r9
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r9
adoxq %rsi, %r10
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r10
adoxq %rsi, %r11
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r11
adoxq %rsi, %r12
adcxq %rbp, %r12
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
# A[1]
movq %rbx, %rdx
imulq %r9, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r9
adoxq %rsi, %r10
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r10
adoxq %rsi, %r11
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r11
adoxq %rsi, %r12
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r12
adoxq %rsi, %r13
adcxq %r8, %r13
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
# A[2]
movq %rbx, %rdx
imulq %r10, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r10
adoxq %rsi, %r11
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r11
adoxq %rsi, %r12
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r12
adoxq %rsi, %r13
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r13
adoxq %rsi, %r14
adcxq %r8, %r14
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
# A[3]
movq %rbx, %rdx
imulq %r11, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r11
adoxq %rsi, %r12
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r12
adoxq %rsi, %r13
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r13
adoxq %rsi, %r14
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r14
adoxq %rsi, %r15
adcxq %r8, %r15
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
negq %r8
movq $0xf3b9cac2fc632551, %rax
movq $0xbce6faada7179e84, %rbx
andq %r8, %rax
movq $0xffffffff00000000, %rbp
andq %r8, %rbx
andq %r8, %rbp
subq %rax, %r12
sbbq %rbx, %r13
movq %r12, (%rdi)
sbbq %r8, %r14
movq %r13, 8(%rdi)
sbbq %rbp, %r15
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_256_mont_mul_order_avx2_4,.-sp_256_mont_mul_order_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
*
* r Result of squaring.
* a Number to square in Montgomery form.
*/
#ifndef __APPLE__
.text
.globl sp_256_mont_sqr_order_avx2_4
.type sp_256_mont_sqr_order_avx2_4,@function
.align 16
sp_256_mont_sqr_order_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mont_sqr_order_avx2_4
.p2align 4
_sp_256_mont_sqr_order_avx2_4:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
xorq %r8, %r8
movq (%rsi), %rdx
movq 8(%rsi), %rcx
movq 16(%rsi), %rbx
movq 24(%rsi), %r15
# A[0] * A[1]
mulxq %rcx, %r9, %r10
# A[0] * A[2]
mulxq %rbx, %r8, %r11
adoxq %r8, %r10
# A[0] * A[3]
mulxq %r15, %r8, %r12
movq %rcx, %rdx
adoxq %r8, %r11
# A[1] * A[2]
mulxq %rbx, %r8, %rax
movq %r15, %rdx
adcxq %r8, %r11
# A[1] * A[3]
mulxq %rcx, %r8, %r13
movq $0x00, %r15
adoxq %rax, %r12
adcxq %r8, %r12
# A[2] * A[3]
mulxq %rbx, %r8, %r14
adoxq %r15, %r13
adcxq %r8, %r13
adoxq %r15, %r14
adcxq %r15, %r14
# Double with Carry Flag
xorq %r15, %r15
# A[0] * A[0]
movq (%rsi), %rdx
mulxq %rdx, %r8, %rax
adcxq %r9, %r9
adcxq %r10, %r10
adoxq %rax, %r9
# A[1] * A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rcx, %rbx
adcxq %r11, %r11
adoxq %rcx, %r10
# A[2] * A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adcxq %r12, %r12
adoxq %rbx, %r11
adcxq %r13, %r13
adoxq %rax, %r12
adcxq %r14, %r14
# A[3] * A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rbx
adoxq %rcx, %r13
adcxq %r15, %r15
adoxq %rax, %r14
adoxq %rbx, %r15
# Start Reduction
movq $0xccd1c8aaee00bc4f, %rbx
# A[0]
movq %rbx, %rdx
imulq %r8, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r8
adoxq %rsi, %r9
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r9
adoxq %rsi, %r10
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r10
adoxq %rsi, %r11
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r11
adoxq %rsi, %r12
adcxq %rbp, %r12
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
# A[1]
movq %rbx, %rdx
imulq %r9, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r9
adoxq %rsi, %r10
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r10
adoxq %rsi, %r11
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r11
adoxq %rsi, %r12
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r12
adoxq %rsi, %r13
adcxq %r8, %r13
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
# A[2]
movq %rbx, %rdx
imulq %r10, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r10
adoxq %rsi, %r11
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r11
adoxq %rsi, %r12
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r12
adoxq %rsi, %r13
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r13
adoxq %rsi, %r14
adcxq %r8, %r14
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
# A[3]
movq %rbx, %rdx
imulq %r11, %rdx
movq $0xf3b9cac2fc632551, %rax
xorq %rbp, %rbp
mulxq %rax, %rcx, %rsi
movq $0xbce6faada7179e84, %rax
adcxq %rcx, %r11
adoxq %rsi, %r12
mulxq %rax, %rcx, %rsi
movq $0xffffffffffffffff, %rax
adcxq %rcx, %r12
adoxq %rsi, %r13
mulxq %rax, %rcx, %rsi
movq $0xffffffff00000000, %rax
adcxq %rcx, %r13
adoxq %rsi, %r14
mulxq %rax, %rcx, %rsi
adcxq %rcx, %r14
adoxq %rsi, %r15
adcxq %r8, %r15
movq %rbp, %r8
# carry
adoxq %rbp, %r8
adcxq %rbp, %r8
negq %r8
movq $0xf3b9cac2fc632551, %rax
movq $0xbce6faada7179e84, %rbx
andq %r8, %rax
movq $0xffffffff00000000, %rbp
andq %r8, %rbx
andq %r8, %rbp
subq %rax, %r12
sbbq %rbx, %r13
movq %r12, (%rdi)
sbbq %r8, %r14
movq %r13, 8(%rdi)
sbbq %rbp, %r15
movq %r14, 16(%rdi)
movq %r15, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_256_mont_sqr_order_avx2_4,.-sp_256_mont_sqr_order_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Non-constant time modular inversion.
*
* @param [out] r Resulting number.
* @param [in] a Number to invert.
* @param [in] m Modulus.
* @return MP_OKAY on success.
*/
#ifndef __APPLE__
.text
.globl sp_256_mod_inv_4
.type sp_256_mod_inv_4,@function
.align 16
sp_256_mod_inv_4:
#else
.section __TEXT,__text
.globl _sp_256_mod_inv_4
.p2align 4
_sp_256_mod_inv_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
subq $0x201, %rsp
movq (%rdx), %rcx
movq 8(%rdx), %r8
movq 16(%rdx), %r9
movq 24(%rdx), %r10
movq (%rsi), %r11
movq 8(%rsi), %r12
movq 16(%rsi), %r13
movq 24(%rsi), %r14
movq $0x00, %r15
testb $0x01, %r11b
jnz L_256_mod_inv_4_v_even_end
L_256_mod_inv_4_v_even_start:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
movb $0x01, (%rsp,%r15,1)
incq %r15
testb $0x01, %r11b
jz L_256_mod_inv_4_v_even_start
L_256_mod_inv_4_v_even_end:
L_256_mod_inv_4_uv_start:
cmpq %r14, %r10
jb L_256_mod_inv_4_uv_v
ja L_256_mod_inv_4_uv_u
cmpq %r13, %r9
jb L_256_mod_inv_4_uv_v
ja L_256_mod_inv_4_uv_u
cmpq %r12, %r8
jb L_256_mod_inv_4_uv_v
ja L_256_mod_inv_4_uv_u
cmpq %r11, %rcx
jb L_256_mod_inv_4_uv_v
L_256_mod_inv_4_uv_u:
movb $2, (%rsp,%r15,1)
incq %r15
subq %r11, %rcx
sbbq %r12, %r8
sbbq %r13, %r9
sbbq %r14, %r10
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
testb $0x01, %cl
jnz L_256_mod_inv_4_usubv_even_end
L_256_mod_inv_4_usubv_even_start:
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
movb $0x00, (%rsp,%r15,1)
incq %r15
testb $0x01, %cl
jz L_256_mod_inv_4_usubv_even_start
L_256_mod_inv_4_usubv_even_end:
cmpq $0x01, %rcx
jne L_256_mod_inv_4_uv_start
movq %r8, %rsi
orq %r9, %rsi
jne L_256_mod_inv_4_uv_start
orq %r10, %rsi
jne L_256_mod_inv_4_uv_start
movb $0x01, %al
jmp L_256_mod_inv_4_uv_end
L_256_mod_inv_4_uv_v:
movb $3, (%rsp,%r15,1)
incq %r15
subq %rcx, %r11
sbbq %r8, %r12
sbbq %r9, %r13
sbbq %r10, %r14
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
testb $0x01, %r11b
jnz L_256_mod_inv_4_vsubu_even_end
L_256_mod_inv_4_vsubu_even_start:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrq $0x01, %r14
movb $0x01, (%rsp,%r15,1)
incq %r15
testb $0x01, %r11b
jz L_256_mod_inv_4_vsubu_even_start
L_256_mod_inv_4_vsubu_even_end:
cmpq $0x01, %r11
jne L_256_mod_inv_4_uv_start
movq %r12, %rsi
orq %r13, %rsi
jne L_256_mod_inv_4_uv_start
orq %r14, %rsi
jne L_256_mod_inv_4_uv_start
movb $0x00, %al
L_256_mod_inv_4_uv_end:
movq (%rdx), %rcx
movq 8(%rdx), %r8
movq 16(%rdx), %r9
movq 24(%rdx), %r10
movq $0x01, %r11
xorq %r12, %r12
xorq %r13, %r13
xorq %r14, %r14
movb $7, (%rsp,%r15,1)
movb (%rsp), %sil
movq $0x01, %r15
cmpb $0x01, %sil
je L_256_mod_inv_4_op_div2_d
jl L_256_mod_inv_4_op_div2_b
cmpb $3, %sil
je L_256_mod_inv_4_op_d_sub_b
jl L_256_mod_inv_4_op_b_sub_d
jmp L_256_mod_inv_4_op_end
L_256_mod_inv_4_op_b_sub_d:
subq %r11, %rcx
sbbq %r12, %r8
sbbq %r13, %r9
sbbq %r14, %r10
jnc L_256_mod_inv_4_op_div2_b
addq (%rdx), %rcx
adcq 8(%rdx), %r8
adcq 16(%rdx), %r9
adcq 24(%rdx), %r10
L_256_mod_inv_4_op_div2_b:
testb $0x01, %cl
movq $0x00, %rsi
jz L_256_mod_inv_4_op_div2_b_mod
addq (%rdx), %rcx
adcq 8(%rdx), %r8
adcq 16(%rdx), %r9
adcq 24(%rdx), %r10
adcq $0x00, %rsi
L_256_mod_inv_4_op_div2_b_mod:
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %rsi, %r10
movb (%rsp,%r15,1), %sil
incq %r15
cmpb $0x01, %sil
je L_256_mod_inv_4_op_div2_d
jl L_256_mod_inv_4_op_div2_b
cmpb $3, %sil
je L_256_mod_inv_4_op_d_sub_b
jl L_256_mod_inv_4_op_b_sub_d
jmp L_256_mod_inv_4_op_end
L_256_mod_inv_4_op_d_sub_b:
subq %rcx, %r11
sbbq %r8, %r12
sbbq %r9, %r13
sbbq %r10, %r14
jnc L_256_mod_inv_4_op_div2_d
addq (%rdx), %r11
adcq 8(%rdx), %r12
adcq 16(%rdx), %r13
adcq 24(%rdx), %r14
L_256_mod_inv_4_op_div2_d:
testb $0x01, %r11b
movq $0x00, %rsi
jz L_256_mod_inv_4_op_div2_d_mod
addq (%rdx), %r11
adcq 8(%rdx), %r12
adcq 16(%rdx), %r13
adcq 24(%rdx), %r14
adcq $0x00, %rsi
L_256_mod_inv_4_op_div2_d_mod:
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrdq $0x01, %r14, %r13
shrdq $0x01, %rsi, %r14
movb (%rsp,%r15,1), %sil
incq %r15
cmpb $0x01, %sil
je L_256_mod_inv_4_op_div2_d
jl L_256_mod_inv_4_op_div2_b
cmpb $3, %sil
je L_256_mod_inv_4_op_d_sub_b
jl L_256_mod_inv_4_op_b_sub_d
L_256_mod_inv_4_op_end:
cmpb $0x01, %al
jne L_256_mod_inv_4_store_d
movq %rcx, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
jmp L_256_mod_inv_4_store_end
L_256_mod_inv_4_store_d:
movq %r11, (%rdi)
movq %r12, 8(%rdi)
movq %r13, 16(%rdi)
movq %r14, 24(%rdi)
L_256_mod_inv_4_store_end:
addq $0x201, %rsp
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mod_inv_4,.-sp_256_mod_inv_4
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_order:
.long 0x00632551,0x01e84f3b,0x03bce6fa,0x03ffffff
.long 0x03ff0000,0x00000000,0x00000000,0x00000000
.long 0x0272b0bf,0x02b69c5e,0x03ffffff,0x000003ff
.long 0x003fffff,0x00000000,0x00000000,0x00000000
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
#ifndef __APPLE__
.align 32
#else
.p2align 5
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_one:
.quad 0x1, 0x0
.quad 0x0, 0x0
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_all_one:
.long 0x00000001,0x00000001,0x00000001,0x00000001
.long 0x00000001,0x00000001,0x00000001,0x00000001
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_mask01111:
.long 0x00000000,0x00000001,0x00000001,0x00000001
.long 0x00000001,0x00000000,0x00000000,0x00000000
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_down_one_dword:
.long 0x00000001,0x00000002,0x00000003,0x00000004
.long 0x00000005,0x00000006,0x00000007,0x00000007
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_neg:
.long 0x00000000,0x00000000,0x00000000,0x00000000
.long 0x80000000,0x00000000,0x00000000,0x00000000
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_up_one_dword:
.long 0x00000007,0x00000000,0x00000001,0x00000002
.long 0x00000003,0x00000007,0x00000007,0x00000007
#ifndef __APPLE__
.data
#else
.section __DATA,__data
#endif /* __APPLE__ */
L_sp256_mod_inv_avx2_4_mask26:
.long 0x03ffffff,0x03ffffff,0x03ffffff,0x03ffffff
.long 0x03ffffff,0x00000000,0x00000000,0x00000000
/* Non-constant time modular inversion.
*
* @param [out] r Resulting number.
* @param [in] a Number to invert.
* @param [in] m Modulus.
* @return MP_OKAY on success.
*/
#ifndef __APPLE__
.text
.globl sp_256_mod_inv_avx2_4
.type sp_256_mod_inv_avx2_4,@function
.align 16
sp_256_mod_inv_avx2_4:
#else
.section __TEXT,__text
.globl _sp_256_mod_inv_avx2_4
.p2align 4
_sp_256_mod_inv_avx2_4:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq (%rdx), %rax
movq 8(%rdx), %rcx
movq 16(%rdx), %r8
movq 24(%rdx), %r9
movq (%rsi), %r10
movq 8(%rsi), %r11
movq 16(%rsi), %r12
movq 24(%rsi), %r13
leaq L_sp256_mod_inv_avx2_4_order(%rip), %rbx
vmovupd (%rbx), %ymm6
vmovupd 32(%rbx), %ymm7
leaq L_sp256_mod_inv_avx2_4_one(%rip), %rbx
vmovupd (%rbx), %ymm8
leaq L_sp256_mod_inv_avx2_4_mask01111(%rip), %rbx
vmovupd (%rbx), %ymm9
leaq L_sp256_mod_inv_avx2_4_all_one(%rip), %rbx
vmovupd (%rbx), %ymm10
leaq L_sp256_mod_inv_avx2_4_down_one_dword(%rip), %rbx
vmovupd (%rbx), %ymm11
leaq L_sp256_mod_inv_avx2_4_neg(%rip), %rbx
vmovupd (%rbx), %ymm12
leaq L_sp256_mod_inv_avx2_4_up_one_dword(%rip), %rbx
vmovupd (%rbx), %ymm13
leaq L_sp256_mod_inv_avx2_4_mask26(%rip), %rbx
vmovupd (%rbx), %ymm14
vpxor %xmm0, %xmm0, %xmm0
vpxor %xmm1, %xmm1, %xmm1
vmovdqu %ymm8, %ymm2
vpxor %xmm3, %xmm3, %xmm3
testb $0x01, %r10b
jnz L_256_mod_inv_avx2_4_v_even_end
L_256_mod_inv_avx2_4_v_even_start:
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
vptest %ymm8, %ymm2
jz L_256_mod_inv_avx2_4_v_even_shr1
vpaddd %ymm6, %ymm2, %ymm2
vpaddd %ymm7, %ymm3, %ymm3
L_256_mod_inv_avx2_4_v_even_shr1:
vpand %ymm9, %ymm2, %ymm4
vpand %ymm10, %ymm3, %ymm5
vpermd %ymm4, %ymm11, %ymm4
vpsrad $0x01, %ymm2, %ymm2
vpsrad $0x01, %ymm3, %ymm3
vpslld $25, %ymm5, %ymm5
vpslld $25, %xmm4, %xmm4
vpaddd %ymm5, %ymm2, %ymm2
vpaddd %ymm4, %ymm3, %ymm3
testb $0x01, %r10b
jz L_256_mod_inv_avx2_4_v_even_start
L_256_mod_inv_avx2_4_v_even_end:
L_256_mod_inv_avx2_4_uv_start:
cmpq %r13, %r9
jb L_256_mod_inv_avx2_4_uv_v
ja L_256_mod_inv_avx2_4_uv_u
cmpq %r12, %r8
jb L_256_mod_inv_avx2_4_uv_v
ja L_256_mod_inv_avx2_4_uv_u
cmpq %r11, %rcx
jb L_256_mod_inv_avx2_4_uv_v
ja L_256_mod_inv_avx2_4_uv_u
cmpq %r10, %rax
jb L_256_mod_inv_avx2_4_uv_v
L_256_mod_inv_avx2_4_uv_u:
subq %r10, %rax
sbbq %r11, %rcx
vpsubd %ymm2, %ymm0, %ymm0
sbbq %r12, %r8
vpsubd %ymm3, %ymm1, %ymm1
sbbq %r13, %r9
vptest %ymm12, %ymm1
jz L_256_mod_inv_avx2_4_usubv_done_neg
vpaddd %ymm6, %ymm0, %ymm0
vpaddd %ymm7, %ymm1, %ymm1
L_256_mod_inv_avx2_4_usubv_done_neg:
L_256_mod_inv_avx2_4_usubv_shr1:
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrq $0x01, %r9
vptest %ymm8, %ymm0
jz L_256_mod_inv_avx2_4_usubv_sub_shr1
vpaddd %ymm6, %ymm0, %ymm0
vpaddd %ymm7, %ymm1, %ymm1
L_256_mod_inv_avx2_4_usubv_sub_shr1:
vpand %ymm9, %ymm0, %ymm4
vpand %ymm10, %ymm1, %ymm5
vpermd %ymm4, %ymm11, %ymm4
vpsrad $0x01, %ymm0, %ymm0
vpsrad $0x01, %ymm1, %ymm1
vpslld $25, %ymm5, %ymm5
vpslld $25, %xmm4, %xmm4
vpaddd %ymm5, %ymm0, %ymm0
vpaddd %ymm4, %ymm1, %ymm1
testb $0x01, %al
jz L_256_mod_inv_avx2_4_usubv_shr1
cmpq $0x01, %rax
jne L_256_mod_inv_avx2_4_uv_start
movq %rcx, %rsi
orq %r8, %rsi
jne L_256_mod_inv_avx2_4_uv_start
orq %r9, %rsi
jne L_256_mod_inv_avx2_4_uv_start
vpextrd $0x00, %xmm0, %eax
vpextrd $0x01, %xmm0, %r8d
vpextrd $2, %xmm0, %r10d
vpextrd $3, %xmm0, %r12d
vpextrd $0x00, %xmm1, %ecx
vpextrd $0x01, %xmm1, %r9d
vpextrd $2, %xmm1, %r11d
vpextrd $3, %xmm1, %r13d
vextracti128 $0x01, %ymm0, %xmm0
vextracti128 $0x01, %ymm1, %xmm1
vpextrd $0x00, %xmm0, %r14d
vpextrd $0x00, %xmm1, %r15d
jmp L_256_mod_inv_avx2_4_store_done
L_256_mod_inv_avx2_4_uv_v:
subq %rax, %r10
sbbq %rcx, %r11
vpsubd %ymm0, %ymm2, %ymm2
sbbq %r8, %r12
vpsubd %ymm1, %ymm3, %ymm3
sbbq %r9, %r13
vptest %ymm12, %ymm3
jz L_256_mod_inv_avx2_4_vsubu_done_neg
vpaddd %ymm6, %ymm2, %ymm2
vpaddd %ymm7, %ymm3, %ymm3
L_256_mod_inv_avx2_4_vsubu_done_neg:
L_256_mod_inv_avx2_4_vsubu_shr1:
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
vptest %ymm8, %ymm2
jz L_256_mod_inv_avx2_4_vsubu_sub_shr1
vpaddd %ymm6, %ymm2, %ymm2
vpaddd %ymm7, %ymm3, %ymm3
L_256_mod_inv_avx2_4_vsubu_sub_shr1:
vpand %ymm9, %ymm2, %ymm4
vpand %ymm10, %ymm3, %ymm5
vpermd %ymm4, %ymm11, %ymm4
vpsrad $0x01, %ymm2, %ymm2
vpsrad $0x01, %ymm3, %ymm3
vpslld $25, %ymm5, %ymm5
vpslld $25, %xmm4, %xmm4
vpaddd %ymm5, %ymm2, %ymm2
vpaddd %ymm4, %ymm3, %ymm3
testb $0x01, %r10b
jz L_256_mod_inv_avx2_4_vsubu_shr1
cmpq $0x01, %r10
jne L_256_mod_inv_avx2_4_uv_start
movq %r11, %rsi
orq %r12, %rsi
jne L_256_mod_inv_avx2_4_uv_start
orq %r13, %rsi
jne L_256_mod_inv_avx2_4_uv_start
vpextrd $0x00, %xmm2, %eax
vpextrd $0x01, %xmm2, %r8d
vpextrd $2, %xmm2, %r10d
vpextrd $3, %xmm2, %r12d
vpextrd $0x00, %xmm3, %ecx
vpextrd $0x01, %xmm3, %r9d
vpextrd $2, %xmm3, %r11d
vpextrd $3, %xmm3, %r13d
vextracti128 $0x01, %ymm2, %xmm2
vextracti128 $0x01, %ymm3, %xmm3
vpextrd $0x00, %xmm2, %r14d
vpextrd $0x00, %xmm3, %r15d
L_256_mod_inv_avx2_4_store_done:
movl %eax, %esi
andl $0x3ffffff, %eax
sarl $26, %esi
addl %esi, %ecx
movl %ecx, %esi
andl $0x3ffffff, %ecx
sarl $26, %esi
addl %esi, %r8d
movl %r8d, %esi
andl $0x3ffffff, %r8d
sarl $26, %esi
addl %esi, %r9d
movl %r9d, %esi
andl $0x3ffffff, %r9d
sarl $26, %esi
addl %esi, %r10d
movl %r10d, %esi
andl $0x3ffffff, %r10d
sarl $26, %esi
addl %esi, %r11d
movl %r11d, %esi
andl $0x3ffffff, %r11d
sarl $26, %esi
addl %esi, %r12d
movl %r12d, %esi
andl $0x3ffffff, %r12d
sarl $26, %esi
addl %esi, %r13d
movl %r13d, %esi
andl $0x3ffffff, %r13d
sarl $26, %esi
addl %esi, %r14d
movl %r14d, %esi
andl $0x3ffffff, %r14d
sarl $26, %esi
addl %esi, %r15d
movslq %ecx, %rcx
movslq %r9d, %r9
movslq %r11d, %r11
movslq %r13d, %r13
movslq %r15d, %r15
shlq $26, %rcx
shlq $26, %r9
shlq $26, %r11
shlq $26, %r13
shlq $26, %r15
movslq %eax, %rax
addq %rcx, %rax
movslq %r8d, %r8
adcq %r9, %r8
movslq %r10d, %r10
adcq %r11, %r10
movslq %r12d, %r12
adcq %r13, %r12
movslq %r14d, %r14
adcq %r15, %r14
jge L_256_mod_inv_avx2_4_3_no_add_order
movq $0x9cac2fc632551, %rcx
movq $0xada7179e84f3b, %r9
movq $0xfffffffbce6fa, %r11
movq $0xfffffffff, %r13
movq $0xffffffff0000, %r15
addq %rcx, %rax
addq %r9, %r8
addq %r11, %r10
addq %r13, %r12
addq %r15, %r14
movq $0xfffffffffffff, %rsi
movq %rax, %rcx
andq %rsi, %rax
sarq $52, %rcx
addq %rcx, %r8
movq %r8, %r9
andq %rsi, %r8
sarq $52, %r9
addq %r9, %r10
movq %r10, %r11
andq %rsi, %r10
sarq $52, %r11
addq %r11, %r12
movq %r12, %r13
andq %rsi, %r12
sarq $52, %r13
addq %r13, %r14
L_256_mod_inv_avx2_4_3_no_add_order:
movq %r8, %rcx
movq %r10, %r9
movq %r12, %r11
shlq $52, %rcx
sarq $12, %r8
shlq $40, %r9
sarq $24, %r10
shlq $28, %r11
sarq $36, %r12
shlq $16, %r14
addq %rcx, %rax
adcq %r9, %r8
adcq %r11, %r10
adcq %r14, %r12
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq %r10, 16(%rdi)
movq %r12, 24(%rdi)
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_256_mod_inv_avx2_4,.-sp_256_mod_inv_avx2_4
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WOLFSSL_SP_NO_256 */
#ifdef WOLFSSL_SP_384
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_384_mul_6
.type sp_384_mul_6,@function
.align 16
sp_384_mul_6:
#else
.section __TEXT,__text
.globl _sp_384_mul_6
.p2align 4
_sp_384_mul_6:
#endif /* __APPLE__ */
movq %rdx, %rcx
subq $48, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[0] * B[4]
movq 32(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[0]
movq (%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rsp)
# A[0] * B[5]
movq 40(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[4]
movq 32(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[1]
movq 8(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[0]
movq (%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 40(%rsp)
# A[1] * B[5]
movq 40(%rcx), %rax
mulq 8(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[4]
movq 32(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[2]
movq 16(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[1]
movq 8(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 48(%rdi)
# A[2] * B[5]
movq 40(%rcx), %rax
mulq 16(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[4]
movq 32(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[3]
movq 24(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[2]
movq 16(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 56(%rdi)
# A[3] * B[5]
movq 40(%rcx), %rax
mulq 24(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[4]
movq 32(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[3]
movq 24(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 64(%rdi)
# A[4] * B[5]
movq 40(%rcx), %rax
mulq 32(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[4]
movq 32(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 72(%rdi)
# A[5] * B[5]
movq 40(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r8
movq 24(%rsp), %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
addq $48, %rsp
repz retq
#ifndef __APPLE__
.size sp_384_mul_6,.-sp_384_mul_6
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r Result of multiplication.
* a First number to multiply.
* b Second number to multiply.
*/
#ifndef __APPLE__
.text
.globl sp_384_mul_avx2_6
.type sp_384_mul_avx2_6,@function
.align 16
sp_384_mul_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_mul_avx2_6
.p2align 4
_sp_384_mul_avx2_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
movq %rdx, %rax
subq $40, %rsp
xorq %rbx, %rbx
movq (%rsi), %rdx
# A[0] * B[0]
mulxq (%rax), %r9, %r10
# A[0] * B[1]
mulxq 8(%rax), %rcx, %r11
adcxq %rcx, %r10
# A[0] * B[2]
mulxq 16(%rax), %rcx, %r12
adcxq %rcx, %r11
# A[0] * B[3]
mulxq 24(%rax), %rcx, %r13
adcxq %rcx, %r12
# A[0] * B[4]
mulxq 32(%rax), %rcx, %r14
adcxq %rcx, %r13
# A[0] * B[5]
mulxq 40(%rax), %rcx, %r15
adcxq %rcx, %r14
adcxq %rbx, %r15
movq %r9, (%rsp)
movq $0x00, %r9
adcxq %rbx, %r9
xorq %rbx, %rbx
movq 8(%rsi), %rdx
# A[1] * B[0]
mulxq (%rax), %rcx, %r8
adcxq %rcx, %r10
adoxq %r8, %r11
# A[1] * B[1]
mulxq 8(%rax), %rcx, %r8
adcxq %rcx, %r11
adoxq %r8, %r12
# A[1] * B[2]
mulxq 16(%rax), %rcx, %r8
adcxq %rcx, %r12
adoxq %r8, %r13
# A[1] * B[3]
mulxq 24(%rax), %rcx, %r8
adcxq %rcx, %r13
adoxq %r8, %r14
# A[1] * B[4]
mulxq 32(%rax), %rcx, %r8
adcxq %rcx, %r14
adoxq %r8, %r15
# A[1] * B[5]
mulxq 40(%rax), %rcx, %r8
adcxq %rcx, %r15
adoxq %r8, %r9
adcxq %rbx, %r9
movq %r10, 8(%rsp)
movq $0x00, %r10
adcxq %rbx, %r10
adoxq %rbx, %r10
xorq %rbx, %rbx
movq 16(%rsi), %rdx
# A[2] * B[0]
mulxq (%rax), %rcx, %r8
adcxq %rcx, %r11
adoxq %r8, %r12
# A[2] * B[1]
mulxq 8(%rax), %rcx, %r8
adcxq %rcx, %r12
adoxq %r8, %r13
# A[2] * B[2]
mulxq 16(%rax), %rcx, %r8
adcxq %rcx, %r13
adoxq %r8, %r14
# A[2] * B[3]
mulxq 24(%rax), %rcx, %r8
adcxq %rcx, %r14
adoxq %r8, %r15
# A[2] * B[4]
mulxq 32(%rax), %rcx, %r8
adcxq %rcx, %r15
adoxq %r8, %r9
# A[2] * B[5]
mulxq 40(%rax), %rcx, %r8
adcxq %rcx, %r9
adoxq %r8, %r10
adcxq %rbx, %r10
movq %r11, 16(%rsp)
movq $0x00, %r11
adcxq %rbx, %r11
adoxq %rbx, %r11
xorq %rbx, %rbx
movq 24(%rsi), %rdx
# A[3] * B[0]
mulxq (%rax), %rcx, %r8
adcxq %rcx, %r12
adoxq %r8, %r13
# A[3] * B[1]
mulxq 8(%rax), %rcx, %r8
adcxq %rcx, %r13
adoxq %r8, %r14
# A[3] * B[2]
mulxq 16(%rax), %rcx, %r8
adcxq %rcx, %r14
adoxq %r8, %r15
# A[3] * B[3]
mulxq 24(%rax), %rcx, %r8
adcxq %rcx, %r15
adoxq %r8, %r9
# A[3] * B[4]
mulxq 32(%rax), %rcx, %r8
adcxq %rcx, %r9
adoxq %r8, %r10
# A[3] * B[5]
mulxq 40(%rax), %rcx, %r8
adcxq %rcx, %r10
adoxq %r8, %r11
adcxq %rbx, %r11
movq %r12, 24(%rsp)
movq $0x00, %r12
adcxq %rbx, %r12
adoxq %rbx, %r12
xorq %rbx, %rbx
movq 32(%rsi), %rdx
# A[4] * B[0]
mulxq (%rax), %rcx, %r8
adcxq %rcx, %r13
adoxq %r8, %r14
# A[4] * B[1]
mulxq 8(%rax), %rcx, %r8
adcxq %rcx, %r14
adoxq %r8, %r15
# A[4] * B[2]
mulxq 16(%rax), %rcx, %r8
adcxq %rcx, %r15
adoxq %r8, %r9
# A[4] * B[3]
mulxq 24(%rax), %rcx, %r8
adcxq %rcx, %r9
adoxq %r8, %r10
# A[4] * B[4]
mulxq 32(%rax), %rcx, %r8
adcxq %rcx, %r10
adoxq %r8, %r11
# A[4] * B[5]
mulxq 40(%rax), %rcx, %r8
adcxq %rcx, %r11
adoxq %r8, %r12
adcxq %rbx, %r12
movq %r13, 32(%rsp)
movq 40(%rsi), %rdx
# A[5] * B[0]
mulxq (%rax), %rcx, %r8
adcxq %rcx, %r14
adoxq %r8, %r15
# A[5] * B[1]
mulxq 8(%rax), %rcx, %r8
adcxq %rcx, %r15
adoxq %r8, %r9
# A[5] * B[2]
mulxq 16(%rax), %rcx, %r8
adcxq %rcx, %r9
adoxq %r8, %r10
# A[5] * B[3]
mulxq 24(%rax), %rcx, %r8
adcxq %rcx, %r10
adoxq %r8, %r11
# A[5] * B[4]
mulxq 32(%rax), %rcx, %r8
adcxq %rcx, %r11
adoxq %r8, %r12
# A[5] * B[5]
mulxq 40(%rax), %rcx, %r13
adcxq %rcx, %r12
adoxq %rbx, %r13
adcxq %rbx, %r13
movq %r14, 40(%rdi)
movq %r15, 48(%rdi)
movq %r9, 56(%rdi)
movq %r10, 64(%rdi)
movq %r11, 72(%rdi)
movq %r12, 80(%rdi)
movq %r13, 88(%rdi)
movq (%rsp), %r9
movq 8(%rsp), %r10
movq 16(%rsp), %r11
movq 24(%rsp), %r12
movq 32(%rsp), %r13
movq %r9, (%rdi)
movq %r10, 8(%rdi)
movq %r11, 16(%rdi)
movq %r12, 24(%rdi)
movq %r13, 32(%rdi)
addq $40, %rsp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mul_avx2_6,.-sp_384_mul_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_384_sqr_6
.type sp_384_sqr_6,@function
.align 16
sp_384_sqr_6:
#else
.section __TEXT,__text
.globl _sp_384_sqr_6
.p2align 4
_sp_384_sqr_6:
#endif /* __APPLE__ */
pushq %r12
subq $48, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r9, %r9
movq %rax, (%rsp)
movq %rdx, %r8
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 24(%rsp)
# A[0] * A[4]
movq 32(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 32(%rsp)
# A[0] * A[5]
movq 40(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[4]
movq 32(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 40(%rsp)
# A[1] * A[5]
movq 40(%rsi), %rax
mulq 8(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * A[4]
movq 32(%rsi), %rax
mulq 16(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 48(%rdi)
# A[2] * A[5]
movq 40(%rsi), %rax
mulq 16(%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[3] * A[4]
movq 32(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 56(%rdi)
# A[3] * A[5]
movq 40(%rsi), %rax
mulq 24(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[4] * A[4]
movq 32(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 64(%rdi)
# A[4] * A[5]
movq 40(%rsi), %rax
mulq 32(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 72(%rdi)
# A[5] * A[5]
movq 40(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r10
movq 24(%rsp), %r11
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
addq $48, %rsp
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_sqr_6,.-sp_384_sqr_6
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* r Result of squaring.
* a Number to square in Montgomery form.
*/
#ifndef __APPLE__
.text
.globl sp_384_sqr_avx2_6
.type sp_384_sqr_avx2_6,@function
.align 16
sp_384_sqr_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_sqr_avx2_6
.p2align 4
_sp_384_sqr_avx2_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
push %rdi
xorq %rdi, %rdi
movq (%rsi), %rdx
movq 8(%rsi), %r15
movq 16(%rsi), %rbx
movq 24(%rsi), %rbp
# Diagonal 0
# A[1] * A[0]
mulxq 8(%rsi), %r8, %r9
# A[2] * A[0]
mulxq 16(%rsi), %rax, %r10
adcxq %rax, %r9
# A[3] * A[0]
mulxq 24(%rsi), %rax, %r11
adcxq %rax, %r10
# A[4] * A[0]
mulxq 32(%rsi), %rax, %r12
adcxq %rax, %r11
# A[5] * A[0]
mulxq 40(%rsi), %rax, %r13
adcxq %rax, %r12
adcxq %rdi, %r13
# Diagonal 1
movq %r15, %rdx
# A[2] * A[1]
mulxq 16(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * A[1]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * A[1]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# A[5] * A[1]
mulxq 40(%rsi), %rax, %r14
adcxq %rax, %r13
adoxq %rdi, %r14
movq %rbx, %rdx
# A[5] * A[2]
mulxq 40(%rsi), %rax, %r15
adcxq %rax, %r14
adoxq %rdi, %r15
adcxq %rdi, %r15
adcxq %rdi, %rbx
# Diagonal 2
# A[3] * A[2]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# A[4] * A[2]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %rbp, %rdx
# A[4] * A[3]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[5] * A[3]
mulxq 40(%rsi), %rax, %rbx
adcxq %rax, %r15
adoxq %rdi, %rbx
movq 32(%rsi), %rdx
# A[5] * A[4]
mulxq 40(%rsi), %rax, %rbp
adcxq %rax, %rbx
adoxq %rdi, %rbp
adcxq %rdi, %rbp
adcxq %rdi, %rdi
# Doubling previous result as we add in square words results
# A[0] * A[0]
movq (%rsi), %rdx
mulxq %rdx, %rax, %rcx
pop %rdx
movq %rax, (%rdx)
adoxq %r8, %r8
push %rdx
adcxq %rcx, %r8
# A[1] * A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r9, %r9
adcxq %rax, %r9
adoxq %r10, %r10
adcxq %rcx, %r10
# A[2] * A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r11, %r11
adcxq %rax, %r11
adoxq %r12, %r12
adcxq %rcx, %r12
# A[3] * A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r13, %r13
adcxq %rax, %r13
adoxq %r14, %r14
adcxq %rcx, %r14
# A[4] * A[4]
movq 32(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r15, %r15
adcxq %rax, %r15
adoxq %rbx, %rbx
adcxq %rcx, %rbx
# A[5] * A[5]
movq 40(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %rbp, %rbp
adcxq %rax, %rbp
adcxq %rdi, %rcx
movq $0x00, %rax
adoxq %rax, %rcx
pop %rdi
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq %r11, 32(%rdi)
movq %r12, 40(%rdi)
movq %r13, 48(%rdi)
movq %r14, 56(%rdi)
movq %r15, 64(%rdi)
movq %rbx, 72(%rdi)
movq %rbp, 80(%rdi)
movq %rcx, 88(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_sqr_avx2_6,.-sp_384_sqr_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_384_add_6
.type sp_384_add_6,@function
.align 16
sp_384_add_6:
#else
.section __TEXT,__text
.globl _sp_384_add_6
.p2align 4
_sp_384_add_6:
#endif /* __APPLE__ */
pushq %r12
xorq %rax, %rax
movq (%rsi), %rcx
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
movq 32(%rsi), %r11
movq 40(%rsi), %r12
addq (%rdx), %rcx
adcq 8(%rdx), %r8
adcq 16(%rdx), %r9
adcq 24(%rdx), %r10
adcq 32(%rdx), %r11
adcq 40(%rdx), %r12
movq %rcx, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq %r11, 32(%rdi)
movq %r12, 40(%rdi)
adcq $0x00, %rax
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_add_6,.-sp_384_add_6
#endif /* __APPLE__ */
/* Sub b from a into r. (r = a - b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_384_sub_6
.type sp_384_sub_6,@function
.align 16
sp_384_sub_6:
#else
.section __TEXT,__text
.globl _sp_384_sub_6
.p2align 4
_sp_384_sub_6:
#endif /* __APPLE__ */
pushq %r12
xorq %rax, %rax
movq (%rsi), %rcx
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
movq 32(%rsi), %r11
movq 40(%rsi), %r12
subq (%rdx), %rcx
sbbq 8(%rdx), %r8
sbbq 16(%rdx), %r9
sbbq 24(%rdx), %r10
sbbq 32(%rdx), %r11
sbbq 40(%rdx), %r12
movq %rcx, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq %r11, 32(%rdi)
movq %r12, 40(%rdi)
sbbq %rax, %rax
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_sub_6,.-sp_384_sub_6
#endif /* __APPLE__ */
/* Conditionally copy a into r using the mask m.
* m is -1 to copy and 0 when not.
*
* r A single precision number to copy over.
* a A single precision number to copy.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_384_cond_copy_6
.type sp_384_cond_copy_6,@function
.align 16
sp_384_cond_copy_6:
#else
.section __TEXT,__text
.globl _sp_384_cond_copy_6
.p2align 4
_sp_384_cond_copy_6:
#endif /* __APPLE__ */
movq (%rdi), %rax
movq 8(%rdi), %rcx
movq 16(%rdi), %r8
movq 24(%rdi), %r9
movq 32(%rdi), %r10
movq 40(%rdi), %r11
xorq (%rsi), %rax
xorq 8(%rsi), %rcx
xorq 16(%rsi), %r8
xorq 24(%rsi), %r9
xorq 32(%rsi), %r10
xorq 40(%rsi), %r11
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
andq %rdx, %r10
andq %rdx, %r11
xorq %rax, (%rdi)
xorq %rcx, 8(%rdi)
xorq %r8, 16(%rdi)
xorq %r9, 24(%rdi)
xorq %r10, 32(%rdi)
xorq %r11, 40(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_cond_copy_6,.-sp_384_cond_copy_6
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_384_cond_sub_6
.type sp_384_cond_sub_6,@function
.align 16
sp_384_cond_sub_6:
#else
.section __TEXT,__text
.globl _sp_384_cond_sub_6
.p2align 4
_sp_384_cond_sub_6:
#endif /* __APPLE__ */
subq $48, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
sbbq %rax, %rax
addq $48, %rsp
repz retq
#ifndef __APPLE__
.size sp_384_cond_sub_6,.-sp_384_cond_sub_6
#endif /* __APPLE__ */
/* Reduce the number back to 384 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_reduce_6
.type sp_384_mont_reduce_6,@function
.align 16
sp_384_mont_reduce_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_reduce_6
.p2align 4
_sp_384_mont_reduce_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq (%rdi), %r11
movq 8(%rdi), %r12
movq 16(%rdi), %r13
movq 24(%rdi), %r14
movq 32(%rdi), %r15
movq 40(%rdi), %rsi
xorq %r10, %r10
# a[0-7] += m[0-5] * mu[0..1] = m[0-5] * (a[0..1] * mp)
movq 48(%rdi), %rbx
movq 56(%rdi), %rbp
movq %r11, %rdx
movq %r12, %rax
shldq $32, %rdx, %rax
shlq $32, %rdx
addq %r11, %rdx
adcq %r12, %rax
addq %r11, %rax
movq %rdx, %rcx
movq %rax, %r8
movq %rax, %r9
shldq $32, %rcx, %r8
shlq $32, %rcx
shrq $32, %r9
addq %rcx, %r11
adcq %r8, %r12
adcq %r9, %r13
adcq $0x00, %r14
adcq $0x00, %r15
adcq $0x00, %rsi
adcq %rdx, %rbx
adcq %rax, %rbp
adcq $0x00, %r10
addq %rax, %rcx
adcq %rdx, %r8
adcq %rax, %r9
movq $0x00, %rax
adcq $0x00, %rax
subq %r8, %r13
sbbq %r9, %r14
sbbq %rax, %r15
sbbq $0x00, %rsi
sbbq $0x00, %rbx
sbbq $0x00, %rbp
sbbq $0x00, %r10
# a[2-9] += m[0-5] * mu[0..1] = m[0-5] * (a[2..3] * mp)
movq 64(%rdi), %r11
movq 72(%rdi), %r12
movq %r13, %rdx
movq %r14, %rax
shldq $32, %rdx, %rax
shlq $32, %rdx
addq %r13, %rdx
adcq %r14, %rax
addq %r13, %rax
movq %rdx, %rcx
movq %rax, %r8
movq %rax, %r9
shldq $32, %rcx, %r8
shlq $32, %rcx
shrq $32, %r9
addq %r10, %r11
adcq $0x00, %r12
movq $0x00, %r10
adcq $0x00, %r10
addq %rcx, %r13
adcq %r8, %r14
adcq %r9, %r15
adcq $0x00, %rsi
adcq $0x00, %rbx
adcq $0x00, %rbp
adcq %rdx, %r11
adcq %rax, %r12
adcq $0x00, %r10
addq %rax, %rcx
adcq %rdx, %r8
adcq %rax, %r9
movq $0x00, %rax
adcq $0x00, %rax
subq %r8, %r15
sbbq %r9, %rsi
sbbq %rax, %rbx
sbbq $0x00, %rbp
sbbq $0x00, %r11
sbbq $0x00, %r12
sbbq $0x00, %r10
# a[4-11] += m[0-5] * mu[0..1] = m[0-5] * (a[4..5] * mp)
movq 80(%rdi), %r13
movq 88(%rdi), %r14
movq %r15, %rdx
movq %rsi, %rax
shldq $32, %rdx, %rax
shlq $32, %rdx
addq %r15, %rdx
adcq %rsi, %rax
addq %r15, %rax
movq %rdx, %rcx
movq %rax, %r8
movq %rax, %r9
shldq $32, %rcx, %r8
shlq $32, %rcx
shrq $32, %r9
addq %r10, %r13
adcq $0x00, %r14
movq $0x00, %r10
adcq $0x00, %r10
addq %rcx, %r15
adcq %r8, %rsi
adcq %r9, %rbx
adcq $0x00, %rbp
adcq $0x00, %r11
adcq $0x00, %r12
adcq %rdx, %r13
adcq %rax, %r14
adcq $0x00, %r10
addq %rax, %rcx
adcq %rdx, %r8
adcq %rax, %r9
movq $0x00, %rax
adcq $0x00, %rax
subq %r8, %rbx
sbbq %r9, %rbp
sbbq %rax, %r11
sbbq $0x00, %r12
sbbq $0x00, %r13
sbbq $0x00, %r14
sbbq $0x00, %r10
# Subtract mod if carry
negq %r10
movq $0xfffffffffffffffe, %r9
movl %r10d, %ecx
movq %r10, %r8
andq %r10, %r9
shlq $32, %r8
subq %rcx, %rbx
sbbq %r8, %rbp
sbbq %r9, %r11
sbbq %r10, %r12
sbbq %r10, %r13
sbbq %r10, %r14
movq %rbx, (%rdi)
movq %rbp, 8(%rdi)
movq %r11, 16(%rdi)
movq %r12, 24(%rdi)
movq %r13, 32(%rdi)
movq %r14, 40(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_reduce_6,.-sp_384_mont_reduce_6
#endif /* __APPLE__ */
/* Reduce the number back to 384 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_reduce_order_6
.type sp_384_mont_reduce_order_6,@function
.align 16
sp_384_mont_reduce_order_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_reduce_order_6
.p2align 4
_sp_384_mont_reduce_order_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 6
movq $6, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_384_mont_reduce_order_6_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 40(%rdi)
adcq %rdx, 48(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_384_mont_reduce_order_6_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $48, %rdi
#ifndef __APPLE__
callq sp_384_cond_sub_6@plt
#else
callq _sp_384_cond_sub_6
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_reduce_order_6,.-sp_384_mont_reduce_order_6
#endif /* __APPLE__ */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_384_cmp_6
.type sp_384_cmp_6,@function
.align 16
sp_384_cmp_6:
#else
.section __TEXT,__text
.globl _sp_384_cmp_6
.p2align 4
_sp_384_cmp_6:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_384_cmp_6,.-sp_384_cmp_6
#endif /* __APPLE__ */
/* Add two Montgomery form numbers (r = a + b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_add_6
.type sp_384_mont_add_6,@function
.align 16
sp_384_mont_add_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_add_6
.p2align 4
_sp_384_mont_add_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
movq 40(%rsi), %r11
addq (%rdx), %rax
adcq 8(%rdx), %rcx
movq $0xffffffff00000000, %r13
adcq 16(%rdx), %r8
movq $0xfffffffffffffffe, %r14
adcq 24(%rdx), %r9
adcq 32(%rdx), %r10
adcq 40(%rdx), %r11
sbbq %rsi, %rsi
movl %esi, %r12d
andq %rsi, %r13
andq %rsi, %r14
subq %r12, %rax
sbbq %r13, %rcx
sbbq %r14, %r8
sbbq %rsi, %r9
sbbq %rsi, %r10
sbbq %rsi, %r11
adcq $0x00, %rsi
andq %rsi, %r12
andq %rsi, %r13
andq %rsi, %r14
subq %r12, %rax
sbbq %r13, %rcx
movq %rax, (%rdi)
sbbq %r14, %r8
movq %rcx, 8(%rdi)
sbbq %rsi, %r9
movq %r8, 16(%rdi)
sbbq %rsi, %r10
movq %r9, 24(%rdi)
sbbq %rsi, %r11
movq %r10, 32(%rdi)
movq %r11, 40(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_add_6,.-sp_384_mont_add_6
#endif /* __APPLE__ */
/* Double a Montgomery form number (r = a + a % m).
*
* r Result of doubling.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_dbl_6
.type sp_384_mont_dbl_6,@function
.align 16
sp_384_mont_dbl_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_dbl_6
.p2align 4
_sp_384_mont_dbl_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
addq %rdx, %rdx
adcq %rax, %rax
movq $0xffffffff00000000, %r12
adcq %rcx, %rcx
movq $0xfffffffffffffffe, %r13
adcq %r8, %r8
adcq %r9, %r9
movq %r10, %r14
adcq %r10, %r10
sarq $63, %r14
movl %r14d, %r11d
andq %r14, %r12
andq %r14, %r13
subq %r11, %rdx
sbbq %r12, %rax
sbbq %r13, %rcx
sbbq %r14, %r8
sbbq %r14, %r9
sbbq %r14, %r10
adcq $0x00, %r14
andq %r14, %r11
andq %r14, %r12
andq %r14, %r13
subq %r11, %rdx
sbbq %r12, %rax
movq %rdx, (%rdi)
sbbq %r13, %rcx
movq %rax, 8(%rdi)
sbbq %r14, %r8
movq %rcx, 16(%rdi)
sbbq %r14, %r9
movq %r8, 24(%rdi)
sbbq %r14, %r10
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_dbl_6,.-sp_384_mont_dbl_6
#endif /* __APPLE__ */
/* Double a Montgomery form number (r = a + a % m).
*
* r Result of doubling.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_tpl_6
.type sp_384_mont_tpl_6,@function
.align 16
sp_384_mont_tpl_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_tpl_6
.p2align 4
_sp_384_mont_tpl_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
addq %rdx, %rdx
adcq %rax, %rax
movq $0xffffffff00000000, %r12
adcq %rcx, %rcx
movq $0xfffffffffffffffe, %r13
adcq %r8, %r8
adcq %r9, %r9
adcq %r10, %r10
sbbq %r14, %r14
movl %r14d, %r11d
andq %r14, %r12
andq %r14, %r13
subq %r11, %rdx
sbbq %r12, %rax
sbbq %r13, %rcx
sbbq %r14, %r8
sbbq %r14, %r9
sbbq %r14, %r10
adcq $0x00, %r14
andq %r14, %r11
andq %r14, %r12
andq %r14, %r13
subq %r11, %rdx
sbbq %r12, %rax
movq %rdx, (%rdi)
sbbq %r13, %rcx
sbbq %r14, %r8
sbbq %r14, %r9
sbbq %r14, %r10
addq (%rsi), %rdx
adcq 8(%rsi), %rax
movq $0xffffffff00000000, %r12
adcq 16(%rsi), %rcx
movq $0xfffffffffffffffe, %r13
adcq 24(%rsi), %r8
adcq 32(%rsi), %r9
adcq 40(%rsi), %r10
sbbq %r14, %r14
movl %r14d, %r11d
andq %r14, %r12
andq %r14, %r13
subq %r11, %rdx
sbbq %r12, %rax
sbbq %r13, %rcx
sbbq %r14, %r8
sbbq %r14, %r9
sbbq %r14, %r10
adcq $0x00, %r14
andq %r14, %r11
andq %r14, %r12
andq %r14, %r13
subq %r11, %rdx
sbbq %r12, %rax
movq %rdx, (%rdi)
sbbq %r13, %rcx
movq %rax, 8(%rdi)
sbbq %r14, %r8
movq %rcx, 16(%rdi)
sbbq %r14, %r9
movq %r8, 24(%rdi)
sbbq %r14, %r10
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_tpl_6,.-sp_384_mont_tpl_6
#endif /* __APPLE__ */
/* Subtract two Montgomery form numbers (r = a - b % m).
*
* r Result of subtration.
* a Number to subtract from in Montgomery form.
* b Number to subtract with in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_sub_6
.type sp_384_mont_sub_6,@function
.align 16
sp_384_mont_sub_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_sub_6
.p2align 4
_sp_384_mont_sub_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
movq 40(%rsi), %r11
subq (%rdx), %rax
sbbq 8(%rdx), %rcx
movq $0xffffffff00000000, %r13
sbbq 16(%rdx), %r8
movq $0xfffffffffffffffe, %r14
sbbq 24(%rdx), %r9
sbbq 32(%rdx), %r10
sbbq 40(%rdx), %r11
sbbq %rsi, %rsi
movl %esi, %r12d
andq %rsi, %r13
andq %rsi, %r14
addq %r12, %rax
adcq %r13, %rcx
adcq %r14, %r8
adcq %rsi, %r9
adcq %rsi, %r10
adcq %rsi, %r11
adcq $0x00, %rsi
andq %rsi, %r12
andq %rsi, %r13
andq %rsi, %r14
addq %r12, %rax
adcq %r13, %rcx
movq %rax, (%rdi)
adcq %r14, %r8
movq %rcx, 8(%rdi)
adcq %rsi, %r9
movq %r8, 16(%rdi)
adcq %rsi, %r10
movq %r9, 24(%rdi)
adcq %rsi, %r11
movq %r10, 32(%rdi)
movq %r11, 40(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_sub_6,.-sp_384_mont_sub_6
#endif /* __APPLE__ */
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_div2_6
.type sp_384_mont_div2_6,@function
.align 16
sp_384_mont_div2_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_div2_6
.p2align 4
_sp_384_mont_div2_6:
#endif /* __APPLE__ */
subq $48, %rsp
movq (%rsi), %r11
xorq %r10, %r10
movq %r11, %rax
andq $0x01, %r11
negq %r11
movq (%rdx), %r8
andq %r11, %r8
movq %r8, (%rsp)
movq 8(%rdx), %r8
andq %r11, %r8
movq %r8, 8(%rsp)
movq 16(%rdx), %r8
andq %r11, %r8
movq %r8, 16(%rsp)
movq 24(%rdx), %r8
andq %r11, %r8
movq %r8, 24(%rsp)
movq 32(%rdx), %r8
andq %r11, %r8
movq %r8, 32(%rsp)
movq 40(%rdx), %r8
andq %r11, %r8
movq %r8, 40(%rsp)
addq %rax, (%rsp)
movq 8(%rsi), %rax
adcq %rax, 8(%rsp)
movq 16(%rsi), %rax
adcq %rax, 16(%rsp)
movq 24(%rsi), %rax
adcq %rax, 24(%rsp)
movq 32(%rsi), %rax
adcq %rax, 32(%rsp)
movq 40(%rsi), %rax
adcq %rax, 40(%rsp)
adcq $0x00, %r10
movq (%rsp), %rax
movq 8(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, (%rdi)
movq 16(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 8(%rdi)
movq 24(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 16(%rdi)
movq 32(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 24(%rdi)
movq 40(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 32(%rdi)
shrdq $0x01, %r10, %rcx
movq %rcx, 40(%rdi)
addq $48, %rsp
repz retq
#ifndef __APPLE__
.size sp_384_mont_div2_6,.-sp_384_mont_div2_6
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible point that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of point to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_384_get_point_33_6
.type sp_384_get_point_33_6,@function
.align 16
sp_384_get_point_33_6:
#else
.section __TEXT,__text
.globl _sp_384_get_point_33_6
.p2align 4
_sp_384_get_point_33_6:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm13
addq $0x128, %rsi
movd %eax, %xmm15
movq $32, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
movdqa %xmm15, %xmm14
L_384_get_point_33_6_start_1:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
movdqu (%rsi), %xmm6
movdqu 16(%rsi), %xmm7
movdqu 32(%rsi), %xmm8
movdqu 96(%rsi), %xmm9
movdqu 112(%rsi), %xmm10
movdqu 128(%rsi), %xmm11
addq $0x128, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
pand %xmm12, %xmm9
pand %xmm12, %xmm10
pand %xmm12, %xmm11
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
por %xmm9, %xmm3
por %xmm10, %xmm4
por %xmm11, %xmm5
decq %rax
jnz L_384_get_point_33_6_start_1
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 32(%rdi)
movdqu %xmm3, 96(%rdi)
movdqu %xmm4, 112(%rdi)
movdqu %xmm5, 128(%rdi)
movq $0x01, %rax
movd %edx, %xmm13
subq $0x2500, %rsi
movd %eax, %xmm15
movq $32, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
movdqa %xmm15, %xmm14
L_384_get_point_33_6_start_2:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
movdqu 192(%rsi), %xmm6
movdqu 208(%rsi), %xmm7
movdqu 224(%rsi), %xmm8
addq $0x128, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
decq %rax
jnz L_384_get_point_33_6_start_2
movdqu %xmm0, 192(%rdi)
movdqu %xmm1, 208(%rdi)
movdqu %xmm2, 224(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_get_point_33_6,.-sp_384_get_point_33_6
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible point that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of point to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_384_get_point_33_avx2_6
.type sp_384_get_point_33_avx2_6,@function
.align 16
sp_384_get_point_33_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_get_point_33_avx2_6
.p2align 4
_sp_384_get_point_33_avx2_6:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm13
addq $0x128, %rsi
movd %eax, %xmm15
movq $32, %rax
vpxor %ymm14, %ymm14, %ymm14
vpermd %ymm13, %ymm14, %ymm13
vpermd %ymm15, %ymm14, %ymm15
vpxor %ymm0, %ymm0, %ymm0
vpxor %xmm1, %xmm1, %xmm1
vpxor %ymm2, %ymm2, %ymm2
vpxor %xmm3, %xmm3, %xmm3
vpxor %ymm4, %ymm4, %ymm4
vpxor %xmm5, %xmm5, %xmm5
vmovdqa %ymm15, %ymm14
L_384_get_point_33_avx2_6_start:
vpcmpeqd %ymm13, %ymm14, %ymm12
vpaddd %ymm15, %ymm14, %ymm14
vmovupd (%rsi), %ymm6
vmovdqu 32(%rsi), %xmm7
vmovupd 96(%rsi), %ymm8
vmovdqu 128(%rsi), %xmm9
vmovupd 192(%rsi), %ymm10
vmovdqu 224(%rsi), %xmm11
addq $0x128, %rsi
vpand %ymm12, %ymm6, %ymm6
vpand %xmm12, %xmm7, %xmm7
vpand %ymm12, %ymm8, %ymm8
vpand %xmm12, %xmm9, %xmm9
vpand %ymm12, %ymm10, %ymm10
vpand %xmm12, %xmm11, %xmm11
vpor %ymm6, %ymm0, %ymm0
vpor %xmm7, %xmm1, %xmm1
vpor %ymm8, %ymm2, %ymm2
vpor %xmm9, %xmm3, %xmm3
vpor %ymm10, %ymm4, %ymm4
vpor %xmm11, %xmm5, %xmm5
decq %rax
jnz L_384_get_point_33_avx2_6_start
vmovupd %ymm0, (%rdi)
vmovdqu %xmm1, 32(%rdi)
vmovupd %ymm2, 96(%rdi)
vmovdqu %xmm3, 128(%rdi)
vmovupd %ymm4, 192(%rdi)
vmovdqu %xmm5, 224(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_get_point_33_avx2_6,.-sp_384_get_point_33_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 384 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_reduce_order_avx2_6
.type sp_384_mont_reduce_order_avx2_6,@function
.align 16
sp_384_mont_reduce_order_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_reduce_order_avx2_6
.p2align 4
_sp_384_mont_reduce_order_avx2_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
movq %rdx, %rax
xorq %r13, %r13
movq (%rdi), %r12
xorq %r11, %r11
L_mont_loop_order_avx2_6:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r9
imulq %rax, %rdx
xorq %r11, %r11
# a[i+0] += m[0] * mu
mulxq (%rsi), %rcx, %r8
movq 8(%rdi), %r12
adcxq %rcx, %r9
adoxq %r8, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rcx, %r8
movq 16(%rdi), %r9
adcxq %rcx, %r12
adoxq %r8, %r9
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rcx, %r8
movq 24(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rcx, %r8
movq 32(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rcx, %r8
movq 40(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rcx, %r8
movq 48(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
adcxq %r13, %r9
movq %r9, 48(%rdi)
movq %r11, %r13
adoxq %r11, %r13
adcxq %r11, %r13
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r9
imulq %rax, %rdx
xorq %r11, %r11
# a[i+0] += m[0] * mu
mulxq (%rsi), %rcx, %r8
movq 16(%rdi), %r12
adcxq %rcx, %r9
adoxq %r8, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rcx, %r8
movq 24(%rdi), %r9
adcxq %rcx, %r12
adoxq %r8, %r9
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rcx, %r8
movq 32(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 24(%rdi)
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rcx, %r8
movq 40(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 32(%rdi)
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rcx, %r8
movq 48(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 40(%rdi)
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rcx, %r8
movq 56(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 48(%rdi)
adcxq %r13, %r9
movq %r9, 56(%rdi)
movq %r11, %r13
adoxq %r11, %r13
adcxq %r11, %r13
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r9
imulq %rax, %rdx
xorq %r11, %r11
# a[i+0] += m[0] * mu
mulxq (%rsi), %rcx, %r8
movq 24(%rdi), %r12
adcxq %rcx, %r9
adoxq %r8, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rcx, %r8
movq 32(%rdi), %r9
adcxq %rcx, %r12
adoxq %r8, %r9
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rcx, %r8
movq 40(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rcx, %r8
movq 48(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rcx, %r8
movq 56(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rcx, %r8
movq 64(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
adcxq %r13, %r9
movq %r9, 64(%rdi)
movq %r11, %r13
adoxq %r11, %r13
adcxq %r11, %r13
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r9
imulq %rax, %rdx
xorq %r11, %r11
# a[i+0] += m[0] * mu
mulxq (%rsi), %rcx, %r8
movq 32(%rdi), %r12
adcxq %rcx, %r9
adoxq %r8, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rcx, %r8
movq 40(%rdi), %r9
adcxq %rcx, %r12
adoxq %r8, %r9
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rcx, %r8
movq 48(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 40(%rdi)
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rcx, %r8
movq 56(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 48(%rdi)
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rcx, %r8
movq 64(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 56(%rdi)
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rcx, %r8
movq 72(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 64(%rdi)
adcxq %r13, %r9
movq %r9, 72(%rdi)
movq %r11, %r13
adoxq %r11, %r13
adcxq %r11, %r13
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r9
imulq %rax, %rdx
xorq %r11, %r11
# a[i+0] += m[0] * mu
mulxq (%rsi), %rcx, %r8
movq 40(%rdi), %r12
adcxq %rcx, %r9
adoxq %r8, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rcx, %r8
movq 48(%rdi), %r9
adcxq %rcx, %r12
adoxq %r8, %r9
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rcx, %r8
movq 56(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rcx, %r8
movq 64(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rcx, %r8
movq 72(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rcx, %r8
movq 80(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
adcxq %r13, %r9
movq %r9, 80(%rdi)
movq %r11, %r13
adoxq %r11, %r13
adcxq %r11, %r13
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r9
imulq %rax, %rdx
xorq %r11, %r11
# a[i+0] += m[0] * mu
mulxq (%rsi), %rcx, %r8
movq 48(%rdi), %r12
adcxq %rcx, %r9
adoxq %r8, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rcx, %r8
movq 56(%rdi), %r9
adcxq %rcx, %r12
adoxq %r8, %r9
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rcx, %r8
movq 64(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 56(%rdi)
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rcx, %r8
movq 72(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 64(%rdi)
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rcx, %r8
movq 80(%rdi), %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 72(%rdi)
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rcx, %r8
movq 88(%rdi), %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 80(%rdi)
adcxq %r13, %r9
movq %r9, 88(%rdi)
movq %r11, %r13
adoxq %r11, %r13
adcxq %r11, %r13
negq %r13
movq %rdi, %rax
addq $48, %rdi
movq (%rsi), %r8
movq %r12, %rdx
pextq %r13, %r8, %r8
subq %r8, %rdx
movq 8(%rsi), %r8
movq 8(%rdi), %rcx
pextq %r13, %r8, %r8
movq %rdx, (%rax)
sbbq %r8, %rcx
movq 16(%rsi), %rdx
movq 16(%rdi), %r8
pextq %r13, %rdx, %rdx
movq %rcx, 8(%rax)
sbbq %rdx, %r8
movq 24(%rsi), %rcx
movq 24(%rdi), %rdx
pextq %r13, %rcx, %rcx
movq %r8, 16(%rax)
sbbq %rcx, %rdx
movq 32(%rsi), %r8
movq 32(%rdi), %rcx
pextq %r13, %r8, %r8
movq %rdx, 24(%rax)
sbbq %r8, %rcx
movq 40(%rsi), %rdx
movq 40(%rdi), %r8
pextq %r13, %rdx, %rdx
movq %rcx, 32(%rax)
sbbq %rdx, %r8
movq %r8, 40(%rax)
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_mont_reduce_order_avx2_6,.-sp_384_mont_reduce_order_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_384_cond_sub_avx2_6
.type sp_384_cond_sub_avx2_6,@function
.align 16
sp_384_cond_sub_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_cond_sub_avx2_6
.p2align 4
_sp_384_cond_sub_avx2_6:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq %r10, 40(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_384_cond_sub_avx2_6,.-sp_384_cond_sub_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_384_mont_div2_avx2_6
.type sp_384_mont_div2_avx2_6,@function
.align 16
sp_384_mont_div2_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_mont_div2_avx2_6
.p2align 4
_sp_384_mont_div2_avx2_6:
#endif /* __APPLE__ */
movq (%rsi), %r11
xorq %r10, %r10
movq %r11, %r8
andq $0x01, %r11
negq %r11
movq (%rdx), %rax
movq 8(%rdx), %rcx
movq (%rsi), %r8
movq 8(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
addq %rax, %r8
adcq %rcx, %r9
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq 16(%rdx), %rax
movq 24(%rdx), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdx), %rax
movq 40(%rdx), %rcx
movq 32(%rsi), %r8
movq 40(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
adcq $0x00, %r10
movq (%rdi), %r8
movq 8(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, (%rdi)
movq 16(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 16(%rdi)
movq 32(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 24(%rdi)
movq 40(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 32(%rdi)
shrdq $0x01, %r10, %r9
movq %r9, 40(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_mont_div2_avx2_6,.-sp_384_mont_div2_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_384_get_entry_64_6
.type sp_384_get_entry_64_6,@function
.align 16
sp_384_get_entry_64_6:
#else
.section __TEXT,__text
.globl _sp_384_get_entry_64_6
.p2align 4
_sp_384_get_entry_64_6:
#endif /* __APPLE__ */
# From entry 1
movq $0x01, %rax
movd %edx, %xmm13
addq $0x60, %rsi
movd %eax, %xmm15
movq $63, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
movdqa %xmm15, %xmm14
L_384_get_entry_64_6_start_0:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
movdqu (%rsi), %xmm6
movdqu 16(%rsi), %xmm7
movdqu 32(%rsi), %xmm8
movdqu 48(%rsi), %xmm9
movdqu 64(%rsi), %xmm10
movdqu 80(%rsi), %xmm11
addq $0x60, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
pand %xmm12, %xmm9
pand %xmm12, %xmm10
pand %xmm12, %xmm11
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
por %xmm9, %xmm3
por %xmm10, %xmm4
por %xmm11, %xmm5
decq %rax
jnz L_384_get_entry_64_6_start_0
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 32(%rdi)
movdqu %xmm3, 96(%rdi)
movdqu %xmm4, 112(%rdi)
movdqu %xmm5, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_get_entry_64_6,.-sp_384_get_entry_64_6
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_384_get_entry_64_avx2_6
.type sp_384_get_entry_64_avx2_6,@function
.align 16
sp_384_get_entry_64_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_get_entry_64_avx2_6
.p2align 4
_sp_384_get_entry_64_avx2_6:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm9
addq $0x60, %rsi
movd %eax, %xmm11
movq $0x40, %rax
vpxor %ymm10, %ymm10, %ymm10
vpermd %ymm9, %ymm10, %ymm9
vpermd %ymm11, %ymm10, %ymm11
vpxor %ymm0, %ymm0, %ymm0
vpxor %xmm1, %xmm1, %xmm1
vpxor %ymm2, %ymm2, %ymm2
vpxor %xmm3, %xmm3, %xmm3
vmovdqa %ymm11, %ymm10
L_384_get_entry_64_avx2_6_start:
vpcmpeqd %ymm9, %ymm10, %ymm8
vpaddd %ymm11, %ymm10, %ymm10
vmovupd (%rsi), %ymm4
vmovdqu 32(%rsi), %xmm5
vmovupd 48(%rsi), %ymm6
vmovdqu 80(%rsi), %xmm7
addq $0x60, %rsi
vpand %ymm8, %ymm4, %ymm4
vpand %xmm8, %xmm5, %xmm5
vpand %ymm8, %ymm6, %ymm6
vpand %xmm8, %xmm7, %xmm7
vpor %ymm4, %ymm0, %ymm0
vpor %xmm5, %xmm1, %xmm1
vpor %ymm6, %ymm2, %ymm2
vpor %xmm7, %xmm3, %xmm3
decq %rax
jnz L_384_get_entry_64_avx2_6_start
vmovupd %ymm0, (%rdi)
vmovdqu %xmm1, 32(%rdi)
vmovupd %ymm2, 96(%rdi)
vmovdqu %xmm3, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_get_entry_64_avx2_6,.-sp_384_get_entry_64_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_384_get_entry_65_6
.type sp_384_get_entry_65_6,@function
.align 16
sp_384_get_entry_65_6:
#else
.section __TEXT,__text
.globl _sp_384_get_entry_65_6
.p2align 4
_sp_384_get_entry_65_6:
#endif /* __APPLE__ */
# From entry 1
movq $0x01, %rax
movd %edx, %xmm13
addq $0x60, %rsi
movd %eax, %xmm15
movq $0x40, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
movdqa %xmm15, %xmm14
L_384_get_entry_65_6_start_0:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
movdqu (%rsi), %xmm6
movdqu 16(%rsi), %xmm7
movdqu 32(%rsi), %xmm8
movdqu 48(%rsi), %xmm9
movdqu 64(%rsi), %xmm10
movdqu 80(%rsi), %xmm11
addq $0x60, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
pand %xmm12, %xmm9
pand %xmm12, %xmm10
pand %xmm12, %xmm11
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
por %xmm9, %xmm3
por %xmm10, %xmm4
por %xmm11, %xmm5
decq %rax
jnz L_384_get_entry_65_6_start_0
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 32(%rdi)
movdqu %xmm3, 96(%rdi)
movdqu %xmm4, 112(%rdi)
movdqu %xmm5, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_get_entry_65_6,.-sp_384_get_entry_65_6
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_384_get_entry_65_avx2_6
.type sp_384_get_entry_65_avx2_6,@function
.align 16
sp_384_get_entry_65_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_get_entry_65_avx2_6
.p2align 4
_sp_384_get_entry_65_avx2_6:
#endif /* __APPLE__ */
movq $0x01, %rax
movd %edx, %xmm9
addq $0x60, %rsi
movd %eax, %xmm11
movq $0x41, %rax
vpxor %ymm10, %ymm10, %ymm10
vpermd %ymm9, %ymm10, %ymm9
vpermd %ymm11, %ymm10, %ymm11
vpxor %ymm0, %ymm0, %ymm0
vpxor %xmm1, %xmm1, %xmm1
vpxor %ymm2, %ymm2, %ymm2
vpxor %xmm3, %xmm3, %xmm3
vmovdqa %ymm11, %ymm10
L_384_get_entry_65_avx2_6_start:
vpcmpeqd %ymm9, %ymm10, %ymm8
vpaddd %ymm11, %ymm10, %ymm10
vmovupd (%rsi), %ymm4
vmovdqu 32(%rsi), %xmm5
vmovupd 48(%rsi), %ymm6
vmovdqu 80(%rsi), %xmm7
addq $0x60, %rsi
vpand %ymm8, %ymm4, %ymm4
vpand %xmm8, %xmm5, %xmm5
vpand %ymm8, %ymm6, %ymm6
vpand %xmm8, %xmm7, %xmm7
vpor %ymm4, %ymm0, %ymm0
vpor %xmm5, %xmm1, %xmm1
vpor %ymm6, %ymm2, %ymm2
vpor %xmm7, %xmm3, %xmm3
decq %rax
jnz L_384_get_entry_65_avx2_6_start
vmovupd %ymm0, (%rdi)
vmovdqu %xmm1, 32(%rdi)
vmovupd %ymm2, 96(%rdi)
vmovdqu %xmm3, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_get_entry_65_avx2_6,.-sp_384_get_entry_65_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Add 1 to a. (a = a + 1)
*
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_384_add_one_6
.type sp_384_add_one_6,@function
.align 16
sp_384_add_one_6:
#else
.section __TEXT,__text
.globl _sp_384_add_one_6
.p2align 4
_sp_384_add_one_6:
#endif /* __APPLE__ */
addq $0x01, (%rdi)
adcq $0x00, 8(%rdi)
adcq $0x00, 16(%rdi)
adcq $0x00, 24(%rdi)
adcq $0x00, 32(%rdi)
adcq $0x00, 40(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_add_one_6,.-sp_384_add_one_6
#endif /* __APPLE__ */
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_384_from_bin_bswap
.type sp_384_from_bin_bswap,@function
.align 16
sp_384_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_384_from_bin_bswap
.p2align 4
_sp_384_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $48, %r10
xorq %r11, %r11
jmp L_384_from_bin_bswap_64_end
L_384_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_384_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_384_from_bin_bswap_64_start
jmp L_384_from_bin_bswap_8_end
L_384_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_384_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_384_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_384_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_384_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_384_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_384_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_384_from_bin_bswap_zero_end
L_384_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_384_from_bin_bswap_zero_start
L_384_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_384_from_bin_bswap,.-sp_384_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_384_from_bin_movbe
.type sp_384_from_bin_movbe,@function
.align 16
sp_384_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_384_from_bin_movbe
.p2align 4
_sp_384_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $48, %r10
jmp L_384_from_bin_movbe_64_end
L_384_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_384_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_384_from_bin_movbe_64_start
jmp L_384_from_bin_movbe_8_end
L_384_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_384_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_384_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_384_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_384_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_384_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_384_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_384_from_bin_movbe_zero_end
L_384_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_384_from_bin_movbe_zero_start
L_384_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_384_from_bin_movbe,.-sp_384_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 48
* Uses the bswap instruction.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_384_to_bin_bswap_6
.type sp_384_to_bin_bswap_6,@function
.align 16
sp_384_to_bin_bswap_6:
#else
.section __TEXT,__text
.globl _sp_384_to_bin_bswap_6
.p2align 4
_sp_384_to_bin_bswap_6:
#endif /* __APPLE__ */
movq 40(%rdi), %rdx
movq 32(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movq 24(%rdi), %rdx
movq 16(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movq 8(%rdi), %rdx
movq (%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
repz retq
#ifndef __APPLE__
.size sp_384_to_bin_bswap_6,.-sp_384_to_bin_bswap_6
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 48
* Uses the movbe instruction which is optional.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_384_to_bin_movbe_6
.type sp_384_to_bin_movbe_6,@function
.align 16
sp_384_to_bin_movbe_6:
#else
.section __TEXT,__text
.globl _sp_384_to_bin_movbe_6
.p2align 4
_sp_384_to_bin_movbe_6:
#endif /* __APPLE__ */
movbeq 40(%rdi), %rdx
movbeq 32(%rdi), %rax
movq %rdx, (%rsi)
movq %rax, 8(%rsi)
movbeq 24(%rdi), %rdx
movbeq 16(%rdi), %rax
movq %rdx, 16(%rsi)
movq %rax, 24(%rsi)
movbeq 8(%rdi), %rdx
movbeq (%rdi), %rax
movq %rdx, 32(%rsi)
movq %rax, 40(%rsi)
repz retq
#ifndef __APPLE__
.size sp_384_to_bin_movbe_6,.-sp_384_to_bin_movbe_6
#endif /* __APPLE__ */
#endif /* NO_MOVBE_SUPPORT */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_384_sub_in_place_6
.type sp_384_sub_in_place_6,@function
.align 16
sp_384_sub_in_place_6:
#else
.section __TEXT,__text
.globl _sp_384_sub_in_place_6
.p2align 4
_sp_384_sub_in_place_6:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
movq 40(%rsi), %r11
subq %rdx, (%rdi)
sbbq %rcx, 8(%rdi)
sbbq %r8, 16(%rdi)
sbbq %r9, 24(%rdi)
sbbq %r10, 32(%rdi)
sbbq %r11, 40(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_384_sub_in_place_6,.-sp_384_sub_in_place_6
#endif /* __APPLE__ */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_384_mul_d_6
.type sp_384_mul_d_6,@function
.align 16
sp_384_mul_d_6:
#else
.section __TEXT,__text
.globl _sp_384_mul_d_6
.p2align 4
_sp_384_mul_d_6:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
movq %r10, 40(%rdi)
movq %r8, 48(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_mul_d_6,.-sp_384_mul_d_6
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_384_mul_d_avx2_6
.type sp_384_mul_d_avx2_6,@function
.align 16
sp_384_mul_d_avx2_6:
#else
.section __TEXT,__text
.globl _sp_384_mul_d_avx2_6
.p2align 4
_sp_384_mul_d_avx2_6:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 40(%rdi)
movq %r9, 48(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_mul_d_avx2_6,.-sp_384_mul_d_avx2_6
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_384_word_asm_6
.type div_384_word_asm_6,@function
.align 16
div_384_word_asm_6:
#else
.section __TEXT,__text
.globl _div_384_word_asm_6
.p2align 4
_div_384_word_asm_6:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_384_word_asm_6,.-div_384_word_asm_6
#endif /* __APPLE__ */
#endif /* _WIN64 */
/* Shift number right by 1 bit. (r = a >> 1)
*
* r Result of right shift by 1.
* a Number to shift.
*/
#ifndef __APPLE__
.text
.globl sp_384_rshift1_6
.type sp_384_rshift1_6,@function
.align 16
sp_384_rshift1_6:
#else
.section __TEXT,__text
.globl _sp_384_rshift1_6
.p2align 4
_sp_384_rshift1_6:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrq $0x01, %r10
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
repz retq
#ifndef __APPLE__
.size sp_384_rshift1_6,.-sp_384_rshift1_6
#endif /* __APPLE__ */
/* Divide the number by 2 mod the prime. (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus
*/
#ifndef __APPLE__
.text
.globl sp_384_div2_mod_6
.type sp_384_div2_mod_6,@function
.align 16
sp_384_div2_mod_6:
#else
.section __TEXT,__text
.globl _sp_384_div2_mod_6
.p2align 4
_sp_384_div2_mod_6:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
movq 40(%rsi), %r11
movq (%rdx), %r12
movq 8(%rdx), %r13
movq 16(%rdx), %r14
movq 24(%rdx), %r15
movq 32(%rdx), %rbx
movq 40(%rdx), %rbp
movq %rax, %rdx
andq $0x01, %rdx
je L_384_mod_inv_6_div2_mod_no_add
addq %r12, %rax
adcq %r13, %rcx
adcq %r14, %r8
adcq %r15, %r9
adcq %rbx, %r10
adcq %rbp, %r11
movq $0x00, %rdx
adcq $0x00, %rdx
L_384_mod_inv_6_div2_mod_no_add:
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %r11, %r10
shrdq $0x01, %rdx, %r11
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq %r11, 40(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_384_div2_mod_6,.-sp_384_div2_mod_6
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl sp_384_num_bits_6
.type sp_384_num_bits_6,@function
.align 16
sp_384_num_bits_6:
#else
.section __TEXT,__text
.globl _sp_384_num_bits_6
.p2align 4
_sp_384_num_bits_6:
#endif /* __APPLE__ */
xorq %rax, %rax
movq 40(%rdi), %rdx
cmpq $0x00, %rdx
je L_384_num_bits_6_end_320
movq $-1, %rax
bsr %rdx, %rax
addq $0x141, %rax
jmp L_384_num_bits_6_done
L_384_num_bits_6_end_320:
movq 32(%rdi), %rdx
cmpq $0x00, %rdx
je L_384_num_bits_6_end_256
movq $-1, %rax
bsr %rdx, %rax
addq $0x101, %rax
jmp L_384_num_bits_6_done
L_384_num_bits_6_end_256:
movq 24(%rdi), %rdx
cmpq $0x00, %rdx
je L_384_num_bits_6_end_192
movq $-1, %rax
bsr %rdx, %rax
addq $0xc1, %rax
jmp L_384_num_bits_6_done
L_384_num_bits_6_end_192:
movq 16(%rdi), %rdx
cmpq $0x00, %rdx
je L_384_num_bits_6_end_128
movq $-1, %rax
bsr %rdx, %rax
addq $0x81, %rax
jmp L_384_num_bits_6_done
L_384_num_bits_6_end_128:
movq 8(%rdi), %rdx
cmpq $0x00, %rdx
je L_384_num_bits_6_end_64
movq $-1, %rax
bsr %rdx, %rax
addq $0x41, %rax
jmp L_384_num_bits_6_done
L_384_num_bits_6_end_64:
movq (%rdi), %rdx
cmpq $0x00, %rdx
je L_384_num_bits_6_end_0
movq $-1, %rax
bsr %rdx, %rax
addq $0x01, %rax
jmp L_384_num_bits_6_done
L_384_num_bits_6_end_0:
L_384_num_bits_6_done:
repz retq
#ifndef __APPLE__
.size sp_384_num_bits_6,.-sp_384_num_bits_6
#endif /* __APPLE__ */
#endif /* WOLFSSL_SP_384 */
#ifdef WOLFSSL_SP_521
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_mul_9
.type sp_521_mul_9,@function
.align 16
sp_521_mul_9:
#else
.section __TEXT,__text
.globl _sp_521_mul_9
.p2align 4
_sp_521_mul_9:
#endif /* __APPLE__ */
movq %rdx, %rcx
subq $0x48, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[0] * B[4]
movq 32(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[0]
movq (%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rsp)
# A[0] * B[5]
movq 40(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[4]
movq 32(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[1]
movq 8(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[0]
movq (%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 40(%rsp)
# A[0] * B[6]
movq 48(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[5]
movq 40(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[4]
movq 32(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[2]
movq 16(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[1]
movq 8(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[0]
movq (%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 48(%rsp)
# A[0] * B[7]
movq 56(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[6]
movq 48(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[5]
movq 40(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[4]
movq 32(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[3]
movq 24(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[2]
movq 16(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[1]
movq 8(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[0]
movq (%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 56(%rsp)
# A[0] * B[8]
movq 64(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[7]
movq 56(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[6]
movq 48(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[5]
movq 40(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[4]
movq 32(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[3]
movq 24(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[2]
movq 16(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[1]
movq 8(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[0]
movq (%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 64(%rsp)
# A[1] * B[8]
movq 64(%rcx), %rax
mulq 8(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[7]
movq 56(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[6]
movq 48(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[5]
movq 40(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[4]
movq 32(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[3]
movq 24(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[2]
movq 16(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[1]
movq 8(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 72(%rdi)
# A[2] * B[8]
movq 64(%rcx), %rax
mulq 16(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[7]
movq 56(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[6]
movq 48(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[5]
movq 40(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[4]
movq 32(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[3]
movq 24(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[2]
movq 16(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 80(%rdi)
# A[3] * B[8]
movq 64(%rcx), %rax
mulq 24(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[7]
movq 56(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[6]
movq 48(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[5]
movq 40(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[4]
movq 32(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[3]
movq 24(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 88(%rdi)
# A[4] * B[8]
movq 64(%rcx), %rax
mulq 32(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[7]
movq 56(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[6]
movq 48(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[5]
movq 40(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[4]
movq 32(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 96(%rdi)
# A[5] * B[8]
movq 64(%rcx), %rax
mulq 40(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[7]
movq 56(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[6]
movq 48(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[5]
movq 40(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 104(%rdi)
# A[6] * B[8]
movq 64(%rcx), %rax
mulq 48(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[7]
movq 56(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[6]
movq 48(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 112(%rdi)
# A[7] * B[8]
movq 64(%rcx), %rax
mulq 56(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[7]
movq 56(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 120(%rdi)
# A[8] * B[8]
movq 64(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
movq %r9, 128(%rdi)
movq %r10, 136(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r8
movq 24(%rsp), %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r8
movq 56(%rsp), %r9
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsp), %rax
movq %rax, 64(%rdi)
addq $0x48, %rsp
repz retq
#ifndef __APPLE__
.size sp_521_mul_9,.-sp_521_mul_9
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r Result of multiplication.
* a First number to multiply.
* b Second number to multiply.
*/
#ifndef __APPLE__
.text
.globl sp_521_mul_avx2_9
.type sp_521_mul_avx2_9,@function
.align 16
sp_521_mul_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_mul_avx2_9
.p2align 4
_sp_521_mul_avx2_9:
#endif /* __APPLE__ */
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
movq %rdx, %rbp
subq $0x48, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbx
cmovne %rdi, %rbx
cmpq %rdi, %rbp
cmove %rsp, %rbx
addq $0x48, %rdi
xorq %r13, %r13
movq (%rsi), %rdx
# A[0] * B[0]
mulx (%rbp), %r8, %r9
# A[0] * B[1]
mulx 8(%rbp), %rax, %r10
movq %r8, (%rbx)
adcxq %rax, %r9
# A[0] * B[2]
mulx 16(%rbp), %rax, %r11
movq %r9, 8(%rbx)
adcxq %rax, %r10
movq %r10, 16(%rbx)
# A[0] * B[3]
mulx 24(%rbp), %rax, %r8
adcxq %rax, %r11
# A[0] * B[4]
mulx 32(%rbp), %rax, %r9
movq %r11, 24(%rbx)
adcxq %rax, %r8
# A[0] * B[5]
mulx 40(%rbp), %rax, %r10
movq %r8, 32(%rbx)
adcxq %rax, %r9
movq %r9, 40(%rbx)
# A[0] * B[6]
mulx 48(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[7]
mulx 56(%rbp), %rax, %r8
movq %r10, 48(%rbx)
adcxq %rax, %r11
# A[0] * B[8]
mulx 64(%rbp), %rax, %r9
movq %r11, 56(%rbx)
adcxq %rax, %r8
adcxq %r13, %r9
movq %r13, %r12
adcxq %r13, %r12
movq %r8, 64(%rbx)
movq %r9, (%rdi)
movq 8(%rsi), %rdx
movq 8(%rbx), %r9
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r8
# A[1] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 8(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[1] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 24(%rbx)
movq 40(%rbx), %r9
movq 48(%rbx), %r10
movq 56(%rbx), %r11
# A[1] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r8, 32(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rbx)
movq 64(%rbx), %r8
movq (%rdi), %r9
# A[1] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[1] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
movq %r13, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r12, %r10
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r9, (%rdi)
movq %r10, 8(%rdi)
movq 16(%rsi), %rdx
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r8
movq 40(%rbx), %r9
# A[2] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[2] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rbx)
movq 48(%rbx), %r10
movq 56(%rbx), %r11
movq 64(%rbx), %r8
# A[2] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 56(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[2] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r9, (%rdi)
movq %r13, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r12, %r11
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r10, 8(%rdi)
movq %r11, 16(%rdi)
movq 24(%rsi), %rdx
movq 24(%rbx), %r11
movq 32(%rbx), %r8
movq 40(%rbx), %r9
movq 48(%rbx), %r10
# A[3] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[3] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 32(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 40(%rbx)
movq 56(%rbx), %r11
movq 64(%rbx), %r8
movq (%rdi), %r9
# A[3] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[3] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 64(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[3] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
movq %r13, %r8
adcxq %rax, %r11
adoxq %rcx, %r8
adcxq %r12, %r8
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r11, 16(%rdi)
movq %r8, 24(%rdi)
movq 32(%rsi), %rdx
movq 32(%rbx), %r8
movq 40(%rbx), %r9
movq 48(%rbx), %r10
movq 56(%rbx), %r11
# A[4] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 32(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rbx)
movq 64(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[4] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[4] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r8
# A[4] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[4] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[4] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
movq %r13, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r12, %r9
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq 40(%rsi), %rdx
movq 40(%rbx), %r9
movq 48(%rbx), %r10
movq 56(%rbx), %r11
movq 64(%rbx), %r8
# A[5] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[5] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 56(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[5] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r8
movq 32(%rdi), %r9
# A[5] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[5] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
movq %r13, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r12, %r10
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq 48(%rsi), %rdx
movq 48(%rbx), %r10
movq 56(%rbx), %r11
movq 64(%rbx), %r8
movq (%rdi), %r9
# A[6] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[6] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 64(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r8
# A[6] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 16(%rdi)
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[6] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r9, 32(%rdi)
movq %r13, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r12, %r11
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r10, 40(%rdi)
movq %r11, 48(%rdi)
movq 56(%rsi), %rdx
movq 56(%rbx), %r11
movq 64(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[7] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[7] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r8
movq 32(%rdi), %r9
# A[7] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[7] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rdi)
movq 40(%rdi), %r10
movq 48(%rdi), %r11
# A[7] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 32(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r10, 40(%rdi)
movq %r13, %r8
adcxq %rax, %r11
adoxq %rcx, %r8
adcxq %r12, %r8
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r11, 48(%rdi)
movq %r8, 56(%rdi)
movq 64(%rsi), %rdx
movq 64(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[8] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r8
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[8] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[8] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 24(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rdi)
movq 48(%rdi), %r11
movq 56(%rdi), %r8
# A[8] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 40(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[8] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r11, 48(%rdi)
movq %r13, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r12, %r9
movq %r8, 56(%rdi)
movq %r9, 64(%rdi)
subq $0x48, %rdi
cmpq %rdi, %rsi
je L_start_521_mul_avx2_9
cmpq %rdi, %rbp
jne L_end_521_mul_avx2_9
L_start_521_mul_avx2_9:
vmovdqu (%rbx), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbx), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbx), %xmm0
vmovups %xmm0, 32(%rdi)
vmovdqu 48(%rbx), %xmm0
vmovups %xmm0, 48(%rdi)
movq 64(%rbx), %rax
movq %rax, 64(%rdi)
L_end_521_mul_avx2_9:
addq $0x48, %rsp
popq %r13
popq %r12
popq %rbp
popq %rbx
repz retq
#ifndef __APPLE__
.size sp_521_mul_avx2_9,.-sp_521_mul_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_sqr_9
.type sp_521_sqr_9,@function
.align 16
sp_521_sqr_9:
#else
.section __TEXT,__text
.globl _sp_521_sqr_9
.p2align 4
_sp_521_sqr_9:
#endif /* __APPLE__ */
pushq %r12
subq $0x48, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r9, %r9
movq %rax, (%rsp)
movq %rdx, %r8
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 24(%rsp)
# A[0] * A[4]
movq 32(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 32(%rsp)
# A[0] * A[5]
movq 40(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[4]
movq 32(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 40(%rsp)
# A[0] * A[6]
movq 48(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[5]
movq 40(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[4]
movq 32(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 48(%rsp)
# A[0] * A[7]
movq 56(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[6]
movq 48(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[5]
movq 40(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[4]
movq 32(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 56(%rsp)
# A[0] * A[8]
movq 64(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[7]
movq 56(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[6]
movq 48(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[5]
movq 40(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[4]
movq 32(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 64(%rsp)
# A[1] * A[8]
movq 64(%rsi), %rax
mulq 8(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[2] * A[7]
movq 56(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[6]
movq 48(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[5]
movq 40(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 72(%rdi)
# A[2] * A[8]
movq 64(%rsi), %rax
mulq 16(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[3] * A[7]
movq 56(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[6]
movq 48(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[5]
movq 40(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 80(%rdi)
# A[3] * A[8]
movq 64(%rsi), %rax
mulq 24(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[4] * A[7]
movq 56(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[6]
movq 48(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 88(%rdi)
# A[4] * A[8]
movq 64(%rsi), %rax
mulq 32(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * A[7]
movq 56(%rsi), %rax
mulq 40(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * A[6]
movq 48(%rsi), %rax
mulq %rax
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 96(%rdi)
# A[5] * A[8]
movq 64(%rsi), %rax
mulq 40(%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[6] * A[7]
movq 56(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 104(%rdi)
# A[6] * A[8]
movq 64(%rsi), %rax
mulq 48(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[7] * A[7]
movq 56(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 112(%rdi)
# A[7] * A[8]
movq 64(%rsi), %rax
mulq 56(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 120(%rdi)
# A[8] * A[8]
movq 64(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 128(%rdi)
movq %r9, 136(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r10
movq 24(%rsp), %r11
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r10
movq 56(%rsp), %r11
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r10, 48(%rdi)
movq %r11, 56(%rdi)
movq 64(%rsp), %rax
movq %rax, 64(%rdi)
addq $0x48, %rsp
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_sqr_9,.-sp_521_sqr_9
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_sqr_avx2_9
.type sp_521_sqr_avx2_9,@function
.align 16
sp_521_sqr_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_sqr_avx2_9
.p2align 4
_sp_521_sqr_avx2_9:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
subq $0x48, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbp
cmovne %rdi, %rbp
addq $0x48, %rdi
xorq %r10, %r10
# Diagonal 1
# Zero into %r9
# A[1] x A[0]
movq (%rsi), %rdx
mulxq 8(%rsi), %r8, %r9
movq %r8, 8(%rbp)
# Zero into %r8
# A[2] x A[0]
mulxq 16(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 16(%rbp)
# No load %r12 - %r9
# A[3] x A[0]
mulxq 24(%rsi), %rax, %r12
adcxq %rax, %r8
adoxq %r10, %r12
movq %r8, 24(%rbp)
# No load %r13 - %r8
# A[4] x A[0]
mulxq 32(%rsi), %rax, %r13
adcxq %rax, %r12
adoxq %r10, %r13
# No store %r12 - %r9
# No load %r14 - %r9
# A[5] x A[0]
mulxq 40(%rsi), %rax, %r14
adcxq %rax, %r13
adoxq %r10, %r14
# No store %r13 - %r8
# No load %r15 - %r8
# A[6] x A[0]
mulxq 48(%rsi), %rax, %r15
adcxq %rax, %r14
adoxq %r10, %r15
# No store %r14 - %r9
# No load %rbx - %r9
# A[7] x A[0]
mulxq 56(%rsi), %rax, %rbx
adcxq %rax, %r15
adoxq %r10, %rbx
# No store %r15 - %r8
# Zero into %r8
# A[8] x A[0]
mulxq 64(%rsi), %rax, %r8
adcxq %rax, %rbx
adoxq %r10, %r8
# No store %rbx - %r9
# Zero into %r9
# A[8] x A[1]
movq 8(%rsi), %rdx
mulxq 64(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, (%rdi)
# Carry
adcxq %r10, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, 8(%rdi)
# Diagonal 2
movq 24(%rbp), %r9
# No load %r12 - %r8
# A[2] x A[1]
mulxq 16(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r12
movq %r9, 24(%rbp)
# No load %r13 - %r9
# A[3] x A[1]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# No store %r12 - %r8
# No load %r14 - %r8
# A[4] x A[1]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r9
# No load %r15 - %r9
# A[5] x A[1]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r8
# No load %rbx - %r8
# A[6] x A[1]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r9
movq (%rdi), %r9
# A[7] x A[1]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# No store %rbx - %r8
movq 8(%rdi), %r8
# A[7] x A[2]
movq 16(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, (%rdi)
# Zero into %r9
# A[7] x A[3]
movq 24(%rsi), %rdx
mulxq 56(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 8(%rdi)
# Zero into %r8
# A[7] x A[4]
movq 32(%rsi), %rdx
mulxq 56(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 16(%rdi)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 24(%rdi)
# Diagonal 3
# No load %r14 - %r9
# A[3] x A[2]
movq 16(%rsi), %rdx
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r8
# No load %r15 - %r8
# A[4] x A[2]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r9
# No load %rbx - %r9
# A[5] x A[2]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r8
movq (%rdi), %r8
# A[6] x A[2]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# No store %rbx - %r9
movq 8(%rdi), %r9
# A[6] x A[3]
movq 24(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rdi)
movq 16(%rdi), %r8
# A[6] x A[4]
movq 32(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
# A[6] x A[5]
movq 40(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 16(%rdi)
# Zero into %r8
# A[8] x A[4]
movq 32(%rsi), %rdx
mulxq 64(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 24(%rdi)
# Zero into %r9
# A[8] x A[5]
movq 40(%rsi), %rdx
mulxq 64(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 32(%rdi)
# Carry
adcxq %r11, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, 40(%rdi)
# Diagonal 4
# No load %rbx - %r8
# A[4] x A[3]
movq 24(%rsi), %rdx
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r9
movq (%rdi), %r9
# A[5] x A[3]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# No store %rbx - %r8
movq 8(%rdi), %r8
# A[5] x A[4]
movq 32(%rsi), %rdx
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, (%rdi)
movq 16(%rdi), %r9
# A[8] x A[2]
movq 16(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 8(%rdi)
movq 24(%rdi), %r8
# A[8] x A[3]
movq 24(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 16(%rdi)
movq 32(%rdi), %r9
# A[7] x A[5]
movq 40(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rdi)
movq 40(%rdi), %r8
# A[7] x A[6]
movq 48(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 32(%rdi)
# Zero into %r9
# A[8] x A[6]
mulxq 64(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 40(%rdi)
# Zero into %r8
# A[8] x A[7]
movq 56(%rsi), %rdx
mulxq 64(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 48(%rdi)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 56(%rdi)
movq %r11, 64(%rdi)
# Double and Add in A[i] x A[i]
movq 8(%rbp), %r9
# A[0] x A[0]
movq (%rsi), %rdx
mulxq %rdx, %rax, %rcx
movq %rax, (%rbp)
adoxq %r9, %r9
adcxq %rcx, %r9
movq %r9, 8(%rbp)
movq 16(%rbp), %r8
movq 24(%rbp), %r9
# A[1] x A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rbp)
movq %r9, 24(%rbp)
# A[2] x A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r12, %r12
adoxq %r13, %r13
adcxq %rax, %r12
adcxq %rcx, %r13
# A[3] x A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r14, %r14
adoxq %r15, %r15
adcxq %rax, %r14
adcxq %rcx, %r15
movq (%rdi), %r9
# A[4] x A[4]
movq 32(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %rbx, %rbx
adoxq %r9, %r9
adcxq %rax, %rbx
adcxq %rcx, %r9
movq %r9, (%rdi)
movq 8(%rdi), %r8
movq 16(%rdi), %r9
# A[5] x A[5]
movq 40(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq 24(%rdi), %r8
movq 32(%rdi), %r9
# A[6] x A[6]
movq 48(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq 40(%rdi), %r8
movq 48(%rdi), %r9
# A[7] x A[7]
movq 56(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq 56(%rdi), %r8
movq 64(%rdi), %r9
# A[8] x A[8]
movq 64(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 56(%rdi)
movq %r9, 64(%rdi)
movq %r12, -40(%rdi)
movq %r13, -32(%rdi)
movq %r14, -24(%rdi)
movq %r15, -16(%rdi)
movq %rbx, -8(%rdi)
subq $0x48, %rdi
cmpq %rdi, %rsi
jne L_end_521_sqr_avx2_9
vmovdqu (%rbp), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbp), %xmm0
vmovups %xmm0, 16(%rdi)
L_end_521_sqr_avx2_9:
addq $0x48, %rsp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_521_sqr_avx2_9,.-sp_521_sqr_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_add_9
.type sp_521_add_9,@function
.align 16
sp_521_add_9:
#else
.section __TEXT,__text
.globl _sp_521_add_9
.p2align 4
_sp_521_add_9:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq %rcx, 64(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_521_add_9,.-sp_521_add_9
#endif /* __APPLE__ */
/* Sub b from a into r. (r = a - b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_sub_9
.type sp_521_sub_9,@function
.align 16
sp_521_sub_9:
#else
.section __TEXT,__text
.globl _sp_521_sub_9
.p2align 4
_sp_521_sub_9:
#endif /* __APPLE__ */
movq (%rsi), %rcx
subq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
sbbq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
sbbq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
sbbq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
sbbq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
sbbq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
sbbq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
sbbq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
sbbq 64(%rdx), %rcx
movq %rcx, 64(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_521_sub_9,.-sp_521_sub_9
#endif /* __APPLE__ */
/* Conditionally copy a into r using the mask m.
* m is -1 to copy and 0 when not.
*
* r A single precision number to copy over.
* a A single precision number to copy.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_521_cond_copy_9
.type sp_521_cond_copy_9,@function
.align 16
sp_521_cond_copy_9:
#else
.section __TEXT,__text
.globl _sp_521_cond_copy_9
.p2align 4
_sp_521_cond_copy_9:
#endif /* __APPLE__ */
movq (%rdi), %rax
movq 8(%rdi), %rcx
movq 16(%rdi), %r8
movq 24(%rdi), %r9
movq 32(%rdi), %r10
xorq (%rsi), %rax
xorq 8(%rsi), %rcx
xorq 16(%rsi), %r8
xorq 24(%rsi), %r9
xorq 32(%rsi), %r10
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
andq %rdx, %r10
xorq %rax, (%rdi)
xorq %rcx, 8(%rdi)
xorq %r8, 16(%rdi)
xorq %r9, 24(%rdi)
xorq %r10, 32(%rdi)
movq 40(%rdi), %rax
movq 48(%rdi), %rcx
movq 56(%rdi), %r8
movq 64(%rdi), %r9
xorq 40(%rsi), %rax
xorq 48(%rsi), %rcx
xorq 56(%rsi), %r8
xorq 64(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
xorq %rax, 40(%rdi)
xorq %rcx, 48(%rdi)
xorq %r8, 56(%rdi)
xorq %r9, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_cond_copy_9,.-sp_521_cond_copy_9
#endif /* __APPLE__ */
/* Multiply two Montgomery form numbers mod the modulus (prime).
* (r = a * b mod m)
*
* r Result of multiplication.
* a First number to multiply in Montgomery form.
* b Second number to multiply in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_mul_9
.type sp_521_mont_mul_9,@function
.align 16
sp_521_mont_mul_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_mul_9
.p2align 4
_sp_521_mont_mul_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
movq %rdx, %rcx
subq $0x90, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r13, %r13
movq %rax, (%rsp)
movq %rdx, %r12
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r11, %r11
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
movq %r12, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r12, %r12
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
movq %r13, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
movq %r11, 24(%rsp)
# A[0] * B[4]
movq 32(%rcx), %rax
mulq (%rsi)
xorq %r11, %r11
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[4] * B[0]
movq (%rcx), %rax
mulq 32(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
movq %r12, 32(%rsp)
# A[0] * B[5]
movq 40(%rcx), %rax
mulq (%rsi)
xorq %r12, %r12
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[1] * B[4]
movq 32(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * B[1]
movq 8(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * B[0]
movq (%rcx), %rax
mulq 40(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
movq %r13, 40(%rsp)
# A[0] * B[6]
movq 48(%rcx), %rax
mulq (%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[1] * B[5]
movq 40(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * B[4]
movq 32(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[4] * B[2]
movq 16(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[5] * B[1]
movq 8(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[6] * B[0]
movq (%rcx), %rax
mulq 48(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
movq %r11, 48(%rsp)
# A[0] * B[7]
movq 56(%rcx), %rax
mulq (%rsi)
xorq %r11, %r11
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[1] * B[6]
movq 48(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[2] * B[5]
movq 40(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[3] * B[4]
movq 32(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[4] * B[3]
movq 24(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[5] * B[2]
movq 16(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[6] * B[1]
movq 8(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[7] * B[0]
movq (%rcx), %rax
mulq 56(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
movq %r12, 56(%rsp)
# A[0] * B[8]
movq 64(%rcx), %rax
mulq (%rsi)
xorq %r12, %r12
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[1] * B[7]
movq 56(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * B[6]
movq 48(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * B[5]
movq 40(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * B[4]
movq 32(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * B[3]
movq 24(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * B[2]
movq 16(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * B[1]
movq 8(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * B[0]
movq (%rcx), %rax
mulq 64(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
movq %r13, 64(%rsp)
# A[1] * B[8]
movq 64(%rcx), %rax
mulq 8(%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * B[7]
movq 56(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * B[6]
movq 48(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[4] * B[5]
movq 40(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[5] * B[4]
movq 32(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[6] * B[3]
movq 24(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[7] * B[2]
movq 16(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[8] * B[1]
movq 8(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
movq %r11, 72(%rsp)
# A[2] * B[8]
movq 64(%rcx), %rax
mulq 16(%rsi)
xorq %r11, %r11
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[3] * B[7]
movq 56(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[4] * B[6]
movq 48(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[5] * B[5]
movq 40(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[6] * B[4]
movq 32(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[7] * B[3]
movq 24(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[8] * B[2]
movq 16(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
movq %r12, 80(%rsp)
# A[3] * B[8]
movq 64(%rcx), %rax
mulq 24(%rsi)
xorq %r12, %r12
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * B[7]
movq 56(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * B[6]
movq 48(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * B[5]
movq 40(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * B[4]
movq 32(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * B[3]
movq 24(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
movq %r13, 88(%rsp)
# A[4] * B[8]
movq 64(%rcx), %rax
mulq 32(%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[5] * B[7]
movq 56(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[6] * B[6]
movq 48(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[7] * B[5]
movq 40(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[8] * B[4]
movq 32(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
movq %r11, 96(%rsp)
# A[5] * B[8]
movq 64(%rcx), %rax
mulq 40(%rsi)
xorq %r11, %r11
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[6] * B[7]
movq 56(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[7] * B[6]
movq 48(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
# A[8] * B[5]
movq 40(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r12
adcq %rdx, %r13
adcq $0x00, %r11
movq %r12, 104(%rsp)
# A[6] * B[8]
movq 64(%rcx), %rax
mulq 48(%rsi)
xorq %r12, %r12
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * B[7]
movq 56(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * B[6]
movq 48(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r13
adcq %rdx, %r11
adcq $0x00, %r12
movq %r13, 112(%rsp)
# A[7] * B[8]
movq 64(%rcx), %rax
mulq 56(%rsi)
xorq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[8] * B[7]
movq 56(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
movq %r11, 120(%rsp)
# A[8] * B[8]
movq 64(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r12
adcq %rdx, %r13
movq %r12, 128(%rsp)
movq %r13, 136(%rsp)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r11
movq %rax, %r10
andq $0x1ff, %r10
movq 88(%rsp), %r12
movq 96(%rsp), %r13
movq 104(%rsp), %rcx
movq 112(%rsp), %rsi
movq 120(%rsp), %r8
movq 128(%rsp), %r9
shrdq $9, %rdx, %rax
shrdq $9, %r11, %rdx
shrdq $9, %r12, %r11
shrdq $9, %r13, %r12
shrdq $9, %rcx, %r13
shrdq $9, %rsi, %rcx
shrdq $9, %r8, %rsi
shrdq $9, %r9, %r8
shrq $9, %r9
addq (%rsp), %rax
adcq 8(%rsp), %rdx
adcq 16(%rsp), %r11
adcq 24(%rsp), %r12
adcq 32(%rsp), %r13
adcq 40(%rsp), %rcx
adcq 48(%rsp), %rsi
adcq 56(%rsp), %r8
adcq %r9, %r10
movq %r10, %r9
shrq $9, %r10
andq $0x1ff, %r9
addq %r10, %rax
adcq $0x00, %rdx
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %r13
adcq $0x00, %rcx
adcq $0x00, %rsi
adcq $0x00, %r8
adcq $0x00, %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r11, 16(%rdi)
movq %r12, 24(%rdi)
movq %r13, 32(%rdi)
movq %rcx, 40(%rdi)
movq %rsi, 48(%rdi)
movq %r8, 56(%rdi)
movq %r9, 64(%rdi)
addq $0x90, %rsp
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_mul_9,.-sp_521_mont_mul_9
#endif /* __APPLE__ */
/* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
*
* r Result of squaring.
* a Number to square in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_sqr_9
.type sp_521_mont_sqr_9,@function
.align 16
sp_521_mont_sqr_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_sqr_9
.p2align 4
_sp_521_mont_sqr_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
subq $0x90, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[0] * A[4]
movq 32(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rsp)
# A[0] * A[5]
movq 40(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[1] * A[4]
movq 32(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %r11, %r10
adcq %r12, %r8
adcq %r13, %r9
movq %r10, 40(%rsp)
# A[0] * A[6]
movq 48(%rsi), %rax
mulq (%rsi)
xorq %r10, %r10
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[1] * A[5]
movq 40(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * A[4]
movq 32(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r8
adcq %r12, %r9
adcq %r13, %r10
movq %r8, 48(%rsp)
# A[0] * A[7]
movq 56(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[1] * A[6]
movq 48(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * A[5]
movq 40(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * A[4]
movq 32(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %r11, %r9
adcq %r12, %r10
adcq %r13, %r8
movq %r9, 56(%rsp)
# A[0] * A[8]
movq 64(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[1] * A[7]
movq 56(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[2] * A[6]
movq 48(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * A[5]
movq 40(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[4] * A[4]
movq 32(%rsi), %rax
mulq %rax
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r10
adcq %r12, %r8
adcq %r13, %r9
movq %r10, 64(%rsp)
# A[1] * A[8]
movq 64(%rsi), %rax
mulq 8(%rsi)
xorq %r10, %r10
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[2] * A[7]
movq 56(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[3] * A[6]
movq 48(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[4] * A[5]
movq 40(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %r11, %r8
adcq %r12, %r9
adcq %r13, %r10
movq %r8, 72(%rsp)
# A[2] * A[8]
movq 64(%rsi), %rax
mulq 16(%rsi)
xorq %r8, %r8
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[3] * A[7]
movq 56(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[4] * A[6]
movq 48(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[5] * A[5]
movq 40(%rsi), %rax
mulq %rax
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r9
adcq %r12, %r10
adcq %r13, %r8
movq %r9, 80(%rsp)
# A[3] * A[8]
movq 64(%rsi), %rax
mulq 24(%rsi)
xorq %r9, %r9
xorq %r13, %r13
movq %rax, %r11
movq %rdx, %r12
# A[4] * A[7]
movq 56(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
# A[5] * A[6]
movq 48(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r11
adcq %rdx, %r12
adcq $0x00, %r13
addq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq %r11, %r10
adcq %r12, %r8
adcq %r13, %r9
movq %r10, 88(%rsp)
# A[4] * A[8]
movq 64(%rsi), %rax
mulq 32(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * A[7]
movq 56(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * A[6]
movq 48(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 96(%rsp)
# A[5] * A[8]
movq 64(%rsi), %rax
mulq 40(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * A[7]
movq 56(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 104(%rsp)
# A[6] * A[8]
movq 64(%rsi), %rax
mulq 48(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * A[7]
movq 56(%rsi), %rax
mulq %rax
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 112(%rsp)
# A[7] * A[8]
movq 64(%rsi), %rax
mulq 56(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 120(%rsp)
# A[8] * A[8]
movq 64(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %r10
movq %r9, 128(%rsp)
movq %r10, 136(%rsp)
movq 64(%rsp), %r8
movq 72(%rsp), %r9
movq 80(%rsp), %r10
movq %r8, %rcx
andq $0x1ff, %rcx
movq 88(%rsp), %rax
movq 96(%rsp), %rdx
movq 104(%rsp), %r11
movq 112(%rsp), %r12
movq 120(%rsp), %r13
movq 128(%rsp), %rsi
shrdq $9, %r9, %r8
shrdq $9, %r10, %r9
shrdq $9, %rax, %r10
shrdq $9, %rdx, %rax
shrdq $9, %r11, %rdx
shrdq $9, %r12, %r11
shrdq $9, %r13, %r12
shrdq $9, %rsi, %r13
shrq $9, %rsi
addq (%rsp), %r8
adcq 8(%rsp), %r9
adcq 16(%rsp), %r10
adcq 24(%rsp), %rax
adcq 32(%rsp), %rdx
adcq 40(%rsp), %r11
adcq 48(%rsp), %r12
adcq 56(%rsp), %r13
adcq %rsi, %rcx
movq %rcx, %rsi
shrq $9, %rcx
andq $0x1ff, %rsi
addq %rcx, %r8
adcq $0x00, %r9
adcq $0x00, %r10
adcq $0x00, %rax
adcq $0x00, %rdx
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %r13
adcq $0x00, %rsi
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq %rax, 24(%rdi)
movq %rdx, 32(%rdi)
movq %r11, 40(%rdi)
movq %r12, 48(%rdi)
movq %r13, 56(%rdi)
movq %rsi, 64(%rdi)
addq $0x90, %rsp
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_sqr_9,.-sp_521_mont_sqr_9
#endif /* __APPLE__ */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_521_cmp_9
.type sp_521_cmp_9,@function
.align 16
sp_521_cmp_9:
#else
.section __TEXT,__text
.globl _sp_521_cmp_9
.p2align 4
_sp_521_cmp_9:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_521_cmp_9,.-sp_521_cmp_9
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_521_cond_sub_9
.type sp_521_cond_sub_9,@function
.align 16
sp_521_cond_sub_9:
#else
.section __TEXT,__text
.globl _sp_521_cond_sub_9
.p2align 4
_sp_521_cond_sub_9:
#endif /* __APPLE__ */
subq $0x48, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
andq %rcx, %r8
movq %r8, 64(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq %r8, 64(%rdi)
sbbq %rax, %rax
addq $0x48, %rsp
repz retq
#ifndef __APPLE__
.size sp_521_cond_sub_9,.-sp_521_cond_sub_9
#endif /* __APPLE__ */
/* Reduce the number back to 521 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_reduce_9
.type sp_521_mont_reduce_9,@function
.align 16
sp_521_mont_reduce_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_reduce_9
.p2align 4
_sp_521_mont_reduce_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq 64(%rdi), %rdx
movq 72(%rdi), %rax
movq 80(%rdi), %rcx
movq %rdx, %r14
andq $0x1ff, %r14
movq 88(%rdi), %r8
movq 96(%rdi), %r9
movq 104(%rdi), %r10
movq 112(%rdi), %r11
movq 120(%rdi), %r12
movq 128(%rdi), %r13
shrdq $9, %rax, %rdx
shrdq $9, %rcx, %rax
shrdq $9, %r8, %rcx
shrdq $9, %r9, %r8
shrdq $9, %r10, %r9
shrdq $9, %r11, %r10
shrdq $9, %r12, %r11
shrdq $9, %r13, %r12
shrq $9, %r13
addq (%rdi), %rdx
adcq 8(%rdi), %rax
adcq 16(%rdi), %rcx
adcq 24(%rdi), %r8
adcq 32(%rdi), %r9
adcq 40(%rdi), %r10
adcq 48(%rdi), %r11
adcq 56(%rdi), %r12
adcq %r13, %r14
movq %r14, %r13
shrq $9, %r14
andq $0x1ff, %r13
addq %r14, %rdx
adcq $0x00, %rax
adcq $0x00, %rcx
adcq $0x00, %r8
adcq $0x00, %r9
adcq $0x00, %r10
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq %r11, 48(%rdi)
movq %r12, 56(%rdi)
movq %r13, 64(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_reduce_9,.-sp_521_mont_reduce_9
#endif /* __APPLE__ */
/* Reduce the number back to 521 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_reduce_order_9
.type sp_521_mont_reduce_order_9,@function
.align 16
sp_521_mont_reduce_order_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_reduce_order_9
.p2align 4
_sp_521_mont_reduce_order_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 9
movq $9, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_521_mont_reduce_order_9_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
cmpq $0x01, %r8
jne L_521_mont_reduce_order_9_nomask
andq $0x1ff, %r11
L_521_mont_reduce_order_9_nomask:
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
movq %r13, (%rdi)
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r9
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r9, %r12
movq %r12, 64(%rdi)
adcq %rdx, 72(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_521_mont_reduce_order_9_loop
movq %r13, (%rdi)
movq %r14, 8(%rdi)
movq %rdi, %rcx
subq $0x48, %rdi
subq $8, %rcx
movq (%rcx), %rax
movq 8(%rcx), %rdx
movq 16(%rcx), %r8
movq 24(%rcx), %r9
movq 32(%rcx), %r11
shrdq $9, %rdx, %rax
shrdq $9, %r8, %rdx
shrdq $9, %r9, %r8
shrdq $9, %r11, %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 40(%rcx), %rdx
movq 48(%rcx), %r8
movq 56(%rcx), %r9
movq 64(%rcx), %rax
shrdq $9, %rdx, %r11
shrdq $9, %r8, %rdx
shrdq $9, %r9, %r8
shrdq $9, %rax, %r9
movq %r11, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 72(%rcx), %rdx
shrdq $9, %rdx, %rax
shrq $9, %rdx
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq 64(%rdi), %r15
shrq $9, %r15
negq %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
#ifndef __APPLE__
callq sp_521_cond_sub_9@plt
#else
callq _sp_521_cond_sub_9
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_reduce_order_9,.-sp_521_mont_reduce_order_9
#endif /* __APPLE__ */
/* Add two Montgomery form numbers (r = a + b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_add_9
.type sp_521_mont_add_9,@function
.align 16
sp_521_mont_add_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_add_9
.p2align 4
_sp_521_mont_add_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
movq 40(%rsi), %r11
movq 48(%rsi), %r12
movq 56(%rsi), %r13
movq 64(%rsi), %r14
addq (%rdx), %rax
adcq 8(%rdx), %rcx
adcq 16(%rdx), %r8
adcq 24(%rdx), %r9
adcq 32(%rdx), %r10
adcq 40(%rdx), %r11
adcq 48(%rdx), %r12
adcq 56(%rdx), %r13
adcq 64(%rdx), %r14
movq %r14, %r15
andq $0x1ff, %r14
shrq $9, %r15
addq %r15, %rax
adcq $0x00, %rcx
adcq $0x00, %r8
adcq $0x00, %r9
adcq $0x00, %r10
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %r13
adcq $0x00, %r14
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq %r11, 40(%rdi)
movq %r12, 48(%rdi)
movq %r13, 56(%rdi)
movq %r14, 64(%rdi)
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_add_9,.-sp_521_mont_add_9
#endif /* __APPLE__ */
/* Double a Montgomery form number (r = a + a % m).
*
* r Result of addition.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_dbl_9
.type sp_521_mont_dbl_9,@function
.align 16
sp_521_mont_dbl_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_dbl_9
.p2align 4
_sp_521_mont_dbl_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
movq 48(%rsi), %r11
movq 56(%rsi), %r12
movq 64(%rsi), %r13
addq %rdx, %rdx
adcq %rax, %rax
adcq %rcx, %rcx
adcq %r8, %r8
adcq %r9, %r9
adcq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
movq %r13, %r14
andq $0x1ff, %r13
shrq $9, %r14
addq %r14, %rdx
adcq $0x00, %rax
adcq $0x00, %rcx
adcq $0x00, %r8
adcq $0x00, %r9
adcq $0x00, %r10
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq %r11, 48(%rdi)
movq %r12, 56(%rdi)
movq %r13, 64(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_dbl_9,.-sp_521_mont_dbl_9
#endif /* __APPLE__ */
/* Triple a Montgomery form number (r = a + a + a % m).
*
* r Result of Tripling.
* a Number to triple in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_tpl_9
.type sp_521_mont_tpl_9,@function
.align 16
sp_521_mont_tpl_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_tpl_9
.p2align 4
_sp_521_mont_tpl_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
movq 48(%rsi), %r11
movq 56(%rsi), %r12
movq 64(%rsi), %r13
addq %rdx, %rdx
adcq %rax, %rax
adcq %rcx, %rcx
adcq %r8, %r8
adcq %r9, %r9
adcq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
adcq %r13, %r13
addq (%rsi), %rdx
adcq 8(%rsi), %rax
adcq 16(%rsi), %rcx
adcq 24(%rsi), %r8
adcq 32(%rsi), %r9
adcq 40(%rsi), %r10
adcq 48(%rsi), %r11
adcq 56(%rsi), %r12
adcq 64(%rsi), %r13
movq %r13, %r14
andq $0x1ff, %r13
shrq $9, %r14
addq %r14, %rdx
adcq $0x00, %rax
adcq $0x00, %rcx
adcq $0x00, %r8
adcq $0x00, %r9
adcq $0x00, %r10
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq %r11, 48(%rdi)
movq %r12, 56(%rdi)
movq %r13, 64(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_tpl_9,.-sp_521_mont_tpl_9
#endif /* __APPLE__ */
/* Subtract two Montgomery form numbers (r = a - b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_sub_9
.type sp_521_mont_sub_9,@function
.align 16
sp_521_mont_sub_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_sub_9
.p2align 4
_sp_521_mont_sub_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
movq 40(%rsi), %r11
movq 48(%rsi), %r12
movq 56(%rsi), %r13
movq 64(%rsi), %r14
subq (%rdx), %rax
sbbq 8(%rdx), %rcx
sbbq 16(%rdx), %r8
sbbq 24(%rdx), %r9
sbbq 32(%rdx), %r10
sbbq 40(%rdx), %r11
sbbq 48(%rdx), %r12
sbbq 56(%rdx), %r13
sbbq 64(%rdx), %r14
movq %r14, %r15
andq $0x1ff, %r14
sarq $9, %r15
negq %r15
subq %r15, %rax
sbbq $0x00, %rcx
sbbq $0x00, %r8
sbbq $0x00, %r9
sbbq $0x00, %r10
sbbq $0x00, %r11
sbbq $0x00, %r12
sbbq $0x00, %r13
sbbq $0x00, %r14
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq %r11, 40(%rdi)
movq %r12, 48(%rdi)
movq %r13, 56(%rdi)
movq %r14, 64(%rdi)
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_sub_9,.-sp_521_mont_sub_9
#endif /* __APPLE__ */
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_div2_9
.type sp_521_mont_div2_9,@function
.align 16
sp_521_mont_div2_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_div2_9
.p2align 4
_sp_521_mont_div2_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
movq 48(%rsi), %r11
movq 56(%rsi), %r12
movq 64(%rsi), %r13
movq %rdx, %r14
andq $0x01, %r14
subq %r14, %rdx
sbbq $0x00, %rax
sbbq $0x00, %rcx
sbbq $0x00, %r8
sbbq $0x00, %r9
sbbq $0x00, %r10
sbbq $0x00, %r11
sbbq $0x00, %r12
sbbq $0x00, %r13
shlq $9, %r14
addq %r14, %r13
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq %r11, 48(%rdi)
movq %r12, 56(%rdi)
movq %r13, 64(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_div2_9,.-sp_521_mont_div2_9
#endif /* __APPLE__ */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible point that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of point to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_521_get_point_33_9
.type sp_521_get_point_33_9,@function
.align 16
sp_521_get_point_33_9:
#else
.section __TEXT,__text
.globl _sp_521_get_point_33_9
.p2align 4
_sp_521_get_point_33_9:
#endif /* __APPLE__ */
pushq %r12
movq $0x01, %r12
movq $0x01, %rax
movd %edx, %xmm13
addq $0x1b8, %rsi
movd %eax, %xmm15
movq $32, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
xorq %r10, %r10
xorq %r11, %r11
movdqa %xmm15, %xmm14
L_521_get_point_33_9_start_1:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
xorq %rcx, %rcx
cmpq %r12, %rdx
sete %cl
negq %rcx
incq %r12
movdqu (%rsi), %xmm6
movdqu 16(%rsi), %xmm7
movdqu 32(%rsi), %xmm8
movdqu 48(%rsi), %xmm9
movq 64(%rsi), %r8
movdqu 144(%rsi), %xmm10
movdqu 160(%rsi), %xmm11
addq $0x1b8, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
pand %xmm12, %xmm9
pand %xmm12, %xmm10
pand %xmm12, %xmm11
andq %rcx, %r8
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
por %xmm9, %xmm3
por %xmm10, %xmm4
por %xmm11, %xmm5
orq %r8, %r10
decq %rax
jnz L_521_get_point_33_9_start_1
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 32(%rdi)
movdqu %xmm3, 48(%rdi)
movq %r10, 64(%rdi)
movdqu %xmm4, 144(%rdi)
movdqu %xmm5, 160(%rdi)
movq $0x01, %r12
movq $0x01, %rax
movd %edx, %xmm13
subq $0x3700, %rsi
movd %eax, %xmm15
movq $32, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
pxor %xmm4, %xmm4
pxor %xmm5, %xmm5
xorq %r10, %r10
xorq %r11, %r11
movdqa %xmm15, %xmm14
L_521_get_point_33_9_start_2:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
xorq %rcx, %rcx
cmpq %r12, %rdx
sete %cl
negq %rcx
incq %r12
movdqu 176(%rsi), %xmm6
movdqu 192(%rsi), %xmm7
movq 208(%rsi), %r8
movdqu 288(%rsi), %xmm8
movdqu 304(%rsi), %xmm9
movdqu 320(%rsi), %xmm10
movdqu 336(%rsi), %xmm11
movq 352(%rsi), %r9
addq $0x1b8, %rsi
pand %xmm12, %xmm6
pand %xmm12, %xmm7
pand %xmm12, %xmm8
pand %xmm12, %xmm9
pand %xmm12, %xmm10
pand %xmm12, %xmm11
andq %rcx, %r8
andq %rcx, %r9
por %xmm6, %xmm0
por %xmm7, %xmm1
por %xmm8, %xmm2
por %xmm9, %xmm3
por %xmm10, %xmm4
por %xmm11, %xmm5
orq %r8, %r10
orq %r9, %r11
decq %rax
jnz L_521_get_point_33_9_start_2
movdqu %xmm0, 176(%rdi)
movdqu %xmm1, 192(%rdi)
movq %r10, 208(%rdi)
movdqu %xmm2, 288(%rdi)
movdqu %xmm3, 304(%rdi)
movdqu %xmm4, 320(%rdi)
movdqu %xmm5, 336(%rdi)
movq %r11, 352(%rdi)
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_get_point_33_9,.-sp_521_get_point_33_9
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible point that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of point to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_521_get_point_33_avx2_9
.type sp_521_get_point_33_avx2_9,@function
.align 16
sp_521_get_point_33_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_get_point_33_avx2_9
.p2align 4
_sp_521_get_point_33_avx2_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq $0x01, %r14
movq $0x01, %rax
movd %edx, %xmm13
addq $0x1b8, %rsi
movd %eax, %xmm15
movq $32, %rax
vpxor %ymm14, %ymm14, %ymm14
vpermd %ymm13, %ymm14, %ymm13
vpermd %ymm15, %ymm14, %ymm15
vpxor %ymm0, %ymm0, %ymm0
vpxor %ymm1, %ymm1, %ymm1
vpxor %ymm2, %ymm2, %ymm2
vpxor %ymm3, %ymm3, %ymm3
vpxor %ymm4, %ymm4, %ymm4
vpxor %ymm5, %ymm5, %ymm5
xorq %r8, %r8
xorq %r9, %r9
xorq %r10, %r10
vmovdqa %ymm15, %ymm14
L_521_get_point_33_avx2_9_start:
vpcmpeqd %ymm13, %ymm14, %ymm12
vpaddd %ymm15, %ymm14, %ymm14
xorq %rcx, %rcx
cmpq %r14, %rdx
sete %cl
negq %rcx
incq %r14
vmovupd (%rsi), %ymm6
vmovupd 32(%rsi), %ymm7
vmovupd 144(%rsi), %ymm8
vmovupd 176(%rsi), %ymm9
vmovupd 288(%rsi), %ymm10
vmovupd 320(%rsi), %ymm11
movq 64(%rsi), %r11
movq 208(%rsi), %r12
movq 352(%rsi), %r13
addq $0x1b8, %rsi
vpand %ymm12, %ymm6, %ymm6
vpand %ymm12, %ymm7, %ymm7
vpand %ymm12, %ymm8, %ymm8
vpand %ymm12, %ymm9, %ymm9
vpand %ymm12, %ymm10, %ymm10
vpand %ymm12, %ymm11, %ymm11
andq %rcx, %r11
andq %rcx, %r12
andq %rcx, %r13
vpor %ymm6, %ymm0, %ymm0
vpor %ymm7, %ymm1, %ymm1
vpor %ymm8, %ymm2, %ymm2
vpor %ymm9, %ymm3, %ymm3
vpor %ymm10, %ymm4, %ymm4
vpor %ymm11, %ymm5, %ymm5
orq %r11, %r8
orq %r12, %r9
orq %r13, %r10
decq %rax
jnz L_521_get_point_33_avx2_9_start
vmovupd %ymm0, (%rdi)
vmovupd %ymm1, 32(%rdi)
vmovupd %ymm2, 144(%rdi)
vmovupd %ymm3, 176(%rdi)
vmovupd %ymm4, 288(%rdi)
vmovupd %ymm5, 320(%rdi)
movq %r8, 64(%rdi)
movq %r9, 208(%rdi)
movq %r10, 352(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_get_point_33_avx2_9,.-sp_521_get_point_33_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifdef HAVE_INTEL_AVX2
/* Multiply two Montgomery form numbers mod the modulus (prime).
* (r = a * b mod m)
*
* r Result of multiplication.
* a First number to multiply in Montgomery form.
* b Second number to multiply in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_mul_avx2_9
.type sp_521_mont_mul_avx2_9,@function
.align 16
sp_521_mont_mul_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_mul_avx2_9
.p2align 4
_sp_521_mont_mul_avx2_9:
#endif /* __APPLE__ */
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
movq %rdx, %rbp
subq $0x90, %rsp
movq %rsp, %rbx
addq $0x48, %rsp
xorq %r13, %r13
movq (%rsi), %rdx
# A[0] * B[0]
mulx (%rbp), %r8, %r9
# A[0] * B[1]
mulx 8(%rbp), %rax, %r10
movq %r8, (%rbx)
adcxq %rax, %r9
# A[0] * B[2]
mulx 16(%rbp), %rax, %r11
movq %r9, 8(%rbx)
adcxq %rax, %r10
movq %r10, 16(%rbx)
# A[0] * B[3]
mulx 24(%rbp), %rax, %r8
adcxq %rax, %r11
# A[0] * B[4]
mulx 32(%rbp), %rax, %r9
movq %r11, 24(%rbx)
adcxq %rax, %r8
# A[0] * B[5]
mulx 40(%rbp), %rax, %r10
movq %r8, 32(%rbx)
adcxq %rax, %r9
movq %r9, 40(%rbx)
# A[0] * B[6]
mulx 48(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[7]
mulx 56(%rbp), %rax, %r8
movq %r10, 48(%rbx)
adcxq %rax, %r11
# A[0] * B[8]
mulx 64(%rbp), %rax, %r9
movq %r11, 56(%rbx)
adcxq %rax, %r8
adcxq %r13, %r9
movq %r13, %r12
adcxq %r13, %r12
movq %r8, 64(%rbx)
movq %r9, (%rsp)
movq 8(%rsi), %rdx
movq 8(%rbx), %r9
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r8
# A[1] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 8(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[1] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 24(%rbx)
movq 40(%rbx), %r9
movq 48(%rbx), %r10
movq 56(%rbx), %r11
# A[1] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r8, 32(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rbx)
movq 64(%rbx), %r8
movq (%rsp), %r9
# A[1] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[1] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
movq %r13, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r12, %r10
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r9, (%rsp)
movq %r10, 8(%rsp)
movq 16(%rsi), %rdx
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r8
movq 40(%rbx), %r9
# A[2] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[2] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rbx)
movq 48(%rbx), %r10
movq 56(%rbx), %r11
movq 64(%rbx), %r8
# A[2] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 56(%rbx)
movq (%rsp), %r9
movq 8(%rsp), %r10
# A[2] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r9, (%rsp)
movq %r13, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r12, %r11
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r10, 8(%rsp)
movq %r11, 16(%rsp)
movq 24(%rsi), %rdx
movq 24(%rbx), %r11
movq 32(%rbx), %r8
movq 40(%rbx), %r9
movq 48(%rbx), %r10
# A[3] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[3] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 32(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 40(%rbx)
movq 56(%rbx), %r11
movq 64(%rbx), %r8
movq (%rsp), %r9
# A[3] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[3] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 64(%rbx)
movq 8(%rsp), %r10
movq 16(%rsp), %r11
# A[3] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, (%rsp)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r10, 8(%rsp)
movq %r13, %r8
adcxq %rax, %r11
adoxq %rcx, %r8
adcxq %r12, %r8
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r11, 16(%rsp)
movq %r8, 24(%rsp)
movq 32(%rsi), %rdx
movq 32(%rbx), %r8
movq 40(%rbx), %r9
movq 48(%rbx), %r10
movq 56(%rbx), %r11
# A[4] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 32(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rbx)
movq 64(%rbx), %r8
movq (%rsp), %r9
movq 8(%rsp), %r10
# A[4] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[4] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rsp)
movq 16(%rsp), %r11
movq 24(%rsp), %r8
# A[4] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[4] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 8(%rsp)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[4] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r11, 16(%rsp)
movq %r13, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r12, %r9
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r8, 24(%rsp)
movq %r9, 32(%rsp)
movq 40(%rsi), %rdx
movq 40(%rbx), %r9
movq 48(%rbx), %r10
movq 56(%rbx), %r11
movq 64(%rbx), %r8
# A[5] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 40(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[5] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 56(%rbx)
movq (%rsp), %r9
movq 8(%rsp), %r10
movq 16(%rsp), %r11
# A[5] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, (%rsp)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rsp)
movq 24(%rsp), %r8
movq 32(%rsp), %r9
# A[5] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[5] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 16(%rsp)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r8, 24(%rsp)
movq %r13, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r12, %r10
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r9, 32(%rsp)
movq %r10, 40(%rsp)
movq 48(%rsi), %rdx
movq 48(%rbx), %r10
movq 56(%rbx), %r11
movq 64(%rbx), %r8
movq (%rsp), %r9
# A[6] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 48(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[6] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 64(%rbx)
movq 8(%rsp), %r10
movq 16(%rsp), %r11
movq 24(%rsp), %r8
# A[6] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r9, (%rsp)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 8(%rsp)
adcxq %rax, %r11
adoxq %rcx, %r8
movq %r11, 16(%rsp)
movq 32(%rsp), %r9
movq 40(%rsp), %r10
# A[6] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 24(%rsp)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r9, 32(%rsp)
movq %r13, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r12, %r11
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r10, 40(%rsp)
movq %r11, 48(%rsp)
movq 56(%rsi), %rdx
movq 56(%rbx), %r11
movq 64(%rbx), %r8
movq (%rsp), %r9
movq 8(%rsp), %r10
# A[7] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[7] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 56(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rsp)
movq 16(%rsp), %r11
movq 24(%rsp), %r8
movq 32(%rsp), %r9
# A[7] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r10, 8(%rsp)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[7] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 16(%rsp)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rsp)
movq 40(%rsp), %r10
movq 48(%rsp), %r11
# A[7] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 32(%rsp)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r10, 40(%rsp)
movq %r13, %r8
adcxq %rax, %r11
adoxq %rcx, %r8
adcxq %r12, %r8
movq %r13, %r12
adoxq %r13, %r12
adcxq %r13, %r12
movq %r11, 48(%rsp)
movq %r8, 56(%rsp)
movq 64(%rsi), %rdx
movq 64(%rbx), %r8
movq (%rsp), %r9
movq 8(%rsp), %r10
movq 16(%rsp), %r11
# A[8] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 64(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, (%rsp)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rsp)
movq 24(%rsp), %r8
movq 32(%rsp), %r9
movq 40(%rsp), %r10
# A[8] * B[3]
mulx 24(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r8
# A[8] * B[4]
mulx 32(%rbp), %rax, %rcx
movq %r11, 16(%rsp)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 24(%rsp)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 32(%rsp)
movq 48(%rsp), %r11
movq 56(%rsp), %r8
# A[8] * B[6]
mulx 48(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 40(%rsp)
adcxq %rax, %r11
adoxq %rcx, %r8
# A[8] * B[8]
mulx 64(%rbp), %rax, %rcx
movq %r11, 48(%rsp)
movq %r13, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r12, %r9
movq %r8, 56(%rsp)
movq %r9, 64(%rsp)
movq -8(%rsp), %rax
movq (%rsp), %rcx
movq 8(%rsp), %r8
movq %rax, %r13
andq $0x1ff, %r13
movq 16(%rsp), %r9
movq 24(%rsp), %r10
movq 32(%rsp), %r11
movq 40(%rsp), %r12
movq 48(%rsp), %rbx
movq 56(%rsp), %rdx
subq $0x48, %rsp
shrdq $9, %rcx, %rax
shrdq $9, %r8, %rcx
shrdq $9, %r9, %r8
shrdq $9, %r10, %r9
shrdq $9, %r11, %r10
shrdq $9, %r12, %r11
shrdq $9, %rbx, %r12
shrdq $9, %rdx, %rbx
shrq $9, %rdx
addq (%rsp), %rax
adcq 8(%rsp), %rcx
adcq 16(%rsp), %r8
adcq 24(%rsp), %r9
adcq 32(%rsp), %r10
adcq 40(%rsp), %r11
adcq 48(%rsp), %r12
adcq 56(%rsp), %rbx
adcq %rdx, %r13
movq %r13, %rdx
shrq $9, %r13
andq $0x1ff, %rdx
addq %r13, %rax
adcq $0x00, %rcx
adcq $0x00, %r8
adcq $0x00, %r9
adcq $0x00, %r10
adcq $0x00, %r11
adcq $0x00, %r12
adcq $0x00, %rbx
adcq $0x00, %rdx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq %r11, 40(%rdi)
movq %r12, 48(%rdi)
movq %rbx, 56(%rdi)
movq %rdx, 64(%rdi)
addq $0x90, %rsp
popq %r13
popq %r12
popq %rbp
popq %rbx
repz retq
#ifndef __APPLE__
.size sp_521_mont_mul_avx2_9,.-sp_521_mont_mul_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
*
* r Result of squaring.
* a Number to square in Montgomery form.
* m Modulus (prime).
* mp Montgomery multiplier.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_sqr_avx2_9
.type sp_521_mont_sqr_avx2_9,@function
.align 16
sp_521_mont_sqr_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_sqr_avx2_9
.p2align 4
_sp_521_mont_sqr_avx2_9:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
subq $0x90, %rsp
movq %rsp, %rbp
addq $0x48, %rsp
xorq %r10, %r10
# Diagonal 1
# Zero into %r9
# A[1] x A[0]
movq (%rsi), %rdx
mulxq 8(%rsi), %r8, %r9
movq %r8, 8(%rbp)
# Zero into %r8
# A[2] x A[0]
mulxq 16(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 16(%rbp)
# No load %r12 - %r9
# A[3] x A[0]
mulxq 24(%rsi), %rax, %r12
adcxq %rax, %r8
adoxq %r10, %r12
movq %r8, 24(%rbp)
# No load %r13 - %r8
# A[4] x A[0]
mulxq 32(%rsi), %rax, %r13
adcxq %rax, %r12
adoxq %r10, %r13
# No store %r12 - %r9
# No load %r14 - %r9
# A[5] x A[0]
mulxq 40(%rsi), %rax, %r14
adcxq %rax, %r13
adoxq %r10, %r14
# No store %r13 - %r8
# No load %r15 - %r8
# A[6] x A[0]
mulxq 48(%rsi), %rax, %r15
adcxq %rax, %r14
adoxq %r10, %r15
# No store %r14 - %r9
# No load %rbx - %r9
# A[7] x A[0]
mulxq 56(%rsi), %rax, %rbx
adcxq %rax, %r15
adoxq %r10, %rbx
# No store %r15 - %r8
# Zero into %r8
# A[8] x A[0]
mulxq 64(%rsi), %rax, %r8
adcxq %rax, %rbx
adoxq %r10, %r8
# No store %rbx - %r9
# Zero into %r9
# A[8] x A[1]
movq 8(%rsi), %rdx
mulxq 64(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, (%rsp)
# Carry
adcxq %r10, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, 8(%rsp)
# Diagonal 2
movq 24(%rbp), %r9
# No load %r12 - %r8
# A[2] x A[1]
mulxq 16(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r12
movq %r9, 24(%rbp)
# No load %r13 - %r9
# A[3] x A[1]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r13
# No store %r12 - %r8
# No load %r14 - %r8
# A[4] x A[1]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r9
# No load %r15 - %r9
# A[5] x A[1]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r8
# No load %rbx - %r8
# A[6] x A[1]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r9
movq (%rsp), %r9
# A[7] x A[1]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# No store %rbx - %r8
movq 8(%rsp), %r8
# A[7] x A[2]
movq 16(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, (%rsp)
# Zero into %r9
# A[7] x A[3]
movq 24(%rsi), %rdx
mulxq 56(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 8(%rsp)
# Zero into %r8
# A[7] x A[4]
movq 32(%rsi), %rdx
mulxq 56(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 16(%rsp)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 24(%rsp)
# Diagonal 3
# No load %r14 - %r9
# A[3] x A[2]
movq 16(%rsi), %rdx
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
# No store %r13 - %r8
# No load %r15 - %r8
# A[4] x A[2]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# No store %r14 - %r9
# No load %rbx - %r9
# A[5] x A[2]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r8
movq (%rsp), %r8
# A[6] x A[2]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# No store %rbx - %r9
movq 8(%rsp), %r9
# A[6] x A[3]
movq 24(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, (%rsp)
movq 16(%rsp), %r8
# A[6] x A[4]
movq 32(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 8(%rsp)
movq 24(%rsp), %r9
# A[6] x A[5]
movq 40(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 16(%rsp)
# Zero into %r8
# A[8] x A[4]
movq 32(%rsi), %rdx
mulxq 64(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 24(%rsp)
# Zero into %r9
# A[8] x A[5]
movq 40(%rsi), %rdx
mulxq 64(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 32(%rsp)
# Carry
adcxq %r11, %r9
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r9, 40(%rsp)
# Diagonal 4
# No load %rbx - %r8
# A[4] x A[3]
movq 24(%rsi), %rdx
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r15 - %r9
movq (%rsp), %r9
# A[5] x A[3]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# No store %rbx - %r8
movq 8(%rsp), %r8
# A[5] x A[4]
movq 32(%rsi), %rdx
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, (%rsp)
movq 16(%rsp), %r9
# A[8] x A[2]
movq 16(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 8(%rsp)
movq 24(%rsp), %r8
# A[8] x A[3]
movq 24(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 16(%rsp)
movq 32(%rsp), %r9
# A[7] x A[5]
movq 40(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 24(%rsp)
movq 40(%rsp), %r8
# A[7] x A[6]
movq 48(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r8
movq %r9, 32(%rsp)
# Zero into %r9
# A[8] x A[6]
mulxq 64(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r10, %r9
movq %r8, 40(%rsp)
# Zero into %r8
# A[8] x A[7]
movq 56(%rsi), %rdx
mulxq 64(%rsi), %rax, %r8
adcxq %rax, %r9
adoxq %r10, %r8
movq %r9, 48(%rsp)
# Carry
adcxq %r11, %r8
movq %r10, %r11
adcxq %r10, %r11
adoxq %r10, %r11
movq %r8, 56(%rsp)
movq %r11, 64(%rsp)
# Double and Add in A[i] x A[i]
movq 8(%rbp), %r9
# A[0] x A[0]
movq (%rsi), %rdx
mulxq %rdx, %rax, %rcx
movq %rax, (%rbp)
adoxq %r9, %r9
adcxq %rcx, %r9
movq %r9, 8(%rbp)
movq 16(%rbp), %r8
movq 24(%rbp), %r9
# A[1] x A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rbp)
movq %r9, 24(%rbp)
# A[2] x A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r12, %r12
adoxq %r13, %r13
adcxq %rax, %r12
adcxq %rcx, %r13
# A[3] x A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r14, %r14
adoxq %r15, %r15
adcxq %rax, %r14
adcxq %rcx, %r15
movq (%rsp), %r9
# A[4] x A[4]
movq 32(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %rbx, %rbx
adoxq %r9, %r9
adcxq %rax, %rbx
adcxq %rcx, %r9
movq %r9, (%rsp)
movq 8(%rsp), %r8
movq 16(%rsp), %r9
# A[5] x A[5]
movq 40(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 8(%rsp)
movq %r9, 16(%rsp)
movq 24(%rsp), %r8
movq 32(%rsp), %r9
# A[6] x A[6]
movq 48(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 24(%rsp)
movq %r9, 32(%rsp)
movq 40(%rsp), %r8
movq 48(%rsp), %r9
# A[7] x A[7]
movq 56(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 40(%rsp)
movq %r9, 48(%rsp)
movq 56(%rsp), %r8
movq 64(%rsp), %r9
# A[8] x A[8]
movq 64(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 56(%rsp)
movq %r9, 64(%rsp)
movq %r12, -40(%rsp)
movq %r13, -32(%rsp)
movq %r14, -24(%rsp)
movq %r15, -16(%rsp)
movq %rbx, -8(%rsp)
movq -8(%rsp), %r8
movq (%rsp), %r9
movq 8(%rsp), %r12
movq %r8, %rcx
andq $0x1ff, %rcx
movq 16(%rsp), %r13
movq 24(%rsp), %r14
movq 32(%rsp), %r15
movq 40(%rsp), %rbx
movq 48(%rsp), %rdx
movq 56(%rsp), %rax
subq $0x48, %rsp
shrdq $9, %r9, %r8
shrdq $9, %r12, %r9
shrdq $9, %r13, %r12
shrdq $9, %r14, %r13
shrdq $9, %r15, %r14
shrdq $9, %rbx, %r15
shrdq $9, %rdx, %rbx
shrdq $9, %rax, %rdx
shrq $9, %rax
addq (%rsp), %r8
adcq 8(%rsp), %r9
adcq 16(%rsp), %r12
adcq 24(%rsp), %r13
adcq 32(%rsp), %r14
adcq 40(%rsp), %r15
adcq 48(%rsp), %rbx
adcq 56(%rsp), %rdx
adcq %rax, %rcx
movq %rcx, %rax
shrq $9, %rcx
andq $0x1ff, %rax
addq %rcx, %r8
adcq $0x00, %r9
adcq $0x00, %r12
adcq $0x00, %r13
adcq $0x00, %r14
adcq $0x00, %r15
adcq $0x00, %rbx
adcq $0x00, %rdx
adcq $0x00, %rax
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq %r12, 16(%rdi)
movq %r13, 24(%rdi)
movq %r14, 32(%rdi)
movq %r15, 40(%rdi)
movq %rbx, 48(%rdi)
movq %rdx, 56(%rdi)
movq %rax, 64(%rdi)
addq $0x90, %rsp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_521_mont_sqr_avx2_9,.-sp_521_mont_sqr_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_521_cond_sub_avx2_9
.type sp_521_cond_sub_avx2_9,@function
.align 16
sp_521_cond_sub_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_cond_sub_avx2_9
.p2align 4
_sp_521_cond_sub_avx2_9:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq %r10, 64(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_521_cond_sub_avx2_9,.-sp_521_cond_sub_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 521 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_reduce_order_avx2_9
.type sp_521_mont_reduce_order_avx2_9,@function
.align 16
sp_521_mont_reduce_order_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_reduce_order_avx2_9
.p2align 4
_sp_521_mont_reduce_order_avx2_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 9
movq $8, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $32, %rdi
xorq %rbp, %rbp
L_521_mont_reduce_order_avx2_9_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
movq %r10, -32(%rdi)
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq (%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
adcxq %rbp, %r11
movq %rbx, %rbp
movq %r11, 40(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r11
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, -24(%rdi)
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq 8(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r15
adoxq %rcx, %r10
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 48(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 2
addq $16, %rdi
# i -= 2
subq $2, %r9
jnz L_521_mont_reduce_order_avx2_9_loop
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
andq $0x1ff, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
movq %r10, -32(%rdi)
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq (%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
adcxq %rbp, %r11
movq %rbx, %rbp
movq %r11, 40(%rdi)
adoxq %rbx, %rbp
# a += 1
addq $8, %rdi
movq %r12, -32(%rdi)
movq %r13, -24(%rdi)
movq %r14, -16(%rdi)
movq %r15, -8(%rdi)
subq $32, %rdi
leaq -8(%rdi), %r8
subq $0x48, %rdi
movq (%r8), %r10
movq 8(%r8), %r12
movq 16(%r8), %r13
movq 24(%r8), %r14
movq 32(%r8), %r11
shrdq $9, %r12, %r10
shrdq $9, %r13, %r12
shrdq $9, %r14, %r13
shrdq $9, %r11, %r14
movq %r10, (%rdi)
movq %r12, 8(%rdi)
movq %r13, 16(%rdi)
movq %r14, 24(%rdi)
movq 40(%r8), %r12
movq 48(%r8), %r13
movq 56(%r8), %r14
movq 64(%r8), %r10
shrdq $9, %r12, %r11
shrdq $9, %r13, %r12
shrdq $9, %r14, %r13
shrdq $9, %r10, %r14
movq %r11, 32(%rdi)
movq %r12, 40(%rdi)
movq %r13, 48(%rdi)
movq %r14, 56(%rdi)
movq 72(%r8), %r12
shrdq $9, %r12, %r10
shrq $9, %r12
movq %r10, 64(%rdi)
movq %r12, 72(%rdi)
movq 64(%rdi), %rbp
shrq $9, %rbp
negq %rbp
movq (%rsi), %rcx
movq (%rdi), %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq 8(%rdi), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq 16(%rdi), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq 24(%rdi), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%rdi), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%rdi), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%rdi), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%rdi), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%rdi), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq %rcx, 64(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_reduce_order_avx2_9,.-sp_521_mont_reduce_order_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_521_mont_div2_avx2_9
.type sp_521_mont_div2_avx2_9,@function
.align 16
sp_521_mont_div2_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_mont_div2_avx2_9
.p2align 4
_sp_521_mont_div2_avx2_9:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r9
movq 40(%rsi), %r10
movq 48(%rsi), %r11
movq 56(%rsi), %r12
movq 64(%rsi), %r13
movq %rdx, %r14
andq $0x01, %r14
subq %r14, %rdx
sbbq $0x00, %rax
sbbq $0x00, %rcx
sbbq $0x00, %r8
sbbq $0x00, %r9
sbbq $0x00, %r10
sbbq $0x00, %r11
sbbq $0x00, %r12
sbbq $0x00, %r13
shlq $9, %r14
addq %r14, %r13
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
shrdq $0x01, %r11, %r10
shrdq $0x01, %r12, %r11
shrdq $0x01, %r13, %r12
shrq $0x01, %r13
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq %r10, 40(%rdi)
movq %r11, 48(%rdi)
movq %r12, 56(%rdi)
movq %r13, 64(%rdi)
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_mont_div2_avx2_9,.-sp_521_mont_div2_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_521_get_entry_64_9
.type sp_521_get_entry_64_9,@function
.align 16
sp_521_get_entry_64_9:
#else
.section __TEXT,__text
.globl _sp_521_get_entry_64_9
.p2align 4
_sp_521_get_entry_64_9:
#endif /* __APPLE__ */
# From entry 1
movq $0x01, %r10
movq $0x01, %rax
movd %edx, %xmm13
addq $0x90, %rsi
movd %eax, %xmm15
movq $63, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
xorq %r9, %r9
movdqa %xmm15, %xmm14
L_521_get_entry_64_9_start_0:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
xorq %rcx, %rcx
cmpq %r10, %rdx
sete %cl
negq %rcx
incq %r10
movdqu (%rsi), %xmm4
movdqu 16(%rsi), %xmm5
movdqu 32(%rsi), %xmm6
movdqu 48(%rsi), %xmm7
movq 64(%rsi), %r8
addq $0x90, %rsi
pand %xmm12, %xmm4
pand %xmm12, %xmm5
pand %xmm12, %xmm6
pand %xmm12, %xmm7
andq %rcx, %r8
por %xmm4, %xmm0
por %xmm5, %xmm1
por %xmm6, %xmm2
por %xmm7, %xmm3
orq %r8, %r9
decq %rax
jnz L_521_get_entry_64_9_start_0
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 32(%rdi)
movdqu %xmm3, 48(%rdi)
movq %r9, 64(%rdi)
# From entry 1
movq $0x01, %r10
movq $0x01, %rax
movd %edx, %xmm13
subq $0x2328, %rsi
movd %eax, %xmm15
movq $63, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
xorq %r9, %r9
movdqa %xmm15, %xmm14
L_521_get_entry_64_9_start_1:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
xorq %rcx, %rcx
cmpq %r10, %rdx
sete %cl
negq %rcx
incq %r10
movdqu (%rsi), %xmm4
movdqu 16(%rsi), %xmm5
movdqu 32(%rsi), %xmm6
movdqu 48(%rsi), %xmm7
movq 64(%rsi), %r8
addq $0x90, %rsi
pand %xmm12, %xmm4
pand %xmm12, %xmm5
pand %xmm12, %xmm6
pand %xmm12, %xmm7
andq %rcx, %r8
por %xmm4, %xmm0
por %xmm5, %xmm1
por %xmm6, %xmm2
por %xmm7, %xmm3
orq %r8, %r9
decq %rax
jnz L_521_get_entry_64_9_start_1
movdqu %xmm0, 144(%rdi)
movdqu %xmm1, 160(%rdi)
movdqu %xmm2, 176(%rdi)
movdqu %xmm3, 192(%rdi)
movq %r9, 208(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_get_entry_64_9,.-sp_521_get_entry_64_9
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_521_get_entry_64_avx2_9
.type sp_521_get_entry_64_avx2_9,@function
.align 16
sp_521_get_entry_64_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_get_entry_64_avx2_9
.p2align 4
_sp_521_get_entry_64_avx2_9:
#endif /* __APPLE__ */
pushq %r12
movq $0x01, %r12
movq $0x01, %rax
movd %edx, %xmm9
addq $0x90, %rsi
movd %eax, %xmm11
movq $0x40, %rax
vpxor %ymm10, %ymm10, %ymm10
vpermd %ymm9, %ymm10, %ymm9
vpermd %ymm11, %ymm10, %ymm11
vpxor %ymm0, %ymm0, %ymm0
vpxor %ymm1, %ymm1, %ymm1
vpxor %ymm2, %ymm2, %ymm2
vpxor %ymm3, %ymm3, %ymm3
xorq %r8, %r8
xorq %r9, %r9
vmovdqa %ymm11, %ymm10
L_521_get_entry_64_avx2_9_start:
vpcmpeqd %ymm9, %ymm10, %ymm8
vpaddd %ymm11, %ymm10, %ymm10
xorq %rcx, %rcx
cmpq %r12, %rdx
sete %cl
negq %rcx
incq %r12
vmovupd (%rsi), %ymm4
vmovupd 32(%rsi), %ymm5
vmovupd 72(%rsi), %ymm6
vmovupd 104(%rsi), %ymm7
movq 64(%rsi), %r10
movq 136(%rsi), %r11
addq $0x90, %rsi
vpand %ymm8, %ymm4, %ymm4
vpand %ymm8, %ymm5, %ymm5
vpand %ymm8, %ymm6, %ymm6
vpand %ymm8, %ymm7, %ymm7
andq %rcx, %r10
andq %rcx, %r11
vpor %ymm4, %ymm0, %ymm0
vpor %ymm5, %ymm1, %ymm1
vpor %ymm6, %ymm2, %ymm2
vpor %ymm7, %ymm3, %ymm3
orq %r10, %r8
orq %r11, %r9
decq %rax
jnz L_521_get_entry_64_avx2_9_start
vmovupd %ymm0, (%rdi)
vmovupd %ymm1, 32(%rdi)
vmovupd %ymm2, 144(%rdi)
vmovupd %ymm3, 176(%rdi)
movq %r8, 64(%rdi)
movq %r9, 208(%rdi)
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_get_entry_64_avx2_9,.-sp_521_get_entry_64_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
#ifndef WC_NO_CACHE_RESISTANT
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_521_get_entry_65_9
.type sp_521_get_entry_65_9,@function
.align 16
sp_521_get_entry_65_9:
#else
.section __TEXT,__text
.globl _sp_521_get_entry_65_9
.p2align 4
_sp_521_get_entry_65_9:
#endif /* __APPLE__ */
# From entry 1
movq $0x01, %r10
movq $0x01, %rax
movd %edx, %xmm13
addq $0x90, %rsi
movd %eax, %xmm15
movq $0x40, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
xorq %r9, %r9
movdqa %xmm15, %xmm14
L_521_get_entry_65_9_start_0:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
xorq %rcx, %rcx
cmpq %r10, %rdx
sete %cl
negq %rcx
incq %r10
movdqu (%rsi), %xmm4
movdqu 16(%rsi), %xmm5
movdqu 32(%rsi), %xmm6
movdqu 48(%rsi), %xmm7
movq 64(%rsi), %r8
addq $0x90, %rsi
pand %xmm12, %xmm4
pand %xmm12, %xmm5
pand %xmm12, %xmm6
pand %xmm12, %xmm7
andq %rcx, %r8
por %xmm4, %xmm0
por %xmm5, %xmm1
por %xmm6, %xmm2
por %xmm7, %xmm3
orq %r8, %r9
decq %rax
jnz L_521_get_entry_65_9_start_0
movdqu %xmm0, (%rdi)
movdqu %xmm1, 16(%rdi)
movdqu %xmm2, 32(%rdi)
movdqu %xmm3, 48(%rdi)
movq %r9, 64(%rdi)
# From entry 1
movq $0x01, %r10
movq $0x01, %rax
movd %edx, %xmm13
subq $0x23b8, %rsi
movd %eax, %xmm15
movq $0x40, %rax
pshufd $0x00, %xmm15, %xmm15
pshufd $0x00, %xmm13, %xmm13
pxor %xmm14, %xmm14
pxor %xmm0, %xmm0
pxor %xmm1, %xmm1
pxor %xmm2, %xmm2
pxor %xmm3, %xmm3
xorq %r9, %r9
movdqa %xmm15, %xmm14
L_521_get_entry_65_9_start_1:
movdqa %xmm14, %xmm12
paddd %xmm15, %xmm14
pcmpeqd %xmm13, %xmm12
xorq %rcx, %rcx
cmpq %r10, %rdx
sete %cl
negq %rcx
incq %r10
movdqu (%rsi), %xmm4
movdqu 16(%rsi), %xmm5
movdqu 32(%rsi), %xmm6
movdqu 48(%rsi), %xmm7
movq 64(%rsi), %r8
addq $0x90, %rsi
pand %xmm12, %xmm4
pand %xmm12, %xmm5
pand %xmm12, %xmm6
pand %xmm12, %xmm7
andq %rcx, %r8
por %xmm4, %xmm0
por %xmm5, %xmm1
por %xmm6, %xmm2
por %xmm7, %xmm3
orq %r8, %r9
decq %rax
jnz L_521_get_entry_65_9_start_1
movdqu %xmm0, 144(%rdi)
movdqu %xmm1, 160(%rdi)
movdqu %xmm2, 176(%rdi)
movdqu %xmm3, 192(%rdi)
movq %r9, 208(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_get_entry_65_9,.-sp_521_get_entry_65_9
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Touch each possible entry that could be being copied.
*
* r Point to copy into.
* table Table - start of the entries to access
* idx Index of entry to retrieve.
*/
#ifndef __APPLE__
.text
.globl sp_521_get_entry_65_avx2_9
.type sp_521_get_entry_65_avx2_9,@function
.align 16
sp_521_get_entry_65_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_get_entry_65_avx2_9
.p2align 4
_sp_521_get_entry_65_avx2_9:
#endif /* __APPLE__ */
pushq %r12
movq $0x01, %r12
movq $0x01, %rax
movd %edx, %xmm9
addq $0x90, %rsi
movd %eax, %xmm11
movq $0x41, %rax
vpxor %ymm10, %ymm10, %ymm10
vpermd %ymm9, %ymm10, %ymm9
vpermd %ymm11, %ymm10, %ymm11
vpxor %ymm0, %ymm0, %ymm0
vpxor %ymm1, %ymm1, %ymm1
vpxor %ymm2, %ymm2, %ymm2
vpxor %ymm3, %ymm3, %ymm3
xorq %r8, %r8
xorq %r9, %r9
vmovdqa %ymm11, %ymm10
L_521_get_entry_65_avx2_9_start:
vpcmpeqd %ymm9, %ymm10, %ymm8
vpaddd %ymm11, %ymm10, %ymm10
xorq %rcx, %rcx
cmpq %r12, %rdx
sete %cl
negq %rcx
incq %r12
vmovupd (%rsi), %ymm4
vmovupd 32(%rsi), %ymm5
vmovupd 72(%rsi), %ymm6
vmovupd 104(%rsi), %ymm7
movq 64(%rsi), %r10
movq 136(%rsi), %r11
addq $0x90, %rsi
vpand %ymm8, %ymm4, %ymm4
vpand %ymm8, %ymm5, %ymm5
vpand %ymm8, %ymm6, %ymm6
vpand %ymm8, %ymm7, %ymm7
andq %rcx, %r10
andq %rcx, %r11
vpor %ymm4, %ymm0, %ymm0
vpor %ymm5, %ymm1, %ymm1
vpor %ymm6, %ymm2, %ymm2
vpor %ymm7, %ymm3, %ymm3
orq %r10, %r8
orq %r11, %r9
decq %rax
jnz L_521_get_entry_65_avx2_9_start
vmovupd %ymm0, (%rdi)
vmovupd %ymm1, 32(%rdi)
vmovupd %ymm2, 144(%rdi)
vmovupd %ymm3, 176(%rdi)
movq %r8, 64(%rdi)
movq %r9, 208(%rdi)
popq %r12
repz retq
#ifndef __APPLE__
.size sp_521_get_entry_65_avx2_9,.-sp_521_get_entry_65_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#endif /* !WC_NO_CACHE_RESISTANT */
/* Add 1 to a. (a = a + 1)
*
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_add_one_9
.type sp_521_add_one_9,@function
.align 16
sp_521_add_one_9:
#else
.section __TEXT,__text
.globl _sp_521_add_one_9
.p2align 4
_sp_521_add_one_9:
#endif /* __APPLE__ */
addq $0x01, (%rdi)
adcq $0x00, 8(%rdi)
adcq $0x00, 16(%rdi)
adcq $0x00, 24(%rdi)
adcq $0x00, 32(%rdi)
adcq $0x00, 40(%rdi)
adcq $0x00, 48(%rdi)
adcq $0x00, 56(%rdi)
adcq $0x00, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_add_one_9,.-sp_521_add_one_9
#endif /* __APPLE__ */
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_521_from_bin_bswap
.type sp_521_from_bin_bswap,@function
.align 16
sp_521_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_521_from_bin_bswap
.p2align 4
_sp_521_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x41, %r10
xorq %r11, %r11
jmp L_521_from_bin_bswap_64_end
L_521_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_521_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_521_from_bin_bswap_64_start
jmp L_521_from_bin_bswap_8_end
L_521_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_521_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_521_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_521_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_521_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_521_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_521_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_521_from_bin_bswap_zero_end
L_521_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_521_from_bin_bswap_zero_start
L_521_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_521_from_bin_bswap,.-sp_521_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_521_from_bin_movbe
.type sp_521_from_bin_movbe,@function
.align 16
sp_521_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_521_from_bin_movbe
.p2align 4
_sp_521_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x42, %r10
jmp L_521_from_bin_movbe_64_end
L_521_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_521_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_521_from_bin_movbe_64_start
jmp L_521_from_bin_movbe_8_end
L_521_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_521_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_521_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_521_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_521_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_521_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_521_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_521_from_bin_movbe_zero_end
L_521_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_521_from_bin_movbe_zero_start
L_521_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_521_from_bin_movbe,.-sp_521_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 65
* Uses the bswap instruction.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_521_to_bin_bswap_9
.type sp_521_to_bin_bswap_9,@function
.align 16
sp_521_to_bin_bswap_9:
#else
.section __TEXT,__text
.globl _sp_521_to_bin_bswap_9
.p2align 4
_sp_521_to_bin_bswap_9:
#endif /* __APPLE__ */
movb 64(%rdi), %al
movb 65(%rdi), %dl
movb %dl, (%rsi)
movb %al, 1(%rsi)
movq 56(%rdi), %rdx
movq 48(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 2(%rsi)
movq %rax, 10(%rsi)
movq 40(%rdi), %rdx
movq 32(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 18(%rsi)
movq %rax, 26(%rsi)
movq 24(%rdi), %rdx
movq 16(%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 34(%rsi)
movq %rax, 42(%rsi)
movq 8(%rdi), %rdx
movq (%rdi), %rax
bswapq %rdx
bswapq %rax
movq %rdx, 50(%rsi)
movq %rax, 58(%rsi)
repz retq
#ifndef __APPLE__
.size sp_521_to_bin_bswap_9,.-sp_521_to_bin_bswap_9
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Write r as big endian to byte array.
* Fixed length number of bytes written: 65
* Uses the movbe instruction which is optional.
*
* r A single precision integer.
* a Byte array.
*/
#ifndef __APPLE__
.text
.globl sp_521_to_bin_movbe_9
.type sp_521_to_bin_movbe_9,@function
.align 16
sp_521_to_bin_movbe_9:
#else
.section __TEXT,__text
.globl _sp_521_to_bin_movbe_9
.p2align 4
_sp_521_to_bin_movbe_9:
#endif /* __APPLE__ */
movb 64(%rdi), %al
movb 65(%rdi), %dl
movb %dl, (%rsi)
movb %al, 1(%rsi)
movbeq 56(%rdi), %rdx
movbeq 48(%rdi), %rax
movq %rdx, 2(%rsi)
movq %rax, 10(%rsi)
movbeq 40(%rdi), %rdx
movbeq 32(%rdi), %rax
movq %rdx, 18(%rsi)
movq %rax, 26(%rsi)
movbeq 24(%rdi), %rdx
movbeq 16(%rdi), %rax
movq %rdx, 34(%rsi)
movq %rax, 42(%rsi)
movbeq 8(%rdi), %rdx
movbeq (%rdi), %rax
movq %rdx, 50(%rsi)
movq %rax, 58(%rsi)
repz retq
#ifndef __APPLE__
.size sp_521_to_bin_movbe_9,.-sp_521_to_bin_movbe_9
#endif /* __APPLE__ */
#endif /* NO_MOVBE_SUPPORT */
/* Shift number right by 1 bit. (r = a >> 1)
*
* r Result of right shift by 1.
* a Number to shift.
*/
#ifndef __APPLE__
.text
.globl sp_521_rshift_9
.type sp_521_rshift_9,@function
.align 16
sp_521_rshift_9:
#else
.section __TEXT,__text
.globl _sp_521_rshift_9
.p2align 4
_sp_521_rshift_9:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
shrdq %cl, %rax, %rdx
shrdq %cl, %r8, %rax
shrdq %cl, %r9, %r8
shrdq %cl, %r10, %r9
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 40(%rsi), %rax
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %rdx
shrdq %cl, %rax, %r10
shrdq %cl, %r8, %rax
shrdq %cl, %r9, %r8
shrdq %cl, %rdx, %r9
movq %r10, 32(%rdi)
movq %rax, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
shrq %cl, %rdx
movq %rdx, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_rshift_9,.-sp_521_rshift_9
#endif /* __APPLE__ */
/* Shift number left by n bit. (r = a << n)
*
* r Result of left shift by n.
* a Number to shift.
* n Amoutnt o shift.
*/
#ifndef __APPLE__
.text
.globl sp_521_lshift_9
.type sp_521_lshift_9,@function
.align 16
sp_521_lshift_9:
#else
.section __TEXT,__text
.globl _sp_521_lshift_9
.p2align 4
_sp_521_lshift_9:
#endif /* __APPLE__ */
movb %dl, %cl
movq $0x00, %r10
movq 32(%rsi), %r11
movq 40(%rsi), %rdx
movq 48(%rsi), %rax
movq 56(%rsi), %r8
movq 64(%rsi), %r9
shldq %cl, %r9, %r10
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 40(%rdi)
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
movq %r9, 64(%rdi)
movq %r10, 72(%rdi)
movq (%rsi), %r9
movq 8(%rsi), %rdx
movq 16(%rsi), %rax
movq 24(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 8(%rdi)
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq %r11, 32(%rdi)
shlq %cl, %r9
movq %r9, (%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_lshift_9,.-sp_521_lshift_9
#endif /* __APPLE__ */
/* Shift number left by n bit. (r = a << n)
*
* r Result of left shift by n.
* a Number to shift.
* n Amoutnt o shift.
*/
#ifndef __APPLE__
.text
.globl sp_521_lshift_18
.type sp_521_lshift_18,@function
.align 16
sp_521_lshift_18:
#else
.section __TEXT,__text
.globl _sp_521_lshift_18
.p2align 4
_sp_521_lshift_18:
#endif /* __APPLE__ */
movb %dl, %cl
movq $0x00, %r10
movq 104(%rsi), %r11
movq 112(%rsi), %rdx
movq 120(%rsi), %rax
movq 128(%rsi), %r8
movq 136(%rsi), %r9
shldq %cl, %r9, %r10
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 112(%rdi)
movq %rax, 120(%rdi)
movq %r8, 128(%rdi)
movq %r9, 136(%rdi)
movq %r10, 144(%rdi)
movq 72(%rsi), %r9
movq 80(%rsi), %rdx
movq 88(%rsi), %rax
movq 96(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 80(%rdi)
movq %rax, 88(%rdi)
movq %r8, 96(%rdi)
movq %r11, 104(%rdi)
movq 40(%rsi), %r11
movq 48(%rsi), %rdx
movq 56(%rsi), %rax
movq 64(%rsi), %r8
shldq %cl, %r8, %r9
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r11, %rdx
movq %rdx, 48(%rdi)
movq %rax, 56(%rdi)
movq %r8, 64(%rdi)
movq %r9, 72(%rdi)
movq 8(%rsi), %r9
movq 16(%rsi), %rdx
movq 24(%rsi), %rax
movq 32(%rsi), %r8
shldq %cl, %r8, %r11
shldq %cl, %rax, %r8
shldq %cl, %rdx, %rax
shldq %cl, %r9, %rdx
movq %rdx, 16(%rdi)
movq %rax, 24(%rdi)
movq %r8, 32(%rdi)
movq %r11, 40(%rdi)
movq (%rsi), %r8
shldq %cl, %r8, %r9
shlq %cl, %r8
movq %r8, (%rdi)
movq %r9, 8(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_lshift_18,.-sp_521_lshift_18
#endif /* __APPLE__ */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_521_sub_in_place_9
.type sp_521_sub_in_place_9,@function
.align 16
sp_521_sub_in_place_9:
#else
.section __TEXT,__text
.globl _sp_521_sub_in_place_9
.p2align 4
_sp_521_sub_in_place_9:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq %rdx, 64(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_521_sub_in_place_9,.-sp_521_sub_in_place_9
#endif /* __APPLE__ */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_521_mul_d_9
.type sp_521_mul_d_9,@function
.align 16
sp_521_mul_d_9:
#else
.section __TEXT,__text
.globl _sp_521_mul_d_9
.p2align 4
_sp_521_mul_d_9:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
movq %r10, 64(%rdi)
movq %r8, 72(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_mul_d_9,.-sp_521_mul_d_9
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_521_mul_d_avx2_9
.type sp_521_mul_d_avx2_9,@function
.align 16
sp_521_mul_d_avx2_9:
#else
.section __TEXT,__text
.globl _sp_521_mul_d_avx2_9
.p2align 4
_sp_521_mul_d_avx2_9:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
adcxq %r11, %r10
movq %r9, 64(%rdi)
movq %r10, 72(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_mul_d_avx2_9,.-sp_521_mul_d_avx2_9
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_521_word_asm_9
.type div_521_word_asm_9,@function
.align 16
div_521_word_asm_9:
#else
.section __TEXT,__text
.globl _div_521_word_asm_9
.p2align 4
_div_521_word_asm_9:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_521_word_asm_9,.-div_521_word_asm_9
#endif /* __APPLE__ */
#endif /* _WIN64 */
/* Shift number right by 1 bit. (r = a >> 1)
*
* r Result of right shift by 1.
* a Number to shift.
*/
#ifndef __APPLE__
.text
.globl sp_521_rshift1_9
.type sp_521_rshift1_9,@function
.align 16
sp_521_rshift1_9:
#else
.section __TEXT,__text
.globl _sp_521_rshift1_9
.p2align 4
_sp_521_rshift1_9:
#endif /* __APPLE__ */
movq (%rsi), %rdx
movq 8(%rsi), %rax
movq 16(%rsi), %rcx
movq 24(%rsi), %r8
movq 32(%rsi), %r10
shrdq $0x01, %rax, %rdx
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r10, %r8
movq %rdx, (%rdi)
movq %rax, 8(%rdi)
movq %rcx, 16(%rdi)
movq %r8, 24(%rdi)
movq 40(%rsi), %rax
movq 48(%rsi), %rcx
movq 56(%rsi), %r8
movq 64(%rsi), %rdx
shrdq $0x01, %rax, %r10
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %rdx, %r8
movq %r10, 32(%rdi)
movq %rax, 40(%rdi)
movq %rcx, 48(%rdi)
movq %r8, 56(%rdi)
shrq $0x01, %rdx
movq %rdx, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_rshift1_9,.-sp_521_rshift1_9
#endif /* __APPLE__ */
/* Divide the number by 2 mod the prime. (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus
*/
#ifndef __APPLE__
.text
.globl sp_521_div2_mod_9
.type sp_521_div2_mod_9,@function
.align 16
sp_521_div2_mod_9:
#else
.section __TEXT,__text
.globl _sp_521_div2_mod_9
.p2align 4
_sp_521_div2_mod_9:
#endif /* __APPLE__ */
movq (%rsi), %rax
andq $0x01, %rax
je L_521_mod_inv_9_div2_mod_no_add
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq (%rdx), %r8
movq 8(%rdx), %r9
addq %r8, %rax
adcq %r9, %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rsi), %rax
movq 24(%rsi), %rcx
movq 16(%rdx), %r8
movq 24(%rdx), %r9
adcq %r8, %rax
adcq %r9, %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %rcx
movq 32(%rdx), %r8
movq 40(%rdx), %r9
adcq %r8, %rax
adcq %r9, %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rsi), %rax
movq 56(%rsi), %rcx
movq 48(%rdx), %r8
movq 56(%rdx), %r9
adcq %r8, %rax
adcq %r9, %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rsi), %rax
movq 64(%rdx), %r8
adcq %r8, %rax
movq %rax, 64(%rdi)
L_521_mod_inv_9_div2_mod_no_add:
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
movq 32(%rsi), %r10
shrdq $0x01, %rcx, %rax
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %r10, %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 40(%rsi), %rcx
movq 48(%rsi), %r8
movq 56(%rsi), %r9
movq 64(%rsi), %rax
shrdq $0x01, %rcx, %r10
shrdq $0x01, %r8, %rcx
shrdq $0x01, %r9, %r8
shrdq $0x01, %rax, %r9
movq %r10, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
shrq $0x01, %rax
movq %rax, 64(%rdi)
repz retq
#ifndef __APPLE__
.size sp_521_div2_mod_9,.-sp_521_div2_mod_9
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl sp_521_num_bits_9
.type sp_521_num_bits_9,@function
.align 16
sp_521_num_bits_9:
#else
.section __TEXT,__text
.globl _sp_521_num_bits_9
.p2align 4
_sp_521_num_bits_9:
#endif /* __APPLE__ */
xorq %rax, %rax
movq 64(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_512
movq $-1, %rax
bsr %rdx, %rax
addq $0x201, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_512:
movq 56(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_448
movq $-1, %rax
bsr %rdx, %rax
addq $0x1c1, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_448:
movq 48(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_384
movq $-1, %rax
bsr %rdx, %rax
addq $0x181, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_384:
movq 40(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_320
movq $-1, %rax
bsr %rdx, %rax
addq $0x141, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_320:
movq 32(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_256
movq $-1, %rax
bsr %rdx, %rax
addq $0x101, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_256:
movq 24(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_192
movq $-1, %rax
bsr %rdx, %rax
addq $0xc1, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_192:
movq 16(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_128
movq $-1, %rax
bsr %rdx, %rax
addq $0x81, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_128:
movq 8(%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_64
movq $-1, %rax
bsr %rdx, %rax
addq $0x41, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_64:
movq (%rdi), %rdx
cmpq $0x00, %rdx
je L_521_num_bits_9_end_0
movq $-1, %rax
bsr %rdx, %rax
addq $0x01, %rax
jmp L_521_num_bits_9_done
L_521_num_bits_9_end_0:
L_521_num_bits_9_done:
repz retq
#ifndef __APPLE__
.size sp_521_num_bits_9,.-sp_521_num_bits_9
#endif /* __APPLE__ */
#endif /* WOLFSSL_SP_521 */
#ifdef WOLFSSL_SP_1024
/* Multiply a and b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_1024_mul_16
.type sp_1024_mul_16,@function
.align 16
sp_1024_mul_16:
#else
.section __TEXT,__text
.globl _sp_1024_mul_16
.p2align 4
_sp_1024_mul_16:
#endif /* __APPLE__ */
movq %rdx, %rcx
subq $0x80, %rsp
# A[0] * B[0]
movq (%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
movq %rax, (%rsp)
movq %rdx, %r9
# A[0] * B[1]
movq 8(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[0]
movq (%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 8(%rsp)
# A[0] * B[2]
movq 16(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[1]
movq 8(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[0]
movq (%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 16(%rsp)
# A[0] * B[3]
movq 24(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[2]
movq 16(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[1]
movq 8(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[0]
movq (%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 24(%rsp)
# A[0] * B[4]
movq 32(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[3]
movq 24(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[2]
movq 16(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[1]
movq 8(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[0]
movq (%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 32(%rsp)
# A[0] * B[5]
movq 40(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[4]
movq 32(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[3]
movq 24(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[2]
movq 16(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[1]
movq 8(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[0]
movq (%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 40(%rsp)
# A[0] * B[6]
movq 48(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[5]
movq 40(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[4]
movq 32(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[3]
movq 24(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[2]
movq 16(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[1]
movq 8(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[0]
movq (%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 48(%rsp)
# A[0] * B[7]
movq 56(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[6]
movq 48(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[5]
movq 40(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[4]
movq 32(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[3]
movq 24(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[2]
movq 16(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[1]
movq 8(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[0]
movq (%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 56(%rsp)
# A[0] * B[8]
movq 64(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[7]
movq 56(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[6]
movq 48(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[5]
movq 40(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[4]
movq 32(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[3]
movq 24(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[2]
movq 16(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[1]
movq 8(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[0]
movq (%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 64(%rsp)
# A[0] * B[9]
movq 72(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[8]
movq 64(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[7]
movq 56(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[6]
movq 48(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[5]
movq 40(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[4]
movq 32(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[3]
movq 24(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[2]
movq 16(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[1]
movq 8(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[0]
movq (%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 72(%rsp)
# A[0] * B[10]
movq 80(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[9]
movq 72(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[8]
movq 64(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[7]
movq 56(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[6]
movq 48(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[5]
movq 40(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[4]
movq 32(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[3]
movq 24(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[2]
movq 16(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[1]
movq 8(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[0]
movq (%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 80(%rsp)
# A[0] * B[11]
movq 88(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[10]
movq 80(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[9]
movq 72(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[8]
movq 64(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[7]
movq 56(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[6]
movq 48(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[5]
movq 40(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[4]
movq 32(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[3]
movq 24(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[2]
movq 16(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[1]
movq 8(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[0]
movq (%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 88(%rsp)
# A[0] * B[12]
movq 96(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[11]
movq 88(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[10]
movq 80(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[9]
movq 72(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[8]
movq 64(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[7]
movq 56(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[6]
movq 48(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[5]
movq 40(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[4]
movq 32(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[3]
movq 24(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[2]
movq 16(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[1]
movq 8(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[0]
movq (%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 96(%rsp)
# A[0] * B[13]
movq 104(%rcx), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[1] * B[12]
movq 96(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[11]
movq 88(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[10]
movq 80(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[9]
movq 72(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[8]
movq 64(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[7]
movq 56(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[6]
movq 48(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[5]
movq 40(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[4]
movq 32(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[3]
movq 24(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[2]
movq 16(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[1]
movq 8(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[0]
movq (%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 104(%rsp)
# A[0] * B[14]
movq 112(%rcx), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * B[13]
movq 104(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[2] * B[12]
movq 96(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[11]
movq 88(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[10]
movq 80(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[9]
movq 72(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[8]
movq 64(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[7]
movq 56(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[6]
movq 48(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[5]
movq 40(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[4]
movq 32(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[3]
movq 24(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[2]
movq 16(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[1]
movq 8(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[0]
movq (%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 112(%rsp)
# A[0] * B[15]
movq 120(%rcx), %rax
mulq (%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[1] * B[14]
movq 112(%rcx), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[2] * B[13]
movq 104(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[3] * B[12]
movq 96(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[11]
movq 88(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[10]
movq 80(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[9]
movq 72(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[8]
movq 64(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[7]
movq 56(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[6]
movq 48(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[5]
movq 40(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[4]
movq 32(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[3]
movq 24(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[2]
movq 16(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[1]
movq 8(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[0]
movq (%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 120(%rsp)
# A[1] * B[15]
movq 120(%rcx), %rax
mulq 8(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B[14]
movq 112(%rcx), %rax
mulq 16(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[3] * B[13]
movq 104(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[4] * B[12]
movq 96(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[11]
movq 88(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[10]
movq 80(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[9]
movq 72(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[8]
movq 64(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[7]
movq 56(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[6]
movq 48(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[5]
movq 40(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[4]
movq 32(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[3]
movq 24(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[2]
movq 16(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[1]
movq 8(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 128(%rdi)
# A[2] * B[15]
movq 120(%rcx), %rax
mulq 16(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B[14]
movq 112(%rcx), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[4] * B[13]
movq 104(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[5] * B[12]
movq 96(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[11]
movq 88(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[10]
movq 80(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[9]
movq 72(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[8]
movq 64(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[7]
movq 56(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[6]
movq 48(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[5]
movq 40(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[4]
movq 32(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[3]
movq 24(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[2]
movq 16(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 136(%rdi)
# A[3] * B[15]
movq 120(%rcx), %rax
mulq 24(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B[14]
movq 112(%rcx), %rax
mulq 32(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[5] * B[13]
movq 104(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[6] * B[12]
movq 96(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[11]
movq 88(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[10]
movq 80(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[9]
movq 72(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[8]
movq 64(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[7]
movq 56(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[6]
movq 48(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[5]
movq 40(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[4]
movq 32(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[3]
movq 24(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 144(%rdi)
# A[4] * B[15]
movq 120(%rcx), %rax
mulq 32(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B[14]
movq 112(%rcx), %rax
mulq 40(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[6] * B[13]
movq 104(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[7] * B[12]
movq 96(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[11]
movq 88(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[10]
movq 80(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[9]
movq 72(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[8]
movq 64(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[7]
movq 56(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[6]
movq 48(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[5]
movq 40(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[4]
movq 32(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 152(%rdi)
# A[5] * B[15]
movq 120(%rcx), %rax
mulq 40(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B[14]
movq 112(%rcx), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[7] * B[13]
movq 104(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[8] * B[12]
movq 96(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[11]
movq 88(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[10]
movq 80(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[9]
movq 72(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[8]
movq 64(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[7]
movq 56(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[6]
movq 48(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[5]
movq 40(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 160(%rdi)
# A[6] * B[15]
movq 120(%rcx), %rax
mulq 48(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B[14]
movq 112(%rcx), %rax
mulq 56(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[8] * B[13]
movq 104(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[9] * B[12]
movq 96(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[11]
movq 88(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[10]
movq 80(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[9]
movq 72(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[8]
movq 64(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[7]
movq 56(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[6]
movq 48(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 168(%rdi)
# A[7] * B[15]
movq 120(%rcx), %rax
mulq 56(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B[14]
movq 112(%rcx), %rax
mulq 64(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[9] * B[13]
movq 104(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[10] * B[12]
movq 96(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[11]
movq 88(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[10]
movq 80(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[9]
movq 72(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[8]
movq 64(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[7]
movq 56(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 176(%rdi)
# A[8] * B[15]
movq 120(%rcx), %rax
mulq 64(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B[14]
movq 112(%rcx), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[10] * B[13]
movq 104(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[11] * B[12]
movq 96(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[11]
movq 88(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[10]
movq 80(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[9]
movq 72(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[8]
movq 64(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 184(%rdi)
# A[9] * B[15]
movq 120(%rcx), %rax
mulq 72(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B[14]
movq 112(%rcx), %rax
mulq 80(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[11] * B[13]
movq 104(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[12] * B[12]
movq 96(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[11]
movq 88(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[10]
movq 80(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[9]
movq 72(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 192(%rdi)
# A[10] * B[15]
movq 120(%rcx), %rax
mulq 80(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B[14]
movq 112(%rcx), %rax
mulq 88(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[12] * B[13]
movq 104(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[13] * B[12]
movq 96(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[11]
movq 88(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[10]
movq 80(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 200(%rdi)
# A[11] * B[15]
movq 120(%rcx), %rax
mulq 88(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B[14]
movq 112(%rcx), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * B[13]
movq 104(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[14] * B[12]
movq 96(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[11]
movq 88(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 208(%rdi)
# A[12] * B[15]
movq 120(%rcx), %rax
mulq 96(%rsi)
xorq %r10, %r10
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B[14]
movq 112(%rcx), %rax
mulq 104(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[14] * B[13]
movq 104(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
# A[15] * B[12]
movq 96(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %r10
movq %r8, 216(%rdi)
# A[13] * B[15]
movq 120(%rcx), %rax
mulq 104(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B[14]
movq 112(%rcx), %rax
mulq 112(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
# A[15] * B[13]
movq 104(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r9
adcq %rdx, %r10
adcq $0x00, %r8
movq %r9, 224(%rdi)
# A[14] * B[15]
movq 120(%rcx), %rax
mulq 112(%rsi)
xorq %r9, %r9
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B[14]
movq 112(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r10
adcq %rdx, %r8
adcq $0x00, %r9
movq %r10, 232(%rdi)
# A[15] * B[15]
movq 120(%rcx), %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 240(%rdi)
movq %r9, 248(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r8
movq 24(%rsp), %r9
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r8
movq 56(%rsp), %r9
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r8
movq 88(%rsp), %r9
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rsp), %rax
movq 104(%rsp), %rdx
movq 112(%rsp), %r8
movq 120(%rsp), %r9
movq %rax, 96(%rdi)
movq %rdx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_mul_16,.-sp_1024_mul_16
#endif /* __APPLE__ */
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_1024_sqr_16
.type sp_1024_sqr_16,@function
.align 16
sp_1024_sqr_16:
#else
.section __TEXT,__text
.globl _sp_1024_sqr_16
.p2align 4
_sp_1024_sqr_16:
#endif /* __APPLE__ */
pushq %r12
subq $0x80, %rsp
# A[0] * A[0]
movq (%rsi), %rax
mulq %rax
xorq %r9, %r9
movq %rax, (%rsp)
movq %rdx, %r8
# A[0] * A[1]
movq 8(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 8(%rsp)
# A[0] * A[2]
movq 16(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[1] * A[1]
movq 8(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 16(%rsp)
# A[0] * A[3]
movq 24(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[1] * A[2]
movq 16(%rsi), %rax
mulq 8(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 24(%rsp)
# A[0] * A[4]
movq 32(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[1] * A[3]
movq 24(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[2] * A[2]
movq 16(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 32(%rsp)
# A[0] * A[5]
movq 40(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[4]
movq 32(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[3]
movq 24(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 40(%rsp)
# A[0] * A[6]
movq 48(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[5]
movq 40(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[4]
movq 32(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[3]
movq 24(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 48(%rsp)
# A[0] * A[7]
movq 56(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[6]
movq 48(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[5]
movq 40(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[4]
movq 32(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 56(%rsp)
# A[0] * A[8]
movq 64(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[7]
movq 56(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[6]
movq 48(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[5]
movq 40(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[4]
movq 32(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 64(%rsp)
# A[0] * A[9]
movq 72(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[8]
movq 64(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[7]
movq 56(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[6]
movq 48(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[5]
movq 40(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 72(%rsp)
# A[0] * A[10]
movq 80(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[9]
movq 72(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[8]
movq 64(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[7]
movq 56(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[6]
movq 48(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[5]
movq 40(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 80(%rsp)
# A[0] * A[11]
movq 88(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[10]
movq 80(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[9]
movq 72(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[8]
movq 64(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[7]
movq 56(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[6]
movq 48(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 88(%rsp)
# A[0] * A[12]
movq 96(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[11]
movq 88(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[10]
movq 80(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[9]
movq 72(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[8]
movq 64(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[7]
movq 56(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[6]
movq 48(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 96(%rsp)
# A[0] * A[13]
movq 104(%rsi), %rax
mulq (%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[12]
movq 96(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[11]
movq 88(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[10]
movq 80(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[9]
movq 72(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[8]
movq 64(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[7]
movq 56(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 104(%rsp)
# A[0] * A[14]
movq 112(%rsi), %rax
mulq (%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[13]
movq 104(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[12]
movq 96(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[11]
movq 88(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[10]
movq 80(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[9]
movq 72(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[8]
movq 64(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[7]
movq 56(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 112(%rsp)
# A[0] * A[15]
movq 120(%rsi), %rax
mulq (%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[1] * A[14]
movq 112(%rsi), %rax
mulq 8(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[2] * A[13]
movq 104(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[12]
movq 96(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[11]
movq 88(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[10]
movq 80(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[9]
movq 72(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[8]
movq 64(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 120(%rsp)
# A[1] * A[15]
movq 120(%rsi), %rax
mulq 8(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[2] * A[14]
movq 112(%rsi), %rax
mulq 16(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[3] * A[13]
movq 104(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[12]
movq 96(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[11]
movq 88(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[10]
movq 80(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[9]
movq 72(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[8]
movq 64(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 128(%rdi)
# A[2] * A[15]
movq 120(%rsi), %rax
mulq 16(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[3] * A[14]
movq 112(%rsi), %rax
mulq 24(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[4] * A[13]
movq 104(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[12]
movq 96(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[11]
movq 88(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[10]
movq 80(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[9]
movq 72(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 136(%rdi)
# A[3] * A[15]
movq 120(%rsi), %rax
mulq 24(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[4] * A[14]
movq 112(%rsi), %rax
mulq 32(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[5] * A[13]
movq 104(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[12]
movq 96(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[11]
movq 88(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[10]
movq 80(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[9]
movq 72(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 144(%rdi)
# A[4] * A[15]
movq 120(%rsi), %rax
mulq 32(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[5] * A[14]
movq 112(%rsi), %rax
mulq 40(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[6] * A[13]
movq 104(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[12]
movq 96(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[11]
movq 88(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[10]
movq 80(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 152(%rdi)
# A[5] * A[15]
movq 120(%rsi), %rax
mulq 40(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[6] * A[14]
movq 112(%rsi), %rax
mulq 48(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[7] * A[13]
movq 104(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[12]
movq 96(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[11]
movq 88(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[10]
movq 80(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 160(%rdi)
# A[6] * A[15]
movq 120(%rsi), %rax
mulq 48(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[7] * A[14]
movq 112(%rsi), %rax
mulq 56(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[8] * A[13]
movq 104(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[12]
movq 96(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[11]
movq 88(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 168(%rdi)
# A[7] * A[15]
movq 120(%rsi), %rax
mulq 56(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[8] * A[14]
movq 112(%rsi), %rax
mulq 64(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[9] * A[13]
movq 104(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[12]
movq 96(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[11] * A[11]
movq 88(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 176(%rdi)
# A[8] * A[15]
movq 120(%rsi), %rax
mulq 64(%rsi)
xorq %r8, %r8
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[9] * A[14]
movq 112(%rsi), %rax
mulq 72(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[10] * A[13]
movq 104(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[11] * A[12]
movq 96(%rsi), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r9
adcq %r11, %rcx
adcq %r12, %r8
movq %r9, 184(%rdi)
# A[9] * A[15]
movq 120(%rsi), %rax
mulq 72(%rsi)
xorq %r9, %r9
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[10] * A[14]
movq 112(%rsi), %rax
mulq 80(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[11] * A[13]
movq 104(%rsi), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[12] * A[12]
movq 96(%rsi), %rax
mulq %rax
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %rcx
adcq %r11, %r8
adcq %r12, %r9
movq %rcx, 192(%rdi)
# A[10] * A[15]
movq 120(%rsi), %rax
mulq 80(%rsi)
xorq %rcx, %rcx
xorq %r12, %r12
movq %rax, %r10
movq %rdx, %r11
# A[11] * A[14]
movq 112(%rsi), %rax
mulq 88(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
# A[12] * A[13]
movq 104(%rsi), %rax
mulq 96(%rsi)
addq %rax, %r10
adcq %rdx, %r11
adcq $0x00, %r12
addq %r10, %r10
adcq %r11, %r11
adcq %r12, %r12
addq %r10, %r8
adcq %r11, %r9
adcq %r12, %rcx
movq %r8, 200(%rdi)
# A[11] * A[15]
movq 120(%rsi), %rax
mulq 88(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[12] * A[14]
movq 112(%rsi), %rax
mulq 96(%rsi)
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
# A[13] * A[13]
movq 104(%rsi), %rax
mulq %rax
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 208(%rdi)
# A[12] * A[15]
movq 120(%rsi), %rax
mulq 96(%rsi)
xorq %r9, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
# A[13] * A[14]
movq 112(%rsi), %rax
mulq 104(%rsi)
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
addq %rax, %rcx
adcq %rdx, %r8
adcq $0x00, %r9
movq %rcx, 216(%rdi)
# A[13] * A[15]
movq 120(%rsi), %rax
mulq 104(%rsi)
xorq %rcx, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
# A[14] * A[14]
movq 112(%rsi), %rax
mulq %rax
addq %rax, %r8
adcq %rdx, %r9
adcq $0x00, %rcx
movq %r8, 224(%rdi)
# A[14] * A[15]
movq 120(%rsi), %rax
mulq 112(%rsi)
xorq %r8, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
addq %rax, %r9
adcq %rdx, %rcx
adcq $0x00, %r8
movq %r9, 232(%rdi)
# A[15] * A[15]
movq 120(%rsi), %rax
mulq %rax
addq %rax, %rcx
adcq %rdx, %r8
movq %rcx, 240(%rdi)
movq %r8, 248(%rdi)
movq (%rsp), %rax
movq 8(%rsp), %rdx
movq 16(%rsp), %r10
movq 24(%rsp), %r11
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
movq %r10, 16(%rdi)
movq %r11, 24(%rdi)
movq 32(%rsp), %rax
movq 40(%rsp), %rdx
movq 48(%rsp), %r10
movq 56(%rsp), %r11
movq %rax, 32(%rdi)
movq %rdx, 40(%rdi)
movq %r10, 48(%rdi)
movq %r11, 56(%rdi)
movq 64(%rsp), %rax
movq 72(%rsp), %rdx
movq 80(%rsp), %r10
movq 88(%rsp), %r11
movq %rax, 64(%rdi)
movq %rdx, 72(%rdi)
movq %r10, 80(%rdi)
movq %r11, 88(%rdi)
movq 96(%rsp), %rax
movq 104(%rsp), %rdx
movq 112(%rsp), %r10
movq 120(%rsp), %r11
movq %rax, 96(%rdi)
movq %rdx, 104(%rdi)
movq %r10, 112(%rdi)
movq %r11, 120(%rdi)
addq $0x80, %rsp
popq %r12
repz retq
#ifndef __APPLE__
.size sp_1024_sqr_16,.-sp_1024_sqr_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Multiply a and b into r. (r = a * b)
*
* r Result of multiplication.
* a First number to multiply.
* b Second number to multiply.
*/
#ifndef __APPLE__
.text
.globl sp_1024_mul_avx2_16
.type sp_1024_mul_avx2_16,@function
.align 16
sp_1024_mul_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mul_avx2_16
.p2align 4
_sp_1024_mul_avx2_16:
#endif /* __APPLE__ */
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
movq %rdx, %rbp
subq $0x80, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbx
cmovne %rdi, %rbx
cmpq %rdi, %rbp
cmove %rsp, %rbx
addq $0x80, %rdi
xorq %r14, %r14
movq (%rsi), %rdx
# A[0] * B[0]
mulx (%rbp), %r8, %r9
# A[0] * B[1]
mulx 8(%rbp), %rax, %r10
movq %r8, (%rbx)
adcxq %rax, %r9
# A[0] * B[2]
mulx 16(%rbp), %rax, %r11
movq %r9, 8(%rbx)
adcxq %rax, %r10
# A[0] * B[3]
mulx 24(%rbp), %rax, %r12
movq %r10, 16(%rbx)
adcxq %rax, %r11
movq %r11, 24(%rbx)
# A[0] * B[4]
mulx 32(%rbp), %rax, %r8
adcxq %rax, %r12
# A[0] * B[5]
mulx 40(%rbp), %rax, %r9
movq %r12, 32(%rbx)
adcxq %rax, %r8
# A[0] * B[6]
mulx 48(%rbp), %rax, %r10
movq %r8, 40(%rbx)
adcxq %rax, %r9
# A[0] * B[7]
mulx 56(%rbp), %rax, %r11
movq %r9, 48(%rbx)
adcxq %rax, %r10
movq %r10, 56(%rbx)
# A[0] * B[8]
mulx 64(%rbp), %rax, %r12
adcxq %rax, %r11
# A[0] * B[9]
mulx 72(%rbp), %rax, %r8
movq %r11, 64(%rbx)
adcxq %rax, %r12
# A[0] * B[10]
mulx 80(%rbp), %rax, %r9
movq %r12, 72(%rbx)
adcxq %rax, %r8
# A[0] * B[11]
mulx 88(%rbp), %rax, %r10
movq %r8, 80(%rbx)
adcxq %rax, %r9
movq %r9, 88(%rbx)
# A[0] * B[12]
mulx 96(%rbp), %rax, %r11
adcxq %rax, %r10
# A[0] * B[13]
mulx 104(%rbp), %rax, %r12
movq %r10, 96(%rbx)
adcxq %rax, %r11
# A[0] * B[14]
mulx 112(%rbp), %rax, %r8
movq %r11, 104(%rbx)
adcxq %rax, %r12
# A[0] * B[15]
mulx 120(%rbp), %rax, %r9
movq %r12, 112(%rbx)
adcxq %rax, %r8
adcxq %r14, %r9
movq %r14, %r13
adcxq %r14, %r13
movq %r8, 120(%rbx)
movq %r9, (%rdi)
movq 8(%rsi), %rdx
movq 8(%rbx), %r9
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r12
movq 40(%rbx), %r8
# A[1] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 8(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[1] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[1] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 32(%rbx)
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
# A[1] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[1] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 64(%rbx)
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
# A[1] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[1] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[1] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rbx)
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[1] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[1] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[1] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[1] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
movq %r14, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r13, %r10
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r9, (%rdi)
movq %r10, 8(%rdi)
movq 16(%rsi), %rdx
movq 16(%rbx), %r10
movq 24(%rbx), %r11
movq 32(%rbx), %r12
movq 40(%rbx), %r8
movq 48(%rbx), %r9
# A[2] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 16(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[2] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[2] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r12, 32(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 40(%rbx)
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
# A[2] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[2] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 72(%rbx)
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
# A[2] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[2] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 104(%rbx)
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[2] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[2] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[2] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[2] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r9, (%rdi)
movq %r14, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r13, %r11
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r10, 8(%rdi)
movq %r11, 16(%rdi)
movq 24(%rsi), %rdx
movq 24(%rbx), %r11
movq 32(%rbx), %r12
movq 40(%rbx), %r8
movq 48(%rbx), %r9
movq 56(%rbx), %r10
# A[3] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[3] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 24(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[3] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r12, 32(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 48(%rbx)
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
# A[3] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[3] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[3] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 80(%rbx)
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
# A[3] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[3] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 112(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[3] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[3] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[3] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
movq %r14, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
adcxq %r13, %r12
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r11, 16(%rdi)
movq %r12, 24(%rdi)
movq 32(%rsi), %rdx
movq 32(%rbx), %r12
movq 40(%rbx), %r8
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
# A[4] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[4] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r12, 32(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 56(%rbx)
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
# A[4] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[4] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 88(%rbx)
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[4] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[4] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[4] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 120(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[4] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[4] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[4] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[4] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
movq %r14, %r8
adcxq %rax, %r12
adoxq %rcx, %r8
adcxq %r13, %r8
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r12, 24(%rdi)
movq %r8, 32(%rdi)
movq 40(%rsi), %rdx
movq 40(%rbx), %r8
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
# A[5] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 40(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[5] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 64(%rbx)
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
# A[5] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[5] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[5] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rbx)
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[5] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[5] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[5] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
# A[5] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[5] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[5] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[5] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
movq %r14, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r13, %r9
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
movq 48(%rsi), %rdx
movq 48(%rbx), %r9
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
# A[6] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 48(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[6] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 72(%rbx)
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
# A[6] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[6] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 104(%rbx)
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[6] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[6] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[6] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[6] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[6] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[6] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
movq %r14, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r13, %r10
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r9, 40(%rdi)
movq %r10, 48(%rdi)
movq 56(%rsi), %rdx
movq 56(%rbx), %r10
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
# A[7] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 56(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[7] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[7] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 80(%rbx)
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
# A[7] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[7] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 112(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[7] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[7] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
# A[7] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[7] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[7] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
movq %r14, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r13, %r11
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r10, 48(%rdi)
movq %r11, 56(%rdi)
movq 64(%rsi), %rdx
movq 64(%rbx), %r11
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
# A[8] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[8] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 64(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[8] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 88(%rbx)
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[8] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[8] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[8] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 120(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
# A[8] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[8] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 24(%rdi)
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
# A[8] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[8] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[8] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
movq %r14, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
adcxq %r13, %r12
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r11, 56(%rdi)
movq %r12, 64(%rdi)
movq 72(%rsi), %rdx
movq 72(%rbx), %r12
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
# A[9] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[9] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r12, 72(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[9] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 96(%rbx)
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[9] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[9] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[9] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[9] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[9] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[9] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[9] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rdi)
movq 48(%rdi), %r10
movq 56(%rdi), %r11
movq 64(%rdi), %r12
# A[9] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[9] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[9] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[9] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
movq %r14, %r8
adcxq %rax, %r12
adoxq %rcx, %r8
adcxq %r13, %r8
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r12, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rsi), %rdx
movq 80(%rbx), %r8
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
# A[10] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 80(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[10] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 104(%rbx)
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[10] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[10] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
# A[10] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[10] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[10] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[10] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 40(%rdi)
movq 56(%rdi), %r11
movq 64(%rdi), %r12
movq 72(%rdi), %r8
# A[10] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[10] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[10] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[10] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
movq %r14, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r13, %r9
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq 88(%rsi), %rdx
movq 88(%rbx), %r9
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
# A[11] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r9, 88(%rbx)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[11] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[11] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 112(%rbx)
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[11] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[11] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
# A[11] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[11] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[11] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
movq 64(%rdi), %r12
movq 72(%rdi), %r8
movq 80(%rdi), %r9
# A[11] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[11] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[11] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
movq %r14, %r10
adcxq %rax, %r9
adoxq %rcx, %r10
adcxq %r13, %r10
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq 96(%rsi), %rdx
movq 96(%rbx), %r10
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
# A[12] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[12] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r10, 96(%rbx)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[12] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[12] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 120(%rbx)
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
# A[12] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[12] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[12] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 24(%rdi)
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
movq 64(%rdi), %r12
# A[12] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[12] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[12] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 56(%rdi)
movq 72(%rdi), %r8
movq 80(%rdi), %r9
movq 88(%rdi), %r10
# A[12] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[12] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[12] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r9, 80(%rdi)
movq %r14, %r11
adcxq %rax, %r10
adoxq %rcx, %r11
adcxq %r13, %r11
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r10, 88(%rdi)
movq %r11, 96(%rdi)
movq 104(%rsi), %rdx
movq 104(%rbx), %r11
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[13] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[13] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r11, 104(%rbx)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[13] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, (%rdi)
movq 16(%rdi), %r11
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[13] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[13] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[13] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[13] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 32(%rdi)
movq 48(%rdi), %r10
movq 56(%rdi), %r11
movq 64(%rdi), %r12
movq 72(%rdi), %r8
# A[13] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[13] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[13] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
movq %r12, 64(%rdi)
movq 80(%rdi), %r9
movq 88(%rdi), %r10
movq 96(%rdi), %r11
# A[13] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r9, 80(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[13] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r10, 88(%rdi)
movq %r14, %r12
adcxq %rax, %r11
adoxq %rcx, %r12
adcxq %r13, %r12
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r11, 96(%rdi)
movq %r12, 104(%rdi)
movq 112(%rsi), %rdx
movq 112(%rbx), %r12
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
# A[14] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[14] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r12, 112(%rbx)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[14] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
movq 24(%rdi), %r12
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
# A[14] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[14] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r11, 16(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[14] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 40(%rdi)
movq 56(%rdi), %r11
movq 64(%rdi), %r12
movq 72(%rdi), %r8
movq 80(%rdi), %r9
# A[14] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[14] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r10, 48(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[14] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[14] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r8, 72(%rdi)
movq 88(%rdi), %r10
movq 96(%rdi), %r11
movq 104(%rdi), %r12
# A[14] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[14] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r9, 80(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[14] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r10, 88(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[14] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r11, 96(%rdi)
movq %r14, %r8
adcxq %rax, %r12
adoxq %rcx, %r8
adcxq %r13, %r8
movq %r14, %r13
adoxq %r14, %r13
adcxq %r14, %r13
movq %r12, 104(%rdi)
movq %r8, 112(%rdi)
movq 120(%rsi), %rdx
movq 120(%rbx), %r8
movq (%rdi), %r9
movq 8(%rdi), %r10
movq 16(%rdi), %r11
movq 24(%rdi), %r12
# A[15] * B[0]
mulx (%rbp), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] * B[1]
mulx 8(%rbp), %rax, %rcx
movq %r8, 120(%rbx)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] * B[2]
mulx 16(%rbp), %rax, %rcx
movq %r9, (%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
# A[15] * B[3]
mulx 24(%rbp), %rax, %rcx
movq %r10, 8(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
movq %r11, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
movq 48(%rdi), %r10
movq 56(%rdi), %r11
# A[15] * B[4]
mulx 32(%rbp), %rax, %rcx
adcxq %rax, %r12
adoxq %rcx, %r8
# A[15] * B[5]
mulx 40(%rbp), %rax, %rcx
movq %r12, 24(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] * B[6]
mulx 48(%rbp), %rax, %rcx
movq %r8, 32(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] * B[7]
mulx 56(%rbp), %rax, %rcx
movq %r9, 40(%rdi)
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
movq 64(%rdi), %r12
movq 72(%rdi), %r8
movq 80(%rdi), %r9
movq 88(%rdi), %r10
# A[15] * B[8]
mulx 64(%rbp), %rax, %rcx
adcxq %rax, %r11
adoxq %rcx, %r12
# A[15] * B[9]
mulx 72(%rbp), %rax, %rcx
movq %r11, 56(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[15] * B[10]
mulx 80(%rbp), %rax, %rcx
movq %r12, 64(%rdi)
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] * B[11]
mulx 88(%rbp), %rax, %rcx
movq %r8, 72(%rdi)
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r9, 80(%rdi)
movq 96(%rdi), %r11
movq 104(%rdi), %r12
movq 112(%rdi), %r8
# A[15] * B[12]
mulx 96(%rbp), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r11
# A[15] * B[13]
mulx 104(%rbp), %rax, %rcx
movq %r10, 88(%rdi)
adcxq %rax, %r11
adoxq %rcx, %r12
# A[15] * B[14]
mulx 112(%rbp), %rax, %rcx
movq %r11, 96(%rdi)
adcxq %rax, %r12
adoxq %rcx, %r8
# A[15] * B[15]
mulx 120(%rbp), %rax, %rcx
movq %r12, 104(%rdi)
movq %r14, %r9
adcxq %rax, %r8
adoxq %rcx, %r9
adcxq %r13, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
subq $0x80, %rdi
cmpq %rdi, %rsi
je L_start_1024_mul_avx2_16
cmpq %rdi, %rbp
jne L_end_1024_mul_avx2_16
L_start_1024_mul_avx2_16:
vmovdqu (%rbx), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbx), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbx), %xmm0
vmovups %xmm0, 32(%rdi)
vmovdqu 48(%rbx), %xmm0
vmovups %xmm0, 48(%rdi)
vmovdqu 64(%rbx), %xmm0
vmovups %xmm0, 64(%rdi)
vmovdqu 80(%rbx), %xmm0
vmovups %xmm0, 80(%rdi)
vmovdqu 96(%rbx), %xmm0
vmovups %xmm0, 96(%rdi)
vmovdqu 112(%rbx), %xmm0
vmovups %xmm0, 112(%rdi)
L_end_1024_mul_avx2_16:
addq $0x80, %rsp
popq %r14
popq %r13
popq %r12
popq %rbp
popq %rbx
repz retq
#ifndef __APPLE__
.size sp_1024_mul_avx2_16,.-sp_1024_mul_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Square a and put result in r. (r = a * a)
*
* r A single precision integer.
* a A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_1024_sqr_avx2_16
.type sp_1024_sqr_avx2_16,@function
.align 16
sp_1024_sqr_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_sqr_avx2_16
.p2align 4
_sp_1024_sqr_avx2_16:
#endif /* __APPLE__ */
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
subq $0x80, %rsp
cmpq %rdi, %rsi
movq %rsp, %rbp
cmovne %rdi, %rbp
addq $0x80, %rdi
xorq %r11, %r11
# Diagonal 1
# Zero into %r9
# Zero into %r10
# A[1] x A[0]
movq (%rsi), %rdx
mulxq 8(%rsi), %r8, %r9
# A[2] x A[0]
mulxq 16(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 8(%rbp)
movq %r9, 16(%rbp)
# Zero into %r8
# Zero into %r9
# A[3] x A[0]
mulxq 24(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
# A[4] x A[0]
mulxq 32(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r11, %r9
movq %r10, 24(%rbp)
movq %r8, 32(%rbp)
# Zero into %r10
# Zero into %r8
# A[5] x A[0]
mulxq 40(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
# A[6] x A[0]
mulxq 48(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r9, 40(%rbp)
movq %r10, 48(%rbp)
# Zero into %r9
# Zero into %r10
# A[7] x A[0]
mulxq 56(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r11, %r9
# A[8] x A[0]
mulxq 64(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 56(%rbp)
movq %r9, 64(%rbp)
# Zero into %r8
# Zero into %r9
# A[9] x A[0]
mulxq 72(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
# A[10] x A[0]
mulxq 80(%rsi), %rax, %r9
adcxq %rax, %r8
adoxq %r11, %r9
movq %r10, 72(%rbp)
movq %r8, 80(%rbp)
# No load %r13 - %r10
# A[11] x A[0]
mulxq 88(%rsi), %rax, %r13
adcxq %rax, %r9
adoxq %r11, %r13
# A[12] x A[0]
mulxq 96(%rsi), %rax, %r14
adcxq %rax, %r13
adoxq %r11, %r14
movq %r9, 88(%rbp)
# No store %r13 - %r10
# No load %r15 - %r9
# A[13] x A[0]
mulxq 104(%rsi), %rax, %r15
adcxq %rax, %r14
adoxq %r11, %r15
# A[14] x A[0]
mulxq 112(%rsi), %rax, %rbx
adcxq %rax, %r15
adoxq %r11, %rbx
# No store %r14 - %r8
# No store %r15 - %r9
# Zero into %r8
# Zero into %r9
# A[15] x A[0]
mulxq 120(%rsi), %rax, %r8
adcxq %rax, %rbx
adoxq %r11, %r8
# No store %rbx - %r10
# Carry
adcxq %r11, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, (%rdi)
# Diagonal 2
movq 24(%rbp), %r8
movq 32(%rbp), %r9
movq 40(%rbp), %r10
# A[2] x A[1]
movq 8(%rsi), %rdx
mulxq 16(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[3] x A[1]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 24(%rbp)
movq %r9, 32(%rbp)
movq 48(%rbp), %r8
movq 56(%rbp), %r9
# A[4] x A[1]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[5] x A[1]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 40(%rbp)
movq %r8, 48(%rbp)
movq 64(%rbp), %r10
movq 72(%rbp), %r8
# A[6] x A[1]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[7] x A[1]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 56(%rbp)
movq %r10, 64(%rbp)
movq 80(%rbp), %r9
movq 88(%rbp), %r10
# A[8] x A[1]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[9] x A[1]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 72(%rbp)
movq %r9, 80(%rbp)
# No load %r13 - %r8
# A[10] x A[1]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r13
# A[11] x A[1]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r10, 88(%rbp)
# No store %r13 - %r8
# No load %r15 - %r10
# A[12] x A[1]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[13] x A[1]
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r9
# No store %r15 - %r10
movq (%rdi), %r9
# Zero into %r10
# A[14] x A[1]
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# A[15] x A[1]
mulxq 120(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
# No store %rbx - %r8
movq %r9, (%rdi)
# Zero into %r8
# Zero into %r9
# A[15] x A[2]
movq 16(%rsi), %rdx
mulxq 120(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 8(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 16(%rdi)
# Diagonal 3
movq 40(%rbp), %r8
movq 48(%rbp), %r9
movq 56(%rbp), %r10
# A[3] x A[2]
mulxq 24(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[4] x A[2]
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 40(%rbp)
movq %r9, 48(%rbp)
movq 64(%rbp), %r8
movq 72(%rbp), %r9
# A[5] x A[2]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[6] x A[2]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 56(%rbp)
movq %r8, 64(%rbp)
movq 80(%rbp), %r10
movq 88(%rbp), %r8
# A[7] x A[2]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[8] x A[2]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 72(%rbp)
movq %r10, 80(%rbp)
# No load %r13 - %r9
# A[9] x A[2]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r13
# A[10] x A[2]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r8, 88(%rbp)
# No store %r13 - %r9
# No load %r15 - %r8
# A[11] x A[2]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[12] x A[2]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r10
# No store %r15 - %r8
movq (%rdi), %r10
movq 8(%rdi), %r8
# A[13] x A[2]
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r10
# A[14] x A[2]
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# No store %rbx - %r9
movq %r10, (%rdi)
movq 16(%rdi), %r9
# Zero into %r10
# A[14] x A[3]
movq 24(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] x A[4]
movq 32(%rsi), %rdx
mulxq 112(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
# Zero into %r8
# Zero into %r9
# A[14] x A[5]
movq 40(%rsi), %rdx
mulxq 112(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 24(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 32(%rdi)
# Diagonal 4
movq 56(%rbp), %r8
movq 64(%rbp), %r9
movq 72(%rbp), %r10
# A[4] x A[3]
movq 24(%rsi), %rdx
mulxq 32(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[5] x A[3]
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 56(%rbp)
movq %r9, 64(%rbp)
movq 80(%rbp), %r8
movq 88(%rbp), %r9
# A[6] x A[3]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[7] x A[3]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 72(%rbp)
movq %r8, 80(%rbp)
# No load %r13 - %r10
# A[8] x A[3]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r13
# A[9] x A[3]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r9, 88(%rbp)
# No store %r13 - %r10
# No load %r15 - %r9
# A[10] x A[3]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[11] x A[3]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r8
# No store %r15 - %r9
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[12] x A[3]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# A[13] x A[3]
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# No store %rbx - %r10
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[13] x A[4]
movq 32(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] x A[5]
movq 40(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
# Zero into %r10
# A[13] x A[6]
movq 48(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] x A[7]
movq 56(%rsi), %rdx
mulxq 104(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
# Zero into %r8
# Zero into %r9
# A[13] x A[8]
movq 64(%rsi), %rdx
mulxq 104(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 40(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 48(%rdi)
# Diagonal 5
movq 72(%rbp), %r8
movq 80(%rbp), %r9
movq 88(%rbp), %r10
# A[5] x A[4]
movq 32(%rsi), %rdx
mulxq 40(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[6] x A[4]
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 72(%rbp)
movq %r9, 80(%rbp)
# No load %r13 - %r8
# A[7] x A[4]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r13
# A[8] x A[4]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r10, 88(%rbp)
# No store %r13 - %r8
# No load %r15 - %r10
# A[9] x A[4]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[10] x A[4]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r9
# No store %r15 - %r10
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[11] x A[4]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# A[12] x A[4]
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# No store %rbx - %r8
movq %r9, (%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[12] x A[5]
movq 40(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[12] x A[6]
movq 48(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 8(%rdi)
movq %r8, 16(%rdi)
movq 32(%rdi), %r10
movq 40(%rdi), %r8
# A[12] x A[7]
movq 56(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[12] x A[8]
movq 64(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq 48(%rdi), %r9
# Zero into %r10
# A[12] x A[9]
movq 72(%rsi), %rdx
mulxq 96(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[12] x A[10]
movq 80(%rsi), %rdx
mulxq 96(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
# Zero into %r8
# Zero into %r9
# A[12] x A[11]
movq 88(%rsi), %rdx
mulxq 96(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 56(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 64(%rdi)
# Diagonal 6
movq 88(%rbp), %r8
# No load %r13 - %r9
# A[6] x A[5]
movq 40(%rsi), %rdx
mulxq 48(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r13
# A[7] x A[5]
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r13
adoxq %rcx, %r14
movq %r8, 88(%rbp)
# No store %r13 - %r9
# No load %r15 - %r8
# A[8] x A[5]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[9] x A[5]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r10
# No store %r15 - %r8
movq (%rdi), %r10
movq 8(%rdi), %r8
# A[10] x A[5]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r10
# A[11] x A[5]
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# No store %rbx - %r9
movq %r10, (%rdi)
movq 16(%rdi), %r9
movq 24(%rdi), %r10
# A[11] x A[6]
movq 48(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[11] x A[7]
movq 56(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[11] x A[8]
movq 64(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[11] x A[9]
movq 72(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 24(%rdi)
movq %r8, 32(%rdi)
movq 48(%rdi), %r10
movq 56(%rdi), %r8
# A[11] x A[10]
movq 80(%rsi), %rdx
mulxq 88(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[13] x A[9]
movq 72(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 40(%rdi)
movq %r10, 48(%rdi)
movq 64(%rdi), %r9
# Zero into %r10
# A[13] x A[10]
movq 80(%rsi), %rdx
mulxq 104(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[13] x A[11]
movq 88(%rsi), %rdx
mulxq 104(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 56(%rdi)
movq %r9, 64(%rdi)
# Zero into %r8
# Zero into %r9
# A[13] x A[12]
movq 96(%rsi), %rdx
mulxq 104(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 72(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 80(%rdi)
# Diagonal 7
# No load %r15 - %r9
# A[7] x A[6]
movq 48(%rsi), %rdx
mulxq 56(%rsi), %rax, %rcx
adcxq %rax, %r14
adoxq %rcx, %r15
# A[8] x A[6]
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %r15
adoxq %rcx, %rbx
# No store %r14 - %r8
# No store %r15 - %r9
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[9] x A[6]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r8
# A[10] x A[6]
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# No store %rbx - %r10
movq %r8, (%rdi)
movq 16(%rdi), %r10
movq 24(%rdi), %r8
# A[10] x A[7]
movq 56(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[10] x A[8]
movq 64(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 8(%rdi)
movq %r10, 16(%rdi)
movq 32(%rdi), %r9
movq 40(%rdi), %r10
# A[10] x A[9]
movq 72(%rsi), %rdx
mulxq 80(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] x A[6]
movq 48(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 24(%rdi)
movq %r9, 32(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[14] x A[7]
movq 56(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[14] x A[8]
movq 64(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 40(%rdi)
movq %r8, 48(%rdi)
movq 64(%rdi), %r10
movq 72(%rdi), %r8
# A[14] x A[9]
movq 72(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[14] x A[10]
movq 80(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 56(%rdi)
movq %r10, 64(%rdi)
movq 80(%rdi), %r9
# Zero into %r10
# A[14] x A[11]
movq 88(%rsi), %rdx
mulxq 112(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[14] x A[12]
movq 96(%rsi), %rdx
mulxq 112(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
# Zero into %r8
# Zero into %r9
# A[14] x A[13]
movq 104(%rsi), %rdx
mulxq 112(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 88(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 96(%rdi)
# Diagonal 8
movq (%rdi), %r9
movq 8(%rdi), %r10
# A[8] x A[7]
movq 56(%rsi), %rdx
mulxq 64(%rsi), %rax, %rcx
adcxq %rax, %rbx
adoxq %rcx, %r9
# A[9] x A[7]
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# No store %rbx - %r8
movq %r9, (%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[9] x A[8]
movq 64(%rsi), %rdx
mulxq 72(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[15] x A[3]
movq 24(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 8(%rdi)
movq %r8, 16(%rdi)
movq 32(%rdi), %r10
movq 40(%rdi), %r8
# A[15] x A[4]
movq 32(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] x A[5]
movq 40(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 24(%rdi)
movq %r10, 32(%rdi)
movq 48(%rdi), %r9
movq 56(%rdi), %r10
# A[15] x A[6]
movq 48(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] x A[7]
movq 56(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq 64(%rdi), %r8
movq 72(%rdi), %r9
# A[15] x A[8]
movq 64(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
# A[15] x A[9]
movq 72(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
movq %r10, 56(%rdi)
movq %r8, 64(%rdi)
movq 80(%rdi), %r10
movq 88(%rdi), %r8
# A[15] x A[10]
movq 80(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r9
adoxq %rcx, %r10
# A[15] x A[11]
movq 88(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r10
adoxq %rcx, %r8
movq %r9, 72(%rdi)
movq %r10, 80(%rdi)
movq 96(%rdi), %r9
# Zero into %r10
# A[15] x A[12]
movq 96(%rsi), %rdx
mulxq 120(%rsi), %rax, %rcx
adcxq %rax, %r8
adoxq %rcx, %r9
# A[15] x A[13]
movq 104(%rsi), %rdx
mulxq 120(%rsi), %rax, %r10
adcxq %rax, %r9
adoxq %r11, %r10
movq %r8, 88(%rdi)
movq %r9, 96(%rdi)
# Zero into %r8
# Zero into %r9
# A[15] x A[14]
movq 112(%rsi), %rdx
mulxq 120(%rsi), %rax, %r8
adcxq %rax, %r10
adoxq %r11, %r8
movq %r10, 104(%rdi)
# Carry
adcxq %r12, %r8
movq %r11, %r12
adcxq %r11, %r12
adoxq %r11, %r12
movq %r8, 112(%rdi)
movq %r12, 120(%rdi)
# Double and Add in A[i] x A[i]
movq 8(%rbp), %r9
# A[0] x A[0]
movq (%rsi), %rdx
mulxq %rdx, %rax, %rcx
movq %rax, (%rbp)
adoxq %r9, %r9
adcxq %rcx, %r9
movq %r9, 8(%rbp)
movq 16(%rbp), %r8
movq 24(%rbp), %r9
# A[1] x A[1]
movq 8(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rbp)
movq %r9, 24(%rbp)
movq 32(%rbp), %r8
movq 40(%rbp), %r9
# A[2] x A[2]
movq 16(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 32(%rbp)
movq %r9, 40(%rbp)
movq 48(%rbp), %r8
movq 56(%rbp), %r9
# A[3] x A[3]
movq 24(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 48(%rbp)
movq %r9, 56(%rbp)
movq 64(%rbp), %r8
movq 72(%rbp), %r9
# A[4] x A[4]
movq 32(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 64(%rbp)
movq %r9, 72(%rbp)
movq 80(%rbp), %r8
movq 88(%rbp), %r9
# A[5] x A[5]
movq 40(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 80(%rbp)
movq %r9, 88(%rbp)
# A[6] x A[6]
movq 48(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r13, %r13
adoxq %r14, %r14
adcxq %rax, %r13
adcxq %rcx, %r14
# A[7] x A[7]
movq 56(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r15, %r15
adoxq %rbx, %rbx
adcxq %rax, %r15
adcxq %rcx, %rbx
movq (%rdi), %r8
movq 8(%rdi), %r9
# A[8] x A[8]
movq 64(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq 16(%rdi), %r8
movq 24(%rdi), %r9
# A[9] x A[9]
movq 72(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdi), %r8
movq 40(%rdi), %r9
# A[10] x A[10]
movq 80(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
movq 48(%rdi), %r8
movq 56(%rdi), %r9
# A[11] x A[11]
movq 88(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rdi), %r8
movq 72(%rdi), %r9
# A[12] x A[12]
movq 96(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 64(%rdi)
movq %r9, 72(%rdi)
movq 80(%rdi), %r8
movq 88(%rdi), %r9
# A[13] x A[13]
movq 104(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rdi), %r8
movq 104(%rdi), %r9
# A[14] x A[14]
movq 112(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 96(%rdi)
movq %r9, 104(%rdi)
movq 112(%rdi), %r8
movq 120(%rdi), %r9
# A[15] x A[15]
movq 120(%rsi), %rdx
mulxq %rdx, %rax, %rcx
adoxq %r8, %r8
adoxq %r9, %r9
adcxq %rax, %r8
adcxq %rcx, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
movq %r13, -32(%rdi)
movq %r14, -24(%rdi)
movq %r15, -16(%rdi)
movq %rbx, -8(%rdi)
subq $0x80, %rdi
cmpq %rdi, %rsi
jne L_end_1024_sqr_avx2_16
vmovdqu (%rbp), %xmm0
vmovups %xmm0, (%rdi)
vmovdqu 16(%rbp), %xmm0
vmovups %xmm0, 16(%rdi)
vmovdqu 32(%rbp), %xmm0
vmovups %xmm0, 32(%rdi)
vmovdqu 48(%rbp), %xmm0
vmovups %xmm0, 48(%rdi)
vmovdqu 64(%rbp), %xmm0
vmovups %xmm0, 64(%rdi)
vmovdqu 80(%rbp), %xmm0
vmovups %xmm0, 80(%rdi)
L_end_1024_sqr_avx2_16:
addq $0x80, %rsp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbp
repz retq
#ifndef __APPLE__
.size sp_1024_sqr_avx2_16,.-sp_1024_sqr_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Add b to a into r. (r = a + b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_1024_add_16
.type sp_1024_add_16,@function
.align 16
sp_1024_add_16:
#else
.section __TEXT,__text
.globl _sp_1024_add_16
.p2align 4
_sp_1024_add_16:
#endif /* __APPLE__ */
# Add
movq (%rsi), %rcx
xorq %rax, %rax
addq (%rdx), %rcx
movq 8(%rsi), %r8
movq %rcx, (%rdi)
adcq 8(%rdx), %r8
movq 16(%rsi), %rcx
movq %r8, 8(%rdi)
adcq 16(%rdx), %rcx
movq 24(%rsi), %r8
movq %rcx, 16(%rdi)
adcq 24(%rdx), %r8
movq 32(%rsi), %rcx
movq %r8, 24(%rdi)
adcq 32(%rdx), %rcx
movq 40(%rsi), %r8
movq %rcx, 32(%rdi)
adcq 40(%rdx), %r8
movq 48(%rsi), %rcx
movq %r8, 40(%rdi)
adcq 48(%rdx), %rcx
movq 56(%rsi), %r8
movq %rcx, 48(%rdi)
adcq 56(%rdx), %r8
movq 64(%rsi), %rcx
movq %r8, 56(%rdi)
adcq 64(%rdx), %rcx
movq 72(%rsi), %r8
movq %rcx, 64(%rdi)
adcq 72(%rdx), %r8
movq 80(%rsi), %rcx
movq %r8, 72(%rdi)
adcq 80(%rdx), %rcx
movq 88(%rsi), %r8
movq %rcx, 80(%rdi)
adcq 88(%rdx), %r8
movq 96(%rsi), %rcx
movq %r8, 88(%rdi)
adcq 96(%rdx), %rcx
movq 104(%rsi), %r8
movq %rcx, 96(%rdi)
adcq 104(%rdx), %r8
movq 112(%rsi), %rcx
movq %r8, 104(%rdi)
adcq 112(%rdx), %rcx
movq 120(%rsi), %r8
movq %rcx, 112(%rdi)
adcq 120(%rdx), %r8
movq %r8, 120(%rdi)
adcq $0x00, %rax
repz retq
#ifndef __APPLE__
.size sp_1024_add_16,.-sp_1024_add_16
#endif /* __APPLE__ */
/* Sub b from a into a. (a -= b)
*
* a A single precision integer and result.
* b A single precision integer.
*/
#ifndef __APPLE__
.text
.globl sp_1024_sub_in_place_16
.type sp_1024_sub_in_place_16,@function
.align 16
sp_1024_sub_in_place_16:
#else
.section __TEXT,__text
.globl _sp_1024_sub_in_place_16
.p2align 4
_sp_1024_sub_in_place_16:
#endif /* __APPLE__ */
movq (%rdi), %rdx
subq (%rsi), %rdx
movq 8(%rdi), %rcx
movq %rdx, (%rdi)
sbbq 8(%rsi), %rcx
movq 16(%rdi), %rdx
movq %rcx, 8(%rdi)
sbbq 16(%rsi), %rdx
movq 24(%rdi), %rcx
movq %rdx, 16(%rdi)
sbbq 24(%rsi), %rcx
movq 32(%rdi), %rdx
movq %rcx, 24(%rdi)
sbbq 32(%rsi), %rdx
movq 40(%rdi), %rcx
movq %rdx, 32(%rdi)
sbbq 40(%rsi), %rcx
movq 48(%rdi), %rdx
movq %rcx, 40(%rdi)
sbbq 48(%rsi), %rdx
movq 56(%rdi), %rcx
movq %rdx, 48(%rdi)
sbbq 56(%rsi), %rcx
movq 64(%rdi), %rdx
movq %rcx, 56(%rdi)
sbbq 64(%rsi), %rdx
movq 72(%rdi), %rcx
movq %rdx, 64(%rdi)
sbbq 72(%rsi), %rcx
movq 80(%rdi), %rdx
movq %rcx, 72(%rdi)
sbbq 80(%rsi), %rdx
movq 88(%rdi), %rcx
movq %rdx, 80(%rdi)
sbbq 88(%rsi), %rcx
movq 96(%rdi), %rdx
movq %rcx, 88(%rdi)
sbbq 96(%rsi), %rdx
movq 104(%rdi), %rcx
movq %rdx, 96(%rdi)
sbbq 104(%rsi), %rcx
movq 112(%rdi), %rdx
movq %rcx, 104(%rdi)
sbbq 112(%rsi), %rdx
movq 120(%rdi), %rcx
movq %rdx, 112(%rdi)
sbbq 120(%rsi), %rcx
movq %rcx, 120(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_1024_sub_in_place_16,.-sp_1024_sub_in_place_16
#endif /* __APPLE__ */
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_1024_cond_sub_16
.type sp_1024_cond_sub_16,@function
.align 16
sp_1024_cond_sub_16:
#else
.section __TEXT,__text
.globl _sp_1024_cond_sub_16
.p2align 4
_sp_1024_cond_sub_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %rcx, %r8
andq %rcx, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq (%rsi), %r8
movq (%rsp), %rdx
subq %rdx, %r8
movq 8(%rsi), %r9
movq 8(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, (%rdi)
movq 16(%rsi), %r8
movq 16(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 8(%rdi)
movq 24(%rsi), %r9
movq 24(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 16(%rdi)
movq 32(%rsi), %r8
movq 32(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 24(%rdi)
movq 40(%rsi), %r9
movq 40(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 32(%rdi)
movq 48(%rsi), %r8
movq 48(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 40(%rdi)
movq 56(%rsi), %r9
movq 56(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 48(%rdi)
movq 64(%rsi), %r8
movq 64(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 56(%rdi)
movq 72(%rsi), %r9
movq 72(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 64(%rdi)
movq 80(%rsi), %r8
movq 80(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 72(%rdi)
movq 88(%rsi), %r9
movq 88(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 80(%rdi)
movq 96(%rsi), %r8
movq 96(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 88(%rdi)
movq 104(%rsi), %r9
movq 104(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 96(%rdi)
movq 112(%rsi), %r8
movq 112(%rsp), %rdx
sbbq %rdx, %r8
movq %r9, 104(%rdi)
movq 120(%rsi), %r9
movq 120(%rsp), %rdx
sbbq %rdx, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq %rax, %rax
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_cond_sub_16,.-sp_1024_cond_sub_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Conditionally subtract b from a using the mask m.
* m is -1 to subtract and 0 when not copying.
*
* r A single precision number representing condition subtract result.
* a A single precision number to subtract from.
* b A single precision number to subtract.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_1024_cond_sub_avx2_16
.type sp_1024_cond_sub_avx2_16,@function
.align 16
sp_1024_cond_sub_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_cond_sub_avx2_16
.p2align 4
_sp_1024_cond_sub_avx2_16:
#endif /* __APPLE__ */
movq (%rdx), %r10
movq (%rsi), %r8
pextq %rcx, %r10, %r10
subq %r10, %r8
movq 8(%rdx), %r10
movq 8(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, (%rdi)
sbbq %r10, %r9
movq 16(%rdx), %r8
movq 16(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 8(%rdi)
sbbq %r8, %r10
movq 24(%rdx), %r9
movq 24(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 16(%rdi)
sbbq %r9, %r8
movq 32(%rdx), %r10
movq 32(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 24(%rdi)
sbbq %r10, %r9
movq 40(%rdx), %r8
movq 40(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 32(%rdi)
sbbq %r8, %r10
movq 48(%rdx), %r9
movq 48(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 40(%rdi)
sbbq %r9, %r8
movq 56(%rdx), %r10
movq 56(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 48(%rdi)
sbbq %r10, %r9
movq 64(%rdx), %r8
movq 64(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 56(%rdi)
sbbq %r8, %r10
movq 72(%rdx), %r9
movq 72(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 64(%rdi)
sbbq %r9, %r8
movq 80(%rdx), %r10
movq 80(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 72(%rdi)
sbbq %r10, %r9
movq 88(%rdx), %r8
movq 88(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 80(%rdi)
sbbq %r8, %r10
movq 96(%rdx), %r9
movq 96(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 88(%rdi)
sbbq %r9, %r8
movq 104(%rdx), %r10
movq 104(%rsi), %r9
pextq %rcx, %r10, %r10
movq %r8, 96(%rdi)
sbbq %r10, %r9
movq 112(%rdx), %r8
movq 112(%rsi), %r10
pextq %rcx, %r8, %r8
movq %r9, 104(%rdi)
sbbq %r8, %r10
movq 120(%rdx), %r9
movq 120(%rsi), %r8
pextq %rcx, %r9, %r9
movq %r10, 112(%rdi)
sbbq %r9, %r8
movq %r8, 120(%rdi)
sbbq %rax, %rax
repz retq
#ifndef __APPLE__
.size sp_1024_cond_sub_avx2_16,.-sp_1024_cond_sub_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_1024_mul_d_16
.type sp_1024_mul_d_16,@function
.align 16
sp_1024_mul_d_16:
#else
.section __TEXT,__text
.globl _sp_1024_mul_d_16
.p2align 4
_sp_1024_mul_d_16:
#endif /* __APPLE__ */
movq %rdx, %rcx
# A[0] * B
movq %rcx, %rax
xorq %r10, %r10
mulq (%rsi)
movq %rax, %r8
movq %rdx, %r9
movq %r8, (%rdi)
# A[1] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 8(%rsi)
addq %rax, %r9
movq %r9, 8(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[2] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 16(%rsi)
addq %rax, %r10
movq %r10, 16(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[3] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 24(%rsi)
addq %rax, %r8
movq %r8, 24(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[4] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 32(%rsi)
addq %rax, %r9
movq %r9, 32(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[5] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 40(%rsi)
addq %rax, %r10
movq %r10, 40(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[6] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 48(%rsi)
addq %rax, %r8
movq %r8, 48(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[7] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 56(%rsi)
addq %rax, %r9
movq %r9, 56(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[8] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 64(%rsi)
addq %rax, %r10
movq %r10, 64(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[9] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 72(%rsi)
addq %rax, %r8
movq %r8, 72(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[10] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 80(%rsi)
addq %rax, %r9
movq %r9, 80(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[11] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 88(%rsi)
addq %rax, %r10
movq %r10, 88(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[12] * B
movq %rcx, %rax
xorq %r10, %r10
mulq 96(%rsi)
addq %rax, %r8
movq %r8, 96(%rdi)
adcq %rdx, %r9
adcq $0x00, %r10
# A[13] * B
movq %rcx, %rax
xorq %r8, %r8
mulq 104(%rsi)
addq %rax, %r9
movq %r9, 104(%rdi)
adcq %rdx, %r10
adcq $0x00, %r8
# A[14] * B
movq %rcx, %rax
xorq %r9, %r9
mulq 112(%rsi)
addq %rax, %r10
movq %r10, 112(%rdi)
adcq %rdx, %r8
adcq $0x00, %r9
# A[15] * B
movq %rcx, %rax
mulq 120(%rsi)
addq %rax, %r8
adcq %rdx, %r9
movq %r8, 120(%rdi)
movq %r9, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mul_d_16,.-sp_1024_mul_d_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Mul a by digit b into r. (r = a * b)
*
* r A single precision integer.
* a A single precision integer.
* b A single precision digit.
*/
#ifndef __APPLE__
.text
.globl sp_1024_mul_d_avx2_16
.type sp_1024_mul_d_avx2_16,@function
.align 16
sp_1024_mul_d_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mul_d_avx2_16
.p2align 4
_sp_1024_mul_d_avx2_16:
#endif /* __APPLE__ */
movq %rdx, %rax
# A[0] * B
movq %rax, %rdx
xorq %r11, %r11
mulxq (%rsi), %r9, %r10
movq %r9, (%rdi)
# A[1] * B
mulxq 8(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 8(%rdi)
# A[2] * B
mulxq 16(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 16(%rdi)
# A[3] * B
mulxq 24(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 24(%rdi)
# A[4] * B
mulxq 32(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 32(%rdi)
# A[5] * B
mulxq 40(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 40(%rdi)
# A[6] * B
mulxq 48(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 48(%rdi)
# A[7] * B
mulxq 56(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 56(%rdi)
# A[8] * B
mulxq 64(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 64(%rdi)
# A[9] * B
mulxq 72(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 72(%rdi)
# A[10] * B
mulxq 80(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 80(%rdi)
# A[11] * B
mulxq 88(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 88(%rdi)
# A[12] * B
mulxq 96(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 96(%rdi)
# A[13] * B
mulxq 104(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
movq %r10, 104(%rdi)
# A[14] * B
mulxq 112(%rsi), %rcx, %r8
movq %r11, %r10
adcxq %rcx, %r9
adoxq %r8, %r10
movq %r9, 112(%rdi)
# A[15] * B
mulxq 120(%rsi), %rcx, %r8
movq %r11, %r9
adcxq %rcx, %r10
adoxq %r8, %r9
adcxq %r11, %r9
movq %r10, 120(%rdi)
movq %r9, 128(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mul_d_avx2_16,.-sp_1024_mul_d_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef _WIN64
/* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
*
* d1 The high order half of the number to divide.
* d0 The low order half of the number to divide.
* div The dividend.
* returns the result of the division.
*/
#ifndef __APPLE__
.text
.globl div_1024_word_asm_16
.type div_1024_word_asm_16,@function
.align 16
div_1024_word_asm_16:
#else
.section __TEXT,__text
.globl _div_1024_word_asm_16
.p2align 4
_div_1024_word_asm_16:
#endif /* __APPLE__ */
movq %rdx, %rcx
movq %rsi, %rax
movq %rdi, %rdx
divq %rcx
repz retq
#ifndef __APPLE__
.size div_1024_word_asm_16,.-div_1024_word_asm_16
#endif /* __APPLE__ */
#endif /* _WIN64 */
/* Compare a with b in constant time.
*
* a A single precision integer.
* b A single precision integer.
* return -ve, 0 or +ve if a is less than, equal to or greater than b
* respectively.
*/
#ifndef __APPLE__
.text
.globl sp_1024_cmp_16
.type sp_1024_cmp_16,@function
.align 16
sp_1024_cmp_16:
#else
.section __TEXT,__text
.globl _sp_1024_cmp_16
.p2align 4
_sp_1024_cmp_16:
#endif /* __APPLE__ */
xorq %rcx, %rcx
movq $-1, %rdx
movq $-1, %rax
movq $0x01, %r8
movq 120(%rdi), %r9
movq 120(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 112(%rdi), %r9
movq 112(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 104(%rdi), %r9
movq 104(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 96(%rdi), %r9
movq 96(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 88(%rdi), %r9
movq 88(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 80(%rdi), %r9
movq 80(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 72(%rdi), %r9
movq 72(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 64(%rdi), %r9
movq 64(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 56(%rdi), %r9
movq 56(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 48(%rdi), %r9
movq 48(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 40(%rdi), %r9
movq 40(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 32(%rdi), %r9
movq 32(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 24(%rdi), %r9
movq 24(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 16(%rdi), %r9
movq 16(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq 8(%rdi), %r9
movq 8(%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
movq (%rdi), %r9
movq (%rsi), %r10
andq %rdx, %r9
andq %rdx, %r10
subq %r10, %r9
cmova %r8, %rax
cmovc %rdx, %rax
cmovnz %rcx, %rdx
xorq %rdx, %rax
repz retq
#ifndef __APPLE__
.size sp_1024_cmp_16,.-sp_1024_cmp_16
#endif /* __APPLE__ */
/* Conditionally copy a into r using the mask m.
* m is -1 to copy and 0 when not.
*
* r A single precision number to copy over.
* a A single precision number to copy.
* m Mask value to apply.
*/
#ifndef __APPLE__
.text
.globl sp_1024_cond_copy_16
.type sp_1024_cond_copy_16,@function
.align 16
sp_1024_cond_copy_16:
#else
.section __TEXT,__text
.globl _sp_1024_cond_copy_16
.p2align 4
_sp_1024_cond_copy_16:
#endif /* __APPLE__ */
movq (%rdi), %rax
movq 8(%rdi), %rcx
movq 16(%rdi), %r8
movq 24(%rdi), %r9
xorq (%rsi), %rax
xorq 8(%rsi), %rcx
xorq 16(%rsi), %r8
xorq 24(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
xorq %rax, (%rdi)
xorq %rcx, 8(%rdi)
xorq %r8, 16(%rdi)
xorq %r9, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
movq 48(%rdi), %r8
movq 56(%rdi), %r9
xorq 32(%rsi), %rax
xorq 40(%rsi), %rcx
xorq 48(%rsi), %r8
xorq 56(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
xorq %rax, 32(%rdi)
xorq %rcx, 40(%rdi)
xorq %r8, 48(%rdi)
xorq %r9, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
movq 80(%rdi), %r8
movq 88(%rdi), %r9
xorq 64(%rsi), %rax
xorq 72(%rsi), %rcx
xorq 80(%rsi), %r8
xorq 88(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
xorq %rax, 64(%rdi)
xorq %rcx, 72(%rdi)
xorq %r8, 80(%rdi)
xorq %r9, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
movq 112(%rdi), %r8
movq 120(%rdi), %r9
xorq 96(%rsi), %rax
xorq 104(%rsi), %rcx
xorq 112(%rsi), %r8
xorq 120(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
xorq %rax, 96(%rdi)
xorq %rcx, 104(%rdi)
xorq %r8, 112(%rdi)
xorq %r9, 120(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_cond_copy_16,.-sp_1024_cond_copy_16
#endif /* __APPLE__ */
/* Reduce the number back to 1024 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_reduce_16
.type sp_1024_mont_reduce_16,@function
.align 16
sp_1024_mont_reduce_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_reduce_16
.p2align 4
_sp_1024_mont_reduce_16:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
movq %rdx, %rcx
xorq %r15, %r15
# i = 16
movq $16, %r8
movq (%rdi), %r13
movq 8(%rdi), %r14
L_1024_mont_reduce_16_loop:
# mu = a[i] * mp
movq %r13, %r11
imulq %rcx, %r11
# a[i+0] += m[0] * mu
movq %r11, %rax
xorq %r10, %r10
mulq (%rsi)
addq %rax, %r13
adcq %rdx, %r10
# a[i+1] += m[1] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 8(%rsi)
movq %r14, %r13
addq %rax, %r13
adcq %rdx, %r9
addq %r10, %r13
adcq $0x00, %r9
# a[i+2] += m[2] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 16(%rsi)
movq 16(%rdi), %r14
addq %rax, %r14
adcq %rdx, %r10
addq %r9, %r14
adcq $0x00, %r10
# a[i+3] += m[3] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 24(%rsi)
movq 24(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 24(%rdi)
adcq $0x00, %r9
# a[i+4] += m[4] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 32(%rsi)
movq 32(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 32(%rdi)
adcq $0x00, %r10
# a[i+5] += m[5] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 40(%rsi)
movq 40(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 40(%rdi)
adcq $0x00, %r9
# a[i+6] += m[6] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 48(%rsi)
movq 48(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 48(%rdi)
adcq $0x00, %r10
# a[i+7] += m[7] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 56(%rsi)
movq 56(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 56(%rdi)
adcq $0x00, %r9
# a[i+8] += m[8] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 64(%rsi)
movq 64(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 64(%rdi)
adcq $0x00, %r10
# a[i+9] += m[9] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 72(%rsi)
movq 72(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 72(%rdi)
adcq $0x00, %r9
# a[i+10] += m[10] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 80(%rsi)
movq 80(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 80(%rdi)
adcq $0x00, %r10
# a[i+11] += m[11] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 88(%rsi)
movq 88(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 88(%rdi)
adcq $0x00, %r9
# a[i+12] += m[12] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 96(%rsi)
movq 96(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 96(%rdi)
adcq $0x00, %r10
# a[i+13] += m[13] * mu
movq %r11, %rax
xorq %r9, %r9
mulq 104(%rsi)
movq 104(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r9
addq %r10, %r12
movq %r12, 104(%rdi)
adcq $0x00, %r9
# a[i+14] += m[14] * mu
movq %r11, %rax
xorq %r10, %r10
mulq 112(%rsi)
movq 112(%rdi), %r12
addq %rax, %r12
adcq %rdx, %r10
addq %r9, %r12
movq %r12, 112(%rdi)
adcq $0x00, %r10
# a[i+15] += m[15] * mu
movq %r11, %rax
mulq 120(%rsi)
movq 120(%rdi), %r12
addq %rax, %r10
adcq %r15, %rdx
movq $0x00, %r15
adcq $0x00, %r15
addq %r10, %r12
movq %r12, 120(%rdi)
adcq %rdx, 128(%rdi)
adcq $0x00, %r15
# i -= 1
addq $8, %rdi
decq %r8
jnz L_1024_mont_reduce_16_loop
movq 120(%rdi), %r12
movq %r13, (%rdi)
subq 120(%rsi), %r12
movq %r14, 8(%rdi)
sbbq %r12, %r12
negq %r15
notq %r12
orq %r12, %r15
#ifdef _WIN64
movq %rsi, %rdx
movq %r15, %rcx
#else
movq %r15, %rcx
movq %rsi, %rdx
#endif /* _WIN64 */
movq %rdi, %rsi
movq %rdi, %rdi
subq $0x80, %rdi
#ifndef __APPLE__
callq sp_1024_cond_sub_16@plt
#else
callq _sp_1024_cond_sub_16
#endif /* __APPLE__ */
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_1024_mont_reduce_16,.-sp_1024_mont_reduce_16
#endif /* __APPLE__ */
/* Add two Montgomery form numbers (r = a + b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_add_16
.type sp_1024_mont_add_16,@function
.align 16
sp_1024_mont_add_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_add_16
.p2align 4
_sp_1024_mont_add_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rsi), %rax
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
addq (%rdx), %rax
movq $0x00, %r11
adcq 8(%rdx), %r8
adcq 16(%rdx), %r9
adcq 24(%rdx), %r10
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %r8
movq 48(%rsi), %r9
movq 56(%rsi), %r10
adcq 32(%rdx), %rax
adcq 40(%rdx), %r8
adcq 48(%rdx), %r9
adcq 56(%rdx), %r10
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq %r10, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %r8
movq 80(%rsi), %r9
movq 88(%rsi), %r10
adcq 64(%rdx), %rax
adcq 72(%rdx), %r8
adcq 80(%rdx), %r9
adcq 88(%rdx), %r10
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %r8
movq 112(%rsi), %r9
movq 120(%rsi), %r10
adcq 96(%rdx), %rax
adcq 104(%rdx), %r8
adcq 112(%rdx), %r9
adcq 120(%rdx), %r10
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq %r9, 112(%rdi)
movq %r10, 120(%rdi)
sbbq $0x00, %r11
subq 120(%rcx), %r10
sbbq %r10, %r10
notq %r10
orq %r10, %r11
movq (%rcx), %r9
movq 8(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, (%rsp)
movq %r10, 8(%rsp)
movq 16(%rcx), %r9
movq 24(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 16(%rsp)
movq %r10, 24(%rsp)
movq 32(%rcx), %r9
movq 40(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 32(%rsp)
movq %r10, 40(%rsp)
movq 48(%rcx), %r9
movq 56(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 48(%rsp)
movq %r10, 56(%rsp)
movq 64(%rcx), %r9
movq 72(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 64(%rsp)
movq %r10, 72(%rsp)
movq 80(%rcx), %r9
movq 88(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 80(%rsp)
movq %r10, 88(%rsp)
movq 96(%rcx), %r9
movq 104(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 96(%rsp)
movq %r10, 104(%rsp)
movq 112(%rcx), %r9
movq 120(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 112(%rsp)
movq %r10, 120(%rsp)
movq (%rdi), %rax
movq 8(%rdi), %r8
subq (%rsp), %rax
sbbq 8(%rsp), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 16(%rdi), %rax
movq 24(%rdi), %r8
sbbq 16(%rsp), %rax
sbbq 24(%rsp), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %r8
sbbq 32(%rsp), %rax
sbbq 40(%rsp), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 48(%rdi), %rax
movq 56(%rdi), %r8
sbbq 48(%rsp), %rax
sbbq 56(%rsp), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %r8
sbbq 64(%rsp), %rax
sbbq 72(%rsp), %r8
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rdi), %rax
movq 88(%rdi), %r8
sbbq 80(%rsp), %rax
sbbq 88(%rsp), %r8
movq %rax, 80(%rdi)
movq %r8, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %r8
sbbq 96(%rsp), %rax
sbbq 104(%rsp), %r8
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq 112(%rdi), %rax
movq 120(%rdi), %r8
sbbq 112(%rsp), %rax
sbbq 120(%rsp), %r8
movq %rax, 112(%rdi)
movq %r8, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_mont_add_16,.-sp_1024_mont_add_16
#endif /* __APPLE__ */
/* Double a Montgomery form number (r = a + a % m).
*
* r Result of addition.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_dbl_16
.type sp_1024_mont_dbl_16,@function
.align 16
sp_1024_mont_dbl_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_dbl_16
.p2align 4
_sp_1024_mont_dbl_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
addq (%rsi), %rax
movq $0x00, %r10
adcq 8(%rsi), %rcx
adcq 16(%rsi), %r8
adcq 24(%rsi), %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %rcx
movq 48(%rsi), %r8
movq 56(%rsi), %r9
adcq 32(%rsi), %rax
adcq 40(%rsi), %rcx
adcq 48(%rsi), %r8
adcq 56(%rsi), %r9
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %rcx
movq 80(%rsi), %r8
movq 88(%rsi), %r9
adcq 64(%rsi), %rax
adcq 72(%rsi), %rcx
adcq 80(%rsi), %r8
adcq 88(%rsi), %r9
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %rcx
movq 112(%rsi), %r8
movq 120(%rsi), %r9
adcq 96(%rsi), %rax
adcq 104(%rsi), %rcx
adcq 112(%rsi), %r8
adcq 120(%rsi), %r9
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq $0x00, %r10
subq 120(%rdx), %r9
sbbq %r9, %r9
notq %r9
orq %r9, %r10
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq (%rdi), %rax
movq 8(%rdi), %rcx
subq (%rsp), %rax
sbbq 8(%rsp), %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rdi), %rax
movq 24(%rdi), %rcx
sbbq 16(%rsp), %rax
sbbq 24(%rsp), %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
sbbq 32(%rsp), %rax
sbbq 40(%rsp), %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rdi), %rax
movq 56(%rdi), %rcx
sbbq 48(%rsp), %rax
sbbq 56(%rsp), %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
sbbq 64(%rsp), %rax
sbbq 72(%rsp), %rcx
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq 80(%rdi), %rax
movq 88(%rdi), %rcx
sbbq 80(%rsp), %rax
sbbq 88(%rsp), %rcx
movq %rax, 80(%rdi)
movq %rcx, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
sbbq 96(%rsp), %rax
sbbq 104(%rsp), %rcx
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq 112(%rdi), %rax
movq 120(%rdi), %rcx
sbbq 112(%rsp), %rax
sbbq 120(%rsp), %rcx
movq %rax, 112(%rdi)
movq %rcx, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_mont_dbl_16,.-sp_1024_mont_dbl_16
#endif /* __APPLE__ */
/* Triple a Montgomery form number (r = a + a + a % m).
*
* r Result of addition.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_tpl_16
.type sp_1024_mont_tpl_16,@function
.align 16
sp_1024_mont_tpl_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_tpl_16
.p2align 4
_sp_1024_mont_tpl_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
addq (%rsi), %rax
movq $0x00, %r10
adcq 8(%rsi), %rcx
adcq 16(%rsi), %r8
adcq 24(%rsi), %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %rcx
movq 48(%rsi), %r8
movq 56(%rsi), %r9
adcq 32(%rsi), %rax
adcq 40(%rsi), %rcx
adcq 48(%rsi), %r8
adcq 56(%rsi), %r9
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %rcx
movq 80(%rsi), %r8
movq 88(%rsi), %r9
adcq 64(%rsi), %rax
adcq 72(%rsi), %rcx
adcq 80(%rsi), %r8
adcq 88(%rsi), %r9
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %rcx
movq 112(%rsi), %r8
movq 120(%rsi), %r9
adcq 96(%rsi), %rax
adcq 104(%rsi), %rcx
adcq 112(%rsi), %r8
adcq 120(%rsi), %r9
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq $0x00, %r10
subq 120(%rdx), %r9
sbbq %r9, %r9
notq %r9
orq %r9, %r10
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq (%rdi), %rax
movq 8(%rdi), %rcx
subq (%rsp), %rax
sbbq 8(%rsp), %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rdi), %rax
movq 24(%rdi), %rcx
sbbq 16(%rsp), %rax
sbbq 24(%rsp), %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
sbbq 32(%rsp), %rax
sbbq 40(%rsp), %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rdi), %rax
movq 56(%rdi), %rcx
sbbq 48(%rsp), %rax
sbbq 56(%rsp), %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
sbbq 64(%rsp), %rax
sbbq 72(%rsp), %rcx
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq 80(%rdi), %rax
movq 88(%rdi), %rcx
sbbq 80(%rsp), %rax
sbbq 88(%rsp), %rcx
movq %rax, 80(%rdi)
movq %rcx, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
sbbq 96(%rsp), %rax
sbbq 104(%rsp), %rcx
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq 112(%rdi), %rax
movq 120(%rdi), %rcx
sbbq 112(%rsp), %rax
sbbq 120(%rsp), %rcx
movq %rax, 112(%rdi)
movq %rcx, 120(%rdi)
movq (%rdi), %rax
movq 8(%rdi), %rcx
movq 16(%rdi), %r8
movq 24(%rdi), %r9
addq (%rsi), %rax
movq $0x00, %r10
adcq 8(%rsi), %rcx
adcq 16(%rsi), %r8
adcq 24(%rsi), %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
movq 48(%rdi), %r8
movq 56(%rdi), %r9
adcq 32(%rsi), %rax
adcq 40(%rsi), %rcx
adcq 48(%rsi), %r8
adcq 56(%rsi), %r9
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
movq 80(%rdi), %r8
movq 88(%rdi), %r9
adcq 64(%rsi), %rax
adcq 72(%rsi), %rcx
adcq 80(%rsi), %r8
adcq 88(%rsi), %r9
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
movq 112(%rdi), %r8
movq 120(%rdi), %r9
adcq 96(%rsi), %rax
adcq 104(%rsi), %rcx
adcq 112(%rsi), %r8
adcq 120(%rsi), %r9
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq $0x00, %r10
subq 120(%rdx), %r9
sbbq %r9, %r9
notq %r9
orq %r9, %r10
movq (%rdx), %r8
movq 8(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, (%rsp)
movq %r9, 8(%rsp)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 16(%rsp)
movq %r9, 24(%rsp)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 32(%rsp)
movq %r9, 40(%rsp)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 48(%rsp)
movq %r9, 56(%rsp)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 64(%rsp)
movq %r9, 72(%rsp)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 80(%rsp)
movq %r9, 88(%rsp)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 96(%rsp)
movq %r9, 104(%rsp)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
andq %r10, %r8
andq %r10, %r9
movq %r8, 112(%rsp)
movq %r9, 120(%rsp)
movq (%rdi), %rax
movq 8(%rdi), %rcx
subq (%rsp), %rax
sbbq 8(%rsp), %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rdi), %rax
movq 24(%rdi), %rcx
sbbq 16(%rsp), %rax
sbbq 24(%rsp), %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
sbbq 32(%rsp), %rax
sbbq 40(%rsp), %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rdi), %rax
movq 56(%rdi), %rcx
sbbq 48(%rsp), %rax
sbbq 56(%rsp), %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
sbbq 64(%rsp), %rax
sbbq 72(%rsp), %rcx
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq 80(%rdi), %rax
movq 88(%rdi), %rcx
sbbq 80(%rsp), %rax
sbbq 88(%rsp), %rcx
movq %rax, 80(%rdi)
movq %rcx, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
sbbq 96(%rsp), %rax
sbbq 104(%rsp), %rcx
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq 112(%rdi), %rax
movq 120(%rdi), %rcx
sbbq 112(%rsp), %rax
sbbq 120(%rsp), %rcx
movq %rax, 112(%rdi)
movq %rcx, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_mont_tpl_16,.-sp_1024_mont_tpl_16
#endif /* __APPLE__ */
/* Subtract two Montgomery form numbers (r = a - b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_sub_16
.type sp_1024_mont_sub_16,@function
.align 16
sp_1024_mont_sub_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_sub_16
.p2align 4
_sp_1024_mont_sub_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rsi), %rax
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
subq (%rdx), %rax
movq $0x00, %r11
sbbq 8(%rdx), %r8
sbbq 16(%rdx), %r9
sbbq 24(%rdx), %r10
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %r8
movq 48(%rsi), %r9
movq 56(%rsi), %r10
sbbq 32(%rdx), %rax
sbbq 40(%rdx), %r8
sbbq 48(%rdx), %r9
sbbq 56(%rdx), %r10
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq %r10, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %r8
movq 80(%rsi), %r9
movq 88(%rsi), %r10
sbbq 64(%rdx), %rax
sbbq 72(%rdx), %r8
sbbq 80(%rdx), %r9
sbbq 88(%rdx), %r10
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %r8
movq 112(%rsi), %r9
movq 120(%rsi), %r10
sbbq 96(%rdx), %rax
sbbq 104(%rdx), %r8
sbbq 112(%rdx), %r9
sbbq 120(%rdx), %r10
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq %r9, 112(%rdi)
movq %r10, 120(%rdi)
sbbq $0x00, %r11
movq (%rcx), %r9
movq 8(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, (%rsp)
movq %r10, 8(%rsp)
movq 16(%rcx), %r9
movq 24(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 16(%rsp)
movq %r10, 24(%rsp)
movq 32(%rcx), %r9
movq 40(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 32(%rsp)
movq %r10, 40(%rsp)
movq 48(%rcx), %r9
movq 56(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 48(%rsp)
movq %r10, 56(%rsp)
movq 64(%rcx), %r9
movq 72(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 64(%rsp)
movq %r10, 72(%rsp)
movq 80(%rcx), %r9
movq 88(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 80(%rsp)
movq %r10, 88(%rsp)
movq 96(%rcx), %r9
movq 104(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 96(%rsp)
movq %r10, 104(%rsp)
movq 112(%rcx), %r9
movq 120(%rcx), %r10
andq %r11, %r9
andq %r11, %r10
movq %r9, 112(%rsp)
movq %r10, 120(%rsp)
movq (%rdi), %rax
movq 8(%rdi), %r8
addq (%rsp), %rax
adcq 8(%rsp), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 16(%rdi), %rax
movq 24(%rdi), %r8
adcq 16(%rsp), %rax
adcq 24(%rsp), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %r8
adcq 32(%rsp), %rax
adcq 40(%rsp), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 48(%rdi), %rax
movq 56(%rdi), %r8
adcq 48(%rsp), %rax
adcq 56(%rsp), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %r8
adcq 64(%rsp), %rax
adcq 72(%rsp), %r8
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rdi), %rax
movq 88(%rdi), %r8
adcq 80(%rsp), %rax
adcq 88(%rsp), %r8
movq %rax, 80(%rdi)
movq %r8, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %r8
adcq 96(%rsp), %rax
adcq 104(%rsp), %r8
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq 112(%rdi), %rax
movq 120(%rdi), %r8
adcq 112(%rsp), %rax
adcq 120(%rsp), %r8
movq %rax, 112(%rdi)
movq %r8, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_mont_sub_16,.-sp_1024_mont_sub_16
#endif /* __APPLE__ */
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_div2_16
.type sp_1024_mont_div2_16,@function
.align 16
sp_1024_mont_div2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_div2_16
.p2align 4
_sp_1024_mont_div2_16:
#endif /* __APPLE__ */
subq $0x80, %rsp
movq (%rsi), %r11
xorq %r10, %r10
movq %r11, %rax
andq $0x01, %r11
negq %r11
movq (%rdx), %r8
andq %r11, %r8
movq %r8, (%rsp)
movq 8(%rdx), %r8
andq %r11, %r8
movq %r8, 8(%rsp)
movq 16(%rdx), %r8
andq %r11, %r8
movq %r8, 16(%rsp)
movq 24(%rdx), %r8
andq %r11, %r8
movq %r8, 24(%rsp)
movq 32(%rdx), %r8
andq %r11, %r8
movq %r8, 32(%rsp)
movq 40(%rdx), %r8
andq %r11, %r8
movq %r8, 40(%rsp)
movq 48(%rdx), %r8
andq %r11, %r8
movq %r8, 48(%rsp)
movq 56(%rdx), %r8
andq %r11, %r8
movq %r8, 56(%rsp)
movq 64(%rdx), %r8
andq %r11, %r8
movq %r8, 64(%rsp)
movq 72(%rdx), %r8
andq %r11, %r8
movq %r8, 72(%rsp)
movq 80(%rdx), %r8
andq %r11, %r8
movq %r8, 80(%rsp)
movq 88(%rdx), %r8
andq %r11, %r8
movq %r8, 88(%rsp)
movq 96(%rdx), %r8
andq %r11, %r8
movq %r8, 96(%rsp)
movq 104(%rdx), %r8
andq %r11, %r8
movq %r8, 104(%rsp)
movq 112(%rdx), %r8
andq %r11, %r8
movq %r8, 112(%rsp)
movq 120(%rdx), %r8
andq %r11, %r8
movq %r8, 120(%rsp)
addq %rax, (%rsp)
movq 8(%rsi), %rax
adcq %rax, 8(%rsp)
movq 16(%rsi), %rax
adcq %rax, 16(%rsp)
movq 24(%rsi), %rax
adcq %rax, 24(%rsp)
movq 32(%rsi), %rax
adcq %rax, 32(%rsp)
movq 40(%rsi), %rax
adcq %rax, 40(%rsp)
movq 48(%rsi), %rax
adcq %rax, 48(%rsp)
movq 56(%rsi), %rax
adcq %rax, 56(%rsp)
movq 64(%rsi), %rax
adcq %rax, 64(%rsp)
movq 72(%rsi), %rax
adcq %rax, 72(%rsp)
movq 80(%rsi), %rax
adcq %rax, 80(%rsp)
movq 88(%rsi), %rax
adcq %rax, 88(%rsp)
movq 96(%rsi), %rax
adcq %rax, 96(%rsp)
movq 104(%rsi), %rax
adcq %rax, 104(%rsp)
movq 112(%rsi), %rax
adcq %rax, 112(%rsp)
movq 120(%rsi), %rax
adcq %rax, 120(%rsp)
adcq $0x00, %r10
movq (%rsp), %rax
movq 8(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, (%rdi)
movq 16(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 8(%rdi)
movq 24(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 16(%rdi)
movq 32(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 24(%rdi)
movq 40(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 32(%rdi)
movq 48(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 40(%rdi)
movq 56(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 48(%rdi)
movq 64(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 56(%rdi)
movq 72(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 64(%rdi)
movq 80(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 72(%rdi)
movq 88(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 80(%rdi)
movq 96(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 88(%rdi)
movq 104(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 96(%rdi)
movq 112(%rsp), %rax
shrdq $0x01, %rax, %rcx
movq %rcx, 104(%rdi)
movq 120(%rsp), %rcx
shrdq $0x01, %rcx, %rax
movq %rax, 112(%rdi)
shrdq $0x01, %r10, %rcx
movq %rcx, 120(%rdi)
addq $0x80, %rsp
repz retq
#ifndef __APPLE__
.size sp_1024_mont_div2_16,.-sp_1024_mont_div2_16
#endif /* __APPLE__ */
#ifdef HAVE_INTEL_AVX2
/* Reduce the number back to 1024 bits using Montgomery reduction.
*
* a A single precision number to reduce in place.
* m The single precision number representing the modulus.
* mp The digit representing the negative inverse of m mod 2^n.
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_reduce_avx2_16
.type sp_1024_mont_reduce_avx2_16,@function
.align 16
sp_1024_mont_reduce_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_reduce_avx2_16
.p2align 4
_sp_1024_mont_reduce_avx2_16:
#endif /* __APPLE__ */
pushq %r12
pushq %r13
pushq %r14
pushq %r15
pushq %rbx
pushq %rbp
movq %rdx, %r8
xorq %rbp, %rbp
# i = 16
movq $16, %r9
movq (%rdi), %r12
movq 8(%rdi), %r13
movq 16(%rdi), %r14
movq 24(%rdi), %r15
addq $0x40, %rdi
xorq %rbp, %rbp
L_1024_mont_reduce_avx2_16_loop:
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -32(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -24(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -24(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq -8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -16(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq (%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -8(%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 8(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, (%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq 16(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 8(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq 24(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 16(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq 32(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 24(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq 40(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 32(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq 48(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 40(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq 56(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 48(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq 64(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 56(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 64(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# mu = a[i] * mp
movq %r12, %rdx
movq %r12, %r10
imulq %r8, %rdx
xorq %rbx, %rbx
# a[i+0] += m[0] * mu
mulxq (%rsi), %rax, %rcx
movq %r13, %r12
adcxq %rax, %r10
adoxq %rcx, %r12
# a[i+1] += m[1] * mu
mulxq 8(%rsi), %rax, %rcx
movq %r14, %r13
adcxq %rax, %r12
adoxq %rcx, %r13
# a[i+2] += m[2] * mu
mulxq 16(%rsi), %rax, %rcx
movq %r15, %r14
adcxq %rax, %r13
adoxq %rcx, %r14
# a[i+3] += m[3] * mu
mulxq 24(%rsi), %rax, %rcx
movq -24(%rdi), %r15
adcxq %rax, %r14
adoxq %rcx, %r15
# a[i+4] += m[4] * mu
mulxq 32(%rsi), %rax, %rcx
movq -16(%rdi), %r11
adcxq %rax, %r15
adoxq %rcx, %r11
# a[i+5] += m[5] * mu
mulxq 40(%rsi), %rax, %rcx
movq -8(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, -16(%rdi)
# a[i+6] += m[6] * mu
mulxq 48(%rsi), %rax, %rcx
movq (%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, -8(%rdi)
# a[i+7] += m[7] * mu
mulxq 56(%rsi), %rax, %rcx
movq 8(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, (%rdi)
# a[i+8] += m[8] * mu
mulxq 64(%rsi), %rax, %rcx
movq 16(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 8(%rdi)
# a[i+9] += m[9] * mu
mulxq 72(%rsi), %rax, %rcx
movq 24(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 16(%rdi)
# a[i+10] += m[10] * mu
mulxq 80(%rsi), %rax, %rcx
movq 32(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 24(%rdi)
# a[i+11] += m[11] * mu
mulxq 88(%rsi), %rax, %rcx
movq 40(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 32(%rdi)
# a[i+12] += m[12] * mu
mulxq 96(%rsi), %rax, %rcx
movq 48(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 40(%rdi)
# a[i+13] += m[13] * mu
mulxq 104(%rsi), %rax, %rcx
movq 56(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 48(%rdi)
# a[i+14] += m[14] * mu
mulxq 112(%rsi), %rax, %rcx
movq 64(%rdi), %r11
adcxq %rax, %r10
adoxq %rcx, %r11
movq %r10, 56(%rdi)
# a[i+15] += m[15] * mu
mulxq 120(%rsi), %rax, %rcx
movq 72(%rdi), %r10
adcxq %rax, %r11
adoxq %rcx, %r10
movq %r11, 64(%rdi)
adcxq %rbp, %r10
movq %rbx, %rbp
movq %r10, 72(%rdi)
adoxq %rbx, %rbp
adcxq %rbx, %rbp
# a += 2
addq $16, %rdi
# i -= 2
subq $2, %r9
jnz L_1024_mont_reduce_avx2_16_loop
subq $0x40, %rdi
subq 120(%rsi), %r10
movq %rdi, %r8
sbbq %r10, %r10
negq %rbp
notq %r10
orq %r10, %rbp
subq $0x80, %rdi
movq (%rsi), %rcx
movq %r12, %rdx
pextq %rbp, %rcx, %rcx
subq %rcx, %rdx
movq 8(%rsi), %rcx
movq %r13, %rax
pextq %rbp, %rcx, %rcx
movq %rdx, (%rdi)
sbbq %rcx, %rax
movq 16(%rsi), %rdx
movq %r14, %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 8(%rdi)
sbbq %rdx, %rcx
movq 24(%rsi), %rax
movq %r15, %rdx
pextq %rbp, %rax, %rax
movq %rcx, 16(%rdi)
sbbq %rax, %rdx
movq 32(%rsi), %rcx
movq 32(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 24(%rdi)
sbbq %rcx, %rax
movq 40(%rsi), %rdx
movq 40(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 32(%rdi)
sbbq %rdx, %rcx
movq 48(%rsi), %rax
movq 48(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 40(%rdi)
sbbq %rax, %rdx
movq 56(%rsi), %rcx
movq 56(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 48(%rdi)
sbbq %rcx, %rax
movq 64(%rsi), %rdx
movq 64(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 56(%rdi)
sbbq %rdx, %rcx
movq 72(%rsi), %rax
movq 72(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 64(%rdi)
sbbq %rax, %rdx
movq 80(%rsi), %rcx
movq 80(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 72(%rdi)
sbbq %rcx, %rax
movq 88(%rsi), %rdx
movq 88(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 80(%rdi)
sbbq %rdx, %rcx
movq 96(%rsi), %rax
movq 96(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 88(%rdi)
sbbq %rax, %rdx
movq 104(%rsi), %rcx
movq 104(%r8), %rax
pextq %rbp, %rcx, %rcx
movq %rdx, 96(%rdi)
sbbq %rcx, %rax
movq 112(%rsi), %rdx
movq 112(%r8), %rcx
pextq %rbp, %rdx, %rdx
movq %rax, 104(%rdi)
sbbq %rdx, %rcx
movq 120(%rsi), %rax
movq 120(%r8), %rdx
pextq %rbp, %rax, %rax
movq %rcx, 112(%rdi)
sbbq %rax, %rdx
movq %rdx, 120(%rdi)
popq %rbp
popq %rbx
popq %r15
popq %r14
popq %r13
popq %r12
repz retq
#ifndef __APPLE__
.size sp_1024_mont_reduce_avx2_16,.-sp_1024_mont_reduce_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Add two Montgomery form numbers (r = a + b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_add_avx2_16
.type sp_1024_mont_add_avx2_16,@function
.align 16
sp_1024_mont_add_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_add_avx2_16
.p2align 4
_sp_1024_mont_add_avx2_16:
#endif /* __APPLE__ */
movq (%rsi), %rax
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
addq (%rdx), %rax
movq $0x00, %r11
adcq 8(%rdx), %r8
adcq 16(%rdx), %r9
adcq 24(%rdx), %r10
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %r8
movq 48(%rsi), %r9
movq 56(%rsi), %r10
adcq 32(%rdx), %rax
adcq 40(%rdx), %r8
adcq 48(%rdx), %r9
adcq 56(%rdx), %r10
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq %r10, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %r8
movq 80(%rsi), %r9
movq 88(%rsi), %r10
adcq 64(%rdx), %rax
adcq 72(%rdx), %r8
adcq 80(%rdx), %r9
adcq 88(%rdx), %r10
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %r8
movq 112(%rsi), %r9
movq 120(%rsi), %r10
adcq 96(%rdx), %rax
adcq 104(%rdx), %r8
adcq 112(%rdx), %r9
adcq 120(%rdx), %r10
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq %r9, 112(%rdi)
movq %r10, 120(%rdi)
sbbq $0x00, %r11
subq 120(%rcx), %r10
sbbq %r10, %r10
notq %r10
orq %r10, %r11
movq (%rcx), %r9
movq 8(%rcx), %r10
movq (%rdi), %rax
movq 8(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
subq %r9, %rax
sbbq %r10, %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 16(%rcx), %r9
movq 24(%rcx), %r10
movq 16(%rdi), %rax
movq 24(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 32(%rcx), %r9
movq 40(%rcx), %r10
movq 32(%rdi), %rax
movq 40(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 48(%rcx), %r9
movq 56(%rcx), %r10
movq 48(%rdi), %rax
movq 56(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
movq 64(%rcx), %r9
movq 72(%rcx), %r10
movq 64(%rdi), %rax
movq 72(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rcx), %r9
movq 88(%rcx), %r10
movq 80(%rdi), %rax
movq 88(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 80(%rdi)
movq %r8, 88(%rdi)
movq 96(%rcx), %r9
movq 104(%rcx), %r10
movq 96(%rdi), %rax
movq 104(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq 112(%rcx), %r9
movq 120(%rcx), %r10
movq 112(%rdi), %rax
movq 120(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
sbbq %r9, %rax
sbbq %r10, %r8
movq %rax, 112(%rdi)
movq %r8, 120(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mont_add_avx2_16,.-sp_1024_mont_add_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Double a Montgomery form number (r = a + a % m).
*
* r Result of addition.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_dbl_avx2_16
.type sp_1024_mont_dbl_avx2_16,@function
.align 16
sp_1024_mont_dbl_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_dbl_avx2_16
.p2align 4
_sp_1024_mont_dbl_avx2_16:
#endif /* __APPLE__ */
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
addq (%rsi), %rax
movq $0x00, %r10
adcq 8(%rsi), %rcx
adcq 16(%rsi), %r8
adcq 24(%rsi), %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %rcx
movq 48(%rsi), %r8
movq 56(%rsi), %r9
adcq 32(%rsi), %rax
adcq 40(%rsi), %rcx
adcq 48(%rsi), %r8
adcq 56(%rsi), %r9
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %rcx
movq 80(%rsi), %r8
movq 88(%rsi), %r9
adcq 64(%rsi), %rax
adcq 72(%rsi), %rcx
adcq 80(%rsi), %r8
adcq 88(%rsi), %r9
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %rcx
movq 112(%rsi), %r8
movq 120(%rsi), %r9
adcq 96(%rsi), %rax
adcq 104(%rsi), %rcx
adcq 112(%rsi), %r8
adcq 120(%rsi), %r9
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq $0x00, %r10
subq 120(%rdx), %r9
sbbq %r9, %r9
notq %r9
orq %r9, %r10
movq (%rdx), %r8
movq 8(%rdx), %r9
movq (%rdi), %rax
movq 8(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
subq %r8, %rax
sbbq %r9, %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
movq 16(%rdi), %rax
movq 24(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
movq 48(%rdi), %rax
movq 56(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
movq 80(%rdi), %rax
movq 88(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 80(%rdi)
movq %rcx, 88(%rdi)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
movq 112(%rdi), %rax
movq 120(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 112(%rdi)
movq %rcx, 120(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mont_dbl_avx2_16,.-sp_1024_mont_dbl_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Triple a Montgomery form number (r = a + a + a % m).
*
* r Result of addition.
* a Number to double in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_tpl_avx2_16
.type sp_1024_mont_tpl_avx2_16,@function
.align 16
sp_1024_mont_tpl_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_tpl_avx2_16
.p2align 4
_sp_1024_mont_tpl_avx2_16:
#endif /* __APPLE__ */
movq (%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
addq (%rsi), %rax
movq $0x00, %r10
adcq 8(%rsi), %rcx
adcq 16(%rsi), %r8
adcq 24(%rsi), %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %rcx
movq 48(%rsi), %r8
movq 56(%rsi), %r9
adcq 32(%rsi), %rax
adcq 40(%rsi), %rcx
adcq 48(%rsi), %r8
adcq 56(%rsi), %r9
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %rcx
movq 80(%rsi), %r8
movq 88(%rsi), %r9
adcq 64(%rsi), %rax
adcq 72(%rsi), %rcx
adcq 80(%rsi), %r8
adcq 88(%rsi), %r9
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %rcx
movq 112(%rsi), %r8
movq 120(%rsi), %r9
adcq 96(%rsi), %rax
adcq 104(%rsi), %rcx
adcq 112(%rsi), %r8
adcq 120(%rsi), %r9
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq $0x00, %r10
subq 120(%rdx), %r9
sbbq %r9, %r9
notq %r9
orq %r9, %r10
movq (%rdx), %r8
movq 8(%rdx), %r9
movq (%rdi), %rax
movq 8(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
subq %r8, %rax
sbbq %r9, %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
movq 16(%rdi), %rax
movq 24(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
movq 48(%rdi), %rax
movq 56(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
movq 80(%rdi), %rax
movq 88(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 80(%rdi)
movq %rcx, 88(%rdi)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
movq 112(%rdi), %rax
movq 120(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 112(%rdi)
movq %rcx, 120(%rdi)
movq (%rdi), %rax
movq 8(%rdi), %rcx
movq 16(%rdi), %r8
movq 24(%rdi), %r9
addq (%rsi), %rax
movq $0x00, %r10
adcq 8(%rsi), %rcx
adcq 16(%rsi), %r8
adcq 24(%rsi), %r9
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
movq 48(%rdi), %r8
movq 56(%rdi), %r9
adcq 32(%rsi), %rax
adcq 40(%rsi), %rcx
adcq 48(%rsi), %r8
adcq 56(%rsi), %r9
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
movq 80(%rdi), %r8
movq 88(%rdi), %r9
adcq 64(%rsi), %rax
adcq 72(%rsi), %rcx
adcq 80(%rsi), %r8
adcq 88(%rsi), %r9
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
movq 112(%rdi), %r8
movq 120(%rdi), %r9
adcq 96(%rsi), %rax
adcq 104(%rsi), %rcx
adcq 112(%rsi), %r8
adcq 120(%rsi), %r9
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
sbbq $0x00, %r10
subq 120(%rdx), %r9
sbbq %r9, %r9
notq %r9
orq %r9, %r10
movq (%rdx), %r8
movq 8(%rdx), %r9
movq (%rdi), %rax
movq 8(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
subq %r8, %rax
sbbq %r9, %rcx
movq %rax, (%rdi)
movq %rcx, 8(%rdi)
movq 16(%rdx), %r8
movq 24(%rdx), %r9
movq 16(%rdi), %rax
movq 24(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 16(%rdi)
movq %rcx, 24(%rdi)
movq 32(%rdx), %r8
movq 40(%rdx), %r9
movq 32(%rdi), %rax
movq 40(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 32(%rdi)
movq %rcx, 40(%rdi)
movq 48(%rdx), %r8
movq 56(%rdx), %r9
movq 48(%rdi), %rax
movq 56(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 48(%rdi)
movq %rcx, 56(%rdi)
movq 64(%rdx), %r8
movq 72(%rdx), %r9
movq 64(%rdi), %rax
movq 72(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 64(%rdi)
movq %rcx, 72(%rdi)
movq 80(%rdx), %r8
movq 88(%rdx), %r9
movq 80(%rdi), %rax
movq 88(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 80(%rdi)
movq %rcx, 88(%rdi)
movq 96(%rdx), %r8
movq 104(%rdx), %r9
movq 96(%rdi), %rax
movq 104(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 96(%rdi)
movq %rcx, 104(%rdi)
movq 112(%rdx), %r8
movq 120(%rdx), %r9
movq 112(%rdi), %rax
movq 120(%rdi), %rcx
pextq %r10, %r8, %r8
pextq %r10, %r9, %r9
sbbq %r8, %rax
sbbq %r9, %rcx
movq %rax, 112(%rdi)
movq %rcx, 120(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mont_tpl_avx2_16,.-sp_1024_mont_tpl_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Subtract two Montgomery form numbers (r = a - b % m).
*
* r Result of addition.
* a First number to add in Montgomery form.
* b Second number to add in Montgomery form.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_sub_avx2_16
.type sp_1024_mont_sub_avx2_16,@function
.align 16
sp_1024_mont_sub_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_sub_avx2_16
.p2align 4
_sp_1024_mont_sub_avx2_16:
#endif /* __APPLE__ */
movq (%rsi), %rax
movq 8(%rsi), %r8
movq 16(%rsi), %r9
movq 24(%rsi), %r10
subq (%rdx), %rax
movq $0x00, %r11
sbbq 8(%rdx), %r8
sbbq 16(%rdx), %r9
sbbq 24(%rdx), %r10
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq %r9, 16(%rdi)
movq %r10, 24(%rdi)
movq 32(%rsi), %rax
movq 40(%rsi), %r8
movq 48(%rsi), %r9
movq 56(%rsi), %r10
sbbq 32(%rdx), %rax
sbbq 40(%rdx), %r8
sbbq 48(%rdx), %r9
sbbq 56(%rdx), %r10
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq %r9, 48(%rdi)
movq %r10, 56(%rdi)
movq 64(%rsi), %rax
movq 72(%rsi), %r8
movq 80(%rsi), %r9
movq 88(%rsi), %r10
sbbq 64(%rdx), %rax
sbbq 72(%rdx), %r8
sbbq 80(%rdx), %r9
sbbq 88(%rdx), %r10
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq %r9, 80(%rdi)
movq %r10, 88(%rdi)
movq 96(%rsi), %rax
movq 104(%rsi), %r8
movq 112(%rsi), %r9
movq 120(%rsi), %r10
sbbq 96(%rdx), %rax
sbbq 104(%rdx), %r8
sbbq 112(%rdx), %r9
sbbq 120(%rdx), %r10
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq %r9, 112(%rdi)
movq %r10, 120(%rdi)
sbbq $0x00, %r11
movq (%rcx), %r9
movq 8(%rcx), %r10
movq (%rdi), %rax
movq 8(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
addq %r9, %rax
adcq %r10, %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 16(%rcx), %r9
movq 24(%rcx), %r10
movq 16(%rdi), %rax
movq 24(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 32(%rcx), %r9
movq 40(%rcx), %r10
movq 32(%rdi), %rax
movq 40(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 48(%rcx), %r9
movq 56(%rcx), %r10
movq 48(%rdi), %rax
movq 56(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
movq 64(%rcx), %r9
movq 72(%rcx), %r10
movq 64(%rdi), %rax
movq 72(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 64(%rdi)
movq %r8, 72(%rdi)
movq 80(%rcx), %r9
movq 88(%rcx), %r10
movq 80(%rdi), %rax
movq 88(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 80(%rdi)
movq %r8, 88(%rdi)
movq 96(%rcx), %r9
movq 104(%rcx), %r10
movq 96(%rdi), %rax
movq 104(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 96(%rdi)
movq %r8, 104(%rdi)
movq 112(%rcx), %r9
movq 120(%rcx), %r10
movq 112(%rdi), %rax
movq 120(%rdi), %r8
pextq %r11, %r9, %r9
pextq %r11, %r10, %r10
adcq %r9, %rax
adcq %r10, %r8
movq %rax, 112(%rdi)
movq %r8, 120(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mont_sub_avx2_16,.-sp_1024_mont_sub_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
#ifdef HAVE_INTEL_AVX2
/* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
*
* r Result of division by 2.
* a Number to divide.
* m Modulus (prime).
*/
#ifndef __APPLE__
.text
.globl sp_1024_mont_div2_avx2_16
.type sp_1024_mont_div2_avx2_16,@function
.align 16
sp_1024_mont_div2_avx2_16:
#else
.section __TEXT,__text
.globl _sp_1024_mont_div2_avx2_16
.p2align 4
_sp_1024_mont_div2_avx2_16:
#endif /* __APPLE__ */
movq (%rsi), %r11
xorq %r10, %r10
movq %r11, %r8
andq $0x01, %r11
negq %r11
movq (%rdx), %rax
movq 8(%rdx), %rcx
movq (%rsi), %r8
movq 8(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
addq %rax, %r8
adcq %rcx, %r9
movq %r8, (%rdi)
movq %r9, 8(%rdi)
movq 16(%rdx), %rax
movq 24(%rdx), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 16(%rdi)
movq %r9, 24(%rdi)
movq 32(%rdx), %rax
movq 40(%rdx), %rcx
movq 32(%rsi), %r8
movq 40(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 32(%rdi)
movq %r9, 40(%rdi)
movq 48(%rdx), %rax
movq 56(%rdx), %rcx
movq 48(%rsi), %r8
movq 56(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 48(%rdi)
movq %r9, 56(%rdi)
movq 64(%rdx), %rax
movq 72(%rdx), %rcx
movq 64(%rsi), %r8
movq 72(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 64(%rdi)
movq %r9, 72(%rdi)
movq 80(%rdx), %rax
movq 88(%rdx), %rcx
movq 80(%rsi), %r8
movq 88(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 80(%rdi)
movq %r9, 88(%rdi)
movq 96(%rdx), %rax
movq 104(%rdx), %rcx
movq 96(%rsi), %r8
movq 104(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 96(%rdi)
movq %r9, 104(%rdi)
movq 112(%rdx), %rax
movq 120(%rdx), %rcx
movq 112(%rsi), %r8
movq 120(%rsi), %r9
pextq %r11, %rax, %rax
pextq %r11, %rcx, %rcx
adcq %rax, %r8
adcq %rcx, %r9
movq %r8, 112(%rdi)
movq %r9, 120(%rdi)
adcq $0x00, %r10
movq (%rdi), %r8
movq 8(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, (%rdi)
movq 16(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 8(%rdi)
movq 24(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 16(%rdi)
movq 32(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 24(%rdi)
movq 40(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 32(%rdi)
movq 48(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 40(%rdi)
movq 56(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 48(%rdi)
movq 64(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 56(%rdi)
movq 72(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 64(%rdi)
movq 80(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 72(%rdi)
movq 88(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 80(%rdi)
movq 96(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 88(%rdi)
movq 104(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 96(%rdi)
movq 112(%rdi), %r8
shrdq $0x01, %r8, %r9
movq %r9, 104(%rdi)
movq 120(%rdi), %r9
shrdq $0x01, %r9, %r8
movq %r8, 112(%rdi)
shrdq $0x01, %r10, %r9
movq %r9, 120(%rdi)
repz retq
#ifndef __APPLE__
.size sp_1024_mont_div2_avx2_16,.-sp_1024_mont_div2_avx2_16
#endif /* __APPLE__ */
#endif /* HAVE_INTEL_AVX2 */
/* Read big endian unsigned byte array into r.
* Uses the bswap instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_1024_from_bin_bswap
.type sp_1024_from_bin_bswap,@function
.align 16
sp_1024_from_bin_bswap:
#else
.section __TEXT,__text
.globl _sp_1024_from_bin_bswap
.p2align 4
_sp_1024_from_bin_bswap:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x80, %r10
xorq %r11, %r11
jmp L_1024_from_bin_bswap_64_end
L_1024_from_bin_bswap_64_start:
subq $0x40, %r9
movq 56(%r9), %rax
movq 48(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movq 40(%r9), %rax
movq 32(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movq 24(%r9), %rax
movq 16(%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movq 8(%r9), %rax
movq (%r9), %r8
bswapq %rax
bswapq %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_1024_from_bin_bswap_64_end:
cmpq $63, %rcx
jg L_1024_from_bin_bswap_64_start
jmp L_1024_from_bin_bswap_8_end
L_1024_from_bin_bswap_8_start:
subq $8, %r9
movq (%r9), %rax
bswapq %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_1024_from_bin_bswap_8_end:
cmpq $7, %rcx
jg L_1024_from_bin_bswap_8_start
cmpq %r11, %rcx
je L_1024_from_bin_bswap_hi_end
movq %r11, %r8
movq %r11, %rax
L_1024_from_bin_bswap_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_1024_from_bin_bswap_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_1024_from_bin_bswap_hi_end:
cmpq %r10, %rdi
jge L_1024_from_bin_bswap_zero_end
L_1024_from_bin_bswap_zero_start:
movq %r11, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_1024_from_bin_bswap_zero_start
L_1024_from_bin_bswap_zero_end:
repz retq
#ifndef __APPLE__
.size sp_1024_from_bin_bswap,.-sp_1024_from_bin_bswap
#endif /* __APPLE__ */
#ifndef NO_MOVBE_SUPPORT
/* Read big endian unsigned byte array into r.
* Uses the movbe instruction which is an optional instruction.
*
* r A single precision integer.
* size Maximum number of bytes to convert
* a Byte array.
* n Number of bytes in array to read.
*/
#ifndef __APPLE__
.text
.globl sp_1024_from_bin_movbe
.type sp_1024_from_bin_movbe,@function
.align 16
sp_1024_from_bin_movbe:
#else
.section __TEXT,__text
.globl _sp_1024_from_bin_movbe
.p2align 4
_sp_1024_from_bin_movbe:
#endif /* __APPLE__ */
movq %rdx, %r9
movq %rdi, %r10
addq %rcx, %r9
addq $0x80, %r10
jmp L_1024_from_bin_movbe_64_end
L_1024_from_bin_movbe_64_start:
subq $0x40, %r9
movbeq 56(%r9), %rax
movbeq 48(%r9), %r8
movq %rax, (%rdi)
movq %r8, 8(%rdi)
movbeq 40(%r9), %rax
movbeq 32(%r9), %r8
movq %rax, 16(%rdi)
movq %r8, 24(%rdi)
movbeq 24(%r9), %rax
movbeq 16(%r9), %r8
movq %rax, 32(%rdi)
movq %r8, 40(%rdi)
movbeq 8(%r9), %rax
movbeq (%r9), %r8
movq %rax, 48(%rdi)
movq %r8, 56(%rdi)
addq $0x40, %rdi
subq $0x40, %rcx
L_1024_from_bin_movbe_64_end:
cmpq $63, %rcx
jg L_1024_from_bin_movbe_64_start
jmp L_1024_from_bin_movbe_8_end
L_1024_from_bin_movbe_8_start:
subq $8, %r9
movbeq (%r9), %rax
movq %rax, (%rdi)
addq $8, %rdi
subq $8, %rcx
L_1024_from_bin_movbe_8_end:
cmpq $7, %rcx
jg L_1024_from_bin_movbe_8_start
cmpq $0x00, %rcx
je L_1024_from_bin_movbe_hi_end
movq $0x00, %r8
movq $0x00, %rax
L_1024_from_bin_movbe_hi_start:
movb (%rdx), %al
shlq $8, %r8
incq %rdx
addq %rax, %r8
decq %rcx
jg L_1024_from_bin_movbe_hi_start
movq %r8, (%rdi)
addq $8, %rdi
L_1024_from_bin_movbe_hi_end:
cmpq %r10, %rdi
jge L_1024_from_bin_movbe_zero_end
L_1024_from_bin_movbe_zero_start:
movq $0x00, (%rdi)
addq $8, %rdi
cmpq %r10, %rdi
jl L_1024_from_bin_movbe_zero_start
L_1024_from_bin_movbe_zero_end:
repz retq
#ifndef __APPLE__
.size sp_1024_from_bin_movbe,.-sp_1024_from_bin_movbe
#endif /* __APPLE__ */
#endif /* !NO_MOVBE_SUPPORT */
#endif /* WOLFSSL_SP_1024 */
#endif /* WOLFSSL_SP_X86_64_ASM */
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif