diff --git a/.wolfssl_known_macro_extras b/.wolfssl_known_macro_extras index c4a26205436..fb34d7c6f29 100644 --- a/.wolfssl_known_macro_extras +++ b/.wolfssl_known_macro_extras @@ -741,10 +741,10 @@ WOLFSSL_CONTIKI WOLFSSL_CRL_ALLOW_MISSING_CDP WOLFSSL_DISABLE_EARLY_SANITY_CHECKS WOLFSSL_DRBG_SHA256 +WOLFSSL_DTLS13_ECHO_LEGACY_SESSION_ID WOLFSSL_DTLS_DISALLOW_FUTURE WOLFSSL_DTLS_RECORDS_CAN_SPAN_DATAGRAMS WOLFSSL_DTLS_RESEND_ONLY_TIMEOUT -WOLFSSL_DTLS13_ECHO_LEGACY_SESSION_ID WOLFSSL_DUMP_MEMIO_STREAM WOLFSSL_DUP_CERTPOL WOLFSSL_EARLY_DATA_NO_ANTI_REPLAY diff --git a/configure.ac b/configure.ac index 7cd5cf6671a..bc4bdb51d24 100644 --- a/configure.ac +++ b/configure.ac @@ -1513,6 +1513,7 @@ then test "$enable_hkdf" = "" && enable_hkdf=yes test "$enable_eccencrypt" = "" && test "$enable_ecc" != "no" && enable_eccencrypt=yes test "$enable_fpecc" = "" && test "$enable_ecc" != "no" && enable_fpecc=yes + test "$enable_eccsi" = "" && test "$enable_ecc" != "no" && enable_eccsi=yes test "$enable_psk" = "" && enable_psk=yes test "$enable_cmac" = "" && enable_cmac=yes test "$enable_cmac_kdf" = "" && enable_cmac_kdf=yes @@ -1580,13 +1581,12 @@ then test "$enable_aessiv" = "" && enable_aessiv=yes # AFALG lacks AES-EAX test "$enable_aeseax" = "" && test "$enable_afalg" != "yes" && enable_aeseax=yes + test "$enable_sakke" = "" && test "$enable_ecc" != "no" && enable_sakke=yes if test "$KERNEL_MODE_DEFAULTS" != "yes" then test "$enable_cryptocb" = "" && enable_cryptocb=yes test "$enable_pkcallbacks" = "" && enable_pkcallbacks=yes - test "$enable_eccsi" = "" && test "$enable_ecc" != "no" && enable_eccsi=yes - test "$enable_sakke" = "" && test "$enable_ecc" != "no" && enable_sakke=yes fi fi diff --git a/linuxkm/lkcapi_dh_glue.c b/linuxkm/lkcapi_dh_glue.c index 6caabf06ac8..581776b230d 100644 --- a/linuxkm/lkcapi_dh_glue.c +++ b/linuxkm/lkcapi_dh_glue.c @@ -89,37 +89,40 @@ #include #define WOLFKM_DH_NAME ("dh") -#define WOLFKM_DH_DRIVER ("dh" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") + +#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT) + #define WOLFKM_DH_DRIVER_ISA_EXT "-avx2" +#else + #define WOLFKM_DH_DRIVER_ISA_EXT "" +#endif +#define WOLFKM_DH_DRIVER_SUFFIX WOLFKM_DH_DRIVER_ISA_EXT \ + WOLFKM_DRIVER_SUFFIX_BASE + +#define WOLFKM_DH_DRIVER ("dh" WOLFKM_DH_DRIVER_SUFFIX) #ifdef HAVE_FFDHE_2048 #define WOLFKM_FFDHE2048_NAME ("ffdhe2048(dh)") - #define WOLFKM_FFDHE2048_DRIVER ("ffdhe2048" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") + #define WOLFKM_FFDHE2048_DRIVER ("ffdhe2048" WOLFKM_DH_DRIVER_SUFFIX) #endif /* HAVE_FFDHE_2048 */ #ifdef HAVE_FFDHE_3072 #define WOLFKM_FFDHE3072_NAME ("ffdhe3072(dh)") - #define WOLFKM_FFDHE3072_DRIVER ("ffdhe3072" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") + #define WOLFKM_FFDHE3072_DRIVER ("ffdhe3072" WOLFKM_DH_DRIVER_SUFFIX) #endif /* HAVE_FFDHE_3072 */ #ifdef HAVE_FFDHE_4096 #define WOLFKM_FFDHE4096_NAME ("ffdhe4096(dh)") - #define WOLFKM_FFDHE4096_DRIVER ("ffdhe4096" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") + #define WOLFKM_FFDHE4096_DRIVER ("ffdhe4096" WOLFKM_DH_DRIVER_SUFFIX) #endif /* HAVE_FFDHE_4096 */ #ifdef HAVE_FFDHE_6144 #define WOLFKM_FFDHE6144_NAME ("ffdhe6144(dh)") - #define WOLFKM_FFDHE6144_DRIVER ("ffdhe6144" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") + #define WOLFKM_FFDHE6144_DRIVER ("ffdhe6144" WOLFKM_DH_DRIVER_SUFFIX) #endif /* HAVE_FFDHE_6144 */ #ifdef HAVE_FFDHE_8192 #define WOLFKM_FFDHE8192_NAME ("ffdhe8192(dh)") - #define WOLFKM_FFDHE8192_DRIVER ("ffdhe8192" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") + #define WOLFKM_FFDHE8192_DRIVER ("ffdhe8192" WOLFKM_DH_DRIVER_SUFFIX) #endif /* HAVE_FFDHE_8192 */ static int linuxkm_test_kpp_driver(const char * driver, diff --git a/linuxkm/lkcapi_ecdh_glue.c b/linuxkm/lkcapi_ecdh_glue.c index 2f88bd20377..24755917a5c 100644 --- a/linuxkm/lkcapi_ecdh_glue.c +++ b/linuxkm/lkcapi_ecdh_glue.c @@ -63,19 +63,24 @@ #include #include -#define WOLFKM_ECDH_DRIVER ("ecdh-wolfcrypt") +#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT) + #define WOLFKM_ECDH_DRIVER_ISA_EXT "-avx2" +#else + #define WOLFKM_ECDH_DRIVER_ISA_EXT "" +#endif +#define WOLFKM_ECDH_DRIVER_SUFFIX WOLFKM_ECDH_DRIVER_ISA_EXT \ + WOLFKM_DRIVER_SUFFIX_BASE + +#define WOLFKM_ECDH_DRIVER ("ecdh" WOLFKM_ECDH_DRIVER_SUFFIX) #define WOLFKM_ECDH_P192_NAME ("ecdh-nist-p192") -#define WOLFKM_ECDH_P192_DRIVER ("ecdh-nist-p192" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDH_P192_DRIVER ("ecdh-nist-p192" WOLFKM_ECDH_DRIVER_SUFFIX) #define WOLFKM_ECDH_P256_NAME ("ecdh-nist-p256") -#define WOLFKM_ECDH_P256_DRIVER ("ecdh-nist-p256" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDH_P256_DRIVER ("ecdh-nist-p256" WOLFKM_ECDH_DRIVER_SUFFIX) #define WOLFKM_ECDH_P384_NAME ("ecdh-nist-p384") -#define WOLFKM_ECDH_P384_DRIVER ("ecdh-nist-p384" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDH_P384_DRIVER ("ecdh-nist-p384" WOLFKM_ECDH_DRIVER_SUFFIX) static int linuxkm_test_ecdh_nist_driver(const char * driver, const byte * b_pub, diff --git a/linuxkm/lkcapi_ecdsa_glue.c b/linuxkm/lkcapi_ecdsa_glue.c index 46469131e50..13a0e90be57 100644 --- a/linuxkm/lkcapi_ecdsa_glue.c +++ b/linuxkm/lkcapi_ecdsa_glue.c @@ -82,23 +82,27 @@ #include #include -#define WOLFKM_ECDSA_DRIVER ("ecdsa-wolfcrypt") +#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT) + #define WOLFKM_ECDSA_DRIVER_ISA_EXT "-avx2" +#else + #define WOLFKM_ECDSA_DRIVER_ISA_EXT "" +#endif +#define WOLFKM_ECDSA_DRIVER_SUFFIX WOLFKM_ECDSA_DRIVER_ISA_EXT \ + WOLFKM_DRIVER_SUFFIX_BASE + +#define WOLFKM_ECDSA_DRIVER ("ecdsa" WOLFKM_ECDSA_DRIVER_SUFFIX) #define WOLFKM_ECDSA_P192_NAME ("ecdsa-nist-p192") -#define WOLFKM_ECDSA_P192_DRIVER ("ecdsa-nist-p192" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDSA_P192_DRIVER ("ecdsa-nist-p192" WOLFKM_ECDSA_DRIVER_SUFFIX) #define WOLFKM_ECDSA_P256_NAME ("ecdsa-nist-p256") -#define WOLFKM_ECDSA_P256_DRIVER ("ecdsa-nist-p256" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDSA_P256_DRIVER ("ecdsa-nist-p256" WOLFKM_ECDSA_DRIVER_SUFFIX) #define WOLFKM_ECDSA_P384_NAME ("ecdsa-nist-p384") -#define WOLFKM_ECDSA_P384_DRIVER ("ecdsa-nist-p384" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDSA_P384_DRIVER ("ecdsa-nist-p384" WOLFKM_ECDSA_DRIVER_SUFFIX) #define WOLFKM_ECDSA_P521_NAME ("ecdsa-nist-p521") -#define WOLFKM_ECDSA_P521_DRIVER ("ecdsa-nist-p521" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt") +#define WOLFKM_ECDSA_P521_DRIVER ("ecdsa-nist-p521" WOLFKM_ECDSA_DRIVER_SUFFIX) static int linuxkm_test_ecdsa_nist_driver(const char * driver, diff --git a/linuxkm/lkcapi_rsa_glue.c b/linuxkm/lkcapi_rsa_glue.c index e38dfaf28cf..ac7f8ff5c78 100644 --- a/linuxkm/lkcapi_rsa_glue.c +++ b/linuxkm/lkcapi_rsa_glue.c @@ -99,45 +99,46 @@ #include #define WOLFKM_RSA_NAME ("rsa") -#define WOLFKM_RSA_DRIVER ("rsa" WOLFKM_DRIVER_FIPS "-wolfcrypt") + +#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT) + #define WOLFKM_RSA_DRIVER_ISA_EXT "-avx2" +#else + #define WOLFKM_RSA_DRIVER_ISA_EXT "" +#endif +#define WOLFKM_RSA_DRIVER_SUFFIX WOLFKM_RSA_DRIVER_ISA_EXT \ + WOLFKM_DRIVER_SUFFIX_BASE + +#define WOLFKM_RSA_DRIVER ("rsa" WOLFKM_RSA_DRIVER_SUFFIX) #if defined(LINUXKM_AKCIPHER_NO_SIGNVERIFY) /* the akcipher alg */ - #define WOLFKM_PKCS1PAD_NAME ("pkcs1pad(rsa)") - #define WOLFKM_PKCS1PAD_DRIVER ("pkcs1pad(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt)") + #define WOLFKM_PKCS1PAD_NAME "pkcs1pad(rsa)" + #define WOLFKM_PKCS1PAD_DRIVER "pkcs1pad-rsa" WOLFKM_RSA_DRIVER_SUFFIX #endif /* LINUXKM_AKCIPHER_NO_SIGNVERIFY */ /* * pkcs1 sign verify alg names * */ #define WOLFKM_PKCS1_SHA224_NAME (PKCS1_NAME "(rsa,sha224)") -#define WOLFKM_PKCS1_SHA224_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha224)") +#define WOLFKM_PKCS1_SHA224_DRIVER ("pkcs1pad-rsa-sha224" WOLFKM_RSA_DRIVER_SUFFIX) #define WOLFKM_PKCS1_SHA256_NAME (PKCS1_NAME "(rsa,sha256)") -#define WOLFKM_PKCS1_SHA256_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha256)") +#define WOLFKM_PKCS1_SHA256_DRIVER ("pkcs1pad-rsa-sha256" WOLFKM_RSA_DRIVER_SUFFIX) #define WOLFKM_PKCS1_SHA384_NAME (PKCS1_NAME "(rsa,sha384)") -#define WOLFKM_PKCS1_SHA384_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha384)") +#define WOLFKM_PKCS1_SHA384_DRIVER ("pkcs1pad-rsa-sha384" WOLFKM_RSA_DRIVER_SUFFIX) #define WOLFKM_PKCS1_SHA512_NAME (PKCS1_NAME "(rsa,sha512)") -#define WOLFKM_PKCS1_SHA512_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha512)") +#define WOLFKM_PKCS1_SHA512_DRIVER ("pkcs1pad-rsa-sha512" WOLFKM_RSA_DRIVER_SUFFIX) #define WOLFKM_PKCS1_SHA3_256_NAME (PKCS1_NAME "(rsa,sha3-256)") -#define WOLFKM_PKCS1_SHA3_256_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha3-256)") +#define WOLFKM_PKCS1_SHA3_256_DRIVER ("pkcs1pad-rsa-sha3-256" WOLFKM_RSA_DRIVER_SUFFIX) #define WOLFKM_PKCS1_SHA3_384_NAME (PKCS1_NAME "(rsa,sha3-384)") -#define WOLFKM_PKCS1_SHA3_384_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha3-384)") +#define WOLFKM_PKCS1_SHA3_384_DRIVER ("pkcs1pad-rsa-sha3-384" WOLFKM_RSA_DRIVER_SUFFIX) #define WOLFKM_PKCS1_SHA3_512_NAME (PKCS1_NAME "(rsa,sha3-512)") -#define WOLFKM_PKCS1_SHA3_512_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \ - "-wolfcrypt,sha3-512)") +#define WOLFKM_PKCS1_SHA3_512_DRIVER ("pkcs1pad-rsa-sha3-512" WOLFKM_RSA_DRIVER_SUFFIX) #if defined(WOLFSSL_KEY_GEN) #if defined(LINUXKM_DIRECT_RSA) diff --git a/linuxkm/module_exports.c.template b/linuxkm/module_exports.c.template index f37eea1e498..8209c6277f9 100644 --- a/linuxkm/module_exports.c.template +++ b/linuxkm/module_exports.c.template @@ -91,6 +91,12 @@ #ifdef HAVE_ECC #include #endif +#ifdef WOLFCRYPT_HAVE_ECCSI + #include +#endif +#ifdef WOLFCRYPT_HAVE_SAKKE + #include +#endif #ifdef HAVE_HPKE #include #endif diff --git a/wolfcrypt/src/dh.c b/wolfcrypt/src/dh.c index 26166c73102..c7560d185c0 100644 --- a/wolfcrypt/src/dh.c +++ b/wolfcrypt/src/dh.c @@ -57,14 +57,6 @@ } #endif -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - /* Possible DH enable options: * NO_RSA: Overall control of DH default: on (not defined) @@ -1425,8 +1417,6 @@ int wc_DhGeneratePublic(DhKey* key, byte* priv, word32 privSz, return BAD_FUNC_ARG; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - ret = GeneratePublicDh(key, priv, privSz, pub, pubSz); #if FIPS_VERSION_GE(5,0) || defined(WOLFSSL_VALIDATE_DH_KEYGEN) @@ -1436,8 +1426,6 @@ int wc_DhGeneratePublic(DhKey* key, byte* priv, word32 privSz, ret = _ffc_pairwise_consistency_test(key, pub, *pubSz, priv, privSz); #endif /* FIPS V5 or later || WOLFSSL_VALIDATE_DH_KEYGEN */ - RESTORE_VECTOR_REGISTERS(); - return ret; } @@ -1451,8 +1439,6 @@ static int wc_DhGenerateKeyPair_Sync(DhKey* key, WC_RNG* rng, return BAD_FUNC_ARG; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - ret = GeneratePrivateDh(key, rng, priv, privSz); if (ret == 0) @@ -1464,9 +1450,6 @@ static int wc_DhGenerateKeyPair_Sync(DhKey* key, WC_RNG* rng, ret = _ffc_pairwise_consistency_test(key, pub, *pubSz, priv, *privSz); #endif /* FIPS V5 or later || WOLFSSL_VALIDATE_DH_KEYGEN */ - - RESTORE_VECTOR_REGISTERS(); - return ret; } #endif /* !WOLFSSL_KCAPI_DH */ @@ -1589,8 +1572,6 @@ static int _ffc_validate_public_key(DhKey* key, const byte* pub, word32 pubSz, return MP_INIT_E; } - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (mp_read_unsigned_bin(y, pub, pubSz) != MP_OKAY) { ret = MP_READ_E; } @@ -1679,8 +1660,6 @@ static int _ffc_validate_public_key(DhKey* key, const byte* pub, word32 pubSz, mp_clear(p); mp_clear(q); - RESTORE_VECTOR_REGISTERS(); - #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) XFREE(q, key->heap, DYNAMIC_TYPE_DH); XFREE(p, key->heap, DYNAMIC_TYPE_DH); @@ -1919,8 +1898,6 @@ static int _ffc_pairwise_consistency_test(DhKey* key, return MP_INIT_E; } - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - /* Load the private and public keys into big integers. */ if (mp_read_unsigned_bin(publicKey, pub, pubSz) != MP_OKAY || mp_read_unsigned_bin(privateKey, priv, privSz) != MP_OKAY) { @@ -1979,8 +1956,6 @@ static int _ffc_pairwise_consistency_test(DhKey* key, mp_clear(publicKey); mp_clear(checkKey); - RESTORE_VECTOR_REGISTERS(); - #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) XFREE(checkKey, key->heap, DYNAMIC_TYPE_DH); XFREE(privateKey, key->heap, DYNAMIC_TYPE_DH); @@ -2174,8 +2149,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz, ret = MP_INIT_E; if (ret == 0) { - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (ret == 0 && mp_read_unsigned_bin(y, otherPub, pubSz) != MP_OKAY) ret = MP_READ_E; @@ -2201,8 +2174,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz, } mp_clear(y); - - RESTORE_VECTOR_REGISTERS(); } /* make sure agree is > 1 (SP800-56A, 5.7.1.1) */ @@ -2253,8 +2224,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz, } #endif - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (mp_read_unsigned_bin(x, priv, privSz) != MP_OKAY) ret = MP_READ_E; #ifdef WOLFSSL_CHECK_MEM_ZERO @@ -2313,8 +2282,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz, mp_clear(y); mp_forcezero(x); - RESTORE_VECTOR_REGISTERS(); - #else (void)ct; ret = WC_KEY_SIZE_E; @@ -2601,8 +2568,6 @@ static int _DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g, ret = BAD_FUNC_ARG; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - if (ret == 0) { /* may have leading 0 */ if (p[0] == 0) { @@ -2714,8 +2679,6 @@ static int _DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g, mp_clear(keyP); } - RESTORE_VECTOR_REGISTERS(); - return ret; } @@ -3204,8 +3167,6 @@ int wc_DhGenerateParams(WC_RNG *rng, int modSz, DhKey *dh) } #endif - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (ret == 0) { /* force magnitude */ buf[0] |= 0xC0; @@ -3264,9 +3225,10 @@ int wc_DhGenerateParams(WC_RNG *rng, int modSz, DhKey *dh) if (ret != 0 || primeCheck == MP_YES) break; - /* linuxkm: release the kernel for a moment before iterating. */ - RESTORE_VECTOR_REGISTERS(); - SAVE_VECTOR_REGISTERS(ret = _svr_ret; break;); + ret = WC_CHECK_FOR_INTR_SIGNALS(); + if (ret != 0) + break; + WC_RELAX_LONG_LOOP(); }; } @@ -3308,8 +3270,6 @@ int wc_DhGenerateParams(WC_RNG *rng, int modSz, DhKey *dh) mp_clear(&dh->g); } - RESTORE_VECTOR_REGISTERS(); - #ifndef WOLFSSL_NO_MALLOC if (buf != NULL) #endif diff --git a/wolfcrypt/src/dsa.c b/wolfcrypt/src/dsa.c index 0e849c23499..5df809c2dab 100644 --- a/wolfcrypt/src/dsa.c +++ b/wolfcrypt/src/dsa.c @@ -36,14 +36,6 @@ #include #endif -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - #ifdef _MSC_VER /* disable for while(0) cases (MSVC bug) */ #pragma warning(disable:4127) @@ -269,8 +261,6 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa) } #endif - SAVE_VECTOR_REGISTERS(;); - #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) if ((tmpQ = (mp_int *)XMALLOC(sizeof(*tmpQ), dsa->heap, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) @@ -338,8 +328,6 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa) mp_clear(tmpQ); #endif - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -454,6 +442,11 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa) break; loop_check_prime++; } + + err = WC_CHECK_FOR_INTR_SIGNALS(); + if (err != 0) + break; + WC_RELAX_LONG_LOOP(); } } @@ -794,8 +787,6 @@ int wc_DsaSign_ex(const byte* digest, word32 digestSz, byte* out, DsaKey* key, return BAD_LENGTH_E; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - do { #ifdef WOLFSSL_SMALL_STACK k = (mp_int *)XMALLOC(sizeof *k, key->heap, DYNAMIC_TYPE_TMP_BUFFER); @@ -1040,8 +1031,6 @@ int wc_DsaSign_ex(const byte* digest, word32 digestSz, byte* out, DsaKey* key, } } while (0); - RESTORE_VECTOR_REGISTERS(); - #ifdef WOLFSSL_SMALL_STACK if (k) { if ((ret != WC_NO_ERR_TRACE(MP_INIT_E)) && diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index 57b29197d66..11276ce6e9f 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -275,14 +275,6 @@ ECC Curve Sizes: #include #endif -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - #if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \ !defined(WOLFSSL_MICROCHIP_TA100) && \ !defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SILABS_SE_ACCEL) && \ @@ -5150,8 +5142,6 @@ int wc_ecc_shared_secret_ex(ecc_key* private_key, ecc_point* point, return ECC_BAD_ARG_E; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - switch (private_key->state) { case ECC_STATE_NONE: case ECC_STATE_SHARED_SEC_GEN: @@ -5194,8 +5184,6 @@ int wc_ecc_shared_secret_ex(ecc_key* private_key, ecc_point* point, err = BAD_STATE_E; } /* switch */ - RESTORE_VECTOR_REGISTERS(); - /* if async pending then return and skip done cleanup below */ if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { return err; @@ -5280,8 +5268,6 @@ int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx) return ECC_BAD_ARG_E; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - ALLOC_CURVE_SPECS(3, err); if (err == MP_OKAY) { err = wc_ecc_curve_load(wc_ecc_get_curve_params(curve_idx), &curve, @@ -5296,8 +5282,6 @@ int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx) wc_ecc_curve_free(curve); FREE_CURVE_SPECS(); - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -5456,8 +5440,6 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve, return BAD_FUNC_ARG; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - #ifdef HAVE_ECC_MAKE_PUB /* if ecc_point passed in then use it as output for public key point */ if (pubOut != NULL) { @@ -5603,8 +5585,6 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve, key->type = ECC_PRIVATEKEY; } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -6107,8 +6087,6 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id, { int err; - SAVE_VECTOR_REGISTERS(return _svr_ret;); - err = _ecc_make_key_ex(rng, keysize, key, curve_id, flags); #if (FIPS_VERSION_GE(5,0) || defined(WOLFSSL_VALIDATE_ECC_KEYGEN)) && \ @@ -6132,8 +6110,6 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id, } #endif - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -7195,6 +7171,11 @@ static int ecc_sign_hash_sw(ecc_key* key, ecc_key* pubkey, WC_RNG* rng, mp_clear(pubkey->pubkey.z); #endif mp_forcezero(pubkey->k); + + err = WC_CHECK_FOR_INTR_SIGNALS(); + if (err != 0) + break; + WC_RELAX_LONG_LOOP(); } mp_forcezero(b); FREE_MP_INT_SIZE(b, key->heap, DYNAMIC_TYPE_ECC); @@ -7244,10 +7225,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng, #if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY)) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_sign_256(in, inlen, rng, ecc_get_k(key), r, s, sign_k, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -7256,10 +7235,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng, #if defined(WOLFSSL_SM2) && defined(WOLFSSL_SP_SM2) if (ecc_sets[key->idx].id == ECC_SM2P256V1) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_sign_sm2_256(in, inlen, rng, ecc_get_k(key), r, s, sign_k, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -7284,10 +7261,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng, #if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY)) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_sign_384(in, inlen, rng, ecc_get_k(key), r, s, sign_k, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -7314,10 +7289,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng, #if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY)) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_sign_521(in, inlen, rng, ecc_get_k(key), r, s, sign_k, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -8938,10 +8911,8 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash, #if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY)) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_verify_256(hash, hashlen, key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -8982,10 +8953,8 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash, #if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY)) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_verify_384(hash, hashlen, key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -9011,10 +8980,8 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash, #if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY)) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_verify_521(hash, hashlen, key->pubkey.x, key->pubkey.y, key->pubkey.z, r, s, res, key->heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -9652,8 +9619,6 @@ int wc_ecc_import_point_der_ex(const byte* in, word32 inLen, if (err != MP_OKAY) return MEMORY_E; - SAVE_VECTOR_REGISTERS(return _svr_ret;); - /* check for point type (4, 2, or 3) */ pointType = in[0]; if (pointType != ECC_POINT_UNCOMP && pointType != ECC_POINT_COMP_EVEN && @@ -9845,8 +9810,6 @@ int wc_ecc_import_point_der_ex(const byte* in, word32 inLen, mp_clear(point->z); } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -10197,8 +10160,6 @@ static int _ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime) return err; } - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - /* compute y^2 */ if (err == MP_OKAY) err = mp_sqr(ecp->y, t1); @@ -10267,8 +10228,6 @@ static int _ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime) mp_clear(t1); mp_clear(t2); - RESTORE_VECTOR_REGISTERS(); - WC_FREE_VAR_EX(t2, NULL, DYNAMIC_TYPE_ECC); WC_FREE_VAR_EX(t1, NULL, DYNAMIC_TYPE_ECC); @@ -10718,8 +10677,6 @@ static int _ecc_validate_public_key(ecc_key* key, int partial, int priv) DECLARE_CURVE_SPECS(4); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (key == NULL) return BAD_FUNC_ARG; @@ -10871,9 +10828,7 @@ WOLFSSL_ABI int wc_ecc_check_key(ecc_key* key) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = _ecc_validate_public_key(key, 0, 1); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -10938,8 +10893,6 @@ static int _ecc_import_x963_ex2(const byte* in, word32 inLen, ecc_key* key, mp_forcezero(key->kb); #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); - /* check for point type (4, 2, or 3) */ pointType = in[0]; if (pointType != ECC_POINT_UNCOMP && pointType != ECC_POINT_COMP_EVEN && @@ -11271,8 +11224,6 @@ static int _ecc_import_x963_ex2(const byte* in, word32 inLen, ecc_key* key, mp_forcezero(key->k); } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -11691,10 +11642,6 @@ static int _ecc_import_private_key_ex(const byte* priv, word32 privSz, } #else -#ifdef WOLFSSL_VALIDATE_ECC_IMPORT - SAVE_VECTOR_REGISTERS(return _svr_ret;); -#endif - ret = mp_read_unsigned_bin(key->k, priv, privSz); #ifdef HAVE_WOLF_BIGINT if (ret == 0 && wc_bigint_from_unsigned_bin(&key->k->raw, priv, @@ -11745,10 +11692,6 @@ static int _ecc_import_private_key_ex(const byte* priv, word32 privSz, #endif -#ifdef WOLFSSL_VALIDATE_ECC_IMPORT - RESTORE_VECTOR_REGISTERS(); -#endif - #ifdef WOLFSSL_MAXQ10XX_CRYPTO if ((ret == 0) && (key->devId != INVALID_DEVID)) { ret = wc_MAXQ10XX_EccSetKey(key, key->dp->size); @@ -12137,10 +12080,6 @@ static int _ecc_import_raw_private(ecc_key* key, const char* qx, } #endif -#ifdef WOLFSSL_VALIDATE_ECC_IMPORT - SAVE_VECTOR_REGISTERS(return _svr_ret;); -#endif - /* import private key */ if (err == MP_OKAY) { if (d != NULL) { @@ -12234,10 +12173,6 @@ static int _ecc_import_raw_private(ecc_key* key, const char* qx, } #endif -#ifdef WOLFSSL_VALIDATE_ECC_IMPORT - RESTORE_VECTOR_REGISTERS(); -#endif - #ifdef WOLFSSL_MAXQ10XX_CRYPTO if (err == MP_OKAY) { err = wc_MAXQ10XX_EccSetKey(key, key->dp->size); @@ -13858,8 +13793,6 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, } #endif /* HAVE_THREAD_LS */ - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - /* find point */ idx1 = find_base(A); @@ -13942,8 +13875,6 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, } } - RESTORE_VECTOR_REGISTERS(); - #ifndef HAVE_THREAD_LS wc_UnLockMutex(&ecc_fp_lock); #endif /* HAVE_THREAD_LS */ @@ -14011,8 +13942,6 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, got_ecc_fp_lock = 1; #endif /* HAVE_THREAD_LS */ - SAVE_VECTOR_REGISTERS(err = _svr_ret; goto out;); - /* find point */ idx = find_base(G); @@ -14061,8 +13990,6 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, } } - RESTORE_VECTOR_REGISTERS(); - out: #ifndef HAVE_THREAD_LS @@ -14088,36 +14015,28 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, #if defined(WOLFSSL_SM2) && defined(WOLFSSL_SP_SM2) if ((mp_count_bits(modulus) == 256) && (!mp_is_bit_set(modulus, 224))) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret); ret = sp_ecc_mulmod_sm2_256(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif #ifndef WOLFSSL_SP_NO_256 if (mp_count_bits(modulus) == 256) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_256(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif #ifdef WOLFSSL_SP_384 if (mp_count_bits(modulus) == 384) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_384(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif #ifdef WOLFSSL_SP_521 if (mp_count_bits(modulus) == 521) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_521(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -14182,8 +14101,6 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, got_ecc_fp_lock = 1; #endif /* HAVE_THREAD_LS */ - SAVE_VECTOR_REGISTERS(err = _svr_ret; goto out;); - /* find point */ idx = find_base(G); @@ -14232,8 +14149,6 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, } } - RESTORE_VECTOR_REGISTERS(); - out: #ifndef HAVE_THREAD_LS @@ -14262,36 +14177,28 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, #if defined(WOLFSSL_SM2) && defined(WOLFSSL_SP_SM2) if ((mp_count_bits(modulus) == 256) && (!mp_is_bit_set(modulus, 224))) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_sm2_256(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif #ifndef WOLFSSL_SP_NO_256 if (mp_count_bits(modulus) == 256) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_256(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif #ifdef WOLFSSL_SP_384 if (mp_count_bits(modulus) == 384) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_384(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif #ifdef WOLFSSL_SP_521 if (mp_count_bits(modulus) == 521) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = sp_ecc_mulmod_521(k, G, R, map, heap); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -14887,8 +14794,6 @@ int wc_ecc_encrypt_ex(ecc_key* privKey, ecc_key* pubKey, const byte* msg, } #endif - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - #ifdef WOLFSSL_ECIES_ISO18033 XMEMCPY(sharedSecret, out - pubKeySz, pubKeySz); sharedSz -= pubKeySz; @@ -15105,8 +15010,6 @@ int wc_ecc_encrypt_ex(ecc_key* privKey, ecc_key* pubKey, const byte* msg, #endif } - RESTORE_VECTOR_REGISTERS(); - ForceZero(sharedSecret, sharedSz); ForceZero(keys, (word32)keysLen); WC_FREE_VAR_EX(sharedSecret, ctx->heap, DYNAMIC_TYPE_ECC_BUFFER); @@ -15266,8 +15169,6 @@ int wc_ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg, } #endif - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - #ifndef WOLFSSL_ECIES_OLD if (pubKey == NULL) { WC_ALLOC_VAR_EX(peerKey, ecc_key, 1, ctx->heap, @@ -15501,8 +15402,6 @@ int wc_ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg, if (ret == 0) *outSz = msgSz - digestSz; - RESTORE_VECTOR_REGISTERS(); - #ifndef WOLFSSL_ECIES_OLD if (pubKey == peerKey) wc_ecc_free(peerKey); @@ -15576,8 +15475,6 @@ static int mp_jacobi(mp_int* a, mp_int* n, int* c) return res; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - if ((res = mp_mod(a, n, a1)) != MP_OKAY) { goto done; } @@ -15635,8 +15532,6 @@ static int mp_jacobi(mp_int* a, mp_int* n, int* c) done: - RESTORE_VECTOR_REGISTERS(); - /* cleanup */ mp_clear(n1); mp_clear(a1); @@ -15674,8 +15569,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret) return MP_VAL; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - res = mp_init(&e); if (res == MP_OKAY) res = mp_mod_d(prime, 8, &i); @@ -15699,8 +15592,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret) mp_clear(&e); - RESTORE_VECTOR_REGISTERS(); - return res; #else int res, legendre, done = 0; @@ -15720,8 +15611,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret) mp_int t1[1], C[1], Q[1], S[1], Z[1], M[1], T[1], R[1], N[1], two[1]; #endif - SAVE_VECTOR_REGISTERS(res = _svr_ret; goto out;); - if ((mp_init_multi(t1, C, Q, S, Z, M) != MP_OKAY) || (mp_init_multi(T, R, N, two, NULL, NULL) != MP_OKAY)) { res = MP_INIT_E; @@ -15933,8 +15822,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret) out: - RESTORE_VECTOR_REGISTERS(); - #ifdef WOLFSSL_SMALL_STACK if (t1) { if (res != WC_NO_ERR_TRACE(MP_INIT_E)) diff --git a/wolfcrypt/src/eccsi.c b/wolfcrypt/src/eccsi.c index d919dd8a341..d0417ec879a 100644 --- a/wolfcrypt/src/eccsi.c +++ b/wolfcrypt/src/eccsi.c @@ -36,14 +36,6 @@ #include #endif -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - #ifndef WOLFSSL_HAVE_ECC_KEY_GET_PRIV /* FIPS build has replaced ecc.h. */ #define wc_ecc_key_get_priv(key) (&((key)->k)) @@ -1507,8 +1499,6 @@ int wc_ValidateEccsiPair(EccsiKey* key, enum wc_HashType hashType, if (err != 0) return err; - SAVE_VECTOR_REGISTERS(return _svr_ret;); - params = &key->params; hs = &key->tmp; res = &key->pubkey.pubkey; @@ -1563,8 +1553,6 @@ int wc_ValidateEccsiPair(EccsiKey* key, enum wc_HashType hashType, } } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -2231,8 +2219,6 @@ int wc_VerifyEccsiHash(EccsiKey* key, enum wc_HashType hashType, if (err != 0) return err; - SAVE_VECTOR_REGISTERS(return _svr_ret;); - /* Decode the signature into components. */ r = wc_ecc_key_get_priv(&key->pubkey); pvt = &key->pubkey.pubkey; @@ -2318,8 +2304,6 @@ int wc_VerifyEccsiHash(EccsiKey* key, enum wc_HashType hashType, *verified = ((err == 0) && (mp_cmp(jx, r) == MP_EQ)); } - RESTORE_VECTOR_REGISTERS(); - return err; } #endif /* WOLFCRYPT_ECCSI_CLIENT */ diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index 5fbbd6bdf82..e265d69cf42 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -60,14 +60,6 @@ RSA keys can be used to encrypt, decrypt, sign and verify data. #include #endif -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - /* * RSA Build Options: * @@ -868,8 +860,6 @@ int wc_CheckRsaKey(RsaKey* key) } } - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (ret == 0) { if (INIT_MP_INT_SIZE(tmp, mp_bitsused(&key->n)) != MP_OKAY) ret = MP_INIT_E; @@ -982,8 +972,6 @@ int wc_CheckRsaKey(RsaKey* key) mp_forcezero(tmp); - RESTORE_VECTOR_REGISTERS(); - if ((rng != NULL) && (rng != key->rng)) { wc_FreeRng(rng); #ifdef WOLFSSL_SMALL_STACK @@ -3571,7 +3559,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, #ifdef WOLF_CRYPTO_CB_ONLY_RSA return NO_VALID_DEVID; #else /* !WOLF_CRYPTO_CB_ONLY_RSA */ - SAVE_VECTOR_REGISTERS(return _svr_ret;); #if !defined(WOLFSSL_RSA_VERIFY_ONLY) && !defined(TEST_UNPAD_CONSTANT_TIME) && \ !defined(NO_RSA_BOUNDS_CHECK) @@ -3580,7 +3567,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, ret = RsaFunctionCheckIn(in, inLen, key, checkSmallCt); if (ret != 0) { - RESTORE_VECTOR_REGISTERS(); return ret; } } @@ -3592,7 +3578,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, ret = RsaFunctionCheckIn(in, inLen, key, checkSmallCt); if (ret != 0) { - RESTORE_VECTOR_REGISTERS(); return ret; } } @@ -3623,8 +3608,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, ret = wc_RsaFunctionSync(in, inLen, out, outLen, type, key, rng); } - RESTORE_VECTOR_REGISTERS(); - /* handle error */ if (ret < 0 && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #ifdef WC_RSA_NONBLOCK @@ -4172,11 +4155,9 @@ int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out, word32 outLen, RsaKey* key, WC_RNG* rng) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPublicEncryptEx(in, inLen, out, outLen, key, RSA_PUBLIC_ENCRYPT, RSA_BLOCK_TYPE_2, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4188,10 +4169,8 @@ int wc_RsaPublicEncrypt_ex(const byte* in, word32 inLen, byte* out, word32 labelSz) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPublicEncryptEx(in, inLen, out, outLen, key, RSA_PUBLIC_ENCRYPT, RSA_BLOCK_TYPE_2, type, hash, mgf, label, labelSz, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif /* WC_NO_RSA_OAEP */ @@ -4211,11 +4190,9 @@ int wc_RsaPrivateDecryptInline(byte* in, word32 inLen, byte** out, RsaKey* key) #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key, RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4235,11 +4212,9 @@ int wc_RsaPrivateDecryptInline_ex(byte* in, word32 inLen, byte** out, #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key, RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, type, hash, mgf, label, labelSz, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif /* WC_NO_RSA_OAEP */ @@ -4258,11 +4233,9 @@ int wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out, #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key, RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4282,11 +4255,9 @@ int wc_RsaPrivateDecrypt_ex(const byte* in, word32 inLen, byte* out, #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key, RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, type, hash, mgf, label, labelSz, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif /* WC_NO_RSA_OAEP || WC_RSA_NO_PADDING */ @@ -4305,11 +4276,9 @@ int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out, RsaKey* key) #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key, RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -4325,10 +4294,8 @@ int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen, RsaKey* key, int pad_type) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = wc_RsaSSL_Verify_ex2(in, inLen, out, outLen, key, pad_type, WC_HASH_TYPE_NONE); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4348,7 +4315,6 @@ int wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out, word32 outLen rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); #ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key, RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type, @@ -4358,7 +4324,6 @@ int wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out, word32 outLen RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type, hash, wc_hash2mgf(hash), NULL, 0, RSA_PSS_SALT_LEN_DISCOVER, rng); #endif - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -4416,11 +4381,9 @@ int wc_RsaPSS_VerifyInline_ex(byte* in, word32 inLen, byte** out, #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key, RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PSS_PAD, hash, mgf, NULL, 0, saltLen, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4474,11 +4437,9 @@ int wc_RsaPSS_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen, #else rng = NULL; #endif - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key, RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PSS_PAD, hash, mgf, NULL, 0, saltLen, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4754,11 +4715,9 @@ int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out, word32 outLen, RsaKey* key, WC_RNG* rng) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPublicEncryptEx(in, inLen, out, outLen, key, RSA_PRIVATE_ENCRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } @@ -4805,11 +4764,9 @@ int wc_RsaPSS_Sign_ex(const byte* in, word32 inLen, byte* out, word32 outLen, WC_RNG* rng) { int ret; - SAVE_VECTOR_REGISTERS(return _svr_ret;); ret = RsaPublicEncryptEx(in, inLen, out, outLen, key, RSA_PRIVATE_ENCRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PSS_PAD, hash, mgf, NULL, 0, saltLen, rng); - RESTORE_VECTOR_REGISTERS(); return ret; } #endif @@ -5350,12 +5307,8 @@ int wc_CheckProbablePrime_ex(const byte* pRaw, word32 pRawSz, if (ret == MP_OKAY) ret = mp_read_unsigned_bin(e, eRaw, eRawSz); - if (ret == MP_OKAY) - SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (ret == 0) { ret = _CheckProbablePrime(p, Q, e, nlen, isPrime, rng); - RESTORE_VECTOR_REGISTERS(); } ret = (ret == MP_OKAY) ? 0 : PRIME_GEN_E; @@ -5549,8 +5502,6 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) } #endif - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - /* make p */ if (err == MP_OKAY) { #ifdef WOLFSSL_CHECK_MEM_ZERO @@ -5591,9 +5542,10 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) if (err != MP_OKAY || isPrime || i >= failCount) break; - /* linuxkm: release the kernel for a moment before iterating. */ - RESTORE_VECTOR_REGISTERS(); - SAVE_VECTOR_REGISTERS(err = _svr_ret; break;); + err = WC_CHECK_FOR_INTR_SIGNALS(); + if (err != 0) + break; + WC_RELAX_LONG_LOOP(); }; } @@ -5644,6 +5596,12 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) /* Keep the old retry behavior in non-FIPS build. */ (void)i; #endif + + err = WC_CHECK_FOR_INTR_SIGNALS(); + if (err != 0) + break; + WC_RELAX_LONG_LOOP(); + } while (err == MP_OKAY && !isPrime && i < failCount); } @@ -5769,9 +5727,6 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) } #endif - if (err != WC_NO_ERR_TRACE(WC_ACCEL_INHIBIT_E)) - RESTORE_VECTOR_REGISTERS(); - /* Last value p - 1. */ mp_forcezero(tmp1); /* Last value q - 1. */ diff --git a/wolfcrypt/src/sakke.c b/wolfcrypt/src/sakke.c index 4fc1a85b485..a7b64e32a76 100644 --- a/wolfcrypt/src/sakke.c +++ b/wolfcrypt/src/sakke.c @@ -37,14 +37,6 @@ #include #include -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - #ifndef WOLFSSL_HAVE_ECC_KEY_GET_PRIV /* FIPS build has replaced ecc.h. */ #define wc_ecc_key_get_priv(key) (&((key)->k)) @@ -1328,13 +1320,11 @@ int wc_GenerateSakkeRskTable(const SakkeKey* key, const ecc_point* rsk, err = BAD_FUNC_ARG; } if (err == 0) { - SAVE_VECTOR_REGISTERS(return _svr_ret;); #ifdef WOLFSSL_SP_1024 err = sp_Pairing_gen_precomp_1024(rsk, table, len); #else err = NOT_COMPILED_IN; #endif - RESTORE_VECTOR_REGISTERS(); } return err; @@ -2441,8 +2431,6 @@ int wc_ValidateSakkeRsk(SakkeKey* key, const byte* id, word16 idSz, err = BAD_FUNC_ARG; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - /* Load elliptic curve parameters */ if (err == 0) { err = sakke_load_params(key); @@ -2478,8 +2466,6 @@ int wc_ValidateSakkeRsk(SakkeKey* key, const byte* id, word16 idSz, *valid = ((err == 0) && (mp_cmp(a, &key->params.g) == MP_EQ)); } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -2622,6 +2608,22 @@ static int sakke_modexp_loop(SakkeKey* key, mp_int* b, mp_int* e, mp_proj* r, mp_int* by = key->tmp.p1->z; mp_int* prime = &key->params.prime; int i; +#ifdef WC_NO_GLOBAL_OBJECT_POINTERS + static const wc_ptr_t wc_off_on_addr[2] = + { + #if defined(WC_64BIT_CPU) + W64LIT(0x0000000000000000), + W64LIT(0xffffffffffffffff) + #elif defined(WC_16BIT_CPU) + 0x0000U, + 0xffffU + #else + /* 32 bit */ + 0x00000000U, + 0xffffffffU + #endif + }; +#endif #ifdef WC_NO_CACHE_RESISTANT c[0] = r; @@ -6387,8 +6389,6 @@ int wc_MakeSakkePointI(SakkeKey* key, const byte* id, word16 idSz) err = BAD_FUNC_ARG; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - if (err == 0) { err = sakke_load_params(key); } @@ -6401,8 +6401,6 @@ int wc_MakeSakkePointI(SakkeKey* key, const byte* id, word16 idSz) key->i.idSz = idSz; } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -6532,9 +6530,7 @@ int wc_GenerateSakkePointITable(SakkeKey* key, byte* table, word32* len) #ifdef WOLFSSL_HAVE_SP_ECC if (err == 0) { - SAVE_VECTOR_REGISTERS(return _svr_ret;); err = sp_ecc_gen_table_1024(key->i.i, table, len, key->heap); - RESTORE_VECTOR_REGISTERS(); } if (err == 0) { key->i.table = table; @@ -6722,8 +6718,6 @@ int wc_MakeSakkeEncapsulatedSSV(SakkeKey* key, enum wc_HashType hashType, err = BAD_STATE_E; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - /* Load parameters */ if (err == 0) { err = sakke_load_params(key); @@ -6799,8 +6793,6 @@ int wc_MakeSakkeEncapsulatedSSV(SakkeKey* key, enum wc_HashType hashType, /* Step 6: Output SSV - already encoded in buffer */ - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -6898,7 +6890,9 @@ int wc_DeriveSakkeSSV(SakkeKey* key, enum wc_HashType hashType, byte* ssv, mp_int* ri = NULL; byte* wb = NULL; byte* test = NULL; - byte a[WC_MAX_DIGEST_SIZE] = {0}; + byte a[WC_MAX_DIGEST_SIZE]; + + XMEMSET(a, 0, sizeof(a)); if ((key == NULL) || (ssv == NULL) || (auth == NULL) || (ssvSz == 0)) { err = BAD_FUNC_ARG; @@ -6907,8 +6901,6 @@ int wc_DeriveSakkeSSV(SakkeKey* key, enum wc_HashType hashType, byte* ssv, err = BAD_STATE_E; } - SAVE_VECTOR_REGISTERS(return _svr_ret;); - /* Load parameters */ if (err == 0) { err = sakke_load_params(key); @@ -6979,8 +6971,6 @@ int wc_DeriveSakkeSSV(SakkeKey* key, enum wc_HashType hashType, byte* ssv, err = SAKKE_VERIFY_FAIL_E; } - RESTORE_VECTOR_REGISTERS(); - return err; } #endif /* WOLFCRYPT_SAKKE_CLIENT */ diff --git a/wolfcrypt/src/sp_arm32.c b/wolfcrypt/src/sp_arm32.c index 41c7d9ce1eb..c7b7d44f8a7 100644 --- a/wolfcrypt/src/sp_arm32.c +++ b/wolfcrypt/src/sp_arm32.c @@ -47,6 +47,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile @@ -125606,8 +125617,6 @@ static WC_INLINE int sp_521_div_17(const sp_digit* a, const sp_digit* d, sp_digit r1; int i; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = (d[16] << 23) | (d[15] >> 9); XMEMCPY(t1, a, sizeof(*t1) * 2 * 17); diff --git a/wolfcrypt/src/sp_arm64.c b/wolfcrypt/src/sp_arm64.c index 402e75a6db0..60231b5daa2 100644 --- a/wolfcrypt/src/sp_arm64.c +++ b/wolfcrypt/src/sp_arm64.c @@ -47,6 +47,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile @@ -69631,8 +69642,6 @@ static WC_INLINE int sp_521_div_9(const sp_digit* a, const sp_digit* d, sp_digit r1; int i; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = (d[8] << 55) | (d[7] >> 9); XMEMCPY(t1, a, sizeof(*t1) * 2 * 9); diff --git a/wolfcrypt/src/sp_armthumb.c b/wolfcrypt/src/sp_armthumb.c index b479c93b9bd..a75207abcc9 100644 --- a/wolfcrypt/src/sp_armthumb.c +++ b/wolfcrypt/src/sp_armthumb.c @@ -47,6 +47,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile @@ -131069,8 +131080,6 @@ static WC_INLINE int sp_521_div_17(const sp_digit* a, const sp_digit* d, sp_digit r1; int i; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = (d[16] << 23) | (d[15] >> 9); XMEMCPY(t1, a, sizeof(*t1) * 2 * 17); diff --git a/wolfcrypt/src/sp_c32.c b/wolfcrypt/src/sp_c32.c index 907c04c61ad..642e1c1d490 100644 --- a/wolfcrypt/src/sp_c32.c +++ b/wolfcrypt/src/sp_c32.c @@ -51,6 +51,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile diff --git a/wolfcrypt/src/sp_c64.c b/wolfcrypt/src/sp_c64.c index ae32ae2ce77..44028d37694 100644 --- a/wolfcrypt/src/sp_c64.c +++ b/wolfcrypt/src/sp_c64.c @@ -51,6 +51,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile diff --git a/wolfcrypt/src/sp_cortexm.c b/wolfcrypt/src/sp_cortexm.c index 9a334f4d4a4..306309aba98 100644 --- a/wolfcrypt/src/sp_cortexm.c +++ b/wolfcrypt/src/sp_cortexm.c @@ -47,6 +47,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile @@ -64063,8 +64074,6 @@ static WC_INLINE int sp_521_div_17(const sp_digit* a, const sp_digit* d, sp_digit r1; int i; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = (d[16] << 23) | (d[15] >> 9); XMEMCPY(t1, a, sizeof(*t1) * 2 * 17); diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index 71ad6c25bee..ff5a33e2e60 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -125,8 +125,6 @@ This library provides single precision (SP) integer math functions. * WOLFSSL_NO_ASM: Disable all assembly implementations * WOLFSSL_KEIL: Keil compiler in use, affects inline assembly * syntax - * WOLFSSL_USE_SAVE_VECTOR_REGISTERS: Save/restore vector registers around - * SP ASM calls * WOLFSSL_SP_INT_LARGE_COMBA: Enable large Comba multiplication and * squaring * WOLFSSL_SP_INT_SQR_VOLATILE: Declare squaring intermediate variables as @@ -198,15 +196,6 @@ This library provides single precision (SP) integer math functions. PRAGMA_GCC("GCC diagnostic ignored \"-Warray-bounds\"") #endif -#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) - /* force off unneeded vector register save/restore. */ - #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(fail_clause) \ - SAVE_NO_VECTOR_REGISTERS(fail_clause) - #undef RESTORE_VECTOR_REGISTERS - #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() -#endif - /* DECL_SP_INT: Declare one variable of type 'sp_int'. */ #if (defined(WOLFSSL_SMALL_STACK) || defined(SP_ALLOC)) && \ !defined(WOLFSSL_SP_NO_MALLOC) @@ -5487,6 +5476,22 @@ static void _sp_copy_2_ct(const sp_int* a1, const sp_int* a2, sp_int* r1, sp_int* r2, int y, unsigned int used) { unsigned int i; +#ifdef WC_NO_GLOBAL_OBJECT_POINTERS + static const wc_ptr_t wc_off_on_addr[2] = + { + #if defined(WC_64BIT_CPU) + W64LIT(0x0000000000000000), + W64LIT(0xffffffffffffffff) + #elif defined(WC_16BIT_CPU) + 0x0000U, + 0xffffU + #else + /* 32 bit */ + 0x00000000U, + 0xffffffffU + #endif + }; +#endif /* Copy data - constant time. */ for (i = 0; i < used; i++) { @@ -14329,11 +14334,9 @@ int sp_exptmod(const sp_int* b, const sp_int* e, const sp_int* m, sp_int* r) if ((b == NULL) || (e == NULL) || (m == NULL) || (r == NULL)) { err = MP_VAL; } - SAVE_VECTOR_REGISTERS(err = _svr_ret;); if (err == MP_OKAY) { err = sp_exptmod_ex(b, e, (int)e->used, m, r); } - RESTORE_VECTOR_REGISTERS(); return err; } #endif @@ -19554,8 +19557,6 @@ int sp_prime_is_prime(const sp_int* a, int trials, int* result) haveRes = 1; } - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - /* Check against known small primes when a has 1 digit. */ if ((err == MP_OKAY) && (!haveRes) && (a->used == 1) && (a->dp[0] <= sp_primes[SP_PRIME_SIZE - 1])) { @@ -19572,8 +19573,6 @@ int sp_prime_is_prime(const sp_int* a, int trials, int* result) err = _sp_prime_trials(a, trials, result); } - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -19714,8 +19713,6 @@ int sp_prime_is_prime_ex(const sp_int* a, int trials, int* result, WC_RNG* rng) haveRes = 1; } - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - /* Check against known small primes when a has 1 digit. */ if ((err == MP_OKAY) && (!haveRes) && (a->used == 1) && (a->dp[0] <= (sp_int_digit)sp_primes[SP_PRIME_SIZE - 1])) { @@ -19740,8 +19737,6 @@ int sp_prime_is_prime_ex(const sp_int* a, int trials, int* result, WC_RNG* rng) *result = ret; } - RESTORE_VECTOR_REGISTERS(); - return err; } #endif /* WOLFSSL_SP_PRIME_GEN */ @@ -19783,8 +19778,6 @@ static WC_INLINE int _sp_gcd(const sp_int* a, const sp_int* b, sp_int* r) unsigned int used = (a->used >= b->used) ? a->used + 1U : b->used + 1U; DECL_SP_INT_ARRAY(d, used, 3); - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - ALLOC_SP_INT_ARRAY(d, used, 3, err, NULL); if (err == MP_OKAY) { u = d[0]; @@ -19849,8 +19842,6 @@ static WC_INLINE int _sp_gcd(const sp_int* a, const sp_int* b, sp_int* r) FREE_SP_INT_ARRAY(d, NULL); - RESTORE_VECTOR_REGISTERS(); - return err; } @@ -19955,8 +19946,6 @@ static int _sp_lcm(const sp_int* a, const sp_int* b, sp_int* r) _sp_init_size(t[0], used); _sp_init_size(t[1], used); - SAVE_VECTOR_REGISTERS(err = _svr_ret;); - if (err == MP_OKAY) { /* 1. t0 = gcd(a, b) */ err = sp_gcd(a, b, t[0]); @@ -19985,8 +19974,6 @@ static int _sp_lcm(const sp_int* a, const sp_int* b, sp_int* r) } } } - - RESTORE_VECTOR_REGISTERS(); } FREE_SP_INT_ARRAY(t, NULL); diff --git a/wolfcrypt/src/sp_x86_64.c b/wolfcrypt/src/sp_x86_64.c index 37a4bac2325..14c0b2ccc9c 100644 --- a/wolfcrypt/src/sp_x86_64.c +++ b/wolfcrypt/src/sp_x86_64.c @@ -47,6 +47,17 @@ #include +#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \ + !defined(DEBUG_VECTOR_REGISTER_ACCESS) + /* force off unneeded vector register save/restore. */ + #undef SAVE_VECTOR_REGISTERS + #define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause) + #undef SAVE_VECTOR_REGISTERS2 + #define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2() + #undef RESTORE_VECTOR_REGISTERS + #define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS() +#endif + #ifdef __IAR_SYSTEMS_ICC__ #define __asm__ asm #define __volatile__ volatile @@ -429,8 +440,6 @@ static void sp_2048_mont_norm_16(sp_digit* r, const sp_digit* m) { XMEMSET(r, 0, sizeof(sp_digit) * 16); - ASSERT_SAVED_VECTOR_REGISTERS(); - /* r = 2^n mod m */ sp_2048_sub_in_place_16(r, m); } @@ -520,7 +529,6 @@ extern sp_digit div_2048_word_asm_16(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_2048_word_16(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -539,7 +547,6 @@ static WC_INLINE sp_digit div_2048_word_16(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -607,8 +614,6 @@ static WC_INLINE int sp_2048_div_16(const sp_digit* a, const sp_digit* d, sp_dig word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[15]; @@ -661,18 +666,38 @@ static WC_INLINE int sp_2048_div_16(const sp_digit* a, const sp_digit* d, sp_dig static WC_INLINE int sp_2048_mod_16(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_2048_div_16(a, m, NULL, r); } -#ifdef __cplusplus -extern "C" { -#endif -extern void sp_2048_get_from_table_16(sp_digit* r, sp_digit** table, int idx); -#ifdef __cplusplus -} -#endif +#ifndef WC_NO_CACHE_RESISTANT +static void sp_2048_get_from_table_16(sp_digit* r, + sp_digit** table, int idx) +{ + int e, j; + sp_digit mask; + sp_digit diff; + + for (j = 0; j < 16; j++) { + r[j] = 0; + } + + for (e = 0; e < 32; e++) { + /* Constant-time: mask = (e == idx) ? ~0 : 0 + * diff = e ^ idx is 0 iff equal. + * (diff | -diff) has its sign bit set iff diff != 0. + * Shift to get 1/0, subtract from 1 to invert, negate to mask. + */ + diff = (sp_digit)(e ^ idx); + diff = (diff | ((sp_digit)0 - diff)) + >> (sizeof(sp_digit) * 8 - 1); /* 1 if !=, 0 if == */ + mask = (sp_digit)0 - ((sp_digit)1 - diff); /* all-1 if ==, else 0 */ + for (j = 0; j < 16; j++) { + r[j] |= table[e][j] & mask; + } + } +} +#endif /* !WC_NO_CACHE_RESISTANT */ /* Modular exponentiate a to the e mod m. (r = a^e mod m) * * r A single precision number that is the result of the operation. @@ -699,8 +724,6 @@ static int sp_2048_mod_exp_16(sp_digit* r, const sp_digit* a, const sp_digit* e, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -869,6 +892,7 @@ extern void sp_2048_mont_reduce_avx2_16(sp_digit* a, const sp_digit* m, sp_digit SP_NOINLINE static void sp_2048_mont_mul_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_2048_mul_avx2_16(r, a, b); sp_2048_mont_reduce_avx2_16(r, m, mp); } @@ -885,6 +909,7 @@ SP_NOINLINE static void sp_2048_mont_mul_avx2_16(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_2048_mont_sqr_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_2048_sqr_avx2_16(r, a); sp_2048_mont_reduce_avx2_16(r, m, mp); } @@ -926,7 +951,6 @@ static int sp_2048_mod_exp_avx2_16(sp_digit* r, const sp_digit* a, const sp_digi int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -1089,8 +1113,6 @@ static void sp_2048_mont_norm_32(sp_digit* r, const sp_digit* m) { XMEMSET(r, 0, sizeof(sp_digit) * 32); - ASSERT_SAVED_VECTOR_REGISTERS(); - /* r = 2^n mod m */ sp_2048_sub_in_place_32(r, m); } @@ -1174,7 +1196,6 @@ extern sp_digit div_2048_word_asm_32(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_2048_word_32(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -1193,7 +1214,6 @@ static WC_INLINE sp_digit div_2048_word_32(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -1224,8 +1244,6 @@ static WC_INLINE int sp_2048_div_32_cond(const sp_digit* a, const sp_digit* d, s word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[31]; @@ -1284,7 +1302,6 @@ static WC_INLINE int sp_2048_div_32_cond(const sp_digit* a, const sp_digit* d, s static WC_INLINE int sp_2048_mod_32_cond(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_2048_div_32_cond(a, m, NULL, r); } @@ -1354,8 +1371,6 @@ static WC_INLINE int sp_2048_div_32(const sp_digit* a, const sp_digit* d, sp_dig word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[31]; @@ -1409,19 +1424,39 @@ static WC_INLINE int sp_2048_div_32(const sp_digit* a, const sp_digit* d, sp_dig static WC_INLINE int sp_2048_mod_32(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_2048_div_32(a, m, NULL, r); } #endif /* WOLFSSL_HAVE_SP_DH || !WOLFSSL_RSA_PUBLIC_ONLY */ -#ifdef __cplusplus -extern "C" { -#endif -extern void sp_2048_get_from_table_32(sp_digit* r, sp_digit** table, int idx); -#ifdef __cplusplus -} -#endif +#ifndef WC_NO_CACHE_RESISTANT +static void sp_2048_get_from_table_32(sp_digit* r, + sp_digit** table, int idx) +{ + int e, j; + sp_digit mask; + sp_digit diff; + + for (j = 0; j < 32; j++) { + r[j] = 0; + } + + for (e = 0; e < 64; e++) { + /* Constant-time: mask = (e == idx) ? ~0 : 0 + * diff = e ^ idx is 0 iff equal. + * (diff | -diff) has its sign bit set iff diff != 0. + * Shift to get 1/0, subtract from 1 to invert, negate to mask. + */ + diff = (sp_digit)(e ^ idx); + diff = (diff | ((sp_digit)0 - diff)) + >> (sizeof(sp_digit) * 8 - 1); /* 1 if !=, 0 if == */ + mask = (sp_digit)0 - ((sp_digit)1 - diff); /* all-1 if ==, else 0 */ + for (j = 0; j < 32; j++) { + r[j] |= table[e][j] & mask; + } + } +} +#endif /* !WC_NO_CACHE_RESISTANT */ /* Modular exponentiate a to the e mod m. (r = a^e mod m) * * r A single precision number that is the result of the operation. @@ -1448,8 +1483,6 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -1652,6 +1685,7 @@ extern void sp_2048_mont_reduce_avx2_32(sp_digit* a, const sp_digit* m, sp_digit SP_NOINLINE static void sp_2048_mont_mul_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_2048_mul_avx2_32(r, a, b); sp_2048_mont_reduce_avx2_32(r, m, mp); } @@ -1668,6 +1702,7 @@ SP_NOINLINE static void sp_2048_mont_mul_avx2_32(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_2048_mont_sqr_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_2048_sqr_avx2_32(r, a); sp_2048_mont_reduce_avx2_32(r, m, mp); } @@ -1710,7 +1745,6 @@ static int sp_2048_mod_exp_avx2_32(sp_digit* r, const sp_digit* a, const sp_digi int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -1918,10 +1952,9 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (*outLen < 256) { err = MP_TO_E; } @@ -1953,6 +1986,13 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, if (err == MP_OKAY) { sp_2048_from_mp(m, 32, mm); +#ifdef HAVE_INTEL_AVX2 + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; +#endif + if (e == 0x10001) { int i; sp_digit mp; @@ -1967,9 +2007,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, if (err == MP_OKAY) { /* r = a ^ 0x10000 => r = a squared 16 times */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { for (i = 15; i >= 0; i--) { sp_2048_mont_sqr_avx2_32(r, r, m, mp); } @@ -1977,7 +2015,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, * mont_red(r.R * a) = (r.R.a / R) mod m = r.a mod m */ sp_2048_mont_mul_avx2_32(r, r, ah, m, mp); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -2001,9 +2038,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } else if (e == 0x3) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { if (err == MP_OKAY) { sp_2048_sqr_avx2_32(r, ah); err = sp_2048_mod_32_cond(r, r, m); @@ -2012,7 +2047,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, sp_2048_mul_avx2_32(r, ah, r); err = sp_2048_mod_32_cond(r, r, m); } - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -2046,9 +2080,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, XMEMCPY(r, a, sizeof(sp_digit) * 32); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { for (i--; i>=0; i--) { sp_2048_mont_sqr_avx2_32(r, r, m, mp); if (((e >> i) & 1) == 1) { @@ -2057,7 +2089,6 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } XMEMSET(&r[32], 0, sizeof(sp_digit) * 32); sp_2048_mont_reduce_avx2_32(r, m, mp); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -2087,6 +2118,11 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, *outLen = 256; } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(a, NULL, DYNAMIC_TYPE_RSA); return err; @@ -2121,8 +2157,6 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, sp_digit* r = NULL; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)pm; (void)qm; (void)dpm; @@ -2220,10 +2254,9 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)dm; (void)mm; @@ -2244,6 +2277,7 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, } SP_ALLOC_VAR(sp_digit, a, 16 * 11, NULL, DYNAMIC_TYPE_RSA); + if (err == MP_OKAY) { p = a + 32 * 2; q = p + 16; @@ -2259,10 +2293,11 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + + if (saved_vector_registers) err = sp_2048_mod_exp_avx2_16(tmpa, a, dp, 1024, p, 1); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_2048_mod_exp_16(tmpa, a, dp, 1024, p, 1); @@ -2270,11 +2305,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, if (err == MP_OKAY) { sp_2048_from_mp(dq, 16, dqm); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) err = sp_2048_mod_exp_avx2_16(tmpb, a, dq, 1024, q, 1); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_2048_mod_exp_16(tmpb, a, dq, 1024, q, 1); @@ -2283,11 +2315,9 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, if (err == MP_OKAY) { c = sp_2048_sub_in_place_16(tmpa, tmpb); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { c += sp_2048_cond_add_avx2_16(tmpa, tmpa, p, c); sp_2048_cond_add_avx2_16(tmpa, tmpa, p, c); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -2298,31 +2328,21 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, sp_2048_from_mp(qi, 16, qim); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_2048_mul_avx2_16(tmpa, tmpa, qi); - RESTORE_VECTOR_REGISTERS(); - } else #endif - { sp_2048_mul_16(tmpa, tmpa, qi); - } err = sp_2048_mod_16(tmpa, tmpa, p); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_2048_mul_avx2_16(tmpa, q, tmpa); - RESTORE_VECTOR_REGISTERS(); - } else #endif - { sp_2048_mul_16(tmpa, q, tmpa); - } XMEMSET(&tmpb[16], 0, sizeof(sp_digit) * 16); sp_2048_add_32(r, tmpb, tmpa); @@ -2330,6 +2350,11 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, *outLen = 256; } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_ZEROFREE_VAR(sp_digit, a, 16 * 11, NULL, DYNAMIC_TYPE_RSA); return err; @@ -2429,8 +2454,6 @@ int sp_ModExp_2048(const mp_int* base, const mp_int* exp, const mp_int* mod, #endif int expBits = mp_count_bits(exp); - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 2048) { err = MP_READ_E; } @@ -2512,7 +2535,6 @@ static int sp_2048_mod_exp_2_avx2_32(sp_digit* r, const sp_digit* e, int bits, int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -2630,8 +2652,6 @@ static int sp_2048_mod_exp_2_32(sp_digit* r, const sp_digit* e, int bits, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -2750,8 +2770,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 2048) { err = MP_READ_E; } @@ -2843,8 +2861,6 @@ int sp_ModExp_1024(const mp_int* base, const mp_int* exp, const mp_int* mod, #endif int expBits = mp_count_bits(exp); - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 1024) { err = MP_READ_E; } @@ -3238,8 +3254,6 @@ static void sp_3072_mont_norm_24(sp_digit* r, const sp_digit* m) { XMEMSET(r, 0, sizeof(sp_digit) * 24); - ASSERT_SAVED_VECTOR_REGISTERS(); - /* r = 2^n mod m */ sp_3072_sub_in_place_24(r, m); } @@ -3329,7 +3343,6 @@ extern sp_digit div_3072_word_asm_24(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_3072_word_24(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -3348,7 +3361,6 @@ static WC_INLINE sp_digit div_3072_word_24(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -3416,8 +3428,6 @@ static WC_INLINE int sp_3072_div_24(const sp_digit* a, const sp_digit* d, sp_dig word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[23]; @@ -3470,18 +3480,38 @@ static WC_INLINE int sp_3072_div_24(const sp_digit* a, const sp_digit* d, sp_dig static WC_INLINE int sp_3072_mod_24(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_3072_div_24(a, m, NULL, r); } -#ifdef __cplusplus -extern "C" { -#endif -extern void sp_3072_get_from_table_24(sp_digit* r, sp_digit** table, int idx); -#ifdef __cplusplus -} -#endif +#ifndef WC_NO_CACHE_RESISTANT +static void sp_3072_get_from_table_24(sp_digit* r, + sp_digit** table, int idx) +{ + int e, j; + sp_digit mask; + sp_digit diff; + + for (j = 0; j < 24; j++) { + r[j] = 0; + } + + for (e = 0; e < 32; e++) { + /* Constant-time: mask = (e == idx) ? ~0 : 0 + * diff = e ^ idx is 0 iff equal. + * (diff | -diff) has its sign bit set iff diff != 0. + * Shift to get 1/0, subtract from 1 to invert, negate to mask. + */ + diff = (sp_digit)(e ^ idx); + diff = (diff | ((sp_digit)0 - diff)) + >> (sizeof(sp_digit) * 8 - 1); /* 1 if !=, 0 if == */ + mask = (sp_digit)0 - ((sp_digit)1 - diff); /* all-1 if ==, else 0 */ + for (j = 0; j < 24; j++) { + r[j] |= table[e][j] & mask; + } + } +} +#endif /* !WC_NO_CACHE_RESISTANT */ /* Modular exponentiate a to the e mod m. (r = a^e mod m) * * r A single precision number that is the result of the operation. @@ -3508,8 +3538,6 @@ static int sp_3072_mod_exp_24(sp_digit* r, const sp_digit* a, const sp_digit* e, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -3678,6 +3706,7 @@ extern void sp_3072_mont_reduce_avx2_24(sp_digit* a, const sp_digit* m, sp_digit SP_NOINLINE static void sp_3072_mont_mul_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_3072_mul_avx2_24(r, a, b); sp_3072_mont_reduce_avx2_24(r, m, mp); } @@ -3694,6 +3723,7 @@ SP_NOINLINE static void sp_3072_mont_mul_avx2_24(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_3072_mont_sqr_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_3072_sqr_avx2_24(r, a); sp_3072_mont_reduce_avx2_24(r, m, mp); } @@ -3735,7 +3765,6 @@ static int sp_3072_mod_exp_avx2_24(sp_digit* r, const sp_digit* a, const sp_digi int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -3898,8 +3927,6 @@ static void sp_3072_mont_norm_48(sp_digit* r, const sp_digit* m) { XMEMSET(r, 0, sizeof(sp_digit) * 48); - ASSERT_SAVED_VECTOR_REGISTERS(); - /* r = 2^n mod m */ sp_3072_sub_in_place_48(r, m); } @@ -3983,7 +4010,6 @@ extern sp_digit div_3072_word_asm_48(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_3072_word_48(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -4002,7 +4028,6 @@ static WC_INLINE sp_digit div_3072_word_48(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -4033,8 +4058,6 @@ static WC_INLINE int sp_3072_div_48_cond(const sp_digit* a, const sp_digit* d, s word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[47]; @@ -4093,7 +4116,6 @@ static WC_INLINE int sp_3072_div_48_cond(const sp_digit* a, const sp_digit* d, s static WC_INLINE int sp_3072_mod_48_cond(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_3072_div_48_cond(a, m, NULL, r); } @@ -4163,8 +4185,6 @@ static WC_INLINE int sp_3072_div_48(const sp_digit* a, const sp_digit* d, sp_dig word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[47]; @@ -4218,19 +4238,39 @@ static WC_INLINE int sp_3072_div_48(const sp_digit* a, const sp_digit* d, sp_dig static WC_INLINE int sp_3072_mod_48(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_3072_div_48(a, m, NULL, r); } #endif /* WOLFSSL_HAVE_SP_DH || !WOLFSSL_RSA_PUBLIC_ONLY */ -#ifdef __cplusplus -extern "C" { -#endif -extern void sp_3072_get_from_table_48(sp_digit* r, sp_digit** table, int idx); -#ifdef __cplusplus -} -#endif +#ifndef WC_NO_CACHE_RESISTANT +static void sp_3072_get_from_table_48(sp_digit* r, + sp_digit** table, int idx) +{ + int e, j; + sp_digit mask; + sp_digit diff; + + for (j = 0; j < 48; j++) { + r[j] = 0; + } + for (e = 0; e < 16; e++) { + /* Constant-time: mask = (e == idx) ? ~0 : 0 + * diff = e ^ idx is 0 iff equal. + * (diff | -diff) has its sign bit set iff diff != 0. + * Shift to get 1/0, subtract from 1 to invert, negate to mask. + */ + diff = (sp_digit)(e ^ idx); + diff = (diff | ((sp_digit)0 - diff)) + >> (sizeof(sp_digit) * 8 - 1); /* 1 if !=, 0 if == */ + mask = (sp_digit)0 - ((sp_digit)1 - diff); /* all-1 if ==, else 0 */ + + for (j = 0; j < 48; j++) { + r[j] |= table[e][j] & mask; + } + } +} +#endif /* !WC_NO_CACHE_RESISTANT */ /* Modular exponentiate a to the e mod m. (r = a^e mod m) * * r A single precision number that is the result of the operation. @@ -4257,8 +4297,6 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -4409,6 +4447,7 @@ extern void sp_3072_mont_reduce_avx2_48(sp_digit* a, const sp_digit* m, sp_digit SP_NOINLINE static void sp_3072_mont_mul_avx2_48(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_3072_mul_avx2_48(r, a, b); sp_3072_mont_reduce_avx2_48(r, m, mp); } @@ -4425,6 +4464,7 @@ SP_NOINLINE static void sp_3072_mont_mul_avx2_48(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_3072_mont_sqr_avx2_48(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_3072_sqr_avx2_48(r, a); sp_3072_mont_reduce_avx2_48(r, m, mp); } @@ -4467,7 +4507,6 @@ static int sp_3072_mod_exp_avx2_48(sp_digit* r, const sp_digit* a, const sp_digi int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -4623,10 +4662,9 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (*outLen < 384) { err = MP_TO_E; } @@ -4658,6 +4696,13 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, if (err == MP_OKAY) { sp_3072_from_mp(m, 48, mm); +#ifdef HAVE_INTEL_AVX2 + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; +#endif + if (e == 0x10001) { int i; sp_digit mp; @@ -4672,9 +4717,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, if (err == MP_OKAY) { /* r = a ^ 0x10000 => r = a squared 16 times */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { for (i = 15; i >= 0; i--) { sp_3072_mont_sqr_avx2_48(r, r, m, mp); } @@ -4682,7 +4725,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, * mont_red(r.R * a) = (r.R.a / R) mod m = r.a mod m */ sp_3072_mont_mul_avx2_48(r, r, ah, m, mp); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -4706,9 +4748,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } else if (e == 0x3) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { if (err == MP_OKAY) { sp_3072_sqr_avx2_48(r, ah); err = sp_3072_mod_48_cond(r, r, m); @@ -4717,7 +4757,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, sp_3072_mul_avx2_48(r, ah, r); err = sp_3072_mod_48_cond(r, r, m); } - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -4751,9 +4790,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, XMEMCPY(r, a, sizeof(sp_digit) * 48); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { for (i--; i>=0; i--) { sp_3072_mont_sqr_avx2_48(r, r, m, mp); if (((e >> i) & 1) == 1) { @@ -4762,7 +4799,6 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } XMEMSET(&r[48], 0, sizeof(sp_digit) * 48); sp_3072_mont_reduce_avx2_48(r, m, mp); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -4792,6 +4828,11 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, *outLen = 384; } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(a, NULL, DYNAMIC_TYPE_RSA); return err; @@ -4826,8 +4867,6 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, sp_digit* r = NULL; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)pm; (void)qm; (void)dpm; @@ -4925,10 +4964,9 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)dm; (void)mm; @@ -4949,6 +4987,7 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, } SP_ALLOC_VAR(sp_digit, a, 24 * 11, NULL, DYNAMIC_TYPE_RSA); + if (err == MP_OKAY) { p = a + 48 * 2; q = p + 24; @@ -4964,10 +5003,11 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + + if (saved_vector_registers) err = sp_3072_mod_exp_avx2_24(tmpa, a, dp, 1536, p, 1); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_3072_mod_exp_24(tmpa, a, dp, 1536, p, 1); @@ -4975,11 +5015,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, if (err == MP_OKAY) { sp_3072_from_mp(dq, 24, dqm); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) err = sp_3072_mod_exp_avx2_24(tmpb, a, dq, 1536, q, 1); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_3072_mod_exp_24(tmpb, a, dq, 1536, q, 1); @@ -4988,11 +5025,9 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, if (err == MP_OKAY) { c = sp_3072_sub_in_place_24(tmpa, tmpb); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { c += sp_3072_cond_add_avx2_24(tmpa, tmpa, p, c); sp_3072_cond_add_avx2_24(tmpa, tmpa, p, c); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -5003,31 +5038,21 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, sp_3072_from_mp(qi, 24, qim); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_3072_mul_avx2_24(tmpa, tmpa, qi); - RESTORE_VECTOR_REGISTERS(); - } else #endif - { sp_3072_mul_24(tmpa, tmpa, qi); - } err = sp_3072_mod_24(tmpa, tmpa, p); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_3072_mul_avx2_24(tmpa, q, tmpa); - RESTORE_VECTOR_REGISTERS(); - } else #endif - { sp_3072_mul_24(tmpa, q, tmpa); - } XMEMSET(&tmpb[24], 0, sizeof(sp_digit) * 24); sp_3072_add_48(r, tmpb, tmpa); @@ -5035,6 +5060,11 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, *outLen = 384; } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_ZEROFREE_VAR(sp_digit, a, 24 * 11, NULL, DYNAMIC_TYPE_RSA); return err; @@ -5134,8 +5164,6 @@ int sp_ModExp_3072(const mp_int* base, const mp_int* exp, const mp_int* mod, #endif int expBits = mp_count_bits(exp); - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 3072) { err = MP_READ_E; } @@ -5217,7 +5245,6 @@ static int sp_3072_mod_exp_2_avx2_48(sp_digit* r, const sp_digit* e, int bits, int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -5335,8 +5362,6 @@ static int sp_3072_mod_exp_2_48(sp_digit* r, const sp_digit* e, int bits, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -5455,8 +5480,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 3072) { err = MP_READ_E; } @@ -5548,8 +5571,6 @@ int sp_ModExp_1536(const mp_int* base, const mp_int* exp, const mp_int* mod, #endif int expBits = mp_count_bits(exp); - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 1536) { err = MP_READ_E; } @@ -5859,8 +5880,6 @@ static void sp_4096_mont_norm_64(sp_digit* r, const sp_digit* m) { XMEMSET(r, 0, sizeof(sp_digit) * 64); - ASSERT_SAVED_VECTOR_REGISTERS(); - /* r = 2^n mod m */ sp_4096_sub_in_place_64(r, m); } @@ -5944,7 +5963,6 @@ extern sp_digit div_4096_word_asm_64(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_4096_word_64(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -5963,7 +5981,6 @@ static WC_INLINE sp_digit div_4096_word_64(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -5994,8 +6011,6 @@ static WC_INLINE int sp_4096_div_64_cond(const sp_digit* a, const sp_digit* d, s word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[63]; @@ -6054,7 +6069,6 @@ static WC_INLINE int sp_4096_div_64_cond(const sp_digit* a, const sp_digit* d, s static WC_INLINE int sp_4096_mod_64_cond(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_4096_div_64_cond(a, m, NULL, r); } @@ -6124,8 +6138,6 @@ static WC_INLINE int sp_4096_div_64(const sp_digit* a, const sp_digit* d, sp_dig word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[63]; @@ -6179,19 +6191,39 @@ static WC_INLINE int sp_4096_div_64(const sp_digit* a, const sp_digit* d, sp_dig static WC_INLINE int sp_4096_mod_64(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_4096_div_64(a, m, NULL, r); } #endif /* WOLFSSL_HAVE_SP_DH || !WOLFSSL_RSA_PUBLIC_ONLY */ -#ifdef __cplusplus -extern "C" { -#endif -extern void sp_4096_get_from_table_64(sp_digit* r, sp_digit** table, int idx); -#ifdef __cplusplus -} -#endif +#ifndef WC_NO_CACHE_RESISTANT +static void sp_4096_get_from_table_64(sp_digit* r, + sp_digit** table, int idx) +{ + int e, j; + sp_digit mask; + sp_digit diff; + + for (j = 0; j < 64; j++) { + r[j] = 0; + } + + for (e = 0; e < 16; e++) { + /* Constant-time: mask = (e == idx) ? ~0 : 0 + * diff = e ^ idx is 0 iff equal. + * (diff | -diff) has its sign bit set iff diff != 0. + * Shift to get 1/0, subtract from 1 to invert, negate to mask. + */ + diff = (sp_digit)(e ^ idx); + diff = (diff | ((sp_digit)0 - diff)) + >> (sizeof(sp_digit) * 8 - 1); /* 1 if !=, 0 if == */ + mask = (sp_digit)0 - ((sp_digit)1 - diff); /* all-1 if ==, else 0 */ + for (j = 0; j < 64; j++) { + r[j] |= table[e][j] & mask; + } + } +} +#endif /* !WC_NO_CACHE_RESISTANT */ /* Modular exponentiate a to the e mod m. (r = a^e mod m) * * r A single precision number that is the result of the operation. @@ -6218,8 +6250,6 @@ static int sp_4096_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -6370,6 +6400,7 @@ extern void sp_4096_mont_reduce_avx2_64(sp_digit* a, const sp_digit* m, sp_digit SP_NOINLINE static void sp_4096_mont_mul_avx2_64(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_4096_mul_avx2_64(r, a, b); sp_4096_mont_reduce_avx2_64(r, m, mp); } @@ -6386,6 +6417,7 @@ SP_NOINLINE static void sp_4096_mont_mul_avx2_64(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_4096_mont_sqr_avx2_64(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_4096_sqr_avx2_64(r, a); sp_4096_mont_reduce_avx2_64(r, m, mp); } @@ -6428,7 +6460,6 @@ static int sp_4096_mod_exp_avx2_64(sp_digit* r, const sp_digit* a, const sp_digi int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -6584,10 +6615,9 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (*outLen < 512) { err = MP_TO_E; } @@ -6619,6 +6649,13 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, if (err == MP_OKAY) { sp_4096_from_mp(m, 64, mm); +#ifdef HAVE_INTEL_AVX2 + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && + (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; +#endif + if (e == 0x10001) { int i; sp_digit mp; @@ -6633,9 +6670,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, if (err == MP_OKAY) { /* r = a ^ 0x10000 => r = a squared 16 times */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { for (i = 15; i >= 0; i--) { sp_4096_mont_sqr_avx2_64(r, r, m, mp); } @@ -6643,7 +6678,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, * mont_red(r.R * a) = (r.R.a / R) mod m = r.a mod m */ sp_4096_mont_mul_avx2_64(r, r, ah, m, mp); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -6667,9 +6701,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } else if (e == 0x3) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { if (err == MP_OKAY) { sp_4096_sqr_avx2_64(r, ah); err = sp_4096_mod_64_cond(r, r, m); @@ -6678,7 +6710,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, sp_4096_mul_avx2_64(r, ah, r); err = sp_4096_mod_64_cond(r, r, m); } - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -6712,9 +6743,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, XMEMCPY(r, a, sizeof(sp_digit) * 64); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { for (i--; i>=0; i--) { sp_4096_mont_sqr_avx2_64(r, r, m, mp); if (((e >> i) & 1) == 1) { @@ -6723,7 +6752,6 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } XMEMSET(&r[64], 0, sizeof(sp_digit) * 64); sp_4096_mont_reduce_avx2_64(r, m, mp); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -6753,6 +6781,11 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, *outLen = 512; } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(a, NULL, DYNAMIC_TYPE_RSA); return err; @@ -6787,8 +6820,6 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, sp_digit* r = NULL; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)pm; (void)qm; (void)dpm; @@ -6886,10 +6917,9 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)dm; (void)mm; @@ -6910,6 +6940,7 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, } SP_ALLOC_VAR(sp_digit, a, 32 * 11, NULL, DYNAMIC_TYPE_RSA); + if (err == MP_OKAY) { p = a + 64 * 2; q = p + 32; @@ -6925,10 +6956,11 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + + if (saved_vector_registers) err = sp_2048_mod_exp_avx2_32(tmpa, a, dp, 2048, p, 1); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_2048_mod_exp_32(tmpa, a, dp, 2048, p, 1); @@ -6936,11 +6968,8 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, if (err == MP_OKAY) { sp_4096_from_mp(dq, 32, dqm); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) err = sp_2048_mod_exp_avx2_32(tmpb, a, dq, 2048, q, 1); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_2048_mod_exp_32(tmpb, a, dq, 2048, q, 1); @@ -6949,11 +6978,9 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, if (err == MP_OKAY) { c = sp_2048_sub_in_place_32(tmpa, tmpb); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { c += sp_4096_cond_add_avx2_32(tmpa, tmpa, p, c); sp_4096_cond_add_avx2_32(tmpa, tmpa, p, c); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -6964,31 +6991,21 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, sp_2048_from_mp(qi, 32, qim); #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_2048_mul_avx2_32(tmpa, tmpa, qi); - RESTORE_VECTOR_REGISTERS(); - } else #endif - { sp_2048_mul_32(tmpa, tmpa, qi); - } err = sp_2048_mod_32(tmpa, tmpa, p); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_2048_mul_avx2_32(tmpa, q, tmpa); - RESTORE_VECTOR_REGISTERS(); - } else #endif - { sp_2048_mul_32(tmpa, q, tmpa); - } XMEMSET(&tmpb[32], 0, sizeof(sp_digit) * 32); sp_4096_add_64(r, tmpb, tmpa); @@ -6996,6 +7013,11 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, *outLen = 512; } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_ZEROFREE_VAR(sp_digit, a, 32 * 11, NULL, DYNAMIC_TYPE_RSA); return err; @@ -7095,8 +7117,6 @@ int sp_ModExp_4096(const mp_int* base, const mp_int* exp, const mp_int* mod, #endif int expBits = mp_count_bits(exp); - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 4096) { err = MP_READ_E; } @@ -7178,7 +7198,6 @@ static int sp_4096_mod_exp_2_avx2_64(sp_digit* r, const sp_digit* e, int bits, int err = MP_OKAY; ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -7296,8 +7315,6 @@ static int sp_4096_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits, byte y; int err = MP_OKAY; - ASSERT_SAVED_VECTOR_REGISTERS(); - if (bits == 0) { err = MP_VAL; } @@ -7416,8 +7433,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 4096) { err = MP_READ_E; } @@ -7636,8 +7651,6 @@ static int sp_256_mod_mul_norm_4(sp_digit* r, const sp_digit* a, const sp_digit* int64_t a32[8]; int64_t o; - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; a32[0] = (int64_t)(a[0] & 0xffffffff); @@ -10962,6 +10975,7 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_256, point, 2, heap, DYNAMIC_TYPE_ECC); @@ -10986,33 +11000,26 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_256_ecc_mulmod_avx2_4(point, point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_256_ecc_mulmod_4(point, point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_proj_point_add_avx2_4(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_proj_point_add_4(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_map_avx2_4(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_map_4(point, point, tmp); @@ -11021,6 +11028,11 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, err = sp_256_point_to_ecc_point_4(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, heap, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, heap, DYNAMIC_TYPE_ECC); @@ -23718,6 +23730,7 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_256, point, 2, NULL, DYNAMIC_TYPE_ECC); @@ -23741,33 +23754,26 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_256_ecc_mulmod_base_avx2_4(point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_256_ecc_mulmod_base_4(point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_proj_point_add_avx2_4(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_proj_point_add_4(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_map_avx2_4(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_map_4(point, point, tmp); @@ -23776,6 +23782,11 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, err = sp_256_point_to_ecc_point_4(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, NULL, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, NULL, DYNAMIC_TYPE_ECC); @@ -23887,6 +23898,7 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif (void)heap; @@ -23907,10 +23919,11 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + + if (saved_vector_registers) err = sp_256_ecc_mulmod_base_avx2_4(point, k, 1, 1, NULL); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_256_ecc_mulmod_base_4(point, k, 1, 1, NULL); @@ -23919,11 +23932,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { err = sp_256_ecc_mulmod_avx2_4(infinity, point, p256_order, 1, 1, NULL); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -23936,6 +23947,11 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #endif +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + if (err == MP_OKAY) { err = sp_256_to_mp(k, priv); } @@ -24211,7 +24227,6 @@ extern sp_digit div_256_word_asm_4(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_256_word_4(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -24230,7 +24245,6 @@ static WC_INLINE sp_digit div_256_word_4(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -24283,8 +24297,6 @@ static WC_INLINE int sp_256_div_4(const sp_digit* a, const sp_digit* d, sp_digit word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[3]; @@ -24337,7 +24349,6 @@ static WC_INLINE int sp_256_div_4(const sp_digit* a, const sp_digit* d, sp_digit static WC_INLINE int sp_256_mod_4(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_256_div_4(a, m, NULL, r); } @@ -24351,7 +24362,6 @@ static WC_INLINE int sp_256_mod_4(sp_digit* r, const sp_digit* a, */ static void sp_256_mont_mul_order_4(sp_digit* r, const sp_digit* a, const sp_digit* b) { - ASSERT_SAVED_VECTOR_REGISTERS(); sp_256_mul_4(r, a, b); sp_256_mont_reduce_order_4(r, p256_order, p256_mp_order); } @@ -24377,7 +24387,6 @@ static const word64 p256_order_low[2] = { */ static void sp_256_mont_sqr_order_4(sp_digit* r, const sp_digit* a) { - ASSERT_SAVED_VECTOR_REGISTERS(); sp_256_sqr_4(r, a); sp_256_mont_reduce_order_4(r, p256_order, p256_mp_order); } @@ -24393,8 +24402,6 @@ static void sp_256_mont_sqr_n_order_4(sp_digit* r, const sp_digit* a, int n) { int i; - ASSERT_SAVED_VECTOR_REGISTERS(); - sp_256_mont_sqr_order_4(r, a); for (i=1; i= sizeof(*sp_ctx) ? -1 : 1]; @@ -24483,8 +24488,6 @@ static void sp_256_mont_inv_order_4(sp_digit* r, const sp_digit* a, sp_digit* t4 = td + 6 * 4; int i; - ASSERT_SAVED_VECTOR_REGISTERS(); - /* t = a^2 */ sp_256_mont_sqr_order_4(t, a); /* t = a^3 = t * a */ @@ -24617,7 +24620,6 @@ static void sp_256_mont_sqr_n_order_avx2_4(sp_digit* r, const sp_digit* a, int n int i; ASSERT_SAVED_VECTOR_REGISTERS(); - sp_256_mont_sqr_order_avx2_4(r, a); for (i=1; i= sizeof(*sp_ctx) ? -1 : 1]; @@ -24707,7 +24708,6 @@ static void sp_256_mont_inv_order_avx2_4(sp_digit* r, const sp_digit* a, int i; ASSERT_SAVED_VECTOR_REGISTERS(); - /* t = a^2 */ sp_256_mont_sqr_order_avx2_4(t, a); /* t = a^3 = t * a */ @@ -24839,15 +24839,16 @@ static int sp_256_calc_s_4(sp_digit* s, const sp_digit* r, sp_digit* k, sp_digit* kInv = k; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif /* Conv k to Montgomery form (mod order) */ #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) sp_256_mul_avx2_4(k, k, p256_norm_order); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_mul_4(k, k, p256_norm_order); @@ -24857,11 +24858,8 @@ static int sp_256_calc_s_4(sp_digit* s, const sp_digit* r, sp_digit* k, /* kInv = 1/k mod order */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_mont_inv_order_avx2_4(kInv, k, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_mont_inv_order_4(kInv, k, tmp); @@ -24869,11 +24867,8 @@ static int sp_256_calc_s_4(sp_digit* s, const sp_digit* r, sp_digit* k, /* s = r * x + e */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_mul_avx2_4(x, x, r); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_mul_4(x, x, r); @@ -24891,17 +24886,19 @@ static int sp_256_calc_s_4(sp_digit* s, const sp_digit* r, sp_digit* k, /* s = s * k^-1 mod order */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_256_mont_mul_order_avx2_4(s, s, kInv); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_256_mont_mul_order_4(s, s, kInv); sp_256_norm_4(s); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + return err; } @@ -27843,6 +27840,7 @@ extern void sp_384_mont_reduce_order_avx2_6(sp_digit* a, const sp_digit* m, sp_d SP_NOINLINE static void sp_384_mont_mul_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_384_mul_avx2_6(r, a, b); sp_384_mont_reduce_avx2_6(r, m, mp); } @@ -27859,6 +27857,7 @@ SP_NOINLINE static void sp_384_mont_mul_avx2_6(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_384_mont_sqr_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_384_sqr_avx2_6(r, a); sp_384_mont_reduce_avx2_6(r, m, mp); } @@ -29755,6 +29754,7 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_384, point, 2, heap, DYNAMIC_TYPE_ECC); @@ -29779,33 +29779,26 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_384_ecc_mulmod_avx2_6(point, point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_384_ecc_mulmod_6(point, point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_proj_point_add_avx2_6(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_proj_point_add_6(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_map_avx2_6(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_map_6(point, point, tmp); @@ -29814,6 +29807,11 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, err = sp_384_point_to_ecc_point_6(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, heap, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, heap, DYNAMIC_TYPE_ECC); @@ -48325,6 +48323,7 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_384, point, 2, NULL, DYNAMIC_TYPE_ECC); @@ -48348,33 +48347,26 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_384_ecc_mulmod_base_avx2_6(point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_384_ecc_mulmod_base_6(point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_proj_point_add_avx2_6(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_proj_point_add_6(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_map_avx2_6(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_map_6(point, point, tmp); @@ -48383,6 +48375,11 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, err = sp_384_point_to_ecc_point_6(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, NULL, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, NULL, DYNAMIC_TYPE_ECC); @@ -48494,6 +48491,7 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif (void)heap; @@ -48514,10 +48512,11 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + + if (saved_vector_registers) err = sp_384_ecc_mulmod_base_avx2_6(point, k, 1, 1, NULL); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_384_ecc_mulmod_base_6(point, k, 1, 1, NULL); @@ -48526,11 +48525,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { err = sp_384_ecc_mulmod_avx2_6(infinity, point, p384_order, 1, 1, NULL); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -48543,6 +48540,11 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #endif +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + if (err == MP_OKAY) { err = sp_384_to_mp(k, priv); } @@ -48818,7 +48820,6 @@ extern sp_digit div_384_word_asm_6(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_384_word_6(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -48837,7 +48838,6 @@ static WC_INLINE sp_digit div_384_word_6(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -48892,8 +48892,6 @@ static WC_INLINE int sp_384_div_6(const sp_digit* a, const sp_digit* d, sp_digit word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[5]; @@ -48946,7 +48944,6 @@ static WC_INLINE int sp_384_div_6(const sp_digit* a, const sp_digit* d, sp_digit static WC_INLINE int sp_384_mod_6(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_384_div_6(a, m, NULL, r); } @@ -49304,15 +49301,16 @@ static int sp_384_calc_s_6(sp_digit* s, const sp_digit* r, sp_digit* k, sp_digit* kInv = k; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif /* Conv k to Montgomery form (mod order) */ #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) sp_384_mul_avx2_6(k, k, p384_norm_order); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_mul_6(k, k, p384_norm_order); @@ -49322,11 +49320,8 @@ static int sp_384_calc_s_6(sp_digit* s, const sp_digit* r, sp_digit* k, /* kInv = 1/k mod order */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_mont_inv_order_avx2_6(kInv, k, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_mont_inv_order_6(kInv, k, tmp); @@ -49334,11 +49329,8 @@ static int sp_384_calc_s_6(sp_digit* s, const sp_digit* r, sp_digit* k, /* s = r * x + e */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_mul_avx2_6(x, x, r); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_mul_6(x, x, r); @@ -49356,17 +49348,19 @@ static int sp_384_calc_s_6(sp_digit* s, const sp_digit* r, sp_digit* k, /* s = s * k^-1 mod order */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_384_mont_mul_order_avx2_6(s, s, kInv); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_384_mont_mul_order_6(s, s, kInv); sp_384_norm_6(s); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + return err; } @@ -54246,6 +54240,7 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_521, point, 2, heap, DYNAMIC_TYPE_ECC); @@ -54270,33 +54265,26 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_521_ecc_mulmod_avx2_9(point, point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_521_ecc_mulmod_9(point, point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_proj_point_add_avx2_9(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_proj_point_add_9(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_map_avx2_9(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_map_9(point, point, tmp); @@ -54305,6 +54293,11 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, err = sp_521_point_to_ecc_point_9(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, heap, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, heap, DYNAMIC_TYPE_ECC); @@ -89002,6 +88995,7 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_521, point, 2, NULL, DYNAMIC_TYPE_ECC); @@ -89025,33 +89019,26 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_521_ecc_mulmod_base_avx2_9(point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_521_ecc_mulmod_base_9(point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_proj_point_add_avx2_9(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_proj_point_add_9(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_map_avx2_9(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_map_9(point, point, tmp); @@ -89060,6 +89047,11 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, err = sp_521_point_to_ecc_point_9(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, NULL, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, NULL, DYNAMIC_TYPE_ECC); @@ -89172,6 +89164,7 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif (void)heap; @@ -89192,10 +89185,11 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + + if (saved_vector_registers) err = sp_521_ecc_mulmod_base_avx2_9(point, k, 1, 1, NULL); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_521_ecc_mulmod_base_9(point, k, 1, 1, NULL); @@ -89204,11 +89198,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) { err = sp_521_ecc_mulmod_avx2_9(infinity, point, p521_order, 1, 1, NULL); - RESTORE_VECTOR_REGISTERS(); } else #endif @@ -89221,6 +89213,11 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #endif +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + if (err == MP_OKAY) { err = sp_521_to_mp(k, priv); } @@ -89517,7 +89514,6 @@ extern sp_digit div_521_word_asm_9(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_521_word_9(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -89536,7 +89532,6 @@ static WC_INLINE sp_digit div_521_word_9(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -89595,8 +89590,6 @@ static WC_INLINE int sp_521_div_9(const sp_digit* a, const sp_digit* d, sp_digit word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = (d[8] << 55) | (d[7] >> 9); @@ -89651,7 +89644,6 @@ static WC_INLINE int sp_521_div_9(const sp_digit* a, const sp_digit* d, sp_digit static WC_INLINE int sp_521_mod_9(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_521_div_9(a, m, NULL, r); } @@ -90037,15 +90029,16 @@ static int sp_521_calc_s_9(sp_digit* s, const sp_digit* r, sp_digit* k, sp_digit* kInv = k; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif /* Conv k to Montgomery form (mod order) */ #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) sp_521_mul_avx2_9(k, k, p521_norm_order); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_mul_9(k, k, p521_norm_order); @@ -90055,11 +90048,8 @@ static int sp_521_calc_s_9(sp_digit* s, const sp_digit* r, sp_digit* k, /* kInv = 1/k mod order */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_mont_inv_order_avx2_9(kInv, k, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_mont_inv_order_9(kInv, k, tmp); @@ -90067,11 +90057,8 @@ static int sp_521_calc_s_9(sp_digit* s, const sp_digit* r, sp_digit* k, /* s = r * x + e */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_mul_avx2_9(x, x, r); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_mul_9(x, x, r); @@ -90089,17 +90076,19 @@ static int sp_521_calc_s_9(sp_digit* s, const sp_digit* r, sp_digit* k, /* s = s * k^-1 mod order */ #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_521_mont_mul_order_avx2_9(s, s, kInv); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_521_mont_mul_order_9(s, s, kInv); sp_521_norm_9(s); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + return err; } @@ -91607,7 +91596,6 @@ extern sp_digit div_1024_word_asm_16(sp_digit d1, sp_digit d0, sp_digit div); static WC_INLINE sp_digit div_1024_word_16(sp_digit d1, sp_digit d0, sp_digit div) { - ASSERT_SAVED_VECTOR_REGISTERS(); #if _MSC_VER >= 1920 return _udiv128(d1, d0, div, NULL); #else @@ -91626,7 +91614,6 @@ static WC_INLINE sp_digit div_1024_word_16(sp_digit d1, sp_digit d0, sp_digit div) { register sp_digit r asm("rax"); - ASSERT_SAVED_VECTOR_REGISTERS(); __asm__ __volatile__ ( "divq %3" : "=a" (r) @@ -91694,8 +91681,6 @@ static WC_INLINE int sp_1024_div_16(const sp_digit* a, const sp_digit* d, sp_dig word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - (void)m; div = d[15]; @@ -91748,7 +91733,6 @@ static WC_INLINE int sp_1024_div_16(const sp_digit* a, const sp_digit* d, sp_dig static WC_INLINE int sp_1024_mod_16(sp_digit* r, const sp_digit* a, const sp_digit* m) { - ASSERT_SAVED_VECTOR_REGISTERS(); return sp_1024_div_16(a, m, NULL, r); } @@ -93220,6 +93204,7 @@ extern void sp_1024_mont_reduce_avx2_16(sp_digit* a, const sp_digit* m, sp_digit SP_NOINLINE static void sp_1024_mont_mul_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_1024_mul_avx2_16(r, a, b); sp_1024_mont_reduce_avx2_16(r, m, mp); } @@ -93236,6 +93221,7 @@ SP_NOINLINE static void sp_1024_mont_mul_avx2_16(sp_digit* r, const sp_digit* a, SP_NOINLINE static void sp_1024_mont_sqr_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp) { + ASSERT_SAVED_VECTOR_REGISTERS(); sp_1024_sqr_avx2_16(r, a); sp_1024_mont_reduce_avx2_16(r, m, mp); } @@ -98454,6 +98440,7 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, int err = MP_OKAY; #ifdef HAVE_INTEL_AVX2 word32 cpuid_flags = cpuid_get_flags(); + int saved_vector_registers = 0; #endif SP_ALLOC_VAR(sp_point_1024, point, 2, NULL, DYNAMIC_TYPE_ECC); @@ -98477,33 +98464,26 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) + saved_vector_registers = 1; + if (saved_vector_registers) err = sp_1024_ecc_mulmod_base_avx2_16(point, k, 0, 0, heap); - RESTORE_VECTOR_REGISTERS(); - } else #endif err = sp_1024_ecc_mulmod_base_16(point, k, 0, 0, heap); } if (err == MP_OKAY) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_1024_proj_point_add_avx2_16(point, point, addP, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_1024_proj_point_add_16(point, point, addP, tmp); if (map) { #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && - IS_INTEL_AVX2(cpuid_flags) && - (SAVE_VECTOR_REGISTERS2() == 0)) { + if (saved_vector_registers) sp_1024_map_avx2_16(point, point, tmp); - RESTORE_VECTOR_REGISTERS(); - } else #endif sp_1024_map_16(point, point, tmp); @@ -98512,6 +98492,11 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, err = sp_1024_point_to_ecc_point_16(point, r); } +#ifdef HAVE_INTEL_AVX2 + if (saved_vector_registers) + RESTORE_VECTOR_REGISTERS(); +#endif + SP_FREE_VAR(k, NULL, DYNAMIC_TYPE_ECC); SP_FREE_VAR(point, NULL, DYNAMIC_TYPE_ECC); @@ -100712,11 +100697,11 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) { + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { err = sp_ModExp_Fp_star_avx2_1024(base, exp, res); + RESTORE_VECTOR_REGISTERS(); } else #endif @@ -102314,11 +102299,11 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) { + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { err = sp_Pairing_avx2_1024(pm, qm, res); + RESTORE_VECTOR_REGISTERS(); } else #endif @@ -103439,11 +103424,11 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, word32* len) word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) { + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { err = sp_Pairing_gen_precomp_avx2_1024(pm, table, len); + RESTORE_VECTOR_REGISTERS(); } else #endif @@ -103475,11 +103460,11 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, mp_int* re word32 cpuid_flags = cpuid_get_flags(); #endif - ASSERT_SAVED_VECTOR_REGISTERS(); - #ifdef HAVE_INTEL_AVX2 - if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) { + if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags) && + IS_INTEL_AVX2(cpuid_flags) && (SAVE_VECTOR_REGISTERS2() == 0)) { err = sp_Pairing_precomp_avx2_1024(pm, qm, res, table, len); + RESTORE_VECTOR_REGISTERS(); } else #endif diff --git a/wolfcrypt/src/sp_x86_64_asm.S b/wolfcrypt/src/sp_x86_64_asm.S index 7aaae4bb60d..fbd2de64a8c 100644 --- a/wolfcrypt/src/sp_x86_64_asm.S +++ b/wolfcrypt/src/sp_x86_64_asm.S @@ -9983,1173 +9983,6 @@ _sp_2048_cmp_16: #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. * @@ -13501,25956 +12334,24 @@ _sp_2048_cmp_32: #ifndef __APPLE__ .size sp_2048_cmp_32,.-sp_2048_cmp_32 #endif /* __APPLE__ */ -#ifndef 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_get_from_table_32 -.type sp_2048_get_from_table_32,@function +.globl sp_2048_mont_reduce_avx2_32 +.type sp_2048_mont_reduce_avx2_32,@function .align 16 -sp_2048_get_from_table_32: +sp_2048_mont_reduce_avx2_32: #else .section __TEXT,__text -.globl _sp_2048_get_from_table_32 +.globl _sp_2048_mont_reduce_avx2_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: +_sp_2048_mont_reduce_avx2_32: #endif /* __APPLE__ */ pushq %r12 pushq %r13 @@ -39460,15 +12361,15 @@ _sp_3072_mont_reduce_avx2_48: pushq %rbp movq %rdx, %r8 xorq %rbp, %rbp - # i = 48 - movq $48, %r9 + # i = 32 + movq $32, %r9 movq (%rdi), %r12 movq 8(%rdi), %r13 movq 16(%rdi), %r14 movq 24(%rdi), %r15 - addq $0xc0, %rdi + addq $0x80, %rdi xorq %rbp, %rbp -L_3072_mont_reduce_avx2_48_loop: +L_2048_mont_reduce_avx2_32_loop: # mu = a[i] * mp movq %r12, %rdx movq %r12, %r10 @@ -39491,286 +12392,190 @@ L_3072_mont_reduce_avx2_48_loop: adoxq %rcx, %r14 # a[i+3] += m[3] * mu mulxq 24(%rsi), %rax, %rcx - movq -160(%rdi), %r15 + movq -96(%rdi), %r15 adcxq %rax, %r14 adoxq %rcx, %r15 # a[i+4] += m[4] * mu mulxq 32(%rsi), %rax, %rcx - movq -152(%rdi), %r11 + movq -88(%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 + # 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+15] += m[15] * mu - mulxq 120(%rsi), %rax, %rcx + # 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+16] += m[16] * mu - mulxq 128(%rsi), %rax, %rcx + # 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+17] += m[17] * mu - mulxq 136(%rsi), %rax, %rcx + # 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+18] += m[18] * mu - mulxq 144(%rsi), %rax, %rcx + # 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+19] += m[19] * mu - mulxq 152(%rsi), %rax, %rcx + # 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+20] += m[20] * mu - mulxq 160(%rsi), %rax, %rcx + # 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+21] += m[21] * mu - mulxq 168(%rsi), %rax, %rcx + # 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+22] += m[22] * mu - mulxq 176(%rsi), %rax, %rcx + # 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+23] += m[23] * mu - mulxq 184(%rsi), %rax, %rcx + # 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+24] += m[24] * mu - mulxq 192(%rsi), %rax, %rcx + # 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+25] += m[25] * mu - mulxq 200(%rsi), %rax, %rcx + # 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+26] += m[26] * mu - mulxq 208(%rsi), %rax, %rcx + # 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+27] += m[27] * mu - mulxq 216(%rsi), %rax, %rcx + # 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+28] += m[28] * mu - mulxq 224(%rsi), %rax, %rcx + # 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+29] += m[29] * mu - mulxq 232(%rsi), %rax, %rcx + # 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+30] += m[30] * mu - mulxq 240(%rsi), %rax, %rcx + # 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+31] += m[31] * mu - mulxq 248(%rsi), %rax, %rcx + # 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+32] += m[32] * mu - mulxq 256(%rsi), %rax, %rcx + # 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+33] += m[33] * mu - mulxq 264(%rsi), %rax, %rcx + # 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+34] += m[34] * mu - mulxq 272(%rsi), %rax, %rcx + # 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+35] += m[35] * mu - mulxq 280(%rsi), %rax, %rcx + # 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+36] += m[36] * mu - mulxq 288(%rsi), %rax, %rcx + # 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+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, %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, 168(%rdi) - # a[i+46] += m[46] * mu - mulxq 368(%rsi), %rax, %rcx - movq 184(%rdi), %r11 + 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, 176(%rdi) - # a[i+47] += m[47] * mu - mulxq 376(%rsi), %rax, %rcx - movq 192(%rdi), %r10 + 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, 184(%rdi) + movq %r11, 120(%rdi) adcxq %rbp, %r10 movq %rbx, %rbp - movq %r10, 192(%rdi) + movq %r10, 128(%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 + jnz L_2048_mont_reduce_avx2_32_loop + subq $0x80, %rdi negq %rbp movq %rdi, %r8 - subq $0x180, %rdi + subq $0x100, %rdi movq (%rsi), %rcx movq %r12, %rdx pextq %rbp, %rcx, %rcx @@ -39806,242 +12611,1198 @@ L_3072_mont_reduce_avx2_48_loop: 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 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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 - 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 + vpcmpeqd %ymm10, %ymm13, %ymm12 + vmovdqu (%rcx), %ymm0 + vmovdqu 32(%rcx), %ymm1 + vmovdqu 64(%rcx), %ymm2 + vmovdqu 96(%rcx), %ymm3 + vpand %ymm12, %ymm0, %ymm0 + vpand %ymm12, %ymm1, %ymm1 + vpand %ymm12, %ymm2, %ymm2 + vpand %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 @@ -40049,6 +13810,109 @@ _sp_3072_get_from_table_avx2_48: 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 @@ -40063,8 +13927,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 1 - movq 8(%rsi), %rcx + # ENTRY: 7 + movq 56(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40079,8 +13944,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 2 - movq 16(%rsi), %rcx + # ENTRY: 8 + movq 64(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40095,8 +13961,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 3 - movq 24(%rsi), %rcx + # ENTRY: 9 + movq 72(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40111,8 +13978,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 4 - movq 32(%rsi), %rcx + # ENTRY: 10 + movq 80(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40127,8 +13995,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 5 - movq 40(%rsi), %rcx + # ENTRY: 11 + movq 88(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40143,8 +14012,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 6 - movq 48(%rsi), %rcx + # ENTRY: 12 + movq 96(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40159,8 +14029,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 7 - movq 56(%rsi), %rcx + # ENTRY: 13 + movq 104(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40175,8 +14046,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 8 - movq 64(%rsi), %rcx + # ENTRY: 14 + movq 112(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40191,8 +14063,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 9 - movq 72(%rsi), %rcx + # ENTRY: 15 + movq 120(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40207,8 +14080,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 10 - movq 80(%rsi), %rcx + # ENTRY: 16 + movq 128(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40223,8 +14097,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 11 - movq 88(%rsi), %rcx + # ENTRY: 17 + movq 136(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40239,8 +14114,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 12 - movq 96(%rsi), %rcx + # ENTRY: 18 + movq 144(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40255,8 +14131,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 13 - movq 104(%rsi), %rcx + # ENTRY: 19 + movq 152(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40271,8 +14148,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 14 - movq 112(%rsi), %rcx + # ENTRY: 20 + movq 160(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40287,8 +14165,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 15 - movq 120(%rsi), %rcx + # ENTRY: 21 + movq 168(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40303,20 +14182,178 @@ _sp_3072_get_from_table_avx2_48: 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 + # 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 @@ -40332,8 +14369,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 1 - movq 8(%rsi), %rcx + # ENTRY: 33 + movq 264(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40349,8 +14386,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 2 - movq 16(%rsi), %rcx + # ENTRY: 34 + movq 272(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40366,8 +14403,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 3 - movq 24(%rsi), %rcx + # ENTRY: 35 + movq 280(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40383,8 +14420,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 4 - movq 32(%rsi), %rcx + # ENTRY: 36 + movq 288(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40400,8 +14437,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 5 - movq 40(%rsi), %rcx + # ENTRY: 37 + movq 296(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40417,8 +14454,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 6 - movq 48(%rsi), %rcx + # ENTRY: 38 + movq 304(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40434,8 +14471,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 7 - movq 56(%rsi), %rcx + # ENTRY: 39 + movq 312(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40451,8 +14488,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 8 - movq 64(%rsi), %rcx + # ENTRY: 40 + movq 320(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40468,8 +14505,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 9 - movq 72(%rsi), %rcx + # ENTRY: 41 + movq 328(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40485,8 +14522,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 10 - movq 80(%rsi), %rcx + # ENTRY: 42 + movq 336(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40502,8 +14539,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 11 - movq 88(%rsi), %rcx + # ENTRY: 43 + movq 344(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40519,8 +14556,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 12 - movq 96(%rsi), %rcx + # ENTRY: 44 + movq 352(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40536,8 +14573,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 13 - movq 104(%rsi), %rcx + # ENTRY: 45 + movq 360(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40553,8 +14590,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 14 - movq 112(%rsi), %rcx + # ENTRY: 46 + movq 368(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40570,8 +14607,8 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 15 - movq 120(%rsi), %rcx + # ENTRY: 47 + movq 376(%rsi), %rcx addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 @@ -40587,21 +14624,9 @@ _sp_3072_get_from_table_avx2_48: 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 + # ENTRY: 48 + movq 384(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40616,9 +14641,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 1 - movq 8(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 49 + movq 392(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40633,9 +14658,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 2 - movq 16(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 50 + movq 400(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40650,9 +14675,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 3 - movq 24(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 51 + movq 408(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40667,9 +14692,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 4 - movq 32(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 52 + movq 416(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40684,9 +14709,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 5 - movq 40(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 53 + movq 424(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40701,9 +14726,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 6 - movq 48(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 54 + movq 432(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40718,9 +14743,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 7 - movq 56(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 55 + movq 440(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40735,9 +14760,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 8 - movq 64(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 56 + movq 448(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40752,9 +14777,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 9 - movq 72(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 57 + movq 456(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40769,9 +14794,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 10 - movq 80(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 58 + movq 464(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40786,9 +14811,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 11 - movq 88(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 59 + movq 472(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40803,9 +14828,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 12 - movq 96(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 60 + movq 480(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40820,9 +14845,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 13 - movq 104(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 61 + movq 488(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40837,9 +14862,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 14 - movq 112(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 62 + movq 496(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40854,9 +14879,9 @@ _sp_3072_get_from_table_avx2_48: vpor %ymm2, %ymm6, %ymm6 vpor %ymm3, %ymm7, %ymm7 vpaddd %ymm11, %ymm13, %ymm13 - # ENTRY: 15 - movq 120(%rsi), %rcx - addq $0x100, %rcx + # ENTRY: 63 + movq 504(%rsi), %rcx + addq $0x80, %rcx vpcmpeqd %ymm10, %ymm13, %ymm12 vmovdqu (%rcx), %ymm0 vmovdqu 32(%rcx), %ymm1 @@ -40875,1078 +14900,4141 @@ _sp_3072_get_from_table_avx2_48: vmovdqu %ymm5, 32(%rdi) vmovdqu %ymm6, 64(%rdi) vmovdqu %ymm7, 96(%rdi) - # END: 32-47 + # 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_get_from_table_avx2_48,.-sp_3072_get_from_table_avx2_48 +.size sp_3072_to_bin_bswap_48,.-sp_3072_to_bin_bswap_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. +#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 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. + * r A single precision integer. + * a A single precision integer. + * b A single precision integer. */ #ifndef __APPLE__ .text -.globl sp_3072_cond_add_24 -.type sp_3072_cond_add_24,@function +.globl sp_3072_mul_12 +.type sp_3072_mul_12,@function .align 16 -sp_3072_cond_add_24: +sp_3072_mul_12: #else .section __TEXT,__text -.globl _sp_3072_cond_add_24 +.globl _sp_3072_mul_12 .p2align 4 -_sp_3072_cond_add_24: +_sp_3072_mul_12: #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 %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) - 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 + # 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) - 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 + # 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) - movq 16(%rsi), %r8 - movq 16(%rsp), %rdx - adcq %rdx, %r8 + adcxq %rax, %r9 + adoxq %rcx, %r10 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 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) - movq 64(%rsi), %r8 - movq 64(%rsp), %rdx - adcq %rdx, %r8 + adcxq %rax, %r9 + adoxq %rcx, %r10 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 + 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_cond_add_24,.-sp_3072_cond_add_24 +.size sp_3072_mul_avx2_12,.-sp_3072_mul_avx2_12 #endif /* __APPLE__ */ -#ifdef HAVE_INTEL_AVX2 -/* Conditionally add a and b using the mask m. - * m is -1 to add and 0 when not. +#endif /* HAVE_INTEL_AVX2 */ +/* Add b to a into r. (r = a + b) * - * 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. + * r A single precision integer. + * a A single precision integer. + * b A single precision integer. */ #ifndef __APPLE__ .text -.globl sp_3072_cond_add_avx2_24 -.type sp_3072_cond_add_avx2_24,@function +.globl sp_3072_add_12 +.type sp_3072_add_12,@function .align 16 -sp_3072_cond_add_avx2_24: +sp_3072_add_12: #else .section __TEXT,__text -.globl _sp_3072_cond_add_avx2_24 +.globl _sp_3072_add_12 .p2align 4 -_sp_3072_cond_add_avx2_24: +_sp_3072_add_12: #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 + # 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 - pextq %rcx, %r9, %r9 - movq %r10, 16(%rdi) - adcq %r9, %r8 - movq 32(%rdx), %r10 - movq 32(%rsi), %r9 - pextq %rcx, %r10, %r10 + movq %rcx, 16(%rdi) + adcq 24(%rdx), %r8 + movq 32(%rsi), %rcx 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 + 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 - pextq %rcx, %r9, %r9 - movq %r10, 64(%rdi) - adcq %r9, %r8 - movq 80(%rdx), %r10 - movq 80(%rsi), %r9 - pextq %rcx, %r10, %r10 + movq %rcx, 64(%rdi) + adcq 72(%rdx), %r8 + movq 80(%rsi), %rcx 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 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_cond_add_avx2_24,.-sp_3072_cond_add_avx2_24 +.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__ */ -#endif /* HAVE_INTEL_AVX2 */ -/* Shift number left by n bit. (r = a << n) +/* Add b to a into r. (r = a + b) * - * r Result of left shift by n. - * a Number to shift. - * n Amoutnt o shift. + * r A single precision integer. + * a A single precision integer. + * b A single precision integer. */ #ifndef __APPLE__ .text -.globl sp_3072_lshift_48 -.type sp_3072_lshift_48,@function +.globl sp_3072_add_24 +.type sp_3072_add_24,@function .align 16 -sp_3072_lshift_48: +sp_3072_add_24: #else .section __TEXT,__text -.globl _sp_3072_lshift_48 +.globl _sp_3072_add_24 .p2align 4 -_sp_3072_lshift_48: +_sp_3072_add_24: #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) + # 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_lshift_48,.-sp_3072_lshift_48 +.size sp_3072_add_24,.-sp_3072_add_24 #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. +/* Multiply a and b into r. (r = a * b) * * r A single precision integer. - * size Maximum number of bytes to convert - * a Byte array. - * n Number of bytes in array to read. + * a A single precision integer. + * b A single precision integer. */ #ifndef __APPLE__ .text -.globl sp_4096_from_bin_bswap -.type sp_4096_from_bin_bswap,@function +.globl sp_3072_mul_24 +.type sp_3072_mul_24,@function .align 16 -sp_4096_from_bin_bswap: +sp_3072_mul_24: #else .section __TEXT,__text -.globl _sp_4096_from_bin_bswap +.globl _sp_3072_mul_24 .p2align 4 -_sp_4096_from_bin_bswap: +_sp_3072_mul_24: #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 + 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__ -.size sp_4096_from_bin_bswap,.-sp_4096_from_bin_bswap + callq sp_3072_mul_12@plt +#else + callq _sp_3072_mul_12 #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. - */ + movq 592(%rsp), %rdx + movq 584(%rsp), %rsi + leaq 192(%rsp), %rdi + addq $0x60, %rdx + addq $0x60, %rsi #ifndef __APPLE__ -.text -.globl sp_4096_from_bin_movbe -.type sp_4096_from_bin_movbe,@function -.align 16 -sp_4096_from_bin_movbe: + 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 -.section __TEXT,__text -.globl _sp_4096_from_bin_movbe -.p2align 4 -_sp_4096_from_bin_movbe: + callq _sp_3072_mul_12 #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: +#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_4096_from_bin_movbe,.-sp_4096_from_bin_movbe +.size sp_3072_mul_24,.-sp_3072_mul_24 #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. +#ifdef HAVE_INTEL_AVX2 +/* Multiply a and b into r. (r = a * b) * * r A single precision integer. - * a Byte array. + * a A single precision integer. + * b A single precision integer. */ #ifndef __APPLE__ .text -.globl sp_4096_to_bin_bswap_64 -.type sp_4096_to_bin_bswap_64,@function +.globl sp_3072_mul_avx2_24 +.type sp_3072_mul_avx2_24,@function .align 16 -sp_4096_to_bin_bswap_64: +sp_3072_mul_avx2_24: #else .section __TEXT,__text -.globl _sp_4096_to_bin_bswap_64 +.globl _sp_3072_mul_avx2_24 .p2align 4 -_sp_4096_to_bin_bswap_64: +_sp_3072_mul_avx2_24: #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 + 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__ -.size sp_4096_to_bin_bswap_64,.-sp_4096_to_bin_bswap_64 + callq sp_3072_mul_avx2_12@plt +#else + callq _sp_3072_mul_avx2_12 #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. - */ + movq 592(%rsp), %rdx + movq 584(%rsp), %rsi + leaq 192(%rsp), %rdi + addq $0x60, %rdx + addq $0x60, %rsi #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: + callq sp_3072_mul_avx2_12@plt #else -.section __TEXT,__text -.globl _sp_4096_to_bin_movbe_64 -.p2align 4 -_sp_4096_to_bin_movbe_64: + callq _sp_3072_mul_avx2_12 #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) + 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_4096_to_bin_movbe_64,.-sp_4096_to_bin_movbe_64 +.size sp_3072_mul_avx2_24,.-sp_3072_mul_avx2_24 #endif /* __APPLE__ */ -#endif /* NO_MOVBE_SUPPORT */ +#endif /* HAVE_INTEL_AVX2 */ /* Sub b from a into a. (a -= b) * * a A single precision integer and result. @@ -41954,15 +19042,15 @@ _sp_4096_to_bin_movbe_64: */ #ifndef __APPLE__ .text -.globl sp_4096_sub_in_place_64 -.type sp_4096_sub_in_place_64,@function +.globl sp_3072_sub_in_place_48 +.type sp_3072_sub_in_place_48,@function .align 16 -sp_4096_sub_in_place_64: +sp_3072_sub_in_place_48: #else .section __TEXT,__text -.globl _sp_4096_sub_in_place_64 +.globl _sp_3072_sub_in_place_48 .p2align 4 -_sp_4096_sub_in_place_64: +_sp_3072_sub_in_place_48: #endif /* __APPLE__ */ movq (%rdi), %rdx subq (%rsi), %rdx @@ -42107,59 +19195,11 @@ _sp_4096_sub_in_place_64: 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 +.size sp_3072_sub_in_place_48,.-sp_3072_sub_in_place_48 #endif /* __APPLE__ */ /* Add b to a into r. (r = a + b) * @@ -42169,15 +19209,15 @@ _sp_4096_sub_in_place_64: */ #ifndef __APPLE__ .text -.globl sp_4096_add_64 -.type sp_4096_add_64,@function +.globl sp_3072_add_48 +.type sp_3072_add_48,@function .align 16 -sp_4096_add_64: +sp_3072_add_48: #else .section __TEXT,__text -.globl _sp_4096_add_64 +.globl _sp_3072_add_48 .p2align 4 -_sp_4096_add_64: +_sp_3072_add_48: #endif /* __APPLE__ */ # Add movq (%rsi), %rcx @@ -42324,59 +19364,11 @@ _sp_4096_add_64: 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 +.size sp_3072_add_48,.-sp_3072_add_48 #endif /* __APPLE__ */ /* Multiply a and b into r. (r = a * b) * @@ -42386,26 +19378,26 @@ _sp_4096_add_64: */ #ifndef __APPLE__ .text -.globl sp_4096_mul_64 -.type sp_4096_mul_64,@function +.globl sp_3072_mul_48 +.type sp_3072_mul_48,@function .align 16 -sp_4096_mul_64: +sp_3072_mul_48: #else .section __TEXT,__text -.globl _sp_4096_mul_64 +.globl _sp_3072_mul_48 .p2align 4 -_sp_4096_mul_64: +_sp_3072_mul_48: #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 + 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 @@ -42475,39 +19467,15 @@ _sp_4096_mul_64: 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 176(%r12), %rcx + movq 184(%rsi), %r8 + movq %rcx, 176(%r10) + adcq 184(%r12), %r8 + movq %r8, 184(%r10) adcq $0x00, %r13 - movq %r13, 1560(%rsp) - leaq 1280(%rsp), %r11 - leaq 256(%rdx), %r12 + movq %r13, 1176(%rsp) + leaq 960(%rsp), %r11 + leaq 192(%rdx), %r12 # Add movq (%rdx), %rax xorq %r14, %r14 @@ -42581,74 +19549,50 @@ _sp_4096_mul_64: 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 %r14, 1184(%rsp) movq %r11, %rdx movq %r10, %rsi movq %rsp, %rdi #ifndef __APPLE__ - callq sp_2048_mul_32@plt + callq sp_3072_mul_24@plt #else - callq _sp_2048_mul_32 + callq _sp_3072_mul_24 #endif /* __APPLE__ */ - movq 1552(%rsp), %rdx - movq 1544(%rsp), %rsi - leaq 512(%rsp), %rdi - addq $0x100, %rdx - addq $0x100, %rsi + movq 1168(%rsp), %rdx + movq 1160(%rsp), %rsi + leaq 384(%rsp), %rdi + addq $0xc0, %rdx + addq $0xc0, %rsi #ifndef __APPLE__ - callq sp_2048_mul_32@plt + callq sp_3072_mul_24@plt #else - callq _sp_2048_mul_32 + callq _sp_3072_mul_24 #endif /* __APPLE__ */ - movq 1552(%rsp), %rdx - movq 1544(%rsp), %rsi - movq 1536(%rsp), %rdi + movq 1168(%rsp), %rdx + movq 1160(%rsp), %rsi + movq 1152(%rsp), %rdi #ifndef __APPLE__ - callq sp_2048_mul_32@plt + callq sp_3072_mul_24@plt #else - callq _sp_2048_mul_32 + callq _sp_3072_mul_24 #endif /* __APPLE__ */ #ifdef _WIN64 - movq 1552(%rsp), %rdx - movq 1544(%rsp), %rsi - movq 1536(%rsp), %rdi + movq 1168(%rsp), %rdx + movq 1160(%rsp), %rsi + movq 1152(%rsp), %rdi #endif /* _WIN64 */ - movq 1560(%rsp), %r13 - movq 1568(%rsp), %r14 - movq 1536(%rsp), %r15 + movq 1176(%rsp), %r13 + movq 1184(%rsp), %r14 + movq 1152(%rsp), %r15 movq %r13, %r9 - leaq 1024(%rsp), %r10 - leaq 1280(%rsp), %r11 + leaq 768(%rsp), %r10 + leaq 960(%rsp), %r11 andq %r14, %r9 negq %r13 negq %r14 - addq $0x200, %r15 + addq $0x180, %r15 movq (%r10), %rax movq (%r11), %rcx andq %r14, %rax @@ -42793,54 +19737,6 @@ _sp_4096_mul_64: 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 @@ -42912,33 +19808,9 @@ _sp_4096_mul_64: 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 + leaq 384(%rsp), %r11 movq %rsp, %r10 movq (%r10), %rax subq (%r11), %rax @@ -43083,55 +19955,7 @@ _sp_4096_mul_64: 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 @@ -43276,57 +20100,9 @@ _sp_4096_mul_64: 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 + subq $0xc0, %r15 # Add movq (%r15), %rax addq (%r10), %rax @@ -43471,58 +20247,10 @@ _sp_4096_mul_64: 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 + movq %r9, 576(%rdi) + addq $0xc0, %r15 # Add movq (%r15), %rax addq (%r11), %rax @@ -43598,133 +20326,85 @@ _sp_4096_mul_64: 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) + movq 200(%r11), %rax adcq $0x00, %rax - movq 320(%r11), %rcx - movq %rax, 312(%r15) + movq 208(%r11), %rcx + movq %rax, 200(%r15) adcq $0x00, %rcx - movq 328(%r11), %r8 - movq %rcx, 320(%r15) + movq 216(%r11), %r8 + movq %rcx, 208(%r15) adcq $0x00, %r8 - movq 336(%r11), %rax - movq %r8, 328(%r15) + movq 224(%r11), %rax + movq %r8, 216(%r15) adcq $0x00, %rax - movq 344(%r11), %rcx - movq %rax, 336(%r15) + movq 232(%r11), %rcx + movq %rax, 224(%r15) adcq $0x00, %rcx - movq 352(%r11), %r8 - movq %rcx, 344(%r15) + movq 240(%r11), %r8 + movq %rcx, 232(%r15) adcq $0x00, %r8 - movq 360(%r11), %rax - movq %r8, 352(%r15) + movq 248(%r11), %rax + movq %r8, 240(%r15) adcq $0x00, %rax - movq 368(%r11), %rcx - movq %rax, 360(%r15) + movq 256(%r11), %rcx + movq %rax, 248(%r15) adcq $0x00, %rcx - movq 376(%r11), %r8 - movq %rcx, 368(%r15) + movq 264(%r11), %r8 + movq %rcx, 256(%r15) adcq $0x00, %r8 - movq 384(%r11), %rax - movq %r8, 376(%r15) + movq 272(%r11), %rax + movq %r8, 264(%r15) adcq $0x00, %rax - movq 392(%r11), %rcx - movq %rax, 384(%r15) + movq 280(%r11), %rcx + movq %rax, 272(%r15) adcq $0x00, %rcx - movq 400(%r11), %r8 - movq %rcx, 392(%r15) + movq 288(%r11), %r8 + movq %rcx, 280(%r15) adcq $0x00, %r8 - movq 408(%r11), %rax - movq %r8, 400(%r15) + movq 296(%r11), %rax + movq %r8, 288(%r15) adcq $0x00, %rax - movq 416(%r11), %rcx - movq %rax, 408(%r15) + movq 304(%r11), %rcx + movq %rax, 296(%r15) adcq $0x00, %rcx - movq 424(%r11), %r8 - movq %rcx, 416(%r15) + movq 312(%r11), %r8 + movq %rcx, 304(%r15) adcq $0x00, %r8 - movq 432(%r11), %rax - movq %r8, 424(%r15) + movq 320(%r11), %rax + movq %r8, 312(%r15) adcq $0x00, %rax - movq 440(%r11), %rcx - movq %rax, 432(%r15) + movq 328(%r11), %rcx + movq %rax, 320(%r15) adcq $0x00, %rcx - movq 448(%r11), %r8 - movq %rcx, 440(%r15) + movq 336(%r11), %r8 + movq %rcx, 328(%r15) adcq $0x00, %r8 - movq 456(%r11), %rax - movq %r8, 448(%r15) + movq 344(%r11), %rax + movq %r8, 336(%r15) adcq $0x00, %rax - movq 464(%r11), %rcx - movq %rax, 456(%r15) + movq 352(%r11), %rcx + movq %rax, 344(%r15) adcq $0x00, %rcx - movq 472(%r11), %r8 - movq %rcx, 464(%r15) + movq 360(%r11), %r8 + movq %rcx, 352(%r15) adcq $0x00, %r8 - movq 480(%r11), %rax - movq %r8, 472(%r15) + movq 368(%r11), %rax + movq %r8, 360(%r15) adcq $0x00, %rax - movq 488(%r11), %rcx - movq %rax, 480(%r15) + movq 376(%r11), %rcx + movq %rax, 368(%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 + movq %rcx, 376(%r15) + addq $0x4a8, %rsp popq %r15 popq %r14 popq %r13 popq %r12 repz retq #ifndef __APPLE__ -.size sp_4096_mul_64,.-sp_4096_mul_64 +.size sp_3072_mul_48,.-sp_3072_mul_48 #endif /* __APPLE__ */ #ifdef HAVE_INTEL_AVX2 /* Multiply a and b into r. (r = a * b) @@ -43735,26 +20415,26 @@ _sp_4096_mul_64: */ #ifndef __APPLE__ .text -.globl sp_4096_mul_avx2_64 -.type sp_4096_mul_avx2_64,@function +.globl sp_3072_mul_avx2_48 +.type sp_3072_mul_avx2_48,@function .align 16 -sp_4096_mul_avx2_64: +sp_3072_mul_avx2_48: #else .section __TEXT,__text -.globl _sp_4096_mul_avx2_64 +.globl _sp_3072_mul_avx2_48 .p2align 4 -_sp_4096_mul_avx2_64: +_sp_3072_mul_avx2_48: #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 + 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 @@ -43814,49 +20494,25 @@ _sp_4096_mul_avx2_64: 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) + 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, 1560(%rsp) - leaq 1280(%rsp), %r11 - leaq 256(%rdx), %r12 + movq %r13, 1176(%rsp) + leaq 960(%rsp), %r11 + leaq 192(%rdx), %r12 # Add movq (%rdx), %rax xorq %r14, %r14 @@ -43930,74 +20586,50 @@ _sp_4096_mul_avx2_64: 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 %r14, 1184(%rsp) movq %r11, %rdx movq %r10, %rsi movq %rsp, %rdi #ifndef __APPLE__ - callq sp_2048_mul_avx2_32@plt + callq sp_3072_mul_avx2_24@plt #else - callq _sp_2048_mul_avx2_32 + callq _sp_3072_mul_avx2_24 #endif /* __APPLE__ */ - movq 1552(%rsp), %rdx - movq 1544(%rsp), %rsi - leaq 512(%rsp), %rdi - addq $0x100, %rdx - addq $0x100, %rsi + movq 1168(%rsp), %rdx + movq 1160(%rsp), %rsi + leaq 384(%rsp), %rdi + addq $0xc0, %rdx + addq $0xc0, %rsi #ifndef __APPLE__ - callq sp_2048_mul_avx2_32@plt + callq sp_3072_mul_avx2_24@plt #else - callq _sp_2048_mul_avx2_32 + callq _sp_3072_mul_avx2_24 #endif /* __APPLE__ */ - movq 1552(%rsp), %rdx - movq 1544(%rsp), %rsi - movq 1536(%rsp), %rdi + movq 1168(%rsp), %rdx + movq 1160(%rsp), %rsi + movq 1152(%rsp), %rdi #ifndef __APPLE__ - callq sp_2048_mul_avx2_32@plt + callq sp_3072_mul_avx2_24@plt #else - callq _sp_2048_mul_avx2_32 + callq _sp_3072_mul_avx2_24 #endif /* __APPLE__ */ #ifdef _WIN64 - movq 1552(%rsp), %rdx - movq 1544(%rsp), %rsi - movq 1536(%rsp), %rdi + movq 1168(%rsp), %rdx + movq 1160(%rsp), %rsi + movq 1152(%rsp), %rdi #endif /* _WIN64 */ - movq 1560(%rsp), %r13 - movq 1568(%rsp), %r14 - movq 1536(%rsp), %r15 + movq 1176(%rsp), %r13 + movq 1184(%rsp), %r14 + movq 1152(%rsp), %r15 movq %r13, %r9 - leaq 1024(%rsp), %r10 - leaq 1280(%rsp), %r11 + leaq 768(%rsp), %r10 + leaq 960(%rsp), %r11 andq %r14, %r9 negq %r13 negq %r14 - addq $0x200, %r15 + addq $0x180, %r15 movq (%r10), %rax movq (%r11), %rcx pextq %r14, %rax, %rax @@ -44141,57 +20773,9 @@ _sp_4096_mul_avx2_64: 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 + leaq 384(%rsp), %r11 movq %rsp, %r10 movq (%r10), %rax subq (%r11), %rax @@ -44336,55 +20920,7 @@ _sp_4096_mul_avx2_64: 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 @@ -44513,73 +21049,25 @@ _sp_4096_mul_avx2_64: 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 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 $0x100, %r15 + subq $0xc0, %r15 # Add movq (%r15), %rax addq (%r10), %rax @@ -44724,260 +21212,2336 @@ _sp_4096_mul_avx2_64: 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) + 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 - 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) + addq %rax, %r8 + adcq %rdx, %r9 adcq $0x00, %rcx - movq 304(%r11), %r8 - movq %rcx, 296(%r15) + # 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 - movq 312(%r11), %rax - movq %r8, 304(%r15) + 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 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) + movq 24(%rdi), %rdx + movq %rax, 16(%rdi) + adcq $0x00, %rdx + movq 32(%rdi), %rax + movq %rdx, 24(%rdi) 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) + movq 40(%rdi), %rdx + movq %rax, 32(%rdi) + adcq $0x00, %rdx + movq 48(%rdi), %rax + movq %rdx, 40(%rdi) 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) + movq 56(%rdi), %rdx + movq %rax, 48(%rdi) + adcq $0x00, %rdx + movq 64(%rdi), %rax + movq %rdx, 56(%rdi) 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) + movq 72(%rdi), %rdx + movq %rax, 64(%rdi) + adcq $0x00, %rdx + movq 80(%rdi), %rax + movq %rdx, 72(%rdi) 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) + 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 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) + movq 24(%rdi), %rdx + movq %rax, 16(%rdi) + adcq $0x00, %rdx + movq 32(%rdi), %rax + movq %rdx, 24(%rdi) 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) + movq 40(%rdi), %rdx + movq %rax, 32(%rdi) + adcq $0x00, %rdx + movq 48(%rdi), %rax + movq %rdx, 40(%rdi) 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) + movq 56(%rdi), %rdx + movq %rax, 48(%rdi) + adcq $0x00, %rdx + movq 64(%rdi), %rax + movq %rdx, 56(%rdi) adcq $0x00, %rax - movq %rax, 504(%r15) - addq $0x628, %rsp - popq %r15 - popq %r14 - popq %r13 - popq %r12 + 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_4096_mul_avx2_64,.-sp_4096_mul_avx2_64 +.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) @@ -44989,22 +23553,22 @@ _sp_4096_mul_avx2_64: */ #ifndef __APPLE__ .text -.globl sp_4096_sqr_64 -.type sp_4096_sqr_64,@function +.globl sp_3072_sqr_48 +.type sp_3072_sqr_48,@function .align 16 -sp_4096_sqr_64: +sp_3072_sqr_48: #else .section __TEXT,__text -.globl _sp_4096_sqr_64 +.globl _sp_3072_sqr_48 .p2align 4 -_sp_4096_sqr_64: +_sp_3072_sqr_48: #endif /* __APPLE__ */ - subq $0x210, %rsp - movq %rdi, 512(%rsp) - movq %rsi, 520(%rsp) + subq $0x190, %rsp + movq %rdi, 384(%rsp) + movq %rsi, 392(%rsp) movq $0x00, %rcx movq %rsp, %r8 - leaq 256(%rsi), %r9 + leaq 192(%rsi), %r9 movq (%rsi), %rdx subq (%r9), %rdx movq 8(%rsi), %rax @@ -45076,31 +23640,7 @@ _sp_4096_sqr_64: 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 @@ -45223,104 +23763,40 @@ _sp_4096_sqr_64: 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 + callq sp_3072_sqr_24@plt #else - callq _sp_2048_sqr_32 + callq _sp_3072_sqr_24 #endif /* __APPLE__ */ - movq 520(%rsp), %rsi - movq 512(%rsp), %rdi - addq $0x100, %rsi - addq $0x200, %rdi + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi + addq $0xc0, %rsi + addq $0x180, %rdi #ifndef __APPLE__ - callq sp_2048_sqr_32@plt + callq sp_3072_sqr_24@plt #else - callq _sp_2048_sqr_32 + callq _sp_3072_sqr_24 #endif /* __APPLE__ */ - movq 520(%rsp), %rsi - movq 512(%rsp), %rdi + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi #ifndef __APPLE__ - callq sp_2048_sqr_32@plt + callq sp_3072_sqr_24@plt #else - callq _sp_2048_sqr_32 + callq _sp_3072_sqr_24 #endif /* __APPLE__ */ #ifdef _WIN64 - movq 520(%rsp), %rsi - movq 512(%rsp), %rdi + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi #endif /* _WIN64 */ - movq 512(%rsp), %rsi - leaq 256(%rsp), %r8 - addq $0x300, %rsi + movq 384(%rsp), %rsi + leaq 192(%rsp), %r8 + addq $0x240, %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 + subq -192(%rsi), %rax movq -184(%r8), %rdx movq %rax, -192(%r8) sbbq -184(%rsi), %rdx @@ -45462,59 +23938,11 @@ _sp_4096_sqr_64: 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 + subq $0x180, %rsi movq -192(%r8), %rax - movq %rdx, -200(%r8) - sbbq -192(%rsi), %rax + subq -192(%rsi), %rax movq -184(%r8), %rdx movq %rax, -192(%r8) sbbq -184(%rsi), %rdx @@ -45656,61 +24084,13 @@ _sp_4096_sqr_64: 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 384(%rsp), %rdi + negq %rcx + addq $0x180, %rdi movq -192(%rdi), %rax - movq %rdx, -200(%rdi) - sbbq -192(%r8), %rax + subq -192(%r8), %rax movq -184(%rdi), %rdx movq %rax, -192(%rdi) sbbq -184(%r8), %rdx @@ -45852,34 +24232,10 @@ _sp_4096_sqr_64: 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 + movq 384(%rsp), %rdi + addq $0x240, %rdi # Add in word movq (%rdi), %rax addq %rcx, %rax @@ -45952,37 +24308,13 @@ _sp_4096_sqr_64: 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 + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi + addq $0x190, %rsp repz retq #ifndef __APPLE__ -.size sp_4096_sqr_64,.-sp_4096_sqr_64 +.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) @@ -45994,22 +24326,22 @@ _sp_4096_sqr_64: */ #ifndef __APPLE__ .text -.globl sp_4096_sqr_avx2_64 -.type sp_4096_sqr_avx2_64,@function +.globl sp_3072_sqr_avx2_48 +.type sp_3072_sqr_avx2_48,@function .align 16 -sp_4096_sqr_avx2_64: +sp_3072_sqr_avx2_48: #else .section __TEXT,__text -.globl _sp_4096_sqr_avx2_64 +.globl _sp_3072_sqr_avx2_48 .p2align 4 -_sp_4096_sqr_avx2_64: +_sp_3072_sqr_avx2_48: #endif /* __APPLE__ */ - subq $0x210, %rsp - movq %rdi, 512(%rsp) - movq %rsi, 520(%rsp) + subq $0x190, %rsp + movq %rdi, 384(%rsp) + movq %rsi, 392(%rsp) movq $0x00, %rcx movq %rsp, %r8 - leaq 256(%rsi), %r9 + leaq 192(%rsi), %r9 movq (%rsi), %rdx subq (%r9), %rdx movq 8(%rsi), %rax @@ -46081,31 +24413,7 @@ _sp_4096_sqr_avx2_64: 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 @@ -46228,104 +24536,40 @@ _sp_4096_sqr_avx2_64: 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 + callq sp_3072_sqr_avx2_24@plt #else - callq _sp_2048_sqr_avx2_32 + callq _sp_3072_sqr_avx2_24 #endif /* __APPLE__ */ - movq 520(%rsp), %rsi - movq 512(%rsp), %rdi - addq $0x100, %rsi - addq $0x200, %rdi + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi + addq $0xc0, %rsi + addq $0x180, %rdi #ifndef __APPLE__ - callq sp_2048_sqr_avx2_32@plt + callq sp_3072_sqr_avx2_24@plt #else - callq _sp_2048_sqr_avx2_32 + callq _sp_3072_sqr_avx2_24 #endif /* __APPLE__ */ - movq 520(%rsp), %rsi - movq 512(%rsp), %rdi + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi #ifndef __APPLE__ - callq sp_2048_sqr_avx2_32@plt + callq sp_3072_sqr_avx2_24@plt #else - callq _sp_2048_sqr_avx2_32 + callq _sp_3072_sqr_avx2_24 #endif /* __APPLE__ */ #ifdef _WIN64 - movq 520(%rsp), %rsi - movq 512(%rsp), %rdi + movq 392(%rsp), %rsi + movq 384(%rsp), %rdi #endif /* _WIN64 */ - movq 512(%rsp), %rsi - leaq 256(%rsp), %r8 - addq $0x300, %rsi + movq 384(%rsp), %rsi + leaq 192(%rsp), %r8 + addq $0x240, %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 + subq -192(%rsi), %rax movq -184(%r8), %rdx movq %rax, -192(%r8) sbbq -184(%rsi), %rdx @@ -46467,59 +24711,11 @@ _sp_4096_sqr_avx2_64: 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 + subq $0x180, %rsi movq -192(%r8), %rax - movq %rdx, -200(%r8) - sbbq -192(%rsi), %rax + subq -192(%rsi), %rax movq -184(%r8), %rdx movq %rax, -192(%r8) sbbq -184(%rsi), %rdx @@ -46661,61 +24857,13 @@ _sp_4096_sqr_avx2_64: 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 + movq 384(%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 + addq $0x180, %rdi movq -192(%rdi), %rax - movq %rdx, -200(%rdi) - sbbq -192(%r8), %rax + subq -192(%r8), %rax movq -184(%rdi), %rdx movq %rax, -192(%rdi) sbbq -184(%r8), %rdx @@ -46857,34 +25005,10 @@ _sp_4096_sqr_avx2_64: 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 + movq 384(%rsp), %rdi + addq $0x240, %rdi # Add in word movq (%rdi), %rax addq %rcx, %rax @@ -46957,572 +25081,2924 @@ _sp_4096_sqr_avx2_64: 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 + 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_4096_sqr_avx2_64,.-sp_4096_sqr_avx2_64 +.size sp_3072_mont_reduce_24,.-sp_3072_mont_reduce_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. +#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_mul_d_64 -.type sp_4096_mul_d_64,@function +.globl sp_3072_cond_sub_avx2_24 +.type sp_3072_cond_sub_avx2_24,@function .align 16 -sp_4096_mul_d_64: +sp_3072_cond_sub_avx2_24: #else .section __TEXT,__text -.globl _sp_4096_mul_d_64 +.globl _sp_3072_cond_sub_avx2_24 .p2align 4 -_sp_4096_mul_d_64: +_sp_3072_cond_sub_avx2_24: #endif /* __APPLE__ */ - movq %rdx, %rcx - # A[0] * B - movq %rcx, %rax - xorq %r10, %r10 - mulq (%rsi) - movq %rax, %r8 - movq %rdx, %r9 + 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) - # A[1] * B - movq %rcx, %rax - xorq %r8, %r8 - mulq 8(%rsi) - addq %rax, %r9 + sbbq %r10, %r9 + movq 16(%rdx), %r8 + movq 16(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %r10 + movq 24(%rdx), %r9 + movq 24(%rsi), %r8 + pextq %rcx, %r9, %r9 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 + sbbq %r9, %r8 + movq 32(%rdx), %r10 + movq 32(%rsi), %r9 + pextq %rcx, %r10, %r10 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 + sbbq %r10, %r9 + movq 40(%rdx), %r8 + movq 40(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %r10 + movq 48(%rdx), %r9 + movq 48(%rsi), %r8 + pextq %rcx, %r9, %r9 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 + sbbq %r9, %r8 + movq 56(%rdx), %r10 + movq 56(%rsi), %r9 + pextq %rcx, %r10, %r10 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 + sbbq %r10, %r9 + movq 64(%rdx), %r8 + movq 64(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %r10 + movq 72(%rdx), %r9 + movq 72(%rsi), %r8 + pextq %rcx, %r9, %r9 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 + sbbq %r9, %r8 + movq 80(%rdx), %r10 + movq 80(%rsi), %r9 + pextq %rcx, %r10, %r10 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 + sbbq %r10, %r9 + movq 88(%rdx), %r8 + movq 88(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %r10 + movq 96(%rdx), %r9 + movq 96(%rsi), %r8 + pextq %rcx, %r9, %r9 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 + sbbq %r9, %r8 + movq 104(%rdx), %r10 + movq 104(%rsi), %r9 + pextq %rcx, %r10, %r10 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 + sbbq %r10, %r9 + movq 112(%rdx), %r8 + movq 112(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %r10 + movq 120(%rdx), %r9 + movq 120(%rsi), %r8 + pextq %rcx, %r9, %r9 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 + sbbq %r9, %r8 + movq 128(%rdx), %r10 + movq 128(%rsi), %r9 + pextq %rcx, %r10, %r10 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 + sbbq %r10, %r9 + movq 136(%rdx), %r8 + movq 136(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %r10 + movq 144(%rdx), %r9 + movq 144(%rsi), %r8 + pextq %rcx, %r9, %r9 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 + sbbq %r9, %r8 + movq 152(%rdx), %r10 + movq 152(%rsi), %r9 + pextq %rcx, %r10, %r10 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 + sbbq %r10, %r9 + movq 160(%rdx), %r8 + movq 160(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + 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) - adcq %rdx, %r9 - adcq $0x00, %r10 - # A[22] * B - movq %rcx, %rax - xorq %r8, %r8 - mulq 176(%rsi) - addq %rax, %r9 + sbbq %r10, %r9 + movq 184(%rdx), %r8 + movq 184(%rsi), %r10 + pextq %rcx, %r8, %r8 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 + sbbq %r8, %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 + 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 312(%rsi) - addq %rax, %r8 - movq %r8, 312(%rdi) - adcq %rdx, %r9 - adcq $0x00, %r10 - # A[40] * B + mulq (%rsi) + movq %rax, %r8 + movq %rdx, %r9 + movq %r8, (%rdi) + # A[1] * B movq %rcx, %rax xorq %r8, %r8 - mulq 320(%rsi) + mulq 8(%rsi) addq %rax, %r9 - movq %r9, 320(%rdi) + movq %r9, 8(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[41] * B + # A[2] * B movq %rcx, %rax xorq %r9, %r9 - mulq 328(%rsi) + mulq 16(%rsi) addq %rax, %r10 - movq %r10, 328(%rdi) + movq %r10, 16(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[42] * B + # A[3] * B movq %rcx, %rax xorq %r10, %r10 - mulq 336(%rsi) + mulq 24(%rsi) addq %rax, %r8 - movq %r8, 336(%rdi) + movq %r8, 24(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[43] * B + # A[4] * B movq %rcx, %rax xorq %r8, %r8 - mulq 344(%rsi) + mulq 32(%rsi) addq %rax, %r9 - movq %r9, 344(%rdi) + movq %r9, 32(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[44] * B + # A[5] * B movq %rcx, %rax xorq %r9, %r9 - mulq 352(%rsi) + mulq 40(%rsi) addq %rax, %r10 - movq %r10, 352(%rdi) + movq %r10, 40(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[45] * B + # A[6] * B movq %rcx, %rax xorq %r10, %r10 - mulq 360(%rsi) + mulq 48(%rsi) addq %rax, %r8 - movq %r8, 360(%rdi) + movq %r8, 48(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[46] * B + # A[7] * B movq %rcx, %rax xorq %r8, %r8 - mulq 368(%rsi) + mulq 56(%rsi) addq %rax, %r9 - movq %r9, 368(%rdi) + movq %r9, 56(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[47] * B + # A[8] * B movq %rcx, %rax xorq %r9, %r9 - mulq 376(%rsi) + mulq 64(%rsi) addq %rax, %r10 - movq %r10, 376(%rdi) + movq %r10, 64(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[48] * B + # A[9] * B movq %rcx, %rax xorq %r10, %r10 - mulq 384(%rsi) + mulq 72(%rsi) addq %rax, %r8 - movq %r8, 384(%rdi) + movq %r8, 72(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[49] * B + # A[10] * B movq %rcx, %rax xorq %r8, %r8 - mulq 392(%rsi) + mulq 80(%rsi) addq %rax, %r9 - movq %r9, 392(%rdi) + movq %r9, 80(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[50] * B + # A[11] * B movq %rcx, %rax xorq %r9, %r9 - mulq 400(%rsi) + mulq 88(%rsi) addq %rax, %r10 - movq %r10, 400(%rdi) + movq %r10, 88(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[51] * B + # A[12] * B movq %rcx, %rax xorq %r10, %r10 - mulq 408(%rsi) + mulq 96(%rsi) addq %rax, %r8 - movq %r8, 408(%rdi) + movq %r8, 96(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[52] * B + # A[13] * B movq %rcx, %rax xorq %r8, %r8 - mulq 416(%rsi) + mulq 104(%rsi) addq %rax, %r9 - movq %r9, 416(%rdi) + movq %r9, 104(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[53] * B + # A[14] * B movq %rcx, %rax xorq %r9, %r9 - mulq 424(%rsi) + mulq 112(%rsi) addq %rax, %r10 - movq %r10, 424(%rdi) + movq %r10, 112(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[54] * B + # A[15] * B movq %rcx, %rax xorq %r10, %r10 - mulq 432(%rsi) + mulq 120(%rsi) addq %rax, %r8 - movq %r8, 432(%rdi) + movq %r8, 120(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[55] * B + # A[16] * B movq %rcx, %rax xorq %r8, %r8 - mulq 440(%rsi) + mulq 128(%rsi) addq %rax, %r9 - movq %r9, 440(%rdi) + movq %r9, 128(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[56] * B + # A[17] * B movq %rcx, %rax xorq %r9, %r9 - mulq 448(%rsi) + mulq 136(%rsi) addq %rax, %r10 - movq %r10, 448(%rdi) + movq %r10, 136(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[57] * B + # A[18] * B movq %rcx, %rax xorq %r10, %r10 - mulq 456(%rsi) + mulq 144(%rsi) addq %rax, %r8 - movq %r8, 456(%rdi) + movq %r8, 144(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[58] * B + # A[19] * B movq %rcx, %rax xorq %r8, %r8 - mulq 464(%rsi) + mulq 152(%rsi) addq %rax, %r9 - movq %r9, 464(%rdi) + movq %r9, 152(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[59] * B + # A[20] * B movq %rcx, %rax xorq %r9, %r9 - mulq 472(%rsi) + mulq 160(%rsi) addq %rax, %r10 - movq %r10, 472(%rdi) + movq %r10, 160(%rdi) adcq %rdx, %r8 adcq $0x00, %r9 - # A[60] * B + # A[21] * B movq %rcx, %rax xorq %r10, %r10 - mulq 480(%rsi) + mulq 168(%rsi) addq %rax, %r8 - movq %r8, 480(%rdi) + movq %r8, 168(%rdi) adcq %rdx, %r9 adcq $0x00, %r10 - # A[61] * B + # A[22] * B movq %rcx, %rax xorq %r8, %r8 - mulq 488(%rsi) + mulq 176(%rsi) addq %rax, %r9 - movq %r9, 488(%rdi) + movq %r9, 176(%rdi) adcq %rdx, %r10 adcq $0x00, %r8 - # A[62] * B + # A[23] * B movq %rcx, %rax - xorq %r9, %r9 - mulq 496(%rsi) + mulq 184(%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) + 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__ */ +#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_4096_mul_d_64,.-sp_4096_mul_d_64 +.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. * @@ -47533,17 +28009,17 @@ _sp_4096_mul_d_64: */ #ifndef __APPLE__ .text -.globl sp_4096_cond_sub_64 -.type sp_4096_cond_sub_64,@function +.globl sp_3072_cond_sub_48 +.type sp_3072_cond_sub_48,@function .align 16 -sp_4096_cond_sub_64: +sp_3072_cond_sub_48: #else .section __TEXT,__text -.globl _sp_4096_cond_sub_64 +.globl _sp_3072_cond_sub_48 .p2align 4 -_sp_4096_cond_sub_64: +_sp_3072_cond_sub_48: #endif /* __APPLE__ */ - subq $0x200, %rsp + subq $0x180, %rsp movq (%rdx), %r8 movq 8(%rdx), %r9 andq %rcx, %r8 @@ -47679,63 +28155,15 @@ _sp_4096_cond_sub_64: 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, %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, 496(%rsp) - movq %r9, 504(%rsp) + movq %r8, 368(%rsp) + movq %r9, 376(%rsp) movq (%rsi), %r8 movq (%rsp), %rdx subq %rdx, %r8 @@ -47927,78 +28355,14 @@ _sp_4096_cond_sub_64: 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 + addq $0x180, %rsp repz retq #ifndef __APPLE__ -.size sp_4096_cond_sub_64,.-sp_4096_cond_sub_64 +.size sp_3072_cond_sub_48,.-sp_3072_cond_sub_48 #endif /* __APPLE__ */ -/* Reduce the number back to 4096 bits using Montgomery reduction. +/* 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. @@ -48006,15 +28370,15 @@ _sp_4096_cond_sub_64: */ #ifndef __APPLE__ .text -.globl sp_4096_mont_reduce_64 -.type sp_4096_mont_reduce_64,@function +.globl sp_3072_mont_reduce_48 +.type sp_3072_mont_reduce_48,@function .align 16 -sp_4096_mont_reduce_64: +sp_3072_mont_reduce_48: #else .section __TEXT,__text -.globl _sp_4096_mont_reduce_64 +.globl _sp_3072_mont_reduce_48 .p2align 4 -_sp_4096_mont_reduce_64: +_sp_3072_mont_reduce_48: #endif /* __APPLE__ */ pushq %r12 pushq %r13 @@ -48022,11 +28386,11 @@ _sp_4096_mont_reduce_64: pushq %r15 movq %rdx, %rcx xorq %r15, %r15 - # i = 64 - movq $0x40, %r8 + # i = 48 + movq $48, %r8 movq (%rdi), %r13 movq 8(%rdi), %r14 -L_4096_mont_reduce_64_loop: +L_3072_mont_reduce_48_loop: # mu = a[i] * mp movq %r13, %r11 imulq %rcx, %r11 @@ -48412,264 +28776,104 @@ L_4096_mont_reduce_64_loop: 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) + movq %r12, 304(%rdi) adcq $0x00, %r10 - # a[i+55] += m[55] * mu + # a[i+39] += m[39] * mu movq %r11, %rax xorq %r9, %r9 - mulq 440(%rsi) - movq 440(%rdi), %r12 + mulq 312(%rsi) + movq 312(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r9 addq %r10, %r12 - movq %r12, 440(%rdi) + movq %r12, 312(%rdi) adcq $0x00, %r9 - # a[i+56] += m[56] * mu + # a[i+40] += m[40] * mu movq %r11, %rax xorq %r10, %r10 - mulq 448(%rsi) - movq 448(%rdi), %r12 + mulq 320(%rsi) + movq 320(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r10 addq %r9, %r12 - movq %r12, 448(%rdi) + movq %r12, 320(%rdi) adcq $0x00, %r10 - # a[i+57] += m[57] * mu + # a[i+41] += m[41] * mu movq %r11, %rax xorq %r9, %r9 - mulq 456(%rsi) - movq 456(%rdi), %r12 + mulq 328(%rsi) + movq 328(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r9 addq %r10, %r12 - movq %r12, 456(%rdi) + movq %r12, 328(%rdi) adcq $0x00, %r9 - # a[i+58] += m[58] * mu + # a[i+42] += m[42] * mu movq %r11, %rax xorq %r10, %r10 - mulq 464(%rsi) - movq 464(%rdi), %r12 + mulq 336(%rsi) + movq 336(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r10 addq %r9, %r12 - movq %r12, 464(%rdi) + movq %r12, 336(%rdi) adcq $0x00, %r10 - # a[i+59] += m[59] * mu + # a[i+43] += m[43] * mu movq %r11, %rax xorq %r9, %r9 - mulq 472(%rsi) - movq 472(%rdi), %r12 + mulq 344(%rsi) + movq 344(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r9 addq %r10, %r12 - movq %r12, 472(%rdi) + movq %r12, 344(%rdi) adcq $0x00, %r9 - # a[i+60] += m[60] * mu + # a[i+44] += m[44] * mu movq %r11, %rax xorq %r10, %r10 - mulq 480(%rsi) - movq 480(%rdi), %r12 + mulq 352(%rsi) + movq 352(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r10 addq %r9, %r12 - movq %r12, 480(%rdi) + movq %r12, 352(%rdi) adcq $0x00, %r10 - # a[i+61] += m[61] * mu + # a[i+45] += m[45] * mu movq %r11, %rax xorq %r9, %r9 - mulq 488(%rsi) - movq 488(%rdi), %r12 + mulq 360(%rsi) + movq 360(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r9 addq %r10, %r12 - movq %r12, 488(%rdi) + movq %r12, 360(%rdi) adcq $0x00, %r9 - # a[i+62] += m[62] * mu + # a[i+46] += m[46] * mu movq %r11, %rax xorq %r10, %r10 - mulq 496(%rsi) - movq 496(%rdi), %r12 + mulq 368(%rsi) + movq 368(%rdi), %r12 addq %rax, %r12 adcq %rdx, %r10 addq %r9, %r12 - movq %r12, 496(%rdi) + movq %r12, 368(%rdi) adcq $0x00, %r10 - # a[i+63] += m[63] * mu + # a[i+47] += m[47] * mu movq %r11, %rax - mulq 504(%rsi) - movq 504(%rdi), %r12 + mulq 376(%rsi) + movq 376(%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) + movq %r12, 376(%rdi) + adcq %rdx, 384(%rdi) adcq $0x00, %r15 # i -= 1 addq $8, %rdi decq %r8 - jnz L_4096_mont_reduce_64_loop + jnz L_3072_mont_reduce_48_loop movq %r13, (%rdi) movq %r14, 8(%rdi) negq %r15 @@ -48682,11 +28886,11 @@ L_4096_mont_reduce_64_loop: #endif /* _WIN64 */ movq %rdi, %rsi movq %rdi, %rdi - subq $0x200, %rdi + subq $0x180, %rdi #ifndef __APPLE__ - callq sp_4096_cond_sub_64@plt + callq sp_3072_cond_sub_48@plt #else - callq _sp_4096_cond_sub_64 + callq _sp_3072_cond_sub_48 #endif /* __APPLE__ */ popq %r15 popq %r14 @@ -48694,7 +28898,7 @@ L_4096_mont_reduce_64_loop: popq %r12 repz retq #ifndef __APPLE__ -.size sp_4096_mont_reduce_64,.-sp_4096_mont_reduce_64 +.size sp_3072_mont_reduce_48,.-sp_3072_mont_reduce_48 #endif /* __APPLE__ */ /* Sub b from a into r. (r = a - b) * @@ -48704,15 +28908,15 @@ L_4096_mont_reduce_64_loop: */ #ifndef __APPLE__ .text -.globl sp_4096_sub_64 -.type sp_4096_sub_64,@function +.globl sp_3072_sub_48 +.type sp_3072_sub_48,@function .align 16 -sp_4096_sub_64: +sp_3072_sub_48: #else .section __TEXT,__text -.globl _sp_4096_sub_64 +.globl _sp_3072_sub_48 .p2align 4 -_sp_4096_sub_64: +_sp_3072_sub_48: #endif /* __APPLE__ */ movq (%rsi), %rcx subq (%rdx), %rcx @@ -48857,59 +29061,11 @@ _sp_4096_sub_64: 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 +.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) @@ -48920,15 +29076,15 @@ _sp_4096_sub_64: */ #ifndef __APPLE__ .text -.globl sp_4096_mul_d_avx2_64 -.type sp_4096_mul_d_avx2_64,@function +.globl sp_3072_mul_d_avx2_48 +.type sp_3072_mul_d_avx2_48,@function .align 16 -sp_4096_mul_d_avx2_64: +sp_3072_mul_d_avx2_48: #else .section __TEXT,__text -.globl _sp_4096_mul_d_avx2_64 +.globl _sp_3072_mul_d_avx2_48 .p2align 4 -_sp_4096_mul_d_avx2_64: +_sp_3072_mul_d_avx2_48: #endif /* __APPLE__ */ movq %rdx, %rax # A[0] * B @@ -49167,158 +29323,62 @@ _sp_4096_mul_d_avx2_64: # 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 + 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, 448(%rdi) - # A[57] * B - mulxq 456(%rsi), %rcx, %r8 + movq %r9, 320(%rdi) + # A[41] * B + mulxq 328(%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 %r10, 328(%rdi) + # A[42] * B + mulxq 336(%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 %r9, 336(%rdi) + # A[43] * B + mulxq 344(%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 %r10, 344(%rdi) + # A[44] * B + mulxq 352(%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 %r9, 352(%rdi) + # A[45] * B + mulxq 360(%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 %r10, 360(%rdi) + # A[46] * B + mulxq 368(%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 %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, 504(%rdi) - movq %r9, 512(%rdi) + movq %r10, 376(%rdi) + movq %r9, 384(%rdi) repz retq #ifndef __APPLE__ -.size sp_4096_mul_d_avx2_64,.-sp_4096_mul_d_avx2_64 +.size sp_3072_mul_d_avx2_48,.-sp_3072_mul_d_avx2_48 #endif /* __APPLE__ */ #endif /* HAVE_INTEL_AVX2 */ #ifdef _WIN64 @@ -49331,15 +29391,15 @@ _sp_4096_mul_d_avx2_64: */ #ifndef __APPLE__ .text -.globl div_4096_word_asm_64 -.type div_4096_word_asm_64,@function +.globl div_3072_word_asm_48 +.type div_3072_word_asm_48,@function .align 16 -div_4096_word_asm_64: +div_3072_word_asm_48: #else .section __TEXT,__text -.globl _div_4096_word_asm_64 +.globl _div_3072_word_asm_48 .p2align 4 -_div_4096_word_asm_64: +_div_3072_word_asm_48: #endif /* __APPLE__ */ movq %rdx, %rcx movq %rsi, %rax @@ -49347,7 +29407,7 @@ _div_4096_word_asm_64: divq %rcx repz retq #ifndef __APPLE__ -.size div_4096_word_asm_64,.-div_4096_word_asm_64 +.size div_3072_word_asm_48,.-div_3072_word_asm_48 #endif /* __APPLE__ */ #endif /* _WIN64 */ #ifdef HAVE_INTEL_AVX2 @@ -49361,15 +29421,15 @@ _div_4096_word_asm_64: */ #ifndef __APPLE__ .text -.globl sp_4096_cond_sub_avx2_64 -.type sp_4096_cond_sub_avx2_64,@function +.globl sp_3072_cond_sub_avx2_48 +.type sp_3072_cond_sub_avx2_48,@function .align 16 -sp_4096_cond_sub_avx2_64: +sp_3072_cond_sub_avx2_48: #else .section __TEXT,__text -.globl _sp_4096_cond_sub_avx2_64 +.globl _sp_3072_cond_sub_avx2_48 .p2align 4 -_sp_4096_cond_sub_avx2_64: +_sp_3072_cond_sub_avx2_48: #endif /* __APPLE__ */ movq (%rdx), %r10 movq (%rsi), %r8 @@ -49433,421 +29493,213 @@ _sp_4096_cond_sub_avx2_64: 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) + movq %r10, 88(%rdi) sbbq %r9, %r8 - movq 392(%rdx), %r10 - movq 392(%rsi), %r9 + movq 104(%rdx), %r10 + movq 104(%rsi), %r9 pextq %rcx, %r10, %r10 - movq %r8, 384(%rdi) + movq %r8, 96(%rdi) sbbq %r10, %r9 - movq 400(%rdx), %r8 - movq 400(%rsi), %r10 + movq 112(%rdx), %r8 + movq 112(%rsi), %r10 pextq %rcx, %r8, %r8 - movq %r9, 392(%rdi) + movq %r9, 104(%rdi) sbbq %r8, %r10 - movq 408(%rdx), %r9 - movq 408(%rsi), %r8 + movq 120(%rdx), %r9 + movq 120(%rsi), %r8 pextq %rcx, %r9, %r9 - movq %r10, 400(%rdi) + movq %r10, 112(%rdi) sbbq %r9, %r8 - movq 416(%rdx), %r10 - movq 416(%rsi), %r9 + movq 128(%rdx), %r10 + movq 128(%rsi), %r9 pextq %rcx, %r10, %r10 - movq %r8, 408(%rdi) + movq %r8, 120(%rdi) sbbq %r10, %r9 - movq 424(%rdx), %r8 - movq 424(%rsi), %r10 + movq 136(%rdx), %r8 + movq 136(%rsi), %r10 pextq %rcx, %r8, %r8 - movq %r9, 416(%rdi) + movq %r9, 128(%rdi) sbbq %r8, %r10 - movq 432(%rdx), %r9 - movq 432(%rsi), %r8 + movq 144(%rdx), %r9 + movq 144(%rsi), %r8 pextq %rcx, %r9, %r9 - movq %r10, 424(%rdi) + movq %r10, 136(%rdi) sbbq %r9, %r8 - movq 440(%rdx), %r10 - movq 440(%rsi), %r9 + movq 152(%rdx), %r10 + movq 152(%rsi), %r9 pextq %rcx, %r10, %r10 - movq %r8, 432(%rdi) + movq %r8, 144(%rdi) sbbq %r10, %r9 - movq 448(%rdx), %r8 - movq 448(%rsi), %r10 + movq 160(%rdx), %r8 + movq 160(%rsi), %r10 pextq %rcx, %r8, %r8 - movq %r9, 440(%rdi) + movq %r9, 152(%rdi) sbbq %r8, %r10 - movq 456(%rdx), %r9 - movq 456(%rsi), %r8 + movq 168(%rdx), %r9 + movq 168(%rsi), %r8 pextq %rcx, %r9, %r9 - movq %r10, 448(%rdi) + movq %r10, 160(%rdi) sbbq %r9, %r8 - movq 464(%rdx), %r10 - movq 464(%rsi), %r9 + movq 176(%rdx), %r10 + movq 176(%rsi), %r9 pextq %rcx, %r10, %r10 - movq %r8, 456(%rdi) + movq %r8, 168(%rdi) sbbq %r10, %r9 - movq 472(%rdx), %r8 - movq 472(%rsi), %r10 + movq 184(%rdx), %r8 + movq 184(%rsi), %r10 pextq %rcx, %r8, %r8 - movq %r9, 464(%rdi) + movq %r9, 176(%rdi) sbbq %r8, %r10 - movq 480(%rdx), %r9 - movq 480(%rsi), %r8 + movq 192(%rdx), %r9 + movq 192(%rsi), %r8 pextq %rcx, %r9, %r9 - movq %r10, 472(%rdi) + movq %r10, 184(%rdi) sbbq %r9, %r8 - movq 488(%rdx), %r10 - movq 488(%rsi), %r9 + movq 200(%rdx), %r10 + movq 200(%rsi), %r9 pextq %rcx, %r10, %r10 - movq %r8, 480(%rdi) + movq %r8, 192(%rdi) sbbq %r10, %r9 - movq 496(%rdx), %r8 - movq 496(%rsi), %r10 + movq 208(%rdx), %r8 + movq 208(%rsi), %r10 pextq %rcx, %r8, %r8 - movq %r9, 488(%rdi) + movq %r9, 200(%rdi) sbbq %r8, %r10 - movq 504(%rdx), %r9 - movq 504(%rsi), %r8 + movq 216(%rdx), %r9 + movq 216(%rsi), %r8 pextq %rcx, %r9, %r9 - movq %r10, 496(%rdi) + movq %r10, 208(%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 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 @@ -50210,2440 +30062,10837 @@ _sp_4096_cmp_64: 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 + 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__ */ +#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_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 +.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 - 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 + xorq %rax, %rax + addq (%rdx), %rcx + movq 8(%rsi), %r8 + movq %rcx, (%rdi) + adcq 8(%rdx), %r8 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 %r8, 8(%rdi) + adcq 16(%rdx), %rcx + movq 24(%rsi), %r8 + movq %rcx, 16(%rdi) + adcq 24(%rdx), %r8 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 %r8, 24(%rdi) + adcq 32(%rdx), %rcx + movq 40(%rsi), %r8 + movq %rcx, 32(%rdi) + adcq 40(%rdx), %r8 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 %r8, 40(%rdi) + adcq 48(%rdx), %rcx + movq 56(%rsi), %r8 + movq %rcx, 48(%rdi) + adcq 56(%rdx), %r8 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 %r8, 56(%rdi) + adcq 64(%rdx), %rcx + movq 72(%rsi), %r8 + movq %rcx, 64(%rdi) + adcq 72(%rdx), %r8 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 %r8, 72(%rdi) + adcq 80(%rdx), %rcx + movq 88(%rsi), %r8 + movq %rcx, 80(%rdi) + adcq 88(%rdx), %r8 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 %r8, 88(%rdi) + adcq 96(%rdx), %rcx + movq 104(%rsi), %r8 + movq %rcx, 96(%rdi) + adcq 104(%rdx), %r8 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 %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 - 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 + subq (%rdx), %rcx + movq 8(%rsi), %r8 + movq %rcx, (%rdi) + sbbq 8(%rdx), %r8 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 %r8, 8(%rdi) + sbbq 16(%rdx), %rcx + movq 24(%rsi), %r8 + movq %rcx, 16(%rdi) + sbbq 24(%rdx), %r8 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 %r8, 24(%rdi) + sbbq 32(%rdx), %rcx + movq 40(%rsi), %r8 + movq %rcx, 32(%rdi) + sbbq 40(%rdx), %r8 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 %r8, 40(%rdi) + sbbq 48(%rdx), %rcx + movq 56(%rsi), %r8 + movq %rcx, 48(%rdi) + sbbq 56(%rdx), %r8 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 %r8, 56(%rdi) + sbbq 64(%rdx), %rcx + movq 72(%rsi), %r8 + movq %rcx, 64(%rdi) + sbbq 72(%rdx), %r8 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 %r8, 72(%rdi) + sbbq 80(%rdx), %rcx + movq 88(%rsi), %r8 + movq %rcx, 80(%rdi) + sbbq 88(%rdx), %r8 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 %r8, 88(%rdi) + sbbq 96(%rdx), %rcx + movq 104(%rsi), %r8 + movq %rcx, 96(%rdi) + sbbq 104(%rdx), %r8 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 + 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_get_from_table_64,.-sp_4096_get_from_table_64 +.size sp_4096_cmp_64,.-sp_4096_cmp_64 #endif /* __APPLE__ */ -#endif /* !WC_NO_CACHE_RESISTANT */ #ifdef HAVE_INTEL_AVX2 /* Reduce the number back to 4096 bits using Montgomery reduction. * diff --git a/wolfcrypt/src/sp_x86_64_asm.asm b/wolfcrypt/src/sp_x86_64_asm.asm index cdf57894078..2ad38bb43b4 100644 --- a/wolfcrypt/src/sp_x86_64_asm.asm +++ b/wolfcrypt/src/sp_x86_64_asm.asm @@ -9709,1180 +9709,6 @@ sp_2048_cmp_16 PROC ret sp_2048_cmp_16 ENDP _TEXT ENDS -IFNDEF WC_NO_CACHE_RESISTANT -_TEXT SEGMENT READONLY PARA -sp_2048_get_from_table_16 PROC - sub rsp, 128 - movdqu OWORD PTR [rsp], xmm6 - movdqu OWORD PTR [rsp+16], xmm7 - movdqu OWORD PTR [rsp+32], xmm8 - movdqu OWORD PTR [rsp+48], xmm9 - movdqu OWORD PTR [rsp+64], xmm10 - movdqu OWORD PTR [rsp+80], xmm11 - movdqu OWORD PTR [rsp+96], xmm12 - movdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - pxor xmm13, xmm13 - pshufd xmm11, xmm11, 0 - pshufd xmm10, xmm10, 0 - ; START: 0-7 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 0-7 - ; START: 8-15 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - ; END: 8-15 - movdqu xmm6, OWORD PTR [rsp] - movdqu xmm7, OWORD PTR [rsp+16] - movdqu xmm8, OWORD PTR [rsp+32] - movdqu xmm9, OWORD PTR [rsp+48] - movdqu xmm10, OWORD PTR [rsp+64] - movdqu xmm11, OWORD PTR [rsp+80] - movdqu xmm12, OWORD PTR [rsp+96] - movdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 - ret -sp_2048_get_from_table_16 ENDP -_TEXT ENDS -ENDIF IFDEF HAVE_INTEL_AVX2 ; /* Reduce the number back to 2048 bits using Montgomery reduction. ; * @@ -13166,25513 +11992,15 @@ sp_2048_cmp_32 PROC ret sp_2048_cmp_32 ENDP _TEXT ENDS -IFNDEF 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. +; */ _TEXT SEGMENT READONLY PARA -sp_2048_get_from_table_32 PROC - sub rsp, 128 - movdqu OWORD PTR [rsp], xmm6 - movdqu OWORD PTR [rsp+16], xmm7 - movdqu OWORD PTR [rsp+32], xmm8 - movdqu OWORD PTR [rsp+48], xmm9 - movdqu OWORD PTR [rsp+64], xmm10 - movdqu OWORD PTR [rsp+80], xmm11 - movdqu OWORD PTR [rsp+96], xmm12 - movdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - pxor xmm13, xmm13 - pshufd xmm11, xmm11, 0 - pshufd xmm10, xmm10, 0 - ; START: 0-7 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 32 - mov r9, QWORD PTR [rdx+256] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 33 - mov r9, QWORD PTR [rdx+264] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 34 - mov r9, QWORD PTR [rdx+272] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 35 - mov r9, QWORD PTR [rdx+280] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 36 - mov r9, QWORD PTR [rdx+288] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 37 - mov r9, QWORD PTR [rdx+296] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 38 - mov r9, QWORD PTR [rdx+304] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 39 - mov r9, QWORD PTR [rdx+312] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 40 - mov r9, QWORD PTR [rdx+320] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 41 - mov r9, QWORD PTR [rdx+328] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 42 - mov r9, QWORD PTR [rdx+336] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 43 - mov r9, QWORD PTR [rdx+344] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 44 - mov r9, QWORD PTR [rdx+352] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 45 - mov r9, QWORD PTR [rdx+360] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 46 - mov r9, QWORD PTR [rdx+368] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 47 - mov r9, QWORD PTR [rdx+376] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 48 - mov r9, QWORD PTR [rdx+384] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 49 - mov r9, QWORD PTR [rdx+392] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 50 - mov r9, QWORD PTR [rdx+400] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 51 - mov r9, QWORD PTR [rdx+408] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 52 - mov r9, QWORD PTR [rdx+416] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 53 - mov r9, QWORD PTR [rdx+424] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 54 - mov r9, QWORD PTR [rdx+432] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 55 - mov r9, QWORD PTR [rdx+440] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 56 - mov r9, QWORD PTR [rdx+448] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 57 - mov r9, QWORD PTR [rdx+456] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 58 - mov r9, QWORD PTR [rdx+464] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 59 - mov r9, QWORD PTR [rdx+472] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 60 - mov r9, QWORD PTR [rdx+480] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 61 - mov r9, QWORD PTR [rdx+488] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 62 - mov r9, QWORD PTR [rdx+496] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 63 - mov r9, QWORD PTR [rdx+504] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 0-7 - ; START: 8-15 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 32 - mov r9, QWORD PTR [rdx+256] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 33 - mov r9, QWORD PTR [rdx+264] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 34 - mov r9, QWORD PTR [rdx+272] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 35 - mov r9, QWORD PTR [rdx+280] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 36 - mov r9, QWORD PTR [rdx+288] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 37 - mov r9, QWORD PTR [rdx+296] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 38 - mov r9, QWORD PTR [rdx+304] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 39 - mov r9, QWORD PTR [rdx+312] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 40 - mov r9, QWORD PTR [rdx+320] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 41 - mov r9, QWORD PTR [rdx+328] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 42 - mov r9, QWORD PTR [rdx+336] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 43 - mov r9, QWORD PTR [rdx+344] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 44 - mov r9, QWORD PTR [rdx+352] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 45 - mov r9, QWORD PTR [rdx+360] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 46 - mov r9, QWORD PTR [rdx+368] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 47 - mov r9, QWORD PTR [rdx+376] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 48 - mov r9, QWORD PTR [rdx+384] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 49 - mov r9, QWORD PTR [rdx+392] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 50 - mov r9, QWORD PTR [rdx+400] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 51 - mov r9, QWORD PTR [rdx+408] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 52 - mov r9, QWORD PTR [rdx+416] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 53 - mov r9, QWORD PTR [rdx+424] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 54 - mov r9, QWORD PTR [rdx+432] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 55 - mov r9, QWORD PTR [rdx+440] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 56 - mov r9, QWORD PTR [rdx+448] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 57 - mov r9, QWORD PTR [rdx+456] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 58 - mov r9, QWORD PTR [rdx+464] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 59 - mov r9, QWORD PTR [rdx+472] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 60 - mov r9, QWORD PTR [rdx+480] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 61 - mov r9, QWORD PTR [rdx+488] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 62 - mov r9, QWORD PTR [rdx+496] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 63 - mov r9, QWORD PTR [rdx+504] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 8-15 - ; START: 16-23 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 32 - mov r9, QWORD PTR [rdx+256] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 33 - mov r9, QWORD PTR [rdx+264] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 34 - mov r9, QWORD PTR [rdx+272] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 35 - mov r9, QWORD PTR [rdx+280] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 36 - mov r9, QWORD PTR [rdx+288] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 37 - mov r9, QWORD PTR [rdx+296] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 38 - mov r9, QWORD PTR [rdx+304] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 39 - mov r9, QWORD PTR [rdx+312] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 40 - mov r9, QWORD PTR [rdx+320] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 41 - mov r9, QWORD PTR [rdx+328] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 42 - mov r9, QWORD PTR [rdx+336] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 43 - mov r9, QWORD PTR [rdx+344] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 44 - mov r9, QWORD PTR [rdx+352] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 45 - mov r9, QWORD PTR [rdx+360] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 46 - mov r9, QWORD PTR [rdx+368] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 47 - mov r9, QWORD PTR [rdx+376] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 48 - mov r9, QWORD PTR [rdx+384] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 49 - mov r9, QWORD PTR [rdx+392] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 50 - mov r9, QWORD PTR [rdx+400] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 51 - mov r9, QWORD PTR [rdx+408] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 52 - mov r9, QWORD PTR [rdx+416] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 53 - mov r9, QWORD PTR [rdx+424] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 54 - mov r9, QWORD PTR [rdx+432] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 55 - mov r9, QWORD PTR [rdx+440] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 56 - mov r9, QWORD PTR [rdx+448] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 57 - mov r9, QWORD PTR [rdx+456] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 58 - mov r9, QWORD PTR [rdx+464] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 59 - mov r9, QWORD PTR [rdx+472] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 60 - mov r9, QWORD PTR [rdx+480] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 61 - mov r9, QWORD PTR [rdx+488] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 62 - mov r9, QWORD PTR [rdx+496] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 63 - mov r9, QWORD PTR [rdx+504] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 16-23 - ; START: 24-31 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 32 - mov r9, QWORD PTR [rdx+256] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 33 - mov r9, QWORD PTR [rdx+264] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 34 - mov r9, QWORD PTR [rdx+272] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 35 - mov r9, QWORD PTR [rdx+280] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 36 - mov r9, QWORD PTR [rdx+288] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 37 - mov r9, QWORD PTR [rdx+296] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 38 - mov r9, QWORD PTR [rdx+304] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 39 - mov r9, QWORD PTR [rdx+312] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 40 - mov r9, QWORD PTR [rdx+320] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 41 - mov r9, QWORD PTR [rdx+328] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 42 - mov r9, QWORD PTR [rdx+336] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 43 - mov r9, QWORD PTR [rdx+344] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 44 - mov r9, QWORD PTR [rdx+352] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 45 - mov r9, QWORD PTR [rdx+360] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 46 - mov r9, QWORD PTR [rdx+368] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 47 - mov r9, QWORD PTR [rdx+376] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 48 - mov r9, QWORD PTR [rdx+384] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 49 - mov r9, QWORD PTR [rdx+392] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 50 - mov r9, QWORD PTR [rdx+400] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 51 - mov r9, QWORD PTR [rdx+408] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 52 - mov r9, QWORD PTR [rdx+416] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 53 - mov r9, QWORD PTR [rdx+424] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 54 - mov r9, QWORD PTR [rdx+432] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 55 - mov r9, QWORD PTR [rdx+440] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 56 - mov r9, QWORD PTR [rdx+448] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 57 - mov r9, QWORD PTR [rdx+456] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 58 - mov r9, QWORD PTR [rdx+464] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 59 - mov r9, QWORD PTR [rdx+472] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 60 - mov r9, QWORD PTR [rdx+480] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 61 - mov r9, QWORD PTR [rdx+488] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 62 - mov r9, QWORD PTR [rdx+496] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 63 - mov r9, QWORD PTR [rdx+504] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - ; END: 24-31 - movdqu xmm6, OWORD PTR [rsp] - movdqu xmm7, OWORD PTR [rsp+16] - movdqu xmm8, OWORD PTR [rsp+32] - movdqu xmm9, OWORD PTR [rsp+48] - movdqu xmm10, OWORD PTR [rsp+64] - movdqu xmm11, OWORD PTR [rsp+80] - movdqu xmm12, OWORD PTR [rsp+96] - movdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 - ret -sp_2048_get_from_table_32 ENDP -_TEXT ENDS -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_2048_mont_reduce_avx2_32 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - push rbx - push rbp - mov r9, rcx - mov r10, rdx - xor rbp, rbp - ; i = 32 - mov r11, 32 - mov r14, QWORD PTR [r9] - mov r15, QWORD PTR [r9+8] - mov rdi, QWORD PTR [r9+16] - mov rsi, QWORD PTR [r9+24] - add r9, 128 - xor rbp, rbp -L_2048_mont_reduce_avx2_32_loop: - ; mu = a[i] * mp - mov rdx, r14 - mov r12, r14 - imul rdx, r8 - xor rbx, rbx - ; a[i+0] += m[0] * mu - mulx rcx, rax, QWORD PTR [r10] - mov r14, r15 - adcx r12, rax - adox r14, rcx - ; a[i+1] += m[1] * mu - mulx rcx, rax, QWORD PTR [r10+8] - mov r15, rdi - adcx r14, rax - adox r15, rcx - ; a[i+2] += m[2] * mu - mulx rcx, rax, QWORD PTR [r10+16] - mov rdi, rsi - adcx r15, rax - adox rdi, rcx - ; a[i+3] += m[3] * mu - mulx rcx, rax, QWORD PTR [r10+24] - mov rsi, QWORD PTR [r9+-96] - adcx rdi, rax - adox rsi, rcx - ; a[i+4] += m[4] * mu - mulx rcx, rax, QWORD PTR [r10+32] - mov r13, QWORD PTR [r9+-88] - adcx rsi, rax - adox r13, rcx - ; a[i+5] += m[5] * mu - mulx rcx, rax, QWORD PTR [r10+40] - mov r12, QWORD PTR [r9+-80] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-88], r13 - ; a[i+6] += m[6] * mu - mulx rcx, rax, QWORD PTR [r10+48] - mov r13, QWORD PTR [r9+-72] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-80], r12 - ; a[i+7] += m[7] * mu - mulx rcx, rax, QWORD PTR [r10+56] - mov r12, QWORD PTR [r9+-64] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-72], r13 - ; a[i+8] += m[8] * mu - mulx rcx, rax, QWORD PTR [r10+64] - mov r13, QWORD PTR [r9+-56] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-64], r12 - ; a[i+9] += m[9] * mu - mulx rcx, rax, QWORD PTR [r10+72] - mov r12, QWORD PTR [r9+-48] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-56], r13 - ; a[i+10] += m[10] * mu - mulx rcx, rax, QWORD PTR [r10+80] - mov r13, QWORD PTR [r9+-40] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-48], r12 - ; a[i+11] += m[11] * mu - mulx rcx, rax, QWORD PTR [r10+88] - mov r12, QWORD PTR [r9+-32] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-40], r13 - ; a[i+12] += m[12] * mu - mulx rcx, rax, QWORD PTR [r10+96] - mov r13, QWORD PTR [r9+-24] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-32], r12 - ; a[i+13] += m[13] * mu - mulx rcx, rax, QWORD PTR [r10+104] - mov r12, QWORD PTR [r9+-16] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-24], r13 - ; a[i+14] += m[14] * mu - mulx rcx, rax, QWORD PTR [r10+112] - mov r13, QWORD PTR [r9+-8] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-16], r12 - ; a[i+15] += m[15] * mu - mulx rcx, rax, QWORD PTR [r10+120] - mov r12, QWORD PTR [r9] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-8], r13 - ; a[i+16] += m[16] * mu - mulx rcx, rax, QWORD PTR [r10+128] - mov r13, QWORD PTR [r9+8] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9], r12 - ; a[i+17] += m[17] * mu - mulx rcx, rax, QWORD PTR [r10+136] - mov r12, QWORD PTR [r9+16] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+8], r13 - ; a[i+18] += m[18] * mu - mulx rcx, rax, QWORD PTR [r10+144] - mov r13, QWORD PTR [r9+24] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+16], r12 - ; a[i+19] += m[19] * mu - mulx rcx, rax, QWORD PTR [r10+152] - mov r12, QWORD PTR [r9+32] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+24], r13 - ; a[i+20] += m[20] * mu - mulx rcx, rax, QWORD PTR [r10+160] - mov r13, QWORD PTR [r9+40] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+32], r12 - ; a[i+21] += m[21] * mu - mulx rcx, rax, QWORD PTR [r10+168] - mov r12, QWORD PTR [r9+48] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+40], r13 - ; a[i+22] += m[22] * mu - mulx rcx, rax, QWORD PTR [r10+176] - mov r13, QWORD PTR [r9+56] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+48], r12 - ; a[i+23] += m[23] * mu - mulx rcx, rax, QWORD PTR [r10+184] - mov r12, QWORD PTR [r9+64] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+56], r13 - ; a[i+24] += m[24] * mu - mulx rcx, rax, QWORD PTR [r10+192] - mov r13, QWORD PTR [r9+72] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+64], r12 - ; a[i+25] += m[25] * mu - mulx rcx, rax, QWORD PTR [r10+200] - mov r12, QWORD PTR [r9+80] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+72], r13 - ; a[i+26] += m[26] * mu - mulx rcx, rax, QWORD PTR [r10+208] - mov r13, QWORD PTR [r9+88] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+80], r12 - ; a[i+27] += m[27] * mu - mulx rcx, rax, QWORD PTR [r10+216] - mov r12, QWORD PTR [r9+96] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+88], r13 - ; a[i+28] += m[28] * mu - mulx rcx, rax, QWORD PTR [r10+224] - mov r13, QWORD PTR [r9+104] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+96], r12 - ; a[i+29] += m[29] * mu - mulx rcx, rax, QWORD PTR [r10+232] - mov r12, QWORD PTR [r9+112] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+104], r13 - ; a[i+30] += m[30] * mu - mulx rcx, rax, QWORD PTR [r10+240] - mov r13, QWORD PTR [r9+120] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+112], r12 - ; a[i+31] += m[31] * mu - mulx rcx, rax, QWORD PTR [r10+248] - mov r12, QWORD PTR [r9+128] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+120], r13 - adcx r12, rbp - mov rbp, rbx - mov QWORD PTR [r9+128], r12 - adox rbp, rbx - adcx rbp, rbx - ; a += 1 - add r9, 8 - ; i -= 1 - sub r11, 1 - jnz L_2048_mont_reduce_avx2_32_loop - sub r9, 128 - neg rbp - mov r8, r9 - sub r9, 256 - mov rcx, QWORD PTR [r10] - mov rdx, r14 - pext rcx, rcx, rbp - sub rdx, rcx - mov rcx, QWORD PTR [r10+8] - mov rax, r15 - pext rcx, rcx, rbp - mov QWORD PTR [r9], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+16] - mov rcx, rdi - pext rdx, rdx, rbp - mov QWORD PTR [r9+8], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+24] - mov rdx, rsi - pext rax, rax, rbp - mov QWORD PTR [r9+16], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+32] - mov rax, QWORD PTR [r8+32] - pext rcx, rcx, rbp - mov QWORD PTR [r9+24], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+40] - mov rcx, QWORD PTR [r8+40] - pext rdx, rdx, rbp - mov QWORD PTR [r9+32], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+48] - mov rdx, QWORD PTR [r8+48] - pext rax, rax, rbp - mov QWORD PTR [r9+40], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+56] - mov rax, QWORD PTR [r8+56] - pext rcx, rcx, rbp - mov QWORD PTR [r9+48], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+64] - mov rcx, QWORD PTR [r8+64] - pext rdx, rdx, rbp - mov QWORD PTR [r9+56], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+72] - mov rdx, QWORD PTR [r8+72] - pext rax, rax, rbp - mov QWORD PTR [r9+64], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+80] - mov rax, QWORD PTR [r8+80] - pext rcx, rcx, rbp - mov QWORD PTR [r9+72], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+88] - mov rcx, QWORD PTR [r8+88] - pext rdx, rdx, rbp - mov QWORD PTR [r9+80], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+96] - mov rdx, QWORD PTR [r8+96] - pext rax, rax, rbp - mov QWORD PTR [r9+88], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+104] - mov rax, QWORD PTR [r8+104] - pext rcx, rcx, rbp - mov QWORD PTR [r9+96], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+112] - mov rcx, QWORD PTR [r8+112] - pext rdx, rdx, rbp - mov QWORD PTR [r9+104], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+120] - mov rdx, QWORD PTR [r8+120] - pext rax, rax, rbp - mov QWORD PTR [r9+112], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+128] - mov rax, QWORD PTR [r8+128] - pext rcx, rcx, rbp - mov QWORD PTR [r9+120], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+136] - mov rcx, QWORD PTR [r8+136] - pext rdx, rdx, rbp - mov QWORD PTR [r9+128], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+144] - mov rdx, QWORD PTR [r8+144] - pext rax, rax, rbp - mov QWORD PTR [r9+136], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+152] - mov rax, QWORD PTR [r8+152] - pext rcx, rcx, rbp - mov QWORD PTR [r9+144], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+160] - mov rcx, QWORD PTR [r8+160] - pext rdx, rdx, rbp - mov QWORD PTR [r9+152], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+168] - mov rdx, QWORD PTR [r8+168] - pext rax, rax, rbp - mov QWORD PTR [r9+160], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+176] - mov rax, QWORD PTR [r8+176] - pext rcx, rcx, rbp - mov QWORD PTR [r9+168], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+184] - mov rcx, QWORD PTR [r8+184] - pext rdx, rdx, rbp - mov QWORD PTR [r9+176], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+192] - mov rdx, QWORD PTR [r8+192] - pext rax, rax, rbp - mov QWORD PTR [r9+184], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+200] - mov rax, QWORD PTR [r8+200] - pext rcx, rcx, rbp - mov QWORD PTR [r9+192], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+208] - mov rcx, QWORD PTR [r8+208] - pext rdx, rdx, rbp - mov QWORD PTR [r9+200], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+216] - mov rdx, QWORD PTR [r8+216] - pext rax, rax, rbp - mov QWORD PTR [r9+208], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+224] - mov rax, QWORD PTR [r8+224] - pext rcx, rcx, rbp - mov QWORD PTR [r9+216], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+232] - mov rcx, QWORD PTR [r8+232] - pext rdx, rdx, rbp - mov QWORD PTR [r9+224], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+240] - mov rdx, QWORD PTR [r8+240] - pext rax, rax, rbp - mov QWORD PTR [r9+232], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+248] - mov rax, QWORD PTR [r8+248] - pext rcx, rcx, rbp - mov QWORD PTR [r9+240], rdx - sbb rax, rcx - mov QWORD PTR [r9+248], rax - pop rbp - pop rbx - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_2048_mont_reduce_avx2_32 ENDP -_TEXT ENDS -ENDIF -IFNDEF WC_NO_CACHE_RESISTANT -_TEXT SEGMENT READONLY PARA -sp_2048_get_from_table_avx2_32 PROC - sub rsp, 128 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - 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 - mov r9, QWORD PTR [rdx] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 32 - mov r9, QWORD PTR [rdx+256] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 33 - mov r9, QWORD PTR [rdx+264] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 34 - mov r9, QWORD PTR [rdx+272] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 35 - mov r9, QWORD PTR [rdx+280] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 36 - mov r9, QWORD PTR [rdx+288] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 37 - mov r9, QWORD PTR [rdx+296] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 38 - mov r9, QWORD PTR [rdx+304] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 39 - mov r9, QWORD PTR [rdx+312] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 40 - mov r9, QWORD PTR [rdx+320] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 41 - mov r9, QWORD PTR [rdx+328] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 42 - mov r9, QWORD PTR [rdx+336] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 43 - mov r9, QWORD PTR [rdx+344] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 44 - mov r9, QWORD PTR [rdx+352] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 45 - mov r9, QWORD PTR [rdx+360] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 46 - mov r9, QWORD PTR [rdx+368] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 47 - mov r9, QWORD PTR [rdx+376] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 48 - mov r9, QWORD PTR [rdx+384] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 49 - mov r9, QWORD PTR [rdx+392] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 50 - mov r9, QWORD PTR [rdx+400] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 51 - mov r9, QWORD PTR [rdx+408] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 52 - mov r9, QWORD PTR [rdx+416] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 53 - mov r9, QWORD PTR [rdx+424] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 54 - mov r9, QWORD PTR [rdx+432] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 55 - mov r9, QWORD PTR [rdx+440] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 56 - mov r9, QWORD PTR [rdx+448] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 57 - mov r9, QWORD PTR [rdx+456] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 58 - mov r9, QWORD PTR [rdx+464] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 59 - mov r9, QWORD PTR [rdx+472] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 60 - mov r9, QWORD PTR [rdx+480] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 61 - mov r9, QWORD PTR [rdx+488] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 62 - mov r9, QWORD PTR [rdx+496] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 63 - mov r9, QWORD PTR [rdx+504] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - vmovdqu YMMWORD PTR [rcx], ymm4 - vmovdqu YMMWORD PTR [rcx+32], ymm5 - vmovdqu YMMWORD PTR [rcx+64], ymm6 - vmovdqu YMMWORD PTR [rcx+96], ymm7 - add rcx, 128 - ; 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 - mov r9, QWORD PTR [rdx] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 32 - mov r9, QWORD PTR [rdx+256] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 33 - mov r9, QWORD PTR [rdx+264] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 34 - mov r9, QWORD PTR [rdx+272] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 35 - mov r9, QWORD PTR [rdx+280] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 36 - mov r9, QWORD PTR [rdx+288] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 37 - mov r9, QWORD PTR [rdx+296] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 38 - mov r9, QWORD PTR [rdx+304] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 39 - mov r9, QWORD PTR [rdx+312] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 40 - mov r9, QWORD PTR [rdx+320] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 41 - mov r9, QWORD PTR [rdx+328] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 42 - mov r9, QWORD PTR [rdx+336] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 43 - mov r9, QWORD PTR [rdx+344] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 44 - mov r9, QWORD PTR [rdx+352] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 45 - mov r9, QWORD PTR [rdx+360] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 46 - mov r9, QWORD PTR [rdx+368] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 47 - mov r9, QWORD PTR [rdx+376] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 48 - mov r9, QWORD PTR [rdx+384] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 49 - mov r9, QWORD PTR [rdx+392] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 50 - mov r9, QWORD PTR [rdx+400] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 51 - mov r9, QWORD PTR [rdx+408] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 52 - mov r9, QWORD PTR [rdx+416] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 53 - mov r9, QWORD PTR [rdx+424] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 54 - mov r9, QWORD PTR [rdx+432] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 55 - mov r9, QWORD PTR [rdx+440] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 56 - mov r9, QWORD PTR [rdx+448] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 57 - mov r9, QWORD PTR [rdx+456] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 58 - mov r9, QWORD PTR [rdx+464] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 59 - mov r9, QWORD PTR [rdx+472] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 60 - mov r9, QWORD PTR [rdx+480] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 61 - mov r9, QWORD PTR [rdx+488] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 62 - mov r9, QWORD PTR [rdx+496] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 63 - mov r9, QWORD PTR [rdx+504] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - vmovdqu YMMWORD PTR [rcx], ymm4 - vmovdqu YMMWORD PTR [rcx+32], ymm5 - vmovdqu YMMWORD PTR [rcx+64], ymm6 - vmovdqu YMMWORD PTR [rcx+96], ymm7 - ; END: 16-31 - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 - ret -sp_2048_get_from_table_avx2_32 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_2048_cond_add_16 PROC - sub rsp, 128 - mov rax, 0 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp], r10 - mov QWORD PTR [rsp+8], r11 - mov r10, QWORD PTR [r8+16] - mov r11, QWORD PTR [r8+24] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+16], r10 - mov QWORD PTR [rsp+24], r11 - mov r10, QWORD PTR [r8+32] - mov r11, QWORD PTR [r8+40] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+32], r10 - mov QWORD PTR [rsp+40], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+48], r10 - mov QWORD PTR [rsp+56], r11 - mov r10, QWORD PTR [r8+64] - mov r11, QWORD PTR [r8+72] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+64], r10 - mov QWORD PTR [rsp+72], r11 - mov r10, QWORD PTR [r8+80] - mov r11, QWORD PTR [r8+88] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+80], r10 - mov QWORD PTR [rsp+88], r11 - mov r10, QWORD PTR [r8+96] - mov r11, QWORD PTR [r8+104] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+96], r10 - mov QWORD PTR [rsp+104], r11 - mov r10, QWORD PTR [r8+112] - mov r11, QWORD PTR [r8+120] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+112], r10 - mov QWORD PTR [rsp+120], r11 - mov r10, QWORD PTR [rdx] - mov r8, QWORD PTR [rsp] - add r10, r8 - mov r11, QWORD PTR [rdx+8] - mov r8, QWORD PTR [rsp+8] - adc r11, r8 - mov QWORD PTR [rcx], r10 - mov r10, QWORD PTR [rdx+16] - mov r8, QWORD PTR [rsp+16] - adc r10, r8 - mov QWORD PTR [rcx+8], r11 - mov r11, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rsp+24] - adc r11, r8 - mov QWORD PTR [rcx+16], r10 - mov r10, QWORD PTR [rdx+32] - mov r8, QWORD PTR [rsp+32] - adc r10, r8 - mov QWORD PTR [rcx+24], r11 - mov r11, QWORD PTR [rdx+40] - mov r8, QWORD PTR [rsp+40] - adc r11, r8 - mov QWORD PTR [rcx+32], r10 - mov r10, QWORD PTR [rdx+48] - mov r8, QWORD PTR [rsp+48] - adc r10, r8 - mov QWORD PTR [rcx+40], r11 - mov r11, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rsp+56] - adc r11, r8 - mov QWORD PTR [rcx+48], r10 - mov r10, QWORD PTR [rdx+64] - mov r8, QWORD PTR [rsp+64] - adc r10, r8 - mov QWORD PTR [rcx+56], r11 - mov r11, QWORD PTR [rdx+72] - mov r8, QWORD PTR [rsp+72] - adc r11, r8 - mov QWORD PTR [rcx+64], r10 - mov r10, QWORD PTR [rdx+80] - mov r8, QWORD PTR [rsp+80] - adc r10, r8 - mov QWORD PTR [rcx+72], r11 - mov r11, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rsp+88] - adc r11, r8 - mov QWORD PTR [rcx+80], r10 - mov r10, QWORD PTR [rdx+96] - mov r8, QWORD PTR [rsp+96] - adc r10, r8 - mov QWORD PTR [rcx+88], r11 - mov r11, QWORD PTR [rdx+104] - mov r8, QWORD PTR [rsp+104] - adc r11, r8 - mov QWORD PTR [rcx+96], r10 - mov r10, QWORD PTR [rdx+112] - mov r8, QWORD PTR [rsp+112] - adc r10, r8 - mov QWORD PTR [rcx+104], r11 - mov r11, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rsp+120] - adc r11, r8 - mov QWORD PTR [rcx+112], r10 - mov QWORD PTR [rcx+120], r11 - adc rax, 0 - add rsp, 128 - ret -sp_2048_cond_add_16 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_2048_cond_add_avx2_16 PROC - push r12 - mov rax, 0 - mov r12, QWORD PTR [r8] - mov r10, QWORD PTR [rdx] - pext r12, r12, r9 - add r10, r12 - mov r12, QWORD PTR [r8+8] - mov r11, QWORD PTR [rdx+8] - pext r12, r12, r9 - mov QWORD PTR [rcx], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+16] - mov r12, QWORD PTR [rdx+16] - pext r10, r10, r9 - mov QWORD PTR [rcx+8], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+24] - mov r10, QWORD PTR [rdx+24] - pext r11, r11, r9 - mov QWORD PTR [rcx+16], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+32] - mov r11, QWORD PTR [rdx+32] - pext r12, r12, r9 - mov QWORD PTR [rcx+24], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+40] - mov r12, QWORD PTR [rdx+40] - pext r10, r10, r9 - mov QWORD PTR [rcx+32], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+48] - pext r11, r11, r9 - mov QWORD PTR [rcx+40], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+56] - mov r11, QWORD PTR [rdx+56] - pext r12, r12, r9 - mov QWORD PTR [rcx+48], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+64] - mov r12, QWORD PTR [rdx+64] - pext r10, r10, r9 - mov QWORD PTR [rcx+56], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+72] - mov r10, QWORD PTR [rdx+72] - pext r11, r11, r9 - mov QWORD PTR [rcx+64], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+80] - mov r11, QWORD PTR [rdx+80] - pext r12, r12, r9 - mov QWORD PTR [rcx+72], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+88] - mov r12, QWORD PTR [rdx+88] - pext r10, r10, r9 - mov QWORD PTR [rcx+80], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+96] - pext r11, r11, r9 - mov QWORD PTR [rcx+88], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+104] - mov r11, QWORD PTR [rdx+104] - pext r12, r12, r9 - mov QWORD PTR [rcx+96], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+112] - mov r12, QWORD PTR [rdx+112] - pext r10, r10, r9 - mov QWORD PTR [rcx+104], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+120] - mov r10, QWORD PTR [rdx+120] - pext r11, r11, r9 - mov QWORD PTR [rcx+112], r12 - adc r10, r11 - mov QWORD PTR [rcx+120], r10 - adc rax, 0 - pop r12 - ret -sp_2048_cond_add_avx2_16 ENDP -_TEXT ENDS -ENDIF -; /* Shift number left by n bit. (r = a << n) -; * -; * r Result of left shift by n. -; * a Number to shift. -; * n Amoutnt o shift. -; */ -_TEXT SEGMENT READONLY PARA -sp_2048_lshift_32 PROC - push r12 - push r13 - mov rax, rcx - mov cl, r8b - mov r12, 0 - mov r13, QWORD PTR [rdx+216] - mov r8, QWORD PTR [rdx+224] - mov r9, QWORD PTR [rdx+232] - mov r10, QWORD PTR [rdx+240] - mov r11, QWORD PTR [rdx+248] - shld r12, r11, cl - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+224], r8 - mov QWORD PTR [rax+232], r9 - mov QWORD PTR [rax+240], r10 - mov QWORD PTR [rax+248], r11 - mov QWORD PTR [rax+256], r12 - mov r11, QWORD PTR [rdx+184] - mov r8, QWORD PTR [rdx+192] - mov r9, QWORD PTR [rdx+200] - mov r10, QWORD PTR [rdx+208] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+192], r8 - mov QWORD PTR [rax+200], r9 - mov QWORD PTR [rax+208], r10 - mov QWORD PTR [rax+216], r13 - mov r13, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rdx+160] - mov r9, QWORD PTR [rdx+168] - mov r10, QWORD PTR [rdx+176] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+160], r8 - mov QWORD PTR [rax+168], r9 - mov QWORD PTR [rax+176], r10 - mov QWORD PTR [rax+184], r11 - mov r11, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rdx+128] - mov r9, QWORD PTR [rdx+136] - mov r10, QWORD PTR [rdx+144] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+128], r8 - mov QWORD PTR [rax+136], r9 - mov QWORD PTR [rax+144], r10 - mov QWORD PTR [rax+152], r13 - mov r13, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rdx+96] - mov r9, QWORD PTR [rdx+104] - mov r10, QWORD PTR [rdx+112] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+96], r8 - mov QWORD PTR [rax+104], r9 - mov QWORD PTR [rax+112], r10 - mov QWORD PTR [rax+120], r11 - mov r11, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rdx+64] - mov r9, QWORD PTR [rdx+72] - mov r10, QWORD PTR [rdx+80] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+64], r8 - mov QWORD PTR [rax+72], r9 - mov QWORD PTR [rax+80], r10 - mov QWORD PTR [rax+88], r13 - mov r13, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rdx+32] - mov r9, QWORD PTR [rdx+40] - mov r10, QWORD PTR [rdx+48] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+32], r8 - mov QWORD PTR [rax+40], r9 - mov QWORD PTR [rax+48], r10 - mov QWORD PTR [rax+56], r11 - mov r8, QWORD PTR [rdx] - mov r9, QWORD PTR [rdx+8] - mov r10, QWORD PTR [rdx+16] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shl r8, cl - mov QWORD PTR [rax], r8 - mov QWORD PTR [rax+8], r9 - mov QWORD PTR [rax+16], r10 - mov QWORD PTR [rax+24], r13 - pop r13 - pop r12 - ret -sp_2048_lshift_32 ENDP -_TEXT ENDS -ENDIF -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_from_bin_bswap PROC - push r12 - push r13 - mov r11, r8 - mov r12, rcx - add r11, r9 - add r12, 384 - xor r13, r13 - jmp L_3072_from_bin_bswap_64_end -L_3072_from_bin_bswap_64_start: - sub r11, 64 - mov rax, QWORD PTR [r11+56] - mov r10, QWORD PTR [r11+48] - bswap rax - bswap r10 - mov QWORD PTR [rcx], rax - mov QWORD PTR [rcx+8], r10 - mov rax, QWORD PTR [r11+40] - mov r10, QWORD PTR [r11+32] - bswap rax - bswap r10 - mov QWORD PTR [rcx+16], rax - mov QWORD PTR [rcx+24], r10 - mov rax, QWORD PTR [r11+24] - mov r10, QWORD PTR [r11+16] - bswap rax - bswap r10 - mov QWORD PTR [rcx+32], rax - mov QWORD PTR [rcx+40], r10 - mov rax, QWORD PTR [r11+8] - mov r10, QWORD PTR [r11] - bswap rax - bswap r10 - mov QWORD PTR [rcx+48], rax - mov QWORD PTR [rcx+56], r10 - add rcx, 64 - sub r9, 64 -L_3072_from_bin_bswap_64_end: - cmp r9, 63 - jg L_3072_from_bin_bswap_64_start - jmp L_3072_from_bin_bswap_8_end -L_3072_from_bin_bswap_8_start: - sub r11, 8 - mov rax, QWORD PTR [r11] - bswap rax - mov QWORD PTR [rcx], rax - add rcx, 8 - sub r9, 8 -L_3072_from_bin_bswap_8_end: - cmp r9, 7 - jg L_3072_from_bin_bswap_8_start - cmp r9, r13 - je L_3072_from_bin_bswap_hi_end - mov r10, r13 - mov rax, r13 -L_3072_from_bin_bswap_hi_start: - mov al, BYTE PTR [r8] - shl r10, 8 - inc r8 - add r10, rax - dec r9 - jg L_3072_from_bin_bswap_hi_start - mov QWORD PTR [rcx], r10 - add rcx, 8 -L_3072_from_bin_bswap_hi_end: - cmp rcx, r12 - jge L_3072_from_bin_bswap_zero_end -L_3072_from_bin_bswap_zero_start: - mov QWORD PTR [rcx], r13 - add rcx, 8 - cmp rcx, r12 - jl L_3072_from_bin_bswap_zero_start -L_3072_from_bin_bswap_zero_end: - pop r13 - pop r12 - ret -sp_3072_from_bin_bswap ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_from_bin_movbe PROC - push r12 - mov r11, r8 - mov r12, rcx - add r11, r9 - add r12, 384 - jmp L_3072_from_bin_movbe_64_end -L_3072_from_bin_movbe_64_start: - sub r11, 64 - movbe rax, QWORD PTR [r11+56] - movbe r10, QWORD PTR [r11+48] - mov QWORD PTR [rcx], rax - mov QWORD PTR [rcx+8], r10 - movbe rax, QWORD PTR [r11+40] - movbe r10, QWORD PTR [r11+32] - mov QWORD PTR [rcx+16], rax - mov QWORD PTR [rcx+24], r10 - movbe rax, QWORD PTR [r11+24] - movbe r10, QWORD PTR [r11+16] - mov QWORD PTR [rcx+32], rax - mov QWORD PTR [rcx+40], r10 - movbe rax, QWORD PTR [r11+8] - movbe r10, QWORD PTR [r11] - mov QWORD PTR [rcx+48], rax - mov QWORD PTR [rcx+56], r10 - add rcx, 64 - sub r9, 64 -L_3072_from_bin_movbe_64_end: - cmp r9, 63 - jg L_3072_from_bin_movbe_64_start - jmp L_3072_from_bin_movbe_8_end -L_3072_from_bin_movbe_8_start: - sub r11, 8 - movbe rax, QWORD PTR [r11] - mov QWORD PTR [rcx], rax - add rcx, 8 - sub r9, 8 -L_3072_from_bin_movbe_8_end: - cmp r9, 7 - jg L_3072_from_bin_movbe_8_start - cmp r9, 0 - je L_3072_from_bin_movbe_hi_end - mov r10, 0 - mov rax, 0 -L_3072_from_bin_movbe_hi_start: - mov al, BYTE PTR [r8] - shl r10, 8 - inc r8 - add r10, rax - dec r9 - jg L_3072_from_bin_movbe_hi_start - mov QWORD PTR [rcx], r10 - add rcx, 8 -L_3072_from_bin_movbe_hi_end: - cmp rcx, r12 - jge L_3072_from_bin_movbe_zero_end -L_3072_from_bin_movbe_zero_start: - mov QWORD PTR [rcx], 0 - add rcx, 8 - cmp rcx, r12 - jl L_3072_from_bin_movbe_zero_start -L_3072_from_bin_movbe_zero_end: - pop r12 - ret -sp_3072_from_bin_movbe ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_to_bin_bswap_48 PROC - mov rax, QWORD PTR [rcx+376] - mov r8, QWORD PTR [rcx+368] - bswap rax - bswap r8 - mov QWORD PTR [rdx], rax - mov QWORD PTR [rdx+8], r8 - mov rax, QWORD PTR [rcx+360] - mov r8, QWORD PTR [rcx+352] - bswap rax - bswap r8 - mov QWORD PTR [rdx+16], rax - mov QWORD PTR [rdx+24], r8 - mov rax, QWORD PTR [rcx+344] - mov r8, QWORD PTR [rcx+336] - bswap rax - bswap r8 - mov QWORD PTR [rdx+32], rax - mov QWORD PTR [rdx+40], r8 - mov rax, QWORD PTR [rcx+328] - mov r8, QWORD PTR [rcx+320] - bswap rax - bswap r8 - mov QWORD PTR [rdx+48], rax - mov QWORD PTR [rdx+56], r8 - mov rax, QWORD PTR [rcx+312] - mov r8, QWORD PTR [rcx+304] - bswap rax - bswap r8 - mov QWORD PTR [rdx+64], rax - mov QWORD PTR [rdx+72], r8 - mov rax, QWORD PTR [rcx+296] - mov r8, QWORD PTR [rcx+288] - bswap rax - bswap r8 - mov QWORD PTR [rdx+80], rax - mov QWORD PTR [rdx+88], r8 - mov rax, QWORD PTR [rcx+280] - mov r8, QWORD PTR [rcx+272] - bswap rax - bswap r8 - mov QWORD PTR [rdx+96], rax - mov QWORD PTR [rdx+104], r8 - mov rax, QWORD PTR [rcx+264] - mov r8, QWORD PTR [rcx+256] - bswap rax - bswap r8 - mov QWORD PTR [rdx+112], rax - mov QWORD PTR [rdx+120], r8 - mov rax, QWORD PTR [rcx+248] - mov r8, QWORD PTR [rcx+240] - bswap rax - bswap r8 - mov QWORD PTR [rdx+128], rax - mov QWORD PTR [rdx+136], r8 - mov rax, QWORD PTR [rcx+232] - mov r8, QWORD PTR [rcx+224] - bswap rax - bswap r8 - mov QWORD PTR [rdx+144], rax - mov QWORD PTR [rdx+152], r8 - mov rax, QWORD PTR [rcx+216] - mov r8, QWORD PTR [rcx+208] - bswap rax - bswap r8 - mov QWORD PTR [rdx+160], rax - mov QWORD PTR [rdx+168], r8 - mov rax, QWORD PTR [rcx+200] - mov r8, QWORD PTR [rcx+192] - bswap rax - bswap r8 - mov QWORD PTR [rdx+176], rax - mov QWORD PTR [rdx+184], r8 - mov rax, QWORD PTR [rcx+184] - mov r8, QWORD PTR [rcx+176] - bswap rax - bswap r8 - mov QWORD PTR [rdx+192], rax - mov QWORD PTR [rdx+200], r8 - mov rax, QWORD PTR [rcx+168] - mov r8, QWORD PTR [rcx+160] - bswap rax - bswap r8 - mov QWORD PTR [rdx+208], rax - mov QWORD PTR [rdx+216], r8 - mov rax, QWORD PTR [rcx+152] - mov r8, QWORD PTR [rcx+144] - bswap rax - bswap r8 - mov QWORD PTR [rdx+224], rax - mov QWORD PTR [rdx+232], r8 - mov rax, QWORD PTR [rcx+136] - mov r8, QWORD PTR [rcx+128] - bswap rax - bswap r8 - mov QWORD PTR [rdx+240], rax - mov QWORD PTR [rdx+248], r8 - mov rax, QWORD PTR [rcx+120] - mov r8, QWORD PTR [rcx+112] - bswap rax - bswap r8 - mov QWORD PTR [rdx+256], rax - mov QWORD PTR [rdx+264], r8 - mov rax, QWORD PTR [rcx+104] - mov r8, QWORD PTR [rcx+96] - bswap rax - bswap r8 - mov QWORD PTR [rdx+272], rax - mov QWORD PTR [rdx+280], r8 - mov rax, QWORD PTR [rcx+88] - mov r8, QWORD PTR [rcx+80] - bswap rax - bswap r8 - mov QWORD PTR [rdx+288], rax - mov QWORD PTR [rdx+296], r8 - mov rax, QWORD PTR [rcx+72] - mov r8, QWORD PTR [rcx+64] - bswap rax - bswap r8 - mov QWORD PTR [rdx+304], rax - mov QWORD PTR [rdx+312], r8 - mov rax, QWORD PTR [rcx+56] - mov r8, QWORD PTR [rcx+48] - bswap rax - bswap r8 - mov QWORD PTR [rdx+320], rax - mov QWORD PTR [rdx+328], r8 - mov rax, QWORD PTR [rcx+40] - mov r8, QWORD PTR [rcx+32] - bswap rax - bswap r8 - mov QWORD PTR [rdx+336], rax - mov QWORD PTR [rdx+344], r8 - mov rax, QWORD PTR [rcx+24] - mov r8, QWORD PTR [rcx+16] - bswap rax - bswap r8 - mov QWORD PTR [rdx+352], rax - mov QWORD PTR [rdx+360], r8 - mov rax, QWORD PTR [rcx+8] - mov r8, QWORD PTR [rcx] - bswap rax - bswap r8 - mov QWORD PTR [rdx+368], rax - mov QWORD PTR [rdx+376], r8 - ret -sp_3072_to_bin_bswap_48 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_to_bin_movbe_48 PROC - movbe rax, QWORD PTR [rcx+376] - movbe r8, QWORD PTR [rcx+368] - mov QWORD PTR [rdx], rax - mov QWORD PTR [rdx+8], r8 - movbe rax, QWORD PTR [rcx+360] - movbe r8, QWORD PTR [rcx+352] - mov QWORD PTR [rdx+16], rax - mov QWORD PTR [rdx+24], r8 - movbe rax, QWORD PTR [rcx+344] - movbe r8, QWORD PTR [rcx+336] - mov QWORD PTR [rdx+32], rax - mov QWORD PTR [rdx+40], r8 - movbe rax, QWORD PTR [rcx+328] - movbe r8, QWORD PTR [rcx+320] - mov QWORD PTR [rdx+48], rax - mov QWORD PTR [rdx+56], r8 - movbe rax, QWORD PTR [rcx+312] - movbe r8, QWORD PTR [rcx+304] - mov QWORD PTR [rdx+64], rax - mov QWORD PTR [rdx+72], r8 - movbe rax, QWORD PTR [rcx+296] - movbe r8, QWORD PTR [rcx+288] - mov QWORD PTR [rdx+80], rax - mov QWORD PTR [rdx+88], r8 - movbe rax, QWORD PTR [rcx+280] - movbe r8, QWORD PTR [rcx+272] - mov QWORD PTR [rdx+96], rax - mov QWORD PTR [rdx+104], r8 - movbe rax, QWORD PTR [rcx+264] - movbe r8, QWORD PTR [rcx+256] - mov QWORD PTR [rdx+112], rax - mov QWORD PTR [rdx+120], r8 - movbe rax, QWORD PTR [rcx+248] - movbe r8, QWORD PTR [rcx+240] - mov QWORD PTR [rdx+128], rax - mov QWORD PTR [rdx+136], r8 - movbe rax, QWORD PTR [rcx+232] - movbe r8, QWORD PTR [rcx+224] - mov QWORD PTR [rdx+144], rax - mov QWORD PTR [rdx+152], r8 - movbe rax, QWORD PTR [rcx+216] - movbe r8, QWORD PTR [rcx+208] - mov QWORD PTR [rdx+160], rax - mov QWORD PTR [rdx+168], r8 - movbe rax, QWORD PTR [rcx+200] - movbe r8, QWORD PTR [rcx+192] - mov QWORD PTR [rdx+176], rax - mov QWORD PTR [rdx+184], r8 - movbe rax, QWORD PTR [rcx+184] - movbe r8, QWORD PTR [rcx+176] - mov QWORD PTR [rdx+192], rax - mov QWORD PTR [rdx+200], r8 - movbe rax, QWORD PTR [rcx+168] - movbe r8, QWORD PTR [rcx+160] - mov QWORD PTR [rdx+208], rax - mov QWORD PTR [rdx+216], r8 - movbe rax, QWORD PTR [rcx+152] - movbe r8, QWORD PTR [rcx+144] - mov QWORD PTR [rdx+224], rax - mov QWORD PTR [rdx+232], r8 - movbe rax, QWORD PTR [rcx+136] - movbe r8, QWORD PTR [rcx+128] - mov QWORD PTR [rdx+240], rax - mov QWORD PTR [rdx+248], r8 - movbe rax, QWORD PTR [rcx+120] - movbe r8, QWORD PTR [rcx+112] - mov QWORD PTR [rdx+256], rax - mov QWORD PTR [rdx+264], r8 - movbe rax, QWORD PTR [rcx+104] - movbe r8, QWORD PTR [rcx+96] - mov QWORD PTR [rdx+272], rax - mov QWORD PTR [rdx+280], r8 - movbe rax, QWORD PTR [rcx+88] - movbe r8, QWORD PTR [rcx+80] - mov QWORD PTR [rdx+288], rax - mov QWORD PTR [rdx+296], r8 - movbe rax, QWORD PTR [rcx+72] - movbe r8, QWORD PTR [rcx+64] - mov QWORD PTR [rdx+304], rax - mov QWORD PTR [rdx+312], r8 - movbe rax, QWORD PTR [rcx+56] - movbe r8, QWORD PTR [rcx+48] - mov QWORD PTR [rdx+320], rax - mov QWORD PTR [rdx+328], r8 - movbe rax, QWORD PTR [rcx+40] - movbe r8, QWORD PTR [rcx+32] - mov QWORD PTR [rdx+336], rax - mov QWORD PTR [rdx+344], r8 - movbe rax, QWORD PTR [rcx+24] - movbe r8, QWORD PTR [rcx+16] - mov QWORD PTR [rdx+352], rax - mov QWORD PTR [rdx+360], r8 - movbe rax, QWORD PTR [rcx+8] - movbe r8, QWORD PTR [rcx] - mov QWORD PTR [rdx+368], rax - mov QWORD PTR [rdx+376], r8 - ret -sp_3072_to_bin_movbe_48 ENDP -_TEXT ENDS -ENDIF -; /* Multiply a and b into r. (r = a * b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_12 PROC - push r12 - mov r9, rdx - sub rsp, 96 - ; A[0] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9] - xor r12, r12 - mov QWORD PTR [rsp], rax - mov r11, rdx - ; A[0] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[1] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+8] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rsp+8], r11 - ; A[0] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[1] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+8] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[2] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+16] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rsp+16], r12 - ; A[0] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[1] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+8] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[2] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+16] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[3] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+24] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rsp+24], r10 - ; A[0] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[1] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+8] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[2] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+16] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[3] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+24] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[4] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+32] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rsp+32], r11 - ; A[0] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[1] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+8] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[2] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+16] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[3] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+24] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[4] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+32] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[5] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+40] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rsp+40], r12 - ; A[0] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[1] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+8] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[2] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+16] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[3] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+24] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[4] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+32] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[5] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+40] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[6] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+48] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rsp+48], r10 - ; A[0] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[1] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+8] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[2] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+16] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[3] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+24] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[4] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+32] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[5] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+40] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[6] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+48] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[7] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+56] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rsp+56], r11 - ; A[0] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[1] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+8] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[2] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+16] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[3] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+24] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[4] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+32] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[5] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+40] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[6] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+48] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[7] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+56] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[8] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+64] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rsp+64], r12 - ; A[0] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[1] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+8] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[2] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+16] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[3] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+24] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[4] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+32] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[5] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+40] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[6] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+48] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[7] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+56] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[8] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+64] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[9] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+72] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rsp+72], r10 - ; A[0] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[1] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+8] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[2] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+16] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[3] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+24] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[4] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+32] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[5] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+40] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[6] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+48] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[7] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+56] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[8] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+64] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[9] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+72] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[10] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+80] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rsp+80], r11 - ; A[0] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[1] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+8] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[2] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+16] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[3] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+24] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[4] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+32] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[5] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+40] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[6] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+48] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[7] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+56] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[8] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+64] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[9] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+72] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[10] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+80] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[11] * B[0] - mov rax, QWORD PTR [r8] - mul QWORD PTR [r9+88] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rsp+88], r12 - ; A[1] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+8] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[2] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+16] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[3] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+24] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[4] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+32] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[5] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+40] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[6] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+48] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[7] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+56] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[8] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+64] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[9] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+72] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[10] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+80] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[11] * B[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r9+88] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rcx+96], r10 - ; A[2] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+16] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[3] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+24] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[4] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+32] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[5] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+40] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[6] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+48] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[7] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+56] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[8] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+64] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[9] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+72] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[10] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+80] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[11] * B[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r9+88] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rcx+104], r11 - ; A[3] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+24] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[4] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+32] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[5] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+40] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[6] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+48] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[7] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+56] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[8] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+64] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[9] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+72] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[10] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+80] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[11] * B[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r9+88] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rcx+112], r12 - ; A[4] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+32] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[5] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+40] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[6] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+48] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[7] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+56] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[8] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+64] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[9] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+72] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[10] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+80] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[11] * B[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r9+88] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rcx+120], r10 - ; A[5] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+40] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[6] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+48] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[7] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+56] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[8] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+64] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[9] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+72] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[10] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+80] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[11] * B[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r9+88] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rcx+128], r11 - ; A[6] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+48] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[7] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+56] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[8] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+64] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[9] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+72] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[10] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+80] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[11] * B[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r9+88] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rcx+136], r12 - ; A[7] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+56] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[8] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+64] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[9] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+72] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[10] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+80] - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[11] * B[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r9+88] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rcx+144], r10 - ; A[8] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+64] - xor r10, r10 - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[9] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+72] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[10] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+80] - add r11, rax - adc r12, rdx - adc r10, 0 - ; A[11] * B[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r9+88] - add r11, rax - adc r12, rdx - adc r10, 0 - mov QWORD PTR [rcx+152], r11 - ; A[9] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+72] - xor r11, r11 - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[10] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+80] - add r12, rax - adc r10, rdx - adc r11, 0 - ; A[11] * B[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r9+88] - add r12, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rcx+160], r12 - ; A[10] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+80] - xor r12, r12 - add r10, rax - adc r11, rdx - adc r12, 0 - ; A[11] * B[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r9+88] - add r10, rax - adc r11, rdx - adc r12, 0 - mov QWORD PTR [rcx+168], r10 - ; A[11] * B[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r9+88] - add r11, rax - adc r12, rdx - mov QWORD PTR [rcx+176], r11 - mov QWORD PTR [rcx+184], r12 - mov rax, QWORD PTR [rsp] - mov rdx, QWORD PTR [rsp+8] - mov r10, QWORD PTR [rsp+16] - mov r11, QWORD PTR [rsp+24] - mov QWORD PTR [rcx], rax - mov QWORD PTR [rcx+8], rdx - mov QWORD PTR [rcx+16], r10 - mov QWORD PTR [rcx+24], r11 - mov rax, QWORD PTR [rsp+32] - mov rdx, QWORD PTR [rsp+40] - mov r10, QWORD PTR [rsp+48] - mov r11, QWORD PTR [rsp+56] - mov QWORD PTR [rcx+32], rax - mov QWORD PTR [rcx+40], rdx - mov QWORD PTR [rcx+48], r10 - mov QWORD PTR [rcx+56], r11 - mov rax, QWORD PTR [rsp+64] - mov rdx, QWORD PTR [rsp+72] - mov r10, QWORD PTR [rsp+80] - mov r11, QWORD PTR [rsp+88] - mov QWORD PTR [rcx+64], rax - mov QWORD PTR [rcx+72], rdx - mov QWORD PTR [rcx+80], r10 - mov QWORD PTR [rcx+88], r11 - add rsp, 96 - pop r12 - ret -sp_3072_mul_12 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_avx2_12 PROC - push rbx - push rbp - push r12 - push r13 - push r14 - mov rbp, r8 - mov r8, rcx - mov r9, rdx - sub rsp, 96 - cmp r9, r8 - mov rbx, rsp - cmovne rbx, r8 - cmp rbp, r8 - cmove rbx, rsp - add r8, 96 - xor r14, r14 - mov rdx, QWORD PTR [r9] - ; A[0] * B[0] - mulx r11, r10, QWORD PTR [rbp] - ; A[0] * B[1] - mulx r12, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx], r10 - adcx r11, rax - mov QWORD PTR [rbx+8], r11 - ; A[0] * B[2] - mulx r10, rax, QWORD PTR [rbp+16] - adcx r12, rax - ; A[0] * B[3] - mulx r11, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+16], r12 - adcx r10, rax - mov QWORD PTR [rbx+24], r10 - ; A[0] * B[4] - mulx r12, rax, QWORD PTR [rbp+32] - adcx r11, rax - ; A[0] * B[5] - mulx r10, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+32], r11 - adcx r12, rax - mov QWORD PTR [rbx+40], r12 - ; A[0] * B[6] - mulx r11, rax, QWORD PTR [rbp+48] - adcx r10, rax - ; A[0] * B[7] - mulx r12, rax, QWORD PTR [rbp+56] - mov QWORD PTR [rbx+48], r10 - adcx r11, rax - mov QWORD PTR [rbx+56], r11 - ; A[0] * B[8] - mulx r10, rax, QWORD PTR [rbp+64] - adcx r12, rax - ; A[0] * B[9] - mulx r11, rax, QWORD PTR [rbp+72] - mov QWORD PTR [rbx+64], r12 - adcx r10, rax - mov QWORD PTR [rbx+72], r10 - ; A[0] * B[10] - mulx r12, rax, QWORD PTR [rbp+80] - adcx r11, rax - ; A[0] * B[11] - mulx r10, rax, QWORD PTR [rbp+88] - mov QWORD PTR [rbx+80], r11 - adcx r12, rax - adcx r10, r14 - mov r13, r14 - adcx r13, r14 - mov QWORD PTR [rbx+88], r12 - mov QWORD PTR [r8], r10 - mov rdx, QWORD PTR [r9+8] - mov r11, QWORD PTR [rbx+8] - mov r12, QWORD PTR [rbx+16] - mov r10, QWORD PTR [rbx+24] - ; A[1] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r11, rax - adox r12, rcx - ; A[1] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+8], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+16], r12 - mov r11, QWORD PTR [rbx+32] - mov r12, QWORD PTR [rbx+40] - ; A[1] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r10, rax - adox r11, rcx - ; A[1] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+24], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+32], r11 - mov r10, QWORD PTR [rbx+48] - mov r11, QWORD PTR [rbx+56] - ; A[1] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r12, rax - adox r10, rcx - ; A[1] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+40], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+48], r10 - mov r12, QWORD PTR [rbx+64] - mov r10, QWORD PTR [rbx+72] - ; A[1] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r11, rax - adox r12, rcx - ; A[1] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [rbx+56], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+64], r12 - mov r11, QWORD PTR [rbx+80] - mov r12, QWORD PTR [rbx+88] - ; A[1] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r10, rax - adox r11, rcx - ; A[1] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [rbx+72], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+80], r11 - mov r10, QWORD PTR [r8] - ; A[1] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r12, rax - adox r10, rcx - ; A[1] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [rbx+88], r12 - mov r11, r14 - adcx r10, rax - adox r11, rcx - adcx r11, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8], r10 - mov QWORD PTR [r8+8], r11 - mov rdx, QWORD PTR [r9+16] - mov r12, QWORD PTR [rbx+16] - mov r10, QWORD PTR [rbx+24] - mov r11, QWORD PTR [rbx+32] - ; A[2] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r12, rax - adox r10, rcx - ; A[2] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+16], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+24], r10 - mov r12, QWORD PTR [rbx+40] - mov r10, QWORD PTR [rbx+48] - ; A[2] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r11, rax - adox r12, rcx - ; A[2] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+32], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+40], r12 - mov r11, QWORD PTR [rbx+56] - mov r12, QWORD PTR [rbx+64] - ; A[2] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r10, rax - adox r11, rcx - ; A[2] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+48], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+56], r11 - mov r10, QWORD PTR [rbx+72] - mov r11, QWORD PTR [rbx+80] - ; A[2] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r12, rax - adox r10, rcx - ; A[2] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [rbx+64], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+72], r10 - mov r12, QWORD PTR [rbx+88] - mov r10, QWORD PTR [r8] - ; A[2] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r11, rax - adox r12, rcx - ; A[2] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [rbx+80], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+88], r12 - mov r11, QWORD PTR [r8+8] - ; A[2] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r10, rax - adox r11, rcx - ; A[2] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8], r10 - mov r12, r14 - adcx r11, rax - adox r12, rcx - adcx r12, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+8], r11 - mov QWORD PTR [r8+16], r12 - mov rdx, QWORD PTR [r9+24] - mov r10, QWORD PTR [rbx+24] - mov r11, QWORD PTR [rbx+32] - mov r12, QWORD PTR [rbx+40] - ; A[3] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r10, rax - adox r11, rcx - ; A[3] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+24], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+32], r11 - mov r10, QWORD PTR [rbx+48] - mov r11, QWORD PTR [rbx+56] - ; A[3] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r12, rax - adox r10, rcx - ; A[3] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+40], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+48], r10 - mov r12, QWORD PTR [rbx+64] - mov r10, QWORD PTR [rbx+72] - ; A[3] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r11, rax - adox r12, rcx - ; A[3] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+56], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+64], r12 - mov r11, QWORD PTR [rbx+80] - mov r12, QWORD PTR [rbx+88] - ; A[3] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r10, rax - adox r11, rcx - ; A[3] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [rbx+72], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+80], r11 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - ; A[3] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r12, rax - adox r10, rcx - ; A[3] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [rbx+88], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r12, QWORD PTR [r8+16] - ; A[3] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r11, rax - adox r12, rcx - ; A[3] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+8], r11 - mov r10, r14 - adcx r12, rax - adox r10, rcx - adcx r10, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+16], r12 - mov QWORD PTR [r8+24], r10 - mov rdx, QWORD PTR [r9+32] - mov r11, QWORD PTR [rbx+32] - mov r12, QWORD PTR [rbx+40] - mov r10, QWORD PTR [rbx+48] - ; A[4] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r11, rax - adox r12, rcx - ; A[4] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+32], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+40], r12 - mov r11, QWORD PTR [rbx+56] - mov r12, QWORD PTR [rbx+64] - ; A[4] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r10, rax - adox r11, rcx - ; A[4] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+48], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+56], r11 - mov r10, QWORD PTR [rbx+72] - mov r11, QWORD PTR [rbx+80] - ; A[4] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r12, rax - adox r10, rcx - ; A[4] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+64], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+72], r10 - mov r12, QWORD PTR [rbx+88] - mov r10, QWORD PTR [r8] - ; A[4] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r11, rax - adox r12, rcx - ; A[4] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [rbx+80], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+88], r12 - mov r11, QWORD PTR [r8+8] - mov r12, QWORD PTR [r8+16] - ; A[4] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r10, rax - adox r11, rcx - ; A[4] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+8], r11 - mov r10, QWORD PTR [r8+24] - ; A[4] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r12, rax - adox r10, rcx - ; A[4] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+16], r12 - mov r11, r14 - adcx r10, rax - adox r11, rcx - adcx r11, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+24], r10 - mov QWORD PTR [r8+32], r11 - mov rdx, QWORD PTR [r9+40] - mov r12, QWORD PTR [rbx+40] - mov r10, QWORD PTR [rbx+48] - mov r11, QWORD PTR [rbx+56] - ; A[5] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r12, rax - adox r10, rcx - ; A[5] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+40], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+48], r10 - mov r12, QWORD PTR [rbx+64] - mov r10, QWORD PTR [rbx+72] - ; A[5] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r11, rax - adox r12, rcx - ; A[5] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+56], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+64], r12 - mov r11, QWORD PTR [rbx+80] - mov r12, QWORD PTR [rbx+88] - ; A[5] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r10, rax - adox r11, rcx - ; A[5] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+72], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+80], r11 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - ; A[5] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r12, rax - adox r10, rcx - ; A[5] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [rbx+88], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r12, QWORD PTR [r8+16] - mov r10, QWORD PTR [r8+24] - ; A[5] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r11, rax - adox r12, rcx - ; A[5] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+8], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+16], r12 - mov r11, QWORD PTR [r8+32] - ; A[5] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r10, rax - adox r11, rcx - ; A[5] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+24], r10 - mov r12, r14 - adcx r11, rax - adox r12, rcx - adcx r12, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+32], r11 - mov QWORD PTR [r8+40], r12 - mov rdx, QWORD PTR [r9+48] - mov r10, QWORD PTR [rbx+48] - mov r11, QWORD PTR [rbx+56] - mov r12, QWORD PTR [rbx+64] - ; A[6] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r10, rax - adox r11, rcx - ; A[6] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+48], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+56], r11 - mov r10, QWORD PTR [rbx+72] - mov r11, QWORD PTR [rbx+80] - ; A[6] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r12, rax - adox r10, rcx - ; A[6] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+64], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+72], r10 - mov r12, QWORD PTR [rbx+88] - mov r10, QWORD PTR [r8] - ; A[6] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r11, rax - adox r12, rcx - ; A[6] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+80], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+88], r12 - mov r11, QWORD PTR [r8+8] - mov r12, QWORD PTR [r8+16] - ; A[6] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r10, rax - adox r11, rcx - ; A[6] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [r8], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+8], r11 - mov r10, QWORD PTR [r8+24] - mov r11, QWORD PTR [r8+32] - ; A[6] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r12, rax - adox r10, rcx - ; A[6] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+16], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+24], r10 - mov r12, QWORD PTR [r8+40] - ; A[6] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r11, rax - adox r12, rcx - ; A[6] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+32], r11 - mov r10, r14 - adcx r12, rax - adox r10, rcx - adcx r10, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+40], r12 - mov QWORD PTR [r8+48], r10 - mov rdx, QWORD PTR [r9+56] - mov r11, QWORD PTR [rbx+56] - mov r12, QWORD PTR [rbx+64] - mov r10, QWORD PTR [rbx+72] - ; A[7] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r11, rax - adox r12, rcx - ; A[7] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+56], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+64], r12 - mov r11, QWORD PTR [rbx+80] - mov r12, QWORD PTR [rbx+88] - ; A[7] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r10, rax - adox r11, rcx - ; A[7] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+72], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+80], r11 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - ; A[7] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r12, rax - adox r10, rcx - ; A[7] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [rbx+88], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r12, QWORD PTR [r8+16] - mov r10, QWORD PTR [r8+24] - ; A[7] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r11, rax - adox r12, rcx - ; A[7] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [r8+8], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+16], r12 - mov r11, QWORD PTR [r8+32] - mov r12, QWORD PTR [r8+40] - ; A[7] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r10, rax - adox r11, rcx - ; A[7] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+24], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+32], r11 - mov r10, QWORD PTR [r8+48] - ; A[7] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r12, rax - adox r10, rcx - ; A[7] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+40], r12 - mov r11, r14 - adcx r10, rax - adox r11, rcx - adcx r11, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+48], r10 - mov QWORD PTR [r8+56], r11 - mov rdx, QWORD PTR [r9+64] - mov r12, QWORD PTR [rbx+64] - mov r10, QWORD PTR [rbx+72] - mov r11, QWORD PTR [rbx+80] - ; A[8] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r12, rax - adox r10, rcx - ; A[8] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+64], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbx+72], r10 - mov r12, QWORD PTR [rbx+88] - mov r10, QWORD PTR [r8] - ; A[8] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r11, rax - adox r12, rcx - ; A[8] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+80], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+88], r12 - mov r11, QWORD PTR [r8+8] - mov r12, QWORD PTR [r8+16] - ; A[8] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r10, rax - adox r11, rcx - ; A[8] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [r8], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+8], r11 - mov r10, QWORD PTR [r8+24] - mov r11, QWORD PTR [r8+32] - ; A[8] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r12, rax - adox r10, rcx - ; A[8] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [r8+16], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+24], r10 - mov r12, QWORD PTR [r8+40] - mov r10, QWORD PTR [r8+48] - ; A[8] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r11, rax - adox r12, rcx - ; A[8] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+32], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+40], r12 - mov r11, QWORD PTR [r8+56] - ; A[8] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r10, rax - adox r11, rcx - ; A[8] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+48], r10 - mov r12, r14 - adcx r11, rax - adox r12, rcx - adcx r12, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+56], r11 - mov QWORD PTR [r8+64], r12 - mov rdx, QWORD PTR [r9+72] - mov r10, QWORD PTR [rbx+72] - mov r11, QWORD PTR [rbx+80] - mov r12, QWORD PTR [rbx+88] - ; A[9] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r10, rax - adox r11, rcx - ; A[9] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+72], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [rbx+80], r11 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - ; A[9] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r12, rax - adox r10, rcx - ; A[9] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [rbx+88], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r12, QWORD PTR [r8+16] - mov r10, QWORD PTR [r8+24] - ; A[9] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r11, rax - adox r12, rcx - ; A[9] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [r8+8], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+16], r12 - mov r11, QWORD PTR [r8+32] - mov r12, QWORD PTR [r8+40] - ; A[9] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r10, rax - adox r11, rcx - ; A[9] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [r8+24], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+32], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - ; A[9] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r12, rax - adox r10, rcx - ; A[9] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+40], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+48], r10 - mov r12, QWORD PTR [r8+64] - ; A[9] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r11, rax - adox r12, rcx - ; A[9] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+56], r11 - mov r10, r14 - adcx r12, rax - adox r10, rcx - adcx r10, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+64], r12 - mov QWORD PTR [r8+72], r10 - mov rdx, QWORD PTR [r9+80] - mov r11, QWORD PTR [rbx+80] - mov r12, QWORD PTR [rbx+88] - mov r10, QWORD PTR [r8] - ; A[10] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r11, rax - adox r12, rcx - ; A[10] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+80], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [rbx+88], r12 - mov r11, QWORD PTR [r8+8] - mov r12, QWORD PTR [r8+16] - ; A[10] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r10, rax - adox r11, rcx - ; A[10] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [r8], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+8], r11 - mov r10, QWORD PTR [r8+24] - mov r11, QWORD PTR [r8+32] - ; A[10] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r12, rax - adox r10, rcx - ; A[10] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [r8+16], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+24], r10 - mov r12, QWORD PTR [r8+40] - mov r10, QWORD PTR [r8+48] - ; A[10] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r11, rax - adox r12, rcx - ; A[10] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [r8+32], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+40], r12 - mov r11, QWORD PTR [r8+56] - mov r12, QWORD PTR [r8+64] - ; A[10] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r10, rax - adox r11, rcx - ; A[10] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+48], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+56], r11 - mov r10, QWORD PTR [r8+72] - ; A[10] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r12, rax - adox r10, rcx - ; A[10] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+64], r12 - mov r11, r14 - adcx r10, rax - adox r11, rcx - adcx r11, r13 - mov r13, r14 - adox r13, r14 - adcx r13, r14 - mov QWORD PTR [r8+72], r10 - mov QWORD PTR [r8+80], r11 - mov rdx, QWORD PTR [r9+88] - mov r12, QWORD PTR [rbx+88] - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - ; A[11] * B[0] - mulx rcx, rax, QWORD PTR [rbp] - adcx r12, rax - adox r10, rcx - ; A[11] * B[1] - mulx rcx, rax, QWORD PTR [rbp+8] - mov QWORD PTR [rbx+88], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r12, QWORD PTR [r8+16] - mov r10, QWORD PTR [r8+24] - ; A[11] * B[2] - mulx rcx, rax, QWORD PTR [rbp+16] - adcx r11, rax - adox r12, rcx - ; A[11] * B[3] - mulx rcx, rax, QWORD PTR [rbp+24] - mov QWORD PTR [r8+8], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+16], r12 - mov r11, QWORD PTR [r8+32] - mov r12, QWORD PTR [r8+40] - ; A[11] * B[4] - mulx rcx, rax, QWORD PTR [rbp+32] - adcx r10, rax - adox r11, rcx - ; A[11] * B[5] - mulx rcx, rax, QWORD PTR [rbp+40] - mov QWORD PTR [r8+24], r10 - adcx r11, rax - adox r12, rcx - mov QWORD PTR [r8+32], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - ; A[11] * B[6] - mulx rcx, rax, QWORD PTR [rbp+48] - adcx r12, rax - adox r10, rcx - ; A[11] * B[7] - mulx rcx, rax, QWORD PTR [rbp+56] - mov QWORD PTR [r8+40], r12 - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+48], r10 - mov r12, QWORD PTR [r8+64] - mov r10, QWORD PTR [r8+72] - ; A[11] * B[8] - mulx rcx, rax, QWORD PTR [rbp+64] - adcx r11, rax - adox r12, rcx - ; A[11] * B[9] - mulx rcx, rax, QWORD PTR [rbp+72] - mov QWORD PTR [r8+56], r11 - adcx r12, rax - adox r10, rcx - mov QWORD PTR [r8+64], r12 - mov r11, QWORD PTR [r8+80] - ; A[11] * B[10] - mulx rcx, rax, QWORD PTR [rbp+80] - adcx r10, rax - adox r11, rcx - ; A[11] * B[11] - mulx rcx, rax, QWORD PTR [rbp+88] - mov QWORD PTR [r8+72], r10 - mov r12, r14 - adcx r11, rax - adox r12, rcx - adcx r12, r13 - mov QWORD PTR [r8+80], r11 - mov QWORD PTR [r8+88], r12 - sub r8, 96 - cmp r9, r8 - je L_start_3072_mul_avx2_12 - cmp rbp, r8 - jne L_end_3072_mul_avx2_12 -L_start_3072_mul_avx2_12: - vmovdqu xmm0, OWORD PTR [rbx] - vmovups OWORD PTR [r8], xmm0 - vmovdqu xmm0, OWORD PTR [rbx+16] - vmovups OWORD PTR [r8+16], xmm0 - vmovdqu xmm0, OWORD PTR [rbx+32] - vmovups OWORD PTR [r8+32], xmm0 - vmovdqu xmm0, OWORD PTR [rbx+48] - vmovups OWORD PTR [r8+48], xmm0 - vmovdqu xmm0, OWORD PTR [rbx+64] - vmovups OWORD PTR [r8+64], xmm0 - vmovdqu xmm0, OWORD PTR [rbx+80] - vmovups OWORD PTR [r8+80], xmm0 -L_end_3072_mul_avx2_12: - add rsp, 96 - pop r14 - pop r13 - pop r12 - pop rbp - pop rbx - ret -sp_3072_mul_avx2_12 ENDP -_TEXT ENDS -ENDIF -; /* Add b to a into r. (r = a + b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_add_12 PROC - ; Add - mov r9, QWORD PTR [rdx] - xor rax, rax - add r9, QWORD PTR [r8] - mov r10, QWORD PTR [rdx+8] - mov QWORD PTR [rcx], r9 - adc r10, QWORD PTR [r8+8] - mov r9, QWORD PTR [rdx+16] - mov QWORD PTR [rcx+8], r10 - adc r9, QWORD PTR [r8+16] - mov r10, QWORD PTR [rdx+24] - mov QWORD PTR [rcx+16], r9 - adc r10, QWORD PTR [r8+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [rcx+24], r10 - adc r9, QWORD PTR [r8+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [rcx+32], r9 - adc r10, QWORD PTR [r8+40] - mov r9, QWORD PTR [rdx+48] - mov QWORD PTR [rcx+40], r10 - adc r9, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+56] - mov QWORD PTR [rcx+48], r9 - adc r10, QWORD PTR [r8+56] - mov r9, QWORD PTR [rdx+64] - mov QWORD PTR [rcx+56], r10 - adc r9, QWORD PTR [r8+64] - mov r10, QWORD PTR [rdx+72] - mov QWORD PTR [rcx+64], r9 - adc r10, QWORD PTR [r8+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [rcx+72], r10 - adc r9, QWORD PTR [r8+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [rcx+80], r9 - adc r10, QWORD PTR [r8+88] - mov QWORD PTR [rcx+88], r10 - adc rax, 0 - ret -sp_3072_add_12 ENDP -_TEXT ENDS -; /* Sub b from a into a. (a -= b) -; * -; * a A single precision integer and result. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sub_in_place_24 PROC - mov r8, QWORD PTR [rcx] - sub r8, QWORD PTR [rdx] - mov r9, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - sbb r9, QWORD PTR [rdx+8] - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], r9 - sbb r8, QWORD PTR [rdx+16] - mov r9, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - sbb r9, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], r9 - sbb r8, QWORD PTR [rdx+32] - mov r9, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - sbb r9, QWORD PTR [rdx+40] - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], r9 - sbb r8, QWORD PTR [rdx+48] - mov r9, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - sbb r9, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], r9 - sbb r8, QWORD PTR [rdx+64] - mov r9, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - sbb r9, QWORD PTR [rdx+72] - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], r9 - sbb r8, QWORD PTR [rdx+80] - mov r9, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - sbb r9, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rcx+96] - mov QWORD PTR [rcx+88], r9 - sbb r8, QWORD PTR [rdx+96] - mov r9, QWORD PTR [rcx+104] - mov QWORD PTR [rcx+96], r8 - sbb r9, QWORD PTR [rdx+104] - mov r8, QWORD PTR [rcx+112] - mov QWORD PTR [rcx+104], r9 - sbb r8, QWORD PTR [rdx+112] - mov r9, QWORD PTR [rcx+120] - mov QWORD PTR [rcx+112], r8 - sbb r9, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rcx+128] - mov QWORD PTR [rcx+120], r9 - sbb r8, QWORD PTR [rdx+128] - mov r9, QWORD PTR [rcx+136] - mov QWORD PTR [rcx+128], r8 - sbb r9, QWORD PTR [rdx+136] - mov r8, QWORD PTR [rcx+144] - mov QWORD PTR [rcx+136], r9 - sbb r8, QWORD PTR [rdx+144] - mov r9, QWORD PTR [rcx+152] - mov QWORD PTR [rcx+144], r8 - sbb r9, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rcx+160] - mov QWORD PTR [rcx+152], r9 - sbb r8, QWORD PTR [rdx+160] - mov r9, QWORD PTR [rcx+168] - mov QWORD PTR [rcx+160], r8 - sbb r9, QWORD PTR [rdx+168] - mov r8, QWORD PTR [rcx+176] - mov QWORD PTR [rcx+168], r9 - sbb r8, QWORD PTR [rdx+176] - mov r9, QWORD PTR [rcx+184] - mov QWORD PTR [rcx+176], r8 - sbb r9, QWORD PTR [rdx+184] - mov QWORD PTR [rcx+184], r9 - sbb rax, rax - ret -sp_3072_sub_in_place_24 ENDP -_TEXT ENDS -; /* Add b to a into r. (r = a + b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_add_24 PROC - ; Add - mov r9, QWORD PTR [rdx] - xor rax, rax - add r9, QWORD PTR [r8] - mov r10, QWORD PTR [rdx+8] - mov QWORD PTR [rcx], r9 - adc r10, QWORD PTR [r8+8] - mov r9, QWORD PTR [rdx+16] - mov QWORD PTR [rcx+8], r10 - adc r9, QWORD PTR [r8+16] - mov r10, QWORD PTR [rdx+24] - mov QWORD PTR [rcx+16], r9 - adc r10, QWORD PTR [r8+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [rcx+24], r10 - adc r9, QWORD PTR [r8+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [rcx+32], r9 - adc r10, QWORD PTR [r8+40] - mov r9, QWORD PTR [rdx+48] - mov QWORD PTR [rcx+40], r10 - adc r9, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+56] - mov QWORD PTR [rcx+48], r9 - adc r10, QWORD PTR [r8+56] - mov r9, QWORD PTR [rdx+64] - mov QWORD PTR [rcx+56], r10 - adc r9, QWORD PTR [r8+64] - mov r10, QWORD PTR [rdx+72] - mov QWORD PTR [rcx+64], r9 - adc r10, QWORD PTR [r8+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [rcx+72], r10 - adc r9, QWORD PTR [r8+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [rcx+80], r9 - adc r10, QWORD PTR [r8+88] - mov r9, QWORD PTR [rdx+96] - mov QWORD PTR [rcx+88], r10 - adc r9, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+104] - mov QWORD PTR [rcx+96], r9 - adc r10, QWORD PTR [r8+104] - mov r9, QWORD PTR [rdx+112] - mov QWORD PTR [rcx+104], r10 - adc r9, QWORD PTR [r8+112] - mov r10, QWORD PTR [rdx+120] - mov QWORD PTR [rcx+112], r9 - adc r10, QWORD PTR [r8+120] - mov r9, QWORD PTR [rdx+128] - mov QWORD PTR [rcx+120], r10 - adc r9, QWORD PTR [r8+128] - mov r10, QWORD PTR [rdx+136] - mov QWORD PTR [rcx+128], r9 - adc r10, QWORD PTR [r8+136] - mov r9, QWORD PTR [rdx+144] - mov QWORD PTR [rcx+136], r10 - adc r9, QWORD PTR [r8+144] - mov r10, QWORD PTR [rdx+152] - mov QWORD PTR [rcx+144], r9 - adc r10, QWORD PTR [r8+152] - mov r9, QWORD PTR [rdx+160] - mov QWORD PTR [rcx+152], r10 - adc r9, QWORD PTR [r8+160] - mov r10, QWORD PTR [rdx+168] - mov QWORD PTR [rcx+160], r9 - adc r10, QWORD PTR [r8+168] - mov r9, QWORD PTR [rdx+176] - mov QWORD PTR [rcx+168], r10 - adc r9, QWORD PTR [r8+176] - mov r10, QWORD PTR [rdx+184] - mov QWORD PTR [rcx+176], r9 - adc r10, QWORD PTR [r8+184] - mov QWORD PTR [rcx+184], r10 - adc rax, 0 - ret -sp_3072_add_24 ENDP -_TEXT ENDS -; /* Multiply a and b into r. (r = a * b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_24 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - sub rsp, 616 - mov QWORD PTR [rsp+576], rcx - mov QWORD PTR [rsp+584], rdx - mov QWORD PTR [rsp+592], r8 - lea r12, QWORD PTR [rsp+384] - lea r14, QWORD PTR [rdx+96] - ; Add - mov rax, QWORD PTR [rdx] - xor r15, r15 - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [rdx+8] - mov QWORD PTR [r12], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [rdx+16] - mov QWORD PTR [r12+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [rdx+24] - mov QWORD PTR [r12+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [r12+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [r12+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r12+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [rdx+56] - mov QWORD PTR [r12+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [rdx+64] - mov QWORD PTR [r12+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [rdx+72] - mov QWORD PTR [r12+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [r12+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [r12+80], r9 - adc r10, QWORD PTR [r14+88] - mov QWORD PTR [r12+88], r10 - adc r15, 0 - mov QWORD PTR [rsp+600], r15 - lea r13, QWORD PTR [rsp+480] - lea r14, QWORD PTR [r8+96] - ; Add - mov rax, QWORD PTR [r8] - xor rdi, rdi - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [r8+8] - mov QWORD PTR [r13], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [r8+16] - mov QWORD PTR [r13+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [r8+24] - mov QWORD PTR [r13+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [r8+32] - mov QWORD PTR [r13+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [r8+40] - mov QWORD PTR [r13+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [r8+48] - mov QWORD PTR [r13+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [r8+56] - mov QWORD PTR [r13+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [r8+64] - mov QWORD PTR [r13+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [r8+72] - mov QWORD PTR [r13+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [r8+80] - mov QWORD PTR [r13+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [r8+88] - mov QWORD PTR [r13+80], r9 - adc r10, QWORD PTR [r14+88] - mov QWORD PTR [r13+88], r10 - adc rdi, 0 - mov QWORD PTR [rsp+608], rdi - mov r8, r13 - mov rdx, r12 - mov rcx, rsp - call sp_3072_mul_12 - mov r8, QWORD PTR [rsp+592] - mov rdx, QWORD PTR [rsp+584] - lea rcx, QWORD PTR [rsp+192] - add r8, 96 - add rdx, 96 - call sp_3072_mul_12 - mov r8, QWORD PTR [rsp+592] - mov rdx, QWORD PTR [rsp+584] - mov rcx, QWORD PTR [rsp+576] - call sp_3072_mul_12 -IFDEF _WIN64 - mov r8, QWORD PTR [rsp+592] - mov rdx, QWORD PTR [rsp+584] - mov rcx, QWORD PTR [rsp+576] -ENDIF - mov r15, QWORD PTR [rsp+600] - mov rdi, QWORD PTR [rsp+608] - mov rsi, QWORD PTR [rsp+576] - mov r11, r15 - lea r12, QWORD PTR [rsp+384] - lea r13, QWORD PTR [rsp+480] - and r11, rdi - neg r15 - neg rdi - add rsi, 192 - mov rax, QWORD PTR [r12] - mov r9, QWORD PTR [r13] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12], rax - mov QWORD PTR [r13], r9 - mov rax, QWORD PTR [r12+8] - mov r9, QWORD PTR [r13+8] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+8], rax - mov QWORD PTR [r13+8], r9 - mov rax, QWORD PTR [r12+16] - mov r9, QWORD PTR [r13+16] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+16], rax - mov QWORD PTR [r13+16], r9 - mov rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [r13+24] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+24], rax - mov QWORD PTR [r13+24], r9 - mov rax, QWORD PTR [r12+32] - mov r9, QWORD PTR [r13+32] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+32], rax - mov QWORD PTR [r13+32], r9 - mov rax, QWORD PTR [r12+40] - mov r9, QWORD PTR [r13+40] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+40], rax - mov QWORD PTR [r13+40], r9 - mov rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [r13+48] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+48], rax - mov QWORD PTR [r13+48], r9 - mov rax, QWORD PTR [r12+56] - mov r9, QWORD PTR [r13+56] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+56], rax - mov QWORD PTR [r13+56], r9 - mov rax, QWORD PTR [r12+64] - mov r9, QWORD PTR [r13+64] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+64], rax - mov QWORD PTR [r13+64], r9 - mov rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [r13+72] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+72], rax - mov QWORD PTR [r13+72], r9 - mov rax, QWORD PTR [r12+80] - mov r9, QWORD PTR [r13+80] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+80], rax - mov QWORD PTR [r13+80], r9 - mov rax, QWORD PTR [r12+88] - mov r9, QWORD PTR [r13+88] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+88], rax - mov QWORD PTR [r13+88], r9 - mov rax, QWORD PTR [r12] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov QWORD PTR [rsi+88], r10 - adc r11, 0 - lea r13, QWORD PTR [rsp+192] - mov r12, rsp - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [r13] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [r13+184] - mov QWORD PTR [r12+184], r10 - sbb r11, 0 - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [rcx] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [rcx+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [rcx+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [rcx+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [rcx+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [rcx+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [rcx+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [rcx+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [rcx+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [rcx+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [rcx+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [rcx+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [rcx+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [rcx+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [rcx+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [rcx+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [rcx+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [rcx+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [rcx+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [rcx+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [rcx+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [rcx+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [rcx+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [rcx+184] - mov QWORD PTR [r12+184], r10 - sbb r11, 0 - sub rsi, 96 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r12] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r12+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r12+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r12+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r12+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r12+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r12+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r12+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r12+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r12+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r12+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r12+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r12+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r12+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r12+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r12+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r12+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r12+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r12+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r12+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r12+184] - mov QWORD PTR [rsi+184], r10 - adc r11, 0 - mov QWORD PTR [rcx+288], r11 - add rsi, 96 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r13+96] - mov QWORD PTR [rsi+96], rax - ; Add to zero - mov rax, QWORD PTR [r13+104] - adc rax, 0 - mov r9, QWORD PTR [r13+112] - mov QWORD PTR [rsi+104], rax - adc r9, 0 - mov r10, QWORD PTR [r13+120] - mov QWORD PTR [rsi+112], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+128] - mov QWORD PTR [rsi+120], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+136] - mov QWORD PTR [rsi+128], rax - adc r9, 0 - mov r10, QWORD PTR [r13+144] - mov QWORD PTR [rsi+136], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+152] - mov QWORD PTR [rsi+144], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+160] - mov QWORD PTR [rsi+152], rax - adc r9, 0 - mov r10, QWORD PTR [r13+168] - mov QWORD PTR [rsi+160], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+176] - mov QWORD PTR [rsi+168], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+184] - mov QWORD PTR [rsi+176], rax - adc r9, 0 - mov QWORD PTR [rsi+184], r9 - add rsp, 616 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mul_24 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_avx2_24 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - sub rsp, 616 - mov QWORD PTR [rsp+576], rcx - mov QWORD PTR [rsp+584], rdx - mov QWORD PTR [rsp+592], r8 - lea r12, QWORD PTR [rsp+384] - lea r14, QWORD PTR [rdx+96] - ; Add - mov rax, QWORD PTR [rdx] - xor r15, r15 - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [rdx+8] - mov QWORD PTR [r12], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [rdx+16] - mov QWORD PTR [r12+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [rdx+24] - mov QWORD PTR [r12+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [r12+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [r12+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r12+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [rdx+56] - mov QWORD PTR [r12+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [rdx+64] - mov QWORD PTR [r12+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [rdx+72] - mov QWORD PTR [r12+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [r12+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [r12+80], r9 - adc r10, QWORD PTR [r14+88] - mov QWORD PTR [r12+88], r10 - adc r15, 0 - mov QWORD PTR [rsp+600], r15 - lea r13, QWORD PTR [rsp+480] - lea r14, QWORD PTR [r8+96] - ; Add - mov rax, QWORD PTR [r8] - xor rdi, rdi - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [r8+8] - mov QWORD PTR [r13], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [r8+16] - mov QWORD PTR [r13+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [r8+24] - mov QWORD PTR [r13+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [r8+32] - mov QWORD PTR [r13+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [r8+40] - mov QWORD PTR [r13+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [r8+48] - mov QWORD PTR [r13+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [r8+56] - mov QWORD PTR [r13+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [r8+64] - mov QWORD PTR [r13+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [r8+72] - mov QWORD PTR [r13+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [r8+80] - mov QWORD PTR [r13+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [r8+88] - mov QWORD PTR [r13+80], r9 - adc r10, QWORD PTR [r14+88] - mov QWORD PTR [r13+88], r10 - adc rdi, 0 - mov QWORD PTR [rsp+608], rdi - mov r8, r13 - mov rdx, r12 - mov rcx, rsp - call sp_3072_mul_avx2_12 - mov r8, QWORD PTR [rsp+592] - mov rdx, QWORD PTR [rsp+584] - lea rcx, QWORD PTR [rsp+192] - add r8, 96 - add rdx, 96 - call sp_3072_mul_avx2_12 - mov r8, QWORD PTR [rsp+592] - mov rdx, QWORD PTR [rsp+584] - mov rcx, QWORD PTR [rsp+576] - call sp_3072_mul_avx2_12 -IFDEF _WIN64 - mov r8, QWORD PTR [rsp+592] - mov rdx, QWORD PTR [rsp+584] - mov rcx, QWORD PTR [rsp+576] -ENDIF - mov r15, QWORD PTR [rsp+600] - mov rdi, QWORD PTR [rsp+608] - mov rsi, QWORD PTR [rsp+576] - mov r11, r15 - lea r12, QWORD PTR [rsp+384] - lea r13, QWORD PTR [rsp+480] - and r11, rdi - neg r15 - neg rdi - add rsi, 192 - mov rax, QWORD PTR [r12] - mov r9, QWORD PTR [r13] - pext rax, rax, rdi - pext r9, r9, r15 - add rax, r9 - mov r9, QWORD PTR [r12+8] - mov r10, QWORD PTR [r13+8] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi], rax - adc r9, r10 - mov r10, QWORD PTR [r12+16] - mov rax, QWORD PTR [r13+16] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+8], r9 - adc r10, rax - mov rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [r13+24] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+16], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+32] - mov r10, QWORD PTR [r13+32] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+24], rax - adc r9, r10 - mov r10, QWORD PTR [r12+40] - mov rax, QWORD PTR [r13+40] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+32], r9 - adc r10, rax - mov rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [r13+48] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+40], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+56] - mov r10, QWORD PTR [r13+56] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+48], rax - adc r9, r10 - mov r10, QWORD PTR [r12+64] - mov rax, QWORD PTR [r13+64] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+56], r9 - adc r10, rax - mov rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [r13+72] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+64], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+80] - mov r10, QWORD PTR [r13+80] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+72], rax - adc r9, r10 - mov r10, QWORD PTR [r12+88] - mov rax, QWORD PTR [r13+88] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+80], r9 - adc r10, rax - mov QWORD PTR [rsi+88], r10 - adc r11, 0 - lea r13, QWORD PTR [rsp+192] - mov r12, rsp - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [r13] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [r13+184] - mov QWORD PTR [r12+184], r10 - sbb r11, 0 - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [rcx] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [rcx+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [rcx+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [rcx+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [rcx+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [rcx+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [rcx+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [rcx+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [rcx+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [rcx+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [rcx+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [rcx+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [rcx+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [rcx+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [rcx+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [rcx+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [rcx+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [rcx+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [rcx+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [rcx+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [rcx+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [rcx+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [rcx+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [rcx+184] - mov QWORD PTR [r12+184], r10 - sbb r11, 0 - sub rsi, 96 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r12] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r12+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r12+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r12+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r12+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r12+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r12+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r12+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r12+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r12+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r12+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r12+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r12+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r12+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r12+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r12+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r12+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r12+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r12+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r12+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r12+184] - mov QWORD PTR [rsi+184], r10 - adc r11, 0 - mov QWORD PTR [rcx+288], r11 - add rsi, 96 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r13+96] - mov QWORD PTR [rsi+96], rax - ; Add to zero - mov rax, QWORD PTR [r13+104] - adc rax, 0 - mov r9, QWORD PTR [r13+112] - mov QWORD PTR [rsi+104], rax - adc r9, 0 - mov r10, QWORD PTR [r13+120] - mov QWORD PTR [rsi+112], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+128] - mov QWORD PTR [rsi+120], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+136] - mov QWORD PTR [rsi+128], rax - adc r9, 0 - mov r10, QWORD PTR [r13+144] - mov QWORD PTR [rsi+136], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+152] - mov QWORD PTR [rsi+144], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+160] - mov QWORD PTR [rsi+152], rax - adc r9, 0 - mov r10, QWORD PTR [r13+168] - mov QWORD PTR [rsi+160], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+176] - mov QWORD PTR [rsi+168], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+184] - mov QWORD PTR [rsi+176], rax - adc r9, 0 - mov QWORD PTR [rsi+184], r9 - add rsp, 616 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mul_avx2_24 ENDP -_TEXT ENDS -ENDIF -; /* Sub b from a into a. (a -= b) -; * -; * a A single precision integer and result. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sub_in_place_48 PROC - mov r8, QWORD PTR [rcx] - sub r8, QWORD PTR [rdx] - mov r9, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - sbb r9, QWORD PTR [rdx+8] - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], r9 - sbb r8, QWORD PTR [rdx+16] - mov r9, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - sbb r9, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], r9 - sbb r8, QWORD PTR [rdx+32] - mov r9, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - sbb r9, QWORD PTR [rdx+40] - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], r9 - sbb r8, QWORD PTR [rdx+48] - mov r9, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - sbb r9, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], r9 - sbb r8, QWORD PTR [rdx+64] - mov r9, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - sbb r9, QWORD PTR [rdx+72] - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], r9 - sbb r8, QWORD PTR [rdx+80] - mov r9, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - sbb r9, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rcx+96] - mov QWORD PTR [rcx+88], r9 - sbb r8, QWORD PTR [rdx+96] - mov r9, QWORD PTR [rcx+104] - mov QWORD PTR [rcx+96], r8 - sbb r9, QWORD PTR [rdx+104] - mov r8, QWORD PTR [rcx+112] - mov QWORD PTR [rcx+104], r9 - sbb r8, QWORD PTR [rdx+112] - mov r9, QWORD PTR [rcx+120] - mov QWORD PTR [rcx+112], r8 - sbb r9, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rcx+128] - mov QWORD PTR [rcx+120], r9 - sbb r8, QWORD PTR [rdx+128] - mov r9, QWORD PTR [rcx+136] - mov QWORD PTR [rcx+128], r8 - sbb r9, QWORD PTR [rdx+136] - mov r8, QWORD PTR [rcx+144] - mov QWORD PTR [rcx+136], r9 - sbb r8, QWORD PTR [rdx+144] - mov r9, QWORD PTR [rcx+152] - mov QWORD PTR [rcx+144], r8 - sbb r9, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rcx+160] - mov QWORD PTR [rcx+152], r9 - sbb r8, QWORD PTR [rdx+160] - mov r9, QWORD PTR [rcx+168] - mov QWORD PTR [rcx+160], r8 - sbb r9, QWORD PTR [rdx+168] - mov r8, QWORD PTR [rcx+176] - mov QWORD PTR [rcx+168], r9 - sbb r8, QWORD PTR [rdx+176] - mov r9, QWORD PTR [rcx+184] - mov QWORD PTR [rcx+176], r8 - sbb r9, QWORD PTR [rdx+184] - mov r8, QWORD PTR [rcx+192] - mov QWORD PTR [rcx+184], r9 - sbb r8, QWORD PTR [rdx+192] - mov r9, QWORD PTR [rcx+200] - mov QWORD PTR [rcx+192], r8 - sbb r9, QWORD PTR [rdx+200] - mov r8, QWORD PTR [rcx+208] - mov QWORD PTR [rcx+200], r9 - sbb r8, QWORD PTR [rdx+208] - mov r9, QWORD PTR [rcx+216] - mov QWORD PTR [rcx+208], r8 - sbb r9, QWORD PTR [rdx+216] - mov r8, QWORD PTR [rcx+224] - mov QWORD PTR [rcx+216], r9 - sbb r8, QWORD PTR [rdx+224] - mov r9, QWORD PTR [rcx+232] - mov QWORD PTR [rcx+224], r8 - sbb r9, QWORD PTR [rdx+232] - mov r8, QWORD PTR [rcx+240] - mov QWORD PTR [rcx+232], r9 - sbb r8, QWORD PTR [rdx+240] - mov r9, QWORD PTR [rcx+248] - mov QWORD PTR [rcx+240], r8 - sbb r9, QWORD PTR [rdx+248] - mov r8, QWORD PTR [rcx+256] - mov QWORD PTR [rcx+248], r9 - sbb r8, QWORD PTR [rdx+256] - mov r9, QWORD PTR [rcx+264] - mov QWORD PTR [rcx+256], r8 - sbb r9, QWORD PTR [rdx+264] - mov r8, QWORD PTR [rcx+272] - mov QWORD PTR [rcx+264], r9 - sbb r8, QWORD PTR [rdx+272] - mov r9, QWORD PTR [rcx+280] - mov QWORD PTR [rcx+272], r8 - sbb r9, QWORD PTR [rdx+280] - mov r8, QWORD PTR [rcx+288] - mov QWORD PTR [rcx+280], r9 - sbb r8, QWORD PTR [rdx+288] - mov r9, QWORD PTR [rcx+296] - mov QWORD PTR [rcx+288], r8 - sbb r9, QWORD PTR [rdx+296] - mov r8, QWORD PTR [rcx+304] - mov QWORD PTR [rcx+296], r9 - sbb r8, QWORD PTR [rdx+304] - mov r9, QWORD PTR [rcx+312] - mov QWORD PTR [rcx+304], r8 - sbb r9, QWORD PTR [rdx+312] - mov r8, QWORD PTR [rcx+320] - mov QWORD PTR [rcx+312], r9 - sbb r8, QWORD PTR [rdx+320] - mov r9, QWORD PTR [rcx+328] - mov QWORD PTR [rcx+320], r8 - sbb r9, QWORD PTR [rdx+328] - mov r8, QWORD PTR [rcx+336] - mov QWORD PTR [rcx+328], r9 - sbb r8, QWORD PTR [rdx+336] - mov r9, QWORD PTR [rcx+344] - mov QWORD PTR [rcx+336], r8 - sbb r9, QWORD PTR [rdx+344] - mov r8, QWORD PTR [rcx+352] - mov QWORD PTR [rcx+344], r9 - sbb r8, QWORD PTR [rdx+352] - mov r9, QWORD PTR [rcx+360] - mov QWORD PTR [rcx+352], r8 - sbb r9, QWORD PTR [rdx+360] - mov r8, QWORD PTR [rcx+368] - mov QWORD PTR [rcx+360], r9 - sbb r8, QWORD PTR [rdx+368] - mov r9, QWORD PTR [rcx+376] - mov QWORD PTR [rcx+368], r8 - sbb r9, QWORD PTR [rdx+376] - mov QWORD PTR [rcx+376], r9 - sbb rax, rax - ret -sp_3072_sub_in_place_48 ENDP -_TEXT ENDS -; /* Add b to a into r. (r = a + b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_add_48 PROC - ; Add - mov r9, QWORD PTR [rdx] - xor rax, rax - add r9, QWORD PTR [r8] - mov r10, QWORD PTR [rdx+8] - mov QWORD PTR [rcx], r9 - adc r10, QWORD PTR [r8+8] - mov r9, QWORD PTR [rdx+16] - mov QWORD PTR [rcx+8], r10 - adc r9, QWORD PTR [r8+16] - mov r10, QWORD PTR [rdx+24] - mov QWORD PTR [rcx+16], r9 - adc r10, QWORD PTR [r8+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [rcx+24], r10 - adc r9, QWORD PTR [r8+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [rcx+32], r9 - adc r10, QWORD PTR [r8+40] - mov r9, QWORD PTR [rdx+48] - mov QWORD PTR [rcx+40], r10 - adc r9, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+56] - mov QWORD PTR [rcx+48], r9 - adc r10, QWORD PTR [r8+56] - mov r9, QWORD PTR [rdx+64] - mov QWORD PTR [rcx+56], r10 - adc r9, QWORD PTR [r8+64] - mov r10, QWORD PTR [rdx+72] - mov QWORD PTR [rcx+64], r9 - adc r10, QWORD PTR [r8+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [rcx+72], r10 - adc r9, QWORD PTR [r8+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [rcx+80], r9 - adc r10, QWORD PTR [r8+88] - mov r9, QWORD PTR [rdx+96] - mov QWORD PTR [rcx+88], r10 - adc r9, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+104] - mov QWORD PTR [rcx+96], r9 - adc r10, QWORD PTR [r8+104] - mov r9, QWORD PTR [rdx+112] - mov QWORD PTR [rcx+104], r10 - adc r9, QWORD PTR [r8+112] - mov r10, QWORD PTR [rdx+120] - mov QWORD PTR [rcx+112], r9 - adc r10, QWORD PTR [r8+120] - mov r9, QWORD PTR [rdx+128] - mov QWORD PTR [rcx+120], r10 - adc r9, QWORD PTR [r8+128] - mov r10, QWORD PTR [rdx+136] - mov QWORD PTR [rcx+128], r9 - adc r10, QWORD PTR [r8+136] - mov r9, QWORD PTR [rdx+144] - mov QWORD PTR [rcx+136], r10 - adc r9, QWORD PTR [r8+144] - mov r10, QWORD PTR [rdx+152] - mov QWORD PTR [rcx+144], r9 - adc r10, QWORD PTR [r8+152] - mov r9, QWORD PTR [rdx+160] - mov QWORD PTR [rcx+152], r10 - adc r9, QWORD PTR [r8+160] - mov r10, QWORD PTR [rdx+168] - mov QWORD PTR [rcx+160], r9 - adc r10, QWORD PTR [r8+168] - mov r9, QWORD PTR [rdx+176] - mov QWORD PTR [rcx+168], r10 - adc r9, QWORD PTR [r8+176] - mov r10, QWORD PTR [rdx+184] - mov QWORD PTR [rcx+176], r9 - adc r10, QWORD PTR [r8+184] - mov r9, QWORD PTR [rdx+192] - mov QWORD PTR [rcx+184], r10 - adc r9, QWORD PTR [r8+192] - mov r10, QWORD PTR [rdx+200] - mov QWORD PTR [rcx+192], r9 - adc r10, QWORD PTR [r8+200] - mov r9, QWORD PTR [rdx+208] - mov QWORD PTR [rcx+200], r10 - adc r9, QWORD PTR [r8+208] - mov r10, QWORD PTR [rdx+216] - mov QWORD PTR [rcx+208], r9 - adc r10, QWORD PTR [r8+216] - mov r9, QWORD PTR [rdx+224] - mov QWORD PTR [rcx+216], r10 - adc r9, QWORD PTR [r8+224] - mov r10, QWORD PTR [rdx+232] - mov QWORD PTR [rcx+224], r9 - adc r10, QWORD PTR [r8+232] - mov r9, QWORD PTR [rdx+240] - mov QWORD PTR [rcx+232], r10 - adc r9, QWORD PTR [r8+240] - mov r10, QWORD PTR [rdx+248] - mov QWORD PTR [rcx+240], r9 - adc r10, QWORD PTR [r8+248] - mov r9, QWORD PTR [rdx+256] - mov QWORD PTR [rcx+248], r10 - adc r9, QWORD PTR [r8+256] - mov r10, QWORD PTR [rdx+264] - mov QWORD PTR [rcx+256], r9 - adc r10, QWORD PTR [r8+264] - mov r9, QWORD PTR [rdx+272] - mov QWORD PTR [rcx+264], r10 - adc r9, QWORD PTR [r8+272] - mov r10, QWORD PTR [rdx+280] - mov QWORD PTR [rcx+272], r9 - adc r10, QWORD PTR [r8+280] - mov r9, QWORD PTR [rdx+288] - mov QWORD PTR [rcx+280], r10 - adc r9, QWORD PTR [r8+288] - mov r10, QWORD PTR [rdx+296] - mov QWORD PTR [rcx+288], r9 - adc r10, QWORD PTR [r8+296] - mov r9, QWORD PTR [rdx+304] - mov QWORD PTR [rcx+296], r10 - adc r9, QWORD PTR [r8+304] - mov r10, QWORD PTR [rdx+312] - mov QWORD PTR [rcx+304], r9 - adc r10, QWORD PTR [r8+312] - mov r9, QWORD PTR [rdx+320] - mov QWORD PTR [rcx+312], r10 - adc r9, QWORD PTR [r8+320] - mov r10, QWORD PTR [rdx+328] - mov QWORD PTR [rcx+320], r9 - adc r10, QWORD PTR [r8+328] - mov r9, QWORD PTR [rdx+336] - mov QWORD PTR [rcx+328], r10 - adc r9, QWORD PTR [r8+336] - mov r10, QWORD PTR [rdx+344] - mov QWORD PTR [rcx+336], r9 - adc r10, QWORD PTR [r8+344] - mov r9, QWORD PTR [rdx+352] - mov QWORD PTR [rcx+344], r10 - adc r9, QWORD PTR [r8+352] - mov r10, QWORD PTR [rdx+360] - mov QWORD PTR [rcx+352], r9 - adc r10, QWORD PTR [r8+360] - mov r9, QWORD PTR [rdx+368] - mov QWORD PTR [rcx+360], r10 - adc r9, QWORD PTR [r8+368] - mov r10, QWORD PTR [rdx+376] - mov QWORD PTR [rcx+368], r9 - adc r10, QWORD PTR [r8+376] - mov QWORD PTR [rcx+376], r10 - adc rax, 0 - ret -sp_3072_add_48 ENDP -_TEXT ENDS -; /* Multiply a and b into r. (r = a * b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_48 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - sub rsp, 1192 - mov QWORD PTR [rsp+1152], rcx - mov QWORD PTR [rsp+1160], rdx - mov QWORD PTR [rsp+1168], r8 - lea r12, QWORD PTR [rsp+768] - lea r14, QWORD PTR [rdx+192] - ; Add - mov rax, QWORD PTR [rdx] - xor r15, r15 - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [rdx+8] - mov QWORD PTR [r12], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [rdx+16] - mov QWORD PTR [r12+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [rdx+24] - mov QWORD PTR [r12+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [r12+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [r12+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r12+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [rdx+56] - mov QWORD PTR [r12+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [rdx+64] - mov QWORD PTR [r12+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [rdx+72] - mov QWORD PTR [r12+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [r12+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [r12+80], r9 - adc r10, QWORD PTR [r14+88] - mov rax, QWORD PTR [rdx+96] - mov QWORD PTR [r12+88], r10 - adc rax, QWORD PTR [r14+96] - mov r9, QWORD PTR [rdx+104] - mov QWORD PTR [r12+96], rax - adc r9, QWORD PTR [r14+104] - mov r10, QWORD PTR [rdx+112] - mov QWORD PTR [r12+104], r9 - adc r10, QWORD PTR [r14+112] - mov rax, QWORD PTR [rdx+120] - mov QWORD PTR [r12+112], r10 - adc rax, QWORD PTR [r14+120] - mov r9, QWORD PTR [rdx+128] - mov QWORD PTR [r12+120], rax - adc r9, QWORD PTR [r14+128] - mov r10, QWORD PTR [rdx+136] - mov QWORD PTR [r12+128], r9 - adc r10, QWORD PTR [r14+136] - mov rax, QWORD PTR [rdx+144] - mov QWORD PTR [r12+136], r10 - adc rax, QWORD PTR [r14+144] - mov r9, QWORD PTR [rdx+152] - mov QWORD PTR [r12+144], rax - adc r9, QWORD PTR [r14+152] - mov r10, QWORD PTR [rdx+160] - mov QWORD PTR [r12+152], r9 - adc r10, QWORD PTR [r14+160] - mov rax, QWORD PTR [rdx+168] - mov QWORD PTR [r12+160], r10 - adc rax, QWORD PTR [r14+168] - mov r9, QWORD PTR [rdx+176] - mov QWORD PTR [r12+168], rax - adc r9, QWORD PTR [r14+176] - mov r10, QWORD PTR [rdx+184] - mov QWORD PTR [r12+176], r9 - adc r10, QWORD PTR [r14+184] - mov QWORD PTR [r12+184], r10 - adc r15, 0 - mov QWORD PTR [rsp+1176], r15 - lea r13, QWORD PTR [rsp+960] - lea r14, QWORD PTR [r8+192] - ; Add - mov rax, QWORD PTR [r8] - xor rdi, rdi - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [r8+8] - mov QWORD PTR [r13], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [r8+16] - mov QWORD PTR [r13+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [r8+24] - mov QWORD PTR [r13+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [r8+32] - mov QWORD PTR [r13+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [r8+40] - mov QWORD PTR [r13+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [r8+48] - mov QWORD PTR [r13+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [r8+56] - mov QWORD PTR [r13+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [r8+64] - mov QWORD PTR [r13+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [r8+72] - mov QWORD PTR [r13+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [r8+80] - mov QWORD PTR [r13+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [r8+88] - mov QWORD PTR [r13+80], r9 - adc r10, QWORD PTR [r14+88] - mov rax, QWORD PTR [r8+96] - mov QWORD PTR [r13+88], r10 - adc rax, QWORD PTR [r14+96] - mov r9, QWORD PTR [r8+104] - mov QWORD PTR [r13+96], rax - adc r9, QWORD PTR [r14+104] - mov r10, QWORD PTR [r8+112] - mov QWORD PTR [r13+104], r9 - adc r10, QWORD PTR [r14+112] - mov rax, QWORD PTR [r8+120] - mov QWORD PTR [r13+112], r10 - adc rax, QWORD PTR [r14+120] - mov r9, QWORD PTR [r8+128] - mov QWORD PTR [r13+120], rax - adc r9, QWORD PTR [r14+128] - mov r10, QWORD PTR [r8+136] - mov QWORD PTR [r13+128], r9 - adc r10, QWORD PTR [r14+136] - mov rax, QWORD PTR [r8+144] - mov QWORD PTR [r13+136], r10 - adc rax, QWORD PTR [r14+144] - mov r9, QWORD PTR [r8+152] - mov QWORD PTR [r13+144], rax - adc r9, QWORD PTR [r14+152] - mov r10, QWORD PTR [r8+160] - mov QWORD PTR [r13+152], r9 - adc r10, QWORD PTR [r14+160] - mov rax, QWORD PTR [r8+168] - mov QWORD PTR [r13+160], r10 - adc rax, QWORD PTR [r14+168] - mov r9, QWORD PTR [r8+176] - mov QWORD PTR [r13+168], rax - adc r9, QWORD PTR [r14+176] - mov r10, QWORD PTR [r8+184] - mov QWORD PTR [r13+176], r9 - adc r10, QWORD PTR [r14+184] - mov QWORD PTR [r13+184], r10 - adc rdi, 0 - mov QWORD PTR [rsp+1184], rdi - mov r8, r13 - mov rdx, r12 - mov rcx, rsp - call sp_3072_mul_24 - mov r8, QWORD PTR [rsp+1168] - mov rdx, QWORD PTR [rsp+1160] - lea rcx, QWORD PTR [rsp+384] - add r8, 192 - add rdx, 192 - call sp_3072_mul_24 - mov r8, QWORD PTR [rsp+1168] - mov rdx, QWORD PTR [rsp+1160] - mov rcx, QWORD PTR [rsp+1152] - call sp_3072_mul_24 -IFDEF _WIN64 - mov r8, QWORD PTR [rsp+1168] - mov rdx, QWORD PTR [rsp+1160] - mov rcx, QWORD PTR [rsp+1152] -ENDIF - mov r15, QWORD PTR [rsp+1176] - mov rdi, QWORD PTR [rsp+1184] - mov rsi, QWORD PTR [rsp+1152] - mov r11, r15 - lea r12, QWORD PTR [rsp+768] - lea r13, QWORD PTR [rsp+960] - and r11, rdi - neg r15 - neg rdi - add rsi, 384 - mov rax, QWORD PTR [r12] - mov r9, QWORD PTR [r13] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12], rax - mov QWORD PTR [r13], r9 - mov rax, QWORD PTR [r12+8] - mov r9, QWORD PTR [r13+8] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+8], rax - mov QWORD PTR [r13+8], r9 - mov rax, QWORD PTR [r12+16] - mov r9, QWORD PTR [r13+16] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+16], rax - mov QWORD PTR [r13+16], r9 - mov rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [r13+24] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+24], rax - mov QWORD PTR [r13+24], r9 - mov rax, QWORD PTR [r12+32] - mov r9, QWORD PTR [r13+32] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+32], rax - mov QWORD PTR [r13+32], r9 - mov rax, QWORD PTR [r12+40] - mov r9, QWORD PTR [r13+40] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+40], rax - mov QWORD PTR [r13+40], r9 - mov rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [r13+48] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+48], rax - mov QWORD PTR [r13+48], r9 - mov rax, QWORD PTR [r12+56] - mov r9, QWORD PTR [r13+56] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+56], rax - mov QWORD PTR [r13+56], r9 - mov rax, QWORD PTR [r12+64] - mov r9, QWORD PTR [r13+64] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+64], rax - mov QWORD PTR [r13+64], r9 - mov rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [r13+72] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+72], rax - mov QWORD PTR [r13+72], r9 - mov rax, QWORD PTR [r12+80] - mov r9, QWORD PTR [r13+80] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+80], rax - mov QWORD PTR [r13+80], r9 - mov rax, QWORD PTR [r12+88] - mov r9, QWORD PTR [r13+88] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+88], rax - mov QWORD PTR [r13+88], r9 - mov rax, QWORD PTR [r12+96] - mov r9, QWORD PTR [r13+96] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+96], rax - mov QWORD PTR [r13+96], r9 - mov rax, QWORD PTR [r12+104] - mov r9, QWORD PTR [r13+104] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+104], rax - mov QWORD PTR [r13+104], r9 - mov rax, QWORD PTR [r12+112] - mov r9, QWORD PTR [r13+112] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+112], rax - mov QWORD PTR [r13+112], r9 - mov rax, QWORD PTR [r12+120] - mov r9, QWORD PTR [r13+120] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+120], rax - mov QWORD PTR [r13+120], r9 - mov rax, QWORD PTR [r12+128] - mov r9, QWORD PTR [r13+128] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+128], rax - mov QWORD PTR [r13+128], r9 - mov rax, QWORD PTR [r12+136] - mov r9, QWORD PTR [r13+136] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+136], rax - mov QWORD PTR [r13+136], r9 - mov rax, QWORD PTR [r12+144] - mov r9, QWORD PTR [r13+144] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+144], rax - mov QWORD PTR [r13+144], r9 - mov rax, QWORD PTR [r12+152] - mov r9, QWORD PTR [r13+152] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+152], rax - mov QWORD PTR [r13+152], r9 - mov rax, QWORD PTR [r12+160] - mov r9, QWORD PTR [r13+160] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+160], rax - mov QWORD PTR [r13+160], r9 - mov rax, QWORD PTR [r12+168] - mov r9, QWORD PTR [r13+168] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+168], rax - mov QWORD PTR [r13+168], r9 - mov rax, QWORD PTR [r12+176] - mov r9, QWORD PTR [r13+176] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+176], rax - mov QWORD PTR [r13+176], r9 - mov rax, QWORD PTR [r12+184] - mov r9, QWORD PTR [r13+184] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+184], rax - mov QWORD PTR [r13+184], r9 - mov rax, QWORD PTR [r12] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r13+184] - mov QWORD PTR [rsi+184], r10 - adc r11, 0 - lea r13, QWORD PTR [rsp+384] - mov r12, rsp - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [r13] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [r13+184] - mov rax, QWORD PTR [r12+192] - mov QWORD PTR [r12+184], r10 - sbb rax, QWORD PTR [r13+192] - mov r9, QWORD PTR [r12+200] - mov QWORD PTR [r12+192], rax - sbb r9, QWORD PTR [r13+200] - mov r10, QWORD PTR [r12+208] - mov QWORD PTR [r12+200], r9 - sbb r10, QWORD PTR [r13+208] - mov rax, QWORD PTR [r12+216] - mov QWORD PTR [r12+208], r10 - sbb rax, QWORD PTR [r13+216] - mov r9, QWORD PTR [r12+224] - mov QWORD PTR [r12+216], rax - sbb r9, QWORD PTR [r13+224] - mov r10, QWORD PTR [r12+232] - mov QWORD PTR [r12+224], r9 - sbb r10, QWORD PTR [r13+232] - mov rax, QWORD PTR [r12+240] - mov QWORD PTR [r12+232], r10 - sbb rax, QWORD PTR [r13+240] - mov r9, QWORD PTR [r12+248] - mov QWORD PTR [r12+240], rax - sbb r9, QWORD PTR [r13+248] - mov r10, QWORD PTR [r12+256] - mov QWORD PTR [r12+248], r9 - sbb r10, QWORD PTR [r13+256] - mov rax, QWORD PTR [r12+264] - mov QWORD PTR [r12+256], r10 - sbb rax, QWORD PTR [r13+264] - mov r9, QWORD PTR [r12+272] - mov QWORD PTR [r12+264], rax - sbb r9, QWORD PTR [r13+272] - mov r10, QWORD PTR [r12+280] - mov QWORD PTR [r12+272], r9 - sbb r10, QWORD PTR [r13+280] - mov rax, QWORD PTR [r12+288] - mov QWORD PTR [r12+280], r10 - sbb rax, QWORD PTR [r13+288] - mov r9, QWORD PTR [r12+296] - mov QWORD PTR [r12+288], rax - sbb r9, QWORD PTR [r13+296] - mov r10, QWORD PTR [r12+304] - mov QWORD PTR [r12+296], r9 - sbb r10, QWORD PTR [r13+304] - mov rax, QWORD PTR [r12+312] - mov QWORD PTR [r12+304], r10 - sbb rax, QWORD PTR [r13+312] - mov r9, QWORD PTR [r12+320] - mov QWORD PTR [r12+312], rax - sbb r9, QWORD PTR [r13+320] - mov r10, QWORD PTR [r12+328] - mov QWORD PTR [r12+320], r9 - sbb r10, QWORD PTR [r13+328] - mov rax, QWORD PTR [r12+336] - mov QWORD PTR [r12+328], r10 - sbb rax, QWORD PTR [r13+336] - mov r9, QWORD PTR [r12+344] - mov QWORD PTR [r12+336], rax - sbb r9, QWORD PTR [r13+344] - mov r10, QWORD PTR [r12+352] - mov QWORD PTR [r12+344], r9 - sbb r10, QWORD PTR [r13+352] - mov rax, QWORD PTR [r12+360] - mov QWORD PTR [r12+352], r10 - sbb rax, QWORD PTR [r13+360] - mov r9, QWORD PTR [r12+368] - mov QWORD PTR [r12+360], rax - sbb r9, QWORD PTR [r13+368] - mov r10, QWORD PTR [r12+376] - mov QWORD PTR [r12+368], r9 - sbb r10, QWORD PTR [r13+376] - mov QWORD PTR [r12+376], r10 - sbb r11, 0 - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [rcx] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [rcx+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [rcx+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [rcx+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [rcx+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [rcx+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [rcx+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [rcx+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [rcx+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [rcx+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [rcx+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [rcx+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [rcx+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [rcx+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [rcx+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [rcx+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [rcx+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [rcx+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [rcx+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [rcx+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [rcx+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [rcx+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [rcx+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [rcx+184] - mov rax, QWORD PTR [r12+192] - mov QWORD PTR [r12+184], r10 - sbb rax, QWORD PTR [rcx+192] - mov r9, QWORD PTR [r12+200] - mov QWORD PTR [r12+192], rax - sbb r9, QWORD PTR [rcx+200] - mov r10, QWORD PTR [r12+208] - mov QWORD PTR [r12+200], r9 - sbb r10, QWORD PTR [rcx+208] - mov rax, QWORD PTR [r12+216] - mov QWORD PTR [r12+208], r10 - sbb rax, QWORD PTR [rcx+216] - mov r9, QWORD PTR [r12+224] - mov QWORD PTR [r12+216], rax - sbb r9, QWORD PTR [rcx+224] - mov r10, QWORD PTR [r12+232] - mov QWORD PTR [r12+224], r9 - sbb r10, QWORD PTR [rcx+232] - mov rax, QWORD PTR [r12+240] - mov QWORD PTR [r12+232], r10 - sbb rax, QWORD PTR [rcx+240] - mov r9, QWORD PTR [r12+248] - mov QWORD PTR [r12+240], rax - sbb r9, QWORD PTR [rcx+248] - mov r10, QWORD PTR [r12+256] - mov QWORD PTR [r12+248], r9 - sbb r10, QWORD PTR [rcx+256] - mov rax, QWORD PTR [r12+264] - mov QWORD PTR [r12+256], r10 - sbb rax, QWORD PTR [rcx+264] - mov r9, QWORD PTR [r12+272] - mov QWORD PTR [r12+264], rax - sbb r9, QWORD PTR [rcx+272] - mov r10, QWORD PTR [r12+280] - mov QWORD PTR [r12+272], r9 - sbb r10, QWORD PTR [rcx+280] - mov rax, QWORD PTR [r12+288] - mov QWORD PTR [r12+280], r10 - sbb rax, QWORD PTR [rcx+288] - mov r9, QWORD PTR [r12+296] - mov QWORD PTR [r12+288], rax - sbb r9, QWORD PTR [rcx+296] - mov r10, QWORD PTR [r12+304] - mov QWORD PTR [r12+296], r9 - sbb r10, QWORD PTR [rcx+304] - mov rax, QWORD PTR [r12+312] - mov QWORD PTR [r12+304], r10 - sbb rax, QWORD PTR [rcx+312] - mov r9, QWORD PTR [r12+320] - mov QWORD PTR [r12+312], rax - sbb r9, QWORD PTR [rcx+320] - mov r10, QWORD PTR [r12+328] - mov QWORD PTR [r12+320], r9 - sbb r10, QWORD PTR [rcx+328] - mov rax, QWORD PTR [r12+336] - mov QWORD PTR [r12+328], r10 - sbb rax, QWORD PTR [rcx+336] - mov r9, QWORD PTR [r12+344] - mov QWORD PTR [r12+336], rax - sbb r9, QWORD PTR [rcx+344] - mov r10, QWORD PTR [r12+352] - mov QWORD PTR [r12+344], r9 - sbb r10, QWORD PTR [rcx+352] - mov rax, QWORD PTR [r12+360] - mov QWORD PTR [r12+352], r10 - sbb rax, QWORD PTR [rcx+360] - mov r9, QWORD PTR [r12+368] - mov QWORD PTR [r12+360], rax - sbb r9, QWORD PTR [rcx+368] - mov r10, QWORD PTR [r12+376] - mov QWORD PTR [r12+368], r9 - sbb r10, QWORD PTR [rcx+376] - mov QWORD PTR [r12+376], r10 - sbb r11, 0 - sub rsi, 192 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r12] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r12+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r12+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r12+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r12+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r12+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r12+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r12+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r12+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r12+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r12+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r12+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r12+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r12+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r12+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r12+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r12+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r12+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r12+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r12+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r12+184] - mov rax, QWORD PTR [rsi+192] - mov QWORD PTR [rsi+184], r10 - adc rax, QWORD PTR [r12+192] - mov r9, QWORD PTR [rsi+200] - mov QWORD PTR [rsi+192], rax - adc r9, QWORD PTR [r12+200] - mov r10, QWORD PTR [rsi+208] - mov QWORD PTR [rsi+200], r9 - adc r10, QWORD PTR [r12+208] - mov rax, QWORD PTR [rsi+216] - mov QWORD PTR [rsi+208], r10 - adc rax, QWORD PTR [r12+216] - mov r9, QWORD PTR [rsi+224] - mov QWORD PTR [rsi+216], rax - adc r9, QWORD PTR [r12+224] - mov r10, QWORD PTR [rsi+232] - mov QWORD PTR [rsi+224], r9 - adc r10, QWORD PTR [r12+232] - mov rax, QWORD PTR [rsi+240] - mov QWORD PTR [rsi+232], r10 - adc rax, QWORD PTR [r12+240] - mov r9, QWORD PTR [rsi+248] - mov QWORD PTR [rsi+240], rax - adc r9, QWORD PTR [r12+248] - mov r10, QWORD PTR [rsi+256] - mov QWORD PTR [rsi+248], r9 - adc r10, QWORD PTR [r12+256] - mov rax, QWORD PTR [rsi+264] - mov QWORD PTR [rsi+256], r10 - adc rax, QWORD PTR [r12+264] - mov r9, QWORD PTR [rsi+272] - mov QWORD PTR [rsi+264], rax - adc r9, QWORD PTR [r12+272] - mov r10, QWORD PTR [rsi+280] - mov QWORD PTR [rsi+272], r9 - adc r10, QWORD PTR [r12+280] - mov rax, QWORD PTR [rsi+288] - mov QWORD PTR [rsi+280], r10 - adc rax, QWORD PTR [r12+288] - mov r9, QWORD PTR [rsi+296] - mov QWORD PTR [rsi+288], rax - adc r9, QWORD PTR [r12+296] - mov r10, QWORD PTR [rsi+304] - mov QWORD PTR [rsi+296], r9 - adc r10, QWORD PTR [r12+304] - mov rax, QWORD PTR [rsi+312] - mov QWORD PTR [rsi+304], r10 - adc rax, QWORD PTR [r12+312] - mov r9, QWORD PTR [rsi+320] - mov QWORD PTR [rsi+312], rax - adc r9, QWORD PTR [r12+320] - mov r10, QWORD PTR [rsi+328] - mov QWORD PTR [rsi+320], r9 - adc r10, QWORD PTR [r12+328] - mov rax, QWORD PTR [rsi+336] - mov QWORD PTR [rsi+328], r10 - adc rax, QWORD PTR [r12+336] - mov r9, QWORD PTR [rsi+344] - mov QWORD PTR [rsi+336], rax - adc r9, QWORD PTR [r12+344] - mov r10, QWORD PTR [rsi+352] - mov QWORD PTR [rsi+344], r9 - adc r10, QWORD PTR [r12+352] - mov rax, QWORD PTR [rsi+360] - mov QWORD PTR [rsi+352], r10 - adc rax, QWORD PTR [r12+360] - mov r9, QWORD PTR [rsi+368] - mov QWORD PTR [rsi+360], rax - adc r9, QWORD PTR [r12+368] - mov r10, QWORD PTR [rsi+376] - mov QWORD PTR [rsi+368], r9 - adc r10, QWORD PTR [r12+376] - mov QWORD PTR [rsi+376], r10 - adc r11, 0 - mov QWORD PTR [rcx+576], r11 - add rsi, 192 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r13+184] - mov rax, QWORD PTR [rsi+192] - mov QWORD PTR [rsi+184], r10 - adc rax, QWORD PTR [r13+192] - mov QWORD PTR [rsi+192], rax - ; Add to zero - mov rax, QWORD PTR [r13+200] - adc rax, 0 - mov r9, QWORD PTR [r13+208] - mov QWORD PTR [rsi+200], rax - adc r9, 0 - mov r10, QWORD PTR [r13+216] - mov QWORD PTR [rsi+208], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+224] - mov QWORD PTR [rsi+216], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+232] - mov QWORD PTR [rsi+224], rax - adc r9, 0 - mov r10, QWORD PTR [r13+240] - mov QWORD PTR [rsi+232], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+248] - mov QWORD PTR [rsi+240], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+256] - mov QWORD PTR [rsi+248], rax - adc r9, 0 - mov r10, QWORD PTR [r13+264] - mov QWORD PTR [rsi+256], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+272] - mov QWORD PTR [rsi+264], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+280] - mov QWORD PTR [rsi+272], rax - adc r9, 0 - mov r10, QWORD PTR [r13+288] - mov QWORD PTR [rsi+280], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+296] - mov QWORD PTR [rsi+288], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+304] - mov QWORD PTR [rsi+296], rax - adc r9, 0 - mov r10, QWORD PTR [r13+312] - mov QWORD PTR [rsi+304], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+320] - mov QWORD PTR [rsi+312], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+328] - mov QWORD PTR [rsi+320], rax - adc r9, 0 - mov r10, QWORD PTR [r13+336] - mov QWORD PTR [rsi+328], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+344] - mov QWORD PTR [rsi+336], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+352] - mov QWORD PTR [rsi+344], rax - adc r9, 0 - mov r10, QWORD PTR [r13+360] - mov QWORD PTR [rsi+352], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+368] - mov QWORD PTR [rsi+360], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+376] - mov QWORD PTR [rsi+368], rax - adc r9, 0 - mov QWORD PTR [rsi+376], r9 - add rsp, 1192 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mul_48 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_avx2_48 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - sub rsp, 1192 - mov QWORD PTR [rsp+1152], rcx - mov QWORD PTR [rsp+1160], rdx - mov QWORD PTR [rsp+1168], r8 - lea r12, QWORD PTR [rsp+768] - lea r14, QWORD PTR [rdx+192] - ; Add - mov rax, QWORD PTR [rdx] - xor r15, r15 - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [rdx+8] - mov QWORD PTR [r12], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [rdx+16] - mov QWORD PTR [r12+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [rdx+24] - mov QWORD PTR [r12+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [r12+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [r12+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r12+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [rdx+56] - mov QWORD PTR [r12+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [rdx+64] - mov QWORD PTR [r12+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [rdx+72] - mov QWORD PTR [r12+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [r12+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [r12+80], r9 - adc r10, QWORD PTR [r14+88] - mov rax, QWORD PTR [rdx+96] - mov QWORD PTR [r12+88], r10 - adc rax, QWORD PTR [r14+96] - mov r9, QWORD PTR [rdx+104] - mov QWORD PTR [r12+96], rax - adc r9, QWORD PTR [r14+104] - mov r10, QWORD PTR [rdx+112] - mov QWORD PTR [r12+104], r9 - adc r10, QWORD PTR [r14+112] - mov rax, QWORD PTR [rdx+120] - mov QWORD PTR [r12+112], r10 - adc rax, QWORD PTR [r14+120] - mov r9, QWORD PTR [rdx+128] - mov QWORD PTR [r12+120], rax - adc r9, QWORD PTR [r14+128] - mov r10, QWORD PTR [rdx+136] - mov QWORD PTR [r12+128], r9 - adc r10, QWORD PTR [r14+136] - mov rax, QWORD PTR [rdx+144] - mov QWORD PTR [r12+136], r10 - adc rax, QWORD PTR [r14+144] - mov r9, QWORD PTR [rdx+152] - mov QWORD PTR [r12+144], rax - adc r9, QWORD PTR [r14+152] - mov r10, QWORD PTR [rdx+160] - mov QWORD PTR [r12+152], r9 - adc r10, QWORD PTR [r14+160] - mov rax, QWORD PTR [rdx+168] - mov QWORD PTR [r12+160], r10 - adc rax, QWORD PTR [r14+168] - mov r9, QWORD PTR [rdx+176] - mov QWORD PTR [r12+168], rax - adc r9, QWORD PTR [r14+176] - mov r10, QWORD PTR [rdx+184] - mov QWORD PTR [r12+176], r9 - adc r10, QWORD PTR [r14+184] - mov QWORD PTR [r12+184], r10 - adc r15, 0 - mov QWORD PTR [rsp+1176], r15 - lea r13, QWORD PTR [rsp+960] - lea r14, QWORD PTR [r8+192] - ; Add - mov rax, QWORD PTR [r8] - xor rdi, rdi - add rax, QWORD PTR [r14] - mov r9, QWORD PTR [r8+8] - mov QWORD PTR [r13], rax - adc r9, QWORD PTR [r14+8] - mov r10, QWORD PTR [r8+16] - mov QWORD PTR [r13+8], r9 - adc r10, QWORD PTR [r14+16] - mov rax, QWORD PTR [r8+24] - mov QWORD PTR [r13+16], r10 - adc rax, QWORD PTR [r14+24] - mov r9, QWORD PTR [r8+32] - mov QWORD PTR [r13+24], rax - adc r9, QWORD PTR [r14+32] - mov r10, QWORD PTR [r8+40] - mov QWORD PTR [r13+32], r9 - adc r10, QWORD PTR [r14+40] - mov rax, QWORD PTR [r8+48] - mov QWORD PTR [r13+40], r10 - adc rax, QWORD PTR [r14+48] - mov r9, QWORD PTR [r8+56] - mov QWORD PTR [r13+48], rax - adc r9, QWORD PTR [r14+56] - mov r10, QWORD PTR [r8+64] - mov QWORD PTR [r13+56], r9 - adc r10, QWORD PTR [r14+64] - mov rax, QWORD PTR [r8+72] - mov QWORD PTR [r13+64], r10 - adc rax, QWORD PTR [r14+72] - mov r9, QWORD PTR [r8+80] - mov QWORD PTR [r13+72], rax - adc r9, QWORD PTR [r14+80] - mov r10, QWORD PTR [r8+88] - mov QWORD PTR [r13+80], r9 - adc r10, QWORD PTR [r14+88] - mov rax, QWORD PTR [r8+96] - mov QWORD PTR [r13+88], r10 - adc rax, QWORD PTR [r14+96] - mov r9, QWORD PTR [r8+104] - mov QWORD PTR [r13+96], rax - adc r9, QWORD PTR [r14+104] - mov r10, QWORD PTR [r8+112] - mov QWORD PTR [r13+104], r9 - adc r10, QWORD PTR [r14+112] - mov rax, QWORD PTR [r8+120] - mov QWORD PTR [r13+112], r10 - adc rax, QWORD PTR [r14+120] - mov r9, QWORD PTR [r8+128] - mov QWORD PTR [r13+120], rax - adc r9, QWORD PTR [r14+128] - mov r10, QWORD PTR [r8+136] - mov QWORD PTR [r13+128], r9 - adc r10, QWORD PTR [r14+136] - mov rax, QWORD PTR [r8+144] - mov QWORD PTR [r13+136], r10 - adc rax, QWORD PTR [r14+144] - mov r9, QWORD PTR [r8+152] - mov QWORD PTR [r13+144], rax - adc r9, QWORD PTR [r14+152] - mov r10, QWORD PTR [r8+160] - mov QWORD PTR [r13+152], r9 - adc r10, QWORD PTR [r14+160] - mov rax, QWORD PTR [r8+168] - mov QWORD PTR [r13+160], r10 - adc rax, QWORD PTR [r14+168] - mov r9, QWORD PTR [r8+176] - mov QWORD PTR [r13+168], rax - adc r9, QWORD PTR [r14+176] - mov r10, QWORD PTR [r8+184] - mov QWORD PTR [r13+176], r9 - adc r10, QWORD PTR [r14+184] - mov QWORD PTR [r13+184], r10 - adc rdi, 0 - mov QWORD PTR [rsp+1184], rdi - mov r8, r13 - mov rdx, r12 - mov rcx, rsp - call sp_3072_mul_avx2_24 - mov r8, QWORD PTR [rsp+1168] - mov rdx, QWORD PTR [rsp+1160] - lea rcx, QWORD PTR [rsp+384] - add r8, 192 - add rdx, 192 - call sp_3072_mul_avx2_24 - mov r8, QWORD PTR [rsp+1168] - mov rdx, QWORD PTR [rsp+1160] - mov rcx, QWORD PTR [rsp+1152] - call sp_3072_mul_avx2_24 -IFDEF _WIN64 - mov r8, QWORD PTR [rsp+1168] - mov rdx, QWORD PTR [rsp+1160] - mov rcx, QWORD PTR [rsp+1152] -ENDIF - mov r15, QWORD PTR [rsp+1176] - mov rdi, QWORD PTR [rsp+1184] - mov rsi, QWORD PTR [rsp+1152] - mov r11, r15 - lea r12, QWORD PTR [rsp+768] - lea r13, QWORD PTR [rsp+960] - and r11, rdi - neg r15 - neg rdi - add rsi, 384 - mov rax, QWORD PTR [r12] - mov r9, QWORD PTR [r13] - pext rax, rax, rdi - pext r9, r9, r15 - add rax, r9 - mov r9, QWORD PTR [r12+8] - mov r10, QWORD PTR [r13+8] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi], rax - adc r9, r10 - mov r10, QWORD PTR [r12+16] - mov rax, QWORD PTR [r13+16] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+8], r9 - adc r10, rax - mov rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [r13+24] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+16], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+32] - mov r10, QWORD PTR [r13+32] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+24], rax - adc r9, r10 - mov r10, QWORD PTR [r12+40] - mov rax, QWORD PTR [r13+40] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+32], r9 - adc r10, rax - mov rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [r13+48] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+40], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+56] - mov r10, QWORD PTR [r13+56] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+48], rax - adc r9, r10 - mov r10, QWORD PTR [r12+64] - mov rax, QWORD PTR [r13+64] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+56], r9 - adc r10, rax - mov rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [r13+72] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+64], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+80] - mov r10, QWORD PTR [r13+80] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+72], rax - adc r9, r10 - mov r10, QWORD PTR [r12+88] - mov rax, QWORD PTR [r13+88] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+80], r9 - adc r10, rax - mov rax, QWORD PTR [r12+96] - mov r9, QWORD PTR [r13+96] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+88], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+104] - mov r10, QWORD PTR [r13+104] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+96], rax - adc r9, r10 - mov r10, QWORD PTR [r12+112] - mov rax, QWORD PTR [r13+112] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+104], r9 - adc r10, rax - mov rax, QWORD PTR [r12+120] - mov r9, QWORD PTR [r13+120] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+112], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+128] - mov r10, QWORD PTR [r13+128] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+120], rax - adc r9, r10 - mov r10, QWORD PTR [r12+136] - mov rax, QWORD PTR [r13+136] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+128], r9 - adc r10, rax - mov rax, QWORD PTR [r12+144] - mov r9, QWORD PTR [r13+144] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+136], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+152] - mov r10, QWORD PTR [r13+152] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+144], rax - adc r9, r10 - mov r10, QWORD PTR [r12+160] - mov rax, QWORD PTR [r13+160] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+152], r9 - adc r10, rax - mov rax, QWORD PTR [r12+168] - mov r9, QWORD PTR [r13+168] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+160], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+176] - mov r10, QWORD PTR [r13+176] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+168], rax - adc r9, r10 - mov r10, QWORD PTR [r12+184] - mov rax, QWORD PTR [r13+184] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+176], r9 - adc r10, rax - mov QWORD PTR [rsi+184], r10 - adc r11, 0 - lea r13, QWORD PTR [rsp+384] - mov r12, rsp - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [r13] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [r13+184] - mov rax, QWORD PTR [r12+192] - mov QWORD PTR [r12+184], r10 - sbb rax, QWORD PTR [r13+192] - mov r9, QWORD PTR [r12+200] - mov QWORD PTR [r12+192], rax - sbb r9, QWORD PTR [r13+200] - mov r10, QWORD PTR [r12+208] - mov QWORD PTR [r12+200], r9 - sbb r10, QWORD PTR [r13+208] - mov rax, QWORD PTR [r12+216] - mov QWORD PTR [r12+208], r10 - sbb rax, QWORD PTR [r13+216] - mov r9, QWORD PTR [r12+224] - mov QWORD PTR [r12+216], rax - sbb r9, QWORD PTR [r13+224] - mov r10, QWORD PTR [r12+232] - mov QWORD PTR [r12+224], r9 - sbb r10, QWORD PTR [r13+232] - mov rax, QWORD PTR [r12+240] - mov QWORD PTR [r12+232], r10 - sbb rax, QWORD PTR [r13+240] - mov r9, QWORD PTR [r12+248] - mov QWORD PTR [r12+240], rax - sbb r9, QWORD PTR [r13+248] - mov r10, QWORD PTR [r12+256] - mov QWORD PTR [r12+248], r9 - sbb r10, QWORD PTR [r13+256] - mov rax, QWORD PTR [r12+264] - mov QWORD PTR [r12+256], r10 - sbb rax, QWORD PTR [r13+264] - mov r9, QWORD PTR [r12+272] - mov QWORD PTR [r12+264], rax - sbb r9, QWORD PTR [r13+272] - mov r10, QWORD PTR [r12+280] - mov QWORD PTR [r12+272], r9 - sbb r10, QWORD PTR [r13+280] - mov rax, QWORD PTR [r12+288] - mov QWORD PTR [r12+280], r10 - sbb rax, QWORD PTR [r13+288] - mov r9, QWORD PTR [r12+296] - mov QWORD PTR [r12+288], rax - sbb r9, QWORD PTR [r13+296] - mov r10, QWORD PTR [r12+304] - mov QWORD PTR [r12+296], r9 - sbb r10, QWORD PTR [r13+304] - mov rax, QWORD PTR [r12+312] - mov QWORD PTR [r12+304], r10 - sbb rax, QWORD PTR [r13+312] - mov r9, QWORD PTR [r12+320] - mov QWORD PTR [r12+312], rax - sbb r9, QWORD PTR [r13+320] - mov r10, QWORD PTR [r12+328] - mov QWORD PTR [r12+320], r9 - sbb r10, QWORD PTR [r13+328] - mov rax, QWORD PTR [r12+336] - mov QWORD PTR [r12+328], r10 - sbb rax, QWORD PTR [r13+336] - mov r9, QWORD PTR [r12+344] - mov QWORD PTR [r12+336], rax - sbb r9, QWORD PTR [r13+344] - mov r10, QWORD PTR [r12+352] - mov QWORD PTR [r12+344], r9 - sbb r10, QWORD PTR [r13+352] - mov rax, QWORD PTR [r12+360] - mov QWORD PTR [r12+352], r10 - sbb rax, QWORD PTR [r13+360] - mov r9, QWORD PTR [r12+368] - mov QWORD PTR [r12+360], rax - sbb r9, QWORD PTR [r13+368] - mov r10, QWORD PTR [r12+376] - mov QWORD PTR [r12+368], r9 - sbb r10, QWORD PTR [r13+376] - mov QWORD PTR [r12+376], r10 - sbb r11, 0 - mov rax, QWORD PTR [r12] - sub rax, QWORD PTR [rcx] - mov r9, QWORD PTR [r12+8] - mov QWORD PTR [r12], rax - sbb r9, QWORD PTR [rcx+8] - mov r10, QWORD PTR [r12+16] - mov QWORD PTR [r12+8], r9 - sbb r10, QWORD PTR [rcx+16] - mov rax, QWORD PTR [r12+24] - mov QWORD PTR [r12+16], r10 - sbb rax, QWORD PTR [rcx+24] - mov r9, QWORD PTR [r12+32] - mov QWORD PTR [r12+24], rax - sbb r9, QWORD PTR [rcx+32] - mov r10, QWORD PTR [r12+40] - mov QWORD PTR [r12+32], r9 - sbb r10, QWORD PTR [rcx+40] - mov rax, QWORD PTR [r12+48] - mov QWORD PTR [r12+40], r10 - sbb rax, QWORD PTR [rcx+48] - mov r9, QWORD PTR [r12+56] - mov QWORD PTR [r12+48], rax - sbb r9, QWORD PTR [rcx+56] - mov r10, QWORD PTR [r12+64] - mov QWORD PTR [r12+56], r9 - sbb r10, QWORD PTR [rcx+64] - mov rax, QWORD PTR [r12+72] - mov QWORD PTR [r12+64], r10 - sbb rax, QWORD PTR [rcx+72] - mov r9, QWORD PTR [r12+80] - mov QWORD PTR [r12+72], rax - sbb r9, QWORD PTR [rcx+80] - mov r10, QWORD PTR [r12+88] - mov QWORD PTR [r12+80], r9 - sbb r10, QWORD PTR [rcx+88] - mov rax, QWORD PTR [r12+96] - mov QWORD PTR [r12+88], r10 - sbb rax, QWORD PTR [rcx+96] - mov r9, QWORD PTR [r12+104] - mov QWORD PTR [r12+96], rax - sbb r9, QWORD PTR [rcx+104] - mov r10, QWORD PTR [r12+112] - mov QWORD PTR [r12+104], r9 - sbb r10, QWORD PTR [rcx+112] - mov rax, QWORD PTR [r12+120] - mov QWORD PTR [r12+112], r10 - sbb rax, QWORD PTR [rcx+120] - mov r9, QWORD PTR [r12+128] - mov QWORD PTR [r12+120], rax - sbb r9, QWORD PTR [rcx+128] - mov r10, QWORD PTR [r12+136] - mov QWORD PTR [r12+128], r9 - sbb r10, QWORD PTR [rcx+136] - mov rax, QWORD PTR [r12+144] - mov QWORD PTR [r12+136], r10 - sbb rax, QWORD PTR [rcx+144] - mov r9, QWORD PTR [r12+152] - mov QWORD PTR [r12+144], rax - sbb r9, QWORD PTR [rcx+152] - mov r10, QWORD PTR [r12+160] - mov QWORD PTR [r12+152], r9 - sbb r10, QWORD PTR [rcx+160] - mov rax, QWORD PTR [r12+168] - mov QWORD PTR [r12+160], r10 - sbb rax, QWORD PTR [rcx+168] - mov r9, QWORD PTR [r12+176] - mov QWORD PTR [r12+168], rax - sbb r9, QWORD PTR [rcx+176] - mov r10, QWORD PTR [r12+184] - mov QWORD PTR [r12+176], r9 - sbb r10, QWORD PTR [rcx+184] - mov rax, QWORD PTR [r12+192] - mov QWORD PTR [r12+184], r10 - sbb rax, QWORD PTR [rcx+192] - mov r9, QWORD PTR [r12+200] - mov QWORD PTR [r12+192], rax - sbb r9, QWORD PTR [rcx+200] - mov r10, QWORD PTR [r12+208] - mov QWORD PTR [r12+200], r9 - sbb r10, QWORD PTR [rcx+208] - mov rax, QWORD PTR [r12+216] - mov QWORD PTR [r12+208], r10 - sbb rax, QWORD PTR [rcx+216] - mov r9, QWORD PTR [r12+224] - mov QWORD PTR [r12+216], rax - sbb r9, QWORD PTR [rcx+224] - mov r10, QWORD PTR [r12+232] - mov QWORD PTR [r12+224], r9 - sbb r10, QWORD PTR [rcx+232] - mov rax, QWORD PTR [r12+240] - mov QWORD PTR [r12+232], r10 - sbb rax, QWORD PTR [rcx+240] - mov r9, QWORD PTR [r12+248] - mov QWORD PTR [r12+240], rax - sbb r9, QWORD PTR [rcx+248] - mov r10, QWORD PTR [r12+256] - mov QWORD PTR [r12+248], r9 - sbb r10, QWORD PTR [rcx+256] - mov rax, QWORD PTR [r12+264] - mov QWORD PTR [r12+256], r10 - sbb rax, QWORD PTR [rcx+264] - mov r9, QWORD PTR [r12+272] - mov QWORD PTR [r12+264], rax - sbb r9, QWORD PTR [rcx+272] - mov r10, QWORD PTR [r12+280] - mov QWORD PTR [r12+272], r9 - sbb r10, QWORD PTR [rcx+280] - mov rax, QWORD PTR [r12+288] - mov QWORD PTR [r12+280], r10 - sbb rax, QWORD PTR [rcx+288] - mov r9, QWORD PTR [r12+296] - mov QWORD PTR [r12+288], rax - sbb r9, QWORD PTR [rcx+296] - mov r10, QWORD PTR [r12+304] - mov QWORD PTR [r12+296], r9 - sbb r10, QWORD PTR [rcx+304] - mov rax, QWORD PTR [r12+312] - mov QWORD PTR [r12+304], r10 - sbb rax, QWORD PTR [rcx+312] - mov r9, QWORD PTR [r12+320] - mov QWORD PTR [r12+312], rax - sbb r9, QWORD PTR [rcx+320] - mov r10, QWORD PTR [r12+328] - mov QWORD PTR [r12+320], r9 - sbb r10, QWORD PTR [rcx+328] - mov rax, QWORD PTR [r12+336] - mov QWORD PTR [r12+328], r10 - sbb rax, QWORD PTR [rcx+336] - mov r9, QWORD PTR [r12+344] - mov QWORD PTR [r12+336], rax - sbb r9, QWORD PTR [rcx+344] - mov r10, QWORD PTR [r12+352] - mov QWORD PTR [r12+344], r9 - sbb r10, QWORD PTR [rcx+352] - mov rax, QWORD PTR [r12+360] - mov QWORD PTR [r12+352], r10 - sbb rax, QWORD PTR [rcx+360] - mov r9, QWORD PTR [r12+368] - mov QWORD PTR [r12+360], rax - sbb r9, QWORD PTR [rcx+368] - mov r10, QWORD PTR [r12+376] - mov QWORD PTR [r12+368], r9 - sbb r10, QWORD PTR [rcx+376] - mov QWORD PTR [r12+376], r10 - sbb r11, 0 - sub rsi, 192 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r12] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r12+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r12+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r12+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r12+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r12+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r12+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r12+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r12+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r12+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r12+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r12+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r12+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r12+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r12+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r12+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r12+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r12+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r12+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r12+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r12+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r12+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r12+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r12+184] - mov rax, QWORD PTR [rsi+192] - mov QWORD PTR [rsi+184], r10 - adc rax, QWORD PTR [r12+192] - mov r9, QWORD PTR [rsi+200] - mov QWORD PTR [rsi+192], rax - adc r9, QWORD PTR [r12+200] - mov r10, QWORD PTR [rsi+208] - mov QWORD PTR [rsi+200], r9 - adc r10, QWORD PTR [r12+208] - mov rax, QWORD PTR [rsi+216] - mov QWORD PTR [rsi+208], r10 - adc rax, QWORD PTR [r12+216] - mov r9, QWORD PTR [rsi+224] - mov QWORD PTR [rsi+216], rax - adc r9, QWORD PTR [r12+224] - mov r10, QWORD PTR [rsi+232] - mov QWORD PTR [rsi+224], r9 - adc r10, QWORD PTR [r12+232] - mov rax, QWORD PTR [rsi+240] - mov QWORD PTR [rsi+232], r10 - adc rax, QWORD PTR [r12+240] - mov r9, QWORD PTR [rsi+248] - mov QWORD PTR [rsi+240], rax - adc r9, QWORD PTR [r12+248] - mov r10, QWORD PTR [rsi+256] - mov QWORD PTR [rsi+248], r9 - adc r10, QWORD PTR [r12+256] - mov rax, QWORD PTR [rsi+264] - mov QWORD PTR [rsi+256], r10 - adc rax, QWORD PTR [r12+264] - mov r9, QWORD PTR [rsi+272] - mov QWORD PTR [rsi+264], rax - adc r9, QWORD PTR [r12+272] - mov r10, QWORD PTR [rsi+280] - mov QWORD PTR [rsi+272], r9 - adc r10, QWORD PTR [r12+280] - mov rax, QWORD PTR [rsi+288] - mov QWORD PTR [rsi+280], r10 - adc rax, QWORD PTR [r12+288] - mov r9, QWORD PTR [rsi+296] - mov QWORD PTR [rsi+288], rax - adc r9, QWORD PTR [r12+296] - mov r10, QWORD PTR [rsi+304] - mov QWORD PTR [rsi+296], r9 - adc r10, QWORD PTR [r12+304] - mov rax, QWORD PTR [rsi+312] - mov QWORD PTR [rsi+304], r10 - adc rax, QWORD PTR [r12+312] - mov r9, QWORD PTR [rsi+320] - mov QWORD PTR [rsi+312], rax - adc r9, QWORD PTR [r12+320] - mov r10, QWORD PTR [rsi+328] - mov QWORD PTR [rsi+320], r9 - adc r10, QWORD PTR [r12+328] - mov rax, QWORD PTR [rsi+336] - mov QWORD PTR [rsi+328], r10 - adc rax, QWORD PTR [r12+336] - mov r9, QWORD PTR [rsi+344] - mov QWORD PTR [rsi+336], rax - adc r9, QWORD PTR [r12+344] - mov r10, QWORD PTR [rsi+352] - mov QWORD PTR [rsi+344], r9 - adc r10, QWORD PTR [r12+352] - mov rax, QWORD PTR [rsi+360] - mov QWORD PTR [rsi+352], r10 - adc rax, QWORD PTR [r12+360] - mov r9, QWORD PTR [rsi+368] - mov QWORD PTR [rsi+360], rax - adc r9, QWORD PTR [r12+368] - mov r10, QWORD PTR [rsi+376] - mov QWORD PTR [rsi+368], r9 - adc r10, QWORD PTR [r12+376] - mov QWORD PTR [rsi+376], r10 - adc r11, 0 - mov QWORD PTR [rcx+576], r11 - add rsi, 192 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r13+184] - mov rax, QWORD PTR [rsi+192] - mov QWORD PTR [rsi+184], r10 - adc rax, QWORD PTR [r13+192] - mov QWORD PTR [rsi+192], rax - ; Add to zero - mov rax, QWORD PTR [r13+200] - adc rax, 0 - mov r9, QWORD PTR [r13+208] - mov QWORD PTR [rsi+200], rax - adc r9, 0 - mov r10, QWORD PTR [r13+216] - mov QWORD PTR [rsi+208], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+224] - mov QWORD PTR [rsi+216], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+232] - mov QWORD PTR [rsi+224], rax - adc r9, 0 - mov r10, QWORD PTR [r13+240] - mov QWORD PTR [rsi+232], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+248] - mov QWORD PTR [rsi+240], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+256] - mov QWORD PTR [rsi+248], rax - adc r9, 0 - mov r10, QWORD PTR [r13+264] - mov QWORD PTR [rsi+256], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+272] - mov QWORD PTR [rsi+264], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+280] - mov QWORD PTR [rsi+272], rax - adc r9, 0 - mov r10, QWORD PTR [r13+288] - mov QWORD PTR [rsi+280], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+296] - mov QWORD PTR [rsi+288], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+304] - mov QWORD PTR [rsi+296], rax - adc r9, 0 - mov r10, QWORD PTR [r13+312] - mov QWORD PTR [rsi+304], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+320] - mov QWORD PTR [rsi+312], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+328] - mov QWORD PTR [rsi+320], rax - adc r9, 0 - mov r10, QWORD PTR [r13+336] - mov QWORD PTR [rsi+328], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+344] - mov QWORD PTR [rsi+336], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+352] - mov QWORD PTR [rsi+344], rax - adc r9, 0 - mov r10, QWORD PTR [r13+360] - mov QWORD PTR [rsi+352], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+368] - mov QWORD PTR [rsi+360], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+376] - mov QWORD PTR [rsi+368], rax - adc r9, 0 - mov QWORD PTR [rsi+376], r9 - add rsp, 1192 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mul_avx2_48 ENDP -_TEXT ENDS -ENDIF -; /* Square a and put result in r. (r = a * a) -; * -; * r A single precision integer. -; * a A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sqr_12 PROC - push r12 - push r13 - push r14 - mov r8, rdx - sub rsp, 96 - ; A[0] * A[0] - mov rax, QWORD PTR [r8] - mul rax - xor r11, r11 - mov QWORD PTR [rsp], rax - mov r10, rdx - ; A[0] * A[1] - mov rax, QWORD PTR [r8+8] - mul QWORD PTR [r8] - xor r9, r9 - add r10, rax - adc r11, rdx - adc r9, 0 - add r10, rax - adc r11, rdx - adc r9, 0 - mov QWORD PTR [rsp+8], r10 - ; A[0] * A[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r8] - xor r10, r10 - add r11, rax - adc r9, rdx - adc r10, 0 - add r11, rax - adc r9, rdx - adc r10, 0 - ; A[1] * A[1] - mov rax, QWORD PTR [r8+8] - mul rax - add r11, rax - adc r9, rdx - adc r10, 0 - mov QWORD PTR [rsp+16], r11 - ; A[0] * A[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r8] - xor r11, r11 - add r9, rax - adc r10, rdx - adc r11, 0 - add r9, rax - adc r10, rdx - adc r11, 0 - ; A[1] * A[2] - mov rax, QWORD PTR [r8+16] - mul QWORD PTR [r8+8] - add r9, rax - adc r10, rdx - adc r11, 0 - add r9, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rsp+24], r9 - ; A[0] * A[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r8] - xor r9, r9 - add r10, rax - adc r11, rdx - adc r9, 0 - add r10, rax - adc r11, rdx - adc r9, 0 - ; A[1] * A[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r8+8] - add r10, rax - adc r11, rdx - adc r9, 0 - add r10, rax - adc r11, rdx - adc r9, 0 - ; A[2] * A[2] - mov rax, QWORD PTR [r8+16] - mul rax - add r10, rax - adc r11, rdx - adc r9, 0 - mov QWORD PTR [rsp+32], r10 - ; A[0] * A[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r8] - xor r10, r10 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[3] - mov rax, QWORD PTR [r8+24] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r11, r12 - adc r9, r13 - adc r10, r14 - mov QWORD PTR [rsp+40], r11 - ; A[0] * A[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r8] - xor r11, r11 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[3] - mov rax, QWORD PTR [r8+24] - mul rax - add r12, r12 - adc r13, r13 - adc r14, r14 - add r12, rax - adc r13, rdx - adc r14, 0 - add r9, r12 - adc r10, r13 - adc r11, r14 - mov QWORD PTR [rsp+48], r9 - ; A[0] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8] - xor r9, r9 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[4] - mov rax, QWORD PTR [r8+32] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r10, r12 - adc r11, r13 - adc r9, r14 - mov QWORD PTR [rsp+56], r10 - ; A[0] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8] - xor r10, r10 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[4] * A[4] - mov rax, QWORD PTR [r8+32] - mul rax - add r12, r12 - adc r13, r13 - adc r14, r14 - add r12, rax - adc r13, rdx - adc r14, 0 - add r11, r12 - adc r9, r13 - adc r10, r14 - mov QWORD PTR [rsp+64], r11 - ; A[0] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8] - xor r11, r11 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[4] * A[5] - mov rax, QWORD PTR [r8+40] - mul QWORD PTR [r8+32] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r9, r12 - adc r10, r13 - adc r11, r14 - mov QWORD PTR [rsp+72], r9 - ; A[0] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8] - xor r9, r9 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[4] * A[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r8+32] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[5] * A[5] - mov rax, QWORD PTR [r8+40] - mul rax - add r12, r12 - adc r13, r13 - adc r14, r14 - add r12, rax - adc r13, rdx - adc r14, 0 - add r10, r12 - adc r11, r13 - adc r9, r14 - mov QWORD PTR [rsp+80], r10 - ; A[0] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8] - xor r10, r10 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[1] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+8] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[2] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[4] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8+32] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[5] * A[6] - mov rax, QWORD PTR [r8+48] - mul QWORD PTR [r8+40] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r11, r12 - adc r9, r13 - adc r10, r14 - mov QWORD PTR [rsp+88], r11 - ; A[1] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+8] - xor r11, r11 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[2] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+16] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[3] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[4] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+32] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[5] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8+40] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[6] * A[6] - mov rax, QWORD PTR [r8+48] - mul rax - add r12, r12 - adc r13, r13 - adc r14, r14 - add r12, rax - adc r13, rdx - adc r14, 0 - add r9, r12 - adc r10, r13 - adc r11, r14 - mov QWORD PTR [rcx+96], r9 - ; A[2] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+16] - xor r9, r9 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[3] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+24] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[4] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+32] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[5] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+40] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[6] * A[7] - mov rax, QWORD PTR [r8+56] - mul QWORD PTR [r8+48] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r10, r12 - adc r11, r13 - adc r9, r14 - mov QWORD PTR [rcx+104], r10 - ; A[3] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+24] - xor r10, r10 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[4] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+32] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[5] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+40] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[6] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+48] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[7] * A[7] - mov rax, QWORD PTR [r8+56] - mul rax - add r12, r12 - adc r13, r13 - adc r14, r14 - add r12, rax - adc r13, rdx - adc r14, 0 - add r11, r12 - adc r9, r13 - adc r10, r14 - mov QWORD PTR [rcx+112], r11 - ; A[4] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+32] - xor r11, r11 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[5] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+40] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[6] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+48] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[7] * A[8] - mov rax, QWORD PTR [r8+64] - mul QWORD PTR [r8+56] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r9, r12 - adc r10, r13 - adc r11, r14 - mov QWORD PTR [rcx+120], r9 - ; A[5] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+40] - xor r9, r9 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[6] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+48] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[7] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+56] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[8] * A[8] - mov rax, QWORD PTR [r8+64] - mul rax - add r12, r12 - adc r13, r13 - adc r14, r14 - add r12, rax - adc r13, rdx - adc r14, 0 - add r10, r12 - adc r11, r13 - adc r9, r14 - mov QWORD PTR [rcx+128], r10 - ; A[6] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+48] - xor r10, r10 - xor r14, r14 - mov r12, rax - mov r13, rdx - ; A[7] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+56] - add r12, rax - adc r13, rdx - adc r14, 0 - ; A[8] * A[9] - mov rax, QWORD PTR [r8+72] - mul QWORD PTR [r8+64] - add r12, rax - adc r13, rdx - adc r14, 0 - add r12, r12 - adc r13, r13 - adc r14, r14 - add r11, r12 - adc r9, r13 - adc r10, r14 - mov QWORD PTR [rcx+136], r11 - ; A[7] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+56] - xor r11, r11 - add r9, rax - adc r10, rdx - adc r11, 0 - add r9, rax - adc r10, rdx - adc r11, 0 - ; A[8] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+64] - add r9, rax - adc r10, rdx - adc r11, 0 - add r9, rax - adc r10, rdx - adc r11, 0 - ; A[9] * A[9] - mov rax, QWORD PTR [r8+72] - mul rax - add r9, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rcx+144], r9 - ; A[8] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+64] - xor r9, r9 - add r10, rax - adc r11, rdx - adc r9, 0 - add r10, rax - adc r11, rdx - adc r9, 0 - ; A[9] * A[10] - mov rax, QWORD PTR [r8+80] - mul QWORD PTR [r8+72] - add r10, rax - adc r11, rdx - adc r9, 0 - add r10, rax - adc r11, rdx - adc r9, 0 - mov QWORD PTR [rcx+152], r10 - ; A[9] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+72] - xor r10, r10 - add r11, rax - adc r9, rdx - adc r10, 0 - add r11, rax - adc r9, rdx - adc r10, 0 - ; A[10] * A[10] - mov rax, QWORD PTR [r8+80] - mul rax - add r11, rax - adc r9, rdx - adc r10, 0 - mov QWORD PTR [rcx+160], r11 - ; A[10] * A[11] - mov rax, QWORD PTR [r8+88] - mul QWORD PTR [r8+80] - xor r11, r11 - add r9, rax - adc r10, rdx - adc r11, 0 - add r9, rax - adc r10, rdx - adc r11, 0 - mov QWORD PTR [rcx+168], r9 - ; A[11] * A[11] - mov rax, QWORD PTR [r8+88] - mul rax - add r10, rax - adc r11, rdx - mov QWORD PTR [rcx+176], r10 - mov QWORD PTR [rcx+184], r11 - mov rax, QWORD PTR [rsp] - mov rdx, QWORD PTR [rsp+8] - mov r12, QWORD PTR [rsp+16] - mov r13, QWORD PTR [rsp+24] - mov QWORD PTR [rcx], rax - mov QWORD PTR [rcx+8], rdx - mov QWORD PTR [rcx+16], r12 - mov QWORD PTR [rcx+24], r13 - mov rax, QWORD PTR [rsp+32] - mov rdx, QWORD PTR [rsp+40] - mov r12, QWORD PTR [rsp+48] - mov r13, QWORD PTR [rsp+56] - mov QWORD PTR [rcx+32], rax - mov QWORD PTR [rcx+40], rdx - mov QWORD PTR [rcx+48], r12 - mov QWORD PTR [rcx+56], r13 - mov rax, QWORD PTR [rsp+64] - mov rdx, QWORD PTR [rsp+72] - mov r12, QWORD PTR [rsp+80] - mov r13, QWORD PTR [rsp+88] - mov QWORD PTR [rcx+64], rax - mov QWORD PTR [rcx+72], rdx - mov QWORD PTR [rcx+80], r12 - mov QWORD PTR [rcx+88], r13 - add rsp, 96 - pop r14 - pop r13 - pop r12 - ret -sp_3072_sqr_12 ENDP -_TEXT ENDS -IFDEF HAVE_INTEL_AVX2 -; /* Square a and put result in r. (r = a * a) -; * -; * r A single precision integer. -; * a A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sqr_avx2_12 PROC - push rbp - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - push rbx - mov r8, rcx - mov r9, rdx - sub rsp, 96 - cmp r9, r8 - mov rbp, rsp - cmovne rbp, r8 - add r8, 96 - xor r12, r12 - ; Diagonal 1 - ; Zero into %r9 - ; A[1] x A[0] - mov rdx, QWORD PTR [r9] - mulx r11, r10, QWORD PTR [r9+8] - mov QWORD PTR [rbp+8], r10 - ; Zero into %r8 - ; A[2] x A[0] - mulx r10, rax, QWORD PTR [r9+16] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [rbp+16], r11 - ; Zero into %r9 - ; A[3] x A[0] - mulx r11, rax, QWORD PTR [r9+24] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [rbp+24], r10 - ; Zero into %r8 - ; A[4] x A[0] - mulx r10, rax, QWORD PTR [r9+32] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [rbp+32], r11 - ; Zero into %r9 - ; A[5] x A[0] - mulx r11, rax, QWORD PTR [r9+40] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [rbp+40], r10 - ; No load %r12 - %r8 - ; A[6] x A[0] - mulx r14, rax, QWORD PTR [r9+48] - adcx r11, rax - adox r14, r12 - mov QWORD PTR [rbp+48], r11 - ; No load %r13 - %r9 - ; A[7] x A[0] - mulx r15, rax, QWORD PTR [r9+56] - adcx r14, rax - adox r15, r12 - ; No store %r12 - %r8 - ; No load %r14 - %r8 - ; A[8] x A[0] - mulx rdi, rax, QWORD PTR [r9+64] - adcx r15, rax - adox rdi, r12 - ; No store %r13 - %r9 - ; No load %r15 - %r9 - ; A[9] x A[0] - mulx rsi, rax, QWORD PTR [r9+72] - adcx rdi, rax - adox rsi, r12 - ; No store %r14 - %r8 - ; No load %rbx - %r8 - ; A[10] x A[0] - mulx rbx, rax, QWORD PTR [r9+80] - adcx rsi, rax - adox rbx, r12 - ; No store %r15 - %r9 - ; Zero into %r9 - ; A[11] x A[0] - mulx r11, rax, QWORD PTR [r9+88] - adcx rbx, rax - adox r11, r12 - ; No store %rbx - %r8 - ; Carry - adcx r11, r12 - mov r13, r12 - adcx r13, r12 - adox r13, r12 - mov QWORD PTR [r8], r11 - ; Diagonal 2 - mov r11, QWORD PTR [rbp+24] - mov r10, QWORD PTR [rbp+32] - ; A[2] x A[1] - mov rdx, QWORD PTR [r9+8] - mulx rcx, rax, QWORD PTR [r9+16] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [rbp+24], r11 - mov r11, QWORD PTR [rbp+40] - ; A[3] x A[1] - mulx rcx, rax, QWORD PTR [r9+24] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbp+32], r10 - mov r10, QWORD PTR [rbp+48] - ; A[4] x A[1] - mulx rcx, rax, QWORD PTR [r9+32] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [rbp+40], r11 - ; No load %r12 - %r9 - ; A[5] x A[1] - mulx rcx, rax, QWORD PTR [r9+40] - adcx r10, rax - adox r14, rcx - mov QWORD PTR [rbp+48], r10 - ; No load %r13 - %r8 - ; A[6] x A[1] - mulx rcx, rax, QWORD PTR [r9+48] - adcx r14, rax - adox r15, rcx - ; No store %r12 - %r9 - ; No load %r14 - %r9 - ; A[7] x A[1] - mulx rcx, rax, QWORD PTR [r9+56] - adcx r15, rax - adox rdi, rcx - ; No store %r13 - %r8 - ; No load %r15 - %r8 - ; A[8] x A[1] - mulx rcx, rax, QWORD PTR [r9+64] - adcx rdi, rax - adox rsi, rcx - ; No store %r14 - %r9 - ; No load %rbx - %r9 - ; A[9] x A[1] - mulx rcx, rax, QWORD PTR [r9+72] - adcx rsi, rax - adox rbx, rcx - ; No store %r15 - %r8 - mov r10, QWORD PTR [r8] - ; A[10] x A[1] - mulx rcx, rax, QWORD PTR [r9+80] - adcx rbx, rax - adox r10, rcx - ; No store %rbx - %r9 - ; Zero into %r9 - ; A[11] x A[1] - mulx r11, rax, QWORD PTR [r9+88] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [r8], r10 - ; Zero into %r8 - ; A[11] x A[2] - mov rdx, QWORD PTR [r9+16] - mulx r10, rax, QWORD PTR [r9+88] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [r8+8], r11 - ; Carry - adcx r10, r13 - mov r13, r12 - adcx r13, r12 - adox r13, r12 - mov QWORD PTR [r8+16], r10 - ; Diagonal 3 - mov r10, QWORD PTR [rbp+40] - mov r11, QWORD PTR [rbp+48] - ; A[3] x A[2] - mulx rcx, rax, QWORD PTR [r9+24] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [rbp+40], r10 - ; No load %r12 - %r8 - ; A[4] x A[2] - mulx rcx, rax, QWORD PTR [r9+32] - adcx r11, rax - adox r14, rcx - mov QWORD PTR [rbp+48], r11 - ; No load %r13 - %r9 - ; A[5] x A[2] - mulx rcx, rax, QWORD PTR [r9+40] - adcx r14, rax - adox r15, rcx - ; No store %r12 - %r8 - ; No load %r14 - %r8 - ; A[6] x A[2] - mulx rcx, rax, QWORD PTR [r9+48] - adcx r15, rax - adox rdi, rcx - ; No store %r13 - %r9 - ; No load %r15 - %r9 - ; A[7] x A[2] - mulx rcx, rax, QWORD PTR [r9+56] - adcx rdi, rax - adox rsi, rcx - ; No store %r14 - %r8 - ; No load %rbx - %r8 - ; A[8] x A[2] - mulx rcx, rax, QWORD PTR [r9+64] - adcx rsi, rax - adox rbx, rcx - ; No store %r15 - %r9 - mov r11, QWORD PTR [r8] - ; A[9] x A[2] - mulx rcx, rax, QWORD PTR [r9+72] - adcx rbx, rax - adox r11, rcx - ; No store %rbx - %r8 - mov r10, QWORD PTR [r8+8] - ; A[10] x A[2] - mulx rcx, rax, QWORD PTR [r9+80] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8], r11 - mov r11, QWORD PTR [r8+16] - ; A[10] x A[3] - mov rdx, QWORD PTR [r9+24] - mulx rcx, rax, QWORD PTR [r9+80] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+8], r10 - ; Zero into %r8 - ; A[10] x A[4] - mov rdx, QWORD PTR [r9+32] - mulx r10, rax, QWORD PTR [r9+80] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [r8+16], r11 - ; Zero into %r9 - ; A[10] x A[5] - mov rdx, QWORD PTR [r9+40] - mulx r11, rax, QWORD PTR [r9+80] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [r8+24], r10 - ; Carry - adcx r11, r13 - mov r13, r12 - adcx r13, r12 - adox r13, r12 - mov QWORD PTR [r8+32], r11 - ; Diagonal 4 - ; No load %r13 - %r8 - ; A[4] x A[3] - mov rdx, QWORD PTR [r9+24] - mulx rcx, rax, QWORD PTR [r9+32] - adcx r14, rax - adox r15, rcx - ; No store %r12 - %r9 - ; No load %r14 - %r9 - ; A[5] x A[3] - mulx rcx, rax, QWORD PTR [r9+40] - adcx r15, rax - adox rdi, rcx - ; No store %r13 - %r8 - ; No load %r15 - %r8 - ; A[6] x A[3] - mulx rcx, rax, QWORD PTR [r9+48] - adcx rdi, rax - adox rsi, rcx - ; No store %r14 - %r9 - ; No load %rbx - %r9 - ; A[7] x A[3] - mulx rcx, rax, QWORD PTR [r9+56] - adcx rsi, rax - adox rbx, rcx - ; No store %r15 - %r8 - mov r10, QWORD PTR [r8] - ; A[8] x A[3] - mulx rcx, rax, QWORD PTR [r9+64] - adcx rbx, rax - adox r10, rcx - ; No store %rbx - %r9 - mov r11, QWORD PTR [r8+8] - ; A[9] x A[3] - mulx rcx, rax, QWORD PTR [r9+72] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r10, QWORD PTR [r8+16] - ; A[9] x A[4] - mov rdx, QWORD PTR [r9+32] - mulx rcx, rax, QWORD PTR [r9+72] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+8], r11 - mov r11, QWORD PTR [r8+24] - ; A[9] x A[5] - mov rdx, QWORD PTR [r9+40] - mulx rcx, rax, QWORD PTR [r9+72] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+16], r10 - mov r10, QWORD PTR [r8+32] - ; A[9] x A[6] - mov rdx, QWORD PTR [r9+48] - mulx rcx, rax, QWORD PTR [r9+72] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+24], r11 - ; Zero into %r9 - ; A[9] x A[7] - mov rdx, QWORD PTR [r9+56] - mulx r11, rax, QWORD PTR [r9+72] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [r8+32], r10 - ; Zero into %r8 - ; A[9] x A[8] - mov rdx, QWORD PTR [r9+64] - mulx r10, rax, QWORD PTR [r9+72] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [r8+40], r11 - ; Carry - adcx r10, r13 - mov r13, r12 - adcx r13, r12 - adox r13, r12 - mov QWORD PTR [r8+48], r10 - ; Diagonal 5 - ; No load %r15 - %r9 - ; A[5] x A[4] - mov rdx, QWORD PTR [r9+32] - mulx rcx, rax, QWORD PTR [r9+40] - adcx rdi, rax - adox rsi, rcx - ; No store %r14 - %r8 - ; No load %rbx - %r8 - ; A[6] x A[4] - mulx rcx, rax, QWORD PTR [r9+48] - adcx rsi, rax - adox rbx, rcx - ; No store %r15 - %r9 - mov r11, QWORD PTR [r8] - ; A[7] x A[4] - mulx rcx, rax, QWORD PTR [r9+56] - adcx rbx, rax - adox r11, rcx - ; No store %rbx - %r8 - mov r10, QWORD PTR [r8+8] - ; A[8] x A[4] - mulx rcx, rax, QWORD PTR [r9+64] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8], r11 - mov r11, QWORD PTR [r8+16] - ; A[8] x A[5] - mov rdx, QWORD PTR [r9+40] - mulx rcx, rax, QWORD PTR [r9+64] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+8], r10 - mov r10, QWORD PTR [r8+24] - ; A[8] x A[6] - mov rdx, QWORD PTR [r9+48] - mulx rcx, rax, QWORD PTR [r9+64] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+16], r11 - mov r11, QWORD PTR [r8+32] - ; A[8] x A[7] - mov rdx, QWORD PTR [r9+56] - mulx rcx, rax, QWORD PTR [r9+64] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+24], r10 - mov r10, QWORD PTR [r8+40] - ; A[10] x A[6] - mov rdx, QWORD PTR [r9+48] - mulx rcx, rax, QWORD PTR [r9+80] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+32], r11 - mov r11, QWORD PTR [r8+48] - ; A[10] x A[7] - mov rdx, QWORD PTR [r9+56] - mulx rcx, rax, QWORD PTR [r9+80] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+40], r10 - ; Zero into %r8 - ; A[10] x A[8] - mov rdx, QWORD PTR [r9+64] - mulx r10, rax, QWORD PTR [r9+80] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [r8+48], r11 - ; Zero into %r9 - ; A[10] x A[9] - mov rdx, QWORD PTR [r9+72] - mulx r11, rax, QWORD PTR [r9+80] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [r8+56], r10 - ; Carry - adcx r11, r13 - mov r13, r12 - adcx r13, r12 - adox r13, r12 - mov QWORD PTR [r8+64], r11 - ; Diagonal 6 - mov r10, QWORD PTR [r8] - ; A[6] x A[5] - mov rdx, QWORD PTR [r9+40] - mulx rcx, rax, QWORD PTR [r9+48] - adcx rbx, rax - adox r10, rcx - ; No store %rbx - %r9 - mov r11, QWORD PTR [r8+8] - ; A[7] x A[5] - mulx rcx, rax, QWORD PTR [r9+56] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8], r10 - mov r10, QWORD PTR [r8+16] - ; A[7] x A[6] - mov rdx, QWORD PTR [r9+48] - mulx rcx, rax, QWORD PTR [r9+56] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+8], r11 - mov r11, QWORD PTR [r8+24] - ; A[11] x A[3] - mov rdx, QWORD PTR [r9+24] - mulx rcx, rax, QWORD PTR [r9+88] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+16], r10 - mov r10, QWORD PTR [r8+32] - ; A[11] x A[4] - mov rdx, QWORD PTR [r9+32] - mulx rcx, rax, QWORD PTR [r9+88] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+24], r11 - mov r11, QWORD PTR [r8+40] - ; A[11] x A[5] - mov rdx, QWORD PTR [r9+40] - mulx rcx, rax, QWORD PTR [r9+88] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+32], r10 - mov r10, QWORD PTR [r8+48] - ; A[11] x A[6] - mov rdx, QWORD PTR [r9+48] - mulx rcx, rax, QWORD PTR [r9+88] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+40], r11 - mov r11, QWORD PTR [r8+56] - ; A[11] x A[7] - mov rdx, QWORD PTR [r9+56] - mulx rcx, rax, QWORD PTR [r9+88] - adcx r10, rax - adox r11, rcx - mov QWORD PTR [r8+48], r10 - mov r10, QWORD PTR [r8+64] - ; A[11] x A[8] - mov rdx, QWORD PTR [r9+64] - mulx rcx, rax, QWORD PTR [r9+88] - adcx r11, rax - adox r10, rcx - mov QWORD PTR [r8+56], r11 - ; Zero into %r9 - ; A[11] x A[9] - mov rdx, QWORD PTR [r9+72] - mulx r11, rax, QWORD PTR [r9+88] - adcx r10, rax - adox r11, r12 - mov QWORD PTR [r8+64], r10 - ; Zero into %r8 - ; A[11] x A[10] - mov rdx, QWORD PTR [r9+80] - mulx r10, rax, QWORD PTR [r9+88] - adcx r11, rax - adox r10, r12 - mov QWORD PTR [r8+72], r11 - ; Carry - adcx r10, r13 - mov r13, r12 - adcx r13, r12 - adox r13, r12 - mov QWORD PTR [r8+80], r10 - mov QWORD PTR [r8+88], r13 - ; Double and Add in A[i] x A[i] - mov r11, QWORD PTR [rbp+8] - ; A[0] x A[0] - mov rdx, QWORD PTR [r9] - mulx rcx, rax, rdx - mov QWORD PTR [rbp], rax - adox r11, r11 - adcx r11, rcx - mov QWORD PTR [rbp+8], r11 - mov r10, QWORD PTR [rbp+16] - mov r11, QWORD PTR [rbp+24] - ; A[1] x A[1] - mov rdx, QWORD PTR [r9+8] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [rbp+16], r10 - mov QWORD PTR [rbp+24], r11 - mov r10, QWORD PTR [rbp+32] - mov r11, QWORD PTR [rbp+40] - ; A[2] x A[2] - mov rdx, QWORD PTR [r9+16] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [rbp+32], r10 - mov QWORD PTR [rbp+40], r11 - mov r10, QWORD PTR [rbp+48] - ; A[3] x A[3] - mov rdx, QWORD PTR [r9+24] - mulx rcx, rax, rdx - adox r10, r10 - adox r14, r14 - adcx r10, rax - adcx r14, rcx - mov QWORD PTR [rbp+48], r10 - ; A[4] x A[4] - mov rdx, QWORD PTR [r9+32] - mulx rcx, rax, rdx - adox r15, r15 - adox rdi, rdi - adcx r15, rax - adcx rdi, rcx - ; A[5] x A[5] - mov rdx, QWORD PTR [r9+40] - mulx rcx, rax, rdx - adox rsi, rsi - adox rbx, rbx - adcx rsi, rax - adcx rbx, rcx - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - ; A[6] x A[6] - mov rdx, QWORD PTR [r9+48] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [r8], r10 - mov QWORD PTR [r8+8], r11 - mov r10, QWORD PTR [r8+16] - mov r11, QWORD PTR [r8+24] - ; A[7] x A[7] - mov rdx, QWORD PTR [r9+56] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [r8+16], r10 - mov QWORD PTR [r8+24], r11 - mov r10, QWORD PTR [r8+32] - mov r11, QWORD PTR [r8+40] - ; A[8] x A[8] - mov rdx, QWORD PTR [r9+64] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [r8+32], r10 - mov QWORD PTR [r8+40], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - ; A[9] x A[9] - mov rdx, QWORD PTR [r9+72] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [r8+48], r10 - mov QWORD PTR [r8+56], r11 - mov r10, QWORD PTR [r8+64] - mov r11, QWORD PTR [r8+72] - ; A[10] x A[10] - mov rdx, QWORD PTR [r9+80] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [r8+64], r10 - mov QWORD PTR [r8+72], r11 - mov r10, QWORD PTR [r8+80] - mov r11, QWORD PTR [r8+88] - ; A[11] x A[11] - mov rdx, QWORD PTR [r9+88] - mulx rcx, rax, rdx - adox r10, r10 - adox r11, r11 - adcx r10, rax - adcx r11, rcx - mov QWORD PTR [r8+80], r10 - mov QWORD PTR [r8+88], r11 - mov QWORD PTR [r8+-40], r14 - mov QWORD PTR [r8+-32], r15 - mov QWORD PTR [r8+-24], rdi - mov QWORD PTR [r8+-16], rsi - mov QWORD PTR [r8+-8], rbx - sub r8, 96 - cmp r9, r8 - jne L_end_3072_sqr_avx2_12 - vmovdqu xmm0, OWORD PTR [rbp] - vmovups OWORD PTR [r8], xmm0 - vmovdqu xmm0, OWORD PTR [rbp+16] - vmovups OWORD PTR [r8+16], xmm0 - vmovdqu xmm0, OWORD PTR [rbp+32] - vmovups OWORD PTR [r8+32], xmm0 - mov rax, QWORD PTR [rbp+48] - mov QWORD PTR [r8+48], rax -L_end_3072_sqr_avx2_12: - add rsp, 96 - pop rbx - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - pop rbp - ret -sp_3072_sqr_avx2_12 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sqr_24 PROC - sub rsp, 208 - mov QWORD PTR [rsp+192], rcx - mov QWORD PTR [rsp+200], rdx - mov r9, 0 - mov r10, rsp - lea r11, QWORD PTR [rdx+96] - mov rax, QWORD PTR [rdx] - sub rax, QWORD PTR [r11] - mov r8, QWORD PTR [rdx+8] - mov QWORD PTR [r10], rax - sbb r8, QWORD PTR [r11+8] - mov rax, QWORD PTR [rdx+16] - mov QWORD PTR [r10+8], r8 - sbb rax, QWORD PTR [r11+16] - mov r8, QWORD PTR [rdx+24] - mov QWORD PTR [r10+16], rax - sbb r8, QWORD PTR [r11+24] - mov rax, QWORD PTR [rdx+32] - mov QWORD PTR [r10+24], r8 - sbb rax, QWORD PTR [r11+32] - mov r8, QWORD PTR [rdx+40] - mov QWORD PTR [r10+32], rax - sbb r8, QWORD PTR [r11+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r10+40], r8 - sbb rax, QWORD PTR [r11+48] - mov r8, QWORD PTR [rdx+56] - mov QWORD PTR [r10+48], rax - sbb r8, QWORD PTR [r11+56] - mov rax, QWORD PTR [rdx+64] - mov QWORD PTR [r10+56], r8 - sbb rax, QWORD PTR [r11+64] - mov r8, QWORD PTR [rdx+72] - mov QWORD PTR [r10+64], rax - sbb r8, QWORD PTR [r11+72] - mov rax, QWORD PTR [rdx+80] - mov QWORD PTR [r10+72], r8 - sbb rax, QWORD PTR [r11+80] - mov r8, QWORD PTR [rdx+88] - mov QWORD PTR [r10+80], rax - sbb r8, QWORD PTR [r11+88] - mov QWORD PTR [r10+88], r8 - sbb r9, 0 - ; Cond Negate - mov rax, QWORD PTR [r10] - mov r11, r9 - xor rax, r9 - neg r11 - sub rax, r9 - mov r8, QWORD PTR [r10+8] - sbb r11, 0 - mov QWORD PTR [r10], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+16] - setc r11b - mov QWORD PTR [r10+8], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+24] - setc r11b - mov QWORD PTR [r10+16], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+32] - setc r11b - mov QWORD PTR [r10+24], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+40] - setc r11b - mov QWORD PTR [r10+32], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+48] - setc r11b - mov QWORD PTR [r10+40], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+56] - setc r11b - mov QWORD PTR [r10+48], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+64] - setc r11b - mov QWORD PTR [r10+56], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+72] - setc r11b - mov QWORD PTR [r10+64], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+80] - setc r11b - mov QWORD PTR [r10+72], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+88] - setc r11b - mov QWORD PTR [r10+80], rax - xor r8, r9 - add r8, r11 - mov QWORD PTR [r10+88], r8 - mov rdx, r10 - mov rcx, rsp - call sp_3072_sqr_12 - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] - add rdx, 96 - add rcx, 192 - call sp_3072_sqr_12 - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] - call sp_3072_sqr_12 -IFDEF _WIN64 - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] -ENDIF - mov rdx, QWORD PTR [rsp+192] - lea r10, QWORD PTR [rsp+96] - add rdx, 288 - mov r9, 0 - mov r8, QWORD PTR [r10+-96] - sub r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov QWORD PTR [r10+88], rax - sbb r9, 0 - sub rdx, 192 - mov r8, QWORD PTR [r10+-96] - sub r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov QWORD PTR [r10+88], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+192] - neg r9 - add rcx, 192 - mov r8, QWORD PTR [rcx+-96] - sub r8, QWORD PTR [r10+-96] - mov rax, QWORD PTR [rcx+-88] - mov QWORD PTR [rcx+-96], r8 - sbb rax, QWORD PTR [r10+-88] - mov r8, QWORD PTR [rcx+-80] - mov QWORD PTR [rcx+-88], rax - sbb r8, QWORD PTR [r10+-80] - mov rax, QWORD PTR [rcx+-72] - mov QWORD PTR [rcx+-80], r8 - sbb rax, QWORD PTR [r10+-72] - mov r8, QWORD PTR [rcx+-64] - mov QWORD PTR [rcx+-72], rax - sbb r8, QWORD PTR [r10+-64] - mov rax, QWORD PTR [rcx+-56] - mov QWORD PTR [rcx+-64], r8 - sbb rax, QWORD PTR [r10+-56] - mov r8, QWORD PTR [rcx+-48] - mov QWORD PTR [rcx+-56], rax - sbb r8, QWORD PTR [r10+-48] - mov rax, QWORD PTR [rcx+-40] - mov QWORD PTR [rcx+-48], r8 - sbb rax, QWORD PTR [r10+-40] - mov r8, QWORD PTR [rcx+-32] - mov QWORD PTR [rcx+-40], rax - sbb r8, QWORD PTR [r10+-32] - mov rax, QWORD PTR [rcx+-24] - mov QWORD PTR [rcx+-32], r8 - sbb rax, QWORD PTR [r10+-24] - mov r8, QWORD PTR [rcx+-16] - mov QWORD PTR [rcx+-24], rax - sbb r8, QWORD PTR [r10+-16] - mov rax, QWORD PTR [rcx+-8] - mov QWORD PTR [rcx+-16], r8 - sbb rax, QWORD PTR [r10+-8] - mov r8, QWORD PTR [rcx] - mov QWORD PTR [rcx+-8], rax - sbb r8, QWORD PTR [r10] - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - sbb rax, QWORD PTR [r10+8] - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - sbb r8, QWORD PTR [r10+16] - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - sbb rax, QWORD PTR [r10+24] - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - sbb r8, QWORD PTR [r10+32] - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - sbb rax, QWORD PTR [r10+40] - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - sbb r8, QWORD PTR [r10+48] - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - sbb rax, QWORD PTR [r10+56] - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - sbb r8, QWORD PTR [r10+64] - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - sbb rax, QWORD PTR [r10+72] - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - sbb r8, QWORD PTR [r10+80] - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - sbb rax, QWORD PTR [r10+88] - mov QWORD PTR [rcx+88], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+192] - add rcx, 288 - ; Add in word - mov r8, QWORD PTR [rcx] - add r8, r9 - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - adc rax, 0 - mov QWORD PTR [rcx+88], rax - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] - add rsp, 208 - ret -sp_3072_sqr_24 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sqr_avx2_24 PROC - sub rsp, 208 - mov QWORD PTR [rsp+192], rcx - mov QWORD PTR [rsp+200], rdx - mov r9, 0 - mov r10, rsp - lea r11, QWORD PTR [rdx+96] - mov rax, QWORD PTR [rdx] - sub rax, QWORD PTR [r11] - mov r8, QWORD PTR [rdx+8] - mov QWORD PTR [r10], rax - sbb r8, QWORD PTR [r11+8] - mov rax, QWORD PTR [rdx+16] - mov QWORD PTR [r10+8], r8 - sbb rax, QWORD PTR [r11+16] - mov r8, QWORD PTR [rdx+24] - mov QWORD PTR [r10+16], rax - sbb r8, QWORD PTR [r11+24] - mov rax, QWORD PTR [rdx+32] - mov QWORD PTR [r10+24], r8 - sbb rax, QWORD PTR [r11+32] - mov r8, QWORD PTR [rdx+40] - mov QWORD PTR [r10+32], rax - sbb r8, QWORD PTR [r11+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r10+40], r8 - sbb rax, QWORD PTR [r11+48] - mov r8, QWORD PTR [rdx+56] - mov QWORD PTR [r10+48], rax - sbb r8, QWORD PTR [r11+56] - mov rax, QWORD PTR [rdx+64] - mov QWORD PTR [r10+56], r8 - sbb rax, QWORD PTR [r11+64] - mov r8, QWORD PTR [rdx+72] - mov QWORD PTR [r10+64], rax - sbb r8, QWORD PTR [r11+72] - mov rax, QWORD PTR [rdx+80] - mov QWORD PTR [r10+72], r8 - sbb rax, QWORD PTR [r11+80] - mov r8, QWORD PTR [rdx+88] - mov QWORD PTR [r10+80], rax - sbb r8, QWORD PTR [r11+88] - mov QWORD PTR [r10+88], r8 - sbb r9, 0 - ; Cond Negate - mov rax, QWORD PTR [r10] - mov r11, r9 - xor rax, r9 - neg r11 - sub rax, r9 - mov r8, QWORD PTR [r10+8] - sbb r11, 0 - mov QWORD PTR [r10], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+16] - setc r11b - mov QWORD PTR [r10+8], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+24] - setc r11b - mov QWORD PTR [r10+16], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+32] - setc r11b - mov QWORD PTR [r10+24], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+40] - setc r11b - mov QWORD PTR [r10+32], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+48] - setc r11b - mov QWORD PTR [r10+40], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+56] - setc r11b - mov QWORD PTR [r10+48], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+64] - setc r11b - mov QWORD PTR [r10+56], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+72] - setc r11b - mov QWORD PTR [r10+64], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+80] - setc r11b - mov QWORD PTR [r10+72], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+88] - setc r11b - mov QWORD PTR [r10+80], rax - xor r8, r9 - add r8, r11 - mov QWORD PTR [r10+88], r8 - mov rdx, r10 - mov rcx, rsp - call sp_3072_sqr_avx2_12 - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] - add rdx, 96 - add rcx, 192 - call sp_3072_sqr_avx2_12 - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] - call sp_3072_sqr_avx2_12 -IFDEF _WIN64 - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] -ENDIF - mov rdx, QWORD PTR [rsp+192] - lea r10, QWORD PTR [rsp+96] - add rdx, 288 - mov r9, 0 - mov r8, QWORD PTR [r10+-96] - sub r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov QWORD PTR [r10+88], rax - sbb r9, 0 - sub rdx, 192 - mov r8, QWORD PTR [r10+-96] - sub r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov QWORD PTR [r10+88], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+192] - neg r9 - add rcx, 192 - mov r8, QWORD PTR [rcx+-96] - sub r8, QWORD PTR [r10+-96] - mov rax, QWORD PTR [rcx+-88] - mov QWORD PTR [rcx+-96], r8 - sbb rax, QWORD PTR [r10+-88] - mov r8, QWORD PTR [rcx+-80] - mov QWORD PTR [rcx+-88], rax - sbb r8, QWORD PTR [r10+-80] - mov rax, QWORD PTR [rcx+-72] - mov QWORD PTR [rcx+-80], r8 - sbb rax, QWORD PTR [r10+-72] - mov r8, QWORD PTR [rcx+-64] - mov QWORD PTR [rcx+-72], rax - sbb r8, QWORD PTR [r10+-64] - mov rax, QWORD PTR [rcx+-56] - mov QWORD PTR [rcx+-64], r8 - sbb rax, QWORD PTR [r10+-56] - mov r8, QWORD PTR [rcx+-48] - mov QWORD PTR [rcx+-56], rax - sbb r8, QWORD PTR [r10+-48] - mov rax, QWORD PTR [rcx+-40] - mov QWORD PTR [rcx+-48], r8 - sbb rax, QWORD PTR [r10+-40] - mov r8, QWORD PTR [rcx+-32] - mov QWORD PTR [rcx+-40], rax - sbb r8, QWORD PTR [r10+-32] - mov rax, QWORD PTR [rcx+-24] - mov QWORD PTR [rcx+-32], r8 - sbb rax, QWORD PTR [r10+-24] - mov r8, QWORD PTR [rcx+-16] - mov QWORD PTR [rcx+-24], rax - sbb r8, QWORD PTR [r10+-16] - mov rax, QWORD PTR [rcx+-8] - mov QWORD PTR [rcx+-16], r8 - sbb rax, QWORD PTR [r10+-8] - mov r8, QWORD PTR [rcx] - mov QWORD PTR [rcx+-8], rax - sbb r8, QWORD PTR [r10] - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - sbb rax, QWORD PTR [r10+8] - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - sbb r8, QWORD PTR [r10+16] - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - sbb rax, QWORD PTR [r10+24] - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - sbb r8, QWORD PTR [r10+32] - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - sbb rax, QWORD PTR [r10+40] - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - sbb r8, QWORD PTR [r10+48] - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - sbb rax, QWORD PTR [r10+56] - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - sbb r8, QWORD PTR [r10+64] - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - sbb rax, QWORD PTR [r10+72] - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - sbb r8, QWORD PTR [r10+80] - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - sbb rax, QWORD PTR [r10+88] - mov QWORD PTR [rcx+88], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+192] - add rcx, 288 - ; Add in word - mov r8, QWORD PTR [rcx] - add r8, r9 - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - adc rax, 0 - mov QWORD PTR [rcx+88], rax - mov rdx, QWORD PTR [rsp+200] - mov rcx, QWORD PTR [rsp+192] - add rsp, 208 - ret -sp_3072_sqr_avx2_24 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sqr_48 PROC - sub rsp, 400 - mov QWORD PTR [rsp+384], rcx - mov QWORD PTR [rsp+392], rdx - mov r9, 0 - mov r10, rsp - lea r11, QWORD PTR [rdx+192] - mov rax, QWORD PTR [rdx] - sub rax, QWORD PTR [r11] - mov r8, QWORD PTR [rdx+8] - mov QWORD PTR [r10], rax - sbb r8, QWORD PTR [r11+8] - mov rax, QWORD PTR [rdx+16] - mov QWORD PTR [r10+8], r8 - sbb rax, QWORD PTR [r11+16] - mov r8, QWORD PTR [rdx+24] - mov QWORD PTR [r10+16], rax - sbb r8, QWORD PTR [r11+24] - mov rax, QWORD PTR [rdx+32] - mov QWORD PTR [r10+24], r8 - sbb rax, QWORD PTR [r11+32] - mov r8, QWORD PTR [rdx+40] - mov QWORD PTR [r10+32], rax - sbb r8, QWORD PTR [r11+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r10+40], r8 - sbb rax, QWORD PTR [r11+48] - mov r8, QWORD PTR [rdx+56] - mov QWORD PTR [r10+48], rax - sbb r8, QWORD PTR [r11+56] - mov rax, QWORD PTR [rdx+64] - mov QWORD PTR [r10+56], r8 - sbb rax, QWORD PTR [r11+64] - mov r8, QWORD PTR [rdx+72] - mov QWORD PTR [r10+64], rax - sbb r8, QWORD PTR [r11+72] - mov rax, QWORD PTR [rdx+80] - mov QWORD PTR [r10+72], r8 - sbb rax, QWORD PTR [r11+80] - mov r8, QWORD PTR [rdx+88] - mov QWORD PTR [r10+80], rax - sbb r8, QWORD PTR [r11+88] - mov rax, QWORD PTR [rdx+96] - mov QWORD PTR [r10+88], r8 - sbb rax, QWORD PTR [r11+96] - mov r8, QWORD PTR [rdx+104] - mov QWORD PTR [r10+96], rax - sbb r8, QWORD PTR [r11+104] - mov rax, QWORD PTR [rdx+112] - mov QWORD PTR [r10+104], r8 - sbb rax, QWORD PTR [r11+112] - mov r8, QWORD PTR [rdx+120] - mov QWORD PTR [r10+112], rax - sbb r8, QWORD PTR [r11+120] - mov rax, QWORD PTR [rdx+128] - mov QWORD PTR [r10+120], r8 - sbb rax, QWORD PTR [r11+128] - mov r8, QWORD PTR [rdx+136] - mov QWORD PTR [r10+128], rax - sbb r8, QWORD PTR [r11+136] - mov rax, QWORD PTR [rdx+144] - mov QWORD PTR [r10+136], r8 - sbb rax, QWORD PTR [r11+144] - mov r8, QWORD PTR [rdx+152] - mov QWORD PTR [r10+144], rax - sbb r8, QWORD PTR [r11+152] - mov rax, QWORD PTR [rdx+160] - mov QWORD PTR [r10+152], r8 - sbb rax, QWORD PTR [r11+160] - mov r8, QWORD PTR [rdx+168] - mov QWORD PTR [r10+160], rax - sbb r8, QWORD PTR [r11+168] - mov rax, QWORD PTR [rdx+176] - mov QWORD PTR [r10+168], r8 - sbb rax, QWORD PTR [r11+176] - mov r8, QWORD PTR [rdx+184] - mov QWORD PTR [r10+176], rax - sbb r8, QWORD PTR [r11+184] - mov QWORD PTR [r10+184], r8 - sbb r9, 0 - ; Cond Negate - mov rax, QWORD PTR [r10] - mov r11, r9 - xor rax, r9 - neg r11 - sub rax, r9 - mov r8, QWORD PTR [r10+8] - sbb r11, 0 - mov QWORD PTR [r10], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+16] - setc r11b - mov QWORD PTR [r10+8], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+24] - setc r11b - mov QWORD PTR [r10+16], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+32] - setc r11b - mov QWORD PTR [r10+24], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+40] - setc r11b - mov QWORD PTR [r10+32], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+48] - setc r11b - mov QWORD PTR [r10+40], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+56] - setc r11b - mov QWORD PTR [r10+48], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+64] - setc r11b - mov QWORD PTR [r10+56], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+72] - setc r11b - mov QWORD PTR [r10+64], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+80] - setc r11b - mov QWORD PTR [r10+72], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+88] - setc r11b - mov QWORD PTR [r10+80], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+96] - setc r11b - mov QWORD PTR [r10+88], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+104] - setc r11b - mov QWORD PTR [r10+96], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+112] - setc r11b - mov QWORD PTR [r10+104], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+120] - setc r11b - mov QWORD PTR [r10+112], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+128] - setc r11b - mov QWORD PTR [r10+120], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+136] - setc r11b - mov QWORD PTR [r10+128], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+144] - setc r11b - mov QWORD PTR [r10+136], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+152] - setc r11b - mov QWORD PTR [r10+144], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+160] - setc r11b - mov QWORD PTR [r10+152], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+168] - setc r11b - mov QWORD PTR [r10+160], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+176] - setc r11b - mov QWORD PTR [r10+168], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+184] - setc r11b - mov QWORD PTR [r10+176], rax - xor r8, r9 - add r8, r11 - mov QWORD PTR [r10+184], r8 - mov rdx, r10 - mov rcx, rsp - call sp_3072_sqr_24 - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] - add rdx, 192 - add rcx, 384 - call sp_3072_sqr_24 - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] - call sp_3072_sqr_24 -IFDEF _WIN64 - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] -ENDIF - mov rdx, QWORD PTR [rsp+384] - lea r10, QWORD PTR [rsp+192] - add rdx, 576 - mov r9, 0 - mov r8, QWORD PTR [r10+-192] - sub r8, QWORD PTR [rdx+-192] - mov rax, QWORD PTR [r10+-184] - mov QWORD PTR [r10+-192], r8 - sbb rax, QWORD PTR [rdx+-184] - mov r8, QWORD PTR [r10+-176] - mov QWORD PTR [r10+-184], rax - sbb r8, QWORD PTR [rdx+-176] - mov rax, QWORD PTR [r10+-168] - mov QWORD PTR [r10+-176], r8 - sbb rax, QWORD PTR [rdx+-168] - mov r8, QWORD PTR [r10+-160] - mov QWORD PTR [r10+-168], rax - sbb r8, QWORD PTR [rdx+-160] - mov rax, QWORD PTR [r10+-152] - mov QWORD PTR [r10+-160], r8 - sbb rax, QWORD PTR [rdx+-152] - mov r8, QWORD PTR [r10+-144] - mov QWORD PTR [r10+-152], rax - sbb r8, QWORD PTR [rdx+-144] - mov rax, QWORD PTR [r10+-136] - mov QWORD PTR [r10+-144], r8 - sbb rax, QWORD PTR [rdx+-136] - mov r8, QWORD PTR [r10+-128] - mov QWORD PTR [r10+-136], rax - sbb r8, QWORD PTR [rdx+-128] - mov rax, QWORD PTR [r10+-120] - mov QWORD PTR [r10+-128], r8 - sbb rax, QWORD PTR [rdx+-120] - mov r8, QWORD PTR [r10+-112] - mov QWORD PTR [r10+-120], rax - sbb r8, QWORD PTR [rdx+-112] - mov rax, QWORD PTR [r10+-104] - mov QWORD PTR [r10+-112], r8 - sbb rax, QWORD PTR [rdx+-104] - mov r8, QWORD PTR [r10+-96] - mov QWORD PTR [r10+-104], rax - sbb r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov r8, QWORD PTR [r10+96] - mov QWORD PTR [r10+88], rax - sbb r8, QWORD PTR [rdx+96] - mov rax, QWORD PTR [r10+104] - mov QWORD PTR [r10+96], r8 - sbb rax, QWORD PTR [rdx+104] - mov r8, QWORD PTR [r10+112] - mov QWORD PTR [r10+104], rax - sbb r8, QWORD PTR [rdx+112] - mov rax, QWORD PTR [r10+120] - mov QWORD PTR [r10+112], r8 - sbb rax, QWORD PTR [rdx+120] - mov r8, QWORD PTR [r10+128] - mov QWORD PTR [r10+120], rax - sbb r8, QWORD PTR [rdx+128] - mov rax, QWORD PTR [r10+136] - mov QWORD PTR [r10+128], r8 - sbb rax, QWORD PTR [rdx+136] - mov r8, QWORD PTR [r10+144] - mov QWORD PTR [r10+136], rax - sbb r8, QWORD PTR [rdx+144] - mov rax, QWORD PTR [r10+152] - mov QWORD PTR [r10+144], r8 - sbb rax, QWORD PTR [rdx+152] - mov r8, QWORD PTR [r10+160] - mov QWORD PTR [r10+152], rax - sbb r8, QWORD PTR [rdx+160] - mov rax, QWORD PTR [r10+168] - mov QWORD PTR [r10+160], r8 - sbb rax, QWORD PTR [rdx+168] - mov r8, QWORD PTR [r10+176] - mov QWORD PTR [r10+168], rax - sbb r8, QWORD PTR [rdx+176] - mov rax, QWORD PTR [r10+184] - mov QWORD PTR [r10+176], r8 - sbb rax, QWORD PTR [rdx+184] - mov QWORD PTR [r10+184], rax - sbb r9, 0 - sub rdx, 384 - mov r8, QWORD PTR [r10+-192] - sub r8, QWORD PTR [rdx+-192] - mov rax, QWORD PTR [r10+-184] - mov QWORD PTR [r10+-192], r8 - sbb rax, QWORD PTR [rdx+-184] - mov r8, QWORD PTR [r10+-176] - mov QWORD PTR [r10+-184], rax - sbb r8, QWORD PTR [rdx+-176] - mov rax, QWORD PTR [r10+-168] - mov QWORD PTR [r10+-176], r8 - sbb rax, QWORD PTR [rdx+-168] - mov r8, QWORD PTR [r10+-160] - mov QWORD PTR [r10+-168], rax - sbb r8, QWORD PTR [rdx+-160] - mov rax, QWORD PTR [r10+-152] - mov QWORD PTR [r10+-160], r8 - sbb rax, QWORD PTR [rdx+-152] - mov r8, QWORD PTR [r10+-144] - mov QWORD PTR [r10+-152], rax - sbb r8, QWORD PTR [rdx+-144] - mov rax, QWORD PTR [r10+-136] - mov QWORD PTR [r10+-144], r8 - sbb rax, QWORD PTR [rdx+-136] - mov r8, QWORD PTR [r10+-128] - mov QWORD PTR [r10+-136], rax - sbb r8, QWORD PTR [rdx+-128] - mov rax, QWORD PTR [r10+-120] - mov QWORD PTR [r10+-128], r8 - sbb rax, QWORD PTR [rdx+-120] - mov r8, QWORD PTR [r10+-112] - mov QWORD PTR [r10+-120], rax - sbb r8, QWORD PTR [rdx+-112] - mov rax, QWORD PTR [r10+-104] - mov QWORD PTR [r10+-112], r8 - sbb rax, QWORD PTR [rdx+-104] - mov r8, QWORD PTR [r10+-96] - mov QWORD PTR [r10+-104], rax - sbb r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov r8, QWORD PTR [r10+96] - mov QWORD PTR [r10+88], rax - sbb r8, QWORD PTR [rdx+96] - mov rax, QWORD PTR [r10+104] - mov QWORD PTR [r10+96], r8 - sbb rax, QWORD PTR [rdx+104] - mov r8, QWORD PTR [r10+112] - mov QWORD PTR [r10+104], rax - sbb r8, QWORD PTR [rdx+112] - mov rax, QWORD PTR [r10+120] - mov QWORD PTR [r10+112], r8 - sbb rax, QWORD PTR [rdx+120] - mov r8, QWORD PTR [r10+128] - mov QWORD PTR [r10+120], rax - sbb r8, QWORD PTR [rdx+128] - mov rax, QWORD PTR [r10+136] - mov QWORD PTR [r10+128], r8 - sbb rax, QWORD PTR [rdx+136] - mov r8, QWORD PTR [r10+144] - mov QWORD PTR [r10+136], rax - sbb r8, QWORD PTR [rdx+144] - mov rax, QWORD PTR [r10+152] - mov QWORD PTR [r10+144], r8 - sbb rax, QWORD PTR [rdx+152] - mov r8, QWORD PTR [r10+160] - mov QWORD PTR [r10+152], rax - sbb r8, QWORD PTR [rdx+160] - mov rax, QWORD PTR [r10+168] - mov QWORD PTR [r10+160], r8 - sbb rax, QWORD PTR [rdx+168] - mov r8, QWORD PTR [r10+176] - mov QWORD PTR [r10+168], rax - sbb r8, QWORD PTR [rdx+176] - mov rax, QWORD PTR [r10+184] - mov QWORD PTR [r10+176], r8 - sbb rax, QWORD PTR [rdx+184] - mov QWORD PTR [r10+184], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+384] - neg r9 - add rcx, 384 - mov r8, QWORD PTR [rcx+-192] - sub r8, QWORD PTR [r10+-192] - mov rax, QWORD PTR [rcx+-184] - mov QWORD PTR [rcx+-192], r8 - sbb rax, QWORD PTR [r10+-184] - mov r8, QWORD PTR [rcx+-176] - mov QWORD PTR [rcx+-184], rax - sbb r8, QWORD PTR [r10+-176] - mov rax, QWORD PTR [rcx+-168] - mov QWORD PTR [rcx+-176], r8 - sbb rax, QWORD PTR [r10+-168] - mov r8, QWORD PTR [rcx+-160] - mov QWORD PTR [rcx+-168], rax - sbb r8, QWORD PTR [r10+-160] - mov rax, QWORD PTR [rcx+-152] - mov QWORD PTR [rcx+-160], r8 - sbb rax, QWORD PTR [r10+-152] - mov r8, QWORD PTR [rcx+-144] - mov QWORD PTR [rcx+-152], rax - sbb r8, QWORD PTR [r10+-144] - mov rax, QWORD PTR [rcx+-136] - mov QWORD PTR [rcx+-144], r8 - sbb rax, QWORD PTR [r10+-136] - mov r8, QWORD PTR [rcx+-128] - mov QWORD PTR [rcx+-136], rax - sbb r8, QWORD PTR [r10+-128] - mov rax, QWORD PTR [rcx+-120] - mov QWORD PTR [rcx+-128], r8 - sbb rax, QWORD PTR [r10+-120] - mov r8, QWORD PTR [rcx+-112] - mov QWORD PTR [rcx+-120], rax - sbb r8, QWORD PTR [r10+-112] - mov rax, QWORD PTR [rcx+-104] - mov QWORD PTR [rcx+-112], r8 - sbb rax, QWORD PTR [r10+-104] - mov r8, QWORD PTR [rcx+-96] - mov QWORD PTR [rcx+-104], rax - sbb r8, QWORD PTR [r10+-96] - mov rax, QWORD PTR [rcx+-88] - mov QWORD PTR [rcx+-96], r8 - sbb rax, QWORD PTR [r10+-88] - mov r8, QWORD PTR [rcx+-80] - mov QWORD PTR [rcx+-88], rax - sbb r8, QWORD PTR [r10+-80] - mov rax, QWORD PTR [rcx+-72] - mov QWORD PTR [rcx+-80], r8 - sbb rax, QWORD PTR [r10+-72] - mov r8, QWORD PTR [rcx+-64] - mov QWORD PTR [rcx+-72], rax - sbb r8, QWORD PTR [r10+-64] - mov rax, QWORD PTR [rcx+-56] - mov QWORD PTR [rcx+-64], r8 - sbb rax, QWORD PTR [r10+-56] - mov r8, QWORD PTR [rcx+-48] - mov QWORD PTR [rcx+-56], rax - sbb r8, QWORD PTR [r10+-48] - mov rax, QWORD PTR [rcx+-40] - mov QWORD PTR [rcx+-48], r8 - sbb rax, QWORD PTR [r10+-40] - mov r8, QWORD PTR [rcx+-32] - mov QWORD PTR [rcx+-40], rax - sbb r8, QWORD PTR [r10+-32] - mov rax, QWORD PTR [rcx+-24] - mov QWORD PTR [rcx+-32], r8 - sbb rax, QWORD PTR [r10+-24] - mov r8, QWORD PTR [rcx+-16] - mov QWORD PTR [rcx+-24], rax - sbb r8, QWORD PTR [r10+-16] - mov rax, QWORD PTR [rcx+-8] - mov QWORD PTR [rcx+-16], r8 - sbb rax, QWORD PTR [r10+-8] - mov r8, QWORD PTR [rcx] - mov QWORD PTR [rcx+-8], rax - sbb r8, QWORD PTR [r10] - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - sbb rax, QWORD PTR [r10+8] - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - sbb r8, QWORD PTR [r10+16] - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - sbb rax, QWORD PTR [r10+24] - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - sbb r8, QWORD PTR [r10+32] - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - sbb rax, QWORD PTR [r10+40] - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - sbb r8, QWORD PTR [r10+48] - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - sbb rax, QWORD PTR [r10+56] - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - sbb r8, QWORD PTR [r10+64] - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - sbb rax, QWORD PTR [r10+72] - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - sbb r8, QWORD PTR [r10+80] - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - sbb rax, QWORD PTR [r10+88] - mov r8, QWORD PTR [rcx+96] - mov QWORD PTR [rcx+88], rax - sbb r8, QWORD PTR [r10+96] - mov rax, QWORD PTR [rcx+104] - mov QWORD PTR [rcx+96], r8 - sbb rax, QWORD PTR [r10+104] - mov r8, QWORD PTR [rcx+112] - mov QWORD PTR [rcx+104], rax - sbb r8, QWORD PTR [r10+112] - mov rax, QWORD PTR [rcx+120] - mov QWORD PTR [rcx+112], r8 - sbb rax, QWORD PTR [r10+120] - mov r8, QWORD PTR [rcx+128] - mov QWORD PTR [rcx+120], rax - sbb r8, QWORD PTR [r10+128] - mov rax, QWORD PTR [rcx+136] - mov QWORD PTR [rcx+128], r8 - sbb rax, QWORD PTR [r10+136] - mov r8, QWORD PTR [rcx+144] - mov QWORD PTR [rcx+136], rax - sbb r8, QWORD PTR [r10+144] - mov rax, QWORD PTR [rcx+152] - mov QWORD PTR [rcx+144], r8 - sbb rax, QWORD PTR [r10+152] - mov r8, QWORD PTR [rcx+160] - mov QWORD PTR [rcx+152], rax - sbb r8, QWORD PTR [r10+160] - mov rax, QWORD PTR [rcx+168] - mov QWORD PTR [rcx+160], r8 - sbb rax, QWORD PTR [r10+168] - mov r8, QWORD PTR [rcx+176] - mov QWORD PTR [rcx+168], rax - sbb r8, QWORD PTR [r10+176] - mov rax, QWORD PTR [rcx+184] - mov QWORD PTR [rcx+176], r8 - sbb rax, QWORD PTR [r10+184] - mov QWORD PTR [rcx+184], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+384] - add rcx, 576 - ; Add in word - mov r8, QWORD PTR [rcx] - add r8, r9 - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+96] - mov QWORD PTR [rcx+88], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+104] - mov QWORD PTR [rcx+96], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+112] - mov QWORD PTR [rcx+104], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+120] - mov QWORD PTR [rcx+112], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+128] - mov QWORD PTR [rcx+120], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+136] - mov QWORD PTR [rcx+128], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+144] - mov QWORD PTR [rcx+136], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+152] - mov QWORD PTR [rcx+144], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+160] - mov QWORD PTR [rcx+152], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+168] - mov QWORD PTR [rcx+160], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+176] - mov QWORD PTR [rcx+168], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+184] - mov QWORD PTR [rcx+176], r8 - adc rax, 0 - mov QWORD PTR [rcx+184], rax - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] - add rsp, 400 - ret -sp_3072_sqr_48 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sqr_avx2_48 PROC - sub rsp, 400 - mov QWORD PTR [rsp+384], rcx - mov QWORD PTR [rsp+392], rdx - mov r9, 0 - mov r10, rsp - lea r11, QWORD PTR [rdx+192] - mov rax, QWORD PTR [rdx] - sub rax, QWORD PTR [r11] - mov r8, QWORD PTR [rdx+8] - mov QWORD PTR [r10], rax - sbb r8, QWORD PTR [r11+8] - mov rax, QWORD PTR [rdx+16] - mov QWORD PTR [r10+8], r8 - sbb rax, QWORD PTR [r11+16] - mov r8, QWORD PTR [rdx+24] - mov QWORD PTR [r10+16], rax - sbb r8, QWORD PTR [r11+24] - mov rax, QWORD PTR [rdx+32] - mov QWORD PTR [r10+24], r8 - sbb rax, QWORD PTR [r11+32] - mov r8, QWORD PTR [rdx+40] - mov QWORD PTR [r10+32], rax - sbb r8, QWORD PTR [r11+40] - mov rax, QWORD PTR [rdx+48] - mov QWORD PTR [r10+40], r8 - sbb rax, QWORD PTR [r11+48] - mov r8, QWORD PTR [rdx+56] - mov QWORD PTR [r10+48], rax - sbb r8, QWORD PTR [r11+56] - mov rax, QWORD PTR [rdx+64] - mov QWORD PTR [r10+56], r8 - sbb rax, QWORD PTR [r11+64] - mov r8, QWORD PTR [rdx+72] - mov QWORD PTR [r10+64], rax - sbb r8, QWORD PTR [r11+72] - mov rax, QWORD PTR [rdx+80] - mov QWORD PTR [r10+72], r8 - sbb rax, QWORD PTR [r11+80] - mov r8, QWORD PTR [rdx+88] - mov QWORD PTR [r10+80], rax - sbb r8, QWORD PTR [r11+88] - mov rax, QWORD PTR [rdx+96] - mov QWORD PTR [r10+88], r8 - sbb rax, QWORD PTR [r11+96] - mov r8, QWORD PTR [rdx+104] - mov QWORD PTR [r10+96], rax - sbb r8, QWORD PTR [r11+104] - mov rax, QWORD PTR [rdx+112] - mov QWORD PTR [r10+104], r8 - sbb rax, QWORD PTR [r11+112] - mov r8, QWORD PTR [rdx+120] - mov QWORD PTR [r10+112], rax - sbb r8, QWORD PTR [r11+120] - mov rax, QWORD PTR [rdx+128] - mov QWORD PTR [r10+120], r8 - sbb rax, QWORD PTR [r11+128] - mov r8, QWORD PTR [rdx+136] - mov QWORD PTR [r10+128], rax - sbb r8, QWORD PTR [r11+136] - mov rax, QWORD PTR [rdx+144] - mov QWORD PTR [r10+136], r8 - sbb rax, QWORD PTR [r11+144] - mov r8, QWORD PTR [rdx+152] - mov QWORD PTR [r10+144], rax - sbb r8, QWORD PTR [r11+152] - mov rax, QWORD PTR [rdx+160] - mov QWORD PTR [r10+152], r8 - sbb rax, QWORD PTR [r11+160] - mov r8, QWORD PTR [rdx+168] - mov QWORD PTR [r10+160], rax - sbb r8, QWORD PTR [r11+168] - mov rax, QWORD PTR [rdx+176] - mov QWORD PTR [r10+168], r8 - sbb rax, QWORD PTR [r11+176] - mov r8, QWORD PTR [rdx+184] - mov QWORD PTR [r10+176], rax - sbb r8, QWORD PTR [r11+184] - mov QWORD PTR [r10+184], r8 - sbb r9, 0 - ; Cond Negate - mov rax, QWORD PTR [r10] - mov r11, r9 - xor rax, r9 - neg r11 - sub rax, r9 - mov r8, QWORD PTR [r10+8] - sbb r11, 0 - mov QWORD PTR [r10], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+16] - setc r11b - mov QWORD PTR [r10+8], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+24] - setc r11b - mov QWORD PTR [r10+16], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+32] - setc r11b - mov QWORD PTR [r10+24], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+40] - setc r11b - mov QWORD PTR [r10+32], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+48] - setc r11b - mov QWORD PTR [r10+40], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+56] - setc r11b - mov QWORD PTR [r10+48], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+64] - setc r11b - mov QWORD PTR [r10+56], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+72] - setc r11b - mov QWORD PTR [r10+64], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+80] - setc r11b - mov QWORD PTR [r10+72], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+88] - setc r11b - mov QWORD PTR [r10+80], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+96] - setc r11b - mov QWORD PTR [r10+88], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+104] - setc r11b - mov QWORD PTR [r10+96], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+112] - setc r11b - mov QWORD PTR [r10+104], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+120] - setc r11b - mov QWORD PTR [r10+112], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+128] - setc r11b - mov QWORD PTR [r10+120], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+136] - setc r11b - mov QWORD PTR [r10+128], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+144] - setc r11b - mov QWORD PTR [r10+136], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+152] - setc r11b - mov QWORD PTR [r10+144], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+160] - setc r11b - mov QWORD PTR [r10+152], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+168] - setc r11b - mov QWORD PTR [r10+160], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+176] - setc r11b - mov QWORD PTR [r10+168], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+184] - setc r11b - mov QWORD PTR [r10+176], rax - xor r8, r9 - add r8, r11 - mov QWORD PTR [r10+184], r8 - mov rdx, r10 - mov rcx, rsp - call sp_3072_sqr_avx2_24 - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] - add rdx, 192 - add rcx, 384 - call sp_3072_sqr_avx2_24 - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] - call sp_3072_sqr_avx2_24 -IFDEF _WIN64 - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] -ENDIF - mov rdx, QWORD PTR [rsp+384] - lea r10, QWORD PTR [rsp+192] - add rdx, 576 - mov r9, 0 - mov r8, QWORD PTR [r10+-192] - sub r8, QWORD PTR [rdx+-192] - mov rax, QWORD PTR [r10+-184] - mov QWORD PTR [r10+-192], r8 - sbb rax, QWORD PTR [rdx+-184] - mov r8, QWORD PTR [r10+-176] - mov QWORD PTR [r10+-184], rax - sbb r8, QWORD PTR [rdx+-176] - mov rax, QWORD PTR [r10+-168] - mov QWORD PTR [r10+-176], r8 - sbb rax, QWORD PTR [rdx+-168] - mov r8, QWORD PTR [r10+-160] - mov QWORD PTR [r10+-168], rax - sbb r8, QWORD PTR [rdx+-160] - mov rax, QWORD PTR [r10+-152] - mov QWORD PTR [r10+-160], r8 - sbb rax, QWORD PTR [rdx+-152] - mov r8, QWORD PTR [r10+-144] - mov QWORD PTR [r10+-152], rax - sbb r8, QWORD PTR [rdx+-144] - mov rax, QWORD PTR [r10+-136] - mov QWORD PTR [r10+-144], r8 - sbb rax, QWORD PTR [rdx+-136] - mov r8, QWORD PTR [r10+-128] - mov QWORD PTR [r10+-136], rax - sbb r8, QWORD PTR [rdx+-128] - mov rax, QWORD PTR [r10+-120] - mov QWORD PTR [r10+-128], r8 - sbb rax, QWORD PTR [rdx+-120] - mov r8, QWORD PTR [r10+-112] - mov QWORD PTR [r10+-120], rax - sbb r8, QWORD PTR [rdx+-112] - mov rax, QWORD PTR [r10+-104] - mov QWORD PTR [r10+-112], r8 - sbb rax, QWORD PTR [rdx+-104] - mov r8, QWORD PTR [r10+-96] - mov QWORD PTR [r10+-104], rax - sbb r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov r8, QWORD PTR [r10+96] - mov QWORD PTR [r10+88], rax - sbb r8, QWORD PTR [rdx+96] - mov rax, QWORD PTR [r10+104] - mov QWORD PTR [r10+96], r8 - sbb rax, QWORD PTR [rdx+104] - mov r8, QWORD PTR [r10+112] - mov QWORD PTR [r10+104], rax - sbb r8, QWORD PTR [rdx+112] - mov rax, QWORD PTR [r10+120] - mov QWORD PTR [r10+112], r8 - sbb rax, QWORD PTR [rdx+120] - mov r8, QWORD PTR [r10+128] - mov QWORD PTR [r10+120], rax - sbb r8, QWORD PTR [rdx+128] - mov rax, QWORD PTR [r10+136] - mov QWORD PTR [r10+128], r8 - sbb rax, QWORD PTR [rdx+136] - mov r8, QWORD PTR [r10+144] - mov QWORD PTR [r10+136], rax - sbb r8, QWORD PTR [rdx+144] - mov rax, QWORD PTR [r10+152] - mov QWORD PTR [r10+144], r8 - sbb rax, QWORD PTR [rdx+152] - mov r8, QWORD PTR [r10+160] - mov QWORD PTR [r10+152], rax - sbb r8, QWORD PTR [rdx+160] - mov rax, QWORD PTR [r10+168] - mov QWORD PTR [r10+160], r8 - sbb rax, QWORD PTR [rdx+168] - mov r8, QWORD PTR [r10+176] - mov QWORD PTR [r10+168], rax - sbb r8, QWORD PTR [rdx+176] - mov rax, QWORD PTR [r10+184] - mov QWORD PTR [r10+176], r8 - sbb rax, QWORD PTR [rdx+184] - mov QWORD PTR [r10+184], rax - sbb r9, 0 - sub rdx, 384 - mov r8, QWORD PTR [r10+-192] - sub r8, QWORD PTR [rdx+-192] - mov rax, QWORD PTR [r10+-184] - mov QWORD PTR [r10+-192], r8 - sbb rax, QWORD PTR [rdx+-184] - mov r8, QWORD PTR [r10+-176] - mov QWORD PTR [r10+-184], rax - sbb r8, QWORD PTR [rdx+-176] - mov rax, QWORD PTR [r10+-168] - mov QWORD PTR [r10+-176], r8 - sbb rax, QWORD PTR [rdx+-168] - mov r8, QWORD PTR [r10+-160] - mov QWORD PTR [r10+-168], rax - sbb r8, QWORD PTR [rdx+-160] - mov rax, QWORD PTR [r10+-152] - mov QWORD PTR [r10+-160], r8 - sbb rax, QWORD PTR [rdx+-152] - mov r8, QWORD PTR [r10+-144] - mov QWORD PTR [r10+-152], rax - sbb r8, QWORD PTR [rdx+-144] - mov rax, QWORD PTR [r10+-136] - mov QWORD PTR [r10+-144], r8 - sbb rax, QWORD PTR [rdx+-136] - mov r8, QWORD PTR [r10+-128] - mov QWORD PTR [r10+-136], rax - sbb r8, QWORD PTR [rdx+-128] - mov rax, QWORD PTR [r10+-120] - mov QWORD PTR [r10+-128], r8 - sbb rax, QWORD PTR [rdx+-120] - mov r8, QWORD PTR [r10+-112] - mov QWORD PTR [r10+-120], rax - sbb r8, QWORD PTR [rdx+-112] - mov rax, QWORD PTR [r10+-104] - mov QWORD PTR [r10+-112], r8 - sbb rax, QWORD PTR [rdx+-104] - mov r8, QWORD PTR [r10+-96] - mov QWORD PTR [r10+-104], rax - sbb r8, QWORD PTR [rdx+-96] - mov rax, QWORD PTR [r10+-88] - mov QWORD PTR [r10+-96], r8 - sbb rax, QWORD PTR [rdx+-88] - mov r8, QWORD PTR [r10+-80] - mov QWORD PTR [r10+-88], rax - sbb r8, QWORD PTR [rdx+-80] - mov rax, QWORD PTR [r10+-72] - mov QWORD PTR [r10+-80], r8 - sbb rax, QWORD PTR [rdx+-72] - mov r8, QWORD PTR [r10+-64] - mov QWORD PTR [r10+-72], rax - sbb r8, QWORD PTR [rdx+-64] - mov rax, QWORD PTR [r10+-56] - mov QWORD PTR [r10+-64], r8 - sbb rax, QWORD PTR [rdx+-56] - mov r8, QWORD PTR [r10+-48] - mov QWORD PTR [r10+-56], rax - sbb r8, QWORD PTR [rdx+-48] - mov rax, QWORD PTR [r10+-40] - mov QWORD PTR [r10+-48], r8 - sbb rax, QWORD PTR [rdx+-40] - mov r8, QWORD PTR [r10+-32] - mov QWORD PTR [r10+-40], rax - sbb r8, QWORD PTR [rdx+-32] - mov rax, QWORD PTR [r10+-24] - mov QWORD PTR [r10+-32], r8 - sbb rax, QWORD PTR [rdx+-24] - mov r8, QWORD PTR [r10+-16] - mov QWORD PTR [r10+-24], rax - sbb r8, QWORD PTR [rdx+-16] - mov rax, QWORD PTR [r10+-8] - mov QWORD PTR [r10+-16], r8 - sbb rax, QWORD PTR [rdx+-8] - mov r8, QWORD PTR [r10] - mov QWORD PTR [r10+-8], rax - sbb r8, QWORD PTR [rdx] - mov rax, QWORD PTR [r10+8] - mov QWORD PTR [r10], r8 - sbb rax, QWORD PTR [rdx+8] - mov r8, QWORD PTR [r10+16] - mov QWORD PTR [r10+8], rax - sbb r8, QWORD PTR [rdx+16] - mov rax, QWORD PTR [r10+24] - mov QWORD PTR [r10+16], r8 - sbb rax, QWORD PTR [rdx+24] - mov r8, QWORD PTR [r10+32] - mov QWORD PTR [r10+24], rax - sbb r8, QWORD PTR [rdx+32] - mov rax, QWORD PTR [r10+40] - mov QWORD PTR [r10+32], r8 - sbb rax, QWORD PTR [rdx+40] - mov r8, QWORD PTR [r10+48] - mov QWORD PTR [r10+40], rax - sbb r8, QWORD PTR [rdx+48] - mov rax, QWORD PTR [r10+56] - mov QWORD PTR [r10+48], r8 - sbb rax, QWORD PTR [rdx+56] - mov r8, QWORD PTR [r10+64] - mov QWORD PTR [r10+56], rax - sbb r8, QWORD PTR [rdx+64] - mov rax, QWORD PTR [r10+72] - mov QWORD PTR [r10+64], r8 - sbb rax, QWORD PTR [rdx+72] - mov r8, QWORD PTR [r10+80] - mov QWORD PTR [r10+72], rax - sbb r8, QWORD PTR [rdx+80] - mov rax, QWORD PTR [r10+88] - mov QWORD PTR [r10+80], r8 - sbb rax, QWORD PTR [rdx+88] - mov r8, QWORD PTR [r10+96] - mov QWORD PTR [r10+88], rax - sbb r8, QWORD PTR [rdx+96] - mov rax, QWORD PTR [r10+104] - mov QWORD PTR [r10+96], r8 - sbb rax, QWORD PTR [rdx+104] - mov r8, QWORD PTR [r10+112] - mov QWORD PTR [r10+104], rax - sbb r8, QWORD PTR [rdx+112] - mov rax, QWORD PTR [r10+120] - mov QWORD PTR [r10+112], r8 - sbb rax, QWORD PTR [rdx+120] - mov r8, QWORD PTR [r10+128] - mov QWORD PTR [r10+120], rax - sbb r8, QWORD PTR [rdx+128] - mov rax, QWORD PTR [r10+136] - mov QWORD PTR [r10+128], r8 - sbb rax, QWORD PTR [rdx+136] - mov r8, QWORD PTR [r10+144] - mov QWORD PTR [r10+136], rax - sbb r8, QWORD PTR [rdx+144] - mov rax, QWORD PTR [r10+152] - mov QWORD PTR [r10+144], r8 - sbb rax, QWORD PTR [rdx+152] - mov r8, QWORD PTR [r10+160] - mov QWORD PTR [r10+152], rax - sbb r8, QWORD PTR [rdx+160] - mov rax, QWORD PTR [r10+168] - mov QWORD PTR [r10+160], r8 - sbb rax, QWORD PTR [rdx+168] - mov r8, QWORD PTR [r10+176] - mov QWORD PTR [r10+168], rax - sbb r8, QWORD PTR [rdx+176] - mov rax, QWORD PTR [r10+184] - mov QWORD PTR [r10+176], r8 - sbb rax, QWORD PTR [rdx+184] - mov QWORD PTR [r10+184], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+384] - neg r9 - add rcx, 384 - mov r8, QWORD PTR [rcx+-192] - sub r8, QWORD PTR [r10+-192] - mov rax, QWORD PTR [rcx+-184] - mov QWORD PTR [rcx+-192], r8 - sbb rax, QWORD PTR [r10+-184] - mov r8, QWORD PTR [rcx+-176] - mov QWORD PTR [rcx+-184], rax - sbb r8, QWORD PTR [r10+-176] - mov rax, QWORD PTR [rcx+-168] - mov QWORD PTR [rcx+-176], r8 - sbb rax, QWORD PTR [r10+-168] - mov r8, QWORD PTR [rcx+-160] - mov QWORD PTR [rcx+-168], rax - sbb r8, QWORD PTR [r10+-160] - mov rax, QWORD PTR [rcx+-152] - mov QWORD PTR [rcx+-160], r8 - sbb rax, QWORD PTR [r10+-152] - mov r8, QWORD PTR [rcx+-144] - mov QWORD PTR [rcx+-152], rax - sbb r8, QWORD PTR [r10+-144] - mov rax, QWORD PTR [rcx+-136] - mov QWORD PTR [rcx+-144], r8 - sbb rax, QWORD PTR [r10+-136] - mov r8, QWORD PTR [rcx+-128] - mov QWORD PTR [rcx+-136], rax - sbb r8, QWORD PTR [r10+-128] - mov rax, QWORD PTR [rcx+-120] - mov QWORD PTR [rcx+-128], r8 - sbb rax, QWORD PTR [r10+-120] - mov r8, QWORD PTR [rcx+-112] - mov QWORD PTR [rcx+-120], rax - sbb r8, QWORD PTR [r10+-112] - mov rax, QWORD PTR [rcx+-104] - mov QWORD PTR [rcx+-112], r8 - sbb rax, QWORD PTR [r10+-104] - mov r8, QWORD PTR [rcx+-96] - mov QWORD PTR [rcx+-104], rax - sbb r8, QWORD PTR [r10+-96] - mov rax, QWORD PTR [rcx+-88] - mov QWORD PTR [rcx+-96], r8 - sbb rax, QWORD PTR [r10+-88] - mov r8, QWORD PTR [rcx+-80] - mov QWORD PTR [rcx+-88], rax - sbb r8, QWORD PTR [r10+-80] - mov rax, QWORD PTR [rcx+-72] - mov QWORD PTR [rcx+-80], r8 - sbb rax, QWORD PTR [r10+-72] - mov r8, QWORD PTR [rcx+-64] - mov QWORD PTR [rcx+-72], rax - sbb r8, QWORD PTR [r10+-64] - mov rax, QWORD PTR [rcx+-56] - mov QWORD PTR [rcx+-64], r8 - sbb rax, QWORD PTR [r10+-56] - mov r8, QWORD PTR [rcx+-48] - mov QWORD PTR [rcx+-56], rax - sbb r8, QWORD PTR [r10+-48] - mov rax, QWORD PTR [rcx+-40] - mov QWORD PTR [rcx+-48], r8 - sbb rax, QWORD PTR [r10+-40] - mov r8, QWORD PTR [rcx+-32] - mov QWORD PTR [rcx+-40], rax - sbb r8, QWORD PTR [r10+-32] - mov rax, QWORD PTR [rcx+-24] - mov QWORD PTR [rcx+-32], r8 - sbb rax, QWORD PTR [r10+-24] - mov r8, QWORD PTR [rcx+-16] - mov QWORD PTR [rcx+-24], rax - sbb r8, QWORD PTR [r10+-16] - mov rax, QWORD PTR [rcx+-8] - mov QWORD PTR [rcx+-16], r8 - sbb rax, QWORD PTR [r10+-8] - mov r8, QWORD PTR [rcx] - mov QWORD PTR [rcx+-8], rax - sbb r8, QWORD PTR [r10] - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - sbb rax, QWORD PTR [r10+8] - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - sbb r8, QWORD PTR [r10+16] - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - sbb rax, QWORD PTR [r10+24] - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - sbb r8, QWORD PTR [r10+32] - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - sbb rax, QWORD PTR [r10+40] - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - sbb r8, QWORD PTR [r10+48] - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - sbb rax, QWORD PTR [r10+56] - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - sbb r8, QWORD PTR [r10+64] - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - sbb rax, QWORD PTR [r10+72] - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - sbb r8, QWORD PTR [r10+80] - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - sbb rax, QWORD PTR [r10+88] - mov r8, QWORD PTR [rcx+96] - mov QWORD PTR [rcx+88], rax - sbb r8, QWORD PTR [r10+96] - mov rax, QWORD PTR [rcx+104] - mov QWORD PTR [rcx+96], r8 - sbb rax, QWORD PTR [r10+104] - mov r8, QWORD PTR [rcx+112] - mov QWORD PTR [rcx+104], rax - sbb r8, QWORD PTR [r10+112] - mov rax, QWORD PTR [rcx+120] - mov QWORD PTR [rcx+112], r8 - sbb rax, QWORD PTR [r10+120] - mov r8, QWORD PTR [rcx+128] - mov QWORD PTR [rcx+120], rax - sbb r8, QWORD PTR [r10+128] - mov rax, QWORD PTR [rcx+136] - mov QWORD PTR [rcx+128], r8 - sbb rax, QWORD PTR [r10+136] - mov r8, QWORD PTR [rcx+144] - mov QWORD PTR [rcx+136], rax - sbb r8, QWORD PTR [r10+144] - mov rax, QWORD PTR [rcx+152] - mov QWORD PTR [rcx+144], r8 - sbb rax, QWORD PTR [r10+152] - mov r8, QWORD PTR [rcx+160] - mov QWORD PTR [rcx+152], rax - sbb r8, QWORD PTR [r10+160] - mov rax, QWORD PTR [rcx+168] - mov QWORD PTR [rcx+160], r8 - sbb rax, QWORD PTR [r10+168] - mov r8, QWORD PTR [rcx+176] - mov QWORD PTR [rcx+168], rax - sbb r8, QWORD PTR [r10+176] - mov rax, QWORD PTR [rcx+184] - mov QWORD PTR [rcx+176], r8 - sbb rax, QWORD PTR [r10+184] - mov QWORD PTR [rcx+184], rax - sbb r9, 0 - mov rcx, QWORD PTR [rsp+384] - add rcx, 576 - ; Add in word - mov r8, QWORD PTR [rcx] - add r8, r9 - mov rax, QWORD PTR [rcx+8] - mov QWORD PTR [rcx], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+16] - mov QWORD PTR [rcx+8], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+24] - mov QWORD PTR [rcx+16], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+32] - mov QWORD PTR [rcx+24], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+40] - mov QWORD PTR [rcx+32], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+48] - mov QWORD PTR [rcx+40], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+56] - mov QWORD PTR [rcx+48], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+64] - mov QWORD PTR [rcx+56], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+72] - mov QWORD PTR [rcx+64], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+80] - mov QWORD PTR [rcx+72], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+88] - mov QWORD PTR [rcx+80], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+96] - mov QWORD PTR [rcx+88], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+104] - mov QWORD PTR [rcx+96], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+112] - mov QWORD PTR [rcx+104], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+120] - mov QWORD PTR [rcx+112], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+128] - mov QWORD PTR [rcx+120], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+136] - mov QWORD PTR [rcx+128], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+144] - mov QWORD PTR [rcx+136], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+152] - mov QWORD PTR [rcx+144], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+160] - mov QWORD PTR [rcx+152], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+168] - mov QWORD PTR [rcx+160], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+176] - mov QWORD PTR [rcx+168], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+184] - mov QWORD PTR [rcx+176], r8 - adc rax, 0 - mov QWORD PTR [rcx+184], rax - mov rdx, QWORD PTR [rsp+392] - mov rcx, QWORD PTR [rsp+384] - add rsp, 400 - ret -sp_3072_sqr_avx2_48 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_d_48 PROC - push r12 - mov r9, rdx - ; A[0] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9] - mov r10, rax - mov r11, rdx - mov QWORD PTR [rcx], r10 - ; A[1] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+8] - add r11, rax - mov QWORD PTR [rcx+8], r11 - adc r12, rdx - adc r10, 0 - ; A[2] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+16] - add r12, rax - mov QWORD PTR [rcx+16], r12 - adc r10, rdx - adc r11, 0 - ; A[3] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+24] - add r10, rax - mov QWORD PTR [rcx+24], r10 - adc r11, rdx - adc r12, 0 - ; A[4] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+32] - add r11, rax - mov QWORD PTR [rcx+32], r11 - adc r12, rdx - adc r10, 0 - ; A[5] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+40] - add r12, rax - mov QWORD PTR [rcx+40], r12 - adc r10, rdx - adc r11, 0 - ; A[6] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+48] - add r10, rax - mov QWORD PTR [rcx+48], r10 - adc r11, rdx - adc r12, 0 - ; A[7] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+56] - add r11, rax - mov QWORD PTR [rcx+56], r11 - adc r12, rdx - adc r10, 0 - ; A[8] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+64] - add r12, rax - mov QWORD PTR [rcx+64], r12 - adc r10, rdx - adc r11, 0 - ; A[9] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+72] - add r10, rax - mov QWORD PTR [rcx+72], r10 - adc r11, rdx - adc r12, 0 - ; A[10] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+80] - add r11, rax - mov QWORD PTR [rcx+80], r11 - adc r12, rdx - adc r10, 0 - ; A[11] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+88] - add r12, rax - mov QWORD PTR [rcx+88], r12 - adc r10, rdx - adc r11, 0 - ; A[12] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+96] - add r10, rax - mov QWORD PTR [rcx+96], r10 - adc r11, rdx - adc r12, 0 - ; A[13] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+104] - add r11, rax - mov QWORD PTR [rcx+104], r11 - adc r12, rdx - adc r10, 0 - ; A[14] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+112] - add r12, rax - mov QWORD PTR [rcx+112], r12 - adc r10, rdx - adc r11, 0 - ; A[15] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+120] - add r10, rax - mov QWORD PTR [rcx+120], r10 - adc r11, rdx - adc r12, 0 - ; A[16] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+128] - add r11, rax - mov QWORD PTR [rcx+128], r11 - adc r12, rdx - adc r10, 0 - ; A[17] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+136] - add r12, rax - mov QWORD PTR [rcx+136], r12 - adc r10, rdx - adc r11, 0 - ; A[18] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+144] - add r10, rax - mov QWORD PTR [rcx+144], r10 - adc r11, rdx - adc r12, 0 - ; A[19] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+152] - add r11, rax - mov QWORD PTR [rcx+152], r11 - adc r12, rdx - adc r10, 0 - ; A[20] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+160] - add r12, rax - mov QWORD PTR [rcx+160], r12 - adc r10, rdx - adc r11, 0 - ; A[21] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+168] - add r10, rax - mov QWORD PTR [rcx+168], r10 - adc r11, rdx - adc r12, 0 - ; A[22] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+176] - add r11, rax - mov QWORD PTR [rcx+176], r11 - adc r12, rdx - adc r10, 0 - ; A[23] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+184] - add r12, rax - mov QWORD PTR [rcx+184], r12 - adc r10, rdx - adc r11, 0 - ; A[24] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+192] - add r10, rax - mov QWORD PTR [rcx+192], r10 - adc r11, rdx - adc r12, 0 - ; A[25] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+200] - add r11, rax - mov QWORD PTR [rcx+200], r11 - adc r12, rdx - adc r10, 0 - ; A[26] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+208] - add r12, rax - mov QWORD PTR [rcx+208], r12 - adc r10, rdx - adc r11, 0 - ; A[27] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+216] - add r10, rax - mov QWORD PTR [rcx+216], r10 - adc r11, rdx - adc r12, 0 - ; A[28] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+224] - add r11, rax - mov QWORD PTR [rcx+224], r11 - adc r12, rdx - adc r10, 0 - ; A[29] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+232] - add r12, rax - mov QWORD PTR [rcx+232], r12 - adc r10, rdx - adc r11, 0 - ; A[30] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+240] - add r10, rax - mov QWORD PTR [rcx+240], r10 - adc r11, rdx - adc r12, 0 - ; A[31] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+248] - add r11, rax - mov QWORD PTR [rcx+248], r11 - adc r12, rdx - adc r10, 0 - ; A[32] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+256] - add r12, rax - mov QWORD PTR [rcx+256], r12 - adc r10, rdx - adc r11, 0 - ; A[33] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+264] - add r10, rax - mov QWORD PTR [rcx+264], r10 - adc r11, rdx - adc r12, 0 - ; A[34] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+272] - add r11, rax - mov QWORD PTR [rcx+272], r11 - adc r12, rdx - adc r10, 0 - ; A[35] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+280] - add r12, rax - mov QWORD PTR [rcx+280], r12 - adc r10, rdx - adc r11, 0 - ; A[36] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+288] - add r10, rax - mov QWORD PTR [rcx+288], r10 - adc r11, rdx - adc r12, 0 - ; A[37] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+296] - add r11, rax - mov QWORD PTR [rcx+296], r11 - adc r12, rdx - adc r10, 0 - ; A[38] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+304] - add r12, rax - mov QWORD PTR [rcx+304], r12 - adc r10, rdx - adc r11, 0 - ; A[39] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+312] - add r10, rax - mov QWORD PTR [rcx+312], r10 - adc r11, rdx - adc r12, 0 - ; A[40] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+320] - add r11, rax - mov QWORD PTR [rcx+320], r11 - adc r12, rdx - adc r10, 0 - ; A[41] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+328] - add r12, rax - mov QWORD PTR [rcx+328], r12 - adc r10, rdx - adc r11, 0 - ; A[42] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+336] - add r10, rax - mov QWORD PTR [rcx+336], r10 - adc r11, rdx - adc r12, 0 - ; A[43] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+344] - add r11, rax - mov QWORD PTR [rcx+344], r11 - adc r12, rdx - adc r10, 0 - ; A[44] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+352] - add r12, rax - mov QWORD PTR [rcx+352], r12 - adc r10, rdx - adc r11, 0 - ; A[45] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+360] - add r10, rax - mov QWORD PTR [rcx+360], r10 - adc r11, rdx - adc r12, 0 - ; A[46] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+368] - add r11, rax - mov QWORD PTR [rcx+368], r11 - adc r12, rdx - adc r10, 0 - ; A[47] * B - mov rax, r8 - mul QWORD PTR [r9+376] - add r12, rax - adc r10, rdx - mov QWORD PTR [rcx+376], r12 - mov QWORD PTR [rcx+384], r10 - pop r12 - ret -sp_3072_mul_d_48 ENDP -_TEXT ENDS -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_cond_sub_24 PROC - sub rsp, 192 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp], r10 - mov QWORD PTR [rsp+8], r11 - mov r10, QWORD PTR [r8+16] - mov r11, QWORD PTR [r8+24] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+16], r10 - mov QWORD PTR [rsp+24], r11 - mov r10, QWORD PTR [r8+32] - mov r11, QWORD PTR [r8+40] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+32], r10 - mov QWORD PTR [rsp+40], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+48], r10 - mov QWORD PTR [rsp+56], r11 - mov r10, QWORD PTR [r8+64] - mov r11, QWORD PTR [r8+72] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+64], r10 - mov QWORD PTR [rsp+72], r11 - mov r10, QWORD PTR [r8+80] - mov r11, QWORD PTR [r8+88] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+80], r10 - mov QWORD PTR [rsp+88], r11 - mov r10, QWORD PTR [r8+96] - mov r11, QWORD PTR [r8+104] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+96], r10 - mov QWORD PTR [rsp+104], r11 - mov r10, QWORD PTR [r8+112] - mov r11, QWORD PTR [r8+120] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+112], r10 - mov QWORD PTR [rsp+120], r11 - mov r10, QWORD PTR [r8+128] - mov r11, QWORD PTR [r8+136] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+128], r10 - mov QWORD PTR [rsp+136], r11 - mov r10, QWORD PTR [r8+144] - mov r11, QWORD PTR [r8+152] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+144], r10 - mov QWORD PTR [rsp+152], r11 - mov r10, QWORD PTR [r8+160] - mov r11, QWORD PTR [r8+168] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+160], r10 - mov QWORD PTR [rsp+168], r11 - mov r10, QWORD PTR [r8+176] - mov r11, QWORD PTR [r8+184] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+176], r10 - mov QWORD PTR [rsp+184], r11 - mov r10, QWORD PTR [rdx] - mov r8, QWORD PTR [rsp] - sub r10, r8 - mov r11, QWORD PTR [rdx+8] - mov r8, QWORD PTR [rsp+8] - sbb r11, r8 - mov QWORD PTR [rcx], r10 - mov r10, QWORD PTR [rdx+16] - mov r8, QWORD PTR [rsp+16] - sbb r10, r8 - mov QWORD PTR [rcx+8], r11 - mov r11, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rsp+24] - sbb r11, r8 - mov QWORD PTR [rcx+16], r10 - mov r10, QWORD PTR [rdx+32] - mov r8, QWORD PTR [rsp+32] - sbb r10, r8 - mov QWORD PTR [rcx+24], r11 - mov r11, QWORD PTR [rdx+40] - mov r8, QWORD PTR [rsp+40] - sbb r11, r8 - mov QWORD PTR [rcx+32], r10 - mov r10, QWORD PTR [rdx+48] - mov r8, QWORD PTR [rsp+48] - sbb r10, r8 - mov QWORD PTR [rcx+40], r11 - mov r11, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rsp+56] - sbb r11, r8 - mov QWORD PTR [rcx+48], r10 - mov r10, QWORD PTR [rdx+64] - mov r8, QWORD PTR [rsp+64] - sbb r10, r8 - mov QWORD PTR [rcx+56], r11 - mov r11, QWORD PTR [rdx+72] - mov r8, QWORD PTR [rsp+72] - sbb r11, r8 - mov QWORD PTR [rcx+64], r10 - mov r10, QWORD PTR [rdx+80] - mov r8, QWORD PTR [rsp+80] - sbb r10, r8 - mov QWORD PTR [rcx+72], r11 - mov r11, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rsp+88] - sbb r11, r8 - mov QWORD PTR [rcx+80], r10 - mov r10, QWORD PTR [rdx+96] - mov r8, QWORD PTR [rsp+96] - sbb r10, r8 - mov QWORD PTR [rcx+88], r11 - mov r11, QWORD PTR [rdx+104] - mov r8, QWORD PTR [rsp+104] - sbb r11, r8 - mov QWORD PTR [rcx+96], r10 - mov r10, QWORD PTR [rdx+112] - mov r8, QWORD PTR [rsp+112] - sbb r10, r8 - mov QWORD PTR [rcx+104], r11 - mov r11, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rsp+120] - sbb r11, r8 - mov QWORD PTR [rcx+112], r10 - mov r10, QWORD PTR [rdx+128] - mov r8, QWORD PTR [rsp+128] - sbb r10, r8 - mov QWORD PTR [rcx+120], r11 - mov r11, QWORD PTR [rdx+136] - mov r8, QWORD PTR [rsp+136] - sbb r11, r8 - mov QWORD PTR [rcx+128], r10 - mov r10, QWORD PTR [rdx+144] - mov r8, QWORD PTR [rsp+144] - sbb r10, r8 - mov QWORD PTR [rcx+136], r11 - mov r11, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rsp+152] - sbb r11, r8 - mov QWORD PTR [rcx+144], r10 - mov r10, QWORD PTR [rdx+160] - mov r8, QWORD PTR [rsp+160] - sbb r10, r8 - mov QWORD PTR [rcx+152], r11 - mov r11, QWORD PTR [rdx+168] - mov r8, QWORD PTR [rsp+168] - sbb r11, r8 - mov QWORD PTR [rcx+160], r10 - mov r10, QWORD PTR [rdx+176] - mov r8, QWORD PTR [rsp+176] - sbb r10, r8 - mov QWORD PTR [rcx+168], r11 - mov r11, QWORD PTR [rdx+184] - mov r8, QWORD PTR [rsp+184] - sbb r11, r8 - mov QWORD PTR [rcx+176], r10 - mov QWORD PTR [rcx+184], r11 - sbb rax, rax - add rsp, 192 - ret -sp_3072_cond_sub_24 ENDP -_TEXT ENDS -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mont_reduce_24 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - mov r9, rdx - xor rsi, rsi - ; i = 24 - mov r10, 24 - mov r15, QWORD PTR [rcx] - mov rdi, QWORD PTR [rcx+8] -L_3072_mont_reduce_24_loop: - ; mu = a[i] * mp - mov r13, r15 - imul r13, r8 - ; a[i+0] += m[0] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9] - add r15, rax - adc r12, rdx - ; a[i+1] += m[1] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+8] - mov r15, rdi - add r15, rax - adc r11, rdx - add r15, r12 - adc r11, 0 - ; a[i+2] += m[2] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+16] - mov rdi, QWORD PTR [rcx+16] - add rdi, rax - adc r12, rdx - add rdi, r11 - adc r12, 0 - ; a[i+3] += m[3] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+24] - mov r14, QWORD PTR [rcx+24] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+24], r14 - adc r11, 0 - ; a[i+4] += m[4] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+32] - mov r14, QWORD PTR [rcx+32] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+32], r14 - adc r12, 0 - ; a[i+5] += m[5] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+40] - mov r14, QWORD PTR [rcx+40] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+40], r14 - adc r11, 0 - ; a[i+6] += m[6] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+48] - mov r14, QWORD PTR [rcx+48] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+48], r14 - adc r12, 0 - ; a[i+7] += m[7] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+56] - mov r14, QWORD PTR [rcx+56] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+56], r14 - adc r11, 0 - ; a[i+8] += m[8] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+64] - mov r14, QWORD PTR [rcx+64] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+64], r14 - adc r12, 0 - ; a[i+9] += m[9] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+72] - mov r14, QWORD PTR [rcx+72] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+72], r14 - adc r11, 0 - ; a[i+10] += m[10] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+80] - mov r14, QWORD PTR [rcx+80] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+80], r14 - adc r12, 0 - ; a[i+11] += m[11] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+88] - mov r14, QWORD PTR [rcx+88] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+88], r14 - adc r11, 0 - ; a[i+12] += m[12] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+96] - mov r14, QWORD PTR [rcx+96] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+96], r14 - adc r12, 0 - ; a[i+13] += m[13] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+104] - mov r14, QWORD PTR [rcx+104] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+104], r14 - adc r11, 0 - ; a[i+14] += m[14] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+112] - mov r14, QWORD PTR [rcx+112] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+112], r14 - adc r12, 0 - ; a[i+15] += m[15] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+120] - mov r14, QWORD PTR [rcx+120] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+120], r14 - adc r11, 0 - ; a[i+16] += m[16] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+128] - mov r14, QWORD PTR [rcx+128] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+128], r14 - adc r12, 0 - ; a[i+17] += m[17] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+136] - mov r14, QWORD PTR [rcx+136] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+136], r14 - adc r11, 0 - ; a[i+18] += m[18] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+144] - mov r14, QWORD PTR [rcx+144] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+144], r14 - adc r12, 0 - ; a[i+19] += m[19] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+152] - mov r14, QWORD PTR [rcx+152] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+152], r14 - adc r11, 0 - ; a[i+20] += m[20] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+160] - mov r14, QWORD PTR [rcx+160] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+160], r14 - adc r12, 0 - ; a[i+21] += m[21] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+168] - mov r14, QWORD PTR [rcx+168] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+168], r14 - adc r11, 0 - ; a[i+22] += m[22] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+176] - mov r14, QWORD PTR [rcx+176] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+176], r14 - adc r12, 0 - ; a[i+23] += m[23] * mu - mov rax, r13 - mul QWORD PTR [r9+184] - mov r14, QWORD PTR [rcx+184] - add r12, rax - adc rdx, rsi - mov rsi, 0 - adc rsi, 0 - add r14, r12 - mov QWORD PTR [rcx+184], r14 - adc QWORD PTR [rcx+192], rdx - adc rsi, 0 - ; i -= 1 - add rcx, 8 - dec r10 - jnz L_3072_mont_reduce_24_loop - mov QWORD PTR [rcx], r15 - mov QWORD PTR [rcx+8], rdi - neg rsi -IFDEF _WIN64 - mov r8, r9 - mov r9, rsi -ELSE - mov r9, rsi - mov r8, r9 -ENDIF - mov rdx, rcx - mov rcx, rcx - sub rcx, 192 - call sp_3072_cond_sub_24 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mont_reduce_24 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_cond_sub_avx2_24 PROC - push r12 - mov r12, QWORD PTR [r8] - mov r10, QWORD PTR [rdx] - pext r12, r12, r9 - sub r10, r12 - mov r12, QWORD PTR [r8+8] - mov r11, QWORD PTR [rdx+8] - pext r12, r12, r9 - mov QWORD PTR [rcx], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+16] - mov r12, QWORD PTR [rdx+16] - pext r10, r10, r9 - mov QWORD PTR [rcx+8], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+24] - mov r10, QWORD PTR [rdx+24] - pext r11, r11, r9 - mov QWORD PTR [rcx+16], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+32] - mov r11, QWORD PTR [rdx+32] - pext r12, r12, r9 - mov QWORD PTR [rcx+24], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+40] - mov r12, QWORD PTR [rdx+40] - pext r10, r10, r9 - mov QWORD PTR [rcx+32], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+48] - pext r11, r11, r9 - mov QWORD PTR [rcx+40], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+56] - mov r11, QWORD PTR [rdx+56] - pext r12, r12, r9 - mov QWORD PTR [rcx+48], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+64] - mov r12, QWORD PTR [rdx+64] - pext r10, r10, r9 - mov QWORD PTR [rcx+56], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+72] - mov r10, QWORD PTR [rdx+72] - pext r11, r11, r9 - mov QWORD PTR [rcx+64], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+80] - mov r11, QWORD PTR [rdx+80] - pext r12, r12, r9 - mov QWORD PTR [rcx+72], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+88] - mov r12, QWORD PTR [rdx+88] - pext r10, r10, r9 - mov QWORD PTR [rcx+80], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+96] - pext r11, r11, r9 - mov QWORD PTR [rcx+88], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+104] - mov r11, QWORD PTR [rdx+104] - pext r12, r12, r9 - mov QWORD PTR [rcx+96], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+112] - mov r12, QWORD PTR [rdx+112] - pext r10, r10, r9 - mov QWORD PTR [rcx+104], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+120] - mov r10, QWORD PTR [rdx+120] - pext r11, r11, r9 - mov QWORD PTR [rcx+112], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+128] - mov r11, QWORD PTR [rdx+128] - pext r12, r12, r9 - mov QWORD PTR [rcx+120], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+136] - mov r12, QWORD PTR [rdx+136] - pext r10, r10, r9 - mov QWORD PTR [rcx+128], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+144] - mov r10, QWORD PTR [rdx+144] - pext r11, r11, r9 - mov QWORD PTR [rcx+136], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+152] - mov r11, QWORD PTR [rdx+152] - pext r12, r12, r9 - mov QWORD PTR [rcx+144], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+160] - mov r12, QWORD PTR [rdx+160] - pext r10, r10, r9 - mov QWORD PTR [rcx+152], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+168] - mov r10, QWORD PTR [rdx+168] - pext r11, r11, r9 - mov QWORD PTR [rcx+160], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+176] - mov r11, QWORD PTR [rdx+176] - pext r12, r12, r9 - mov QWORD PTR [rcx+168], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+184] - mov r12, QWORD PTR [rdx+184] - pext r10, r10, r9 - mov QWORD PTR [rcx+176], r11 - sbb r12, r10 - mov QWORD PTR [rcx+184], r12 - sbb rax, rax - pop r12 - ret -sp_3072_cond_sub_avx2_24 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_d_24 PROC - push r12 - mov r9, rdx - ; A[0] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9] - mov r10, rax - mov r11, rdx - mov QWORD PTR [rcx], r10 - ; A[1] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+8] - add r11, rax - mov QWORD PTR [rcx+8], r11 - adc r12, rdx - adc r10, 0 - ; A[2] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+16] - add r12, rax - mov QWORD PTR [rcx+16], r12 - adc r10, rdx - adc r11, 0 - ; A[3] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+24] - add r10, rax - mov QWORD PTR [rcx+24], r10 - adc r11, rdx - adc r12, 0 - ; A[4] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+32] - add r11, rax - mov QWORD PTR [rcx+32], r11 - adc r12, rdx - adc r10, 0 - ; A[5] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+40] - add r12, rax - mov QWORD PTR [rcx+40], r12 - adc r10, rdx - adc r11, 0 - ; A[6] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+48] - add r10, rax - mov QWORD PTR [rcx+48], r10 - adc r11, rdx - adc r12, 0 - ; A[7] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+56] - add r11, rax - mov QWORD PTR [rcx+56], r11 - adc r12, rdx - adc r10, 0 - ; A[8] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+64] - add r12, rax - mov QWORD PTR [rcx+64], r12 - adc r10, rdx - adc r11, 0 - ; A[9] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+72] - add r10, rax - mov QWORD PTR [rcx+72], r10 - adc r11, rdx - adc r12, 0 - ; A[10] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+80] - add r11, rax - mov QWORD PTR [rcx+80], r11 - adc r12, rdx - adc r10, 0 - ; A[11] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+88] - add r12, rax - mov QWORD PTR [rcx+88], r12 - adc r10, rdx - adc r11, 0 - ; A[12] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+96] - add r10, rax - mov QWORD PTR [rcx+96], r10 - adc r11, rdx - adc r12, 0 - ; A[13] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+104] - add r11, rax - mov QWORD PTR [rcx+104], r11 - adc r12, rdx - adc r10, 0 - ; A[14] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+112] - add r12, rax - mov QWORD PTR [rcx+112], r12 - adc r10, rdx - adc r11, 0 - ; A[15] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+120] - add r10, rax - mov QWORD PTR [rcx+120], r10 - adc r11, rdx - adc r12, 0 - ; A[16] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+128] - add r11, rax - mov QWORD PTR [rcx+128], r11 - adc r12, rdx - adc r10, 0 - ; A[17] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+136] - add r12, rax - mov QWORD PTR [rcx+136], r12 - adc r10, rdx - adc r11, 0 - ; A[18] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+144] - add r10, rax - mov QWORD PTR [rcx+144], r10 - adc r11, rdx - adc r12, 0 - ; A[19] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+152] - add r11, rax - mov QWORD PTR [rcx+152], r11 - adc r12, rdx - adc r10, 0 - ; A[20] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+160] - add r12, rax - mov QWORD PTR [rcx+160], r12 - adc r10, rdx - adc r11, 0 - ; A[21] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+168] - add r10, rax - mov QWORD PTR [rcx+168], r10 - adc r11, rdx - adc r12, 0 - ; A[22] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+176] - add r11, rax - mov QWORD PTR [rcx+176], r11 - adc r12, rdx - adc r10, 0 - ; A[23] * B - mov rax, r8 - mul QWORD PTR [r9+184] - add r12, rax - adc r10, rdx - mov QWORD PTR [rcx+184], r12 - mov QWORD PTR [rcx+192], r10 - pop r12 - ret -sp_3072_mul_d_24 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_d_avx2_24 PROC - push r12 - push r13 - mov rax, rdx - ; A[0] * B - mov rdx, r8 - xor r13, r13 - mulx r12, r11, QWORD PTR [rax] - mov QWORD PTR [rcx], r11 - ; A[1] * B - mulx r10, r9, QWORD PTR [rax+8] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+8], r12 - ; A[2] * B - mulx r10, r9, QWORD PTR [rax+16] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+16], r11 - ; A[3] * B - mulx r10, r9, QWORD PTR [rax+24] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+24], r12 - ; A[4] * B - mulx r10, r9, QWORD PTR [rax+32] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+32], r11 - ; A[5] * B - mulx r10, r9, QWORD PTR [rax+40] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+40], r12 - ; A[6] * B - mulx r10, r9, QWORD PTR [rax+48] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+48], r11 - ; A[7] * B - mulx r10, r9, QWORD PTR [rax+56] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+56], r12 - ; A[8] * B - mulx r10, r9, QWORD PTR [rax+64] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+64], r11 - ; A[9] * B - mulx r10, r9, QWORD PTR [rax+72] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+72], r12 - ; A[10] * B - mulx r10, r9, QWORD PTR [rax+80] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+80], r11 - ; A[11] * B - mulx r10, r9, QWORD PTR [rax+88] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+88], r12 - ; A[12] * B - mulx r10, r9, QWORD PTR [rax+96] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+96], r11 - ; A[13] * B - mulx r10, r9, QWORD PTR [rax+104] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+104], r12 - ; A[14] * B - mulx r10, r9, QWORD PTR [rax+112] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+112], r11 - ; A[15] * B - mulx r10, r9, QWORD PTR [rax+120] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+120], r12 - ; A[16] * B - mulx r10, r9, QWORD PTR [rax+128] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+128], r11 - ; A[17] * B - mulx r10, r9, QWORD PTR [rax+136] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+136], r12 - ; A[18] * B - mulx r10, r9, QWORD PTR [rax+144] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+144], r11 - ; A[19] * B - mulx r10, r9, QWORD PTR [rax+152] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+152], r12 - ; A[20] * B - mulx r10, r9, QWORD PTR [rax+160] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+160], r11 - ; A[21] * B - mulx r10, r9, QWORD PTR [rax+168] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+168], r12 - ; A[22] * B - mulx r10, r9, QWORD PTR [rax+176] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+176], r11 - ; A[23] * B - mulx r10, r9, QWORD PTR [rax+184] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - adcx r11, r13 - mov QWORD PTR [rcx+184], r12 - mov QWORD PTR [rcx+192], r11 - pop r13 - pop r12 - ret -sp_3072_mul_d_avx2_24 ENDP -_TEXT ENDS -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -div_3072_word_asm_24 PROC - mov r9, rdx - mov rax, r9 - mov rdx, rcx - div r8 - ret -div_3072_word_asm_24 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_cmp_24 PROC - push r12 - xor r9, r9 - mov r8, -1 - mov rax, -1 - mov r10, 1 - mov r11, QWORD PTR [rcx+184] - mov r12, QWORD PTR [rdx+184] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+176] - mov r12, QWORD PTR [rdx+176] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+168] - mov r12, QWORD PTR [rdx+168] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+160] - mov r12, QWORD PTR [rdx+160] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+152] - mov r12, QWORD PTR [rdx+152] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+144] - mov r12, QWORD PTR [rdx+144] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+136] - mov r12, QWORD PTR [rdx+136] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+128] - mov r12, QWORD PTR [rdx+128] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+120] - mov r12, QWORD PTR [rdx+120] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+112] - mov r12, QWORD PTR [rdx+112] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+104] - mov r12, QWORD PTR [rdx+104] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+96] - mov r12, QWORD PTR [rdx+96] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+88] - mov r12, QWORD PTR [rdx+88] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+80] - mov r12, QWORD PTR [rdx+80] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+72] - mov r12, QWORD PTR [rdx+72] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+64] - mov r12, QWORD PTR [rdx+64] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+56] - mov r12, QWORD PTR [rdx+56] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+48] - mov r12, QWORD PTR [rdx+48] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+40] - mov r12, QWORD PTR [rdx+40] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+32] - mov r12, QWORD PTR [rdx+32] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+24] - mov r12, QWORD PTR [rdx+24] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+16] - mov r12, QWORD PTR [rdx+16] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+8] - mov r12, QWORD PTR [rdx+8] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx] - mov r12, QWORD PTR [rdx] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - xor rax, r8 - pop r12 - ret -sp_3072_cmp_24 ENDP -_TEXT ENDS -IFNDEF WC_NO_CACHE_RESISTANT -_TEXT SEGMENT READONLY PARA -sp_3072_get_from_table_24 PROC - sub rsp, 128 - movdqu OWORD PTR [rsp], xmm6 - movdqu OWORD PTR [rsp+16], xmm7 - movdqu OWORD PTR [rsp+32], xmm8 - movdqu OWORD PTR [rsp+48], xmm9 - movdqu OWORD PTR [rsp+64], xmm10 - movdqu OWORD PTR [rsp+80], xmm11 - movdqu OWORD PTR [rsp+96], xmm12 - movdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - pxor xmm13, xmm13 - pshufd xmm11, xmm11, 0 - pshufd xmm10, xmm10, 0 - ; START: 0-7 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 0-7 - ; START: 8-15 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 8-15 - ; START: 16-23 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - ; END: 16-23 - movdqu xmm6, OWORD PTR [rsp] - movdqu xmm7, OWORD PTR [rsp+16] - movdqu xmm8, OWORD PTR [rsp+32] - movdqu xmm9, OWORD PTR [rsp+48] - movdqu xmm10, OWORD PTR [rsp+64] - movdqu xmm11, OWORD PTR [rsp+80] - movdqu xmm12, OWORD PTR [rsp+96] - movdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 - ret -sp_3072_get_from_table_24 ENDP -_TEXT ENDS -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mont_reduce_avx2_24 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - push rbx - push rbp - mov r9, rcx - mov r10, rdx - xor rbp, rbp - ; i = 24 - mov r11, 24 - mov r14, QWORD PTR [r9] - mov r15, QWORD PTR [r9+8] - mov rdi, QWORD PTR [r9+16] - mov rsi, QWORD PTR [r9+24] - add r9, 96 - xor rbp, rbp -L_3072_mont_reduce_avx2_24_loop: - ; mu = a[i] * mp - mov rdx, r14 - mov r12, r14 - imul rdx, r8 - xor rbx, rbx - ; a[i+0] += m[0] * mu - mulx rcx, rax, QWORD PTR [r10] - mov r14, r15 - adcx r12, rax - adox r14, rcx - ; a[i+1] += m[1] * mu - mulx rcx, rax, QWORD PTR [r10+8] - mov r15, rdi - adcx r14, rax - adox r15, rcx - ; a[i+2] += m[2] * mu - mulx rcx, rax, QWORD PTR [r10+16] - mov rdi, rsi - adcx r15, rax - adox rdi, rcx - ; a[i+3] += m[3] * mu - mulx rcx, rax, QWORD PTR [r10+24] - mov rsi, QWORD PTR [r9+-64] - adcx rdi, rax - adox rsi, rcx - ; a[i+4] += m[4] * mu - mulx rcx, rax, QWORD PTR [r10+32] - mov r13, QWORD PTR [r9+-56] - adcx rsi, rax - adox r13, rcx - ; a[i+5] += m[5] * mu - mulx rcx, rax, QWORD PTR [r10+40] - mov r12, QWORD PTR [r9+-48] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-56], r13 - ; a[i+6] += m[6] * mu - mulx rcx, rax, QWORD PTR [r10+48] - mov r13, QWORD PTR [r9+-40] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-48], r12 - ; a[i+7] += m[7] * mu - mulx rcx, rax, QWORD PTR [r10+56] - mov r12, QWORD PTR [r9+-32] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-40], r13 - ; a[i+8] += m[8] * mu - mulx rcx, rax, QWORD PTR [r10+64] - mov r13, QWORD PTR [r9+-24] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-32], r12 - ; a[i+9] += m[9] * mu - mulx rcx, rax, QWORD PTR [r10+72] - mov r12, QWORD PTR [r9+-16] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-24], r13 - ; a[i+10] += m[10] * mu - mulx rcx, rax, QWORD PTR [r10+80] - mov r13, QWORD PTR [r9+-8] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-16], r12 - ; a[i+11] += m[11] * mu - mulx rcx, rax, QWORD PTR [r10+88] - mov r12, QWORD PTR [r9] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-8], r13 - ; a[i+12] += m[12] * mu - mulx rcx, rax, QWORD PTR [r10+96] - mov r13, QWORD PTR [r9+8] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9], r12 - ; a[i+13] += m[13] * mu - mulx rcx, rax, QWORD PTR [r10+104] - mov r12, QWORD PTR [r9+16] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+8], r13 - ; a[i+14] += m[14] * mu - mulx rcx, rax, QWORD PTR [r10+112] - mov r13, QWORD PTR [r9+24] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+16], r12 - ; a[i+15] += m[15] * mu - mulx rcx, rax, QWORD PTR [r10+120] - mov r12, QWORD PTR [r9+32] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+24], r13 - ; a[i+16] += m[16] * mu - mulx rcx, rax, QWORD PTR [r10+128] - mov r13, QWORD PTR [r9+40] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+32], r12 - ; a[i+17] += m[17] * mu - mulx rcx, rax, QWORD PTR [r10+136] - mov r12, QWORD PTR [r9+48] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+40], r13 - ; a[i+18] += m[18] * mu - mulx rcx, rax, QWORD PTR [r10+144] - mov r13, QWORD PTR [r9+56] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+48], r12 - ; a[i+19] += m[19] * mu - mulx rcx, rax, QWORD PTR [r10+152] - mov r12, QWORD PTR [r9+64] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+56], r13 - ; a[i+20] += m[20] * mu - mulx rcx, rax, QWORD PTR [r10+160] - mov r13, QWORD PTR [r9+72] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+64], r12 - ; a[i+21] += m[21] * mu - mulx rcx, rax, QWORD PTR [r10+168] - mov r12, QWORD PTR [r9+80] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+72], r13 - ; a[i+22] += m[22] * mu - mulx rcx, rax, QWORD PTR [r10+176] - mov r13, QWORD PTR [r9+88] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+80], r12 - ; a[i+23] += m[23] * mu - mulx rcx, rax, QWORD PTR [r10+184] - mov r12, QWORD PTR [r9+96] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+88], r13 - adcx r12, rbp - mov rbp, rbx - mov QWORD PTR [r9+96], r12 - adox rbp, rbx - adcx rbp, rbx - ; a += 1 - add r9, 8 - ; i -= 1 - sub r11, 1 - jnz L_3072_mont_reduce_avx2_24_loop - sub r9, 96 - neg rbp - mov r8, r9 - sub r9, 192 - mov rcx, QWORD PTR [r10] - mov rdx, r14 - pext rcx, rcx, rbp - sub rdx, rcx - mov rcx, QWORD PTR [r10+8] - mov rax, r15 - pext rcx, rcx, rbp - mov QWORD PTR [r9], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+16] - mov rcx, rdi - pext rdx, rdx, rbp - mov QWORD PTR [r9+8], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+24] - mov rdx, rsi - pext rax, rax, rbp - mov QWORD PTR [r9+16], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+32] - mov rax, QWORD PTR [r8+32] - pext rcx, rcx, rbp - mov QWORD PTR [r9+24], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+40] - mov rcx, QWORD PTR [r8+40] - pext rdx, rdx, rbp - mov QWORD PTR [r9+32], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+48] - mov rdx, QWORD PTR [r8+48] - pext rax, rax, rbp - mov QWORD PTR [r9+40], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+56] - mov rax, QWORD PTR [r8+56] - pext rcx, rcx, rbp - mov QWORD PTR [r9+48], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+64] - mov rcx, QWORD PTR [r8+64] - pext rdx, rdx, rbp - mov QWORD PTR [r9+56], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+72] - mov rdx, QWORD PTR [r8+72] - pext rax, rax, rbp - mov QWORD PTR [r9+64], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+80] - mov rax, QWORD PTR [r8+80] - pext rcx, rcx, rbp - mov QWORD PTR [r9+72], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+88] - mov rcx, QWORD PTR [r8+88] - pext rdx, rdx, rbp - mov QWORD PTR [r9+80], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+96] - mov rdx, QWORD PTR [r8+96] - pext rax, rax, rbp - mov QWORD PTR [r9+88], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+104] - mov rax, QWORD PTR [r8+104] - pext rcx, rcx, rbp - mov QWORD PTR [r9+96], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+112] - mov rcx, QWORD PTR [r8+112] - pext rdx, rdx, rbp - mov QWORD PTR [r9+104], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+120] - mov rdx, QWORD PTR [r8+120] - pext rax, rax, rbp - mov QWORD PTR [r9+112], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+128] - mov rax, QWORD PTR [r8+128] - pext rcx, rcx, rbp - mov QWORD PTR [r9+120], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+136] - mov rcx, QWORD PTR [r8+136] - pext rdx, rdx, rbp - mov QWORD PTR [r9+128], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+144] - mov rdx, QWORD PTR [r8+144] - pext rax, rax, rbp - mov QWORD PTR [r9+136], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+152] - mov rax, QWORD PTR [r8+152] - pext rcx, rcx, rbp - mov QWORD PTR [r9+144], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+160] - mov rcx, QWORD PTR [r8+160] - pext rdx, rdx, rbp - mov QWORD PTR [r9+152], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+168] - mov rdx, QWORD PTR [r8+168] - pext rax, rax, rbp - mov QWORD PTR [r9+160], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+176] - mov rax, QWORD PTR [r8+176] - pext rcx, rcx, rbp - mov QWORD PTR [r9+168], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+184] - mov rcx, QWORD PTR [r8+184] - pext rdx, rdx, rbp - mov QWORD PTR [r9+176], rax - sbb rcx, rdx - mov QWORD PTR [r9+184], rcx - pop rbp - pop rbx - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mont_reduce_avx2_24 ENDP -_TEXT ENDS -ENDIF -IFNDEF WC_NO_CACHE_RESISTANT -_TEXT SEGMENT READONLY PARA -sp_3072_get_from_table_avx2_24 PROC - sub rsp, 128 - vmovdqu OWORD PTR [rsp], xmm6 - vmovdqu OWORD PTR [rsp+16], xmm7 - vmovdqu OWORD PTR [rsp+32], xmm8 - vmovdqu OWORD PTR [rsp+48], xmm9 - vmovdqu OWORD PTR [rsp+64], xmm10 - vmovdqu OWORD PTR [rsp+80], xmm11 - vmovdqu OWORD PTR [rsp+96], xmm12 - vmovdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - 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 - mov r9, QWORD PTR [rdx] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vmovdqu ymm2, YMMWORD PTR [r9+64] - vmovdqu ymm3, YMMWORD PTR [r9+96] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpand ymm2, ymm2, ymm12 - vpand ymm3, ymm3, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpor ymm6, ymm6, ymm2 - vpor ymm7, ymm7, ymm3 - vpaddd ymm13, ymm13, ymm11 - vmovdqu YMMWORD PTR [rcx], ymm4 - vmovdqu YMMWORD PTR [rcx+32], ymm5 - vmovdqu YMMWORD PTR [rcx+64], ymm6 - vmovdqu YMMWORD PTR [rcx+96], ymm7 - add rcx, 128 - ; END: 0-15 - ; START: 16-23 - vpxor ymm13, ymm13, ymm13 - vpxor ymm4, ymm4, ymm4 - vpxor ymm5, ymm5, ymm5 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 16 - mov r9, QWORD PTR [rdx+128] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 17 - mov r9, QWORD PTR [rdx+136] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 18 - mov r9, QWORD PTR [rdx+144] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 19 - mov r9, QWORD PTR [rdx+152] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 20 - mov r9, QWORD PTR [rdx+160] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 21 - mov r9, QWORD PTR [rdx+168] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 22 - mov r9, QWORD PTR [rdx+176] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 23 - mov r9, QWORD PTR [rdx+184] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 24 - mov r9, QWORD PTR [rdx+192] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 25 - mov r9, QWORD PTR [rdx+200] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 26 - mov r9, QWORD PTR [rdx+208] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 27 - mov r9, QWORD PTR [rdx+216] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 28 - mov r9, QWORD PTR [rdx+224] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 29 - mov r9, QWORD PTR [rdx+232] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 30 - mov r9, QWORD PTR [rdx+240] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 31 - mov r9, QWORD PTR [rdx+248] - add r9, 128 - vpcmpeqd ymm12, ymm13, ymm10 - vmovdqu ymm0, YMMWORD PTR [r9] - vmovdqu ymm1, YMMWORD PTR [r9+32] - vpand ymm0, ymm0, ymm12 - vpand ymm1, ymm1, ymm12 - vpor ymm4, ymm4, ymm0 - vpor ymm5, ymm5, ymm1 - vpaddd ymm13, ymm13, ymm11 - vmovdqu YMMWORD PTR [rcx], ymm4 - vmovdqu YMMWORD PTR [rcx+32], ymm5 - ; END: 16-23 - vmovdqu xmm6, OWORD PTR [rsp] - vmovdqu xmm7, OWORD PTR [rsp+16] - vmovdqu xmm8, OWORD PTR [rsp+32] - vmovdqu xmm9, OWORD PTR [rsp+48] - vmovdqu xmm10, OWORD PTR [rsp+64] - vmovdqu xmm11, OWORD PTR [rsp+80] - vmovdqu xmm12, OWORD PTR [rsp+96] - vmovdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 - ret -sp_3072_get_from_table_avx2_24 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_cond_sub_48 PROC - sub rsp, 384 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp], r10 - mov QWORD PTR [rsp+8], r11 - mov r10, QWORD PTR [r8+16] - mov r11, QWORD PTR [r8+24] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+16], r10 - mov QWORD PTR [rsp+24], r11 - mov r10, QWORD PTR [r8+32] - mov r11, QWORD PTR [r8+40] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+32], r10 - mov QWORD PTR [rsp+40], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+48], r10 - mov QWORD PTR [rsp+56], r11 - mov r10, QWORD PTR [r8+64] - mov r11, QWORD PTR [r8+72] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+64], r10 - mov QWORD PTR [rsp+72], r11 - mov r10, QWORD PTR [r8+80] - mov r11, QWORD PTR [r8+88] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+80], r10 - mov QWORD PTR [rsp+88], r11 - mov r10, QWORD PTR [r8+96] - mov r11, QWORD PTR [r8+104] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+96], r10 - mov QWORD PTR [rsp+104], r11 - mov r10, QWORD PTR [r8+112] - mov r11, QWORD PTR [r8+120] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+112], r10 - mov QWORD PTR [rsp+120], r11 - mov r10, QWORD PTR [r8+128] - mov r11, QWORD PTR [r8+136] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+128], r10 - mov QWORD PTR [rsp+136], r11 - mov r10, QWORD PTR [r8+144] - mov r11, QWORD PTR [r8+152] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+144], r10 - mov QWORD PTR [rsp+152], r11 - mov r10, QWORD PTR [r8+160] - mov r11, QWORD PTR [r8+168] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+160], r10 - mov QWORD PTR [rsp+168], r11 - mov r10, QWORD PTR [r8+176] - mov r11, QWORD PTR [r8+184] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+176], r10 - mov QWORD PTR [rsp+184], r11 - mov r10, QWORD PTR [r8+192] - mov r11, QWORD PTR [r8+200] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+192], r10 - mov QWORD PTR [rsp+200], r11 - mov r10, QWORD PTR [r8+208] - mov r11, QWORD PTR [r8+216] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+208], r10 - mov QWORD PTR [rsp+216], r11 - mov r10, QWORD PTR [r8+224] - mov r11, QWORD PTR [r8+232] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+224], r10 - mov QWORD PTR [rsp+232], r11 - mov r10, QWORD PTR [r8+240] - mov r11, QWORD PTR [r8+248] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+240], r10 - mov QWORD PTR [rsp+248], r11 - mov r10, QWORD PTR [r8+256] - mov r11, QWORD PTR [r8+264] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+256], r10 - mov QWORD PTR [rsp+264], r11 - mov r10, QWORD PTR [r8+272] - mov r11, QWORD PTR [r8+280] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+272], r10 - mov QWORD PTR [rsp+280], r11 - mov r10, QWORD PTR [r8+288] - mov r11, QWORD PTR [r8+296] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+288], r10 - mov QWORD PTR [rsp+296], r11 - mov r10, QWORD PTR [r8+304] - mov r11, QWORD PTR [r8+312] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+304], r10 - mov QWORD PTR [rsp+312], r11 - mov r10, QWORD PTR [r8+320] - mov r11, QWORD PTR [r8+328] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+320], r10 - mov QWORD PTR [rsp+328], r11 - mov r10, QWORD PTR [r8+336] - mov r11, QWORD PTR [r8+344] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+336], r10 - mov QWORD PTR [rsp+344], r11 - mov r10, QWORD PTR [r8+352] - mov r11, QWORD PTR [r8+360] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+352], r10 - mov QWORD PTR [rsp+360], r11 - mov r10, QWORD PTR [r8+368] - mov r11, QWORD PTR [r8+376] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+368], r10 - mov QWORD PTR [rsp+376], r11 - mov r10, QWORD PTR [rdx] - mov r8, QWORD PTR [rsp] - sub r10, r8 - mov r11, QWORD PTR [rdx+8] - mov r8, QWORD PTR [rsp+8] - sbb r11, r8 - mov QWORD PTR [rcx], r10 - mov r10, QWORD PTR [rdx+16] - mov r8, QWORD PTR [rsp+16] - sbb r10, r8 - mov QWORD PTR [rcx+8], r11 - mov r11, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rsp+24] - sbb r11, r8 - mov QWORD PTR [rcx+16], r10 - mov r10, QWORD PTR [rdx+32] - mov r8, QWORD PTR [rsp+32] - sbb r10, r8 - mov QWORD PTR [rcx+24], r11 - mov r11, QWORD PTR [rdx+40] - mov r8, QWORD PTR [rsp+40] - sbb r11, r8 - mov QWORD PTR [rcx+32], r10 - mov r10, QWORD PTR [rdx+48] - mov r8, QWORD PTR [rsp+48] - sbb r10, r8 - mov QWORD PTR [rcx+40], r11 - mov r11, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rsp+56] - sbb r11, r8 - mov QWORD PTR [rcx+48], r10 - mov r10, QWORD PTR [rdx+64] - mov r8, QWORD PTR [rsp+64] - sbb r10, r8 - mov QWORD PTR [rcx+56], r11 - mov r11, QWORD PTR [rdx+72] - mov r8, QWORD PTR [rsp+72] - sbb r11, r8 - mov QWORD PTR [rcx+64], r10 - mov r10, QWORD PTR [rdx+80] - mov r8, QWORD PTR [rsp+80] - sbb r10, r8 - mov QWORD PTR [rcx+72], r11 - mov r11, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rsp+88] - sbb r11, r8 - mov QWORD PTR [rcx+80], r10 - mov r10, QWORD PTR [rdx+96] - mov r8, QWORD PTR [rsp+96] - sbb r10, r8 - mov QWORD PTR [rcx+88], r11 - mov r11, QWORD PTR [rdx+104] - mov r8, QWORD PTR [rsp+104] - sbb r11, r8 - mov QWORD PTR [rcx+96], r10 - mov r10, QWORD PTR [rdx+112] - mov r8, QWORD PTR [rsp+112] - sbb r10, r8 - mov QWORD PTR [rcx+104], r11 - mov r11, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rsp+120] - sbb r11, r8 - mov QWORD PTR [rcx+112], r10 - mov r10, QWORD PTR [rdx+128] - mov r8, QWORD PTR [rsp+128] - sbb r10, r8 - mov QWORD PTR [rcx+120], r11 - mov r11, QWORD PTR [rdx+136] - mov r8, QWORD PTR [rsp+136] - sbb r11, r8 - mov QWORD PTR [rcx+128], r10 - mov r10, QWORD PTR [rdx+144] - mov r8, QWORD PTR [rsp+144] - sbb r10, r8 - mov QWORD PTR [rcx+136], r11 - mov r11, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rsp+152] - sbb r11, r8 - mov QWORD PTR [rcx+144], r10 - mov r10, QWORD PTR [rdx+160] - mov r8, QWORD PTR [rsp+160] - sbb r10, r8 - mov QWORD PTR [rcx+152], r11 - mov r11, QWORD PTR [rdx+168] - mov r8, QWORD PTR [rsp+168] - sbb r11, r8 - mov QWORD PTR [rcx+160], r10 - mov r10, QWORD PTR [rdx+176] - mov r8, QWORD PTR [rsp+176] - sbb r10, r8 - mov QWORD PTR [rcx+168], r11 - mov r11, QWORD PTR [rdx+184] - mov r8, QWORD PTR [rsp+184] - sbb r11, r8 - mov QWORD PTR [rcx+176], r10 - mov r10, QWORD PTR [rdx+192] - mov r8, QWORD PTR [rsp+192] - sbb r10, r8 - mov QWORD PTR [rcx+184], r11 - mov r11, QWORD PTR [rdx+200] - mov r8, QWORD PTR [rsp+200] - sbb r11, r8 - mov QWORD PTR [rcx+192], r10 - mov r10, QWORD PTR [rdx+208] - mov r8, QWORD PTR [rsp+208] - sbb r10, r8 - mov QWORD PTR [rcx+200], r11 - mov r11, QWORD PTR [rdx+216] - mov r8, QWORD PTR [rsp+216] - sbb r11, r8 - mov QWORD PTR [rcx+208], r10 - mov r10, QWORD PTR [rdx+224] - mov r8, QWORD PTR [rsp+224] - sbb r10, r8 - mov QWORD PTR [rcx+216], r11 - mov r11, QWORD PTR [rdx+232] - mov r8, QWORD PTR [rsp+232] - sbb r11, r8 - mov QWORD PTR [rcx+224], r10 - mov r10, QWORD PTR [rdx+240] - mov r8, QWORD PTR [rsp+240] - sbb r10, r8 - mov QWORD PTR [rcx+232], r11 - mov r11, QWORD PTR [rdx+248] - mov r8, QWORD PTR [rsp+248] - sbb r11, r8 - mov QWORD PTR [rcx+240], r10 - mov r10, QWORD PTR [rdx+256] - mov r8, QWORD PTR [rsp+256] - sbb r10, r8 - mov QWORD PTR [rcx+248], r11 - mov r11, QWORD PTR [rdx+264] - mov r8, QWORD PTR [rsp+264] - sbb r11, r8 - mov QWORD PTR [rcx+256], r10 - mov r10, QWORD PTR [rdx+272] - mov r8, QWORD PTR [rsp+272] - sbb r10, r8 - mov QWORD PTR [rcx+264], r11 - mov r11, QWORD PTR [rdx+280] - mov r8, QWORD PTR [rsp+280] - sbb r11, r8 - mov QWORD PTR [rcx+272], r10 - mov r10, QWORD PTR [rdx+288] - mov r8, QWORD PTR [rsp+288] - sbb r10, r8 - mov QWORD PTR [rcx+280], r11 - mov r11, QWORD PTR [rdx+296] - mov r8, QWORD PTR [rsp+296] - sbb r11, r8 - mov QWORD PTR [rcx+288], r10 - mov r10, QWORD PTR [rdx+304] - mov r8, QWORD PTR [rsp+304] - sbb r10, r8 - mov QWORD PTR [rcx+296], r11 - mov r11, QWORD PTR [rdx+312] - mov r8, QWORD PTR [rsp+312] - sbb r11, r8 - mov QWORD PTR [rcx+304], r10 - mov r10, QWORD PTR [rdx+320] - mov r8, QWORD PTR [rsp+320] - sbb r10, r8 - mov QWORD PTR [rcx+312], r11 - mov r11, QWORD PTR [rdx+328] - mov r8, QWORD PTR [rsp+328] - sbb r11, r8 - mov QWORD PTR [rcx+320], r10 - mov r10, QWORD PTR [rdx+336] - mov r8, QWORD PTR [rsp+336] - sbb r10, r8 - mov QWORD PTR [rcx+328], r11 - mov r11, QWORD PTR [rdx+344] - mov r8, QWORD PTR [rsp+344] - sbb r11, r8 - mov QWORD PTR [rcx+336], r10 - mov r10, QWORD PTR [rdx+352] - mov r8, QWORD PTR [rsp+352] - sbb r10, r8 - mov QWORD PTR [rcx+344], r11 - mov r11, QWORD PTR [rdx+360] - mov r8, QWORD PTR [rsp+360] - sbb r11, r8 - mov QWORD PTR [rcx+352], r10 - mov r10, QWORD PTR [rdx+368] - mov r8, QWORD PTR [rsp+368] - sbb r10, r8 - mov QWORD PTR [rcx+360], r11 - mov r11, QWORD PTR [rdx+376] - mov r8, QWORD PTR [rsp+376] - sbb r11, r8 - mov QWORD PTR [rcx+368], r10 - mov QWORD PTR [rcx+376], r11 - sbb rax, rax - add rsp, 384 - ret -sp_3072_cond_sub_48 ENDP -_TEXT ENDS -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mont_reduce_48 PROC - push r12 - push r13 - push r14 - push r15 - push rdi - push rsi - mov r9, rdx - xor rsi, rsi - ; i = 48 - mov r10, 48 - mov r15, QWORD PTR [rcx] - mov rdi, QWORD PTR [rcx+8] -L_3072_mont_reduce_48_loop: - ; mu = a[i] * mp - mov r13, r15 - imul r13, r8 - ; a[i+0] += m[0] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9] - add r15, rax - adc r12, rdx - ; a[i+1] += m[1] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+8] - mov r15, rdi - add r15, rax - adc r11, rdx - add r15, r12 - adc r11, 0 - ; a[i+2] += m[2] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+16] - mov rdi, QWORD PTR [rcx+16] - add rdi, rax - adc r12, rdx - add rdi, r11 - adc r12, 0 - ; a[i+3] += m[3] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+24] - mov r14, QWORD PTR [rcx+24] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+24], r14 - adc r11, 0 - ; a[i+4] += m[4] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+32] - mov r14, QWORD PTR [rcx+32] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+32], r14 - adc r12, 0 - ; a[i+5] += m[5] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+40] - mov r14, QWORD PTR [rcx+40] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+40], r14 - adc r11, 0 - ; a[i+6] += m[6] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+48] - mov r14, QWORD PTR [rcx+48] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+48], r14 - adc r12, 0 - ; a[i+7] += m[7] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+56] - mov r14, QWORD PTR [rcx+56] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+56], r14 - adc r11, 0 - ; a[i+8] += m[8] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+64] - mov r14, QWORD PTR [rcx+64] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+64], r14 - adc r12, 0 - ; a[i+9] += m[9] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+72] - mov r14, QWORD PTR [rcx+72] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+72], r14 - adc r11, 0 - ; a[i+10] += m[10] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+80] - mov r14, QWORD PTR [rcx+80] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+80], r14 - adc r12, 0 - ; a[i+11] += m[11] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+88] - mov r14, QWORD PTR [rcx+88] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+88], r14 - adc r11, 0 - ; a[i+12] += m[12] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+96] - mov r14, QWORD PTR [rcx+96] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+96], r14 - adc r12, 0 - ; a[i+13] += m[13] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+104] - mov r14, QWORD PTR [rcx+104] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+104], r14 - adc r11, 0 - ; a[i+14] += m[14] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+112] - mov r14, QWORD PTR [rcx+112] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+112], r14 - adc r12, 0 - ; a[i+15] += m[15] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+120] - mov r14, QWORD PTR [rcx+120] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+120], r14 - adc r11, 0 - ; a[i+16] += m[16] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+128] - mov r14, QWORD PTR [rcx+128] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+128], r14 - adc r12, 0 - ; a[i+17] += m[17] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+136] - mov r14, QWORD PTR [rcx+136] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+136], r14 - adc r11, 0 - ; a[i+18] += m[18] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+144] - mov r14, QWORD PTR [rcx+144] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+144], r14 - adc r12, 0 - ; a[i+19] += m[19] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+152] - mov r14, QWORD PTR [rcx+152] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+152], r14 - adc r11, 0 - ; a[i+20] += m[20] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+160] - mov r14, QWORD PTR [rcx+160] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+160], r14 - adc r12, 0 - ; a[i+21] += m[21] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+168] - mov r14, QWORD PTR [rcx+168] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+168], r14 - adc r11, 0 - ; a[i+22] += m[22] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+176] - mov r14, QWORD PTR [rcx+176] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+176], r14 - adc r12, 0 - ; a[i+23] += m[23] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+184] - mov r14, QWORD PTR [rcx+184] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+184], r14 - adc r11, 0 - ; a[i+24] += m[24] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+192] - mov r14, QWORD PTR [rcx+192] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+192], r14 - adc r12, 0 - ; a[i+25] += m[25] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+200] - mov r14, QWORD PTR [rcx+200] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+200], r14 - adc r11, 0 - ; a[i+26] += m[26] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+208] - mov r14, QWORD PTR [rcx+208] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+208], r14 - adc r12, 0 - ; a[i+27] += m[27] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+216] - mov r14, QWORD PTR [rcx+216] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+216], r14 - adc r11, 0 - ; a[i+28] += m[28] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+224] - mov r14, QWORD PTR [rcx+224] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+224], r14 - adc r12, 0 - ; a[i+29] += m[29] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+232] - mov r14, QWORD PTR [rcx+232] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+232], r14 - adc r11, 0 - ; a[i+30] += m[30] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+240] - mov r14, QWORD PTR [rcx+240] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+240], r14 - adc r12, 0 - ; a[i+31] += m[31] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+248] - mov r14, QWORD PTR [rcx+248] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+248], r14 - adc r11, 0 - ; a[i+32] += m[32] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+256] - mov r14, QWORD PTR [rcx+256] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+256], r14 - adc r12, 0 - ; a[i+33] += m[33] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+264] - mov r14, QWORD PTR [rcx+264] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+264], r14 - adc r11, 0 - ; a[i+34] += m[34] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+272] - mov r14, QWORD PTR [rcx+272] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+272], r14 - adc r12, 0 - ; a[i+35] += m[35] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+280] - mov r14, QWORD PTR [rcx+280] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+280], r14 - adc r11, 0 - ; a[i+36] += m[36] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+288] - mov r14, QWORD PTR [rcx+288] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+288], r14 - adc r12, 0 - ; a[i+37] += m[37] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+296] - mov r14, QWORD PTR [rcx+296] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+296], r14 - adc r11, 0 - ; a[i+38] += m[38] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+304] - mov r14, QWORD PTR [rcx+304] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+304], r14 - adc r12, 0 - ; a[i+39] += m[39] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+312] - mov r14, QWORD PTR [rcx+312] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+312], r14 - adc r11, 0 - ; a[i+40] += m[40] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+320] - mov r14, QWORD PTR [rcx+320] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+320], r14 - adc r12, 0 - ; a[i+41] += m[41] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+328] - mov r14, QWORD PTR [rcx+328] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+328], r14 - adc r11, 0 - ; a[i+42] += m[42] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+336] - mov r14, QWORD PTR [rcx+336] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+336], r14 - adc r12, 0 - ; a[i+43] += m[43] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+344] - mov r14, QWORD PTR [rcx+344] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+344], r14 - adc r11, 0 - ; a[i+44] += m[44] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+352] - mov r14, QWORD PTR [rcx+352] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+352], r14 - adc r12, 0 - ; a[i+45] += m[45] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+360] - mov r14, QWORD PTR [rcx+360] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+360], r14 - adc r11, 0 - ; a[i+46] += m[46] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+368] - mov r14, QWORD PTR [rcx+368] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+368], r14 - adc r12, 0 - ; a[i+47] += m[47] * mu - mov rax, r13 - mul QWORD PTR [r9+376] - mov r14, QWORD PTR [rcx+376] - add r12, rax - adc rdx, rsi - mov rsi, 0 - adc rsi, 0 - add r14, r12 - mov QWORD PTR [rcx+376], r14 - adc QWORD PTR [rcx+384], rdx - adc rsi, 0 - ; i -= 1 - add rcx, 8 - dec r10 - jnz L_3072_mont_reduce_48_loop - mov QWORD PTR [rcx], r15 - mov QWORD PTR [rcx+8], rdi - neg rsi -IFDEF _WIN64 - mov r8, r9 - mov r9, rsi -ELSE - mov r9, rsi - mov r8, r9 -ENDIF - mov rdx, rcx - mov rcx, rcx - sub rcx, 384 - call sp_3072_cond_sub_48 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 - ret -sp_3072_mont_reduce_48 ENDP -_TEXT ENDS -; /* Sub b from a into r. (r = a - b) -; * -; * r A single precision integer. -; * a A single precision integer. -; * b A single precision integer. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_sub_48 PROC - mov r9, QWORD PTR [rdx] - sub r9, QWORD PTR [r8] - mov r10, QWORD PTR [rdx+8] - mov QWORD PTR [rcx], r9 - sbb r10, QWORD PTR [r8+8] - mov r9, QWORD PTR [rdx+16] - mov QWORD PTR [rcx+8], r10 - sbb r9, QWORD PTR [r8+16] - mov r10, QWORD PTR [rdx+24] - mov QWORD PTR [rcx+16], r9 - sbb r10, QWORD PTR [r8+24] - mov r9, QWORD PTR [rdx+32] - mov QWORD PTR [rcx+24], r10 - sbb r9, QWORD PTR [r8+32] - mov r10, QWORD PTR [rdx+40] - mov QWORD PTR [rcx+32], r9 - sbb r10, QWORD PTR [r8+40] - mov r9, QWORD PTR [rdx+48] - mov QWORD PTR [rcx+40], r10 - sbb r9, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+56] - mov QWORD PTR [rcx+48], r9 - sbb r10, QWORD PTR [r8+56] - mov r9, QWORD PTR [rdx+64] - mov QWORD PTR [rcx+56], r10 - sbb r9, QWORD PTR [r8+64] - mov r10, QWORD PTR [rdx+72] - mov QWORD PTR [rcx+64], r9 - sbb r10, QWORD PTR [r8+72] - mov r9, QWORD PTR [rdx+80] - mov QWORD PTR [rcx+72], r10 - sbb r9, QWORD PTR [r8+80] - mov r10, QWORD PTR [rdx+88] - mov QWORD PTR [rcx+80], r9 - sbb r10, QWORD PTR [r8+88] - mov r9, QWORD PTR [rdx+96] - mov QWORD PTR [rcx+88], r10 - sbb r9, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+104] - mov QWORD PTR [rcx+96], r9 - sbb r10, QWORD PTR [r8+104] - mov r9, QWORD PTR [rdx+112] - mov QWORD PTR [rcx+104], r10 - sbb r9, QWORD PTR [r8+112] - mov r10, QWORD PTR [rdx+120] - mov QWORD PTR [rcx+112], r9 - sbb r10, QWORD PTR [r8+120] - mov r9, QWORD PTR [rdx+128] - mov QWORD PTR [rcx+120], r10 - sbb r9, QWORD PTR [r8+128] - mov r10, QWORD PTR [rdx+136] - mov QWORD PTR [rcx+128], r9 - sbb r10, QWORD PTR [r8+136] - mov r9, QWORD PTR [rdx+144] - mov QWORD PTR [rcx+136], r10 - sbb r9, QWORD PTR [r8+144] - mov r10, QWORD PTR [rdx+152] - mov QWORD PTR [rcx+144], r9 - sbb r10, QWORD PTR [r8+152] - mov r9, QWORD PTR [rdx+160] - mov QWORD PTR [rcx+152], r10 - sbb r9, QWORD PTR [r8+160] - mov r10, QWORD PTR [rdx+168] - mov QWORD PTR [rcx+160], r9 - sbb r10, QWORD PTR [r8+168] - mov r9, QWORD PTR [rdx+176] - mov QWORD PTR [rcx+168], r10 - sbb r9, QWORD PTR [r8+176] - mov r10, QWORD PTR [rdx+184] - mov QWORD PTR [rcx+176], r9 - sbb r10, QWORD PTR [r8+184] - mov r9, QWORD PTR [rdx+192] - mov QWORD PTR [rcx+184], r10 - sbb r9, QWORD PTR [r8+192] - mov r10, QWORD PTR [rdx+200] - mov QWORD PTR [rcx+192], r9 - sbb r10, QWORD PTR [r8+200] - mov r9, QWORD PTR [rdx+208] - mov QWORD PTR [rcx+200], r10 - sbb r9, QWORD PTR [r8+208] - mov r10, QWORD PTR [rdx+216] - mov QWORD PTR [rcx+208], r9 - sbb r10, QWORD PTR [r8+216] - mov r9, QWORD PTR [rdx+224] - mov QWORD PTR [rcx+216], r10 - sbb r9, QWORD PTR [r8+224] - mov r10, QWORD PTR [rdx+232] - mov QWORD PTR [rcx+224], r9 - sbb r10, QWORD PTR [r8+232] - mov r9, QWORD PTR [rdx+240] - mov QWORD PTR [rcx+232], r10 - sbb r9, QWORD PTR [r8+240] - mov r10, QWORD PTR [rdx+248] - mov QWORD PTR [rcx+240], r9 - sbb r10, QWORD PTR [r8+248] - mov r9, QWORD PTR [rdx+256] - mov QWORD PTR [rcx+248], r10 - sbb r9, QWORD PTR [r8+256] - mov r10, QWORD PTR [rdx+264] - mov QWORD PTR [rcx+256], r9 - sbb r10, QWORD PTR [r8+264] - mov r9, QWORD PTR [rdx+272] - mov QWORD PTR [rcx+264], r10 - sbb r9, QWORD PTR [r8+272] - mov r10, QWORD PTR [rdx+280] - mov QWORD PTR [rcx+272], r9 - sbb r10, QWORD PTR [r8+280] - mov r9, QWORD PTR [rdx+288] - mov QWORD PTR [rcx+280], r10 - sbb r9, QWORD PTR [r8+288] - mov r10, QWORD PTR [rdx+296] - mov QWORD PTR [rcx+288], r9 - sbb r10, QWORD PTR [r8+296] - mov r9, QWORD PTR [rdx+304] - mov QWORD PTR [rcx+296], r10 - sbb r9, QWORD PTR [r8+304] - mov r10, QWORD PTR [rdx+312] - mov QWORD PTR [rcx+304], r9 - sbb r10, QWORD PTR [r8+312] - mov r9, QWORD PTR [rdx+320] - mov QWORD PTR [rcx+312], r10 - sbb r9, QWORD PTR [r8+320] - mov r10, QWORD PTR [rdx+328] - mov QWORD PTR [rcx+320], r9 - sbb r10, QWORD PTR [r8+328] - mov r9, QWORD PTR [rdx+336] - mov QWORD PTR [rcx+328], r10 - sbb r9, QWORD PTR [r8+336] - mov r10, QWORD PTR [rdx+344] - mov QWORD PTR [rcx+336], r9 - sbb r10, QWORD PTR [r8+344] - mov r9, QWORD PTR [rdx+352] - mov QWORD PTR [rcx+344], r10 - sbb r9, QWORD PTR [r8+352] - mov r10, QWORD PTR [rdx+360] - mov QWORD PTR [rcx+352], r9 - sbb r10, QWORD PTR [r8+360] - mov r9, QWORD PTR [rdx+368] - mov QWORD PTR [rcx+360], r10 - sbb r9, QWORD PTR [r8+368] - mov r10, QWORD PTR [rdx+376] - mov QWORD PTR [rcx+368], r9 - sbb r10, QWORD PTR [r8+376] - mov QWORD PTR [rcx+376], r10 - sbb rax, rax - ret -sp_3072_sub_48 ENDP -_TEXT ENDS -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mul_d_avx2_48 PROC - push r12 - push r13 - mov rax, rdx - ; A[0] * B - mov rdx, r8 - xor r13, r13 - mulx r12, r11, QWORD PTR [rax] - mov QWORD PTR [rcx], r11 - ; A[1] * B - mulx r10, r9, QWORD PTR [rax+8] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+8], r12 - ; A[2] * B - mulx r10, r9, QWORD PTR [rax+16] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+16], r11 - ; A[3] * B - mulx r10, r9, QWORD PTR [rax+24] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+24], r12 - ; A[4] * B - mulx r10, r9, QWORD PTR [rax+32] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+32], r11 - ; A[5] * B - mulx r10, r9, QWORD PTR [rax+40] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+40], r12 - ; A[6] * B - mulx r10, r9, QWORD PTR [rax+48] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+48], r11 - ; A[7] * B - mulx r10, r9, QWORD PTR [rax+56] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+56], r12 - ; A[8] * B - mulx r10, r9, QWORD PTR [rax+64] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+64], r11 - ; A[9] * B - mulx r10, r9, QWORD PTR [rax+72] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+72], r12 - ; A[10] * B - mulx r10, r9, QWORD PTR [rax+80] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+80], r11 - ; A[11] * B - mulx r10, r9, QWORD PTR [rax+88] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+88], r12 - ; A[12] * B - mulx r10, r9, QWORD PTR [rax+96] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+96], r11 - ; A[13] * B - mulx r10, r9, QWORD PTR [rax+104] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+104], r12 - ; A[14] * B - mulx r10, r9, QWORD PTR [rax+112] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+112], r11 - ; A[15] * B - mulx r10, r9, QWORD PTR [rax+120] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+120], r12 - ; A[16] * B - mulx r10, r9, QWORD PTR [rax+128] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+128], r11 - ; A[17] * B - mulx r10, r9, QWORD PTR [rax+136] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+136], r12 - ; A[18] * B - mulx r10, r9, QWORD PTR [rax+144] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+144], r11 - ; A[19] * B - mulx r10, r9, QWORD PTR [rax+152] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+152], r12 - ; A[20] * B - mulx r10, r9, QWORD PTR [rax+160] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+160], r11 - ; A[21] * B - mulx r10, r9, QWORD PTR [rax+168] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+168], r12 - ; A[22] * B - mulx r10, r9, QWORD PTR [rax+176] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+176], r11 - ; A[23] * B - mulx r10, r9, QWORD PTR [rax+184] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+184], r12 - ; A[24] * B - mulx r10, r9, QWORD PTR [rax+192] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+192], r11 - ; A[25] * B - mulx r10, r9, QWORD PTR [rax+200] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+200], r12 - ; A[26] * B - mulx r10, r9, QWORD PTR [rax+208] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+208], r11 - ; A[27] * B - mulx r10, r9, QWORD PTR [rax+216] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+216], r12 - ; A[28] * B - mulx r10, r9, QWORD PTR [rax+224] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+224], r11 - ; A[29] * B - mulx r10, r9, QWORD PTR [rax+232] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+232], r12 - ; A[30] * B - mulx r10, r9, QWORD PTR [rax+240] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+240], r11 - ; A[31] * B - mulx r10, r9, QWORD PTR [rax+248] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+248], r12 - ; A[32] * B - mulx r10, r9, QWORD PTR [rax+256] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+256], r11 - ; A[33] * B - mulx r10, r9, QWORD PTR [rax+264] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+264], r12 - ; A[34] * B - mulx r10, r9, QWORD PTR [rax+272] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+272], r11 - ; A[35] * B - mulx r10, r9, QWORD PTR [rax+280] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+280], r12 - ; A[36] * B - mulx r10, r9, QWORD PTR [rax+288] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+288], r11 - ; A[37] * B - mulx r10, r9, QWORD PTR [rax+296] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+296], r12 - ; A[38] * B - mulx r10, r9, QWORD PTR [rax+304] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+304], r11 - ; A[39] * B - mulx r10, r9, QWORD PTR [rax+312] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+312], r12 - ; A[40] * B - mulx r10, r9, QWORD PTR [rax+320] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+320], r11 - ; A[41] * B - mulx r10, r9, QWORD PTR [rax+328] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+328], r12 - ; A[42] * B - mulx r10, r9, QWORD PTR [rax+336] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+336], r11 - ; A[43] * B - mulx r10, r9, QWORD PTR [rax+344] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+344], r12 - ; A[44] * B - mulx r10, r9, QWORD PTR [rax+352] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+352], r11 - ; A[45] * B - mulx r10, r9, QWORD PTR [rax+360] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+360], r12 - ; A[46] * B - mulx r10, r9, QWORD PTR [rax+368] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+368], r11 - ; A[47] * B - mulx r10, r9, QWORD PTR [rax+376] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - adcx r11, r13 - mov QWORD PTR [rcx+376], r12 - mov QWORD PTR [rcx+384], r11 - pop r13 - pop r12 - ret -sp_3072_mul_d_avx2_48 ENDP -_TEXT ENDS -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -div_3072_word_asm_48 PROC - mov r9, rdx - mov rax, r9 - mov rdx, rcx - div r8 - ret -div_3072_word_asm_48 ENDP -_TEXT ENDS -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_cond_sub_avx2_48 PROC - push r12 - mov r12, QWORD PTR [r8] - mov r10, QWORD PTR [rdx] - pext r12, r12, r9 - sub r10, r12 - mov r12, QWORD PTR [r8+8] - mov r11, QWORD PTR [rdx+8] - pext r12, r12, r9 - mov QWORD PTR [rcx], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+16] - mov r12, QWORD PTR [rdx+16] - pext r10, r10, r9 - mov QWORD PTR [rcx+8], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+24] - mov r10, QWORD PTR [rdx+24] - pext r11, r11, r9 - mov QWORD PTR [rcx+16], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+32] - mov r11, QWORD PTR [rdx+32] - pext r12, r12, r9 - mov QWORD PTR [rcx+24], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+40] - mov r12, QWORD PTR [rdx+40] - pext r10, r10, r9 - mov QWORD PTR [rcx+32], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+48] - pext r11, r11, r9 - mov QWORD PTR [rcx+40], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+56] - mov r11, QWORD PTR [rdx+56] - pext r12, r12, r9 - mov QWORD PTR [rcx+48], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+64] - mov r12, QWORD PTR [rdx+64] - pext r10, r10, r9 - mov QWORD PTR [rcx+56], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+72] - mov r10, QWORD PTR [rdx+72] - pext r11, r11, r9 - mov QWORD PTR [rcx+64], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+80] - mov r11, QWORD PTR [rdx+80] - pext r12, r12, r9 - mov QWORD PTR [rcx+72], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+88] - mov r12, QWORD PTR [rdx+88] - pext r10, r10, r9 - mov QWORD PTR [rcx+80], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+96] - pext r11, r11, r9 - mov QWORD PTR [rcx+88], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+104] - mov r11, QWORD PTR [rdx+104] - pext r12, r12, r9 - mov QWORD PTR [rcx+96], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+112] - mov r12, QWORD PTR [rdx+112] - pext r10, r10, r9 - mov QWORD PTR [rcx+104], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+120] - mov r10, QWORD PTR [rdx+120] - pext r11, r11, r9 - mov QWORD PTR [rcx+112], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+128] - mov r11, QWORD PTR [rdx+128] - pext r12, r12, r9 - mov QWORD PTR [rcx+120], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+136] - mov r12, QWORD PTR [rdx+136] - pext r10, r10, r9 - mov QWORD PTR [rcx+128], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+144] - mov r10, QWORD PTR [rdx+144] - pext r11, r11, r9 - mov QWORD PTR [rcx+136], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+152] - mov r11, QWORD PTR [rdx+152] - pext r12, r12, r9 - mov QWORD PTR [rcx+144], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+160] - mov r12, QWORD PTR [rdx+160] - pext r10, r10, r9 - mov QWORD PTR [rcx+152], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+168] - mov r10, QWORD PTR [rdx+168] - pext r11, r11, r9 - mov QWORD PTR [rcx+160], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+176] - mov r11, QWORD PTR [rdx+176] - pext r12, r12, r9 - mov QWORD PTR [rcx+168], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+184] - mov r12, QWORD PTR [rdx+184] - pext r10, r10, r9 - mov QWORD PTR [rcx+176], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+192] - mov r10, QWORD PTR [rdx+192] - pext r11, r11, r9 - mov QWORD PTR [rcx+184], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+200] - mov r11, QWORD PTR [rdx+200] - pext r12, r12, r9 - mov QWORD PTR [rcx+192], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+208] - mov r12, QWORD PTR [rdx+208] - pext r10, r10, r9 - mov QWORD PTR [rcx+200], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+216] - mov r10, QWORD PTR [rdx+216] - pext r11, r11, r9 - mov QWORD PTR [rcx+208], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+224] - mov r11, QWORD PTR [rdx+224] - pext r12, r12, r9 - mov QWORD PTR [rcx+216], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+232] - mov r12, QWORD PTR [rdx+232] - pext r10, r10, r9 - mov QWORD PTR [rcx+224], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+240] - mov r10, QWORD PTR [rdx+240] - pext r11, r11, r9 - mov QWORD PTR [rcx+232], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+248] - mov r11, QWORD PTR [rdx+248] - pext r12, r12, r9 - mov QWORD PTR [rcx+240], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+256] - mov r12, QWORD PTR [rdx+256] - pext r10, r10, r9 - mov QWORD PTR [rcx+248], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+264] - mov r10, QWORD PTR [rdx+264] - pext r11, r11, r9 - mov QWORD PTR [rcx+256], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+272] - mov r11, QWORD PTR [rdx+272] - pext r12, r12, r9 - mov QWORD PTR [rcx+264], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+280] - mov r12, QWORD PTR [rdx+280] - pext r10, r10, r9 - mov QWORD PTR [rcx+272], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+288] - mov r10, QWORD PTR [rdx+288] - pext r11, r11, r9 - mov QWORD PTR [rcx+280], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+296] - mov r11, QWORD PTR [rdx+296] - pext r12, r12, r9 - mov QWORD PTR [rcx+288], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+304] - mov r12, QWORD PTR [rdx+304] - pext r10, r10, r9 - mov QWORD PTR [rcx+296], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+312] - mov r10, QWORD PTR [rdx+312] - pext r11, r11, r9 - mov QWORD PTR [rcx+304], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+320] - mov r11, QWORD PTR [rdx+320] - pext r12, r12, r9 - mov QWORD PTR [rcx+312], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+328] - mov r12, QWORD PTR [rdx+328] - pext r10, r10, r9 - mov QWORD PTR [rcx+320], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+336] - mov r10, QWORD PTR [rdx+336] - pext r11, r11, r9 - mov QWORD PTR [rcx+328], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+344] - mov r11, QWORD PTR [rdx+344] - pext r12, r12, r9 - mov QWORD PTR [rcx+336], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+352] - mov r12, QWORD PTR [rdx+352] - pext r10, r10, r9 - mov QWORD PTR [rcx+344], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+360] - mov r10, QWORD PTR [rdx+360] - pext r11, r11, r9 - mov QWORD PTR [rcx+352], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+368] - mov r11, QWORD PTR [rdx+368] - pext r12, r12, r9 - mov QWORD PTR [rcx+360], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+376] - mov r12, QWORD PTR [rdx+376] - pext r10, r10, r9 - mov QWORD PTR [rcx+368], r11 - sbb r12, r10 - mov QWORD PTR [rcx+376], r12 - sbb rax, rax - pop r12 - ret -sp_3072_cond_sub_avx2_48 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_cmp_48 PROC - push r12 - xor r9, r9 - mov r8, -1 - mov rax, -1 - mov r10, 1 - mov r11, QWORD PTR [rcx+376] - mov r12, QWORD PTR [rdx+376] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+368] - mov r12, QWORD PTR [rdx+368] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+360] - mov r12, QWORD PTR [rdx+360] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+352] - mov r12, QWORD PTR [rdx+352] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+344] - mov r12, QWORD PTR [rdx+344] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+336] - mov r12, QWORD PTR [rdx+336] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+328] - mov r12, QWORD PTR [rdx+328] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+320] - mov r12, QWORD PTR [rdx+320] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+312] - mov r12, QWORD PTR [rdx+312] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+304] - mov r12, QWORD PTR [rdx+304] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+296] - mov r12, QWORD PTR [rdx+296] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+288] - mov r12, QWORD PTR [rdx+288] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+280] - mov r12, QWORD PTR [rdx+280] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+272] - mov r12, QWORD PTR [rdx+272] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+264] - mov r12, QWORD PTR [rdx+264] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+256] - mov r12, QWORD PTR [rdx+256] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+248] - mov r12, QWORD PTR [rdx+248] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+240] - mov r12, QWORD PTR [rdx+240] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+232] - mov r12, QWORD PTR [rdx+232] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+224] - mov r12, QWORD PTR [rdx+224] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+216] - mov r12, QWORD PTR [rdx+216] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+208] - mov r12, QWORD PTR [rdx+208] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+200] - mov r12, QWORD PTR [rdx+200] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+192] - mov r12, QWORD PTR [rdx+192] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+184] - mov r12, QWORD PTR [rdx+184] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+176] - mov r12, QWORD PTR [rdx+176] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+168] - mov r12, QWORD PTR [rdx+168] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+160] - mov r12, QWORD PTR [rdx+160] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+152] - mov r12, QWORD PTR [rdx+152] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+144] - mov r12, QWORD PTR [rdx+144] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+136] - mov r12, QWORD PTR [rdx+136] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+128] - mov r12, QWORD PTR [rdx+128] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+120] - mov r12, QWORD PTR [rdx+120] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+112] - mov r12, QWORD PTR [rdx+112] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+104] - mov r12, QWORD PTR [rdx+104] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+96] - mov r12, QWORD PTR [rdx+96] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+88] - mov r12, QWORD PTR [rdx+88] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+80] - mov r12, QWORD PTR [rdx+80] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+72] - mov r12, QWORD PTR [rdx+72] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+64] - mov r12, QWORD PTR [rdx+64] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+56] - mov r12, QWORD PTR [rdx+56] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+48] - mov r12, QWORD PTR [rdx+48] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+40] - mov r12, QWORD PTR [rdx+40] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+32] - mov r12, QWORD PTR [rdx+32] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+24] - mov r12, QWORD PTR [rdx+24] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+16] - mov r12, QWORD PTR [rdx+16] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+8] - mov r12, QWORD PTR [rdx+8] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx] - mov r12, QWORD PTR [rdx] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - xor rax, r8 - pop r12 - ret -sp_3072_cmp_48 ENDP -_TEXT ENDS -IFNDEF WC_NO_CACHE_RESISTANT -_TEXT SEGMENT READONLY PARA -sp_3072_get_from_table_48 PROC - sub rsp, 128 - movdqu OWORD PTR [rsp], xmm6 - movdqu OWORD PTR [rsp+16], xmm7 - movdqu OWORD PTR [rsp+32], xmm8 - movdqu OWORD PTR [rsp+48], xmm9 - movdqu OWORD PTR [rsp+64], xmm10 - movdqu OWORD PTR [rsp+80], xmm11 - movdqu OWORD PTR [rsp+96], xmm12 - movdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - pxor xmm13, xmm13 - pshufd xmm11, xmm11, 0 - pshufd xmm10, xmm10, 0 - ; START: 0-7 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 0-7 - ; START: 8-15 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 8-15 - ; START: 16-23 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 16-23 - ; START: 24-31 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 24-31 - ; START: 32-39 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 32-39 - ; START: 40-47 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - ; END: 40-47 - movdqu xmm6, OWORD PTR [rsp] - movdqu xmm7, OWORD PTR [rsp+16] - movdqu xmm8, OWORD PTR [rsp+32] - movdqu xmm9, OWORD PTR [rsp+48] - movdqu xmm10, OWORD PTR [rsp+64] - movdqu xmm11, OWORD PTR [rsp+80] - movdqu xmm12, OWORD PTR [rsp+96] - movdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 - ret -sp_3072_get_from_table_48 ENDP -_TEXT ENDS -ENDIF -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. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_mont_reduce_avx2_48 PROC +sp_2048_mont_reduce_avx2_32 PROC push r12 push r13 push r14 @@ -38684,15 +12012,15 @@ sp_3072_mont_reduce_avx2_48 PROC mov r9, rcx mov r10, rdx xor rbp, rbp - ; i = 48 - mov r11, 48 + ; i = 32 + mov r11, 32 mov r14, QWORD PTR [r9] mov r15, QWORD PTR [r9+8] mov rdi, QWORD PTR [r9+16] mov rsi, QWORD PTR [r9+24] - add r9, 192 + add r9, 128 xor rbp, rbp -L_3072_mont_reduce_avx2_48_loop: +L_2048_mont_reduce_avx2_32_loop: ; mu = a[i] * mp mov rdx, r14 mov r12, r14 @@ -38715,286 +12043,190 @@ L_3072_mont_reduce_avx2_48_loop: adox rdi, rcx ; a[i+3] += m[3] * mu mulx rcx, rax, QWORD PTR [r10+24] - mov rsi, QWORD PTR [r9+-160] + mov rsi, QWORD PTR [r9+-96] adcx rdi, rax adox rsi, rcx ; a[i+4] += m[4] * mu mulx rcx, rax, QWORD PTR [r10+32] - mov r13, QWORD PTR [r9+-152] + mov r13, QWORD PTR [r9+-88] adcx rsi, rax adox r13, rcx ; a[i+5] += m[5] * mu mulx rcx, rax, QWORD PTR [r10+40] - mov r12, QWORD PTR [r9+-144] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-152], r13 - ; a[i+6] += m[6] * mu - mulx rcx, rax, QWORD PTR [r10+48] - mov r13, QWORD PTR [r9+-136] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-144], r12 - ; a[i+7] += m[7] * mu - mulx rcx, rax, QWORD PTR [r10+56] - mov r12, QWORD PTR [r9+-128] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-136], r13 - ; a[i+8] += m[8] * mu - mulx rcx, rax, QWORD PTR [r10+64] - mov r13, QWORD PTR [r9+-120] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-128], r12 - ; a[i+9] += m[9] * mu - mulx rcx, rax, QWORD PTR [r10+72] - mov r12, QWORD PTR [r9+-112] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-120], r13 - ; a[i+10] += m[10] * mu - mulx rcx, rax, QWORD PTR [r10+80] - mov r13, QWORD PTR [r9+-104] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-112], r12 - ; a[i+11] += m[11] * mu - mulx rcx, rax, QWORD PTR [r10+88] - mov r12, QWORD PTR [r9+-96] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+-104], r13 - ; a[i+12] += m[12] * mu - mulx rcx, rax, QWORD PTR [r10+96] - mov r13, QWORD PTR [r9+-88] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+-96], r12 - ; a[i+13] += m[13] * mu - mulx rcx, rax, QWORD PTR [r10+104] mov r12, QWORD PTR [r9+-80] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+-88], r13 - ; a[i+14] += m[14] * mu - mulx rcx, rax, QWORD PTR [r10+112] + ; a[i+6] += m[6] * mu + mulx rcx, rax, QWORD PTR [r10+48] mov r13, QWORD PTR [r9+-72] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+-80], r12 - ; a[i+15] += m[15] * mu - mulx rcx, rax, QWORD PTR [r10+120] + ; a[i+7] += m[7] * mu + mulx rcx, rax, QWORD PTR [r10+56] mov r12, QWORD PTR [r9+-64] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+-72], r13 - ; a[i+16] += m[16] * mu - mulx rcx, rax, QWORD PTR [r10+128] + ; a[i+8] += m[8] * mu + mulx rcx, rax, QWORD PTR [r10+64] mov r13, QWORD PTR [r9+-56] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+-64], r12 - ; a[i+17] += m[17] * mu - mulx rcx, rax, QWORD PTR [r10+136] + ; a[i+9] += m[9] * mu + mulx rcx, rax, QWORD PTR [r10+72] mov r12, QWORD PTR [r9+-48] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+-56], r13 - ; a[i+18] += m[18] * mu - mulx rcx, rax, QWORD PTR [r10+144] + ; a[i+10] += m[10] * mu + mulx rcx, rax, QWORD PTR [r10+80] mov r13, QWORD PTR [r9+-40] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+-48], r12 - ; a[i+19] += m[19] * mu - mulx rcx, rax, QWORD PTR [r10+152] + ; a[i+11] += m[11] * mu + mulx rcx, rax, QWORD PTR [r10+88] mov r12, QWORD PTR [r9+-32] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+-40], r13 - ; a[i+20] += m[20] * mu - mulx rcx, rax, QWORD PTR [r10+160] + ; a[i+12] += m[12] * mu + mulx rcx, rax, QWORD PTR [r10+96] mov r13, QWORD PTR [r9+-24] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+-32], r12 - ; a[i+21] += m[21] * mu - mulx rcx, rax, QWORD PTR [r10+168] + ; a[i+13] += m[13] * mu + mulx rcx, rax, QWORD PTR [r10+104] mov r12, QWORD PTR [r9+-16] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+-24], r13 - ; a[i+22] += m[22] * mu - mulx rcx, rax, QWORD PTR [r10+176] + ; a[i+14] += m[14] * mu + mulx rcx, rax, QWORD PTR [r10+112] mov r13, QWORD PTR [r9+-8] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+-16], r12 - ; a[i+23] += m[23] * mu - mulx rcx, rax, QWORD PTR [r10+184] + ; a[i+15] += m[15] * mu + mulx rcx, rax, QWORD PTR [r10+120] mov r12, QWORD PTR [r9] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+-8], r13 - ; a[i+24] += m[24] * mu - mulx rcx, rax, QWORD PTR [r10+192] + ; a[i+16] += m[16] * mu + mulx rcx, rax, QWORD PTR [r10+128] mov r13, QWORD PTR [r9+8] adcx r12, rax adox r13, rcx mov QWORD PTR [r9], r12 - ; a[i+25] += m[25] * mu - mulx rcx, rax, QWORD PTR [r10+200] + ; a[i+17] += m[17] * mu + mulx rcx, rax, QWORD PTR [r10+136] mov r12, QWORD PTR [r9+16] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+8], r13 - ; a[i+26] += m[26] * mu - mulx rcx, rax, QWORD PTR [r10+208] + ; a[i+18] += m[18] * mu + mulx rcx, rax, QWORD PTR [r10+144] mov r13, QWORD PTR [r9+24] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+16], r12 - ; a[i+27] += m[27] * mu - mulx rcx, rax, QWORD PTR [r10+216] + ; a[i+19] += m[19] * mu + mulx rcx, rax, QWORD PTR [r10+152] mov r12, QWORD PTR [r9+32] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+24], r13 - ; a[i+28] += m[28] * mu - mulx rcx, rax, QWORD PTR [r10+224] + ; a[i+20] += m[20] * mu + mulx rcx, rax, QWORD PTR [r10+160] mov r13, QWORD PTR [r9+40] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+32], r12 - ; a[i+29] += m[29] * mu - mulx rcx, rax, QWORD PTR [r10+232] + ; a[i+21] += m[21] * mu + mulx rcx, rax, QWORD PTR [r10+168] mov r12, QWORD PTR [r9+48] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+40], r13 - ; a[i+30] += m[30] * mu - mulx rcx, rax, QWORD PTR [r10+240] + ; a[i+22] += m[22] * mu + mulx rcx, rax, QWORD PTR [r10+176] mov r13, QWORD PTR [r9+56] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+48], r12 - ; a[i+31] += m[31] * mu - mulx rcx, rax, QWORD PTR [r10+248] + ; a[i+23] += m[23] * mu + mulx rcx, rax, QWORD PTR [r10+184] mov r12, QWORD PTR [r9+64] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+56], r13 - ; a[i+32] += m[32] * mu - mulx rcx, rax, QWORD PTR [r10+256] + ; a[i+24] += m[24] * mu + mulx rcx, rax, QWORD PTR [r10+192] mov r13, QWORD PTR [r9+72] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+64], r12 - ; a[i+33] += m[33] * mu - mulx rcx, rax, QWORD PTR [r10+264] + ; a[i+25] += m[25] * mu + mulx rcx, rax, QWORD PTR [r10+200] mov r12, QWORD PTR [r9+80] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+72], r13 - ; a[i+34] += m[34] * mu - mulx rcx, rax, QWORD PTR [r10+272] + ; a[i+26] += m[26] * mu + mulx rcx, rax, QWORD PTR [r10+208] mov r13, QWORD PTR [r9+88] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+80], r12 - ; a[i+35] += m[35] * mu - mulx rcx, rax, QWORD PTR [r10+280] + ; a[i+27] += m[27] * mu + mulx rcx, rax, QWORD PTR [r10+216] mov r12, QWORD PTR [r9+96] adcx r13, rax adox r12, rcx mov QWORD PTR [r9+88], r13 - ; a[i+36] += m[36] * mu - mulx rcx, rax, QWORD PTR [r10+288] + ; a[i+28] += m[28] * mu + mulx rcx, rax, QWORD PTR [r10+224] mov r13, QWORD PTR [r9+104] adcx r12, rax adox r13, rcx mov QWORD PTR [r9+96], r12 - ; a[i+37] += m[37] * mu - mulx rcx, rax, QWORD PTR [r10+296] - mov r12, QWORD PTR [r9+112] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+104], r13 - ; a[i+38] += m[38] * mu - mulx rcx, rax, QWORD PTR [r10+304] - mov r13, QWORD PTR [r9+120] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+112], r12 - ; a[i+39] += m[39] * mu - mulx rcx, rax, QWORD PTR [r10+312] - mov r12, QWORD PTR [r9+128] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+120], r13 - ; a[i+40] += m[40] * mu - mulx rcx, rax, QWORD PTR [r10+320] - mov r13, QWORD PTR [r9+136] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+128], r12 - ; a[i+41] += m[41] * mu - mulx rcx, rax, QWORD PTR [r10+328] - mov r12, QWORD PTR [r9+144] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+136], r13 - ; a[i+42] += m[42] * mu - mulx rcx, rax, QWORD PTR [r10+336] - mov r13, QWORD PTR [r9+152] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+144], r12 - ; a[i+43] += m[43] * mu - mulx rcx, rax, QWORD PTR [r10+344] - mov r12, QWORD PTR [r9+160] - adcx r13, rax - adox r12, rcx - mov QWORD PTR [r9+152], r13 - ; a[i+44] += m[44] * mu - mulx rcx, rax, QWORD PTR [r10+352] - mov r13, QWORD PTR [r9+168] - adcx r12, rax - adox r13, rcx - mov QWORD PTR [r9+160], r12 - ; a[i+45] += m[45] * mu - mulx rcx, rax, QWORD PTR [r10+360] - mov r12, QWORD PTR [r9+176] + ; a[i+29] += m[29] * mu + mulx rcx, rax, QWORD PTR [r10+232] + mov r12, QWORD PTR [r9+112] adcx r13, rax adox r12, rcx - mov QWORD PTR [r9+168], r13 - ; a[i+46] += m[46] * mu - mulx rcx, rax, QWORD PTR [r10+368] - mov r13, QWORD PTR [r9+184] + mov QWORD PTR [r9+104], r13 + ; a[i+30] += m[30] * mu + mulx rcx, rax, QWORD PTR [r10+240] + mov r13, QWORD PTR [r9+120] adcx r12, rax adox r13, rcx - mov QWORD PTR [r9+176], r12 - ; a[i+47] += m[47] * mu - mulx rcx, rax, QWORD PTR [r10+376] - mov r12, QWORD PTR [r9+192] + mov QWORD PTR [r9+112], r12 + ; a[i+31] += m[31] * mu + mulx rcx, rax, QWORD PTR [r10+248] + mov r12, QWORD PTR [r9+128] adcx r13, rax adox r12, rcx - mov QWORD PTR [r9+184], r13 + mov QWORD PTR [r9+120], r13 adcx r12, rbp mov rbp, rbx - mov QWORD PTR [r9+192], r12 + mov QWORD PTR [r9+128], r12 adox rbp, rbx adcx rbp, rbx ; a += 1 add r9, 8 ; i -= 1 sub r11, 1 - jnz L_3072_mont_reduce_avx2_48_loop - sub r9, 192 + jnz L_2048_mont_reduce_avx2_32_loop + sub r9, 128 neg rbp mov r8, r9 - sub r9, 384 + sub r9, 256 mov rcx, QWORD PTR [r10] mov rdx, r14 pext rcx, rcx, rbp @@ -39154,87 +12386,7 @@ L_3072_mont_reduce_avx2_48_loop: pext rcx, rcx, rbp mov QWORD PTR [r9+240], rdx sbb rax, rcx - mov rdx, QWORD PTR [r10+256] - mov rcx, QWORD PTR [r8+256] - pext rdx, rdx, rbp mov QWORD PTR [r9+248], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+264] - mov rdx, QWORD PTR [r8+264] - pext rax, rax, rbp - mov QWORD PTR [r9+256], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+272] - mov rax, QWORD PTR [r8+272] - pext rcx, rcx, rbp - mov QWORD PTR [r9+264], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+280] - mov rcx, QWORD PTR [r8+280] - pext rdx, rdx, rbp - mov QWORD PTR [r9+272], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+288] - mov rdx, QWORD PTR [r8+288] - pext rax, rax, rbp - mov QWORD PTR [r9+280], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+296] - mov rax, QWORD PTR [r8+296] - pext rcx, rcx, rbp - mov QWORD PTR [r9+288], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+304] - mov rcx, QWORD PTR [r8+304] - pext rdx, rdx, rbp - mov QWORD PTR [r9+296], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+312] - mov rdx, QWORD PTR [r8+312] - pext rax, rax, rbp - mov QWORD PTR [r9+304], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+320] - mov rax, QWORD PTR [r8+320] - pext rcx, rcx, rbp - mov QWORD PTR [r9+312], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+328] - mov rcx, QWORD PTR [r8+328] - pext rdx, rdx, rbp - mov QWORD PTR [r9+320], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+336] - mov rdx, QWORD PTR [r8+336] - pext rax, rax, rbp - mov QWORD PTR [r9+328], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+344] - mov rax, QWORD PTR [r8+344] - pext rcx, rcx, rbp - mov QWORD PTR [r9+336], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+352] - mov rcx, QWORD PTR [r8+352] - pext rdx, rdx, rbp - mov QWORD PTR [r9+344], rax - sbb rcx, rdx - mov rax, QWORD PTR [r10+360] - mov rdx, QWORD PTR [r8+360] - pext rax, rax, rbp - mov QWORD PTR [r9+352], rcx - sbb rdx, rax - mov rcx, QWORD PTR [r10+368] - mov rax, QWORD PTR [r8+368] - pext rcx, rcx, rbp - mov QWORD PTR [r9+360], rdx - sbb rax, rcx - mov rdx, QWORD PTR [r10+376] - mov rcx, QWORD PTR [r8+376] - pext rdx, rdx, rbp - mov QWORD PTR [r9+368], rax - sbb rcx, rdx - mov QWORD PTR [r9+376], rcx pop rbp pop rbx pop rsi @@ -39244,12 +12396,12 @@ L_3072_mont_reduce_avx2_48_loop: pop r13 pop r12 ret -sp_3072_mont_reduce_avx2_48 ENDP +sp_2048_mont_reduce_avx2_32 ENDP _TEXT ENDS ENDIF IFNDEF WC_NO_CACHE_RESISTANT _TEXT SEGMENT READONLY PARA -sp_3072_get_from_table_avx2_48 PROC +sp_2048_get_from_table_avx2_32 PROC sub rsp, 128 vmovdqu OWORD PTR [rsp], xmm6 vmovdqu OWORD PTR [rsp+16], xmm7 @@ -39287,8 +12439,1182 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 16 + mov r9, QWORD PTR [rdx+128] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 17 + mov r9, QWORD PTR [rdx+136] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 18 + mov r9, QWORD PTR [rdx+144] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 19 + mov r9, QWORD PTR [rdx+152] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 20 + mov r9, QWORD PTR [rdx+160] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 21 + mov r9, QWORD PTR [rdx+168] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 22 + mov r9, QWORD PTR [rdx+176] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 23 + mov r9, QWORD PTR [rdx+184] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 24 + mov r9, QWORD PTR [rdx+192] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 25 + mov r9, QWORD PTR [rdx+200] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 26 + mov r9, QWORD PTR [rdx+208] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 27 + mov r9, QWORD PTR [rdx+216] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 28 + mov r9, QWORD PTR [rdx+224] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 29 + mov r9, QWORD PTR [rdx+232] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 30 + mov r9, QWORD PTR [rdx+240] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 31 + mov r9, QWORD PTR [rdx+248] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 32 + mov r9, QWORD PTR [rdx+256] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 33 + mov r9, QWORD PTR [rdx+264] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 34 + mov r9, QWORD PTR [rdx+272] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 35 + mov r9, QWORD PTR [rdx+280] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 36 + mov r9, QWORD PTR [rdx+288] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 37 + mov r9, QWORD PTR [rdx+296] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 38 + mov r9, QWORD PTR [rdx+304] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 39 + mov r9, QWORD PTR [rdx+312] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 40 + mov r9, QWORD PTR [rdx+320] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 41 + mov r9, QWORD PTR [rdx+328] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 42 + mov r9, QWORD PTR [rdx+336] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 43 + mov r9, QWORD PTR [rdx+344] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 44 + mov r9, QWORD PTR [rdx+352] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 45 + mov r9, QWORD PTR [rdx+360] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 46 + mov r9, QWORD PTR [rdx+368] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 47 + mov r9, QWORD PTR [rdx+376] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 48 + mov r9, QWORD PTR [rdx+384] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 49 + mov r9, QWORD PTR [rdx+392] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 50 + mov r9, QWORD PTR [rdx+400] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 51 + mov r9, QWORD PTR [rdx+408] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 52 + mov r9, QWORD PTR [rdx+416] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 53 + mov r9, QWORD PTR [rdx+424] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 54 + mov r9, QWORD PTR [rdx+432] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 55 + mov r9, QWORD PTR [rdx+440] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 56 + mov r9, QWORD PTR [rdx+448] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 57 + mov r9, QWORD PTR [rdx+456] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 58 + mov r9, QWORD PTR [rdx+464] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 59 + mov r9, QWORD PTR [rdx+472] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 60 + mov r9, QWORD PTR [rdx+480] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 61 + mov r9, QWORD PTR [rdx+488] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 62 + mov r9, QWORD PTR [rdx+496] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 63 + mov r9, QWORD PTR [rdx+504] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + vmovdqu YMMWORD PTR [rcx], ymm4 + vmovdqu YMMWORD PTR [rcx+32], ymm5 + vmovdqu YMMWORD PTR [rcx+64], ymm6 + vmovdqu YMMWORD PTR [rcx+96], ymm7 + add rcx, 128 + ; 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 + mov r9, QWORD PTR [rdx] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39303,8 +13629,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39319,8 +13646,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39335,8 +13663,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39351,8 +13680,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39367,8 +13697,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39383,8 +13714,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39399,8 +13731,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] + ; ENTRY: 16 + mov r9, QWORD PTR [rdx+128] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39415,8 +13748,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] + ; ENTRY: 17 + mov r9, QWORD PTR [rdx+136] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39431,8 +13765,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] + ; ENTRY: 18 + mov r9, QWORD PTR [rdx+144] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39447,8 +13782,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] + ; ENTRY: 19 + mov r9, QWORD PTR [rdx+152] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39463,8 +13799,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] + ; ENTRY: 20 + mov r9, QWORD PTR [rdx+160] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39479,8 +13816,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] + ; ENTRY: 21 + mov r9, QWORD PTR [rdx+168] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39495,8 +13833,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] + ; ENTRY: 22 + mov r9, QWORD PTR [rdx+176] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39511,8 +13850,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] + ; ENTRY: 23 + mov r9, QWORD PTR [rdx+184] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39527,20 +13867,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - vmovdqu YMMWORD PTR [rcx], ymm4 - vmovdqu YMMWORD PTR [rcx+32], ymm5 - vmovdqu YMMWORD PTR [rcx+64], ymm6 - vmovdqu YMMWORD PTR [rcx+96], ymm7 - add rcx, 128 - ; 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 - mov r9, QWORD PTR [rdx] + ; ENTRY: 24 + mov r9, QWORD PTR [rdx+192] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39556,8 +13884,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] + ; ENTRY: 25 + mov r9, QWORD PTR [rdx+200] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39573,8 +13901,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] + ; ENTRY: 26 + mov r9, QWORD PTR [rdx+208] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39590,8 +13918,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] + ; ENTRY: 27 + mov r9, QWORD PTR [rdx+216] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39607,8 +13935,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] + ; ENTRY: 28 + mov r9, QWORD PTR [rdx+224] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39624,8 +13952,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] + ; ENTRY: 29 + mov r9, QWORD PTR [rdx+232] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39641,8 +13969,144 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] + ; ENTRY: 30 + mov r9, QWORD PTR [rdx+240] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 31 + mov r9, QWORD PTR [rdx+248] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 32 + mov r9, QWORD PTR [rdx+256] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 33 + mov r9, QWORD PTR [rdx+264] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 34 + mov r9, QWORD PTR [rdx+272] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 35 + mov r9, QWORD PTR [rdx+280] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 36 + mov r9, QWORD PTR [rdx+288] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 37 + mov r9, QWORD PTR [rdx+296] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 38 + mov r9, QWORD PTR [rdx+304] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39658,8 +14122,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] + ; ENTRY: 39 + mov r9, QWORD PTR [rdx+312] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39675,8 +14139,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] + ; ENTRY: 40 + mov r9, QWORD PTR [rdx+320] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39692,8 +14156,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] + ; ENTRY: 41 + mov r9, QWORD PTR [rdx+328] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39709,8 +14173,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] + ; ENTRY: 42 + mov r9, QWORD PTR [rdx+336] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39726,8 +14190,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] + ; ENTRY: 43 + mov r9, QWORD PTR [rdx+344] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39743,8 +14207,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] + ; ENTRY: 44 + mov r9, QWORD PTR [rdx+352] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39760,8 +14224,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] + ; ENTRY: 45 + mov r9, QWORD PTR [rdx+360] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39777,8 +14241,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] + ; ENTRY: 46 + mov r9, QWORD PTR [rdx+368] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39794,8 +14258,8 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] + ; ENTRY: 47 + mov r9, QWORD PTR [rdx+376] add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] @@ -39811,21 +14275,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - vmovdqu YMMWORD PTR [rcx], ymm4 - vmovdqu YMMWORD PTR [rcx+32], ymm5 - vmovdqu YMMWORD PTR [rcx+64], ymm6 - vmovdqu YMMWORD PTR [rcx+96], ymm7 - add rcx, 128 - ; 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 - mov r9, QWORD PTR [rdx] - add r9, 256 + ; ENTRY: 48 + mov r9, QWORD PTR [rdx+384] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39840,9 +14292,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 256 + ; ENTRY: 49 + mov r9, QWORD PTR [rdx+392] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39857,9 +14309,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 256 + ; ENTRY: 50 + mov r9, QWORD PTR [rdx+400] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39874,9 +14326,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 256 + ; ENTRY: 51 + mov r9, QWORD PTR [rdx+408] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39891,9 +14343,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 256 + ; ENTRY: 52 + mov r9, QWORD PTR [rdx+416] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39908,9 +14360,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 256 + ; ENTRY: 53 + mov r9, QWORD PTR [rdx+424] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39925,9 +14377,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 256 + ; ENTRY: 54 + mov r9, QWORD PTR [rdx+432] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39942,9 +14394,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 256 + ; ENTRY: 55 + mov r9, QWORD PTR [rdx+440] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39959,9 +14411,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 256 + ; ENTRY: 56 + mov r9, QWORD PTR [rdx+448] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39976,9 +14428,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 256 + ; ENTRY: 57 + mov r9, QWORD PTR [rdx+456] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -39993,9 +14445,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 256 + ; ENTRY: 58 + mov r9, QWORD PTR [rdx+464] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -40010,9 +14462,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 256 + ; ENTRY: 59 + mov r9, QWORD PTR [rdx+472] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -40027,9 +14479,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 256 + ; ENTRY: 60 + mov r9, QWORD PTR [rdx+480] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -40044,9 +14496,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 256 + ; ENTRY: 61 + mov r9, QWORD PTR [rdx+488] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -40061,9 +14513,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 256 + ; ENTRY: 62 + mov r9, QWORD PTR [rdx+496] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -40078,9 +14530,9 @@ sp_3072_get_from_table_avx2_48 PROC vpor ymm6, ymm6, ymm2 vpor ymm7, ymm7, ymm3 vpaddd ymm13, ymm13, ymm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 256 + ; ENTRY: 63 + mov r9, QWORD PTR [rdx+504] + add r9, 128 vpcmpeqd ymm12, ymm13, ymm10 vmovdqu ymm0, YMMWORD PTR [r9] vmovdqu ymm1, YMMWORD PTR [r9+32] @@ -40099,7 +14551,7 @@ sp_3072_get_from_table_avx2_48 PROC vmovdqu YMMWORD PTR [rcx+32], ymm5 vmovdqu YMMWORD PTR [rcx+64], ymm6 vmovdqu YMMWORD PTR [rcx+96], ymm7 - ; END: 32-47 + ; END: 16-31 vmovdqu xmm6, OWORD PTR [rsp] vmovdqu xmm7, OWORD PTR [rsp+16] vmovdqu xmm8, OWORD PTR [rsp+32] @@ -40110,1009 +14562,3987 @@ sp_3072_get_from_table_avx2_48 PROC vmovdqu xmm13, OWORD PTR [rsp+112] add rsp, 128 ret -sp_3072_get_from_table_avx2_48 ENDP +sp_2048_get_from_table_avx2_32 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_2048_cond_add_16 PROC + sub rsp, 128 + mov rax, 0 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp], r10 + mov QWORD PTR [rsp+8], r11 + mov r10, QWORD PTR [r8+16] + mov r11, QWORD PTR [r8+24] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+16], r10 + mov QWORD PTR [rsp+24], r11 + mov r10, QWORD PTR [r8+32] + mov r11, QWORD PTR [r8+40] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+32], r10 + mov QWORD PTR [rsp+40], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+48], r10 + mov QWORD PTR [rsp+56], r11 + mov r10, QWORD PTR [r8+64] + mov r11, QWORD PTR [r8+72] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+64], r10 + mov QWORD PTR [rsp+72], r11 + mov r10, QWORD PTR [r8+80] + mov r11, QWORD PTR [r8+88] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+80], r10 + mov QWORD PTR [rsp+88], r11 + mov r10, QWORD PTR [r8+96] + mov r11, QWORD PTR [r8+104] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+96], r10 + mov QWORD PTR [rsp+104], r11 + mov r10, QWORD PTR [r8+112] + mov r11, QWORD PTR [r8+120] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+112], r10 + mov QWORD PTR [rsp+120], r11 + mov r10, QWORD PTR [rdx] + mov r8, QWORD PTR [rsp] + add r10, r8 + mov r11, QWORD PTR [rdx+8] + mov r8, QWORD PTR [rsp+8] + adc r11, r8 + mov QWORD PTR [rcx], r10 + mov r10, QWORD PTR [rdx+16] + mov r8, QWORD PTR [rsp+16] + adc r10, r8 + mov QWORD PTR [rcx+8], r11 + mov r11, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rsp+24] + adc r11, r8 + mov QWORD PTR [rcx+16], r10 + mov r10, QWORD PTR [rdx+32] + mov r8, QWORD PTR [rsp+32] + adc r10, r8 + mov QWORD PTR [rcx+24], r11 + mov r11, QWORD PTR [rdx+40] + mov r8, QWORD PTR [rsp+40] + adc r11, r8 + mov QWORD PTR [rcx+32], r10 + mov r10, QWORD PTR [rdx+48] + mov r8, QWORD PTR [rsp+48] + adc r10, r8 + mov QWORD PTR [rcx+40], r11 + mov r11, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rsp+56] + adc r11, r8 + mov QWORD PTR [rcx+48], r10 + mov r10, QWORD PTR [rdx+64] + mov r8, QWORD PTR [rsp+64] + adc r10, r8 + mov QWORD PTR [rcx+56], r11 + mov r11, QWORD PTR [rdx+72] + mov r8, QWORD PTR [rsp+72] + adc r11, r8 + mov QWORD PTR [rcx+64], r10 + mov r10, QWORD PTR [rdx+80] + mov r8, QWORD PTR [rsp+80] + adc r10, r8 + mov QWORD PTR [rcx+72], r11 + mov r11, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rsp+88] + adc r11, r8 + mov QWORD PTR [rcx+80], r10 + mov r10, QWORD PTR [rdx+96] + mov r8, QWORD PTR [rsp+96] + adc r10, r8 + mov QWORD PTR [rcx+88], r11 + mov r11, QWORD PTR [rdx+104] + mov r8, QWORD PTR [rsp+104] + adc r11, r8 + mov QWORD PTR [rcx+96], r10 + mov r10, QWORD PTR [rdx+112] + mov r8, QWORD PTR [rsp+112] + adc r10, r8 + mov QWORD PTR [rcx+104], r11 + mov r11, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rsp+120] + adc r11, r8 + mov QWORD PTR [rcx+112], r10 + mov QWORD PTR [rcx+120], r11 + adc rax, 0 + add rsp, 128 + ret +sp_2048_cond_add_16 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_2048_cond_add_avx2_16 PROC + push r12 + mov rax, 0 + mov r12, QWORD PTR [r8] + mov r10, QWORD PTR [rdx] + pext r12, r12, r9 + add r10, r12 + mov r12, QWORD PTR [r8+8] + mov r11, QWORD PTR [rdx+8] + pext r12, r12, r9 + mov QWORD PTR [rcx], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+16] + mov r12, QWORD PTR [rdx+16] + pext r10, r10, r9 + mov QWORD PTR [rcx+8], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+24] + mov r10, QWORD PTR [rdx+24] + pext r11, r11, r9 + mov QWORD PTR [rcx+16], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+32] + mov r11, QWORD PTR [rdx+32] + pext r12, r12, r9 + mov QWORD PTR [rcx+24], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+40] + mov r12, QWORD PTR [rdx+40] + pext r10, r10, r9 + mov QWORD PTR [rcx+32], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+48] + pext r11, r11, r9 + mov QWORD PTR [rcx+40], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+56] + mov r11, QWORD PTR [rdx+56] + pext r12, r12, r9 + mov QWORD PTR [rcx+48], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+64] + mov r12, QWORD PTR [rdx+64] + pext r10, r10, r9 + mov QWORD PTR [rcx+56], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+72] + mov r10, QWORD PTR [rdx+72] + pext r11, r11, r9 + mov QWORD PTR [rcx+64], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+80] + mov r11, QWORD PTR [rdx+80] + pext r12, r12, r9 + mov QWORD PTR [rcx+72], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+88] + mov r12, QWORD PTR [rdx+88] + pext r10, r10, r9 + mov QWORD PTR [rcx+80], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+96] + pext r11, r11, r9 + mov QWORD PTR [rcx+88], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+104] + mov r11, QWORD PTR [rdx+104] + pext r12, r12, r9 + mov QWORD PTR [rcx+96], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+112] + mov r12, QWORD PTR [rdx+112] + pext r10, r10, r9 + mov QWORD PTR [rcx+104], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+120] + mov r10, QWORD PTR [rdx+120] + pext r11, r11, r9 + mov QWORD PTR [rcx+112], r12 + adc r10, r11 + mov QWORD PTR [rcx+120], r10 + adc rax, 0 + pop r12 + ret +sp_2048_cond_add_avx2_16 ENDP +_TEXT ENDS +ENDIF +; /* Shift number left by n bit. (r = a << n) +; * +; * r Result of left shift by n. +; * a Number to shift. +; * n Amoutnt o shift. +; */ +_TEXT SEGMENT READONLY PARA +sp_2048_lshift_32 PROC + push r12 + push r13 + mov rax, rcx + mov cl, r8b + mov r12, 0 + mov r13, QWORD PTR [rdx+216] + mov r8, QWORD PTR [rdx+224] + mov r9, QWORD PTR [rdx+232] + mov r10, QWORD PTR [rdx+240] + mov r11, QWORD PTR [rdx+248] + shld r12, r11, cl + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+224], r8 + mov QWORD PTR [rax+232], r9 + mov QWORD PTR [rax+240], r10 + mov QWORD PTR [rax+248], r11 + mov QWORD PTR [rax+256], r12 + mov r11, QWORD PTR [rdx+184] + mov r8, QWORD PTR [rdx+192] + mov r9, QWORD PTR [rdx+200] + mov r10, QWORD PTR [rdx+208] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+192], r8 + mov QWORD PTR [rax+200], r9 + mov QWORD PTR [rax+208], r10 + mov QWORD PTR [rax+216], r13 + mov r13, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rdx+160] + mov r9, QWORD PTR [rdx+168] + mov r10, QWORD PTR [rdx+176] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+160], r8 + mov QWORD PTR [rax+168], r9 + mov QWORD PTR [rax+176], r10 + mov QWORD PTR [rax+184], r11 + mov r11, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rdx+128] + mov r9, QWORD PTR [rdx+136] + mov r10, QWORD PTR [rdx+144] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+128], r8 + mov QWORD PTR [rax+136], r9 + mov QWORD PTR [rax+144], r10 + mov QWORD PTR [rax+152], r13 + mov r13, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rdx+96] + mov r9, QWORD PTR [rdx+104] + mov r10, QWORD PTR [rdx+112] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+96], r8 + mov QWORD PTR [rax+104], r9 + mov QWORD PTR [rax+112], r10 + mov QWORD PTR [rax+120], r11 + mov r11, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rdx+64] + mov r9, QWORD PTR [rdx+72] + mov r10, QWORD PTR [rdx+80] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+64], r8 + mov QWORD PTR [rax+72], r9 + mov QWORD PTR [rax+80], r10 + mov QWORD PTR [rax+88], r13 + mov r13, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rdx+32] + mov r9, QWORD PTR [rdx+40] + mov r10, QWORD PTR [rdx+48] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+32], r8 + mov QWORD PTR [rax+40], r9 + mov QWORD PTR [rax+48], r10 + mov QWORD PTR [rax+56], r11 + mov r8, QWORD PTR [rdx] + mov r9, QWORD PTR [rdx+8] + mov r10, QWORD PTR [rdx+16] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shl r8, cl + mov QWORD PTR [rax], r8 + mov QWORD PTR [rax+8], r9 + mov QWORD PTR [rax+16], r10 + mov QWORD PTR [rax+24], r13 + pop r13 + pop r12 + ret +sp_2048_lshift_32 ENDP +_TEXT ENDS +ENDIF +ENDIF +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_from_bin_bswap PROC + push r12 + push r13 + mov r11, r8 + mov r12, rcx + add r11, r9 + add r12, 384 + xor r13, r13 + jmp L_3072_from_bin_bswap_64_end +L_3072_from_bin_bswap_64_start: + sub r11, 64 + mov rax, QWORD PTR [r11+56] + mov r10, QWORD PTR [r11+48] + bswap rax + bswap r10 + mov QWORD PTR [rcx], rax + mov QWORD PTR [rcx+8], r10 + mov rax, QWORD PTR [r11+40] + mov r10, QWORD PTR [r11+32] + bswap rax + bswap r10 + mov QWORD PTR [rcx+16], rax + mov QWORD PTR [rcx+24], r10 + mov rax, QWORD PTR [r11+24] + mov r10, QWORD PTR [r11+16] + bswap rax + bswap r10 + mov QWORD PTR [rcx+32], rax + mov QWORD PTR [rcx+40], r10 + mov rax, QWORD PTR [r11+8] + mov r10, QWORD PTR [r11] + bswap rax + bswap r10 + mov QWORD PTR [rcx+48], rax + mov QWORD PTR [rcx+56], r10 + add rcx, 64 + sub r9, 64 +L_3072_from_bin_bswap_64_end: + cmp r9, 63 + jg L_3072_from_bin_bswap_64_start + jmp L_3072_from_bin_bswap_8_end +L_3072_from_bin_bswap_8_start: + sub r11, 8 + mov rax, QWORD PTR [r11] + bswap rax + mov QWORD PTR [rcx], rax + add rcx, 8 + sub r9, 8 +L_3072_from_bin_bswap_8_end: + cmp r9, 7 + jg L_3072_from_bin_bswap_8_start + cmp r9, r13 + je L_3072_from_bin_bswap_hi_end + mov r10, r13 + mov rax, r13 +L_3072_from_bin_bswap_hi_start: + mov al, BYTE PTR [r8] + shl r10, 8 + inc r8 + add r10, rax + dec r9 + jg L_3072_from_bin_bswap_hi_start + mov QWORD PTR [rcx], r10 + add rcx, 8 +L_3072_from_bin_bswap_hi_end: + cmp rcx, r12 + jge L_3072_from_bin_bswap_zero_end +L_3072_from_bin_bswap_zero_start: + mov QWORD PTR [rcx], r13 + add rcx, 8 + cmp rcx, r12 + jl L_3072_from_bin_bswap_zero_start +L_3072_from_bin_bswap_zero_end: + pop r13 + pop r12 + ret +sp_3072_from_bin_bswap ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_from_bin_movbe PROC + push r12 + mov r11, r8 + mov r12, rcx + add r11, r9 + add r12, 384 + jmp L_3072_from_bin_movbe_64_end +L_3072_from_bin_movbe_64_start: + sub r11, 64 + movbe rax, QWORD PTR [r11+56] + movbe r10, QWORD PTR [r11+48] + mov QWORD PTR [rcx], rax + mov QWORD PTR [rcx+8], r10 + movbe rax, QWORD PTR [r11+40] + movbe r10, QWORD PTR [r11+32] + mov QWORD PTR [rcx+16], rax + mov QWORD PTR [rcx+24], r10 + movbe rax, QWORD PTR [r11+24] + movbe r10, QWORD PTR [r11+16] + mov QWORD PTR [rcx+32], rax + mov QWORD PTR [rcx+40], r10 + movbe rax, QWORD PTR [r11+8] + movbe r10, QWORD PTR [r11] + mov QWORD PTR [rcx+48], rax + mov QWORD PTR [rcx+56], r10 + add rcx, 64 + sub r9, 64 +L_3072_from_bin_movbe_64_end: + cmp r9, 63 + jg L_3072_from_bin_movbe_64_start + jmp L_3072_from_bin_movbe_8_end +L_3072_from_bin_movbe_8_start: + sub r11, 8 + movbe rax, QWORD PTR [r11] + mov QWORD PTR [rcx], rax + add rcx, 8 + sub r9, 8 +L_3072_from_bin_movbe_8_end: + cmp r9, 7 + jg L_3072_from_bin_movbe_8_start + cmp r9, 0 + je L_3072_from_bin_movbe_hi_end + mov r10, 0 + mov rax, 0 +L_3072_from_bin_movbe_hi_start: + mov al, BYTE PTR [r8] + shl r10, 8 + inc r8 + add r10, rax + dec r9 + jg L_3072_from_bin_movbe_hi_start + mov QWORD PTR [rcx], r10 + add rcx, 8 +L_3072_from_bin_movbe_hi_end: + cmp rcx, r12 + jge L_3072_from_bin_movbe_zero_end +L_3072_from_bin_movbe_zero_start: + mov QWORD PTR [rcx], 0 + add rcx, 8 + cmp rcx, r12 + jl L_3072_from_bin_movbe_zero_start +L_3072_from_bin_movbe_zero_end: + pop r12 + ret +sp_3072_from_bin_movbe ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_to_bin_bswap_48 PROC + mov rax, QWORD PTR [rcx+376] + mov r8, QWORD PTR [rcx+368] + bswap rax + bswap r8 + mov QWORD PTR [rdx], rax + mov QWORD PTR [rdx+8], r8 + mov rax, QWORD PTR [rcx+360] + mov r8, QWORD PTR [rcx+352] + bswap rax + bswap r8 + mov QWORD PTR [rdx+16], rax + mov QWORD PTR [rdx+24], r8 + mov rax, QWORD PTR [rcx+344] + mov r8, QWORD PTR [rcx+336] + bswap rax + bswap r8 + mov QWORD PTR [rdx+32], rax + mov QWORD PTR [rdx+40], r8 + mov rax, QWORD PTR [rcx+328] + mov r8, QWORD PTR [rcx+320] + bswap rax + bswap r8 + mov QWORD PTR [rdx+48], rax + mov QWORD PTR [rdx+56], r8 + mov rax, QWORD PTR [rcx+312] + mov r8, QWORD PTR [rcx+304] + bswap rax + bswap r8 + mov QWORD PTR [rdx+64], rax + mov QWORD PTR [rdx+72], r8 + mov rax, QWORD PTR [rcx+296] + mov r8, QWORD PTR [rcx+288] + bswap rax + bswap r8 + mov QWORD PTR [rdx+80], rax + mov QWORD PTR [rdx+88], r8 + mov rax, QWORD PTR [rcx+280] + mov r8, QWORD PTR [rcx+272] + bswap rax + bswap r8 + mov QWORD PTR [rdx+96], rax + mov QWORD PTR [rdx+104], r8 + mov rax, QWORD PTR [rcx+264] + mov r8, QWORD PTR [rcx+256] + bswap rax + bswap r8 + mov QWORD PTR [rdx+112], rax + mov QWORD PTR [rdx+120], r8 + mov rax, QWORD PTR [rcx+248] + mov r8, QWORD PTR [rcx+240] + bswap rax + bswap r8 + mov QWORD PTR [rdx+128], rax + mov QWORD PTR [rdx+136], r8 + mov rax, QWORD PTR [rcx+232] + mov r8, QWORD PTR [rcx+224] + bswap rax + bswap r8 + mov QWORD PTR [rdx+144], rax + mov QWORD PTR [rdx+152], r8 + mov rax, QWORD PTR [rcx+216] + mov r8, QWORD PTR [rcx+208] + bswap rax + bswap r8 + mov QWORD PTR [rdx+160], rax + mov QWORD PTR [rdx+168], r8 + mov rax, QWORD PTR [rcx+200] + mov r8, QWORD PTR [rcx+192] + bswap rax + bswap r8 + mov QWORD PTR [rdx+176], rax + mov QWORD PTR [rdx+184], r8 + mov rax, QWORD PTR [rcx+184] + mov r8, QWORD PTR [rcx+176] + bswap rax + bswap r8 + mov QWORD PTR [rdx+192], rax + mov QWORD PTR [rdx+200], r8 + mov rax, QWORD PTR [rcx+168] + mov r8, QWORD PTR [rcx+160] + bswap rax + bswap r8 + mov QWORD PTR [rdx+208], rax + mov QWORD PTR [rdx+216], r8 + mov rax, QWORD PTR [rcx+152] + mov r8, QWORD PTR [rcx+144] + bswap rax + bswap r8 + mov QWORD PTR [rdx+224], rax + mov QWORD PTR [rdx+232], r8 + mov rax, QWORD PTR [rcx+136] + mov r8, QWORD PTR [rcx+128] + bswap rax + bswap r8 + mov QWORD PTR [rdx+240], rax + mov QWORD PTR [rdx+248], r8 + mov rax, QWORD PTR [rcx+120] + mov r8, QWORD PTR [rcx+112] + bswap rax + bswap r8 + mov QWORD PTR [rdx+256], rax + mov QWORD PTR [rdx+264], r8 + mov rax, QWORD PTR [rcx+104] + mov r8, QWORD PTR [rcx+96] + bswap rax + bswap r8 + mov QWORD PTR [rdx+272], rax + mov QWORD PTR [rdx+280], r8 + mov rax, QWORD PTR [rcx+88] + mov r8, QWORD PTR [rcx+80] + bswap rax + bswap r8 + mov QWORD PTR [rdx+288], rax + mov QWORD PTR [rdx+296], r8 + mov rax, QWORD PTR [rcx+72] + mov r8, QWORD PTR [rcx+64] + bswap rax + bswap r8 + mov QWORD PTR [rdx+304], rax + mov QWORD PTR [rdx+312], r8 + mov rax, QWORD PTR [rcx+56] + mov r8, QWORD PTR [rcx+48] + bswap rax + bswap r8 + mov QWORD PTR [rdx+320], rax + mov QWORD PTR [rdx+328], r8 + mov rax, QWORD PTR [rcx+40] + mov r8, QWORD PTR [rcx+32] + bswap rax + bswap r8 + mov QWORD PTR [rdx+336], rax + mov QWORD PTR [rdx+344], r8 + mov rax, QWORD PTR [rcx+24] + mov r8, QWORD PTR [rcx+16] + bswap rax + bswap r8 + mov QWORD PTR [rdx+352], rax + mov QWORD PTR [rdx+360], r8 + mov rax, QWORD PTR [rcx+8] + mov r8, QWORD PTR [rcx] + bswap rax + bswap r8 + mov QWORD PTR [rdx+368], rax + mov QWORD PTR [rdx+376], r8 + ret +sp_3072_to_bin_bswap_48 ENDP _TEXT ENDS -ENDIF -; /* Conditionally add a and b using the mask m. -; * m is -1 to add and 0 when not. +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 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. +; * r A single precision integer. +; * a Byte array. ; */ _TEXT SEGMENT READONLY PARA -sp_3072_cond_add_24 PROC - sub rsp, 192 - mov rax, 0 - mov r10, QWORD PTR [r8] - mov r11, QWORD PTR [r8+8] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp], r10 - mov QWORD PTR [rsp+8], r11 - mov r10, QWORD PTR [r8+16] - mov r11, QWORD PTR [r8+24] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+16], r10 - mov QWORD PTR [rsp+24], r11 - mov r10, QWORD PTR [r8+32] - mov r11, QWORD PTR [r8+40] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+32], r10 - mov QWORD PTR [rsp+40], r11 - mov r10, QWORD PTR [r8+48] - mov r11, QWORD PTR [r8+56] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+48], r10 - mov QWORD PTR [rsp+56], r11 - mov r10, QWORD PTR [r8+64] - mov r11, QWORD PTR [r8+72] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+64], r10 - mov QWORD PTR [rsp+72], r11 - mov r10, QWORD PTR [r8+80] - mov r11, QWORD PTR [r8+88] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+80], r10 - mov QWORD PTR [rsp+88], r11 - mov r10, QWORD PTR [r8+96] - mov r11, QWORD PTR [r8+104] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+96], r10 - mov QWORD PTR [rsp+104], r11 - mov r10, QWORD PTR [r8+112] - mov r11, QWORD PTR [r8+120] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+112], r10 - mov QWORD PTR [rsp+120], r11 - mov r10, QWORD PTR [r8+128] - mov r11, QWORD PTR [r8+136] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+128], r10 - mov QWORD PTR [rsp+136], r11 - mov r10, QWORD PTR [r8+144] - mov r11, QWORD PTR [r8+152] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+144], r10 - mov QWORD PTR [rsp+152], r11 - mov r10, QWORD PTR [r8+160] - mov r11, QWORD PTR [r8+168] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+160], r10 - mov QWORD PTR [rsp+168], r11 - mov r10, QWORD PTR [r8+176] - mov r11, QWORD PTR [r8+184] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+176], r10 - mov QWORD PTR [rsp+184], r11 - mov r10, QWORD PTR [rdx] - mov r8, QWORD PTR [rsp] - add r10, r8 - mov r11, QWORD PTR [rdx+8] - mov r8, QWORD PTR [rsp+8] - adc r11, r8 - mov QWORD PTR [rcx], r10 - mov r10, QWORD PTR [rdx+16] - mov r8, QWORD PTR [rsp+16] - adc r10, r8 - mov QWORD PTR [rcx+8], r11 - mov r11, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rsp+24] - adc r11, r8 - mov QWORD PTR [rcx+16], r10 - mov r10, QWORD PTR [rdx+32] - mov r8, QWORD PTR [rsp+32] - adc r10, r8 - mov QWORD PTR [rcx+24], r11 - mov r11, QWORD PTR [rdx+40] - mov r8, QWORD PTR [rsp+40] - adc r11, r8 - mov QWORD PTR [rcx+32], r10 - mov r10, QWORD PTR [rdx+48] - mov r8, QWORD PTR [rsp+48] - adc r10, r8 - mov QWORD PTR [rcx+40], r11 - mov r11, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rsp+56] - adc r11, r8 - mov QWORD PTR [rcx+48], r10 - mov r10, QWORD PTR [rdx+64] - mov r8, QWORD PTR [rsp+64] - adc r10, r8 - mov QWORD PTR [rcx+56], r11 - mov r11, QWORD PTR [rdx+72] - mov r8, QWORD PTR [rsp+72] - adc r11, r8 - mov QWORD PTR [rcx+64], r10 - mov r10, QWORD PTR [rdx+80] - mov r8, QWORD PTR [rsp+80] - adc r10, r8 - mov QWORD PTR [rcx+72], r11 - mov r11, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rsp+88] - adc r11, r8 - mov QWORD PTR [rcx+80], r10 - mov r10, QWORD PTR [rdx+96] - mov r8, QWORD PTR [rsp+96] - adc r10, r8 - mov QWORD PTR [rcx+88], r11 - mov r11, QWORD PTR [rdx+104] - mov r8, QWORD PTR [rsp+104] - adc r11, r8 - mov QWORD PTR [rcx+96], r10 - mov r10, QWORD PTR [rdx+112] - mov r8, QWORD PTR [rsp+112] - adc r10, r8 - mov QWORD PTR [rcx+104], r11 - mov r11, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rsp+120] - adc r11, r8 - mov QWORD PTR [rcx+112], r10 - mov r10, QWORD PTR [rdx+128] - mov r8, QWORD PTR [rsp+128] - adc r10, r8 - mov QWORD PTR [rcx+120], r11 - mov r11, QWORD PTR [rdx+136] - mov r8, QWORD PTR [rsp+136] - adc r11, r8 - mov QWORD PTR [rcx+128], r10 - mov r10, QWORD PTR [rdx+144] - mov r8, QWORD PTR [rsp+144] - adc r10, r8 - mov QWORD PTR [rcx+136], r11 - mov r11, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rsp+152] - adc r11, r8 - mov QWORD PTR [rcx+144], r10 - mov r10, QWORD PTR [rdx+160] - mov r8, QWORD PTR [rsp+160] - adc r10, r8 - mov QWORD PTR [rcx+152], r11 - mov r11, QWORD PTR [rdx+168] - mov r8, QWORD PTR [rsp+168] - adc r11, r8 - mov QWORD PTR [rcx+160], r10 - mov r10, QWORD PTR [rdx+176] - mov r8, QWORD PTR [rsp+176] - adc r10, r8 - mov QWORD PTR [rcx+168], r11 - mov r11, QWORD PTR [rdx+184] - mov r8, QWORD PTR [rsp+184] - adc r11, r8 - mov QWORD PTR [rcx+176], r10 - mov QWORD PTR [rcx+184], r11 - adc rax, 0 - add rsp, 192 +sp_3072_to_bin_movbe_48 PROC + movbe rax, QWORD PTR [rcx+376] + movbe r8, QWORD PTR [rcx+368] + mov QWORD PTR [rdx], rax + mov QWORD PTR [rdx+8], r8 + movbe rax, QWORD PTR [rcx+360] + movbe r8, QWORD PTR [rcx+352] + mov QWORD PTR [rdx+16], rax + mov QWORD PTR [rdx+24], r8 + movbe rax, QWORD PTR [rcx+344] + movbe r8, QWORD PTR [rcx+336] + mov QWORD PTR [rdx+32], rax + mov QWORD PTR [rdx+40], r8 + movbe rax, QWORD PTR [rcx+328] + movbe r8, QWORD PTR [rcx+320] + mov QWORD PTR [rdx+48], rax + mov QWORD PTR [rdx+56], r8 + movbe rax, QWORD PTR [rcx+312] + movbe r8, QWORD PTR [rcx+304] + mov QWORD PTR [rdx+64], rax + mov QWORD PTR [rdx+72], r8 + movbe rax, QWORD PTR [rcx+296] + movbe r8, QWORD PTR [rcx+288] + mov QWORD PTR [rdx+80], rax + mov QWORD PTR [rdx+88], r8 + movbe rax, QWORD PTR [rcx+280] + movbe r8, QWORD PTR [rcx+272] + mov QWORD PTR [rdx+96], rax + mov QWORD PTR [rdx+104], r8 + movbe rax, QWORD PTR [rcx+264] + movbe r8, QWORD PTR [rcx+256] + mov QWORD PTR [rdx+112], rax + mov QWORD PTR [rdx+120], r8 + movbe rax, QWORD PTR [rcx+248] + movbe r8, QWORD PTR [rcx+240] + mov QWORD PTR [rdx+128], rax + mov QWORD PTR [rdx+136], r8 + movbe rax, QWORD PTR [rcx+232] + movbe r8, QWORD PTR [rcx+224] + mov QWORD PTR [rdx+144], rax + mov QWORD PTR [rdx+152], r8 + movbe rax, QWORD PTR [rcx+216] + movbe r8, QWORD PTR [rcx+208] + mov QWORD PTR [rdx+160], rax + mov QWORD PTR [rdx+168], r8 + movbe rax, QWORD PTR [rcx+200] + movbe r8, QWORD PTR [rcx+192] + mov QWORD PTR [rdx+176], rax + mov QWORD PTR [rdx+184], r8 + movbe rax, QWORD PTR [rcx+184] + movbe r8, QWORD PTR [rcx+176] + mov QWORD PTR [rdx+192], rax + mov QWORD PTR [rdx+200], r8 + movbe rax, QWORD PTR [rcx+168] + movbe r8, QWORD PTR [rcx+160] + mov QWORD PTR [rdx+208], rax + mov QWORD PTR [rdx+216], r8 + movbe rax, QWORD PTR [rcx+152] + movbe r8, QWORD PTR [rcx+144] + mov QWORD PTR [rdx+224], rax + mov QWORD PTR [rdx+232], r8 + movbe rax, QWORD PTR [rcx+136] + movbe r8, QWORD PTR [rcx+128] + mov QWORD PTR [rdx+240], rax + mov QWORD PTR [rdx+248], r8 + movbe rax, QWORD PTR [rcx+120] + movbe r8, QWORD PTR [rcx+112] + mov QWORD PTR [rdx+256], rax + mov QWORD PTR [rdx+264], r8 + movbe rax, QWORD PTR [rcx+104] + movbe r8, QWORD PTR [rcx+96] + mov QWORD PTR [rdx+272], rax + mov QWORD PTR [rdx+280], r8 + movbe rax, QWORD PTR [rcx+88] + movbe r8, QWORD PTR [rcx+80] + mov QWORD PTR [rdx+288], rax + mov QWORD PTR [rdx+296], r8 + movbe rax, QWORD PTR [rcx+72] + movbe r8, QWORD PTR [rcx+64] + mov QWORD PTR [rdx+304], rax + mov QWORD PTR [rdx+312], r8 + movbe rax, QWORD PTR [rcx+56] + movbe r8, QWORD PTR [rcx+48] + mov QWORD PTR [rdx+320], rax + mov QWORD PTR [rdx+328], r8 + movbe rax, QWORD PTR [rcx+40] + movbe r8, QWORD PTR [rcx+32] + mov QWORD PTR [rdx+336], rax + mov QWORD PTR [rdx+344], r8 + movbe rax, QWORD PTR [rcx+24] + movbe r8, QWORD PTR [rcx+16] + mov QWORD PTR [rdx+352], rax + mov QWORD PTR [rdx+360], r8 + movbe rax, QWORD PTR [rcx+8] + movbe r8, QWORD PTR [rcx] + mov QWORD PTR [rdx+368], rax + mov QWORD PTR [rdx+376], r8 ret -sp_3072_cond_add_24 ENDP +sp_3072_to_bin_movbe_48 ENDP _TEXT ENDS -IFDEF HAVE_INTEL_AVX2 -; /* Conditionally add a and b using the mask m. -; * m is -1 to add and 0 when not. +ENDIF +; /* Multiply a and b into r. (r = a * b) ; * -; * 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. +; * r A single precision integer. +; * a A single precision integer. +; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_3072_cond_add_avx2_24 PROC +sp_3072_mul_12 PROC push r12 - mov rax, 0 - mov r12, QWORD PTR [r8] - mov r10, QWORD PTR [rdx] - pext r12, r12, r9 - add r10, r12 - mov r12, QWORD PTR [r8+8] - mov r11, QWORD PTR [rdx+8] - pext r12, r12, r9 - mov QWORD PTR [rcx], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+16] - mov r12, QWORD PTR [rdx+16] - pext r10, r10, r9 - mov QWORD PTR [rcx+8], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+24] - mov r10, QWORD PTR [rdx+24] - pext r11, r11, r9 - mov QWORD PTR [rcx+16], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+32] - mov r11, QWORD PTR [rdx+32] - pext r12, r12, r9 - mov QWORD PTR [rcx+24], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+40] - mov r12, QWORD PTR [rdx+40] - pext r10, r10, r9 - mov QWORD PTR [rcx+32], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+48] - mov r10, QWORD PTR [rdx+48] - pext r11, r11, r9 - mov QWORD PTR [rcx+40], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+56] - mov r11, QWORD PTR [rdx+56] - pext r12, r12, r9 - mov QWORD PTR [rcx+48], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+64] - mov r12, QWORD PTR [rdx+64] - pext r10, r10, r9 - mov QWORD PTR [rcx+56], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+72] - mov r10, QWORD PTR [rdx+72] - pext r11, r11, r9 - mov QWORD PTR [rcx+64], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+80] - mov r11, QWORD PTR [rdx+80] - pext r12, r12, r9 - mov QWORD PTR [rcx+72], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+88] - mov r12, QWORD PTR [rdx+88] - pext r10, r10, r9 - mov QWORD PTR [rcx+80], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+96] - mov r10, QWORD PTR [rdx+96] - pext r11, r11, r9 - mov QWORD PTR [rcx+88], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+104] - mov r11, QWORD PTR [rdx+104] - pext r12, r12, r9 + mov r9, rdx + sub rsp, 96 + ; A[0] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9] + xor r12, r12 + mov QWORD PTR [rsp], rax + mov r11, rdx + ; A[0] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[1] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+8] + add r11, rax + adc r12, rdx + adc r10, 0 + mov QWORD PTR [rsp+8], r11 + ; A[0] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[1] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+8] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[2] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+16] + add r12, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rsp+16], r12 + ; A[0] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[1] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+8] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[2] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+16] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[3] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+24] + add r10, rax + adc r11, rdx + adc r12, 0 + mov QWORD PTR [rsp+24], r10 + ; A[0] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[1] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+8] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[2] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+16] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[3] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+24] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[4] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+32] + add r11, rax + adc r12, rdx + adc r10, 0 + mov QWORD PTR [rsp+32], r11 + ; A[0] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[1] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+8] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[2] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+16] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[3] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+24] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[4] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+32] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[5] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+40] + add r12, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rsp+40], r12 + ; A[0] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[1] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+8] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[2] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+16] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[3] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+24] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[4] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+32] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[5] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+40] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[6] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+48] + add r10, rax + adc r11, rdx + adc r12, 0 + mov QWORD PTR [rsp+48], r10 + ; A[0] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[1] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+8] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[2] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+16] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[3] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+24] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[4] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+32] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[5] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+40] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[6] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+48] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[7] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+56] + add r11, rax + adc r12, rdx + adc r10, 0 + mov QWORD PTR [rsp+56], r11 + ; A[0] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[1] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+8] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[2] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+16] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[3] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+24] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[4] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+32] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[5] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+40] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[6] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+48] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[7] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+56] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[8] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+64] + add r12, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rsp+64], r12 + ; A[0] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[1] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+8] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[2] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+16] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[3] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+24] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[4] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+32] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[5] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+40] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[6] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+48] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[7] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+56] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[8] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+64] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[9] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+72] + add r10, rax + adc r11, rdx + adc r12, 0 + mov QWORD PTR [rsp+72], r10 + ; A[0] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[1] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+8] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[2] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+16] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[3] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+24] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[4] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+32] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[5] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+40] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[6] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+48] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[7] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+56] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[8] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+64] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[9] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+72] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[10] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+80] + add r11, rax + adc r12, rdx + adc r10, 0 + mov QWORD PTR [rsp+80], r11 + ; A[0] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[1] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+8] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[2] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+16] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[3] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+24] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[4] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+32] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[5] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+40] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[6] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+48] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[7] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+56] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[8] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+64] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[9] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+72] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[10] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+80] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[11] * B[0] + mov rax, QWORD PTR [r8] + mul QWORD PTR [r9+88] + add r12, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rsp+88], r12 + ; A[1] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+8] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[2] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+16] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[3] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+24] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[4] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+32] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[5] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+40] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[6] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+48] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[7] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+56] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[8] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+64] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[9] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+72] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[10] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+80] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[11] * B[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r9+88] + add r10, rax + adc r11, rdx + adc r12, 0 mov QWORD PTR [rcx+96], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+112] - mov r12, QWORD PTR [rdx+112] - pext r10, r10, r9 + ; A[2] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+16] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[3] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+24] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[4] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+32] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[5] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+40] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[6] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+48] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[7] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+56] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[8] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+64] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[9] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+72] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[10] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+80] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[11] * B[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r9+88] + add r11, rax + adc r12, rdx + adc r10, 0 mov QWORD PTR [rcx+104], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+120] - mov r10, QWORD PTR [rdx+120] - pext r11, r11, r9 + ; A[3] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+24] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[4] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+32] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[5] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+40] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[6] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+48] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[7] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+56] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[8] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+64] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[9] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+72] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[10] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+80] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[11] * B[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r9+88] + add r12, rax + adc r10, rdx + adc r11, 0 mov QWORD PTR [rcx+112], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+128] - mov r11, QWORD PTR [rdx+128] - pext r12, r12, r9 + ; A[4] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+32] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[5] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+40] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[6] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+48] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[7] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+56] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[8] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+64] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[9] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+72] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[10] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+80] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[11] * B[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r9+88] + add r10, rax + adc r11, rdx + adc r12, 0 mov QWORD PTR [rcx+120], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+136] - mov r12, QWORD PTR [rdx+136] - pext r10, r10, r9 + ; A[5] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+40] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[6] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+48] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[7] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+56] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[8] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+64] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[9] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+72] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[10] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+80] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[11] * B[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r9+88] + add r11, rax + adc r12, rdx + adc r10, 0 mov QWORD PTR [rcx+128], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+144] - mov r10, QWORD PTR [rdx+144] - pext r11, r11, r9 + ; A[6] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+48] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[7] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+56] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[8] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+64] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[9] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+72] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[10] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+80] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[11] * B[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r9+88] + add r12, rax + adc r10, rdx + adc r11, 0 mov QWORD PTR [rcx+136], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+152] - mov r11, QWORD PTR [rdx+152] - pext r12, r12, r9 - mov QWORD PTR [rcx+144], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+160] - mov r12, QWORD PTR [rdx+160] - pext r10, r10, r9 + ; A[7] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+56] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[8] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+64] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[9] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+72] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[10] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+80] + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[11] * B[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r9+88] + add r10, rax + adc r11, rdx + adc r12, 0 + mov QWORD PTR [rcx+144], r10 + ; A[8] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+64] + xor r10, r10 + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[9] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+72] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[10] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+80] + add r11, rax + adc r12, rdx + adc r10, 0 + ; A[11] * B[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r9+88] + add r11, rax + adc r12, rdx + adc r10, 0 mov QWORD PTR [rcx+152], r11 - adc r12, r10 - mov r11, QWORD PTR [r8+168] - mov r10, QWORD PTR [rdx+168] - pext r11, r11, r9 + ; A[9] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+72] + xor r11, r11 + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[10] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+80] + add r12, rax + adc r10, rdx + adc r11, 0 + ; A[11] * B[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r9+88] + add r12, rax + adc r10, rdx + adc r11, 0 mov QWORD PTR [rcx+160], r12 - adc r10, r11 - mov r12, QWORD PTR [r8+176] - mov r11, QWORD PTR [rdx+176] - pext r12, r12, r9 + ; A[10] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+80] + xor r12, r12 + add r10, rax + adc r11, rdx + adc r12, 0 + ; A[11] * B[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r9+88] + add r10, rax + adc r11, rdx + adc r12, 0 mov QWORD PTR [rcx+168], r10 - adc r11, r12 - mov r10, QWORD PTR [r8+184] - mov r12, QWORD PTR [rdx+184] - pext r10, r10, r9 + ; A[11] * B[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r9+88] + add r11, rax + adc r12, rdx mov QWORD PTR [rcx+176], r11 - adc r12, r10 mov QWORD PTR [rcx+184], r12 - adc rax, 0 - pop r12 - ret -sp_3072_cond_add_avx2_24 ENDP -_TEXT ENDS -ENDIF -; /* Shift number left by n bit. (r = a << n) -; * -; * r Result of left shift by n. -; * a Number to shift. -; * n Amoutnt o shift. -; */ -_TEXT SEGMENT READONLY PARA -sp_3072_lshift_48 PROC - push r12 - push r13 - mov rax, rcx - mov cl, r8b - mov r12, 0 - mov r13, QWORD PTR [rdx+344] - mov r8, QWORD PTR [rdx+352] - mov r9, QWORD PTR [rdx+360] - mov r10, QWORD PTR [rdx+368] - mov r11, QWORD PTR [rdx+376] - shld r12, r11, cl - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+352], r8 - mov QWORD PTR [rax+360], r9 - mov QWORD PTR [rax+368], r10 - mov QWORD PTR [rax+376], r11 - mov QWORD PTR [rax+384], r12 - mov r11, QWORD PTR [rdx+312] - mov r8, QWORD PTR [rdx+320] - mov r9, QWORD PTR [rdx+328] - mov r10, QWORD PTR [rdx+336] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+320], r8 - mov QWORD PTR [rax+328], r9 - mov QWORD PTR [rax+336], r10 - mov QWORD PTR [rax+344], r13 - mov r13, QWORD PTR [rdx+280] - mov r8, QWORD PTR [rdx+288] - mov r9, QWORD PTR [rdx+296] - mov r10, QWORD PTR [rdx+304] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+288], r8 - mov QWORD PTR [rax+296], r9 - mov QWORD PTR [rax+304], r10 - mov QWORD PTR [rax+312], r11 - mov r11, QWORD PTR [rdx+248] - mov r8, QWORD PTR [rdx+256] - mov r9, QWORD PTR [rdx+264] - mov r10, QWORD PTR [rdx+272] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+256], r8 - mov QWORD PTR [rax+264], r9 - mov QWORD PTR [rax+272], r10 - mov QWORD PTR [rax+280], r13 - mov r13, QWORD PTR [rdx+216] - mov r8, QWORD PTR [rdx+224] - mov r9, QWORD PTR [rdx+232] - mov r10, QWORD PTR [rdx+240] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+224], r8 - mov QWORD PTR [rax+232], r9 - mov QWORD PTR [rax+240], r10 - mov QWORD PTR [rax+248], r11 - mov r11, QWORD PTR [rdx+184] - mov r8, QWORD PTR [rdx+192] - mov r9, QWORD PTR [rdx+200] - mov r10, QWORD PTR [rdx+208] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+192], r8 - mov QWORD PTR [rax+200], r9 - mov QWORD PTR [rax+208], r10 - mov QWORD PTR [rax+216], r13 - mov r13, QWORD PTR [rdx+152] - mov r8, QWORD PTR [rdx+160] - mov r9, QWORD PTR [rdx+168] - mov r10, QWORD PTR [rdx+176] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+160], r8 - mov QWORD PTR [rax+168], r9 - mov QWORD PTR [rax+176], r10 - mov QWORD PTR [rax+184], r11 - mov r11, QWORD PTR [rdx+120] - mov r8, QWORD PTR [rdx+128] - mov r9, QWORD PTR [rdx+136] - mov r10, QWORD PTR [rdx+144] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+128], r8 - mov QWORD PTR [rax+136], r9 - mov QWORD PTR [rax+144], r10 - mov QWORD PTR [rax+152], r13 - mov r13, QWORD PTR [rdx+88] - mov r8, QWORD PTR [rdx+96] - mov r9, QWORD PTR [rdx+104] - mov r10, QWORD PTR [rdx+112] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+96], r8 - mov QWORD PTR [rax+104], r9 - mov QWORD PTR [rax+112], r10 - mov QWORD PTR [rax+120], r11 - mov r11, QWORD PTR [rdx+56] - mov r8, QWORD PTR [rdx+64] - mov r9, QWORD PTR [rdx+72] - mov r10, QWORD PTR [rdx+80] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r11, cl - mov QWORD PTR [rax+64], r8 - mov QWORD PTR [rax+72], r9 - mov QWORD PTR [rax+80], r10 - mov QWORD PTR [rax+88], r13 - mov r13, QWORD PTR [rdx+24] - mov r8, QWORD PTR [rdx+32] - mov r9, QWORD PTR [rdx+40] - mov r10, QWORD PTR [rdx+48] - shld r11, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shld r8, r13, cl - mov QWORD PTR [rax+32], r8 - mov QWORD PTR [rax+40], r9 - mov QWORD PTR [rax+48], r10 - mov QWORD PTR [rax+56], r11 - mov r8, QWORD PTR [rdx] - mov r9, QWORD PTR [rdx+8] - mov r10, QWORD PTR [rdx+16] - shld r13, r10, cl - shld r10, r9, cl - shld r9, r8, cl - shl r8, cl - mov QWORD PTR [rax], r8 - mov QWORD PTR [rax+8], r9 - mov QWORD PTR [rax+16], r10 - mov QWORD PTR [rax+24], r13 + mov rax, QWORD PTR [rsp] + mov rdx, QWORD PTR [rsp+8] + mov r10, QWORD PTR [rsp+16] + mov r11, QWORD PTR [rsp+24] + mov QWORD PTR [rcx], rax + mov QWORD PTR [rcx+8], rdx + mov QWORD PTR [rcx+16], r10 + mov QWORD PTR [rcx+24], r11 + mov rax, QWORD PTR [rsp+32] + mov rdx, QWORD PTR [rsp+40] + mov r10, QWORD PTR [rsp+48] + mov r11, QWORD PTR [rsp+56] + mov QWORD PTR [rcx+32], rax + mov QWORD PTR [rcx+40], rdx + mov QWORD PTR [rcx+48], r10 + mov QWORD PTR [rcx+56], r11 + mov rax, QWORD PTR [rsp+64] + mov rdx, QWORD PTR [rsp+72] + mov r10, QWORD PTR [rsp+80] + mov r11, QWORD PTR [rsp+88] + mov QWORD PTR [rcx+64], rax + mov QWORD PTR [rcx+72], rdx + mov QWORD PTR [rcx+80], r10 + mov QWORD PTR [rcx+88], r11 + add rsp, 96 + pop r12 + ret +sp_3072_mul_12 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mul_avx2_12 PROC + push rbx + push rbp + push r12 + push r13 + push r14 + mov rbp, r8 + mov r8, rcx + mov r9, rdx + sub rsp, 96 + cmp r9, r8 + mov rbx, rsp + cmovne rbx, r8 + cmp rbp, r8 + cmove rbx, rsp + add r8, 96 + xor r14, r14 + mov rdx, QWORD PTR [r9] + ; A[0] * B[0] + mulx r11, r10, QWORD PTR [rbp] + ; A[0] * B[1] + mulx r12, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx], r10 + adcx r11, rax + mov QWORD PTR [rbx+8], r11 + ; A[0] * B[2] + mulx r10, rax, QWORD PTR [rbp+16] + adcx r12, rax + ; A[0] * B[3] + mulx r11, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+16], r12 + adcx r10, rax + mov QWORD PTR [rbx+24], r10 + ; A[0] * B[4] + mulx r12, rax, QWORD PTR [rbp+32] + adcx r11, rax + ; A[0] * B[5] + mulx r10, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+32], r11 + adcx r12, rax + mov QWORD PTR [rbx+40], r12 + ; A[0] * B[6] + mulx r11, rax, QWORD PTR [rbp+48] + adcx r10, rax + ; A[0] * B[7] + mulx r12, rax, QWORD PTR [rbp+56] + mov QWORD PTR [rbx+48], r10 + adcx r11, rax + mov QWORD PTR [rbx+56], r11 + ; A[0] * B[8] + mulx r10, rax, QWORD PTR [rbp+64] + adcx r12, rax + ; A[0] * B[9] + mulx r11, rax, QWORD PTR [rbp+72] + mov QWORD PTR [rbx+64], r12 + adcx r10, rax + mov QWORD PTR [rbx+72], r10 + ; A[0] * B[10] + mulx r12, rax, QWORD PTR [rbp+80] + adcx r11, rax + ; A[0] * B[11] + mulx r10, rax, QWORD PTR [rbp+88] + mov QWORD PTR [rbx+80], r11 + adcx r12, rax + adcx r10, r14 + mov r13, r14 + adcx r13, r14 + mov QWORD PTR [rbx+88], r12 + mov QWORD PTR [r8], r10 + mov rdx, QWORD PTR [r9+8] + mov r11, QWORD PTR [rbx+8] + mov r12, QWORD PTR [rbx+16] + mov r10, QWORD PTR [rbx+24] + ; A[1] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r11, rax + adox r12, rcx + ; A[1] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+8], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+16], r12 + mov r11, QWORD PTR [rbx+32] + mov r12, QWORD PTR [rbx+40] + ; A[1] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r10, rax + adox r11, rcx + ; A[1] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+24], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+32], r11 + mov r10, QWORD PTR [rbx+48] + mov r11, QWORD PTR [rbx+56] + ; A[1] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r12, rax + adox r10, rcx + ; A[1] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+40], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+48], r10 + mov r12, QWORD PTR [rbx+64] + mov r10, QWORD PTR [rbx+72] + ; A[1] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r11, rax + adox r12, rcx + ; A[1] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [rbx+56], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+64], r12 + mov r11, QWORD PTR [rbx+80] + mov r12, QWORD PTR [rbx+88] + ; A[1] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r10, rax + adox r11, rcx + ; A[1] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [rbx+72], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+80], r11 + mov r10, QWORD PTR [r8] + ; A[1] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r12, rax + adox r10, rcx + ; A[1] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [rbx+88], r12 + mov r11, r14 + adcx r10, rax + adox r11, rcx + adcx r11, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8], r10 + mov QWORD PTR [r8+8], r11 + mov rdx, QWORD PTR [r9+16] + mov r12, QWORD PTR [rbx+16] + mov r10, QWORD PTR [rbx+24] + mov r11, QWORD PTR [rbx+32] + ; A[2] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r12, rax + adox r10, rcx + ; A[2] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+16], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+24], r10 + mov r12, QWORD PTR [rbx+40] + mov r10, QWORD PTR [rbx+48] + ; A[2] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r11, rax + adox r12, rcx + ; A[2] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+32], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+40], r12 + mov r11, QWORD PTR [rbx+56] + mov r12, QWORD PTR [rbx+64] + ; A[2] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r10, rax + adox r11, rcx + ; A[2] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+48], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+56], r11 + mov r10, QWORD PTR [rbx+72] + mov r11, QWORD PTR [rbx+80] + ; A[2] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r12, rax + adox r10, rcx + ; A[2] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [rbx+64], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+72], r10 + mov r12, QWORD PTR [rbx+88] + mov r10, QWORD PTR [r8] + ; A[2] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r11, rax + adox r12, rcx + ; A[2] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [rbx+80], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+88], r12 + mov r11, QWORD PTR [r8+8] + ; A[2] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r10, rax + adox r11, rcx + ; A[2] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8], r10 + mov r12, r14 + adcx r11, rax + adox r12, rcx + adcx r12, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+8], r11 + mov QWORD PTR [r8+16], r12 + mov rdx, QWORD PTR [r9+24] + mov r10, QWORD PTR [rbx+24] + mov r11, QWORD PTR [rbx+32] + mov r12, QWORD PTR [rbx+40] + ; A[3] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r10, rax + adox r11, rcx + ; A[3] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+24], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+32], r11 + mov r10, QWORD PTR [rbx+48] + mov r11, QWORD PTR [rbx+56] + ; A[3] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r12, rax + adox r10, rcx + ; A[3] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+40], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+48], r10 + mov r12, QWORD PTR [rbx+64] + mov r10, QWORD PTR [rbx+72] + ; A[3] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r11, rax + adox r12, rcx + ; A[3] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+56], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+64], r12 + mov r11, QWORD PTR [rbx+80] + mov r12, QWORD PTR [rbx+88] + ; A[3] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r10, rax + adox r11, rcx + ; A[3] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [rbx+72], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+80], r11 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + ; A[3] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r12, rax + adox r10, rcx + ; A[3] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [rbx+88], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r12, QWORD PTR [r8+16] + ; A[3] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r11, rax + adox r12, rcx + ; A[3] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+8], r11 + mov r10, r14 + adcx r12, rax + adox r10, rcx + adcx r10, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+16], r12 + mov QWORD PTR [r8+24], r10 + mov rdx, QWORD PTR [r9+32] + mov r11, QWORD PTR [rbx+32] + mov r12, QWORD PTR [rbx+40] + mov r10, QWORD PTR [rbx+48] + ; A[4] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r11, rax + adox r12, rcx + ; A[4] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+32], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+40], r12 + mov r11, QWORD PTR [rbx+56] + mov r12, QWORD PTR [rbx+64] + ; A[4] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r10, rax + adox r11, rcx + ; A[4] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+48], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+56], r11 + mov r10, QWORD PTR [rbx+72] + mov r11, QWORD PTR [rbx+80] + ; A[4] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r12, rax + adox r10, rcx + ; A[4] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+64], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+72], r10 + mov r12, QWORD PTR [rbx+88] + mov r10, QWORD PTR [r8] + ; A[4] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r11, rax + adox r12, rcx + ; A[4] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [rbx+80], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+88], r12 + mov r11, QWORD PTR [r8+8] + mov r12, QWORD PTR [r8+16] + ; A[4] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r10, rax + adox r11, rcx + ; A[4] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+8], r11 + mov r10, QWORD PTR [r8+24] + ; A[4] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r12, rax + adox r10, rcx + ; A[4] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+16], r12 + mov r11, r14 + adcx r10, rax + adox r11, rcx + adcx r11, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+24], r10 + mov QWORD PTR [r8+32], r11 + mov rdx, QWORD PTR [r9+40] + mov r12, QWORD PTR [rbx+40] + mov r10, QWORD PTR [rbx+48] + mov r11, QWORD PTR [rbx+56] + ; A[5] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r12, rax + adox r10, rcx + ; A[5] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+40], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+48], r10 + mov r12, QWORD PTR [rbx+64] + mov r10, QWORD PTR [rbx+72] + ; A[5] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r11, rax + adox r12, rcx + ; A[5] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+56], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+64], r12 + mov r11, QWORD PTR [rbx+80] + mov r12, QWORD PTR [rbx+88] + ; A[5] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r10, rax + adox r11, rcx + ; A[5] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+72], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+80], r11 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + ; A[5] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r12, rax + adox r10, rcx + ; A[5] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [rbx+88], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r12, QWORD PTR [r8+16] + mov r10, QWORD PTR [r8+24] + ; A[5] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r11, rax + adox r12, rcx + ; A[5] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+8], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+16], r12 + mov r11, QWORD PTR [r8+32] + ; A[5] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r10, rax + adox r11, rcx + ; A[5] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+24], r10 + mov r12, r14 + adcx r11, rax + adox r12, rcx + adcx r12, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+32], r11 + mov QWORD PTR [r8+40], r12 + mov rdx, QWORD PTR [r9+48] + mov r10, QWORD PTR [rbx+48] + mov r11, QWORD PTR [rbx+56] + mov r12, QWORD PTR [rbx+64] + ; A[6] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r10, rax + adox r11, rcx + ; A[6] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+48], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+56], r11 + mov r10, QWORD PTR [rbx+72] + mov r11, QWORD PTR [rbx+80] + ; A[6] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r12, rax + adox r10, rcx + ; A[6] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+64], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+72], r10 + mov r12, QWORD PTR [rbx+88] + mov r10, QWORD PTR [r8] + ; A[6] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r11, rax + adox r12, rcx + ; A[6] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+80], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+88], r12 + mov r11, QWORD PTR [r8+8] + mov r12, QWORD PTR [r8+16] + ; A[6] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r10, rax + adox r11, rcx + ; A[6] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [r8], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+8], r11 + mov r10, QWORD PTR [r8+24] + mov r11, QWORD PTR [r8+32] + ; A[6] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r12, rax + adox r10, rcx + ; A[6] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+16], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+24], r10 + mov r12, QWORD PTR [r8+40] + ; A[6] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r11, rax + adox r12, rcx + ; A[6] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+32], r11 + mov r10, r14 + adcx r12, rax + adox r10, rcx + adcx r10, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+40], r12 + mov QWORD PTR [r8+48], r10 + mov rdx, QWORD PTR [r9+56] + mov r11, QWORD PTR [rbx+56] + mov r12, QWORD PTR [rbx+64] + mov r10, QWORD PTR [rbx+72] + ; A[7] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r11, rax + adox r12, rcx + ; A[7] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+56], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+64], r12 + mov r11, QWORD PTR [rbx+80] + mov r12, QWORD PTR [rbx+88] + ; A[7] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r10, rax + adox r11, rcx + ; A[7] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+72], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+80], r11 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + ; A[7] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r12, rax + adox r10, rcx + ; A[7] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [rbx+88], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r12, QWORD PTR [r8+16] + mov r10, QWORD PTR [r8+24] + ; A[7] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r11, rax + adox r12, rcx + ; A[7] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [r8+8], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+16], r12 + mov r11, QWORD PTR [r8+32] + mov r12, QWORD PTR [r8+40] + ; A[7] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r10, rax + adox r11, rcx + ; A[7] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+24], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+32], r11 + mov r10, QWORD PTR [r8+48] + ; A[7] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r12, rax + adox r10, rcx + ; A[7] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+40], r12 + mov r11, r14 + adcx r10, rax + adox r11, rcx + adcx r11, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+48], r10 + mov QWORD PTR [r8+56], r11 + mov rdx, QWORD PTR [r9+64] + mov r12, QWORD PTR [rbx+64] + mov r10, QWORD PTR [rbx+72] + mov r11, QWORD PTR [rbx+80] + ; A[8] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r12, rax + adox r10, rcx + ; A[8] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+64], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbx+72], r10 + mov r12, QWORD PTR [rbx+88] + mov r10, QWORD PTR [r8] + ; A[8] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r11, rax + adox r12, rcx + ; A[8] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+80], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+88], r12 + mov r11, QWORD PTR [r8+8] + mov r12, QWORD PTR [r8+16] + ; A[8] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r10, rax + adox r11, rcx + ; A[8] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [r8], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+8], r11 + mov r10, QWORD PTR [r8+24] + mov r11, QWORD PTR [r8+32] + ; A[8] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r12, rax + adox r10, rcx + ; A[8] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [r8+16], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+24], r10 + mov r12, QWORD PTR [r8+40] + mov r10, QWORD PTR [r8+48] + ; A[8] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r11, rax + adox r12, rcx + ; A[8] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+32], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+40], r12 + mov r11, QWORD PTR [r8+56] + ; A[8] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r10, rax + adox r11, rcx + ; A[8] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+48], r10 + mov r12, r14 + adcx r11, rax + adox r12, rcx + adcx r12, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+56], r11 + mov QWORD PTR [r8+64], r12 + mov rdx, QWORD PTR [r9+72] + mov r10, QWORD PTR [rbx+72] + mov r11, QWORD PTR [rbx+80] + mov r12, QWORD PTR [rbx+88] + ; A[9] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r10, rax + adox r11, rcx + ; A[9] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+72], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [rbx+80], r11 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + ; A[9] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r12, rax + adox r10, rcx + ; A[9] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [rbx+88], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r12, QWORD PTR [r8+16] + mov r10, QWORD PTR [r8+24] + ; A[9] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r11, rax + adox r12, rcx + ; A[9] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [r8+8], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+16], r12 + mov r11, QWORD PTR [r8+32] + mov r12, QWORD PTR [r8+40] + ; A[9] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r10, rax + adox r11, rcx + ; A[9] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [r8+24], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+32], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + ; A[9] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r12, rax + adox r10, rcx + ; A[9] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+40], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+48], r10 + mov r12, QWORD PTR [r8+64] + ; A[9] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r11, rax + adox r12, rcx + ; A[9] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+56], r11 + mov r10, r14 + adcx r12, rax + adox r10, rcx + adcx r10, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+64], r12 + mov QWORD PTR [r8+72], r10 + mov rdx, QWORD PTR [r9+80] + mov r11, QWORD PTR [rbx+80] + mov r12, QWORD PTR [rbx+88] + mov r10, QWORD PTR [r8] + ; A[10] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r11, rax + adox r12, rcx + ; A[10] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+80], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [rbx+88], r12 + mov r11, QWORD PTR [r8+8] + mov r12, QWORD PTR [r8+16] + ; A[10] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r10, rax + adox r11, rcx + ; A[10] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [r8], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+8], r11 + mov r10, QWORD PTR [r8+24] + mov r11, QWORD PTR [r8+32] + ; A[10] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r12, rax + adox r10, rcx + ; A[10] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [r8+16], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+24], r10 + mov r12, QWORD PTR [r8+40] + mov r10, QWORD PTR [r8+48] + ; A[10] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r11, rax + adox r12, rcx + ; A[10] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [r8+32], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+40], r12 + mov r11, QWORD PTR [r8+56] + mov r12, QWORD PTR [r8+64] + ; A[10] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r10, rax + adox r11, rcx + ; A[10] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+48], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+56], r11 + mov r10, QWORD PTR [r8+72] + ; A[10] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r12, rax + adox r10, rcx + ; A[10] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+64], r12 + mov r11, r14 + adcx r10, rax + adox r11, rcx + adcx r11, r13 + mov r13, r14 + adox r13, r14 + adcx r13, r14 + mov QWORD PTR [r8+72], r10 + mov QWORD PTR [r8+80], r11 + mov rdx, QWORD PTR [r9+88] + mov r12, QWORD PTR [rbx+88] + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + ; A[11] * B[0] + mulx rcx, rax, QWORD PTR [rbp] + adcx r12, rax + adox r10, rcx + ; A[11] * B[1] + mulx rcx, rax, QWORD PTR [rbp+8] + mov QWORD PTR [rbx+88], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r12, QWORD PTR [r8+16] + mov r10, QWORD PTR [r8+24] + ; A[11] * B[2] + mulx rcx, rax, QWORD PTR [rbp+16] + adcx r11, rax + adox r12, rcx + ; A[11] * B[3] + mulx rcx, rax, QWORD PTR [rbp+24] + mov QWORD PTR [r8+8], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+16], r12 + mov r11, QWORD PTR [r8+32] + mov r12, QWORD PTR [r8+40] + ; A[11] * B[4] + mulx rcx, rax, QWORD PTR [rbp+32] + adcx r10, rax + adox r11, rcx + ; A[11] * B[5] + mulx rcx, rax, QWORD PTR [rbp+40] + mov QWORD PTR [r8+24], r10 + adcx r11, rax + adox r12, rcx + mov QWORD PTR [r8+32], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + ; A[11] * B[6] + mulx rcx, rax, QWORD PTR [rbp+48] + adcx r12, rax + adox r10, rcx + ; A[11] * B[7] + mulx rcx, rax, QWORD PTR [rbp+56] + mov QWORD PTR [r8+40], r12 + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+48], r10 + mov r12, QWORD PTR [r8+64] + mov r10, QWORD PTR [r8+72] + ; A[11] * B[8] + mulx rcx, rax, QWORD PTR [rbp+64] + adcx r11, rax + adox r12, rcx + ; A[11] * B[9] + mulx rcx, rax, QWORD PTR [rbp+72] + mov QWORD PTR [r8+56], r11 + adcx r12, rax + adox r10, rcx + mov QWORD PTR [r8+64], r12 + mov r11, QWORD PTR [r8+80] + ; A[11] * B[10] + mulx rcx, rax, QWORD PTR [rbp+80] + adcx r10, rax + adox r11, rcx + ; A[11] * B[11] + mulx rcx, rax, QWORD PTR [rbp+88] + mov QWORD PTR [r8+72], r10 + mov r12, r14 + adcx r11, rax + adox r12, rcx + adcx r12, r13 + mov QWORD PTR [r8+80], r11 + mov QWORD PTR [r8+88], r12 + sub r8, 96 + cmp r9, r8 + je L_start_3072_mul_avx2_12 + cmp rbp, r8 + jne L_end_3072_mul_avx2_12 +L_start_3072_mul_avx2_12: + vmovdqu xmm0, OWORD PTR [rbx] + vmovups OWORD PTR [r8], xmm0 + vmovdqu xmm0, OWORD PTR [rbx+16] + vmovups OWORD PTR [r8+16], xmm0 + vmovdqu xmm0, OWORD PTR [rbx+32] + vmovups OWORD PTR [r8+32], xmm0 + vmovdqu xmm0, OWORD PTR [rbx+48] + vmovups OWORD PTR [r8+48], xmm0 + vmovdqu xmm0, OWORD PTR [rbx+64] + vmovups OWORD PTR [r8+64], xmm0 + vmovdqu xmm0, OWORD PTR [rbx+80] + vmovups OWORD PTR [r8+80], xmm0 +L_end_3072_mul_avx2_12: + add rsp, 96 + pop r14 pop r13 pop r12 + pop rbp + pop rbx ret -sp_3072_lshift_48 ENDP +sp_3072_mul_avx2_12 ENDP _TEXT ENDS ENDIF -ENDIF -IFDEF WOLFSSL_SP_4096 -IFDEF WOLFSSL_SP_4096 -; /* Read big endian unsigned byte array into r. -; * Uses the bswap instruction. +; /* Add b to a into r. (r = a + b) ; * ; * r A single precision integer. -; * size Maximum number of bytes to convert -; * a Byte array. -; * n Number of bytes in array to read. +; * a A single precision integer. +; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_from_bin_bswap PROC - push r12 - push r13 - mov r11, r8 - mov r12, rcx - add r11, r9 - add r12, 512 - xor r13, r13 - jmp L_4096_from_bin_bswap_64_end -L_4096_from_bin_bswap_64_start: - sub r11, 64 - mov rax, QWORD PTR [r11+56] - mov r10, QWORD PTR [r11+48] - bswap rax - bswap r10 - mov QWORD PTR [rcx], rax - mov QWORD PTR [rcx+8], r10 - mov rax, QWORD PTR [r11+40] - mov r10, QWORD PTR [r11+32] - bswap rax - bswap r10 - mov QWORD PTR [rcx+16], rax +sp_3072_add_12 PROC + ; Add + mov r9, QWORD PTR [rdx] + xor rax, rax + add r9, QWORD PTR [r8] + mov r10, QWORD PTR [rdx+8] + mov QWORD PTR [rcx], r9 + adc r10, QWORD PTR [r8+8] + mov r9, QWORD PTR [rdx+16] + mov QWORD PTR [rcx+8], r10 + adc r9, QWORD PTR [r8+16] + mov r10, QWORD PTR [rdx+24] + mov QWORD PTR [rcx+16], r9 + adc r10, QWORD PTR [r8+24] + mov r9, QWORD PTR [rdx+32] mov QWORD PTR [rcx+24], r10 - mov rax, QWORD PTR [r11+24] - mov r10, QWORD PTR [r11+16] - bswap rax - bswap r10 - mov QWORD PTR [rcx+32], rax + adc r9, QWORD PTR [r8+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [rcx+32], r9 + adc r10, QWORD PTR [r8+40] + mov r9, QWORD PTR [rdx+48] mov QWORD PTR [rcx+40], r10 - mov rax, QWORD PTR [r11+8] - mov r10, QWORD PTR [r11] - bswap rax - bswap r10 - mov QWORD PTR [rcx+48], rax + adc r9, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+56] + mov QWORD PTR [rcx+48], r9 + adc r10, QWORD PTR [r8+56] + mov r9, QWORD PTR [rdx+64] mov QWORD PTR [rcx+56], r10 - add rcx, 64 - sub r9, 64 -L_4096_from_bin_bswap_64_end: - cmp r9, 63 - jg L_4096_from_bin_bswap_64_start - jmp L_4096_from_bin_bswap_8_end -L_4096_from_bin_bswap_8_start: - sub r11, 8 - mov rax, QWORD PTR [r11] - bswap rax - mov QWORD PTR [rcx], rax - add rcx, 8 - sub r9, 8 -L_4096_from_bin_bswap_8_end: - cmp r9, 7 - jg L_4096_from_bin_bswap_8_start - cmp r9, r13 - je L_4096_from_bin_bswap_hi_end - mov r10, r13 - mov rax, r13 -L_4096_from_bin_bswap_hi_start: - mov al, BYTE PTR [r8] - shl r10, 8 - inc r8 - add r10, rax - dec r9 - jg L_4096_from_bin_bswap_hi_start - mov QWORD PTR [rcx], r10 - add rcx, 8 -L_4096_from_bin_bswap_hi_end: - cmp rcx, r12 - jge L_4096_from_bin_bswap_zero_end -L_4096_from_bin_bswap_zero_start: - mov QWORD PTR [rcx], r13 - add rcx, 8 - cmp rcx, r12 - jl L_4096_from_bin_bswap_zero_start -L_4096_from_bin_bswap_zero_end: - pop r13 - pop r12 + adc r9, QWORD PTR [r8+64] + mov r10, QWORD PTR [rdx+72] + mov QWORD PTR [rcx+64], r9 + adc r10, QWORD PTR [r8+72] + mov r9, QWORD PTR [rdx+80] + mov QWORD PTR [rcx+72], r10 + adc r9, QWORD PTR [r8+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [rcx+80], r9 + adc r10, QWORD PTR [r8+88] + mov QWORD PTR [rcx+88], r10 + adc rax, 0 ret -sp_4096_from_bin_bswap ENDP +sp_3072_add_12 ENDP _TEXT ENDS -IFNDEF NO_MOVBE_SUPPORT -; /* Read big endian unsigned byte array into r. -; * Uses the movbe instruction which is an optional instruction. +; /* Sub b from a into a. (a -= b) +; * +; * a A single precision integer and result. +; * b A single precision integer. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_sub_in_place_24 PROC + mov r8, QWORD PTR [rcx] + sub r8, QWORD PTR [rdx] + mov r9, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + sbb r9, QWORD PTR [rdx+8] + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], r9 + sbb r8, QWORD PTR [rdx+16] + mov r9, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + sbb r9, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], r9 + sbb r8, QWORD PTR [rdx+32] + mov r9, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + sbb r9, QWORD PTR [rdx+40] + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], r9 + sbb r8, QWORD PTR [rdx+48] + mov r9, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + sbb r9, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], r9 + sbb r8, QWORD PTR [rdx+64] + mov r9, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + sbb r9, QWORD PTR [rdx+72] + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], r9 + sbb r8, QWORD PTR [rdx+80] + mov r9, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + sbb r9, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rcx+96] + mov QWORD PTR [rcx+88], r9 + sbb r8, QWORD PTR [rdx+96] + mov r9, QWORD PTR [rcx+104] + mov QWORD PTR [rcx+96], r8 + sbb r9, QWORD PTR [rdx+104] + mov r8, QWORD PTR [rcx+112] + mov QWORD PTR [rcx+104], r9 + sbb r8, QWORD PTR [rdx+112] + mov r9, QWORD PTR [rcx+120] + mov QWORD PTR [rcx+112], r8 + sbb r9, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rcx+128] + mov QWORD PTR [rcx+120], r9 + sbb r8, QWORD PTR [rdx+128] + mov r9, QWORD PTR [rcx+136] + mov QWORD PTR [rcx+128], r8 + sbb r9, QWORD PTR [rdx+136] + mov r8, QWORD PTR [rcx+144] + mov QWORD PTR [rcx+136], r9 + sbb r8, QWORD PTR [rdx+144] + mov r9, QWORD PTR [rcx+152] + mov QWORD PTR [rcx+144], r8 + sbb r9, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rcx+160] + mov QWORD PTR [rcx+152], r9 + sbb r8, QWORD PTR [rdx+160] + mov r9, QWORD PTR [rcx+168] + mov QWORD PTR [rcx+160], r8 + sbb r9, QWORD PTR [rdx+168] + mov r8, QWORD PTR [rcx+176] + mov QWORD PTR [rcx+168], r9 + sbb r8, QWORD PTR [rdx+176] + mov r9, QWORD PTR [rcx+184] + mov QWORD PTR [rcx+176], r8 + sbb r9, QWORD PTR [rdx+184] + mov QWORD PTR [rcx+184], r9 + sbb rax, rax + ret +sp_3072_sub_in_place_24 ENDP +_TEXT ENDS +; /* Add b to a into r. (r = a + b) ; * ; * r A single precision integer. -; * size Maximum number of bytes to convert -; * a Byte array. -; * n Number of bytes in array to read. +; * a A single precision integer. +; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_from_bin_movbe PROC - push r12 - mov r11, r8 - mov r12, rcx - add r11, r9 - add r12, 512 - jmp L_4096_from_bin_movbe_64_end -L_4096_from_bin_movbe_64_start: - sub r11, 64 - movbe rax, QWORD PTR [r11+56] - movbe r10, QWORD PTR [r11+48] - mov QWORD PTR [rcx], rax +sp_3072_add_24 PROC + ; Add + mov r9, QWORD PTR [rdx] + xor rax, rax + add r9, QWORD PTR [r8] + mov r10, QWORD PTR [rdx+8] + mov QWORD PTR [rcx], r9 + adc r10, QWORD PTR [r8+8] + mov r9, QWORD PTR [rdx+16] mov QWORD PTR [rcx+8], r10 - movbe rax, QWORD PTR [r11+40] - movbe r10, QWORD PTR [r11+32] - mov QWORD PTR [rcx+16], rax + adc r9, QWORD PTR [r8+16] + mov r10, QWORD PTR [rdx+24] + mov QWORD PTR [rcx+16], r9 + adc r10, QWORD PTR [r8+24] + mov r9, QWORD PTR [rdx+32] mov QWORD PTR [rcx+24], r10 - movbe rax, QWORD PTR [r11+24] - movbe r10, QWORD PTR [r11+16] - mov QWORD PTR [rcx+32], rax + adc r9, QWORD PTR [r8+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [rcx+32], r9 + adc r10, QWORD PTR [r8+40] + mov r9, QWORD PTR [rdx+48] mov QWORD PTR [rcx+40], r10 - movbe rax, QWORD PTR [r11+8] - movbe r10, QWORD PTR [r11] - mov QWORD PTR [rcx+48], rax + adc r9, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+56] + mov QWORD PTR [rcx+48], r9 + adc r10, QWORD PTR [r8+56] + mov r9, QWORD PTR [rdx+64] mov QWORD PTR [rcx+56], r10 - add rcx, 64 - sub r9, 64 -L_4096_from_bin_movbe_64_end: - cmp r9, 63 - jg L_4096_from_bin_movbe_64_start - jmp L_4096_from_bin_movbe_8_end -L_4096_from_bin_movbe_8_start: - sub r11, 8 - movbe rax, QWORD PTR [r11] - mov QWORD PTR [rcx], rax - add rcx, 8 - sub r9, 8 -L_4096_from_bin_movbe_8_end: - cmp r9, 7 - jg L_4096_from_bin_movbe_8_start - cmp r9, 0 - je L_4096_from_bin_movbe_hi_end - mov r10, 0 - mov rax, 0 -L_4096_from_bin_movbe_hi_start: - mov al, BYTE PTR [r8] - shl r10, 8 - inc r8 - add r10, rax - dec r9 - jg L_4096_from_bin_movbe_hi_start - mov QWORD PTR [rcx], r10 - add rcx, 8 -L_4096_from_bin_movbe_hi_end: - cmp rcx, r12 - jge L_4096_from_bin_movbe_zero_end -L_4096_from_bin_movbe_zero_start: - mov QWORD PTR [rcx], 0 - add rcx, 8 - cmp rcx, r12 - jl L_4096_from_bin_movbe_zero_start -L_4096_from_bin_movbe_zero_end: - pop r12 + adc r9, QWORD PTR [r8+64] + mov r10, QWORD PTR [rdx+72] + mov QWORD PTR [rcx+64], r9 + adc r10, QWORD PTR [r8+72] + mov r9, QWORD PTR [rdx+80] + mov QWORD PTR [rcx+72], r10 + adc r9, QWORD PTR [r8+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [rcx+80], r9 + adc r10, QWORD PTR [r8+88] + mov r9, QWORD PTR [rdx+96] + mov QWORD PTR [rcx+88], r10 + adc r9, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+104] + mov QWORD PTR [rcx+96], r9 + adc r10, QWORD PTR [r8+104] + mov r9, QWORD PTR [rdx+112] + mov QWORD PTR [rcx+104], r10 + adc r9, QWORD PTR [r8+112] + mov r10, QWORD PTR [rdx+120] + mov QWORD PTR [rcx+112], r9 + adc r10, QWORD PTR [r8+120] + mov r9, QWORD PTR [rdx+128] + mov QWORD PTR [rcx+120], r10 + adc r9, QWORD PTR [r8+128] + mov r10, QWORD PTR [rdx+136] + mov QWORD PTR [rcx+128], r9 + adc r10, QWORD PTR [r8+136] + mov r9, QWORD PTR [rdx+144] + mov QWORD PTR [rcx+136], r10 + adc r9, QWORD PTR [r8+144] + mov r10, QWORD PTR [rdx+152] + mov QWORD PTR [rcx+144], r9 + adc r10, QWORD PTR [r8+152] + mov r9, QWORD PTR [rdx+160] + mov QWORD PTR [rcx+152], r10 + adc r9, QWORD PTR [r8+160] + mov r10, QWORD PTR [rdx+168] + mov QWORD PTR [rcx+160], r9 + adc r10, QWORD PTR [r8+168] + mov r9, QWORD PTR [rdx+176] + mov QWORD PTR [rcx+168], r10 + adc r9, QWORD PTR [r8+176] + mov r10, QWORD PTR [rdx+184] + mov QWORD PTR [rcx+176], r9 + adc r10, QWORD PTR [r8+184] + mov QWORD PTR [rcx+184], r10 + adc rax, 0 ret -sp_4096_from_bin_movbe ENDP +sp_3072_add_24 ENDP _TEXT ENDS -ENDIF -; /* Write r as big endian to byte array. -; * Fixed length number of bytes written: 512 -; * Uses the bswap instruction. +; /* Multiply a and b into r. (r = a * b) ; * ; * r A single precision integer. -; * a Byte array. +; * a A single precision integer. +; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_to_bin_bswap_64 PROC - mov rax, QWORD PTR [rcx+504] - mov r8, QWORD PTR [rcx+496] - bswap rax - bswap r8 - mov QWORD PTR [rdx], rax - mov QWORD PTR [rdx+8], r8 - mov rax, QWORD PTR [rcx+488] - mov r8, QWORD PTR [rcx+480] - bswap rax - bswap r8 - mov QWORD PTR [rdx+16], rax - mov QWORD PTR [rdx+24], r8 - mov rax, QWORD PTR [rcx+472] - mov r8, QWORD PTR [rcx+464] - bswap rax - bswap r8 - mov QWORD PTR [rdx+32], rax - mov QWORD PTR [rdx+40], r8 - mov rax, QWORD PTR [rcx+456] - mov r8, QWORD PTR [rcx+448] - bswap rax - bswap r8 - mov QWORD PTR [rdx+48], rax - mov QWORD PTR [rdx+56], r8 - mov rax, QWORD PTR [rcx+440] - mov r8, QWORD PTR [rcx+432] - bswap rax - bswap r8 - mov QWORD PTR [rdx+64], rax - mov QWORD PTR [rdx+72], r8 - mov rax, QWORD PTR [rcx+424] - mov r8, QWORD PTR [rcx+416] - bswap rax - bswap r8 - mov QWORD PTR [rdx+80], rax - mov QWORD PTR [rdx+88], r8 - mov rax, QWORD PTR [rcx+408] - mov r8, QWORD PTR [rcx+400] - bswap rax - bswap r8 - mov QWORD PTR [rdx+96], rax - mov QWORD PTR [rdx+104], r8 - mov rax, QWORD PTR [rcx+392] - mov r8, QWORD PTR [rcx+384] - bswap rax - bswap r8 - mov QWORD PTR [rdx+112], rax - mov QWORD PTR [rdx+120], r8 - mov rax, QWORD PTR [rcx+376] - mov r8, QWORD PTR [rcx+368] - bswap rax - bswap r8 - mov QWORD PTR [rdx+128], rax - mov QWORD PTR [rdx+136], r8 - mov rax, QWORD PTR [rcx+360] - mov r8, QWORD PTR [rcx+352] - bswap rax - bswap r8 - mov QWORD PTR [rdx+144], rax - mov QWORD PTR [rdx+152], r8 - mov rax, QWORD PTR [rcx+344] - mov r8, QWORD PTR [rcx+336] - bswap rax - bswap r8 - mov QWORD PTR [rdx+160], rax - mov QWORD PTR [rdx+168], r8 - mov rax, QWORD PTR [rcx+328] - mov r8, QWORD PTR [rcx+320] - bswap rax - bswap r8 - mov QWORD PTR [rdx+176], rax - mov QWORD PTR [rdx+184], r8 - mov rax, QWORD PTR [rcx+312] - mov r8, QWORD PTR [rcx+304] - bswap rax - bswap r8 - mov QWORD PTR [rdx+192], rax - mov QWORD PTR [rdx+200], r8 - mov rax, QWORD PTR [rcx+296] - mov r8, QWORD PTR [rcx+288] - bswap rax - bswap r8 - mov QWORD PTR [rdx+208], rax - mov QWORD PTR [rdx+216], r8 - mov rax, QWORD PTR [rcx+280] - mov r8, QWORD PTR [rcx+272] - bswap rax - bswap r8 - mov QWORD PTR [rdx+224], rax - mov QWORD PTR [rdx+232], r8 - mov rax, QWORD PTR [rcx+264] - mov r8, QWORD PTR [rcx+256] - bswap rax - bswap r8 - mov QWORD PTR [rdx+240], rax - mov QWORD PTR [rdx+248], r8 - mov rax, QWORD PTR [rcx+248] - mov r8, QWORD PTR [rcx+240] - bswap rax - bswap r8 - mov QWORD PTR [rdx+256], rax - mov QWORD PTR [rdx+264], r8 - mov rax, QWORD PTR [rcx+232] - mov r8, QWORD PTR [rcx+224] - bswap rax - bswap r8 - mov QWORD PTR [rdx+272], rax - mov QWORD PTR [rdx+280], r8 - mov rax, QWORD PTR [rcx+216] - mov r8, QWORD PTR [rcx+208] - bswap rax - bswap r8 - mov QWORD PTR [rdx+288], rax - mov QWORD PTR [rdx+296], r8 - mov rax, QWORD PTR [rcx+200] - mov r8, QWORD PTR [rcx+192] - bswap rax - bswap r8 - mov QWORD PTR [rdx+304], rax - mov QWORD PTR [rdx+312], r8 - mov rax, QWORD PTR [rcx+184] - mov r8, QWORD PTR [rcx+176] - bswap rax - bswap r8 - mov QWORD PTR [rdx+320], rax - mov QWORD PTR [rdx+328], r8 - mov rax, QWORD PTR [rcx+168] - mov r8, QWORD PTR [rcx+160] - bswap rax - bswap r8 - mov QWORD PTR [rdx+336], rax - mov QWORD PTR [rdx+344], r8 - mov rax, QWORD PTR [rcx+152] - mov r8, QWORD PTR [rcx+144] - bswap rax - bswap r8 - mov QWORD PTR [rdx+352], rax - mov QWORD PTR [rdx+360], r8 - mov rax, QWORD PTR [rcx+136] - mov r8, QWORD PTR [rcx+128] - bswap rax - bswap r8 - mov QWORD PTR [rdx+368], rax - mov QWORD PTR [rdx+376], r8 - mov rax, QWORD PTR [rcx+120] - mov r8, QWORD PTR [rcx+112] - bswap rax - bswap r8 - mov QWORD PTR [rdx+384], rax - mov QWORD PTR [rdx+392], r8 - mov rax, QWORD PTR [rcx+104] - mov r8, QWORD PTR [rcx+96] - bswap rax - bswap r8 - mov QWORD PTR [rdx+400], rax - mov QWORD PTR [rdx+408], r8 - mov rax, QWORD PTR [rcx+88] - mov r8, QWORD PTR [rcx+80] - bswap rax - bswap r8 - mov QWORD PTR [rdx+416], rax - mov QWORD PTR [rdx+424], r8 - mov rax, QWORD PTR [rcx+72] - mov r8, QWORD PTR [rcx+64] - bswap rax - bswap r8 - mov QWORD PTR [rdx+432], rax - mov QWORD PTR [rdx+440], r8 - mov rax, QWORD PTR [rcx+56] - mov r8, QWORD PTR [rcx+48] - bswap rax - bswap r8 - mov QWORD PTR [rdx+448], rax - mov QWORD PTR [rdx+456], r8 - mov rax, QWORD PTR [rcx+40] - mov r8, QWORD PTR [rcx+32] - bswap rax - bswap r8 - mov QWORD PTR [rdx+464], rax - mov QWORD PTR [rdx+472], r8 - mov rax, QWORD PTR [rcx+24] - mov r8, QWORD PTR [rcx+16] - bswap rax - bswap r8 - mov QWORD PTR [rdx+480], rax - mov QWORD PTR [rdx+488], r8 - mov rax, QWORD PTR [rcx+8] - mov r8, QWORD PTR [rcx] - bswap rax - bswap r8 - mov QWORD PTR [rdx+496], rax - mov QWORD PTR [rdx+504], r8 +sp_3072_mul_24 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + sub rsp, 616 + mov QWORD PTR [rsp+576], rcx + mov QWORD PTR [rsp+584], rdx + mov QWORD PTR [rsp+592], r8 + lea r12, QWORD PTR [rsp+384] + lea r14, QWORD PTR [rdx+96] + ; Add + mov rax, QWORD PTR [rdx] + xor r15, r15 + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [rdx+8] + mov QWORD PTR [r12], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [rdx+16] + mov QWORD PTR [r12+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [rdx+24] + mov QWORD PTR [r12+16], r10 + adc rax, QWORD PTR [r14+24] + mov r9, QWORD PTR [rdx+32] + mov QWORD PTR [r12+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [r12+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r12+40], r10 + adc rax, QWORD PTR [r14+48] + mov r9, QWORD PTR [rdx+56] + mov QWORD PTR [r12+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [rdx+64] + mov QWORD PTR [r12+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [rdx+72] + mov QWORD PTR [r12+64], r10 + adc rax, QWORD PTR [r14+72] + mov r9, QWORD PTR [rdx+80] + mov QWORD PTR [r12+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [r12+80], r9 + adc r10, QWORD PTR [r14+88] + mov QWORD PTR [r12+88], r10 + adc r15, 0 + mov QWORD PTR [rsp+600], r15 + lea r13, QWORD PTR [rsp+480] + lea r14, QWORD PTR [r8+96] + ; Add + mov rax, QWORD PTR [r8] + xor rdi, rdi + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [r8+8] + mov QWORD PTR [r13], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [r8+16] + mov QWORD PTR [r13+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [r8+24] + mov QWORD PTR [r13+16], r10 + adc rax, QWORD PTR [r14+24] + mov r9, QWORD PTR [r8+32] + mov QWORD PTR [r13+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [r8+40] + mov QWORD PTR [r13+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [r8+48] + mov QWORD PTR [r13+40], r10 + adc rax, QWORD PTR [r14+48] + mov r9, QWORD PTR [r8+56] + mov QWORD PTR [r13+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [r8+64] + mov QWORD PTR [r13+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [r8+72] + mov QWORD PTR [r13+64], r10 + adc rax, QWORD PTR [r14+72] + mov r9, QWORD PTR [r8+80] + mov QWORD PTR [r13+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [r8+88] + mov QWORD PTR [r13+80], r9 + adc r10, QWORD PTR [r14+88] + mov QWORD PTR [r13+88], r10 + adc rdi, 0 + mov QWORD PTR [rsp+608], rdi + mov r8, r13 + mov rdx, r12 + mov rcx, rsp + call sp_3072_mul_12 + mov r8, QWORD PTR [rsp+592] + mov rdx, QWORD PTR [rsp+584] + lea rcx, QWORD PTR [rsp+192] + add r8, 96 + add rdx, 96 + call sp_3072_mul_12 + mov r8, QWORD PTR [rsp+592] + mov rdx, QWORD PTR [rsp+584] + mov rcx, QWORD PTR [rsp+576] + call sp_3072_mul_12 +IFDEF _WIN64 + mov r8, QWORD PTR [rsp+592] + mov rdx, QWORD PTR [rsp+584] + mov rcx, QWORD PTR [rsp+576] +ENDIF + mov r15, QWORD PTR [rsp+600] + mov rdi, QWORD PTR [rsp+608] + mov rsi, QWORD PTR [rsp+576] + mov r11, r15 + lea r12, QWORD PTR [rsp+384] + lea r13, QWORD PTR [rsp+480] + and r11, rdi + neg r15 + neg rdi + add rsi, 192 + mov rax, QWORD PTR [r12] + mov r9, QWORD PTR [r13] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12], rax + mov QWORD PTR [r13], r9 + mov rax, QWORD PTR [r12+8] + mov r9, QWORD PTR [r13+8] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+8], rax + mov QWORD PTR [r13+8], r9 + mov rax, QWORD PTR [r12+16] + mov r9, QWORD PTR [r13+16] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+16], rax + mov QWORD PTR [r13+16], r9 + mov rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [r13+24] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+24], rax + mov QWORD PTR [r13+24], r9 + mov rax, QWORD PTR [r12+32] + mov r9, QWORD PTR [r13+32] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+32], rax + mov QWORD PTR [r13+32], r9 + mov rax, QWORD PTR [r12+40] + mov r9, QWORD PTR [r13+40] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+40], rax + mov QWORD PTR [r13+40], r9 + mov rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [r13+48] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+48], rax + mov QWORD PTR [r13+48], r9 + mov rax, QWORD PTR [r12+56] + mov r9, QWORD PTR [r13+56] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+56], rax + mov QWORD PTR [r13+56], r9 + mov rax, QWORD PTR [r12+64] + mov r9, QWORD PTR [r13+64] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+64], rax + mov QWORD PTR [r13+64], r9 + mov rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [r13+72] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+72], rax + mov QWORD PTR [r13+72], r9 + mov rax, QWORD PTR [r12+80] + mov r9, QWORD PTR [r13+80] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+80], rax + mov QWORD PTR [r13+80], r9 + mov rax, QWORD PTR [r12+88] + mov r9, QWORD PTR [r13+88] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+88], rax + mov QWORD PTR [r13+88], r9 + mov rax, QWORD PTR [r12] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov QWORD PTR [rsi+88], r10 + adc r11, 0 + lea r13, QWORD PTR [rsp+192] + mov r12, rsp + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [r13] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [r13+184] + mov QWORD PTR [r12+184], r10 + sbb r11, 0 + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [rcx] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [rcx+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [rcx+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [rcx+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [rcx+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [rcx+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [rcx+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [rcx+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [rcx+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [rcx+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [rcx+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [rcx+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [rcx+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [rcx+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [rcx+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [rcx+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [rcx+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [rcx+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [rcx+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [rcx+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [rcx+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [rcx+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [rcx+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [rcx+184] + mov QWORD PTR [r12+184], r10 + sbb r11, 0 + sub rsi, 96 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r12] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r12+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r12+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r12+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r12+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r12+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r12+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r12+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r12+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r12+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r12+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r12+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r12+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r12+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r12+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r12+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r12+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r12+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r12+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r12+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r12+184] + mov QWORD PTR [rsi+184], r10 + adc r11, 0 + mov QWORD PTR [rcx+288], r11 + add rsi, 96 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r13+96] + mov QWORD PTR [rsi+96], rax + ; Add to zero + mov rax, QWORD PTR [r13+104] + adc rax, 0 + mov r9, QWORD PTR [r13+112] + mov QWORD PTR [rsi+104], rax + adc r9, 0 + mov r10, QWORD PTR [r13+120] + mov QWORD PTR [rsi+112], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+128] + mov QWORD PTR [rsi+120], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+136] + mov QWORD PTR [rsi+128], rax + adc r9, 0 + mov r10, QWORD PTR [r13+144] + mov QWORD PTR [rsi+136], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+152] + mov QWORD PTR [rsi+144], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+160] + mov QWORD PTR [rsi+152], rax + adc r9, 0 + mov r10, QWORD PTR [r13+168] + mov QWORD PTR [rsi+160], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+176] + mov QWORD PTR [rsi+168], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+184] + mov QWORD PTR [rsi+176], rax + adc r9, 0 + mov QWORD PTR [rsi+184], r9 + add rsp, 616 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 ret -sp_4096_to_bin_bswap_64 ENDP +sp_3072_mul_24 ENDP _TEXT ENDS -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. +IFDEF HAVE_INTEL_AVX2 +; /* Multiply a and b into r. (r = a * b) ; * ; * r A single precision integer. -; * a Byte array. +; * a A single precision integer. +; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_to_bin_movbe_64 PROC - movbe rax, QWORD PTR [rcx+504] - movbe r8, QWORD PTR [rcx+496] - mov QWORD PTR [rdx], rax - mov QWORD PTR [rdx+8], r8 - movbe rax, QWORD PTR [rcx+488] - movbe r8, QWORD PTR [rcx+480] - mov QWORD PTR [rdx+16], rax - mov QWORD PTR [rdx+24], r8 - movbe rax, QWORD PTR [rcx+472] - movbe r8, QWORD PTR [rcx+464] - mov QWORD PTR [rdx+32], rax - mov QWORD PTR [rdx+40], r8 - movbe rax, QWORD PTR [rcx+456] - movbe r8, QWORD PTR [rcx+448] - mov QWORD PTR [rdx+48], rax - mov QWORD PTR [rdx+56], r8 - movbe rax, QWORD PTR [rcx+440] - movbe r8, QWORD PTR [rcx+432] - mov QWORD PTR [rdx+64], rax - mov QWORD PTR [rdx+72], r8 - movbe rax, QWORD PTR [rcx+424] - movbe r8, QWORD PTR [rcx+416] - mov QWORD PTR [rdx+80], rax - mov QWORD PTR [rdx+88], r8 - movbe rax, QWORD PTR [rcx+408] - movbe r8, QWORD PTR [rcx+400] - mov QWORD PTR [rdx+96], rax - mov QWORD PTR [rdx+104], r8 - movbe rax, QWORD PTR [rcx+392] - movbe r8, QWORD PTR [rcx+384] - mov QWORD PTR [rdx+112], rax - mov QWORD PTR [rdx+120], r8 - movbe rax, QWORD PTR [rcx+376] - movbe r8, QWORD PTR [rcx+368] - mov QWORD PTR [rdx+128], rax - mov QWORD PTR [rdx+136], r8 - movbe rax, QWORD PTR [rcx+360] - movbe r8, QWORD PTR [rcx+352] - mov QWORD PTR [rdx+144], rax - mov QWORD PTR [rdx+152], r8 - movbe rax, QWORD PTR [rcx+344] - movbe r8, QWORD PTR [rcx+336] - mov QWORD PTR [rdx+160], rax - mov QWORD PTR [rdx+168], r8 - movbe rax, QWORD PTR [rcx+328] - movbe r8, QWORD PTR [rcx+320] - mov QWORD PTR [rdx+176], rax - mov QWORD PTR [rdx+184], r8 - movbe rax, QWORD PTR [rcx+312] - movbe r8, QWORD PTR [rcx+304] - mov QWORD PTR [rdx+192], rax - mov QWORD PTR [rdx+200], r8 - movbe rax, QWORD PTR [rcx+296] - movbe r8, QWORD PTR [rcx+288] - mov QWORD PTR [rdx+208], rax - mov QWORD PTR [rdx+216], r8 - movbe rax, QWORD PTR [rcx+280] - movbe r8, QWORD PTR [rcx+272] - mov QWORD PTR [rdx+224], rax - mov QWORD PTR [rdx+232], r8 - movbe rax, QWORD PTR [rcx+264] - movbe r8, QWORD PTR [rcx+256] - mov QWORD PTR [rdx+240], rax - mov QWORD PTR [rdx+248], r8 - movbe rax, QWORD PTR [rcx+248] - movbe r8, QWORD PTR [rcx+240] - mov QWORD PTR [rdx+256], rax - mov QWORD PTR [rdx+264], r8 - movbe rax, QWORD PTR [rcx+232] - movbe r8, QWORD PTR [rcx+224] - mov QWORD PTR [rdx+272], rax - mov QWORD PTR [rdx+280], r8 - movbe rax, QWORD PTR [rcx+216] - movbe r8, QWORD PTR [rcx+208] - mov QWORD PTR [rdx+288], rax - mov QWORD PTR [rdx+296], r8 - movbe rax, QWORD PTR [rcx+200] - movbe r8, QWORD PTR [rcx+192] - mov QWORD PTR [rdx+304], rax - mov QWORD PTR [rdx+312], r8 - movbe rax, QWORD PTR [rcx+184] - movbe r8, QWORD PTR [rcx+176] - mov QWORD PTR [rdx+320], rax - mov QWORD PTR [rdx+328], r8 - movbe rax, QWORD PTR [rcx+168] - movbe r8, QWORD PTR [rcx+160] - mov QWORD PTR [rdx+336], rax - mov QWORD PTR [rdx+344], r8 - movbe rax, QWORD PTR [rcx+152] - movbe r8, QWORD PTR [rcx+144] - mov QWORD PTR [rdx+352], rax - mov QWORD PTR [rdx+360], r8 - movbe rax, QWORD PTR [rcx+136] - movbe r8, QWORD PTR [rcx+128] - mov QWORD PTR [rdx+368], rax - mov QWORD PTR [rdx+376], r8 - movbe rax, QWORD PTR [rcx+120] - movbe r8, QWORD PTR [rcx+112] - mov QWORD PTR [rdx+384], rax - mov QWORD PTR [rdx+392], r8 - movbe rax, QWORD PTR [rcx+104] - movbe r8, QWORD PTR [rcx+96] - mov QWORD PTR [rdx+400], rax - mov QWORD PTR [rdx+408], r8 - movbe rax, QWORD PTR [rcx+88] - movbe r8, QWORD PTR [rcx+80] - mov QWORD PTR [rdx+416], rax - mov QWORD PTR [rdx+424], r8 - movbe rax, QWORD PTR [rcx+72] - movbe r8, QWORD PTR [rcx+64] - mov QWORD PTR [rdx+432], rax - mov QWORD PTR [rdx+440], r8 - movbe rax, QWORD PTR [rcx+56] - movbe r8, QWORD PTR [rcx+48] - mov QWORD PTR [rdx+448], rax - mov QWORD PTR [rdx+456], r8 - movbe rax, QWORD PTR [rcx+40] - movbe r8, QWORD PTR [rcx+32] - mov QWORD PTR [rdx+464], rax - mov QWORD PTR [rdx+472], r8 - movbe rax, QWORD PTR [rcx+24] - movbe r8, QWORD PTR [rcx+16] - mov QWORD PTR [rdx+480], rax - mov QWORD PTR [rdx+488], r8 - movbe rax, QWORD PTR [rcx+8] - movbe r8, QWORD PTR [rcx] - mov QWORD PTR [rdx+496], rax - mov QWORD PTR [rdx+504], r8 +sp_3072_mul_avx2_24 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + sub rsp, 616 + mov QWORD PTR [rsp+576], rcx + mov QWORD PTR [rsp+584], rdx + mov QWORD PTR [rsp+592], r8 + lea r12, QWORD PTR [rsp+384] + lea r14, QWORD PTR [rdx+96] + ; Add + mov rax, QWORD PTR [rdx] + xor r15, r15 + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [rdx+8] + mov QWORD PTR [r12], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [rdx+16] + mov QWORD PTR [r12+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [rdx+24] + mov QWORD PTR [r12+16], r10 + adc rax, QWORD PTR [r14+24] + mov r9, QWORD PTR [rdx+32] + mov QWORD PTR [r12+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [r12+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r12+40], r10 + adc rax, QWORD PTR [r14+48] + mov r9, QWORD PTR [rdx+56] + mov QWORD PTR [r12+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [rdx+64] + mov QWORD PTR [r12+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [rdx+72] + mov QWORD PTR [r12+64], r10 + adc rax, QWORD PTR [r14+72] + mov r9, QWORD PTR [rdx+80] + mov QWORD PTR [r12+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [r12+80], r9 + adc r10, QWORD PTR [r14+88] + mov QWORD PTR [r12+88], r10 + adc r15, 0 + mov QWORD PTR [rsp+600], r15 + lea r13, QWORD PTR [rsp+480] + lea r14, QWORD PTR [r8+96] + ; Add + mov rax, QWORD PTR [r8] + xor rdi, rdi + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [r8+8] + mov QWORD PTR [r13], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [r8+16] + mov QWORD PTR [r13+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [r8+24] + mov QWORD PTR [r13+16], r10 + adc rax, QWORD PTR [r14+24] + mov r9, QWORD PTR [r8+32] + mov QWORD PTR [r13+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [r8+40] + mov QWORD PTR [r13+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [r8+48] + mov QWORD PTR [r13+40], r10 + adc rax, QWORD PTR [r14+48] + mov r9, QWORD PTR [r8+56] + mov QWORD PTR [r13+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [r8+64] + mov QWORD PTR [r13+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [r8+72] + mov QWORD PTR [r13+64], r10 + adc rax, QWORD PTR [r14+72] + mov r9, QWORD PTR [r8+80] + mov QWORD PTR [r13+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [r8+88] + mov QWORD PTR [r13+80], r9 + adc r10, QWORD PTR [r14+88] + mov QWORD PTR [r13+88], r10 + adc rdi, 0 + mov QWORD PTR [rsp+608], rdi + mov r8, r13 + mov rdx, r12 + mov rcx, rsp + call sp_3072_mul_avx2_12 + mov r8, QWORD PTR [rsp+592] + mov rdx, QWORD PTR [rsp+584] + lea rcx, QWORD PTR [rsp+192] + add r8, 96 + add rdx, 96 + call sp_3072_mul_avx2_12 + mov r8, QWORD PTR [rsp+592] + mov rdx, QWORD PTR [rsp+584] + mov rcx, QWORD PTR [rsp+576] + call sp_3072_mul_avx2_12 +IFDEF _WIN64 + mov r8, QWORD PTR [rsp+592] + mov rdx, QWORD PTR [rsp+584] + mov rcx, QWORD PTR [rsp+576] +ENDIF + mov r15, QWORD PTR [rsp+600] + mov rdi, QWORD PTR [rsp+608] + mov rsi, QWORD PTR [rsp+576] + mov r11, r15 + lea r12, QWORD PTR [rsp+384] + lea r13, QWORD PTR [rsp+480] + and r11, rdi + neg r15 + neg rdi + add rsi, 192 + mov rax, QWORD PTR [r12] + mov r9, QWORD PTR [r13] + pext rax, rax, rdi + pext r9, r9, r15 + add rax, r9 + mov r9, QWORD PTR [r12+8] + mov r10, QWORD PTR [r13+8] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi], rax + adc r9, r10 + mov r10, QWORD PTR [r12+16] + mov rax, QWORD PTR [r13+16] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+8], r9 + adc r10, rax + mov rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [r13+24] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+16], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+32] + mov r10, QWORD PTR [r13+32] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+24], rax + adc r9, r10 + mov r10, QWORD PTR [r12+40] + mov rax, QWORD PTR [r13+40] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+32], r9 + adc r10, rax + mov rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [r13+48] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+40], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+56] + mov r10, QWORD PTR [r13+56] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+48], rax + adc r9, r10 + mov r10, QWORD PTR [r12+64] + mov rax, QWORD PTR [r13+64] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+56], r9 + adc r10, rax + mov rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [r13+72] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+64], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+80] + mov r10, QWORD PTR [r13+80] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+72], rax + adc r9, r10 + mov r10, QWORD PTR [r12+88] + mov rax, QWORD PTR [r13+88] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+80], r9 + adc r10, rax + mov QWORD PTR [rsi+88], r10 + adc r11, 0 + lea r13, QWORD PTR [rsp+192] + mov r12, rsp + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [r13] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [r13+184] + mov QWORD PTR [r12+184], r10 + sbb r11, 0 + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [rcx] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [rcx+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [rcx+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [rcx+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [rcx+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [rcx+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [rcx+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [rcx+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [rcx+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [rcx+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [rcx+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [rcx+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [rcx+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [rcx+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [rcx+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [rcx+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [rcx+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [rcx+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [rcx+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [rcx+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [rcx+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [rcx+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [rcx+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [rcx+184] + mov QWORD PTR [r12+184], r10 + sbb r11, 0 + sub rsi, 96 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r12] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r12+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r12+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r12+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r12+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r12+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r12+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r12+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r12+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r12+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r12+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r12+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r12+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r12+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r12+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r12+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r12+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r12+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r12+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r12+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r12+184] + mov QWORD PTR [rsi+184], r10 + adc r11, 0 + mov QWORD PTR [rcx+288], r11 + add rsi, 96 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r13+96] + mov QWORD PTR [rsi+96], rax + ; Add to zero + mov rax, QWORD PTR [r13+104] + adc rax, 0 + mov r9, QWORD PTR [r13+112] + mov QWORD PTR [rsi+104], rax + adc r9, 0 + mov r10, QWORD PTR [r13+120] + mov QWORD PTR [rsi+112], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+128] + mov QWORD PTR [rsi+120], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+136] + mov QWORD PTR [rsi+128], rax + adc r9, 0 + mov r10, QWORD PTR [r13+144] + mov QWORD PTR [rsi+136], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+152] + mov QWORD PTR [rsi+144], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+160] + mov QWORD PTR [rsi+152], rax + adc r9, 0 + mov r10, QWORD PTR [r13+168] + mov QWORD PTR [rsi+160], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+176] + mov QWORD PTR [rsi+168], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+184] + mov QWORD PTR [rsi+176], rax + adc r9, 0 + mov QWORD PTR [rsi+184], r9 + add rsp, 616 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 ret -sp_4096_to_bin_movbe_64 ENDP +sp_3072_mul_avx2_24 ENDP _TEXT ENDS ENDIF ; /* Sub b from a into a. (a -= b) @@ -41121,7 +18551,7 @@ ENDIF ; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_sub_in_place_64 PROC +sp_3072_sub_in_place_48 PROC mov r8, QWORD PTR [rcx] sub r8, QWORD PTR [rdx] mov r9, QWORD PTR [rcx+8] @@ -41265,58 +18695,10 @@ sp_4096_sub_in_place_64 PROC mov r9, QWORD PTR [rcx+376] mov QWORD PTR [rcx+368], r8 sbb r9, QWORD PTR [rdx+376] - mov r8, QWORD PTR [rcx+384] mov QWORD PTR [rcx+376], r9 - sbb r8, QWORD PTR [rdx+384] - mov r9, QWORD PTR [rcx+392] - mov QWORD PTR [rcx+384], r8 - sbb r9, QWORD PTR [rdx+392] - mov r8, QWORD PTR [rcx+400] - mov QWORD PTR [rcx+392], r9 - sbb r8, QWORD PTR [rdx+400] - mov r9, QWORD PTR [rcx+408] - mov QWORD PTR [rcx+400], r8 - sbb r9, QWORD PTR [rdx+408] - mov r8, QWORD PTR [rcx+416] - mov QWORD PTR [rcx+408], r9 - sbb r8, QWORD PTR [rdx+416] - mov r9, QWORD PTR [rcx+424] - mov QWORD PTR [rcx+416], r8 - sbb r9, QWORD PTR [rdx+424] - mov r8, QWORD PTR [rcx+432] - mov QWORD PTR [rcx+424], r9 - sbb r8, QWORD PTR [rdx+432] - mov r9, QWORD PTR [rcx+440] - mov QWORD PTR [rcx+432], r8 - sbb r9, QWORD PTR [rdx+440] - mov r8, QWORD PTR [rcx+448] - mov QWORD PTR [rcx+440], r9 - sbb r8, QWORD PTR [rdx+448] - mov r9, QWORD PTR [rcx+456] - mov QWORD PTR [rcx+448], r8 - sbb r9, QWORD PTR [rdx+456] - mov r8, QWORD PTR [rcx+464] - mov QWORD PTR [rcx+456], r9 - sbb r8, QWORD PTR [rdx+464] - mov r9, QWORD PTR [rcx+472] - mov QWORD PTR [rcx+464], r8 - sbb r9, QWORD PTR [rdx+472] - mov r8, QWORD PTR [rcx+480] - mov QWORD PTR [rcx+472], r9 - sbb r8, QWORD PTR [rdx+480] - mov r9, QWORD PTR [rcx+488] - mov QWORD PTR [rcx+480], r8 - sbb r9, QWORD PTR [rdx+488] - mov r8, QWORD PTR [rcx+496] - mov QWORD PTR [rcx+488], r9 - sbb r8, QWORD PTR [rdx+496] - mov r9, QWORD PTR [rcx+504] - mov QWORD PTR [rcx+496], r8 - sbb r9, QWORD PTR [rdx+504] - mov QWORD PTR [rcx+504], r9 sbb rax, rax ret -sp_4096_sub_in_place_64 ENDP +sp_3072_sub_in_place_48 ENDP _TEXT ENDS ; /* Add b to a into r. (r = a + b) ; * @@ -41325,7 +18707,7 @@ _TEXT ENDS ; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_add_64 PROC +sp_3072_add_48 PROC ; Add mov r9, QWORD PTR [rdx] xor rax, rax @@ -41471,58 +18853,10 @@ sp_4096_add_64 PROC mov r10, QWORD PTR [rdx+376] mov QWORD PTR [rcx+368], r9 adc r10, QWORD PTR [r8+376] - mov r9, QWORD PTR [rdx+384] mov QWORD PTR [rcx+376], r10 - adc r9, QWORD PTR [r8+384] - mov r10, QWORD PTR [rdx+392] - mov QWORD PTR [rcx+384], r9 - adc r10, QWORD PTR [r8+392] - mov r9, QWORD PTR [rdx+400] - mov QWORD PTR [rcx+392], r10 - adc r9, QWORD PTR [r8+400] - mov r10, QWORD PTR [rdx+408] - mov QWORD PTR [rcx+400], r9 - adc r10, QWORD PTR [r8+408] - mov r9, QWORD PTR [rdx+416] - mov QWORD PTR [rcx+408], r10 - adc r9, QWORD PTR [r8+416] - mov r10, QWORD PTR [rdx+424] - mov QWORD PTR [rcx+416], r9 - adc r10, QWORD PTR [r8+424] - mov r9, QWORD PTR [rdx+432] - mov QWORD PTR [rcx+424], r10 - adc r9, QWORD PTR [r8+432] - mov r10, QWORD PTR [rdx+440] - mov QWORD PTR [rcx+432], r9 - adc r10, QWORD PTR [r8+440] - mov r9, QWORD PTR [rdx+448] - mov QWORD PTR [rcx+440], r10 - adc r9, QWORD PTR [r8+448] - mov r10, QWORD PTR [rdx+456] - mov QWORD PTR [rcx+448], r9 - adc r10, QWORD PTR [r8+456] - mov r9, QWORD PTR [rdx+464] - mov QWORD PTR [rcx+456], r10 - adc r9, QWORD PTR [r8+464] - mov r10, QWORD PTR [rdx+472] - mov QWORD PTR [rcx+464], r9 - adc r10, QWORD PTR [r8+472] - mov r9, QWORD PTR [rdx+480] - mov QWORD PTR [rcx+472], r10 - adc r9, QWORD PTR [r8+480] - mov r10, QWORD PTR [rdx+488] - mov QWORD PTR [rcx+480], r9 - adc r10, QWORD PTR [r8+488] - mov r9, QWORD PTR [rdx+496] - mov QWORD PTR [rcx+488], r10 - adc r9, QWORD PTR [r8+496] - mov r10, QWORD PTR [rdx+504] - mov QWORD PTR [rcx+496], r9 - adc r10, QWORD PTR [r8+504] - mov QWORD PTR [rcx+504], r10 adc rax, 0 ret -sp_4096_add_64 ENDP +sp_3072_add_48 ENDP _TEXT ENDS ; /* Multiply a and b into r. (r = a * b) ; * @@ -41531,19 +18865,19 @@ _TEXT ENDS ; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_mul_64 PROC +sp_3072_mul_48 PROC push r12 push r13 push r14 push r15 push rdi push rsi - sub rsp, 1576 - mov QWORD PTR [rsp+1536], rcx - mov QWORD PTR [rsp+1544], rdx - mov QWORD PTR [rsp+1552], r8 - lea r12, QWORD PTR [rsp+1024] - lea r14, QWORD PTR [rdx+256] + sub rsp, 1192 + mov QWORD PTR [rsp+1152], rcx + mov QWORD PTR [rsp+1160], rdx + mov QWORD PTR [rsp+1168], r8 + lea r12, QWORD PTR [rsp+768] + lea r14, QWORD PTR [rdx+192] ; Add mov rax, QWORD PTR [rdx] xor r15, r15 @@ -41617,35 +18951,11 @@ sp_4096_mul_64 PROC mov r10, QWORD PTR [rdx+184] mov QWORD PTR [r12+176], r9 adc r10, QWORD PTR [r14+184] - mov rax, QWORD PTR [rdx+192] mov QWORD PTR [r12+184], r10 - adc rax, QWORD PTR [r14+192] - mov r9, QWORD PTR [rdx+200] - mov QWORD PTR [r12+192], rax - adc r9, QWORD PTR [r14+200] - mov r10, QWORD PTR [rdx+208] - mov QWORD PTR [r12+200], r9 - adc r10, QWORD PTR [r14+208] - mov rax, QWORD PTR [rdx+216] - mov QWORD PTR [r12+208], r10 - adc rax, QWORD PTR [r14+216] - mov r9, QWORD PTR [rdx+224] - mov QWORD PTR [r12+216], rax - adc r9, QWORD PTR [r14+224] - mov r10, QWORD PTR [rdx+232] - mov QWORD PTR [r12+224], r9 - adc r10, QWORD PTR [r14+232] - mov rax, QWORD PTR [rdx+240] - mov QWORD PTR [r12+232], r10 - adc rax, QWORD PTR [r14+240] - mov r9, QWORD PTR [rdx+248] - mov QWORD PTR [r12+240], rax - adc r9, QWORD PTR [r14+248] - mov QWORD PTR [r12+248], r9 adc r15, 0 - mov QWORD PTR [rsp+1560], r15 - lea r13, QWORD PTR [rsp+1280] - lea r14, QWORD PTR [r8+256] + mov QWORD PTR [rsp+1176], r15 + lea r13, QWORD PTR [rsp+960] + lea r14, QWORD PTR [r8+192] ; Add mov rax, QWORD PTR [r8] xor rdi, rdi @@ -41719,62 +19029,38 @@ sp_4096_mul_64 PROC mov r10, QWORD PTR [r8+184] mov QWORD PTR [r13+176], r9 adc r10, QWORD PTR [r14+184] - mov rax, QWORD PTR [r8+192] mov QWORD PTR [r13+184], r10 - adc rax, QWORD PTR [r14+192] - mov r9, QWORD PTR [r8+200] - mov QWORD PTR [r13+192], rax - adc r9, QWORD PTR [r14+200] - mov r10, QWORD PTR [r8+208] - mov QWORD PTR [r13+200], r9 - adc r10, QWORD PTR [r14+208] - mov rax, QWORD PTR [r8+216] - mov QWORD PTR [r13+208], r10 - adc rax, QWORD PTR [r14+216] - mov r9, QWORD PTR [r8+224] - mov QWORD PTR [r13+216], rax - adc r9, QWORD PTR [r14+224] - mov r10, QWORD PTR [r8+232] - mov QWORD PTR [r13+224], r9 - adc r10, QWORD PTR [r14+232] - mov rax, QWORD PTR [r8+240] - mov QWORD PTR [r13+232], r10 - adc rax, QWORD PTR [r14+240] - mov r9, QWORD PTR [r8+248] - mov QWORD PTR [r13+240], rax - adc r9, QWORD PTR [r14+248] - mov QWORD PTR [r13+248], r9 adc rdi, 0 - mov QWORD PTR [rsp+1568], rdi + mov QWORD PTR [rsp+1184], rdi mov r8, r13 mov rdx, r12 mov rcx, rsp - call sp_2048_mul_32 - mov r8, QWORD PTR [rsp+1552] - mov rdx, QWORD PTR [rsp+1544] - lea rcx, QWORD PTR [rsp+512] - add r8, 256 - add rdx, 256 - call sp_2048_mul_32 - mov r8, QWORD PTR [rsp+1552] - mov rdx, QWORD PTR [rsp+1544] - mov rcx, QWORD PTR [rsp+1536] - call sp_2048_mul_32 + call sp_3072_mul_24 + mov r8, QWORD PTR [rsp+1168] + mov rdx, QWORD PTR [rsp+1160] + lea rcx, QWORD PTR [rsp+384] + add r8, 192 + add rdx, 192 + call sp_3072_mul_24 + mov r8, QWORD PTR [rsp+1168] + mov rdx, QWORD PTR [rsp+1160] + mov rcx, QWORD PTR [rsp+1152] + call sp_3072_mul_24 IFDEF _WIN64 - mov r8, QWORD PTR [rsp+1552] - mov rdx, QWORD PTR [rsp+1544] - mov rcx, QWORD PTR [rsp+1536] + mov r8, QWORD PTR [rsp+1168] + mov rdx, QWORD PTR [rsp+1160] + mov rcx, QWORD PTR [rsp+1152] ENDIF - mov r15, QWORD PTR [rsp+1560] - mov rdi, QWORD PTR [rsp+1568] - mov rsi, QWORD PTR [rsp+1536] + mov r15, QWORD PTR [rsp+1176] + mov rdi, QWORD PTR [rsp+1184] + mov rsi, QWORD PTR [rsp+1152] mov r11, r15 - lea r12, QWORD PTR [rsp+1024] - lea r13, QWORD PTR [rsp+1280] + lea r12, QWORD PTR [rsp+768] + lea r13, QWORD PTR [rsp+960] and r11, rdi neg r15 neg rdi - add rsi, 512 + add rsi, 384 mov rax, QWORD PTR [r12] mov r9, QWORD PTR [r13] and rax, rdi @@ -41919,54 +19205,6 @@ ENDIF and r9, r15 mov QWORD PTR [r12+184], rax mov QWORD PTR [r13+184], r9 - mov rax, QWORD PTR [r12+192] - mov r9, QWORD PTR [r13+192] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+192], rax - mov QWORD PTR [r13+192], r9 - mov rax, QWORD PTR [r12+200] - mov r9, QWORD PTR [r13+200] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+200], rax - mov QWORD PTR [r13+200], r9 - mov rax, QWORD PTR [r12+208] - mov r9, QWORD PTR [r13+208] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+208], rax - mov QWORD PTR [r13+208], r9 - mov rax, QWORD PTR [r12+216] - mov r9, QWORD PTR [r13+216] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+216], rax - mov QWORD PTR [r13+216], r9 - mov rax, QWORD PTR [r12+224] - mov r9, QWORD PTR [r13+224] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+224], rax - mov QWORD PTR [r13+224], r9 - mov rax, QWORD PTR [r12+232] - mov r9, QWORD PTR [r13+232] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+232], rax - mov QWORD PTR [r13+232], r9 - mov rax, QWORD PTR [r12+240] - mov r9, QWORD PTR [r13+240] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+240], rax - mov QWORD PTR [r13+240], r9 - mov rax, QWORD PTR [r12+248] - mov r9, QWORD PTR [r13+248] - and rax, rdi - and r9, r15 - mov QWORD PTR [r12+248], rax - mov QWORD PTR [r13+248], r9 mov rax, QWORD PTR [r12] add rax, QWORD PTR [r13] mov r9, QWORD PTR [r12+8] @@ -42038,33 +19276,9 @@ ENDIF mov r10, QWORD PTR [r12+184] mov QWORD PTR [rsi+176], r9 adc r10, QWORD PTR [r13+184] - mov rax, QWORD PTR [r12+192] mov QWORD PTR [rsi+184], r10 - adc rax, QWORD PTR [r13+192] - mov r9, QWORD PTR [r12+200] - mov QWORD PTR [rsi+192], rax - adc r9, QWORD PTR [r13+200] - mov r10, QWORD PTR [r12+208] - mov QWORD PTR [rsi+200], r9 - adc r10, QWORD PTR [r13+208] - mov rax, QWORD PTR [r12+216] - mov QWORD PTR [rsi+208], r10 - adc rax, QWORD PTR [r13+216] - mov r9, QWORD PTR [r12+224] - mov QWORD PTR [rsi+216], rax - adc r9, QWORD PTR [r13+224] - mov r10, QWORD PTR [r12+232] - mov QWORD PTR [rsi+224], r9 - adc r10, QWORD PTR [r13+232] - mov rax, QWORD PTR [r12+240] - mov QWORD PTR [rsi+232], r10 - adc rax, QWORD PTR [r13+240] - mov r9, QWORD PTR [r12+248] - mov QWORD PTR [rsi+240], rax - adc r9, QWORD PTR [r13+248] - mov QWORD PTR [rsi+248], r9 adc r11, 0 - lea r13, QWORD PTR [rsp+512] + lea r13, QWORD PTR [rsp+384] mov r12, rsp mov rax, QWORD PTR [r12] sub rax, QWORD PTR [r13] @@ -42188,76 +19402,28 @@ ENDIF mov r9, QWORD PTR [r12+320] mov QWORD PTR [r12+312], rax sbb r9, QWORD PTR [r13+320] - mov r10, QWORD PTR [r12+328] - mov QWORD PTR [r12+320], r9 - sbb r10, QWORD PTR [r13+328] - mov rax, QWORD PTR [r12+336] - mov QWORD PTR [r12+328], r10 - sbb rax, QWORD PTR [r13+336] - mov r9, QWORD PTR [r12+344] - mov QWORD PTR [r12+336], rax - sbb r9, QWORD PTR [r13+344] - mov r10, QWORD PTR [r12+352] - mov QWORD PTR [r12+344], r9 - sbb r10, QWORD PTR [r13+352] - mov rax, QWORD PTR [r12+360] - mov QWORD PTR [r12+352], r10 - sbb rax, QWORD PTR [r13+360] - mov r9, QWORD PTR [r12+368] - mov QWORD PTR [r12+360], rax - sbb r9, QWORD PTR [r13+368] - mov r10, QWORD PTR [r12+376] - mov QWORD PTR [r12+368], r9 - sbb r10, QWORD PTR [r13+376] - mov rax, QWORD PTR [r12+384] - mov QWORD PTR [r12+376], r10 - sbb rax, QWORD PTR [r13+384] - mov r9, QWORD PTR [r12+392] - mov QWORD PTR [r12+384], rax - sbb r9, QWORD PTR [r13+392] - mov r10, QWORD PTR [r12+400] - mov QWORD PTR [r12+392], r9 - sbb r10, QWORD PTR [r13+400] - mov rax, QWORD PTR [r12+408] - mov QWORD PTR [r12+400], r10 - sbb rax, QWORD PTR [r13+408] - mov r9, QWORD PTR [r12+416] - mov QWORD PTR [r12+408], rax - sbb r9, QWORD PTR [r13+416] - mov r10, QWORD PTR [r12+424] - mov QWORD PTR [r12+416], r9 - sbb r10, QWORD PTR [r13+424] - mov rax, QWORD PTR [r12+432] - mov QWORD PTR [r12+424], r10 - sbb rax, QWORD PTR [r13+432] - mov r9, QWORD PTR [r12+440] - mov QWORD PTR [r12+432], rax - sbb r9, QWORD PTR [r13+440] - mov r10, QWORD PTR [r12+448] - mov QWORD PTR [r12+440], r9 - sbb r10, QWORD PTR [r13+448] - mov rax, QWORD PTR [r12+456] - mov QWORD PTR [r12+448], r10 - sbb rax, QWORD PTR [r13+456] - mov r9, QWORD PTR [r12+464] - mov QWORD PTR [r12+456], rax - sbb r9, QWORD PTR [r13+464] - mov r10, QWORD PTR [r12+472] - mov QWORD PTR [r12+464], r9 - sbb r10, QWORD PTR [r13+472] - mov rax, QWORD PTR [r12+480] - mov QWORD PTR [r12+472], r10 - sbb rax, QWORD PTR [r13+480] - mov r9, QWORD PTR [r12+488] - mov QWORD PTR [r12+480], rax - sbb r9, QWORD PTR [r13+488] - mov r10, QWORD PTR [r12+496] - mov QWORD PTR [r12+488], r9 - sbb r10, QWORD PTR [r13+496] - mov rax, QWORD PTR [r12+504] - mov QWORD PTR [r12+496], r10 - sbb rax, QWORD PTR [r13+504] - mov QWORD PTR [r12+504], rax + mov r10, QWORD PTR [r12+328] + mov QWORD PTR [r12+320], r9 + sbb r10, QWORD PTR [r13+328] + mov rax, QWORD PTR [r12+336] + mov QWORD PTR [r12+328], r10 + sbb rax, QWORD PTR [r13+336] + mov r9, QWORD PTR [r12+344] + mov QWORD PTR [r12+336], rax + sbb r9, QWORD PTR [r13+344] + mov r10, QWORD PTR [r12+352] + mov QWORD PTR [r12+344], r9 + sbb r10, QWORD PTR [r13+352] + mov rax, QWORD PTR [r12+360] + mov QWORD PTR [r12+352], r10 + sbb rax, QWORD PTR [r13+360] + mov r9, QWORD PTR [r12+368] + mov QWORD PTR [r12+360], rax + sbb r9, QWORD PTR [r13+368] + mov r10, QWORD PTR [r12+376] + mov QWORD PTR [r12+368], r9 + sbb r10, QWORD PTR [r13+376] + mov QWORD PTR [r12+376], r10 sbb r11, 0 mov rax, QWORD PTR [r12] sub rax, QWORD PTR [rcx] @@ -42402,57 +19568,9 @@ ENDIF mov r10, QWORD PTR [r12+376] mov QWORD PTR [r12+368], r9 sbb r10, QWORD PTR [rcx+376] - mov rax, QWORD PTR [r12+384] mov QWORD PTR [r12+376], r10 - sbb rax, QWORD PTR [rcx+384] - mov r9, QWORD PTR [r12+392] - mov QWORD PTR [r12+384], rax - sbb r9, QWORD PTR [rcx+392] - mov r10, QWORD PTR [r12+400] - mov QWORD PTR [r12+392], r9 - sbb r10, QWORD PTR [rcx+400] - mov rax, QWORD PTR [r12+408] - mov QWORD PTR [r12+400], r10 - sbb rax, QWORD PTR [rcx+408] - mov r9, QWORD PTR [r12+416] - mov QWORD PTR [r12+408], rax - sbb r9, QWORD PTR [rcx+416] - mov r10, QWORD PTR [r12+424] - mov QWORD PTR [r12+416], r9 - sbb r10, QWORD PTR [rcx+424] - mov rax, QWORD PTR [r12+432] - mov QWORD PTR [r12+424], r10 - sbb rax, QWORD PTR [rcx+432] - mov r9, QWORD PTR [r12+440] - mov QWORD PTR [r12+432], rax - sbb r9, QWORD PTR [rcx+440] - mov r10, QWORD PTR [r12+448] - mov QWORD PTR [r12+440], r9 - sbb r10, QWORD PTR [rcx+448] - mov rax, QWORD PTR [r12+456] - mov QWORD PTR [r12+448], r10 - sbb rax, QWORD PTR [rcx+456] - mov r9, QWORD PTR [r12+464] - mov QWORD PTR [r12+456], rax - sbb r9, QWORD PTR [rcx+464] - mov r10, QWORD PTR [r12+472] - mov QWORD PTR [r12+464], r9 - sbb r10, QWORD PTR [rcx+472] - mov rax, QWORD PTR [r12+480] - mov QWORD PTR [r12+472], r10 - sbb rax, QWORD PTR [rcx+480] - mov r9, QWORD PTR [r12+488] - mov QWORD PTR [r12+480], rax - sbb r9, QWORD PTR [rcx+488] - mov r10, QWORD PTR [r12+496] - mov QWORD PTR [r12+488], r9 - sbb r10, QWORD PTR [rcx+496] - mov rax, QWORD PTR [r12+504] - mov QWORD PTR [r12+496], r10 - sbb rax, QWORD PTR [rcx+504] - mov QWORD PTR [r12+504], rax sbb r11, 0 - sub rsi, 256 + sub rsi, 192 ; Add mov rax, QWORD PTR [rsi] add rax, QWORD PTR [r12] @@ -42597,58 +19715,10 @@ ENDIF mov r10, QWORD PTR [rsi+376] mov QWORD PTR [rsi+368], r9 adc r10, QWORD PTR [r12+376] - mov rax, QWORD PTR [rsi+384] mov QWORD PTR [rsi+376], r10 - adc rax, QWORD PTR [r12+384] - mov r9, QWORD PTR [rsi+392] - mov QWORD PTR [rsi+384], rax - adc r9, QWORD PTR [r12+392] - mov r10, QWORD PTR [rsi+400] - mov QWORD PTR [rsi+392], r9 - adc r10, QWORD PTR [r12+400] - mov rax, QWORD PTR [rsi+408] - mov QWORD PTR [rsi+400], r10 - adc rax, QWORD PTR [r12+408] - mov r9, QWORD PTR [rsi+416] - mov QWORD PTR [rsi+408], rax - adc r9, QWORD PTR [r12+416] - mov r10, QWORD PTR [rsi+424] - mov QWORD PTR [rsi+416], r9 - adc r10, QWORD PTR [r12+424] - mov rax, QWORD PTR [rsi+432] - mov QWORD PTR [rsi+424], r10 - adc rax, QWORD PTR [r12+432] - mov r9, QWORD PTR [rsi+440] - mov QWORD PTR [rsi+432], rax - adc r9, QWORD PTR [r12+440] - mov r10, QWORD PTR [rsi+448] - mov QWORD PTR [rsi+440], r9 - adc r10, QWORD PTR [r12+448] - mov rax, QWORD PTR [rsi+456] - mov QWORD PTR [rsi+448], r10 - adc rax, QWORD PTR [r12+456] - mov r9, QWORD PTR [rsi+464] - mov QWORD PTR [rsi+456], rax - adc r9, QWORD PTR [r12+464] - mov r10, QWORD PTR [rsi+472] - mov QWORD PTR [rsi+464], r9 - adc r10, QWORD PTR [r12+472] - mov rax, QWORD PTR [rsi+480] - mov QWORD PTR [rsi+472], r10 - adc rax, QWORD PTR [r12+480] - mov r9, QWORD PTR [rsi+488] - mov QWORD PTR [rsi+480], rax - adc r9, QWORD PTR [r12+488] - mov r10, QWORD PTR [rsi+496] - mov QWORD PTR [rsi+488], r9 - adc r10, QWORD PTR [r12+496] - mov rax, QWORD PTR [rsi+504] - mov QWORD PTR [rsi+496], r10 - adc rax, QWORD PTR [r12+504] - mov QWORD PTR [rsi+504], rax adc r11, 0 - mov QWORD PTR [rcx+768], r11 - add rsi, 256 + mov QWORD PTR [rcx+576], r11 + add rsi, 192 ; Add mov rax, QWORD PTR [rsi] add rax, QWORD PTR [r13] @@ -42724,126 +19794,78 @@ ENDIF mov rax, QWORD PTR [rsi+192] mov QWORD PTR [rsi+184], r10 adc rax, QWORD PTR [r13+192] - mov r9, QWORD PTR [rsi+200] mov QWORD PTR [rsi+192], rax - adc r9, QWORD PTR [r13+200] - mov r10, QWORD PTR [rsi+208] - mov QWORD PTR [rsi+200], r9 - adc r10, QWORD PTR [r13+208] - mov rax, QWORD PTR [rsi+216] - mov QWORD PTR [rsi+208], r10 - adc rax, QWORD PTR [r13+216] - mov r9, QWORD PTR [rsi+224] - mov QWORD PTR [rsi+216], rax - adc r9, QWORD PTR [r13+224] - mov r10, QWORD PTR [rsi+232] - mov QWORD PTR [rsi+224], r9 - adc r10, QWORD PTR [r13+232] - mov rax, QWORD PTR [rsi+240] - mov QWORD PTR [rsi+232], r10 - adc rax, QWORD PTR [r13+240] - mov r9, QWORD PTR [rsi+248] - mov QWORD PTR [rsi+240], rax - adc r9, QWORD PTR [r13+248] - mov r10, QWORD PTR [rsi+256] - mov QWORD PTR [rsi+248], r9 - adc r10, QWORD PTR [r13+256] - mov QWORD PTR [rsi+256], r10 ; Add to zero - mov rax, QWORD PTR [r13+264] - adc rax, 0 - mov r9, QWORD PTR [r13+272] - mov QWORD PTR [rsi+264], rax - adc r9, 0 - mov r10, QWORD PTR [r13+280] - mov QWORD PTR [rsi+272], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+288] - mov QWORD PTR [rsi+280], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+296] - mov QWORD PTR [rsi+288], rax - adc r9, 0 - mov r10, QWORD PTR [r13+304] - mov QWORD PTR [rsi+296], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+312] - mov QWORD PTR [rsi+304], r10 - adc rax, 0 - mov r9, QWORD PTR [r13+320] - mov QWORD PTR [rsi+312], rax - adc r9, 0 - mov r10, QWORD PTR [r13+328] - mov QWORD PTR [rsi+320], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+336] - mov QWORD PTR [rsi+328], r10 + mov rax, QWORD PTR [r13+200] adc rax, 0 - mov r9, QWORD PTR [r13+344] - mov QWORD PTR [rsi+336], rax + mov r9, QWORD PTR [r13+208] + mov QWORD PTR [rsi+200], rax adc r9, 0 - mov r10, QWORD PTR [r13+352] - mov QWORD PTR [rsi+344], r9 + mov r10, QWORD PTR [r13+216] + mov QWORD PTR [rsi+208], r9 adc r10, 0 - mov rax, QWORD PTR [r13+360] - mov QWORD PTR [rsi+352], r10 + mov rax, QWORD PTR [r13+224] + mov QWORD PTR [rsi+216], r10 adc rax, 0 - mov r9, QWORD PTR [r13+368] - mov QWORD PTR [rsi+360], rax + mov r9, QWORD PTR [r13+232] + mov QWORD PTR [rsi+224], rax adc r9, 0 - mov r10, QWORD PTR [r13+376] - mov QWORD PTR [rsi+368], r9 + mov r10, QWORD PTR [r13+240] + mov QWORD PTR [rsi+232], r9 adc r10, 0 - mov rax, QWORD PTR [r13+384] - mov QWORD PTR [rsi+376], r10 + mov rax, QWORD PTR [r13+248] + mov QWORD PTR [rsi+240], r10 adc rax, 0 - mov r9, QWORD PTR [r13+392] - mov QWORD PTR [rsi+384], rax + mov r9, QWORD PTR [r13+256] + mov QWORD PTR [rsi+248], rax adc r9, 0 - mov r10, QWORD PTR [r13+400] - mov QWORD PTR [rsi+392], r9 + mov r10, QWORD PTR [r13+264] + mov QWORD PTR [rsi+256], r9 adc r10, 0 - mov rax, QWORD PTR [r13+408] - mov QWORD PTR [rsi+400], r10 + mov rax, QWORD PTR [r13+272] + mov QWORD PTR [rsi+264], r10 adc rax, 0 - mov r9, QWORD PTR [r13+416] - mov QWORD PTR [rsi+408], rax + mov r9, QWORD PTR [r13+280] + mov QWORD PTR [rsi+272], rax adc r9, 0 - mov r10, QWORD PTR [r13+424] - mov QWORD PTR [rsi+416], r9 + mov r10, QWORD PTR [r13+288] + mov QWORD PTR [rsi+280], r9 adc r10, 0 - mov rax, QWORD PTR [r13+432] - mov QWORD PTR [rsi+424], r10 + mov rax, QWORD PTR [r13+296] + mov QWORD PTR [rsi+288], r10 adc rax, 0 - mov r9, QWORD PTR [r13+440] - mov QWORD PTR [rsi+432], rax + mov r9, QWORD PTR [r13+304] + mov QWORD PTR [rsi+296], rax adc r9, 0 - mov r10, QWORD PTR [r13+448] - mov QWORD PTR [rsi+440], r9 + mov r10, QWORD PTR [r13+312] + mov QWORD PTR [rsi+304], r9 adc r10, 0 - mov rax, QWORD PTR [r13+456] - mov QWORD PTR [rsi+448], r10 + mov rax, QWORD PTR [r13+320] + mov QWORD PTR [rsi+312], r10 adc rax, 0 - mov r9, QWORD PTR [r13+464] - mov QWORD PTR [rsi+456], rax + mov r9, QWORD PTR [r13+328] + mov QWORD PTR [rsi+320], rax adc r9, 0 - mov r10, QWORD PTR [r13+472] - mov QWORD PTR [rsi+464], r9 + mov r10, QWORD PTR [r13+336] + mov QWORD PTR [rsi+328], r9 adc r10, 0 - mov rax, QWORD PTR [r13+480] - mov QWORD PTR [rsi+472], r10 + mov rax, QWORD PTR [r13+344] + mov QWORD PTR [rsi+336], r10 adc rax, 0 - mov r9, QWORD PTR [r13+488] - mov QWORD PTR [rsi+480], rax + mov r9, QWORD PTR [r13+352] + mov QWORD PTR [rsi+344], rax adc r9, 0 - mov r10, QWORD PTR [r13+496] - mov QWORD PTR [rsi+488], r9 + mov r10, QWORD PTR [r13+360] + mov QWORD PTR [rsi+352], r9 adc r10, 0 - mov rax, QWORD PTR [r13+504] - mov QWORD PTR [rsi+496], r10 + mov rax, QWORD PTR [r13+368] + mov QWORD PTR [rsi+360], r10 adc rax, 0 - mov QWORD PTR [rsi+504], rax - add rsp, 1576 + mov r9, QWORD PTR [r13+376] + mov QWORD PTR [rsi+368], rax + adc r9, 0 + mov QWORD PTR [rsi+376], r9 + add rsp, 1192 pop rsi pop rdi pop r15 @@ -42851,7 +19873,7 @@ ENDIF pop r13 pop r12 ret -sp_4096_mul_64 ENDP +sp_3072_mul_48 ENDP _TEXT ENDS IFDEF HAVE_INTEL_AVX2 ; /* Multiply a and b into r. (r = a * b) @@ -42861,19 +19883,19 @@ IFDEF HAVE_INTEL_AVX2 ; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_mul_avx2_64 PROC +sp_3072_mul_avx2_48 PROC push r12 push r13 push r14 push r15 push rdi push rsi - sub rsp, 1576 - mov QWORD PTR [rsp+1536], rcx - mov QWORD PTR [rsp+1544], rdx - mov QWORD PTR [rsp+1552], r8 - lea r12, QWORD PTR [rsp+1024] - lea r14, QWORD PTR [rdx+256] + sub rsp, 1192 + mov QWORD PTR [rsp+1152], rcx + mov QWORD PTR [rsp+1160], rdx + mov QWORD PTR [rsp+1168], r8 + lea r12, QWORD PTR [rsp+768] + lea r14, QWORD PTR [rdx+192] ; Add mov rax, QWORD PTR [rdx] xor r15, r15 @@ -42947,35 +19969,11 @@ sp_4096_mul_avx2_64 PROC mov r10, QWORD PTR [rdx+184] mov QWORD PTR [r12+176], r9 adc r10, QWORD PTR [r14+184] - mov rax, QWORD PTR [rdx+192] mov QWORD PTR [r12+184], r10 - adc rax, QWORD PTR [r14+192] - mov r9, QWORD PTR [rdx+200] - mov QWORD PTR [r12+192], rax - adc r9, QWORD PTR [r14+200] - mov r10, QWORD PTR [rdx+208] - mov QWORD PTR [r12+200], r9 - adc r10, QWORD PTR [r14+208] - mov rax, QWORD PTR [rdx+216] - mov QWORD PTR [r12+208], r10 - adc rax, QWORD PTR [r14+216] - mov r9, QWORD PTR [rdx+224] - mov QWORD PTR [r12+216], rax - adc r9, QWORD PTR [r14+224] - mov r10, QWORD PTR [rdx+232] - mov QWORD PTR [r12+224], r9 - adc r10, QWORD PTR [r14+232] - mov rax, QWORD PTR [rdx+240] - mov QWORD PTR [r12+232], r10 - adc rax, QWORD PTR [r14+240] - mov r9, QWORD PTR [rdx+248] - mov QWORD PTR [r12+240], rax - adc r9, QWORD PTR [r14+248] - mov QWORD PTR [r12+248], r9 adc r15, 0 - mov QWORD PTR [rsp+1560], r15 - lea r13, QWORD PTR [rsp+1280] - lea r14, QWORD PTR [r8+256] + mov QWORD PTR [rsp+1176], r15 + lea r13, QWORD PTR [rsp+960] + lea r14, QWORD PTR [r8+192] ; Add mov rax, QWORD PTR [r8] xor rdi, rdi @@ -43049,62 +20047,38 @@ sp_4096_mul_avx2_64 PROC mov r10, QWORD PTR [r8+184] mov QWORD PTR [r13+176], r9 adc r10, QWORD PTR [r14+184] - mov rax, QWORD PTR [r8+192] mov QWORD PTR [r13+184], r10 - adc rax, QWORD PTR [r14+192] - mov r9, QWORD PTR [r8+200] - mov QWORD PTR [r13+192], rax - adc r9, QWORD PTR [r14+200] - mov r10, QWORD PTR [r8+208] - mov QWORD PTR [r13+200], r9 - adc r10, QWORD PTR [r14+208] - mov rax, QWORD PTR [r8+216] - mov QWORD PTR [r13+208], r10 - adc rax, QWORD PTR [r14+216] - mov r9, QWORD PTR [r8+224] - mov QWORD PTR [r13+216], rax - adc r9, QWORD PTR [r14+224] - mov r10, QWORD PTR [r8+232] - mov QWORD PTR [r13+224], r9 - adc r10, QWORD PTR [r14+232] - mov rax, QWORD PTR [r8+240] - mov QWORD PTR [r13+232], r10 - adc rax, QWORD PTR [r14+240] - mov r9, QWORD PTR [r8+248] - mov QWORD PTR [r13+240], rax - adc r9, QWORD PTR [r14+248] - mov QWORD PTR [r13+248], r9 adc rdi, 0 - mov QWORD PTR [rsp+1568], rdi + mov QWORD PTR [rsp+1184], rdi mov r8, r13 mov rdx, r12 mov rcx, rsp - call sp_2048_mul_avx2_32 - mov r8, QWORD PTR [rsp+1552] - mov rdx, QWORD PTR [rsp+1544] - lea rcx, QWORD PTR [rsp+512] - add r8, 256 - add rdx, 256 - call sp_2048_mul_avx2_32 - mov r8, QWORD PTR [rsp+1552] - mov rdx, QWORD PTR [rsp+1544] - mov rcx, QWORD PTR [rsp+1536] - call sp_2048_mul_avx2_32 + call sp_3072_mul_avx2_24 + mov r8, QWORD PTR [rsp+1168] + mov rdx, QWORD PTR [rsp+1160] + lea rcx, QWORD PTR [rsp+384] + add r8, 192 + add rdx, 192 + call sp_3072_mul_avx2_24 + mov r8, QWORD PTR [rsp+1168] + mov rdx, QWORD PTR [rsp+1160] + mov rcx, QWORD PTR [rsp+1152] + call sp_3072_mul_avx2_24 IFDEF _WIN64 - mov r8, QWORD PTR [rsp+1552] - mov rdx, QWORD PTR [rsp+1544] - mov rcx, QWORD PTR [rsp+1536] + mov r8, QWORD PTR [rsp+1168] + mov rdx, QWORD PTR [rsp+1160] + mov rcx, QWORD PTR [rsp+1152] ENDIF - mov r15, QWORD PTR [rsp+1560] - mov rdi, QWORD PTR [rsp+1568] - mov rsi, QWORD PTR [rsp+1536] + mov r15, QWORD PTR [rsp+1176] + mov rdi, QWORD PTR [rsp+1184] + mov rsi, QWORD PTR [rsp+1152] mov r11, r15 - lea r12, QWORD PTR [rsp+1024] - lea r13, QWORD PTR [rsp+1280] + lea r12, QWORD PTR [rsp+768] + lea r13, QWORD PTR [rsp+960] and r11, rdi neg r15 neg rdi - add rsi, 512 + add rsi, 384 mov rax, QWORD PTR [r12] mov r9, QWORD PTR [r13] pext rax, rax, rdi @@ -43248,57 +20222,9 @@ ENDIF pext rax, rax, r15 mov QWORD PTR [rsi+176], r9 adc r10, rax - mov rax, QWORD PTR [r12+192] - mov r9, QWORD PTR [r13+192] - pext rax, rax, rdi - pext r9, r9, r15 mov QWORD PTR [rsi+184], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+200] - mov r10, QWORD PTR [r13+200] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+192], rax - adc r9, r10 - mov r10, QWORD PTR [r12+208] - mov rax, QWORD PTR [r13+208] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+200], r9 - adc r10, rax - mov rax, QWORD PTR [r12+216] - mov r9, QWORD PTR [r13+216] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+208], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+224] - mov r10, QWORD PTR [r13+224] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+216], rax - adc r9, r10 - mov r10, QWORD PTR [r12+232] - mov rax, QWORD PTR [r13+232] - pext r10, r10, rdi - pext rax, rax, r15 - mov QWORD PTR [rsi+224], r9 - adc r10, rax - mov rax, QWORD PTR [r12+240] - mov r9, QWORD PTR [r13+240] - pext rax, rax, rdi - pext r9, r9, r15 - mov QWORD PTR [rsi+232], r10 - adc rax, r9 - mov r9, QWORD PTR [r12+248] - mov r10, QWORD PTR [r13+248] - pext r9, r9, rdi - pext r10, r10, r15 - mov QWORD PTR [rsi+240], rax - adc r9, r10 - mov QWORD PTR [rsi+248], r9 adc r11, 0 - lea r13, QWORD PTR [rsp+512] + lea r13, QWORD PTR [rsp+384] mov r12, rsp mov rax, QWORD PTR [r12] sub rax, QWORD PTR [r13] @@ -43410,88 +20336,40 @@ ENDIF mov rax, QWORD PTR [r12+288] mov QWORD PTR [r12+280], r10 sbb rax, QWORD PTR [r13+288] - mov r9, QWORD PTR [r12+296] - mov QWORD PTR [r12+288], rax - sbb r9, QWORD PTR [r13+296] - mov r10, QWORD PTR [r12+304] - mov QWORD PTR [r12+296], r9 - sbb r10, QWORD PTR [r13+304] - mov rax, QWORD PTR [r12+312] - mov QWORD PTR [r12+304], r10 - sbb rax, QWORD PTR [r13+312] - mov r9, QWORD PTR [r12+320] - mov QWORD PTR [r12+312], rax - sbb r9, QWORD PTR [r13+320] - mov r10, QWORD PTR [r12+328] - mov QWORD PTR [r12+320], r9 - sbb r10, QWORD PTR [r13+328] - mov rax, QWORD PTR [r12+336] - mov QWORD PTR [r12+328], r10 - sbb rax, QWORD PTR [r13+336] - mov r9, QWORD PTR [r12+344] - mov QWORD PTR [r12+336], rax - sbb r9, QWORD PTR [r13+344] - mov r10, QWORD PTR [r12+352] - mov QWORD PTR [r12+344], r9 - sbb r10, QWORD PTR [r13+352] - mov rax, QWORD PTR [r12+360] - mov QWORD PTR [r12+352], r10 - sbb rax, QWORD PTR [r13+360] - mov r9, QWORD PTR [r12+368] - mov QWORD PTR [r12+360], rax - sbb r9, QWORD PTR [r13+368] - mov r10, QWORD PTR [r12+376] - mov QWORD PTR [r12+368], r9 - sbb r10, QWORD PTR [r13+376] - mov rax, QWORD PTR [r12+384] - mov QWORD PTR [r12+376], r10 - sbb rax, QWORD PTR [r13+384] - mov r9, QWORD PTR [r12+392] - mov QWORD PTR [r12+384], rax - sbb r9, QWORD PTR [r13+392] - mov r10, QWORD PTR [r12+400] - mov QWORD PTR [r12+392], r9 - sbb r10, QWORD PTR [r13+400] - mov rax, QWORD PTR [r12+408] - mov QWORD PTR [r12+400], r10 - sbb rax, QWORD PTR [r13+408] - mov r9, QWORD PTR [r12+416] - mov QWORD PTR [r12+408], rax - sbb r9, QWORD PTR [r13+416] - mov r10, QWORD PTR [r12+424] - mov QWORD PTR [r12+416], r9 - sbb r10, QWORD PTR [r13+424] - mov rax, QWORD PTR [r12+432] - mov QWORD PTR [r12+424], r10 - sbb rax, QWORD PTR [r13+432] - mov r9, QWORD PTR [r12+440] - mov QWORD PTR [r12+432], rax - sbb r9, QWORD PTR [r13+440] - mov r10, QWORD PTR [r12+448] - mov QWORD PTR [r12+440], r9 - sbb r10, QWORD PTR [r13+448] - mov rax, QWORD PTR [r12+456] - mov QWORD PTR [r12+448], r10 - sbb rax, QWORD PTR [r13+456] - mov r9, QWORD PTR [r12+464] - mov QWORD PTR [r12+456], rax - sbb r9, QWORD PTR [r13+464] - mov r10, QWORD PTR [r12+472] - mov QWORD PTR [r12+464], r9 - sbb r10, QWORD PTR [r13+472] - mov rax, QWORD PTR [r12+480] - mov QWORD PTR [r12+472], r10 - sbb rax, QWORD PTR [r13+480] - mov r9, QWORD PTR [r12+488] - mov QWORD PTR [r12+480], rax - sbb r9, QWORD PTR [r13+488] - mov r10, QWORD PTR [r12+496] - mov QWORD PTR [r12+488], r9 - sbb r10, QWORD PTR [r13+496] - mov rax, QWORD PTR [r12+504] - mov QWORD PTR [r12+496], r10 - sbb rax, QWORD PTR [r13+504] - mov QWORD PTR [r12+504], rax + mov r9, QWORD PTR [r12+296] + mov QWORD PTR [r12+288], rax + sbb r9, QWORD PTR [r13+296] + mov r10, QWORD PTR [r12+304] + mov QWORD PTR [r12+296], r9 + sbb r10, QWORD PTR [r13+304] + mov rax, QWORD PTR [r12+312] + mov QWORD PTR [r12+304], r10 + sbb rax, QWORD PTR [r13+312] + mov r9, QWORD PTR [r12+320] + mov QWORD PTR [r12+312], rax + sbb r9, QWORD PTR [r13+320] + mov r10, QWORD PTR [r12+328] + mov QWORD PTR [r12+320], r9 + sbb r10, QWORD PTR [r13+328] + mov rax, QWORD PTR [r12+336] + mov QWORD PTR [r12+328], r10 + sbb rax, QWORD PTR [r13+336] + mov r9, QWORD PTR [r12+344] + mov QWORD PTR [r12+336], rax + sbb r9, QWORD PTR [r13+344] + mov r10, QWORD PTR [r12+352] + mov QWORD PTR [r12+344], r9 + sbb r10, QWORD PTR [r13+352] + mov rax, QWORD PTR [r12+360] + mov QWORD PTR [r12+352], r10 + sbb rax, QWORD PTR [r13+360] + mov r9, QWORD PTR [r12+368] + mov QWORD PTR [r12+360], rax + sbb r9, QWORD PTR [r13+368] + mov r10, QWORD PTR [r12+376] + mov QWORD PTR [r12+368], r9 + sbb r10, QWORD PTR [r13+376] + mov QWORD PTR [r12+376], r10 sbb r11, 0 mov rax, QWORD PTR [r12] sub rax, QWORD PTR [rcx] @@ -43636,57 +20514,9 @@ ENDIF mov r10, QWORD PTR [r12+376] mov QWORD PTR [r12+368], r9 sbb r10, QWORD PTR [rcx+376] - mov rax, QWORD PTR [r12+384] mov QWORD PTR [r12+376], r10 - sbb rax, QWORD PTR [rcx+384] - mov r9, QWORD PTR [r12+392] - mov QWORD PTR [r12+384], rax - sbb r9, QWORD PTR [rcx+392] - mov r10, QWORD PTR [r12+400] - mov QWORD PTR [r12+392], r9 - sbb r10, QWORD PTR [rcx+400] - mov rax, QWORD PTR [r12+408] - mov QWORD PTR [r12+400], r10 - sbb rax, QWORD PTR [rcx+408] - mov r9, QWORD PTR [r12+416] - mov QWORD PTR [r12+408], rax - sbb r9, QWORD PTR [rcx+416] - mov r10, QWORD PTR [r12+424] - mov QWORD PTR [r12+416], r9 - sbb r10, QWORD PTR [rcx+424] - mov rax, QWORD PTR [r12+432] - mov QWORD PTR [r12+424], r10 - sbb rax, QWORD PTR [rcx+432] - mov r9, QWORD PTR [r12+440] - mov QWORD PTR [r12+432], rax - sbb r9, QWORD PTR [rcx+440] - mov r10, QWORD PTR [r12+448] - mov QWORD PTR [r12+440], r9 - sbb r10, QWORD PTR [rcx+448] - mov rax, QWORD PTR [r12+456] - mov QWORD PTR [r12+448], r10 - sbb rax, QWORD PTR [rcx+456] - mov r9, QWORD PTR [r12+464] - mov QWORD PTR [r12+456], rax - sbb r9, QWORD PTR [rcx+464] - mov r10, QWORD PTR [r12+472] - mov QWORD PTR [r12+464], r9 - sbb r10, QWORD PTR [rcx+472] - mov rax, QWORD PTR [r12+480] - mov QWORD PTR [r12+472], r10 - sbb rax, QWORD PTR [rcx+480] - mov r9, QWORD PTR [r12+488] - mov QWORD PTR [r12+480], rax - sbb r9, QWORD PTR [rcx+488] - mov r10, QWORD PTR [r12+496] - mov QWORD PTR [r12+488], r9 - sbb r10, QWORD PTR [rcx+496] - mov rax, QWORD PTR [r12+504] - mov QWORD PTR [r12+496], r10 - sbb rax, QWORD PTR [rcx+504] - mov QWORD PTR [r12+504], rax sbb r11, 0 - sub rsi, 256 + sub rsi, 192 ; Add mov rax, QWORD PTR [rsi] add rax, QWORD PTR [r12] @@ -43831,261 +20661,2280 @@ ENDIF mov r10, QWORD PTR [rsi+376] mov QWORD PTR [rsi+368], r9 adc r10, QWORD PTR [r12+376] - mov rax, QWORD PTR [rsi+384] mov QWORD PTR [rsi+376], r10 - adc rax, QWORD PTR [r12+384] - mov r9, QWORD PTR [rsi+392] - mov QWORD PTR [rsi+384], rax - adc r9, QWORD PTR [r12+392] - mov r10, QWORD PTR [rsi+400] - mov QWORD PTR [rsi+392], r9 - adc r10, QWORD PTR [r12+400] - mov rax, QWORD PTR [rsi+408] - mov QWORD PTR [rsi+400], r10 - adc rax, QWORD PTR [r12+408] - mov r9, QWORD PTR [rsi+416] - mov QWORD PTR [rsi+408], rax - adc r9, QWORD PTR [r12+416] - mov r10, QWORD PTR [rsi+424] - mov QWORD PTR [rsi+416], r9 - adc r10, QWORD PTR [r12+424] - mov rax, QWORD PTR [rsi+432] - mov QWORD PTR [rsi+424], r10 - adc rax, QWORD PTR [r12+432] - mov r9, QWORD PTR [rsi+440] - mov QWORD PTR [rsi+432], rax - adc r9, QWORD PTR [r12+440] - mov r10, QWORD PTR [rsi+448] - mov QWORD PTR [rsi+440], r9 - adc r10, QWORD PTR [r12+448] - mov rax, QWORD PTR [rsi+456] - mov QWORD PTR [rsi+448], r10 - adc rax, QWORD PTR [r12+456] - mov r9, QWORD PTR [rsi+464] - mov QWORD PTR [rsi+456], rax - adc r9, QWORD PTR [r12+464] - mov r10, QWORD PTR [rsi+472] - mov QWORD PTR [rsi+464], r9 - adc r10, QWORD PTR [r12+472] - mov rax, QWORD PTR [rsi+480] - mov QWORD PTR [rsi+472], r10 - adc rax, QWORD PTR [r12+480] - mov r9, QWORD PTR [rsi+488] - mov QWORD PTR [rsi+480], rax - adc r9, QWORD PTR [r12+488] - mov r10, QWORD PTR [rsi+496] - mov QWORD PTR [rsi+488], r9 - adc r10, QWORD PTR [r12+496] - mov rax, QWORD PTR [rsi+504] - mov QWORD PTR [rsi+496], r10 - adc rax, QWORD PTR [r12+504] - mov QWORD PTR [rsi+504], rax adc r11, 0 - mov QWORD PTR [rcx+768], r11 - add rsi, 256 - ; Add - mov rax, QWORD PTR [rsi] - add rax, QWORD PTR [r13] - mov r9, QWORD PTR [rsi+8] - mov QWORD PTR [rsi], rax - adc r9, QWORD PTR [r13+8] - mov r10, QWORD PTR [rsi+16] - mov QWORD PTR [rsi+8], r9 - adc r10, QWORD PTR [r13+16] - mov rax, QWORD PTR [rsi+24] - mov QWORD PTR [rsi+16], r10 - adc rax, QWORD PTR [r13+24] - mov r9, QWORD PTR [rsi+32] - mov QWORD PTR [rsi+24], rax - adc r9, QWORD PTR [r13+32] - mov r10, QWORD PTR [rsi+40] - mov QWORD PTR [rsi+32], r9 - adc r10, QWORD PTR [r13+40] - mov rax, QWORD PTR [rsi+48] - mov QWORD PTR [rsi+40], r10 - adc rax, QWORD PTR [r13+48] - mov r9, QWORD PTR [rsi+56] - mov QWORD PTR [rsi+48], rax - adc r9, QWORD PTR [r13+56] - mov r10, QWORD PTR [rsi+64] - mov QWORD PTR [rsi+56], r9 - adc r10, QWORD PTR [r13+64] - mov rax, QWORD PTR [rsi+72] - mov QWORD PTR [rsi+64], r10 - adc rax, QWORD PTR [r13+72] - mov r9, QWORD PTR [rsi+80] - mov QWORD PTR [rsi+72], rax - adc r9, QWORD PTR [r13+80] - mov r10, QWORD PTR [rsi+88] - mov QWORD PTR [rsi+80], r9 - adc r10, QWORD PTR [r13+88] - mov rax, QWORD PTR [rsi+96] - mov QWORD PTR [rsi+88], r10 - adc rax, QWORD PTR [r13+96] - mov r9, QWORD PTR [rsi+104] - mov QWORD PTR [rsi+96], rax - adc r9, QWORD PTR [r13+104] - mov r10, QWORD PTR [rsi+112] - mov QWORD PTR [rsi+104], r9 - adc r10, QWORD PTR [r13+112] - mov rax, QWORD PTR [rsi+120] - mov QWORD PTR [rsi+112], r10 - adc rax, QWORD PTR [r13+120] - mov r9, QWORD PTR [rsi+128] - mov QWORD PTR [rsi+120], rax - adc r9, QWORD PTR [r13+128] - mov r10, QWORD PTR [rsi+136] - mov QWORD PTR [rsi+128], r9 - adc r10, QWORD PTR [r13+136] - mov rax, QWORD PTR [rsi+144] - mov QWORD PTR [rsi+136], r10 - adc rax, QWORD PTR [r13+144] - mov r9, QWORD PTR [rsi+152] - mov QWORD PTR [rsi+144], rax - adc r9, QWORD PTR [r13+152] - mov r10, QWORD PTR [rsi+160] - mov QWORD PTR [rsi+152], r9 - adc r10, QWORD PTR [r13+160] - mov rax, QWORD PTR [rsi+168] - mov QWORD PTR [rsi+160], r10 - adc rax, QWORD PTR [r13+168] - mov r9, QWORD PTR [rsi+176] - mov QWORD PTR [rsi+168], rax - adc r9, QWORD PTR [r13+176] - mov r10, QWORD PTR [rsi+184] - mov QWORD PTR [rsi+176], r9 - adc r10, QWORD PTR [r13+184] - mov rax, QWORD PTR [rsi+192] - mov QWORD PTR [rsi+184], r10 - adc rax, QWORD PTR [r13+192] - mov r9, QWORD PTR [rsi+200] - mov QWORD PTR [rsi+192], rax - adc r9, QWORD PTR [r13+200] - mov r10, QWORD PTR [rsi+208] - mov QWORD PTR [rsi+200], r9 - adc r10, QWORD PTR [r13+208] - mov rax, QWORD PTR [rsi+216] - mov QWORD PTR [rsi+208], r10 - adc rax, QWORD PTR [r13+216] - mov r9, QWORD PTR [rsi+224] - mov QWORD PTR [rsi+216], rax - adc r9, QWORD PTR [r13+224] - mov r10, QWORD PTR [rsi+232] - mov QWORD PTR [rsi+224], r9 - adc r10, QWORD PTR [r13+232] - mov rax, QWORD PTR [rsi+240] - mov QWORD PTR [rsi+232], r10 - adc rax, QWORD PTR [r13+240] - mov r9, QWORD PTR [rsi+248] - mov QWORD PTR [rsi+240], rax - adc r9, QWORD PTR [r13+248] - mov r10, QWORD PTR [rsi+256] - mov QWORD PTR [rsi+248], r9 - adc r10, QWORD PTR [r13+256] - mov QWORD PTR [rsi+256], r10 - ; Add to zero - mov rax, QWORD PTR [r13+264] + mov QWORD PTR [rcx+576], r11 + add rsi, 192 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r13+184] + mov rax, QWORD PTR [rsi+192] + mov QWORD PTR [rsi+184], r10 + adc rax, QWORD PTR [r13+192] + mov QWORD PTR [rsi+192], rax + ; Add to zero + mov rax, QWORD PTR [r13+200] + adc rax, 0 + mov r9, QWORD PTR [r13+208] + mov QWORD PTR [rsi+200], rax + adc r9, 0 + mov r10, QWORD PTR [r13+216] + mov QWORD PTR [rsi+208], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+224] + mov QWORD PTR [rsi+216], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+232] + mov QWORD PTR [rsi+224], rax + adc r9, 0 + mov r10, QWORD PTR [r13+240] + mov QWORD PTR [rsi+232], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+248] + mov QWORD PTR [rsi+240], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+256] + mov QWORD PTR [rsi+248], rax + adc r9, 0 + mov r10, QWORD PTR [r13+264] + mov QWORD PTR [rsi+256], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+272] + mov QWORD PTR [rsi+264], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+280] + mov QWORD PTR [rsi+272], rax + adc r9, 0 + mov r10, QWORD PTR [r13+288] + mov QWORD PTR [rsi+280], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+296] + mov QWORD PTR [rsi+288], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+304] + mov QWORD PTR [rsi+296], rax + adc r9, 0 + mov r10, QWORD PTR [r13+312] + mov QWORD PTR [rsi+304], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+320] + mov QWORD PTR [rsi+312], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+328] + mov QWORD PTR [rsi+320], rax + adc r9, 0 + mov r10, QWORD PTR [r13+336] + mov QWORD PTR [rsi+328], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+344] + mov QWORD PTR [rsi+336], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+352] + mov QWORD PTR [rsi+344], rax + adc r9, 0 + mov r10, QWORD PTR [r13+360] + mov QWORD PTR [rsi+352], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+368] + mov QWORD PTR [rsi+360], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+376] + mov QWORD PTR [rsi+368], rax + adc r9, 0 + mov QWORD PTR [rsi+376], r9 + add rsp, 1192 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +sp_3072_mul_avx2_48 ENDP +_TEXT ENDS +ENDIF +; /* Square a and put result in r. (r = a * a) +; * +; * r A single precision integer. +; * a A single precision integer. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_sqr_12 PROC + push r12 + push r13 + push r14 + mov r8, rdx + sub rsp, 96 + ; A[0] * A[0] + mov rax, QWORD PTR [r8] + mul rax + xor r11, r11 + mov QWORD PTR [rsp], rax + mov r10, rdx + ; A[0] * A[1] + mov rax, QWORD PTR [r8+8] + mul QWORD PTR [r8] + xor r9, r9 + add r10, rax + adc r11, rdx + adc r9, 0 + add r10, rax + adc r11, rdx + adc r9, 0 + mov QWORD PTR [rsp+8], r10 + ; A[0] * A[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r8] + xor r10, r10 + add r11, rax + adc r9, rdx + adc r10, 0 + add r11, rax + adc r9, rdx + adc r10, 0 + ; A[1] * A[1] + mov rax, QWORD PTR [r8+8] + mul rax + add r11, rax + adc r9, rdx + adc r10, 0 + mov QWORD PTR [rsp+16], r11 + ; A[0] * A[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r8] + xor r11, r11 + add r9, rax + adc r10, rdx + adc r11, 0 + add r9, rax + adc r10, rdx + adc r11, 0 + ; A[1] * A[2] + mov rax, QWORD PTR [r8+16] + mul QWORD PTR [r8+8] + add r9, rax + adc r10, rdx + adc r11, 0 + add r9, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rsp+24], r9 + ; A[0] * A[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r8] + xor r9, r9 + add r10, rax + adc r11, rdx + adc r9, 0 + add r10, rax + adc r11, rdx + adc r9, 0 + ; A[1] * A[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r8+8] + add r10, rax + adc r11, rdx + adc r9, 0 + add r10, rax + adc r11, rdx + adc r9, 0 + ; A[2] * A[2] + mov rax, QWORD PTR [r8+16] + mul rax + add r10, rax + adc r11, rdx + adc r9, 0 + mov QWORD PTR [rsp+32], r10 + ; A[0] * A[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r8] + xor r10, r10 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[3] + mov rax, QWORD PTR [r8+24] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r11, r12 + adc r9, r13 + adc r10, r14 + mov QWORD PTR [rsp+40], r11 + ; A[0] * A[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r8] + xor r11, r11 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[3] + mov rax, QWORD PTR [r8+24] + mul rax + add r12, r12 + adc r13, r13 + adc r14, r14 + add r12, rax + adc r13, rdx + adc r14, 0 + add r9, r12 + adc r10, r13 + adc r11, r14 + mov QWORD PTR [rsp+48], r9 + ; A[0] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8] + xor r9, r9 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[4] + mov rax, QWORD PTR [r8+32] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r10, r12 + adc r11, r13 + adc r9, r14 + mov QWORD PTR [rsp+56], r10 + ; A[0] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8] + xor r10, r10 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[4] * A[4] + mov rax, QWORD PTR [r8+32] + mul rax + add r12, r12 + adc r13, r13 + adc r14, r14 + add r12, rax + adc r13, rdx + adc r14, 0 + add r11, r12 + adc r9, r13 + adc r10, r14 + mov QWORD PTR [rsp+64], r11 + ; A[0] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8] + xor r11, r11 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[4] * A[5] + mov rax, QWORD PTR [r8+40] + mul QWORD PTR [r8+32] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r9, r12 + adc r10, r13 + adc r11, r14 + mov QWORD PTR [rsp+72], r9 + ; A[0] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8] + xor r9, r9 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[4] * A[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r8+32] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[5] * A[5] + mov rax, QWORD PTR [r8+40] + mul rax + add r12, r12 + adc r13, r13 + adc r14, r14 + add r12, rax + adc r13, rdx + adc r14, 0 + add r10, r12 + adc r11, r13 + adc r9, r14 + mov QWORD PTR [rsp+80], r10 + ; A[0] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8] + xor r10, r10 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[1] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+8] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[2] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[4] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8+32] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[5] * A[6] + mov rax, QWORD PTR [r8+48] + mul QWORD PTR [r8+40] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r11, r12 + adc r9, r13 + adc r10, r14 + mov QWORD PTR [rsp+88], r11 + ; A[1] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+8] + xor r11, r11 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[2] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+16] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[3] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[4] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+32] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[5] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8+40] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[6] * A[6] + mov rax, QWORD PTR [r8+48] + mul rax + add r12, r12 + adc r13, r13 + adc r14, r14 + add r12, rax + adc r13, rdx + adc r14, 0 + add r9, r12 + adc r10, r13 + adc r11, r14 + mov QWORD PTR [rcx+96], r9 + ; A[2] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+16] + xor r9, r9 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[3] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+24] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[4] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+32] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[5] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+40] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[6] * A[7] + mov rax, QWORD PTR [r8+56] + mul QWORD PTR [r8+48] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r10, r12 + adc r11, r13 + adc r9, r14 + mov QWORD PTR [rcx+104], r10 + ; A[3] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+24] + xor r10, r10 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[4] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+32] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[5] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+40] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[6] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+48] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[7] * A[7] + mov rax, QWORD PTR [r8+56] + mul rax + add r12, r12 + adc r13, r13 + adc r14, r14 + add r12, rax + adc r13, rdx + adc r14, 0 + add r11, r12 + adc r9, r13 + adc r10, r14 + mov QWORD PTR [rcx+112], r11 + ; A[4] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+32] + xor r11, r11 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[5] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+40] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[6] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+48] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[7] * A[8] + mov rax, QWORD PTR [r8+64] + mul QWORD PTR [r8+56] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r9, r12 + adc r10, r13 + adc r11, r14 + mov QWORD PTR [rcx+120], r9 + ; A[5] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+40] + xor r9, r9 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[6] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+48] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[7] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+56] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[8] * A[8] + mov rax, QWORD PTR [r8+64] + mul rax + add r12, r12 + adc r13, r13 + adc r14, r14 + add r12, rax + adc r13, rdx + adc r14, 0 + add r10, r12 + adc r11, r13 + adc r9, r14 + mov QWORD PTR [rcx+128], r10 + ; A[6] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+48] + xor r10, r10 + xor r14, r14 + mov r12, rax + mov r13, rdx + ; A[7] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+56] + add r12, rax + adc r13, rdx + adc r14, 0 + ; A[8] * A[9] + mov rax, QWORD PTR [r8+72] + mul QWORD PTR [r8+64] + add r12, rax + adc r13, rdx + adc r14, 0 + add r12, r12 + adc r13, r13 + adc r14, r14 + add r11, r12 + adc r9, r13 + adc r10, r14 + mov QWORD PTR [rcx+136], r11 + ; A[7] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+56] + xor r11, r11 + add r9, rax + adc r10, rdx + adc r11, 0 + add r9, rax + adc r10, rdx + adc r11, 0 + ; A[8] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+64] + add r9, rax + adc r10, rdx + adc r11, 0 + add r9, rax + adc r10, rdx + adc r11, 0 + ; A[9] * A[9] + mov rax, QWORD PTR [r8+72] + mul rax + add r9, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rcx+144], r9 + ; A[8] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+64] + xor r9, r9 + add r10, rax + adc r11, rdx + adc r9, 0 + add r10, rax + adc r11, rdx + adc r9, 0 + ; A[9] * A[10] + mov rax, QWORD PTR [r8+80] + mul QWORD PTR [r8+72] + add r10, rax + adc r11, rdx + adc r9, 0 + add r10, rax + adc r11, rdx + adc r9, 0 + mov QWORD PTR [rcx+152], r10 + ; A[9] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+72] + xor r10, r10 + add r11, rax + adc r9, rdx + adc r10, 0 + add r11, rax + adc r9, rdx + adc r10, 0 + ; A[10] * A[10] + mov rax, QWORD PTR [r8+80] + mul rax + add r11, rax + adc r9, rdx + adc r10, 0 + mov QWORD PTR [rcx+160], r11 + ; A[10] * A[11] + mov rax, QWORD PTR [r8+88] + mul QWORD PTR [r8+80] + xor r11, r11 + add r9, rax + adc r10, rdx + adc r11, 0 + add r9, rax + adc r10, rdx + adc r11, 0 + mov QWORD PTR [rcx+168], r9 + ; A[11] * A[11] + mov rax, QWORD PTR [r8+88] + mul rax + add r10, rax + adc r11, rdx + mov QWORD PTR [rcx+176], r10 + mov QWORD PTR [rcx+184], r11 + mov rax, QWORD PTR [rsp] + mov rdx, QWORD PTR [rsp+8] + mov r12, QWORD PTR [rsp+16] + mov r13, QWORD PTR [rsp+24] + mov QWORD PTR [rcx], rax + mov QWORD PTR [rcx+8], rdx + mov QWORD PTR [rcx+16], r12 + mov QWORD PTR [rcx+24], r13 + mov rax, QWORD PTR [rsp+32] + mov rdx, QWORD PTR [rsp+40] + mov r12, QWORD PTR [rsp+48] + mov r13, QWORD PTR [rsp+56] + mov QWORD PTR [rcx+32], rax + mov QWORD PTR [rcx+40], rdx + mov QWORD PTR [rcx+48], r12 + mov QWORD PTR [rcx+56], r13 + mov rax, QWORD PTR [rsp+64] + mov rdx, QWORD PTR [rsp+72] + mov r12, QWORD PTR [rsp+80] + mov r13, QWORD PTR [rsp+88] + mov QWORD PTR [rcx+64], rax + mov QWORD PTR [rcx+72], rdx + mov QWORD PTR [rcx+80], r12 + mov QWORD PTR [rcx+88], r13 + add rsp, 96 + pop r14 + pop r13 + pop r12 + ret +sp_3072_sqr_12 ENDP +_TEXT ENDS +IFDEF HAVE_INTEL_AVX2 +; /* Square a and put result in r. (r = a * a) +; * +; * r A single precision integer. +; * a A single precision integer. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_sqr_avx2_12 PROC + push rbp + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + push rbx + mov r8, rcx + mov r9, rdx + sub rsp, 96 + cmp r9, r8 + mov rbp, rsp + cmovne rbp, r8 + add r8, 96 + xor r12, r12 + ; Diagonal 1 + ; Zero into %r9 + ; A[1] x A[0] + mov rdx, QWORD PTR [r9] + mulx r11, r10, QWORD PTR [r9+8] + mov QWORD PTR [rbp+8], r10 + ; Zero into %r8 + ; A[2] x A[0] + mulx r10, rax, QWORD PTR [r9+16] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [rbp+16], r11 + ; Zero into %r9 + ; A[3] x A[0] + mulx r11, rax, QWORD PTR [r9+24] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [rbp+24], r10 + ; Zero into %r8 + ; A[4] x A[0] + mulx r10, rax, QWORD PTR [r9+32] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [rbp+32], r11 + ; Zero into %r9 + ; A[5] x A[0] + mulx r11, rax, QWORD PTR [r9+40] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [rbp+40], r10 + ; No load %r12 - %r8 + ; A[6] x A[0] + mulx r14, rax, QWORD PTR [r9+48] + adcx r11, rax + adox r14, r12 + mov QWORD PTR [rbp+48], r11 + ; No load %r13 - %r9 + ; A[7] x A[0] + mulx r15, rax, QWORD PTR [r9+56] + adcx r14, rax + adox r15, r12 + ; No store %r12 - %r8 + ; No load %r14 - %r8 + ; A[8] x A[0] + mulx rdi, rax, QWORD PTR [r9+64] + adcx r15, rax + adox rdi, r12 + ; No store %r13 - %r9 + ; No load %r15 - %r9 + ; A[9] x A[0] + mulx rsi, rax, QWORD PTR [r9+72] + adcx rdi, rax + adox rsi, r12 + ; No store %r14 - %r8 + ; No load %rbx - %r8 + ; A[10] x A[0] + mulx rbx, rax, QWORD PTR [r9+80] + adcx rsi, rax + adox rbx, r12 + ; No store %r15 - %r9 + ; Zero into %r9 + ; A[11] x A[0] + mulx r11, rax, QWORD PTR [r9+88] + adcx rbx, rax + adox r11, r12 + ; No store %rbx - %r8 + ; Carry + adcx r11, r12 + mov r13, r12 + adcx r13, r12 + adox r13, r12 + mov QWORD PTR [r8], r11 + ; Diagonal 2 + mov r11, QWORD PTR [rbp+24] + mov r10, QWORD PTR [rbp+32] + ; A[2] x A[1] + mov rdx, QWORD PTR [r9+8] + mulx rcx, rax, QWORD PTR [r9+16] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [rbp+24], r11 + mov r11, QWORD PTR [rbp+40] + ; A[3] x A[1] + mulx rcx, rax, QWORD PTR [r9+24] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbp+32], r10 + mov r10, QWORD PTR [rbp+48] + ; A[4] x A[1] + mulx rcx, rax, QWORD PTR [r9+32] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [rbp+40], r11 + ; No load %r12 - %r9 + ; A[5] x A[1] + mulx rcx, rax, QWORD PTR [r9+40] + adcx r10, rax + adox r14, rcx + mov QWORD PTR [rbp+48], r10 + ; No load %r13 - %r8 + ; A[6] x A[1] + mulx rcx, rax, QWORD PTR [r9+48] + adcx r14, rax + adox r15, rcx + ; No store %r12 - %r9 + ; No load %r14 - %r9 + ; A[7] x A[1] + mulx rcx, rax, QWORD PTR [r9+56] + adcx r15, rax + adox rdi, rcx + ; No store %r13 - %r8 + ; No load %r15 - %r8 + ; A[8] x A[1] + mulx rcx, rax, QWORD PTR [r9+64] + adcx rdi, rax + adox rsi, rcx + ; No store %r14 - %r9 + ; No load %rbx - %r9 + ; A[9] x A[1] + mulx rcx, rax, QWORD PTR [r9+72] + adcx rsi, rax + adox rbx, rcx + ; No store %r15 - %r8 + mov r10, QWORD PTR [r8] + ; A[10] x A[1] + mulx rcx, rax, QWORD PTR [r9+80] + adcx rbx, rax + adox r10, rcx + ; No store %rbx - %r9 + ; Zero into %r9 + ; A[11] x A[1] + mulx r11, rax, QWORD PTR [r9+88] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [r8], r10 + ; Zero into %r8 + ; A[11] x A[2] + mov rdx, QWORD PTR [r9+16] + mulx r10, rax, QWORD PTR [r9+88] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [r8+8], r11 + ; Carry + adcx r10, r13 + mov r13, r12 + adcx r13, r12 + adox r13, r12 + mov QWORD PTR [r8+16], r10 + ; Diagonal 3 + mov r10, QWORD PTR [rbp+40] + mov r11, QWORD PTR [rbp+48] + ; A[3] x A[2] + mulx rcx, rax, QWORD PTR [r9+24] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [rbp+40], r10 + ; No load %r12 - %r8 + ; A[4] x A[2] + mulx rcx, rax, QWORD PTR [r9+32] + adcx r11, rax + adox r14, rcx + mov QWORD PTR [rbp+48], r11 + ; No load %r13 - %r9 + ; A[5] x A[2] + mulx rcx, rax, QWORD PTR [r9+40] + adcx r14, rax + adox r15, rcx + ; No store %r12 - %r8 + ; No load %r14 - %r8 + ; A[6] x A[2] + mulx rcx, rax, QWORD PTR [r9+48] + adcx r15, rax + adox rdi, rcx + ; No store %r13 - %r9 + ; No load %r15 - %r9 + ; A[7] x A[2] + mulx rcx, rax, QWORD PTR [r9+56] + adcx rdi, rax + adox rsi, rcx + ; No store %r14 - %r8 + ; No load %rbx - %r8 + ; A[8] x A[2] + mulx rcx, rax, QWORD PTR [r9+64] + adcx rsi, rax + adox rbx, rcx + ; No store %r15 - %r9 + mov r11, QWORD PTR [r8] + ; A[9] x A[2] + mulx rcx, rax, QWORD PTR [r9+72] + adcx rbx, rax + adox r11, rcx + ; No store %rbx - %r8 + mov r10, QWORD PTR [r8+8] + ; A[10] x A[2] + mulx rcx, rax, QWORD PTR [r9+80] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8], r11 + mov r11, QWORD PTR [r8+16] + ; A[10] x A[3] + mov rdx, QWORD PTR [r9+24] + mulx rcx, rax, QWORD PTR [r9+80] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+8], r10 + ; Zero into %r8 + ; A[10] x A[4] + mov rdx, QWORD PTR [r9+32] + mulx r10, rax, QWORD PTR [r9+80] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [r8+16], r11 + ; Zero into %r9 + ; A[10] x A[5] + mov rdx, QWORD PTR [r9+40] + mulx r11, rax, QWORD PTR [r9+80] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [r8+24], r10 + ; Carry + adcx r11, r13 + mov r13, r12 + adcx r13, r12 + adox r13, r12 + mov QWORD PTR [r8+32], r11 + ; Diagonal 4 + ; No load %r13 - %r8 + ; A[4] x A[3] + mov rdx, QWORD PTR [r9+24] + mulx rcx, rax, QWORD PTR [r9+32] + adcx r14, rax + adox r15, rcx + ; No store %r12 - %r9 + ; No load %r14 - %r9 + ; A[5] x A[3] + mulx rcx, rax, QWORD PTR [r9+40] + adcx r15, rax + adox rdi, rcx + ; No store %r13 - %r8 + ; No load %r15 - %r8 + ; A[6] x A[3] + mulx rcx, rax, QWORD PTR [r9+48] + adcx rdi, rax + adox rsi, rcx + ; No store %r14 - %r9 + ; No load %rbx - %r9 + ; A[7] x A[3] + mulx rcx, rax, QWORD PTR [r9+56] + adcx rsi, rax + adox rbx, rcx + ; No store %r15 - %r8 + mov r10, QWORD PTR [r8] + ; A[8] x A[3] + mulx rcx, rax, QWORD PTR [r9+64] + adcx rbx, rax + adox r10, rcx + ; No store %rbx - %r9 + mov r11, QWORD PTR [r8+8] + ; A[9] x A[3] + mulx rcx, rax, QWORD PTR [r9+72] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r10, QWORD PTR [r8+16] + ; A[9] x A[4] + mov rdx, QWORD PTR [r9+32] + mulx rcx, rax, QWORD PTR [r9+72] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+8], r11 + mov r11, QWORD PTR [r8+24] + ; A[9] x A[5] + mov rdx, QWORD PTR [r9+40] + mulx rcx, rax, QWORD PTR [r9+72] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+16], r10 + mov r10, QWORD PTR [r8+32] + ; A[9] x A[6] + mov rdx, QWORD PTR [r9+48] + mulx rcx, rax, QWORD PTR [r9+72] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+24], r11 + ; Zero into %r9 + ; A[9] x A[7] + mov rdx, QWORD PTR [r9+56] + mulx r11, rax, QWORD PTR [r9+72] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [r8+32], r10 + ; Zero into %r8 + ; A[9] x A[8] + mov rdx, QWORD PTR [r9+64] + mulx r10, rax, QWORD PTR [r9+72] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [r8+40], r11 + ; Carry + adcx r10, r13 + mov r13, r12 + adcx r13, r12 + adox r13, r12 + mov QWORD PTR [r8+48], r10 + ; Diagonal 5 + ; No load %r15 - %r9 + ; A[5] x A[4] + mov rdx, QWORD PTR [r9+32] + mulx rcx, rax, QWORD PTR [r9+40] + adcx rdi, rax + adox rsi, rcx + ; No store %r14 - %r8 + ; No load %rbx - %r8 + ; A[6] x A[4] + mulx rcx, rax, QWORD PTR [r9+48] + adcx rsi, rax + adox rbx, rcx + ; No store %r15 - %r9 + mov r11, QWORD PTR [r8] + ; A[7] x A[4] + mulx rcx, rax, QWORD PTR [r9+56] + adcx rbx, rax + adox r11, rcx + ; No store %rbx - %r8 + mov r10, QWORD PTR [r8+8] + ; A[8] x A[4] + mulx rcx, rax, QWORD PTR [r9+64] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8], r11 + mov r11, QWORD PTR [r8+16] + ; A[8] x A[5] + mov rdx, QWORD PTR [r9+40] + mulx rcx, rax, QWORD PTR [r9+64] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+8], r10 + mov r10, QWORD PTR [r8+24] + ; A[8] x A[6] + mov rdx, QWORD PTR [r9+48] + mulx rcx, rax, QWORD PTR [r9+64] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+16], r11 + mov r11, QWORD PTR [r8+32] + ; A[8] x A[7] + mov rdx, QWORD PTR [r9+56] + mulx rcx, rax, QWORD PTR [r9+64] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+24], r10 + mov r10, QWORD PTR [r8+40] + ; A[10] x A[6] + mov rdx, QWORD PTR [r9+48] + mulx rcx, rax, QWORD PTR [r9+80] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+32], r11 + mov r11, QWORD PTR [r8+48] + ; A[10] x A[7] + mov rdx, QWORD PTR [r9+56] + mulx rcx, rax, QWORD PTR [r9+80] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+40], r10 + ; Zero into %r8 + ; A[10] x A[8] + mov rdx, QWORD PTR [r9+64] + mulx r10, rax, QWORD PTR [r9+80] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [r8+48], r11 + ; Zero into %r9 + ; A[10] x A[9] + mov rdx, QWORD PTR [r9+72] + mulx r11, rax, QWORD PTR [r9+80] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [r8+56], r10 + ; Carry + adcx r11, r13 + mov r13, r12 + adcx r13, r12 + adox r13, r12 + mov QWORD PTR [r8+64], r11 + ; Diagonal 6 + mov r10, QWORD PTR [r8] + ; A[6] x A[5] + mov rdx, QWORD PTR [r9+40] + mulx rcx, rax, QWORD PTR [r9+48] + adcx rbx, rax + adox r10, rcx + ; No store %rbx - %r9 + mov r11, QWORD PTR [r8+8] + ; A[7] x A[5] + mulx rcx, rax, QWORD PTR [r9+56] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8], r10 + mov r10, QWORD PTR [r8+16] + ; A[7] x A[6] + mov rdx, QWORD PTR [r9+48] + mulx rcx, rax, QWORD PTR [r9+56] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+8], r11 + mov r11, QWORD PTR [r8+24] + ; A[11] x A[3] + mov rdx, QWORD PTR [r9+24] + mulx rcx, rax, QWORD PTR [r9+88] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+16], r10 + mov r10, QWORD PTR [r8+32] + ; A[11] x A[4] + mov rdx, QWORD PTR [r9+32] + mulx rcx, rax, QWORD PTR [r9+88] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+24], r11 + mov r11, QWORD PTR [r8+40] + ; A[11] x A[5] + mov rdx, QWORD PTR [r9+40] + mulx rcx, rax, QWORD PTR [r9+88] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+32], r10 + mov r10, QWORD PTR [r8+48] + ; A[11] x A[6] + mov rdx, QWORD PTR [r9+48] + mulx rcx, rax, QWORD PTR [r9+88] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+40], r11 + mov r11, QWORD PTR [r8+56] + ; A[11] x A[7] + mov rdx, QWORD PTR [r9+56] + mulx rcx, rax, QWORD PTR [r9+88] + adcx r10, rax + adox r11, rcx + mov QWORD PTR [r8+48], r10 + mov r10, QWORD PTR [r8+64] + ; A[11] x A[8] + mov rdx, QWORD PTR [r9+64] + mulx rcx, rax, QWORD PTR [r9+88] + adcx r11, rax + adox r10, rcx + mov QWORD PTR [r8+56], r11 + ; Zero into %r9 + ; A[11] x A[9] + mov rdx, QWORD PTR [r9+72] + mulx r11, rax, QWORD PTR [r9+88] + adcx r10, rax + adox r11, r12 + mov QWORD PTR [r8+64], r10 + ; Zero into %r8 + ; A[11] x A[10] + mov rdx, QWORD PTR [r9+80] + mulx r10, rax, QWORD PTR [r9+88] + adcx r11, rax + adox r10, r12 + mov QWORD PTR [r8+72], r11 + ; Carry + adcx r10, r13 + mov r13, r12 + adcx r13, r12 + adox r13, r12 + mov QWORD PTR [r8+80], r10 + mov QWORD PTR [r8+88], r13 + ; Double and Add in A[i] x A[i] + mov r11, QWORD PTR [rbp+8] + ; A[0] x A[0] + mov rdx, QWORD PTR [r9] + mulx rcx, rax, rdx + mov QWORD PTR [rbp], rax + adox r11, r11 + adcx r11, rcx + mov QWORD PTR [rbp+8], r11 + mov r10, QWORD PTR [rbp+16] + mov r11, QWORD PTR [rbp+24] + ; A[1] x A[1] + mov rdx, QWORD PTR [r9+8] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [rbp+16], r10 + mov QWORD PTR [rbp+24], r11 + mov r10, QWORD PTR [rbp+32] + mov r11, QWORD PTR [rbp+40] + ; A[2] x A[2] + mov rdx, QWORD PTR [r9+16] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [rbp+32], r10 + mov QWORD PTR [rbp+40], r11 + mov r10, QWORD PTR [rbp+48] + ; A[3] x A[3] + mov rdx, QWORD PTR [r9+24] + mulx rcx, rax, rdx + adox r10, r10 + adox r14, r14 + adcx r10, rax + adcx r14, rcx + mov QWORD PTR [rbp+48], r10 + ; A[4] x A[4] + mov rdx, QWORD PTR [r9+32] + mulx rcx, rax, rdx + adox r15, r15 + adox rdi, rdi + adcx r15, rax + adcx rdi, rcx + ; A[5] x A[5] + mov rdx, QWORD PTR [r9+40] + mulx rcx, rax, rdx + adox rsi, rsi + adox rbx, rbx + adcx rsi, rax + adcx rbx, rcx + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + ; A[6] x A[6] + mov rdx, QWORD PTR [r9+48] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [r8], r10 + mov QWORD PTR [r8+8], r11 + mov r10, QWORD PTR [r8+16] + mov r11, QWORD PTR [r8+24] + ; A[7] x A[7] + mov rdx, QWORD PTR [r9+56] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [r8+16], r10 + mov QWORD PTR [r8+24], r11 + mov r10, QWORD PTR [r8+32] + mov r11, QWORD PTR [r8+40] + ; A[8] x A[8] + mov rdx, QWORD PTR [r9+64] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [r8+32], r10 + mov QWORD PTR [r8+40], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + ; A[9] x A[9] + mov rdx, QWORD PTR [r9+72] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [r8+48], r10 + mov QWORD PTR [r8+56], r11 + mov r10, QWORD PTR [r8+64] + mov r11, QWORD PTR [r8+72] + ; A[10] x A[10] + mov rdx, QWORD PTR [r9+80] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [r8+64], r10 + mov QWORD PTR [r8+72], r11 + mov r10, QWORD PTR [r8+80] + mov r11, QWORD PTR [r8+88] + ; A[11] x A[11] + mov rdx, QWORD PTR [r9+88] + mulx rcx, rax, rdx + adox r10, r10 + adox r11, r11 + adcx r10, rax + adcx r11, rcx + mov QWORD PTR [r8+80], r10 + mov QWORD PTR [r8+88], r11 + mov QWORD PTR [r8+-40], r14 + mov QWORD PTR [r8+-32], r15 + mov QWORD PTR [r8+-24], rdi + mov QWORD PTR [r8+-16], rsi + mov QWORD PTR [r8+-8], rbx + sub r8, 96 + cmp r9, r8 + jne L_end_3072_sqr_avx2_12 + vmovdqu xmm0, OWORD PTR [rbp] + vmovups OWORD PTR [r8], xmm0 + vmovdqu xmm0, OWORD PTR [rbp+16] + vmovups OWORD PTR [r8+16], xmm0 + vmovdqu xmm0, OWORD PTR [rbp+32] + vmovups OWORD PTR [r8+32], xmm0 + mov rax, QWORD PTR [rbp+48] + mov QWORD PTR [r8+48], rax +L_end_3072_sqr_avx2_12: + add rsp, 96 + pop rbx + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp + ret +sp_3072_sqr_avx2_12 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_sqr_24 PROC + sub rsp, 208 + mov QWORD PTR [rsp+192], rcx + mov QWORD PTR [rsp+200], rdx + mov r9, 0 + mov r10, rsp + lea r11, QWORD PTR [rdx+96] + mov rax, QWORD PTR [rdx] + sub rax, QWORD PTR [r11] + mov r8, QWORD PTR [rdx+8] + mov QWORD PTR [r10], rax + sbb r8, QWORD PTR [r11+8] + mov rax, QWORD PTR [rdx+16] + mov QWORD PTR [r10+8], r8 + sbb rax, QWORD PTR [r11+16] + mov r8, QWORD PTR [rdx+24] + mov QWORD PTR [r10+16], rax + sbb r8, QWORD PTR [r11+24] + mov rax, QWORD PTR [rdx+32] + mov QWORD PTR [r10+24], r8 + sbb rax, QWORD PTR [r11+32] + mov r8, QWORD PTR [rdx+40] + mov QWORD PTR [r10+32], rax + sbb r8, QWORD PTR [r11+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r10+40], r8 + sbb rax, QWORD PTR [r11+48] + mov r8, QWORD PTR [rdx+56] + mov QWORD PTR [r10+48], rax + sbb r8, QWORD PTR [r11+56] + mov rax, QWORD PTR [rdx+64] + mov QWORD PTR [r10+56], r8 + sbb rax, QWORD PTR [r11+64] + mov r8, QWORD PTR [rdx+72] + mov QWORD PTR [r10+64], rax + sbb r8, QWORD PTR [r11+72] + mov rax, QWORD PTR [rdx+80] + mov QWORD PTR [r10+72], r8 + sbb rax, QWORD PTR [r11+80] + mov r8, QWORD PTR [rdx+88] + mov QWORD PTR [r10+80], rax + sbb r8, QWORD PTR [r11+88] + mov QWORD PTR [r10+88], r8 + sbb r9, 0 + ; Cond Negate + mov rax, QWORD PTR [r10] + mov r11, r9 + xor rax, r9 + neg r11 + sub rax, r9 + mov r8, QWORD PTR [r10+8] + sbb r11, 0 + mov QWORD PTR [r10], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+16] + setc r11b + mov QWORD PTR [r10+8], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+24] + setc r11b + mov QWORD PTR [r10+16], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+32] + setc r11b + mov QWORD PTR [r10+24], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+40] + setc r11b + mov QWORD PTR [r10+32], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+48] + setc r11b + mov QWORD PTR [r10+40], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+56] + setc r11b + mov QWORD PTR [r10+48], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+64] + setc r11b + mov QWORD PTR [r10+56], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+72] + setc r11b + mov QWORD PTR [r10+64], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+80] + setc r11b + mov QWORD PTR [r10+72], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+88] + setc r11b + mov QWORD PTR [r10+80], rax + xor r8, r9 + add r8, r11 + mov QWORD PTR [r10+88], r8 + mov rdx, r10 + mov rcx, rsp + call sp_3072_sqr_12 + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] + add rdx, 96 + add rcx, 192 + call sp_3072_sqr_12 + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] + call sp_3072_sqr_12 +IFDEF _WIN64 + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] +ENDIF + mov rdx, QWORD PTR [rsp+192] + lea r10, QWORD PTR [rsp+96] + add rdx, 288 + mov r9, 0 + mov r8, QWORD PTR [r10+-96] + sub r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov QWORD PTR [r10+88], rax + sbb r9, 0 + sub rdx, 192 + mov r8, QWORD PTR [r10+-96] + sub r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov QWORD PTR [r10+88], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+192] + neg r9 + add rcx, 192 + mov r8, QWORD PTR [rcx+-96] + sub r8, QWORD PTR [r10+-96] + mov rax, QWORD PTR [rcx+-88] + mov QWORD PTR [rcx+-96], r8 + sbb rax, QWORD PTR [r10+-88] + mov r8, QWORD PTR [rcx+-80] + mov QWORD PTR [rcx+-88], rax + sbb r8, QWORD PTR [r10+-80] + mov rax, QWORD PTR [rcx+-72] + mov QWORD PTR [rcx+-80], r8 + sbb rax, QWORD PTR [r10+-72] + mov r8, QWORD PTR [rcx+-64] + mov QWORD PTR [rcx+-72], rax + sbb r8, QWORD PTR [r10+-64] + mov rax, QWORD PTR [rcx+-56] + mov QWORD PTR [rcx+-64], r8 + sbb rax, QWORD PTR [r10+-56] + mov r8, QWORD PTR [rcx+-48] + mov QWORD PTR [rcx+-56], rax + sbb r8, QWORD PTR [r10+-48] + mov rax, QWORD PTR [rcx+-40] + mov QWORD PTR [rcx+-48], r8 + sbb rax, QWORD PTR [r10+-40] + mov r8, QWORD PTR [rcx+-32] + mov QWORD PTR [rcx+-40], rax + sbb r8, QWORD PTR [r10+-32] + mov rax, QWORD PTR [rcx+-24] + mov QWORD PTR [rcx+-32], r8 + sbb rax, QWORD PTR [r10+-24] + mov r8, QWORD PTR [rcx+-16] + mov QWORD PTR [rcx+-24], rax + sbb r8, QWORD PTR [r10+-16] + mov rax, QWORD PTR [rcx+-8] + mov QWORD PTR [rcx+-16], r8 + sbb rax, QWORD PTR [r10+-8] + mov r8, QWORD PTR [rcx] + mov QWORD PTR [rcx+-8], rax + sbb r8, QWORD PTR [r10] + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + sbb rax, QWORD PTR [r10+8] + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + sbb r8, QWORD PTR [r10+16] + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + sbb rax, QWORD PTR [r10+24] + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + sbb r8, QWORD PTR [r10+32] + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + sbb rax, QWORD PTR [r10+40] + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + sbb r8, QWORD PTR [r10+48] + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + sbb rax, QWORD PTR [r10+56] + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + sbb r8, QWORD PTR [r10+64] + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + sbb rax, QWORD PTR [r10+72] + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + sbb r8, QWORD PTR [r10+80] + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + sbb rax, QWORD PTR [r10+88] + mov QWORD PTR [rcx+88], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+192] + add rcx, 288 + ; Add in word + mov r8, QWORD PTR [rcx] + add r8, r9 + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 adc rax, 0 - mov r9, QWORD PTR [r13+272] - mov QWORD PTR [rsi+264], rax - adc r9, 0 - mov r10, QWORD PTR [r13+280] - mov QWORD PTR [rsi+272], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+288] - mov QWORD PTR [rsi+280], r10 + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 adc rax, 0 - mov r9, QWORD PTR [r13+296] - mov QWORD PTR [rsi+288], rax - adc r9, 0 - mov r10, QWORD PTR [r13+304] - mov QWORD PTR [rsi+296], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+312] - mov QWORD PTR [rsi+304], r10 + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 adc rax, 0 - mov r9, QWORD PTR [r13+320] - mov QWORD PTR [rsi+312], rax - adc r9, 0 - mov r10, QWORD PTR [r13+328] - mov QWORD PTR [rsi+320], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+336] - mov QWORD PTR [rsi+328], r10 + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 adc rax, 0 - mov r9, QWORD PTR [r13+344] - mov QWORD PTR [rsi+336], rax - adc r9, 0 - mov r10, QWORD PTR [r13+352] - mov QWORD PTR [rsi+344], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+360] - mov QWORD PTR [rsi+352], r10 + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 adc rax, 0 - mov r9, QWORD PTR [r13+368] - mov QWORD PTR [rsi+360], rax - adc r9, 0 - mov r10, QWORD PTR [r13+376] - mov QWORD PTR [rsi+368], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+384] - mov QWORD PTR [rsi+376], r10 + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 adc rax, 0 - mov r9, QWORD PTR [r13+392] - mov QWORD PTR [rsi+384], rax - adc r9, 0 - mov r10, QWORD PTR [r13+400] - mov QWORD PTR [rsi+392], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+408] - mov QWORD PTR [rsi+400], r10 + mov QWORD PTR [rcx+88], rax + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] + add rsp, 208 + ret +sp_3072_sqr_24 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_sqr_avx2_24 PROC + sub rsp, 208 + mov QWORD PTR [rsp+192], rcx + mov QWORD PTR [rsp+200], rdx + mov r9, 0 + mov r10, rsp + lea r11, QWORD PTR [rdx+96] + mov rax, QWORD PTR [rdx] + sub rax, QWORD PTR [r11] + mov r8, QWORD PTR [rdx+8] + mov QWORD PTR [r10], rax + sbb r8, QWORD PTR [r11+8] + mov rax, QWORD PTR [rdx+16] + mov QWORD PTR [r10+8], r8 + sbb rax, QWORD PTR [r11+16] + mov r8, QWORD PTR [rdx+24] + mov QWORD PTR [r10+16], rax + sbb r8, QWORD PTR [r11+24] + mov rax, QWORD PTR [rdx+32] + mov QWORD PTR [r10+24], r8 + sbb rax, QWORD PTR [r11+32] + mov r8, QWORD PTR [rdx+40] + mov QWORD PTR [r10+32], rax + sbb r8, QWORD PTR [r11+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r10+40], r8 + sbb rax, QWORD PTR [r11+48] + mov r8, QWORD PTR [rdx+56] + mov QWORD PTR [r10+48], rax + sbb r8, QWORD PTR [r11+56] + mov rax, QWORD PTR [rdx+64] + mov QWORD PTR [r10+56], r8 + sbb rax, QWORD PTR [r11+64] + mov r8, QWORD PTR [rdx+72] + mov QWORD PTR [r10+64], rax + sbb r8, QWORD PTR [r11+72] + mov rax, QWORD PTR [rdx+80] + mov QWORD PTR [r10+72], r8 + sbb rax, QWORD PTR [r11+80] + mov r8, QWORD PTR [rdx+88] + mov QWORD PTR [r10+80], rax + sbb r8, QWORD PTR [r11+88] + mov QWORD PTR [r10+88], r8 + sbb r9, 0 + ; Cond Negate + mov rax, QWORD PTR [r10] + mov r11, r9 + xor rax, r9 + neg r11 + sub rax, r9 + mov r8, QWORD PTR [r10+8] + sbb r11, 0 + mov QWORD PTR [r10], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+16] + setc r11b + mov QWORD PTR [r10+8], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+24] + setc r11b + mov QWORD PTR [r10+16], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+32] + setc r11b + mov QWORD PTR [r10+24], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+40] + setc r11b + mov QWORD PTR [r10+32], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+48] + setc r11b + mov QWORD PTR [r10+40], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+56] + setc r11b + mov QWORD PTR [r10+48], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+64] + setc r11b + mov QWORD PTR [r10+56], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+72] + setc r11b + mov QWORD PTR [r10+64], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+80] + setc r11b + mov QWORD PTR [r10+72], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+88] + setc r11b + mov QWORD PTR [r10+80], rax + xor r8, r9 + add r8, r11 + mov QWORD PTR [r10+88], r8 + mov rdx, r10 + mov rcx, rsp + call sp_3072_sqr_avx2_12 + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] + add rdx, 96 + add rcx, 192 + call sp_3072_sqr_avx2_12 + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] + call sp_3072_sqr_avx2_12 +IFDEF _WIN64 + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] +ENDIF + mov rdx, QWORD PTR [rsp+192] + lea r10, QWORD PTR [rsp+96] + add rdx, 288 + mov r9, 0 + mov r8, QWORD PTR [r10+-96] + sub r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov QWORD PTR [r10+88], rax + sbb r9, 0 + sub rdx, 192 + mov r8, QWORD PTR [r10+-96] + sub r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov QWORD PTR [r10+88], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+192] + neg r9 + add rcx, 192 + mov r8, QWORD PTR [rcx+-96] + sub r8, QWORD PTR [r10+-96] + mov rax, QWORD PTR [rcx+-88] + mov QWORD PTR [rcx+-96], r8 + sbb rax, QWORD PTR [r10+-88] + mov r8, QWORD PTR [rcx+-80] + mov QWORD PTR [rcx+-88], rax + sbb r8, QWORD PTR [r10+-80] + mov rax, QWORD PTR [rcx+-72] + mov QWORD PTR [rcx+-80], r8 + sbb rax, QWORD PTR [r10+-72] + mov r8, QWORD PTR [rcx+-64] + mov QWORD PTR [rcx+-72], rax + sbb r8, QWORD PTR [r10+-64] + mov rax, QWORD PTR [rcx+-56] + mov QWORD PTR [rcx+-64], r8 + sbb rax, QWORD PTR [r10+-56] + mov r8, QWORD PTR [rcx+-48] + mov QWORD PTR [rcx+-56], rax + sbb r8, QWORD PTR [r10+-48] + mov rax, QWORD PTR [rcx+-40] + mov QWORD PTR [rcx+-48], r8 + sbb rax, QWORD PTR [r10+-40] + mov r8, QWORD PTR [rcx+-32] + mov QWORD PTR [rcx+-40], rax + sbb r8, QWORD PTR [r10+-32] + mov rax, QWORD PTR [rcx+-24] + mov QWORD PTR [rcx+-32], r8 + sbb rax, QWORD PTR [r10+-24] + mov r8, QWORD PTR [rcx+-16] + mov QWORD PTR [rcx+-24], rax + sbb r8, QWORD PTR [r10+-16] + mov rax, QWORD PTR [rcx+-8] + mov QWORD PTR [rcx+-16], r8 + sbb rax, QWORD PTR [r10+-8] + mov r8, QWORD PTR [rcx] + mov QWORD PTR [rcx+-8], rax + sbb r8, QWORD PTR [r10] + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + sbb rax, QWORD PTR [r10+8] + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + sbb r8, QWORD PTR [r10+16] + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + sbb rax, QWORD PTR [r10+24] + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + sbb r8, QWORD PTR [r10+32] + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + sbb rax, QWORD PTR [r10+40] + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + sbb r8, QWORD PTR [r10+48] + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + sbb rax, QWORD PTR [r10+56] + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + sbb r8, QWORD PTR [r10+64] + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + sbb rax, QWORD PTR [r10+72] + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + sbb r8, QWORD PTR [r10+80] + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + sbb rax, QWORD PTR [r10+88] + mov QWORD PTR [rcx+88], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+192] + add rcx, 288 + ; Add in word + mov r8, QWORD PTR [rcx] + add r8, r9 + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 adc rax, 0 - mov r9, QWORD PTR [r13+416] - mov QWORD PTR [rsi+408], rax - adc r9, 0 - mov r10, QWORD PTR [r13+424] - mov QWORD PTR [rsi+416], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+432] - mov QWORD PTR [rsi+424], r10 + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 adc rax, 0 - mov r9, QWORD PTR [r13+440] - mov QWORD PTR [rsi+432], rax - adc r9, 0 - mov r10, QWORD PTR [r13+448] - mov QWORD PTR [rsi+440], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+456] - mov QWORD PTR [rsi+448], r10 + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 adc rax, 0 - mov r9, QWORD PTR [r13+464] - mov QWORD PTR [rsi+456], rax - adc r9, 0 - mov r10, QWORD PTR [r13+472] - mov QWORD PTR [rsi+464], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+480] - mov QWORD PTR [rsi+472], r10 + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 adc rax, 0 - mov r9, QWORD PTR [r13+488] - mov QWORD PTR [rsi+480], rax - adc r9, 0 - mov r10, QWORD PTR [r13+496] - mov QWORD PTR [rsi+488], r9 - adc r10, 0 - mov rax, QWORD PTR [r13+504] - mov QWORD PTR [rsi+496], r10 + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 adc rax, 0 - mov QWORD PTR [rsi+504], rax - add rsp, 1576 - pop rsi - pop rdi - pop r15 - pop r14 - pop r13 - pop r12 + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + adc rax, 0 + mov QWORD PTR [rcx+88], rax + mov rdx, QWORD PTR [rsp+200] + mov rcx, QWORD PTR [rsp+192] + add rsp, 208 ret -sp_4096_mul_avx2_64 ENDP +sp_3072_sqr_avx2_24 ENDP _TEXT ENDS ENDIF ; /* Square a and put result in r. (r = a * a) @@ -44096,13 +22945,13 @@ ENDIF ; * a A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_sqr_64 PROC - sub rsp, 528 - mov QWORD PTR [rsp+512], rcx - mov QWORD PTR [rsp+520], rdx +sp_3072_sqr_48 PROC + sub rsp, 400 + mov QWORD PTR [rsp+384], rcx + mov QWORD PTR [rsp+392], rdx mov r9, 0 mov r10, rsp - lea r11, QWORD PTR [rdx+256] + lea r11, QWORD PTR [rdx+192] mov rax, QWORD PTR [rdx] sub rax, QWORD PTR [r11] mov r8, QWORD PTR [rdx+8] @@ -44174,31 +23023,7 @@ sp_4096_sqr_64 PROC mov r8, QWORD PTR [rdx+184] mov QWORD PTR [r10+176], rax sbb r8, QWORD PTR [r11+184] - mov rax, QWORD PTR [rdx+192] mov QWORD PTR [r10+184], r8 - sbb rax, QWORD PTR [r11+192] - mov r8, QWORD PTR [rdx+200] - mov QWORD PTR [r10+192], rax - sbb r8, QWORD PTR [r11+200] - mov rax, QWORD PTR [rdx+208] - mov QWORD PTR [r10+200], r8 - sbb rax, QWORD PTR [r11+208] - mov r8, QWORD PTR [rdx+216] - mov QWORD PTR [r10+208], rax - sbb r8, QWORD PTR [r11+216] - mov rax, QWORD PTR [rdx+224] - mov QWORD PTR [r10+216], r8 - sbb rax, QWORD PTR [r11+224] - mov r8, QWORD PTR [rdx+232] - mov QWORD PTR [r10+224], rax - sbb r8, QWORD PTR [r11+232] - mov rax, QWORD PTR [rdx+240] - mov QWORD PTR [r10+232], r8 - sbb rax, QWORD PTR [r11+240] - mov r8, QWORD PTR [rdx+248] - mov QWORD PTR [r10+240], rax - sbb r8, QWORD PTR [r11+248] - mov QWORD PTR [r10+248], r8 sbb r9, 0 ; Cond Negate mov rax, QWORD PTR [r10] @@ -44321,92 +23146,28 @@ sp_4096_sqr_64 PROC mov QWORD PTR [r10+176], rax xor r8, r9 add r8, r11 - mov rax, QWORD PTR [r10+192] - setc r11b mov QWORD PTR [r10+184], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+200] - setc r11b - mov QWORD PTR [r10+192], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+208] - setc r11b - mov QWORD PTR [r10+200], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+216] - setc r11b - mov QWORD PTR [r10+208], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+224] - setc r11b - mov QWORD PTR [r10+216], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+232] - setc r11b - mov QWORD PTR [r10+224], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+240] - setc r11b - mov QWORD PTR [r10+232], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+248] - setc r11b - mov QWORD PTR [r10+240], rax - xor r8, r9 - add r8, r11 - mov QWORD PTR [r10+248], r8 mov rdx, r10 mov rcx, rsp - call sp_2048_sqr_32 - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] - add rdx, 256 - add rcx, 512 - call sp_2048_sqr_32 - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] - call sp_2048_sqr_32 + call sp_3072_sqr_24 + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] + add rdx, 192 + add rcx, 384 + call sp_3072_sqr_24 + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] + call sp_3072_sqr_24 IFDEF _WIN64 - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] ENDIF - mov rdx, QWORD PTR [rsp+512] - lea r10, QWORD PTR [rsp+256] - add rdx, 768 + mov rdx, QWORD PTR [rsp+384] + lea r10, QWORD PTR [rsp+192] + add rdx, 576 mov r9, 0 - mov r8, QWORD PTR [r10+-256] - sub r8, QWORD PTR [rdx+-256] - mov rax, QWORD PTR [r10+-248] - mov QWORD PTR [r10+-256], r8 - sbb rax, QWORD PTR [rdx+-248] - mov r8, QWORD PTR [r10+-240] - mov QWORD PTR [r10+-248], rax - sbb r8, QWORD PTR [rdx+-240] - mov rax, QWORD PTR [r10+-232] - mov QWORD PTR [r10+-240], r8 - sbb rax, QWORD PTR [rdx+-232] - mov r8, QWORD PTR [r10+-224] - mov QWORD PTR [r10+-232], rax - sbb r8, QWORD PTR [rdx+-224] - mov rax, QWORD PTR [r10+-216] - mov QWORD PTR [r10+-224], r8 - sbb rax, QWORD PTR [rdx+-216] - mov r8, QWORD PTR [r10+-208] - mov QWORD PTR [r10+-216], rax - sbb r8, QWORD PTR [rdx+-208] - mov rax, QWORD PTR [r10+-200] - mov QWORD PTR [r10+-208], r8 - sbb rax, QWORD PTR [rdx+-200] mov r8, QWORD PTR [r10+-192] - mov QWORD PTR [r10+-200], rax - sbb r8, QWORD PTR [rdx+-192] + sub r8, QWORD PTR [rdx+-192] mov rax, QWORD PTR [r10+-184] mov QWORD PTR [r10+-192], r8 sbb rax, QWORD PTR [rdx+-184] @@ -44548,59 +23309,11 @@ ENDIF mov rax, QWORD PTR [r10+184] mov QWORD PTR [r10+176], r8 sbb rax, QWORD PTR [rdx+184] - mov r8, QWORD PTR [r10+192] mov QWORD PTR [r10+184], rax - sbb r8, QWORD PTR [rdx+192] - mov rax, QWORD PTR [r10+200] - mov QWORD PTR [r10+192], r8 - sbb rax, QWORD PTR [rdx+200] - mov r8, QWORD PTR [r10+208] - mov QWORD PTR [r10+200], rax - sbb r8, QWORD PTR [rdx+208] - mov rax, QWORD PTR [r10+216] - mov QWORD PTR [r10+208], r8 - sbb rax, QWORD PTR [rdx+216] - mov r8, QWORD PTR [r10+224] - mov QWORD PTR [r10+216], rax - sbb r8, QWORD PTR [rdx+224] - mov rax, QWORD PTR [r10+232] - mov QWORD PTR [r10+224], r8 - sbb rax, QWORD PTR [rdx+232] - mov r8, QWORD PTR [r10+240] - mov QWORD PTR [r10+232], rax - sbb r8, QWORD PTR [rdx+240] - mov rax, QWORD PTR [r10+248] - mov QWORD PTR [r10+240], r8 - sbb rax, QWORD PTR [rdx+248] - mov QWORD PTR [r10+248], rax sbb r9, 0 - sub rdx, 512 - mov r8, QWORD PTR [r10+-256] - sub r8, QWORD PTR [rdx+-256] - mov rax, QWORD PTR [r10+-248] - mov QWORD PTR [r10+-256], r8 - sbb rax, QWORD PTR [rdx+-248] - mov r8, QWORD PTR [r10+-240] - mov QWORD PTR [r10+-248], rax - sbb r8, QWORD PTR [rdx+-240] - mov rax, QWORD PTR [r10+-232] - mov QWORD PTR [r10+-240], r8 - sbb rax, QWORD PTR [rdx+-232] - mov r8, QWORD PTR [r10+-224] - mov QWORD PTR [r10+-232], rax - sbb r8, QWORD PTR [rdx+-224] - mov rax, QWORD PTR [r10+-216] - mov QWORD PTR [r10+-224], r8 - sbb rax, QWORD PTR [rdx+-216] - mov r8, QWORD PTR [r10+-208] - mov QWORD PTR [r10+-216], rax - sbb r8, QWORD PTR [rdx+-208] - mov rax, QWORD PTR [r10+-200] - mov QWORD PTR [r10+-208], r8 - sbb rax, QWORD PTR [rdx+-200] + sub rdx, 384 mov r8, QWORD PTR [r10+-192] - mov QWORD PTR [r10+-200], rax - sbb r8, QWORD PTR [rdx+-192] + sub r8, QWORD PTR [rdx+-192] mov rax, QWORD PTR [r10+-184] mov QWORD PTR [r10+-192], r8 sbb rax, QWORD PTR [rdx+-184] @@ -44742,61 +23455,13 @@ ENDIF mov rax, QWORD PTR [r10+184] mov QWORD PTR [r10+176], r8 sbb rax, QWORD PTR [rdx+184] - mov r8, QWORD PTR [r10+192] mov QWORD PTR [r10+184], rax - sbb r8, QWORD PTR [rdx+192] - mov rax, QWORD PTR [r10+200] - mov QWORD PTR [r10+192], r8 - sbb rax, QWORD PTR [rdx+200] - mov r8, QWORD PTR [r10+208] - mov QWORD PTR [r10+200], rax - sbb r8, QWORD PTR [rdx+208] - mov rax, QWORD PTR [r10+216] - mov QWORD PTR [r10+208], r8 - sbb rax, QWORD PTR [rdx+216] - mov r8, QWORD PTR [r10+224] - mov QWORD PTR [r10+216], rax - sbb r8, QWORD PTR [rdx+224] - mov rax, QWORD PTR [r10+232] - mov QWORD PTR [r10+224], r8 - sbb rax, QWORD PTR [rdx+232] - mov r8, QWORD PTR [r10+240] - mov QWORD PTR [r10+232], rax - sbb r8, QWORD PTR [rdx+240] - mov rax, QWORD PTR [r10+248] - mov QWORD PTR [r10+240], r8 - sbb rax, QWORD PTR [rdx+248] - mov QWORD PTR [r10+248], rax sbb r9, 0 - mov rcx, QWORD PTR [rsp+512] + mov rcx, QWORD PTR [rsp+384] neg r9 - add rcx, 512 - mov r8, QWORD PTR [rcx+-256] - sub r8, QWORD PTR [r10+-256] - mov rax, QWORD PTR [rcx+-248] - mov QWORD PTR [rcx+-256], r8 - sbb rax, QWORD PTR [r10+-248] - mov r8, QWORD PTR [rcx+-240] - mov QWORD PTR [rcx+-248], rax - sbb r8, QWORD PTR [r10+-240] - mov rax, QWORD PTR [rcx+-232] - mov QWORD PTR [rcx+-240], r8 - sbb rax, QWORD PTR [r10+-232] - mov r8, QWORD PTR [rcx+-224] - mov QWORD PTR [rcx+-232], rax - sbb r8, QWORD PTR [r10+-224] - mov rax, QWORD PTR [rcx+-216] - mov QWORD PTR [rcx+-224], r8 - sbb rax, QWORD PTR [r10+-216] - mov r8, QWORD PTR [rcx+-208] - mov QWORD PTR [rcx+-216], rax - sbb r8, QWORD PTR [r10+-208] - mov rax, QWORD PTR [rcx+-200] - mov QWORD PTR [rcx+-208], r8 - sbb rax, QWORD PTR [r10+-200] + add rcx, 384 mov r8, QWORD PTR [rcx+-192] - mov QWORD PTR [rcx+-200], rax - sbb r8, QWORD PTR [r10+-192] + sub r8, QWORD PTR [r10+-192] mov rax, QWORD PTR [rcx+-184] mov QWORD PTR [rcx+-192], r8 sbb rax, QWORD PTR [r10+-184] @@ -44938,34 +23603,10 @@ ENDIF mov rax, QWORD PTR [rcx+184] mov QWORD PTR [rcx+176], r8 sbb rax, QWORD PTR [r10+184] - mov r8, QWORD PTR [rcx+192] mov QWORD PTR [rcx+184], rax - sbb r8, QWORD PTR [r10+192] - mov rax, QWORD PTR [rcx+200] - mov QWORD PTR [rcx+192], r8 - sbb rax, QWORD PTR [r10+200] - mov r8, QWORD PTR [rcx+208] - mov QWORD PTR [rcx+200], rax - sbb r8, QWORD PTR [r10+208] - mov rax, QWORD PTR [rcx+216] - mov QWORD PTR [rcx+208], r8 - sbb rax, QWORD PTR [r10+216] - mov r8, QWORD PTR [rcx+224] - mov QWORD PTR [rcx+216], rax - sbb r8, QWORD PTR [r10+224] - mov rax, QWORD PTR [rcx+232] - mov QWORD PTR [rcx+224], r8 - sbb rax, QWORD PTR [r10+232] - mov r8, QWORD PTR [rcx+240] - mov QWORD PTR [rcx+232], rax - sbb r8, QWORD PTR [r10+240] - mov rax, QWORD PTR [rcx+248] - mov QWORD PTR [rcx+240], r8 - sbb rax, QWORD PTR [r10+248] - mov QWORD PTR [rcx+248], rax sbb r9, 0 - mov rcx, QWORD PTR [rsp+512] - add rcx, 768 + mov rcx, QWORD PTR [rsp+384] + add rcx, 576 ; Add in word mov r8, QWORD PTR [rcx] add r8, r9 @@ -45038,36 +23679,12 @@ ENDIF mov rax, QWORD PTR [rcx+184] mov QWORD PTR [rcx+176], r8 adc rax, 0 - mov r8, QWORD PTR [rcx+192] mov QWORD PTR [rcx+184], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+200] - mov QWORD PTR [rcx+192], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+208] - mov QWORD PTR [rcx+200], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+216] - mov QWORD PTR [rcx+208], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+224] - mov QWORD PTR [rcx+216], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+232] - mov QWORD PTR [rcx+224], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+240] - mov QWORD PTR [rcx+232], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+248] - mov QWORD PTR [rcx+240], r8 - adc rax, 0 - mov QWORD PTR [rcx+248], rax - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] - add rsp, 528 + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] + add rsp, 400 ret -sp_4096_sqr_64 ENDP +sp_3072_sqr_48 ENDP _TEXT ENDS IFDEF HAVE_INTEL_AVX2 ; /* Square a and put result in r. (r = a * a) @@ -45078,13 +23695,13 @@ IFDEF HAVE_INTEL_AVX2 ; * a A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_sqr_avx2_64 PROC - sub rsp, 528 - mov QWORD PTR [rsp+512], rcx - mov QWORD PTR [rsp+520], rdx +sp_3072_sqr_avx2_48 PROC + sub rsp, 400 + mov QWORD PTR [rsp+384], rcx + mov QWORD PTR [rsp+392], rdx mov r9, 0 mov r10, rsp - lea r11, QWORD PTR [rdx+256] + lea r11, QWORD PTR [rdx+192] mov rax, QWORD PTR [rdx] sub rax, QWORD PTR [r11] mov r8, QWORD PTR [rdx+8] @@ -45156,31 +23773,7 @@ sp_4096_sqr_avx2_64 PROC mov r8, QWORD PTR [rdx+184] mov QWORD PTR [r10+176], rax sbb r8, QWORD PTR [r11+184] - mov rax, QWORD PTR [rdx+192] mov QWORD PTR [r10+184], r8 - sbb rax, QWORD PTR [r11+192] - mov r8, QWORD PTR [rdx+200] - mov QWORD PTR [r10+192], rax - sbb r8, QWORD PTR [r11+200] - mov rax, QWORD PTR [rdx+208] - mov QWORD PTR [r10+200], r8 - sbb rax, QWORD PTR [r11+208] - mov r8, QWORD PTR [rdx+216] - mov QWORD PTR [r10+208], rax - sbb r8, QWORD PTR [r11+216] - mov rax, QWORD PTR [rdx+224] - mov QWORD PTR [r10+216], r8 - sbb rax, QWORD PTR [r11+224] - mov r8, QWORD PTR [rdx+232] - mov QWORD PTR [r10+224], rax - sbb r8, QWORD PTR [r11+232] - mov rax, QWORD PTR [rdx+240] - mov QWORD PTR [r10+232], r8 - sbb rax, QWORD PTR [r11+240] - mov r8, QWORD PTR [rdx+248] - mov QWORD PTR [r10+240], rax - sbb r8, QWORD PTR [r11+248] - mov QWORD PTR [r10+248], r8 sbb r9, 0 ; Cond Negate mov rax, QWORD PTR [r10] @@ -45303,92 +23896,28 @@ sp_4096_sqr_avx2_64 PROC mov QWORD PTR [r10+176], rax xor r8, r9 add r8, r11 - mov rax, QWORD PTR [r10+192] - setc r11b mov QWORD PTR [r10+184], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+200] - setc r11b - mov QWORD PTR [r10+192], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+208] - setc r11b - mov QWORD PTR [r10+200], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+216] - setc r11b - mov QWORD PTR [r10+208], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+224] - setc r11b - mov QWORD PTR [r10+216], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+232] - setc r11b - mov QWORD PTR [r10+224], rax - xor r8, r9 - add r8, r11 - mov rax, QWORD PTR [r10+240] - setc r11b - mov QWORD PTR [r10+232], r8 - xor rax, r9 - add rax, r11 - mov r8, QWORD PTR [r10+248] - setc r11b - mov QWORD PTR [r10+240], rax - xor r8, r9 - add r8, r11 - mov QWORD PTR [r10+248], r8 mov rdx, r10 mov rcx, rsp - call sp_2048_sqr_avx2_32 - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] - add rdx, 256 - add rcx, 512 - call sp_2048_sqr_avx2_32 - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] - call sp_2048_sqr_avx2_32 + call sp_3072_sqr_avx2_24 + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] + add rdx, 192 + add rcx, 384 + call sp_3072_sqr_avx2_24 + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] + call sp_3072_sqr_avx2_24 IFDEF _WIN64 - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] ENDIF - mov rdx, QWORD PTR [rsp+512] - lea r10, QWORD PTR [rsp+256] - add rdx, 768 + mov rdx, QWORD PTR [rsp+384] + lea r10, QWORD PTR [rsp+192] + add rdx, 576 mov r9, 0 - mov r8, QWORD PTR [r10+-256] - sub r8, QWORD PTR [rdx+-256] - mov rax, QWORD PTR [r10+-248] - mov QWORD PTR [r10+-256], r8 - sbb rax, QWORD PTR [rdx+-248] - mov r8, QWORD PTR [r10+-240] - mov QWORD PTR [r10+-248], rax - sbb r8, QWORD PTR [rdx+-240] - mov rax, QWORD PTR [r10+-232] - mov QWORD PTR [r10+-240], r8 - sbb rax, QWORD PTR [rdx+-232] - mov r8, QWORD PTR [r10+-224] - mov QWORD PTR [r10+-232], rax - sbb r8, QWORD PTR [rdx+-224] - mov rax, QWORD PTR [r10+-216] - mov QWORD PTR [r10+-224], r8 - sbb rax, QWORD PTR [rdx+-216] - mov r8, QWORD PTR [r10+-208] - mov QWORD PTR [r10+-216], rax - sbb r8, QWORD PTR [rdx+-208] - mov rax, QWORD PTR [r10+-200] - mov QWORD PTR [r10+-208], r8 - sbb rax, QWORD PTR [rdx+-200] mov r8, QWORD PTR [r10+-192] - mov QWORD PTR [r10+-200], rax - sbb r8, QWORD PTR [rdx+-192] + sub r8, QWORD PTR [rdx+-192] mov rax, QWORD PTR [r10+-184] mov QWORD PTR [r10+-192], r8 sbb rax, QWORD PTR [rdx+-184] @@ -45515,74 +24044,26 @@ ENDIF mov r8, QWORD PTR [r10+144] mov QWORD PTR [r10+136], rax sbb r8, QWORD PTR [rdx+144] - mov rax, QWORD PTR [r10+152] - mov QWORD PTR [r10+144], r8 - sbb rax, QWORD PTR [rdx+152] - mov r8, QWORD PTR [r10+160] - mov QWORD PTR [r10+152], rax - sbb r8, QWORD PTR [rdx+160] - mov rax, QWORD PTR [r10+168] - mov QWORD PTR [r10+160], r8 - sbb rax, QWORD PTR [rdx+168] - mov r8, QWORD PTR [r10+176] - mov QWORD PTR [r10+168], rax - sbb r8, QWORD PTR [rdx+176] - mov rax, QWORD PTR [r10+184] - mov QWORD PTR [r10+176], r8 - sbb rax, QWORD PTR [rdx+184] - mov r8, QWORD PTR [r10+192] - mov QWORD PTR [r10+184], rax - sbb r8, QWORD PTR [rdx+192] - mov rax, QWORD PTR [r10+200] - mov QWORD PTR [r10+192], r8 - sbb rax, QWORD PTR [rdx+200] - mov r8, QWORD PTR [r10+208] - mov QWORD PTR [r10+200], rax - sbb r8, QWORD PTR [rdx+208] - mov rax, QWORD PTR [r10+216] - mov QWORD PTR [r10+208], r8 - sbb rax, QWORD PTR [rdx+216] - mov r8, QWORD PTR [r10+224] - mov QWORD PTR [r10+216], rax - sbb r8, QWORD PTR [rdx+224] - mov rax, QWORD PTR [r10+232] - mov QWORD PTR [r10+224], r8 - sbb rax, QWORD PTR [rdx+232] - mov r8, QWORD PTR [r10+240] - mov QWORD PTR [r10+232], rax - sbb r8, QWORD PTR [rdx+240] - mov rax, QWORD PTR [r10+248] - mov QWORD PTR [r10+240], r8 - sbb rax, QWORD PTR [rdx+248] - mov QWORD PTR [r10+248], rax - sbb r9, 0 - sub rdx, 512 - mov r8, QWORD PTR [r10+-256] - sub r8, QWORD PTR [rdx+-256] - mov rax, QWORD PTR [r10+-248] - mov QWORD PTR [r10+-256], r8 - sbb rax, QWORD PTR [rdx+-248] - mov r8, QWORD PTR [r10+-240] - mov QWORD PTR [r10+-248], rax - sbb r8, QWORD PTR [rdx+-240] - mov rax, QWORD PTR [r10+-232] - mov QWORD PTR [r10+-240], r8 - sbb rax, QWORD PTR [rdx+-232] - mov r8, QWORD PTR [r10+-224] - mov QWORD PTR [r10+-232], rax - sbb r8, QWORD PTR [rdx+-224] - mov rax, QWORD PTR [r10+-216] - mov QWORD PTR [r10+-224], r8 - sbb rax, QWORD PTR [rdx+-216] - mov r8, QWORD PTR [r10+-208] - mov QWORD PTR [r10+-216], rax - sbb r8, QWORD PTR [rdx+-208] - mov rax, QWORD PTR [r10+-200] - mov QWORD PTR [r10+-208], r8 - sbb rax, QWORD PTR [rdx+-200] + mov rax, QWORD PTR [r10+152] + mov QWORD PTR [r10+144], r8 + sbb rax, QWORD PTR [rdx+152] + mov r8, QWORD PTR [r10+160] + mov QWORD PTR [r10+152], rax + sbb r8, QWORD PTR [rdx+160] + mov rax, QWORD PTR [r10+168] + mov QWORD PTR [r10+160], r8 + sbb rax, QWORD PTR [rdx+168] + mov r8, QWORD PTR [r10+176] + mov QWORD PTR [r10+168], rax + sbb r8, QWORD PTR [rdx+176] + mov rax, QWORD PTR [r10+184] + mov QWORD PTR [r10+176], r8 + sbb rax, QWORD PTR [rdx+184] + mov QWORD PTR [r10+184], rax + sbb r9, 0 + sub rdx, 384 mov r8, QWORD PTR [r10+-192] - mov QWORD PTR [r10+-200], rax - sbb r8, QWORD PTR [rdx+-192] + sub r8, QWORD PTR [rdx+-192] mov rax, QWORD PTR [r10+-184] mov QWORD PTR [r10+-192], r8 sbb rax, QWORD PTR [rdx+-184] @@ -45724,61 +24205,13 @@ ENDIF mov rax, QWORD PTR [r10+184] mov QWORD PTR [r10+176], r8 sbb rax, QWORD PTR [rdx+184] - mov r8, QWORD PTR [r10+192] mov QWORD PTR [r10+184], rax - sbb r8, QWORD PTR [rdx+192] - mov rax, QWORD PTR [r10+200] - mov QWORD PTR [r10+192], r8 - sbb rax, QWORD PTR [rdx+200] - mov r8, QWORD PTR [r10+208] - mov QWORD PTR [r10+200], rax - sbb r8, QWORD PTR [rdx+208] - mov rax, QWORD PTR [r10+216] - mov QWORD PTR [r10+208], r8 - sbb rax, QWORD PTR [rdx+216] - mov r8, QWORD PTR [r10+224] - mov QWORD PTR [r10+216], rax - sbb r8, QWORD PTR [rdx+224] - mov rax, QWORD PTR [r10+232] - mov QWORD PTR [r10+224], r8 - sbb rax, QWORD PTR [rdx+232] - mov r8, QWORD PTR [r10+240] - mov QWORD PTR [r10+232], rax - sbb r8, QWORD PTR [rdx+240] - mov rax, QWORD PTR [r10+248] - mov QWORD PTR [r10+240], r8 - sbb rax, QWORD PTR [rdx+248] - mov QWORD PTR [r10+248], rax sbb r9, 0 - mov rcx, QWORD PTR [rsp+512] + mov rcx, QWORD PTR [rsp+384] neg r9 - add rcx, 512 - mov r8, QWORD PTR [rcx+-256] - sub r8, QWORD PTR [r10+-256] - mov rax, QWORD PTR [rcx+-248] - mov QWORD PTR [rcx+-256], r8 - sbb rax, QWORD PTR [r10+-248] - mov r8, QWORD PTR [rcx+-240] - mov QWORD PTR [rcx+-248], rax - sbb r8, QWORD PTR [r10+-240] - mov rax, QWORD PTR [rcx+-232] - mov QWORD PTR [rcx+-240], r8 - sbb rax, QWORD PTR [r10+-232] - mov r8, QWORD PTR [rcx+-224] - mov QWORD PTR [rcx+-232], rax - sbb r8, QWORD PTR [r10+-224] - mov rax, QWORD PTR [rcx+-216] - mov QWORD PTR [rcx+-224], r8 - sbb rax, QWORD PTR [r10+-216] - mov r8, QWORD PTR [rcx+-208] - mov QWORD PTR [rcx+-216], rax - sbb r8, QWORD PTR [r10+-208] - mov rax, QWORD PTR [rcx+-200] - mov QWORD PTR [rcx+-208], r8 - sbb rax, QWORD PTR [r10+-200] + add rcx, 384 mov r8, QWORD PTR [rcx+-192] - mov QWORD PTR [rcx+-200], rax - sbb r8, QWORD PTR [r10+-192] + sub r8, QWORD PTR [r10+-192] mov rax, QWORD PTR [rcx+-184] mov QWORD PTR [rcx+-192], r8 sbb rax, QWORD PTR [r10+-184] @@ -45920,34 +24353,10 @@ ENDIF mov rax, QWORD PTR [rcx+184] mov QWORD PTR [rcx+176], r8 sbb rax, QWORD PTR [r10+184] - mov r8, QWORD PTR [rcx+192] mov QWORD PTR [rcx+184], rax - sbb r8, QWORD PTR [r10+192] - mov rax, QWORD PTR [rcx+200] - mov QWORD PTR [rcx+192], r8 - sbb rax, QWORD PTR [r10+200] - mov r8, QWORD PTR [rcx+208] - mov QWORD PTR [rcx+200], rax - sbb r8, QWORD PTR [r10+208] - mov rax, QWORD PTR [rcx+216] - mov QWORD PTR [rcx+208], r8 - sbb rax, QWORD PTR [r10+216] - mov r8, QWORD PTR [rcx+224] - mov QWORD PTR [rcx+216], rax - sbb r8, QWORD PTR [r10+224] - mov rax, QWORD PTR [rcx+232] - mov QWORD PTR [rcx+224], r8 - sbb rax, QWORD PTR [r10+232] - mov r8, QWORD PTR [rcx+240] - mov QWORD PTR [rcx+232], rax - sbb r8, QWORD PTR [r10+240] - mov rax, QWORD PTR [rcx+248] - mov QWORD PTR [rcx+240], r8 - sbb rax, QWORD PTR [r10+248] - mov QWORD PTR [rcx+248], rax sbb r9, 0 - mov rcx, QWORD PTR [rsp+512] - add rcx, 768 + mov rcx, QWORD PTR [rsp+384] + add rcx, 576 ; Add in word mov r8, QWORD PTR [rcx] add r8, r9 @@ -46020,562 +24429,2848 @@ ENDIF mov rax, QWORD PTR [rcx+184] mov QWORD PTR [rcx+176], r8 adc rax, 0 - mov r8, QWORD PTR [rcx+192] mov QWORD PTR [rcx+184], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+200] - mov QWORD PTR [rcx+192], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+208] - mov QWORD PTR [rcx+200], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+216] - mov QWORD PTR [rcx+208], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+224] - mov QWORD PTR [rcx+216], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+232] - mov QWORD PTR [rcx+224], r8 - adc rax, 0 - mov r8, QWORD PTR [rcx+240] - mov QWORD PTR [rcx+232], rax - adc r8, 0 - mov rax, QWORD PTR [rcx+248] - mov QWORD PTR [rcx+240], r8 - adc rax, 0 - mov QWORD PTR [rcx+248], rax - mov rdx, QWORD PTR [rsp+520] - mov rcx, QWORD PTR [rsp+512] - add rsp, 528 + mov rdx, QWORD PTR [rsp+392] + mov rcx, QWORD PTR [rsp+384] + add rsp, 400 + ret +sp_3072_sqr_avx2_48 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mul_d_48 PROC + push r12 + mov r9, rdx + ; A[0] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9] + mov r10, rax + mov r11, rdx + mov QWORD PTR [rcx], r10 + ; A[1] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+8] + add r11, rax + mov QWORD PTR [rcx+8], r11 + adc r12, rdx + adc r10, 0 + ; A[2] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+16] + add r12, rax + mov QWORD PTR [rcx+16], r12 + adc r10, rdx + adc r11, 0 + ; A[3] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+24] + add r10, rax + mov QWORD PTR [rcx+24], r10 + adc r11, rdx + adc r12, 0 + ; A[4] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+32] + add r11, rax + mov QWORD PTR [rcx+32], r11 + adc r12, rdx + adc r10, 0 + ; A[5] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+40] + add r12, rax + mov QWORD PTR [rcx+40], r12 + adc r10, rdx + adc r11, 0 + ; A[6] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+48] + add r10, rax + mov QWORD PTR [rcx+48], r10 + adc r11, rdx + adc r12, 0 + ; A[7] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+56] + add r11, rax + mov QWORD PTR [rcx+56], r11 + adc r12, rdx + adc r10, 0 + ; A[8] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+64] + add r12, rax + mov QWORD PTR [rcx+64], r12 + adc r10, rdx + adc r11, 0 + ; A[9] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+72] + add r10, rax + mov QWORD PTR [rcx+72], r10 + adc r11, rdx + adc r12, 0 + ; A[10] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+80] + add r11, rax + mov QWORD PTR [rcx+80], r11 + adc r12, rdx + adc r10, 0 + ; A[11] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+88] + add r12, rax + mov QWORD PTR [rcx+88], r12 + adc r10, rdx + adc r11, 0 + ; A[12] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+96] + add r10, rax + mov QWORD PTR [rcx+96], r10 + adc r11, rdx + adc r12, 0 + ; A[13] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+104] + add r11, rax + mov QWORD PTR [rcx+104], r11 + adc r12, rdx + adc r10, 0 + ; A[14] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+112] + add r12, rax + mov QWORD PTR [rcx+112], r12 + adc r10, rdx + adc r11, 0 + ; A[15] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+120] + add r10, rax + mov QWORD PTR [rcx+120], r10 + adc r11, rdx + adc r12, 0 + ; A[16] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+128] + add r11, rax + mov QWORD PTR [rcx+128], r11 + adc r12, rdx + adc r10, 0 + ; A[17] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+136] + add r12, rax + mov QWORD PTR [rcx+136], r12 + adc r10, rdx + adc r11, 0 + ; A[18] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+144] + add r10, rax + mov QWORD PTR [rcx+144], r10 + adc r11, rdx + adc r12, 0 + ; A[19] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+152] + add r11, rax + mov QWORD PTR [rcx+152], r11 + adc r12, rdx + adc r10, 0 + ; A[20] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+160] + add r12, rax + mov QWORD PTR [rcx+160], r12 + adc r10, rdx + adc r11, 0 + ; A[21] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+168] + add r10, rax + mov QWORD PTR [rcx+168], r10 + adc r11, rdx + adc r12, 0 + ; A[22] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+176] + add r11, rax + mov QWORD PTR [rcx+176], r11 + adc r12, rdx + adc r10, 0 + ; A[23] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+184] + add r12, rax + mov QWORD PTR [rcx+184], r12 + adc r10, rdx + adc r11, 0 + ; A[24] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+192] + add r10, rax + mov QWORD PTR [rcx+192], r10 + adc r11, rdx + adc r12, 0 + ; A[25] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+200] + add r11, rax + mov QWORD PTR [rcx+200], r11 + adc r12, rdx + adc r10, 0 + ; A[26] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+208] + add r12, rax + mov QWORD PTR [rcx+208], r12 + adc r10, rdx + adc r11, 0 + ; A[27] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+216] + add r10, rax + mov QWORD PTR [rcx+216], r10 + adc r11, rdx + adc r12, 0 + ; A[28] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+224] + add r11, rax + mov QWORD PTR [rcx+224], r11 + adc r12, rdx + adc r10, 0 + ; A[29] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+232] + add r12, rax + mov QWORD PTR [rcx+232], r12 + adc r10, rdx + adc r11, 0 + ; A[30] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+240] + add r10, rax + mov QWORD PTR [rcx+240], r10 + adc r11, rdx + adc r12, 0 + ; A[31] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+248] + add r11, rax + mov QWORD PTR [rcx+248], r11 + adc r12, rdx + adc r10, 0 + ; A[32] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+256] + add r12, rax + mov QWORD PTR [rcx+256], r12 + adc r10, rdx + adc r11, 0 + ; A[33] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+264] + add r10, rax + mov QWORD PTR [rcx+264], r10 + adc r11, rdx + adc r12, 0 + ; A[34] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+272] + add r11, rax + mov QWORD PTR [rcx+272], r11 + adc r12, rdx + adc r10, 0 + ; A[35] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+280] + add r12, rax + mov QWORD PTR [rcx+280], r12 + adc r10, rdx + adc r11, 0 + ; A[36] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+288] + add r10, rax + mov QWORD PTR [rcx+288], r10 + adc r11, rdx + adc r12, 0 + ; A[37] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+296] + add r11, rax + mov QWORD PTR [rcx+296], r11 + adc r12, rdx + adc r10, 0 + ; A[38] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+304] + add r12, rax + mov QWORD PTR [rcx+304], r12 + adc r10, rdx + adc r11, 0 + ; A[39] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+312] + add r10, rax + mov QWORD PTR [rcx+312], r10 + adc r11, rdx + adc r12, 0 + ; A[40] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+320] + add r11, rax + mov QWORD PTR [rcx+320], r11 + adc r12, rdx + adc r10, 0 + ; A[41] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+328] + add r12, rax + mov QWORD PTR [rcx+328], r12 + adc r10, rdx + adc r11, 0 + ; A[42] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+336] + add r10, rax + mov QWORD PTR [rcx+336], r10 + adc r11, rdx + adc r12, 0 + ; A[43] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+344] + add r11, rax + mov QWORD PTR [rcx+344], r11 + adc r12, rdx + adc r10, 0 + ; A[44] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+352] + add r12, rax + mov QWORD PTR [rcx+352], r12 + adc r10, rdx + adc r11, 0 + ; A[45] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+360] + add r10, rax + mov QWORD PTR [rcx+360], r10 + adc r11, rdx + adc r12, 0 + ; A[46] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+368] + add r11, rax + mov QWORD PTR [rcx+368], r11 + adc r12, rdx + adc r10, 0 + ; A[47] * B + mov rax, r8 + mul QWORD PTR [r9+376] + add r12, rax + adc r10, rdx + mov QWORD PTR [rcx+376], r12 + mov QWORD PTR [rcx+384], r10 + pop r12 + ret +sp_3072_mul_d_48 ENDP +_TEXT ENDS +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_cond_sub_24 PROC + sub rsp, 192 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp], r10 + mov QWORD PTR [rsp+8], r11 + mov r10, QWORD PTR [r8+16] + mov r11, QWORD PTR [r8+24] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+16], r10 + mov QWORD PTR [rsp+24], r11 + mov r10, QWORD PTR [r8+32] + mov r11, QWORD PTR [r8+40] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+32], r10 + mov QWORD PTR [rsp+40], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+48], r10 + mov QWORD PTR [rsp+56], r11 + mov r10, QWORD PTR [r8+64] + mov r11, QWORD PTR [r8+72] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+64], r10 + mov QWORD PTR [rsp+72], r11 + mov r10, QWORD PTR [r8+80] + mov r11, QWORD PTR [r8+88] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+80], r10 + mov QWORD PTR [rsp+88], r11 + mov r10, QWORD PTR [r8+96] + mov r11, QWORD PTR [r8+104] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+96], r10 + mov QWORD PTR [rsp+104], r11 + mov r10, QWORD PTR [r8+112] + mov r11, QWORD PTR [r8+120] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+112], r10 + mov QWORD PTR [rsp+120], r11 + mov r10, QWORD PTR [r8+128] + mov r11, QWORD PTR [r8+136] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+128], r10 + mov QWORD PTR [rsp+136], r11 + mov r10, QWORD PTR [r8+144] + mov r11, QWORD PTR [r8+152] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+144], r10 + mov QWORD PTR [rsp+152], r11 + mov r10, QWORD PTR [r8+160] + mov r11, QWORD PTR [r8+168] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+160], r10 + mov QWORD PTR [rsp+168], r11 + mov r10, QWORD PTR [r8+176] + mov r11, QWORD PTR [r8+184] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+176], r10 + mov QWORD PTR [rsp+184], r11 + mov r10, QWORD PTR [rdx] + mov r8, QWORD PTR [rsp] + sub r10, r8 + mov r11, QWORD PTR [rdx+8] + mov r8, QWORD PTR [rsp+8] + sbb r11, r8 + mov QWORD PTR [rcx], r10 + mov r10, QWORD PTR [rdx+16] + mov r8, QWORD PTR [rsp+16] + sbb r10, r8 + mov QWORD PTR [rcx+8], r11 + mov r11, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rsp+24] + sbb r11, r8 + mov QWORD PTR [rcx+16], r10 + mov r10, QWORD PTR [rdx+32] + mov r8, QWORD PTR [rsp+32] + sbb r10, r8 + mov QWORD PTR [rcx+24], r11 + mov r11, QWORD PTR [rdx+40] + mov r8, QWORD PTR [rsp+40] + sbb r11, r8 + mov QWORD PTR [rcx+32], r10 + mov r10, QWORD PTR [rdx+48] + mov r8, QWORD PTR [rsp+48] + sbb r10, r8 + mov QWORD PTR [rcx+40], r11 + mov r11, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rsp+56] + sbb r11, r8 + mov QWORD PTR [rcx+48], r10 + mov r10, QWORD PTR [rdx+64] + mov r8, QWORD PTR [rsp+64] + sbb r10, r8 + mov QWORD PTR [rcx+56], r11 + mov r11, QWORD PTR [rdx+72] + mov r8, QWORD PTR [rsp+72] + sbb r11, r8 + mov QWORD PTR [rcx+64], r10 + mov r10, QWORD PTR [rdx+80] + mov r8, QWORD PTR [rsp+80] + sbb r10, r8 + mov QWORD PTR [rcx+72], r11 + mov r11, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rsp+88] + sbb r11, r8 + mov QWORD PTR [rcx+80], r10 + mov r10, QWORD PTR [rdx+96] + mov r8, QWORD PTR [rsp+96] + sbb r10, r8 + mov QWORD PTR [rcx+88], r11 + mov r11, QWORD PTR [rdx+104] + mov r8, QWORD PTR [rsp+104] + sbb r11, r8 + mov QWORD PTR [rcx+96], r10 + mov r10, QWORD PTR [rdx+112] + mov r8, QWORD PTR [rsp+112] + sbb r10, r8 + mov QWORD PTR [rcx+104], r11 + mov r11, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rsp+120] + sbb r11, r8 + mov QWORD PTR [rcx+112], r10 + mov r10, QWORD PTR [rdx+128] + mov r8, QWORD PTR [rsp+128] + sbb r10, r8 + mov QWORD PTR [rcx+120], r11 + mov r11, QWORD PTR [rdx+136] + mov r8, QWORD PTR [rsp+136] + sbb r11, r8 + mov QWORD PTR [rcx+128], r10 + mov r10, QWORD PTR [rdx+144] + mov r8, QWORD PTR [rsp+144] + sbb r10, r8 + mov QWORD PTR [rcx+136], r11 + mov r11, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rsp+152] + sbb r11, r8 + mov QWORD PTR [rcx+144], r10 + mov r10, QWORD PTR [rdx+160] + mov r8, QWORD PTR [rsp+160] + sbb r10, r8 + mov QWORD PTR [rcx+152], r11 + mov r11, QWORD PTR [rdx+168] + mov r8, QWORD PTR [rsp+168] + sbb r11, r8 + mov QWORD PTR [rcx+160], r10 + mov r10, QWORD PTR [rdx+176] + mov r8, QWORD PTR [rsp+176] + sbb r10, r8 + mov QWORD PTR [rcx+168], r11 + mov r11, QWORD PTR [rdx+184] + mov r8, QWORD PTR [rsp+184] + sbb r11, r8 + mov QWORD PTR [rcx+176], r10 + mov QWORD PTR [rcx+184], r11 + sbb rax, rax + add rsp, 192 + ret +sp_3072_cond_sub_24 ENDP +_TEXT ENDS +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mont_reduce_24 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + mov r9, rdx + xor rsi, rsi + ; i = 24 + mov r10, 24 + mov r15, QWORD PTR [rcx] + mov rdi, QWORD PTR [rcx+8] +L_3072_mont_reduce_24_loop: + ; mu = a[i] * mp + mov r13, r15 + imul r13, r8 + ; a[i+0] += m[0] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9] + add r15, rax + adc r12, rdx + ; a[i+1] += m[1] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+8] + mov r15, rdi + add r15, rax + adc r11, rdx + add r15, r12 + adc r11, 0 + ; a[i+2] += m[2] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+16] + mov rdi, QWORD PTR [rcx+16] + add rdi, rax + adc r12, rdx + add rdi, r11 + adc r12, 0 + ; a[i+3] += m[3] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+24] + mov r14, QWORD PTR [rcx+24] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+24], r14 + adc r11, 0 + ; a[i+4] += m[4] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+32] + mov r14, QWORD PTR [rcx+32] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+32], r14 + adc r12, 0 + ; a[i+5] += m[5] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+40] + mov r14, QWORD PTR [rcx+40] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+40], r14 + adc r11, 0 + ; a[i+6] += m[6] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+48] + mov r14, QWORD PTR [rcx+48] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+48], r14 + adc r12, 0 + ; a[i+7] += m[7] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+56] + mov r14, QWORD PTR [rcx+56] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+56], r14 + adc r11, 0 + ; a[i+8] += m[8] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+64] + mov r14, QWORD PTR [rcx+64] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+64], r14 + adc r12, 0 + ; a[i+9] += m[9] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+72] + mov r14, QWORD PTR [rcx+72] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+72], r14 + adc r11, 0 + ; a[i+10] += m[10] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+80] + mov r14, QWORD PTR [rcx+80] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+80], r14 + adc r12, 0 + ; a[i+11] += m[11] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+88] + mov r14, QWORD PTR [rcx+88] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+88], r14 + adc r11, 0 + ; a[i+12] += m[12] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+96] + mov r14, QWORD PTR [rcx+96] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+96], r14 + adc r12, 0 + ; a[i+13] += m[13] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+104] + mov r14, QWORD PTR [rcx+104] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+104], r14 + adc r11, 0 + ; a[i+14] += m[14] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+112] + mov r14, QWORD PTR [rcx+112] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+112], r14 + adc r12, 0 + ; a[i+15] += m[15] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+120] + mov r14, QWORD PTR [rcx+120] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+120], r14 + adc r11, 0 + ; a[i+16] += m[16] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+128] + mov r14, QWORD PTR [rcx+128] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+128], r14 + adc r12, 0 + ; a[i+17] += m[17] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+136] + mov r14, QWORD PTR [rcx+136] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+136], r14 + adc r11, 0 + ; a[i+18] += m[18] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+144] + mov r14, QWORD PTR [rcx+144] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+144], r14 + adc r12, 0 + ; a[i+19] += m[19] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+152] + mov r14, QWORD PTR [rcx+152] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+152], r14 + adc r11, 0 + ; a[i+20] += m[20] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+160] + mov r14, QWORD PTR [rcx+160] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+160], r14 + adc r12, 0 + ; a[i+21] += m[21] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+168] + mov r14, QWORD PTR [rcx+168] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+168], r14 + adc r11, 0 + ; a[i+22] += m[22] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+176] + mov r14, QWORD PTR [rcx+176] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+176], r14 + adc r12, 0 + ; a[i+23] += m[23] * mu + mov rax, r13 + mul QWORD PTR [r9+184] + mov r14, QWORD PTR [rcx+184] + add r12, rax + adc rdx, rsi + mov rsi, 0 + adc rsi, 0 + add r14, r12 + mov QWORD PTR [rcx+184], r14 + adc QWORD PTR [rcx+192], rdx + adc rsi, 0 + ; i -= 1 + add rcx, 8 + dec r10 + jnz L_3072_mont_reduce_24_loop + mov QWORD PTR [rcx], r15 + mov QWORD PTR [rcx+8], rdi + neg rsi +IFDEF _WIN64 + mov r8, r9 + mov r9, rsi +ELSE + mov r9, rsi + mov r8, r9 +ENDIF + mov rdx, rcx + mov rcx, rcx + sub rcx, 192 + call sp_3072_cond_sub_24 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 ret -sp_4096_sqr_avx2_64 ENDP +sp_3072_mont_reduce_24 ENDP _TEXT ENDS -ENDIF -; /* Mul a by digit b into r. (r = a * b) +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 integer. -; * a A single precision integer. -; * b A single precision digit. +; * 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. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_mul_d_64 PROC - push r12 - mov r9, rdx - ; A[0] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9] - mov r10, rax - mov r11, rdx +sp_3072_cond_sub_avx2_24 PROC + push r12 + mov r12, QWORD PTR [r8] + mov r10, QWORD PTR [rdx] + pext r12, r12, r9 + sub r10, r12 + mov r12, QWORD PTR [r8+8] + mov r11, QWORD PTR [rdx+8] + pext r12, r12, r9 mov QWORD PTR [rcx], r10 - ; A[1] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+8] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+16] + mov r12, QWORD PTR [rdx+16] + pext r10, r10, r9 mov QWORD PTR [rcx+8], r11 - adc r12, rdx - adc r10, 0 - ; A[2] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+16] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+24] + mov r10, QWORD PTR [rdx+24] + pext r11, r11, r9 mov QWORD PTR [rcx+16], r12 - adc r10, rdx - adc r11, 0 - ; A[3] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+24] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+32] + mov r11, QWORD PTR [rdx+32] + pext r12, r12, r9 mov QWORD PTR [rcx+24], r10 - adc r11, rdx - adc r12, 0 - ; A[4] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+32] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+40] + mov r12, QWORD PTR [rdx+40] + pext r10, r10, r9 mov QWORD PTR [rcx+32], r11 - adc r12, rdx - adc r10, 0 - ; A[5] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+40] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+48] + pext r11, r11, r9 mov QWORD PTR [rcx+40], r12 - adc r10, rdx - adc r11, 0 - ; A[6] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+48] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+56] + mov r11, QWORD PTR [rdx+56] + pext r12, r12, r9 mov QWORD PTR [rcx+48], r10 - adc r11, rdx - adc r12, 0 - ; A[7] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+56] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+64] + mov r12, QWORD PTR [rdx+64] + pext r10, r10, r9 mov QWORD PTR [rcx+56], r11 - adc r12, rdx - adc r10, 0 - ; A[8] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+64] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+72] + mov r10, QWORD PTR [rdx+72] + pext r11, r11, r9 mov QWORD PTR [rcx+64], r12 - adc r10, rdx - adc r11, 0 - ; A[9] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+72] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+80] + mov r11, QWORD PTR [rdx+80] + pext r12, r12, r9 mov QWORD PTR [rcx+72], r10 - adc r11, rdx - adc r12, 0 - ; A[10] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+80] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+88] + mov r12, QWORD PTR [rdx+88] + pext r10, r10, r9 mov QWORD PTR [rcx+80], r11 - adc r12, rdx - adc r10, 0 - ; A[11] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+88] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+96] + pext r11, r11, r9 mov QWORD PTR [rcx+88], r12 - adc r10, rdx - adc r11, 0 - ; A[12] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+96] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+104] + mov r11, QWORD PTR [rdx+104] + pext r12, r12, r9 mov QWORD PTR [rcx+96], r10 - adc r11, rdx - adc r12, 0 - ; A[13] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+104] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+112] + mov r12, QWORD PTR [rdx+112] + pext r10, r10, r9 mov QWORD PTR [rcx+104], r11 - adc r12, rdx - adc r10, 0 - ; A[14] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+112] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+120] + mov r10, QWORD PTR [rdx+120] + pext r11, r11, r9 mov QWORD PTR [rcx+112], r12 - adc r10, rdx - adc r11, 0 - ; A[15] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+120] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+128] + mov r11, QWORD PTR [rdx+128] + pext r12, r12, r9 mov QWORD PTR [rcx+120], r10 - adc r11, rdx - adc r12, 0 - ; A[16] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+128] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+136] + mov r12, QWORD PTR [rdx+136] + pext r10, r10, r9 mov QWORD PTR [rcx+128], r11 - adc r12, rdx - adc r10, 0 - ; A[17] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+136] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+144] + mov r10, QWORD PTR [rdx+144] + pext r11, r11, r9 mov QWORD PTR [rcx+136], r12 - adc r10, rdx - adc r11, 0 - ; A[18] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+144] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+152] + mov r11, QWORD PTR [rdx+152] + pext r12, r12, r9 mov QWORD PTR [rcx+144], r10 - adc r11, rdx - adc r12, 0 - ; A[19] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+152] - add r11, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+160] + mov r12, QWORD PTR [rdx+160] + pext r10, r10, r9 mov QWORD PTR [rcx+152], r11 - adc r12, rdx - adc r10, 0 - ; A[20] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+160] - add r12, rax + sbb r12, r10 + mov r11, QWORD PTR [r8+168] + mov r10, QWORD PTR [rdx+168] + pext r11, r11, r9 mov QWORD PTR [rcx+160], r12 - adc r10, rdx - adc r11, 0 - ; A[21] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+168] - add r10, rax + sbb r10, r11 + mov r12, QWORD PTR [r8+176] + mov r11, QWORD PTR [rdx+176] + pext r12, r12, r9 mov QWORD PTR [rcx+168], r10 - adc r11, rdx - adc r12, 0 - ; A[22] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+176] - add r11, rax - mov QWORD PTR [rcx+176], r11 - adc r12, rdx - adc r10, 0 - ; A[23] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+184] - add r12, rax + sbb r11, r12 + mov r10, QWORD PTR [r8+184] + mov r12, QWORD PTR [rdx+184] + pext r10, r10, r9 + mov QWORD PTR [rcx+176], r11 + sbb r12, r10 mov QWORD PTR [rcx+184], r12 - adc r10, rdx - adc r11, 0 - ; A[24] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+192] - add r10, rax - mov QWORD PTR [rcx+192], r10 - adc r11, rdx - adc r12, 0 - ; A[25] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+200] - add r11, rax - mov QWORD PTR [rcx+200], r11 - adc r12, rdx - adc r10, 0 - ; A[26] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+208] - add r12, rax - mov QWORD PTR [rcx+208], r12 - adc r10, rdx - adc r11, 0 - ; A[27] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+216] - add r10, rax - mov QWORD PTR [rcx+216], r10 - adc r11, rdx - adc r12, 0 - ; A[28] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+224] - add r11, rax - mov QWORD PTR [rcx+224], r11 - adc r12, rdx - adc r10, 0 - ; A[29] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+232] - add r12, rax - mov QWORD PTR [rcx+232], r12 - adc r10, rdx - adc r11, 0 - ; A[30] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+240] - add r10, rax - mov QWORD PTR [rcx+240], r10 - adc r11, rdx - adc r12, 0 - ; A[31] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+248] - add r11, rax - mov QWORD PTR [rcx+248], r11 - adc r12, rdx - adc r10, 0 - ; A[32] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+256] - add r12, rax - mov QWORD PTR [rcx+256], r12 - adc r10, rdx - adc r11, 0 - ; A[33] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+264] - add r10, rax - mov QWORD PTR [rcx+264], r10 - adc r11, rdx - adc r12, 0 - ; A[34] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+272] - add r11, rax - mov QWORD PTR [rcx+272], r11 - adc r12, rdx - adc r10, 0 - ; A[35] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+280] - add r12, rax - mov QWORD PTR [rcx+280], r12 - adc r10, rdx - adc r11, 0 - ; A[36] * B - mov rax, r8 - xor r12, r12 - mul QWORD PTR [r9+288] - add r10, rax - mov QWORD PTR [rcx+288], r10 - adc r11, rdx - adc r12, 0 - ; A[37] * B - mov rax, r8 - xor r10, r10 - mul QWORD PTR [r9+296] - add r11, rax - mov QWORD PTR [rcx+296], r11 - adc r12, rdx - adc r10, 0 - ; A[38] * B - mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+304] - add r12, rax - mov QWORD PTR [rcx+304], r12 - adc r10, rdx - adc r11, 0 - ; A[39] * B + sbb rax, rax + pop r12 + ret +sp_3072_cond_sub_avx2_24 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mul_d_24 PROC + push r12 + mov r9, rdx + ; A[0] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+312] - add r10, rax - mov QWORD PTR [rcx+312], r10 - adc r11, rdx - adc r12, 0 - ; A[40] * B + mul QWORD PTR [r9] + mov r10, rax + mov r11, rdx + mov QWORD PTR [rcx], r10 + ; A[1] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+320] + mul QWORD PTR [r9+8] add r11, rax - mov QWORD PTR [rcx+320], r11 + mov QWORD PTR [rcx+8], r11 adc r12, rdx adc r10, 0 - ; A[41] * B + ; A[2] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+328] + mul QWORD PTR [r9+16] add r12, rax - mov QWORD PTR [rcx+328], r12 + mov QWORD PTR [rcx+16], r12 adc r10, rdx adc r11, 0 - ; A[42] * B + ; A[3] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+336] + mul QWORD PTR [r9+24] add r10, rax - mov QWORD PTR [rcx+336], r10 + mov QWORD PTR [rcx+24], r10 adc r11, rdx adc r12, 0 - ; A[43] * B + ; A[4] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+344] + mul QWORD PTR [r9+32] add r11, rax - mov QWORD PTR [rcx+344], r11 + mov QWORD PTR [rcx+32], r11 adc r12, rdx adc r10, 0 - ; A[44] * B + ; A[5] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+352] + mul QWORD PTR [r9+40] add r12, rax - mov QWORD PTR [rcx+352], r12 + mov QWORD PTR [rcx+40], r12 adc r10, rdx adc r11, 0 - ; A[45] * B + ; A[6] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+360] + mul QWORD PTR [r9+48] add r10, rax - mov QWORD PTR [rcx+360], r10 + mov QWORD PTR [rcx+48], r10 adc r11, rdx adc r12, 0 - ; A[46] * B + ; A[7] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+368] + mul QWORD PTR [r9+56] add r11, rax - mov QWORD PTR [rcx+368], r11 + mov QWORD PTR [rcx+56], r11 adc r12, rdx adc r10, 0 - ; A[47] * B + ; A[8] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+376] + mul QWORD PTR [r9+64] add r12, rax - mov QWORD PTR [rcx+376], r12 + mov QWORD PTR [rcx+64], r12 adc r10, rdx adc r11, 0 - ; A[48] * B + ; A[9] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+384] + mul QWORD PTR [r9+72] add r10, rax - mov QWORD PTR [rcx+384], r10 + mov QWORD PTR [rcx+72], r10 adc r11, rdx adc r12, 0 - ; A[49] * B + ; A[10] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+392] + mul QWORD PTR [r9+80] add r11, rax - mov QWORD PTR [rcx+392], r11 + mov QWORD PTR [rcx+80], r11 adc r12, rdx adc r10, 0 - ; A[50] * B + ; A[11] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+400] + mul QWORD PTR [r9+88] add r12, rax - mov QWORD PTR [rcx+400], r12 + mov QWORD PTR [rcx+88], r12 adc r10, rdx adc r11, 0 - ; A[51] * B + ; A[12] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+408] + mul QWORD PTR [r9+96] add r10, rax - mov QWORD PTR [rcx+408], r10 + mov QWORD PTR [rcx+96], r10 adc r11, rdx adc r12, 0 - ; A[52] * B + ; A[13] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+416] + mul QWORD PTR [r9+104] add r11, rax - mov QWORD PTR [rcx+416], r11 + mov QWORD PTR [rcx+104], r11 adc r12, rdx adc r10, 0 - ; A[53] * B + ; A[14] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+424] + mul QWORD PTR [r9+112] add r12, rax - mov QWORD PTR [rcx+424], r12 + mov QWORD PTR [rcx+112], r12 adc r10, rdx adc r11, 0 - ; A[54] * B + ; A[15] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+432] + mul QWORD PTR [r9+120] add r10, rax - mov QWORD PTR [rcx+432], r10 + mov QWORD PTR [rcx+120], r10 adc r11, rdx adc r12, 0 - ; A[55] * B + ; A[16] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+440] + mul QWORD PTR [r9+128] add r11, rax - mov QWORD PTR [rcx+440], r11 + mov QWORD PTR [rcx+128], r11 adc r12, rdx adc r10, 0 - ; A[56] * B + ; A[17] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+448] + mul QWORD PTR [r9+136] add r12, rax - mov QWORD PTR [rcx+448], r12 + mov QWORD PTR [rcx+136], r12 adc r10, rdx adc r11, 0 - ; A[57] * B + ; A[18] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+456] + mul QWORD PTR [r9+144] add r10, rax - mov QWORD PTR [rcx+456], r10 + mov QWORD PTR [rcx+144], r10 adc r11, rdx adc r12, 0 - ; A[58] * B + ; A[19] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+464] + mul QWORD PTR [r9+152] add r11, rax - mov QWORD PTR [rcx+464], r11 + mov QWORD PTR [rcx+152], r11 adc r12, rdx adc r10, 0 - ; A[59] * B + ; A[20] * B mov rax, r8 xor r11, r11 - mul QWORD PTR [r9+472] + mul QWORD PTR [r9+160] add r12, rax - mov QWORD PTR [rcx+472], r12 + mov QWORD PTR [rcx+160], r12 adc r10, rdx adc r11, 0 - ; A[60] * B + ; A[21] * B mov rax, r8 xor r12, r12 - mul QWORD PTR [r9+480] + mul QWORD PTR [r9+168] add r10, rax - mov QWORD PTR [rcx+480], r10 + mov QWORD PTR [rcx+168], r10 adc r11, rdx adc r12, 0 - ; A[61] * B + ; A[22] * B mov rax, r8 xor r10, r10 - mul QWORD PTR [r9+488] + mul QWORD PTR [r9+176] add r11, rax - mov QWORD PTR [rcx+488], r11 + mov QWORD PTR [rcx+176], r11 adc r12, rdx adc r10, 0 - ; A[62] * B + ; A[23] * B mov rax, r8 - xor r11, r11 - mul QWORD PTR [r9+496] + mul QWORD PTR [r9+184] add r12, rax - mov QWORD PTR [rcx+496], r12 adc r10, rdx - adc r11, 0 - ; A[63] * B - mov rax, r8 - mul QWORD PTR [r9+504] - add r10, rax - adc r11, rdx - mov QWORD PTR [rcx+504], r10 - mov QWORD PTR [rcx+512], r11 + mov QWORD PTR [rcx+184], r12 + mov QWORD PTR [rcx+192], r10 + pop r12 + ret +sp_3072_mul_d_24 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mul_d_avx2_24 PROC + push r12 + push r13 + mov rax, rdx + ; A[0] * B + mov rdx, r8 + xor r13, r13 + mulx r12, r11, QWORD PTR [rax] + mov QWORD PTR [rcx], r11 + ; A[1] * B + mulx r10, r9, QWORD PTR [rax+8] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+8], r12 + ; A[2] * B + mulx r10, r9, QWORD PTR [rax+16] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+16], r11 + ; A[3] * B + mulx r10, r9, QWORD PTR [rax+24] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+24], r12 + ; A[4] * B + mulx r10, r9, QWORD PTR [rax+32] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+32], r11 + ; A[5] * B + mulx r10, r9, QWORD PTR [rax+40] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+40], r12 + ; A[6] * B + mulx r10, r9, QWORD PTR [rax+48] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+48], r11 + ; A[7] * B + mulx r10, r9, QWORD PTR [rax+56] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+56], r12 + ; A[8] * B + mulx r10, r9, QWORD PTR [rax+64] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+64], r11 + ; A[9] * B + mulx r10, r9, QWORD PTR [rax+72] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+72], r12 + ; A[10] * B + mulx r10, r9, QWORD PTR [rax+80] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+80], r11 + ; A[11] * B + mulx r10, r9, QWORD PTR [rax+88] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+88], r12 + ; A[12] * B + mulx r10, r9, QWORD PTR [rax+96] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+96], r11 + ; A[13] * B + mulx r10, r9, QWORD PTR [rax+104] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+104], r12 + ; A[14] * B + mulx r10, r9, QWORD PTR [rax+112] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+112], r11 + ; A[15] * B + mulx r10, r9, QWORD PTR [rax+120] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+120], r12 + ; A[16] * B + mulx r10, r9, QWORD PTR [rax+128] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+128], r11 + ; A[17] * B + mulx r10, r9, QWORD PTR [rax+136] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+136], r12 + ; A[18] * B + mulx r10, r9, QWORD PTR [rax+144] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+144], r11 + ; A[19] * B + mulx r10, r9, QWORD PTR [rax+152] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+152], r12 + ; A[20] * B + mulx r10, r9, QWORD PTR [rax+160] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+160], r11 + ; A[21] * B + mulx r10, r9, QWORD PTR [rax+168] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+168], r12 + ; A[22] * B + mulx r10, r9, QWORD PTR [rax+176] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+176], r11 + ; A[23] * B + mulx r10, r9, QWORD PTR [rax+184] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + adcx r11, r13 + mov QWORD PTR [rcx+184], r12 + mov QWORD PTR [rcx+192], r11 + pop r13 + pop r12 + ret +sp_3072_mul_d_avx2_24 ENDP +_TEXT ENDS +ENDIF +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. +; */ +_TEXT SEGMENT READONLY PARA +div_3072_word_asm_24 PROC + mov r9, rdx + mov rax, r9 + mov rdx, rcx + div r8 + ret +div_3072_word_asm_24 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_cmp_24 PROC + push r12 + xor r9, r9 + mov r8, -1 + mov rax, -1 + mov r10, 1 + mov r11, QWORD PTR [rcx+184] + mov r12, QWORD PTR [rdx+184] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+176] + mov r12, QWORD PTR [rdx+176] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+168] + mov r12, QWORD PTR [rdx+168] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+160] + mov r12, QWORD PTR [rdx+160] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+152] + mov r12, QWORD PTR [rdx+152] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+144] + mov r12, QWORD PTR [rdx+144] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+136] + mov r12, QWORD PTR [rdx+136] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+128] + mov r12, QWORD PTR [rdx+128] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+120] + mov r12, QWORD PTR [rdx+120] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+112] + mov r12, QWORD PTR [rdx+112] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+104] + mov r12, QWORD PTR [rdx+104] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+96] + mov r12, QWORD PTR [rdx+96] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+88] + mov r12, QWORD PTR [rdx+88] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+80] + mov r12, QWORD PTR [rdx+80] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+72] + mov r12, QWORD PTR [rdx+72] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+64] + mov r12, QWORD PTR [rdx+64] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+56] + mov r12, QWORD PTR [rdx+56] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+48] + mov r12, QWORD PTR [rdx+48] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+40] + mov r12, QWORD PTR [rdx+40] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+32] + mov r12, QWORD PTR [rdx+32] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+24] + mov r12, QWORD PTR [rdx+24] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+16] + mov r12, QWORD PTR [rdx+16] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+8] + mov r12, QWORD PTR [rdx+8] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx] + mov r12, QWORD PTR [rdx] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + xor rax, r8 + pop r12 + ret +sp_3072_cmp_24 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mont_reduce_avx2_24 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + push rbx + push rbp + mov r9, rcx + mov r10, rdx + xor rbp, rbp + ; i = 24 + mov r11, 24 + mov r14, QWORD PTR [r9] + mov r15, QWORD PTR [r9+8] + mov rdi, QWORD PTR [r9+16] + mov rsi, QWORD PTR [r9+24] + add r9, 96 + xor rbp, rbp +L_3072_mont_reduce_avx2_24_loop: + ; mu = a[i] * mp + mov rdx, r14 + mov r12, r14 + imul rdx, r8 + xor rbx, rbx + ; a[i+0] += m[0] * mu + mulx rcx, rax, QWORD PTR [r10] + mov r14, r15 + adcx r12, rax + adox r14, rcx + ; a[i+1] += m[1] * mu + mulx rcx, rax, QWORD PTR [r10+8] + mov r15, rdi + adcx r14, rax + adox r15, rcx + ; a[i+2] += m[2] * mu + mulx rcx, rax, QWORD PTR [r10+16] + mov rdi, rsi + adcx r15, rax + adox rdi, rcx + ; a[i+3] += m[3] * mu + mulx rcx, rax, QWORD PTR [r10+24] + mov rsi, QWORD PTR [r9+-64] + adcx rdi, rax + adox rsi, rcx + ; a[i+4] += m[4] * mu + mulx rcx, rax, QWORD PTR [r10+32] + mov r13, QWORD PTR [r9+-56] + adcx rsi, rax + adox r13, rcx + ; a[i+5] += m[5] * mu + mulx rcx, rax, QWORD PTR [r10+40] + mov r12, QWORD PTR [r9+-48] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-56], r13 + ; a[i+6] += m[6] * mu + mulx rcx, rax, QWORD PTR [r10+48] + mov r13, QWORD PTR [r9+-40] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-48], r12 + ; a[i+7] += m[7] * mu + mulx rcx, rax, QWORD PTR [r10+56] + mov r12, QWORD PTR [r9+-32] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-40], r13 + ; a[i+8] += m[8] * mu + mulx rcx, rax, QWORD PTR [r10+64] + mov r13, QWORD PTR [r9+-24] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-32], r12 + ; a[i+9] += m[9] * mu + mulx rcx, rax, QWORD PTR [r10+72] + mov r12, QWORD PTR [r9+-16] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-24], r13 + ; a[i+10] += m[10] * mu + mulx rcx, rax, QWORD PTR [r10+80] + mov r13, QWORD PTR [r9+-8] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-16], r12 + ; a[i+11] += m[11] * mu + mulx rcx, rax, QWORD PTR [r10+88] + mov r12, QWORD PTR [r9] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-8], r13 + ; a[i+12] += m[12] * mu + mulx rcx, rax, QWORD PTR [r10+96] + mov r13, QWORD PTR [r9+8] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9], r12 + ; a[i+13] += m[13] * mu + mulx rcx, rax, QWORD PTR [r10+104] + mov r12, QWORD PTR [r9+16] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+8], r13 + ; a[i+14] += m[14] * mu + mulx rcx, rax, QWORD PTR [r10+112] + mov r13, QWORD PTR [r9+24] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+16], r12 + ; a[i+15] += m[15] * mu + mulx rcx, rax, QWORD PTR [r10+120] + mov r12, QWORD PTR [r9+32] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+24], r13 + ; a[i+16] += m[16] * mu + mulx rcx, rax, QWORD PTR [r10+128] + mov r13, QWORD PTR [r9+40] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+32], r12 + ; a[i+17] += m[17] * mu + mulx rcx, rax, QWORD PTR [r10+136] + mov r12, QWORD PTR [r9+48] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+40], r13 + ; a[i+18] += m[18] * mu + mulx rcx, rax, QWORD PTR [r10+144] + mov r13, QWORD PTR [r9+56] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+48], r12 + ; a[i+19] += m[19] * mu + mulx rcx, rax, QWORD PTR [r10+152] + mov r12, QWORD PTR [r9+64] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+56], r13 + ; a[i+20] += m[20] * mu + mulx rcx, rax, QWORD PTR [r10+160] + mov r13, QWORD PTR [r9+72] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+64], r12 + ; a[i+21] += m[21] * mu + mulx rcx, rax, QWORD PTR [r10+168] + mov r12, QWORD PTR [r9+80] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+72], r13 + ; a[i+22] += m[22] * mu + mulx rcx, rax, QWORD PTR [r10+176] + mov r13, QWORD PTR [r9+88] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+80], r12 + ; a[i+23] += m[23] * mu + mulx rcx, rax, QWORD PTR [r10+184] + mov r12, QWORD PTR [r9+96] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+88], r13 + adcx r12, rbp + mov rbp, rbx + mov QWORD PTR [r9+96], r12 + adox rbp, rbx + adcx rbp, rbx + ; a += 1 + add r9, 8 + ; i -= 1 + sub r11, 1 + jnz L_3072_mont_reduce_avx2_24_loop + sub r9, 96 + neg rbp + mov r8, r9 + sub r9, 192 + mov rcx, QWORD PTR [r10] + mov rdx, r14 + pext rcx, rcx, rbp + sub rdx, rcx + mov rcx, QWORD PTR [r10+8] + mov rax, r15 + pext rcx, rcx, rbp + mov QWORD PTR [r9], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+16] + mov rcx, rdi + pext rdx, rdx, rbp + mov QWORD PTR [r9+8], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+24] + mov rdx, rsi + pext rax, rax, rbp + mov QWORD PTR [r9+16], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+32] + mov rax, QWORD PTR [r8+32] + pext rcx, rcx, rbp + mov QWORD PTR [r9+24], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+40] + mov rcx, QWORD PTR [r8+40] + pext rdx, rdx, rbp + mov QWORD PTR [r9+32], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+48] + mov rdx, QWORD PTR [r8+48] + pext rax, rax, rbp + mov QWORD PTR [r9+40], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+56] + mov rax, QWORD PTR [r8+56] + pext rcx, rcx, rbp + mov QWORD PTR [r9+48], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+64] + mov rcx, QWORD PTR [r8+64] + pext rdx, rdx, rbp + mov QWORD PTR [r9+56], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+72] + mov rdx, QWORD PTR [r8+72] + pext rax, rax, rbp + mov QWORD PTR [r9+64], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+80] + mov rax, QWORD PTR [r8+80] + pext rcx, rcx, rbp + mov QWORD PTR [r9+72], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+88] + mov rcx, QWORD PTR [r8+88] + pext rdx, rdx, rbp + mov QWORD PTR [r9+80], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+96] + mov rdx, QWORD PTR [r8+96] + pext rax, rax, rbp + mov QWORD PTR [r9+88], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+104] + mov rax, QWORD PTR [r8+104] + pext rcx, rcx, rbp + mov QWORD PTR [r9+96], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+112] + mov rcx, QWORD PTR [r8+112] + pext rdx, rdx, rbp + mov QWORD PTR [r9+104], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+120] + mov rdx, QWORD PTR [r8+120] + pext rax, rax, rbp + mov QWORD PTR [r9+112], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+128] + mov rax, QWORD PTR [r8+128] + pext rcx, rcx, rbp + mov QWORD PTR [r9+120], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+136] + mov rcx, QWORD PTR [r8+136] + pext rdx, rdx, rbp + mov QWORD PTR [r9+128], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+144] + mov rdx, QWORD PTR [r8+144] + pext rax, rax, rbp + mov QWORD PTR [r9+136], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+152] + mov rax, QWORD PTR [r8+152] + pext rcx, rcx, rbp + mov QWORD PTR [r9+144], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+160] + mov rcx, QWORD PTR [r8+160] + pext rdx, rdx, rbp + mov QWORD PTR [r9+152], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+168] + mov rdx, QWORD PTR [r8+168] + pext rax, rax, rbp + mov QWORD PTR [r9+160], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+176] + mov rax, QWORD PTR [r8+176] + pext rcx, rcx, rbp + mov QWORD PTR [r9+168], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+184] + mov rcx, QWORD PTR [r8+184] + pext rdx, rdx, rbp + mov QWORD PTR [r9+176], rax + sbb rcx, rdx + mov QWORD PTR [r9+184], rcx + pop rbp + pop rbx + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 pop r12 ret -sp_4096_mul_d_64 ENDP +sp_3072_mont_reduce_avx2_24 ENDP +_TEXT ENDS +ENDIF +IFNDEF WC_NO_CACHE_RESISTANT +_TEXT SEGMENT READONLY PARA +sp_3072_get_from_table_avx2_24 PROC + sub rsp, 128 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + mov rax, 1 + movd xmm10, r8 + movd xmm11, rax + 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 + mov r9, QWORD PTR [rdx] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 16 + mov r9, QWORD PTR [rdx+128] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 17 + mov r9, QWORD PTR [rdx+136] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 18 + mov r9, QWORD PTR [rdx+144] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 19 + mov r9, QWORD PTR [rdx+152] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 20 + mov r9, QWORD PTR [rdx+160] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 21 + mov r9, QWORD PTR [rdx+168] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 22 + mov r9, QWORD PTR [rdx+176] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 23 + mov r9, QWORD PTR [rdx+184] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 24 + mov r9, QWORD PTR [rdx+192] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 25 + mov r9, QWORD PTR [rdx+200] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 26 + mov r9, QWORD PTR [rdx+208] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 27 + mov r9, QWORD PTR [rdx+216] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 28 + mov r9, QWORD PTR [rdx+224] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 29 + mov r9, QWORD PTR [rdx+232] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 30 + mov r9, QWORD PTR [rdx+240] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 31 + mov r9, QWORD PTR [rdx+248] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + vmovdqu YMMWORD PTR [rcx], ymm4 + vmovdqu YMMWORD PTR [rcx+32], ymm5 + vmovdqu YMMWORD PTR [rcx+64], ymm6 + vmovdqu YMMWORD PTR [rcx+96], ymm7 + add rcx, 128 + ; END: 0-15 + ; START: 16-23 + vpxor ymm13, ymm13, ymm13 + vpxor ymm4, ymm4, ymm4 + vpxor ymm5, ymm5, ymm5 + ; ENTRY: 0 + mov r9, QWORD PTR [rdx] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 16 + mov r9, QWORD PTR [rdx+128] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 17 + mov r9, QWORD PTR [rdx+136] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 18 + mov r9, QWORD PTR [rdx+144] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 19 + mov r9, QWORD PTR [rdx+152] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 20 + mov r9, QWORD PTR [rdx+160] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 21 + mov r9, QWORD PTR [rdx+168] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 22 + mov r9, QWORD PTR [rdx+176] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 23 + mov r9, QWORD PTR [rdx+184] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 24 + mov r9, QWORD PTR [rdx+192] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 25 + mov r9, QWORD PTR [rdx+200] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 26 + mov r9, QWORD PTR [rdx+208] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 27 + mov r9, QWORD PTR [rdx+216] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 28 + mov r9, QWORD PTR [rdx+224] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 29 + mov r9, QWORD PTR [rdx+232] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 30 + mov r9, QWORD PTR [rdx+240] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 31 + mov r9, QWORD PTR [rdx+248] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpaddd ymm13, ymm13, ymm11 + vmovdqu YMMWORD PTR [rcx], ymm4 + vmovdqu YMMWORD PTR [rcx+32], ymm5 + ; END: 16-23 + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + add rsp, 128 + ret +sp_3072_get_from_table_avx2_24 ENDP _TEXT ENDS +ENDIF ; /* Conditionally subtract b from a using the mask m. ; * m is -1 to subtract and 0 when not copying. ; * @@ -46585,8 +27280,8 @@ _TEXT ENDS ; * m Mask value to apply. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_cond_sub_64 PROC - sub rsp, 512 +sp_3072_cond_sub_48 PROC + sub rsp, 384 mov r10, QWORD PTR [r8] mov r11, QWORD PTR [r8+8] and r10, r9 @@ -46731,54 +27426,6 @@ sp_4096_cond_sub_64 PROC and r11, r9 mov QWORD PTR [rsp+368], r10 mov QWORD PTR [rsp+376], r11 - mov r10, QWORD PTR [r8+384] - mov r11, QWORD PTR [r8+392] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+384], r10 - mov QWORD PTR [rsp+392], r11 - mov r10, QWORD PTR [r8+400] - mov r11, QWORD PTR [r8+408] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+400], r10 - mov QWORD PTR [rsp+408], r11 - mov r10, QWORD PTR [r8+416] - mov r11, QWORD PTR [r8+424] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+416], r10 - mov QWORD PTR [rsp+424], r11 - mov r10, QWORD PTR [r8+432] - mov r11, QWORD PTR [r8+440] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+432], r10 - mov QWORD PTR [rsp+440], r11 - mov r10, QWORD PTR [r8+448] - mov r11, QWORD PTR [r8+456] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+448], r10 - mov QWORD PTR [rsp+456], r11 - mov r10, QWORD PTR [r8+464] - mov r11, QWORD PTR [r8+472] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+464], r10 - mov QWORD PTR [rsp+472], r11 - mov r10, QWORD PTR [r8+480] - mov r11, QWORD PTR [r8+488] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+480], r10 - mov QWORD PTR [rsp+488], r11 - mov r10, QWORD PTR [r8+496] - mov r11, QWORD PTR [r8+504] - and r10, r9 - and r11, r9 - mov QWORD PTR [rsp+496], r10 - mov QWORD PTR [rsp+504], r11 mov r10, QWORD PTR [rdx] mov r8, QWORD PTR [rsp] sub r10, r8 @@ -46963,91 +27610,27 @@ sp_4096_cond_sub_64 PROC sbb r11, r8 mov QWORD PTR [rcx+352], r10 mov r10, QWORD PTR [rdx+368] - mov r8, QWORD PTR [rsp+368] - sbb r10, r8 - mov QWORD PTR [rcx+360], r11 - mov r11, QWORD PTR [rdx+376] - mov r8, QWORD PTR [rsp+376] - sbb r11, r8 - mov QWORD PTR [rcx+368], r10 - mov r10, QWORD PTR [rdx+384] - mov r8, QWORD PTR [rsp+384] - sbb r10, r8 - mov QWORD PTR [rcx+376], r11 - mov r11, QWORD PTR [rdx+392] - mov r8, QWORD PTR [rsp+392] - sbb r11, r8 - mov QWORD PTR [rcx+384], r10 - mov r10, QWORD PTR [rdx+400] - mov r8, QWORD PTR [rsp+400] - sbb r10, r8 - mov QWORD PTR [rcx+392], r11 - mov r11, QWORD PTR [rdx+408] - mov r8, QWORD PTR [rsp+408] - sbb r11, r8 - mov QWORD PTR [rcx+400], r10 - mov r10, QWORD PTR [rdx+416] - mov r8, QWORD PTR [rsp+416] - sbb r10, r8 - mov QWORD PTR [rcx+408], r11 - mov r11, QWORD PTR [rdx+424] - mov r8, QWORD PTR [rsp+424] - sbb r11, r8 - mov QWORD PTR [rcx+416], r10 - mov r10, QWORD PTR [rdx+432] - mov r8, QWORD PTR [rsp+432] - sbb r10, r8 - mov QWORD PTR [rcx+424], r11 - mov r11, QWORD PTR [rdx+440] - mov r8, QWORD PTR [rsp+440] - sbb r11, r8 - mov QWORD PTR [rcx+432], r10 - mov r10, QWORD PTR [rdx+448] - mov r8, QWORD PTR [rsp+448] - sbb r10, r8 - mov QWORD PTR [rcx+440], r11 - mov r11, QWORD PTR [rdx+456] - mov r8, QWORD PTR [rsp+456] - sbb r11, r8 - mov QWORD PTR [rcx+448], r10 - mov r10, QWORD PTR [rdx+464] - mov r8, QWORD PTR [rsp+464] - sbb r10, r8 - mov QWORD PTR [rcx+456], r11 - mov r11, QWORD PTR [rdx+472] - mov r8, QWORD PTR [rsp+472] - sbb r11, r8 - mov QWORD PTR [rcx+464], r10 - mov r10, QWORD PTR [rdx+480] - mov r8, QWORD PTR [rsp+480] - sbb r10, r8 - mov QWORD PTR [rcx+472], r11 - mov r11, QWORD PTR [rdx+488] - mov r8, QWORD PTR [rsp+488] - sbb r11, r8 - mov QWORD PTR [rcx+480], r10 - mov r10, QWORD PTR [rdx+496] - mov r8, QWORD PTR [rsp+496] - sbb r10, r8 - mov QWORD PTR [rcx+488], r11 - mov r11, QWORD PTR [rdx+504] - mov r8, QWORD PTR [rsp+504] + mov r8, QWORD PTR [rsp+368] + sbb r10, r8 + mov QWORD PTR [rcx+360], r11 + mov r11, QWORD PTR [rdx+376] + mov r8, QWORD PTR [rsp+376] sbb r11, r8 - mov QWORD PTR [rcx+496], r10 - mov QWORD PTR [rcx+504], r11 + mov QWORD PTR [rcx+368], r10 + mov QWORD PTR [rcx+376], r11 sbb rax, rax - add rsp, 512 + add rsp, 384 ret -sp_4096_cond_sub_64 ENDP +sp_3072_cond_sub_48 ENDP _TEXT ENDS -; /* Reduce the number back to 4096 bits using Montgomery reduction. +; /* 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. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_mont_reduce_64 PROC +sp_3072_mont_reduce_48 PROC push r12 push r13 push r14 @@ -47056,11 +27639,11 @@ sp_4096_mont_reduce_64 PROC push rsi mov r9, rdx xor rsi, rsi - ; i = 64 - mov r10, 64 + ; i = 48 + mov r10, 48 mov r15, QWORD PTR [rcx] mov rdi, QWORD PTR [rcx+8] -L_4096_mont_reduce_64_loop: +L_3072_mont_reduce_48_loop: ; mu = a[i] * mp mov r13, r15 imul r13, r8 @@ -47530,180 +28113,20 @@ L_4096_mont_reduce_64_loop: adc r12, 0 ; a[i+47] += m[47] * mu mov rax, r13 - xor r11, r11 mul QWORD PTR [r9+376] mov r14, QWORD PTR [rcx+376] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+376], r14 - adc r11, 0 - ; a[i+48] += m[48] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+384] - mov r14, QWORD PTR [rcx+384] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+384], r14 - adc r12, 0 - ; a[i+49] += m[49] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+392] - mov r14, QWORD PTR [rcx+392] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+392], r14 - adc r11, 0 - ; a[i+50] += m[50] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+400] - mov r14, QWORD PTR [rcx+400] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+400], r14 - adc r12, 0 - ; a[i+51] += m[51] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+408] - mov r14, QWORD PTR [rcx+408] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+408], r14 - adc r11, 0 - ; a[i+52] += m[52] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+416] - mov r14, QWORD PTR [rcx+416] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+416], r14 - adc r12, 0 - ; a[i+53] += m[53] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+424] - mov r14, QWORD PTR [rcx+424] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+424], r14 - adc r11, 0 - ; a[i+54] += m[54] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+432] - mov r14, QWORD PTR [rcx+432] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+432], r14 - adc r12, 0 - ; a[i+55] += m[55] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+440] - mov r14, QWORD PTR [rcx+440] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+440], r14 - adc r11, 0 - ; a[i+56] += m[56] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+448] - mov r14, QWORD PTR [rcx+448] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+448], r14 - adc r12, 0 - ; a[i+57] += m[57] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+456] - mov r14, QWORD PTR [rcx+456] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+456], r14 - adc r11, 0 - ; a[i+58] += m[58] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+464] - mov r14, QWORD PTR [rcx+464] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+464], r14 - adc r12, 0 - ; a[i+59] += m[59] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+472] - mov r14, QWORD PTR [rcx+472] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+472], r14 - adc r11, 0 - ; a[i+60] += m[60] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+480] - mov r14, QWORD PTR [rcx+480] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+480], r14 - adc r12, 0 - ; a[i+61] += m[61] * mu - mov rax, r13 - xor r11, r11 - mul QWORD PTR [r9+488] - mov r14, QWORD PTR [rcx+488] - add r14, rax - adc r11, rdx - add r14, r12 - mov QWORD PTR [rcx+488], r14 - adc r11, 0 - ; a[i+62] += m[62] * mu - mov rax, r13 - xor r12, r12 - mul QWORD PTR [r9+496] - mov r14, QWORD PTR [rcx+496] - add r14, rax - adc r12, rdx - add r14, r11 - mov QWORD PTR [rcx+496], r14 - adc r12, 0 - ; a[i+63] += m[63] * mu - mov rax, r13 - mul QWORD PTR [r9+504] - mov r14, QWORD PTR [rcx+504] add r12, rax adc rdx, rsi mov rsi, 0 adc rsi, 0 add r14, r12 - mov QWORD PTR [rcx+504], r14 - adc QWORD PTR [rcx+512], rdx + mov QWORD PTR [rcx+376], r14 + adc QWORD PTR [rcx+384], rdx adc rsi, 0 ; i -= 1 add rcx, 8 dec r10 - jnz L_4096_mont_reduce_64_loop + jnz L_3072_mont_reduce_48_loop mov QWORD PTR [rcx], r15 mov QWORD PTR [rcx+8], rdi neg rsi @@ -47716,8 +28139,8 @@ ELSE ENDIF mov rdx, rcx mov rcx, rcx - sub rcx, 512 - call sp_4096_cond_sub_64 + sub rcx, 384 + call sp_3072_cond_sub_48 pop rsi pop rdi pop r15 @@ -47725,7 +28148,7 @@ ENDIF pop r13 pop r12 ret -sp_4096_mont_reduce_64 ENDP +sp_3072_mont_reduce_48 ENDP _TEXT ENDS ; /* Sub b from a into r. (r = a - b) ; * @@ -47734,7 +28157,7 @@ _TEXT ENDS ; * b A single precision integer. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_sub_64 PROC +sp_3072_sub_48 PROC mov r9, QWORD PTR [rdx] sub r9, QWORD PTR [r8] mov r10, QWORD PTR [rdx+8] @@ -47868,68 +28291,20 @@ sp_4096_sub_64 PROC sbb r10, QWORD PTR [r8+344] mov r9, QWORD PTR [rdx+352] mov QWORD PTR [rcx+344], r10 - sbb r9, QWORD PTR [r8+352] - mov r10, QWORD PTR [rdx+360] - mov QWORD PTR [rcx+352], r9 - sbb r10, QWORD PTR [r8+360] - mov r9, QWORD PTR [rdx+368] - mov QWORD PTR [rcx+360], r10 - sbb r9, QWORD PTR [r8+368] - mov r10, QWORD PTR [rdx+376] - mov QWORD PTR [rcx+368], r9 - sbb r10, QWORD PTR [r8+376] - mov r9, QWORD PTR [rdx+384] - mov QWORD PTR [rcx+376], r10 - sbb r9, QWORD PTR [r8+384] - mov r10, QWORD PTR [rdx+392] - mov QWORD PTR [rcx+384], r9 - sbb r10, QWORD PTR [r8+392] - mov r9, QWORD PTR [rdx+400] - mov QWORD PTR [rcx+392], r10 - sbb r9, QWORD PTR [r8+400] - mov r10, QWORD PTR [rdx+408] - mov QWORD PTR [rcx+400], r9 - sbb r10, QWORD PTR [r8+408] - mov r9, QWORD PTR [rdx+416] - mov QWORD PTR [rcx+408], r10 - sbb r9, QWORD PTR [r8+416] - mov r10, QWORD PTR [rdx+424] - mov QWORD PTR [rcx+416], r9 - sbb r10, QWORD PTR [r8+424] - mov r9, QWORD PTR [rdx+432] - mov QWORD PTR [rcx+424], r10 - sbb r9, QWORD PTR [r8+432] - mov r10, QWORD PTR [rdx+440] - mov QWORD PTR [rcx+432], r9 - sbb r10, QWORD PTR [r8+440] - mov r9, QWORD PTR [rdx+448] - mov QWORD PTR [rcx+440], r10 - sbb r9, QWORD PTR [r8+448] - mov r10, QWORD PTR [rdx+456] - mov QWORD PTR [rcx+448], r9 - sbb r10, QWORD PTR [r8+456] - mov r9, QWORD PTR [rdx+464] - mov QWORD PTR [rcx+456], r10 - sbb r9, QWORD PTR [r8+464] - mov r10, QWORD PTR [rdx+472] - mov QWORD PTR [rcx+464], r9 - sbb r10, QWORD PTR [r8+472] - mov r9, QWORD PTR [rdx+480] - mov QWORD PTR [rcx+472], r10 - sbb r9, QWORD PTR [r8+480] - mov r10, QWORD PTR [rdx+488] - mov QWORD PTR [rcx+480], r9 - sbb r10, QWORD PTR [r8+488] - mov r9, QWORD PTR [rdx+496] - mov QWORD PTR [rcx+488], r10 - sbb r9, QWORD PTR [r8+496] - mov r10, QWORD PTR [rdx+504] - mov QWORD PTR [rcx+496], r9 - sbb r10, QWORD PTR [r8+504] - mov QWORD PTR [rcx+504], r10 + sbb r9, QWORD PTR [r8+352] + mov r10, QWORD PTR [rdx+360] + mov QWORD PTR [rcx+352], r9 + sbb r10, QWORD PTR [r8+360] + mov r9, QWORD PTR [rdx+368] + mov QWORD PTR [rcx+360], r10 + sbb r9, QWORD PTR [r8+368] + mov r10, QWORD PTR [rdx+376] + mov QWORD PTR [rcx+368], r9 + sbb r10, QWORD PTR [r8+376] + mov QWORD PTR [rcx+376], r10 sbb rax, rax ret -sp_4096_sub_64 ENDP +sp_3072_sub_48 ENDP _TEXT ENDS IFDEF HAVE_INTEL_AVX2 ; /* Mul a by digit b into r. (r = a * b) @@ -47939,7 +28314,7 @@ IFDEF HAVE_INTEL_AVX2 ; * b A single precision digit. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_mul_d_avx2_64 PROC +sp_3072_mul_d_avx2_48 PROC push r12 push r13 mov rax, rdx @@ -48229,109 +28604,13 @@ sp_4096_mul_d_avx2_64 PROC mov r11, r13 adcx r12, r9 adox r11, r10 + adcx r11, r13 mov QWORD PTR [rcx+376], r12 - ; A[48] * B - mulx r10, r9, QWORD PTR [rax+384] - mov r12, r13 - adcx r11, r9 - adox r12, r10 mov QWORD PTR [rcx+384], r11 - ; A[49] * B - mulx r10, r9, QWORD PTR [rax+392] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+392], r12 - ; A[50] * B - mulx r10, r9, QWORD PTR [rax+400] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+400], r11 - ; A[51] * B - mulx r10, r9, QWORD PTR [rax+408] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+408], r12 - ; A[52] * B - mulx r10, r9, QWORD PTR [rax+416] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+416], r11 - ; A[53] * B - mulx r10, r9, QWORD PTR [rax+424] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+424], r12 - ; A[54] * B - mulx r10, r9, QWORD PTR [rax+432] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+432], r11 - ; A[55] * B - mulx r10, r9, QWORD PTR [rax+440] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+440], r12 - ; A[56] * B - mulx r10, r9, QWORD PTR [rax+448] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+448], r11 - ; A[57] * B - mulx r10, r9, QWORD PTR [rax+456] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+456], r12 - ; A[58] * B - mulx r10, r9, QWORD PTR [rax+464] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+464], r11 - ; A[59] * B - mulx r10, r9, QWORD PTR [rax+472] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+472], r12 - ; A[60] * B - mulx r10, r9, QWORD PTR [rax+480] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+480], r11 - ; A[61] * B - mulx r10, r9, QWORD PTR [rax+488] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - mov QWORD PTR [rcx+488], r12 - ; A[62] * B - mulx r10, r9, QWORD PTR [rax+496] - mov r12, r13 - adcx r11, r9 - adox r12, r10 - mov QWORD PTR [rcx+496], r11 - ; A[63] * B - mulx r10, r9, QWORD PTR [rax+504] - mov r11, r13 - adcx r12, r9 - adox r11, r10 - adcx r11, r13 - mov QWORD PTR [rcx+504], r12 - mov QWORD PTR [rcx+512], r11 pop r13 pop r12 ret -sp_4096_mul_d_avx2_64 ENDP +sp_3072_mul_d_avx2_48 ENDP _TEXT ENDS ENDIF IFDEF _WIN64 @@ -48343,13 +28622,13 @@ IFDEF _WIN64 ; * returns the result of the division. ; */ _TEXT SEGMENT READONLY PARA -div_4096_word_asm_64 PROC +div_3072_word_asm_48 PROC mov r9, rdx mov rax, r9 mov rdx, rcx div r8 ret -div_4096_word_asm_64 ENDP +div_3072_word_asm_48 ENDP _TEXT ENDS ENDIF IFDEF HAVE_INTEL_AVX2 @@ -48362,7 +28641,7 @@ IFDEF HAVE_INTEL_AVX2 ; * m Mask value to apply. ; */ _TEXT SEGMENT READONLY PARA -sp_4096_cond_sub_avx2_64 PROC +sp_3072_cond_sub_avx2_48 PROC push r12 mov r12, QWORD PTR [r8] mov r10, QWORD PTR [rdx] @@ -48463,375 +28742,167 @@ sp_4096_cond_sub_avx2_64 PROC pext r12, r12, r9 mov QWORD PTR [rcx+144], r10 sbb r11, r12 - mov r10, QWORD PTR [r8+160] - mov r12, QWORD PTR [rdx+160] - pext r10, r10, r9 - mov QWORD PTR [rcx+152], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+168] - mov r10, QWORD PTR [rdx+168] - pext r11, r11, r9 - mov QWORD PTR [rcx+160], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+176] - mov r11, QWORD PTR [rdx+176] - pext r12, r12, r9 - mov QWORD PTR [rcx+168], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+184] - mov r12, QWORD PTR [rdx+184] - pext r10, r10, r9 - mov QWORD PTR [rcx+176], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+192] - mov r10, QWORD PTR [rdx+192] - pext r11, r11, r9 - mov QWORD PTR [rcx+184], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+200] - mov r11, QWORD PTR [rdx+200] - pext r12, r12, r9 - mov QWORD PTR [rcx+192], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+208] - mov r12, QWORD PTR [rdx+208] - pext r10, r10, r9 - mov QWORD PTR [rcx+200], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+216] - mov r10, QWORD PTR [rdx+216] - pext r11, r11, r9 - mov QWORD PTR [rcx+208], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+224] - mov r11, QWORD PTR [rdx+224] - pext r12, r12, r9 - mov QWORD PTR [rcx+216], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+232] - mov r12, QWORD PTR [rdx+232] - pext r10, r10, r9 - mov QWORD PTR [rcx+224], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+240] - mov r10, QWORD PTR [rdx+240] - pext r11, r11, r9 - mov QWORD PTR [rcx+232], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+248] - mov r11, QWORD PTR [rdx+248] - pext r12, r12, r9 - mov QWORD PTR [rcx+240], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+256] - mov r12, QWORD PTR [rdx+256] - pext r10, r10, r9 - mov QWORD PTR [rcx+248], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+264] - mov r10, QWORD PTR [rdx+264] - pext r11, r11, r9 - mov QWORD PTR [rcx+256], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+272] - mov r11, QWORD PTR [rdx+272] - pext r12, r12, r9 - mov QWORD PTR [rcx+264], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+280] - mov r12, QWORD PTR [rdx+280] - pext r10, r10, r9 - mov QWORD PTR [rcx+272], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+288] - mov r10, QWORD PTR [rdx+288] - pext r11, r11, r9 - mov QWORD PTR [rcx+280], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+296] - mov r11, QWORD PTR [rdx+296] - pext r12, r12, r9 - mov QWORD PTR [rcx+288], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+304] - mov r12, QWORD PTR [rdx+304] - pext r10, r10, r9 - mov QWORD PTR [rcx+296], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+312] - mov r10, QWORD PTR [rdx+312] - pext r11, r11, r9 - mov QWORD PTR [rcx+304], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+320] - mov r11, QWORD PTR [rdx+320] - pext r12, r12, r9 - mov QWORD PTR [rcx+312], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+328] - mov r12, QWORD PTR [rdx+328] - pext r10, r10, r9 - mov QWORD PTR [rcx+320], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+336] - mov r10, QWORD PTR [rdx+336] - pext r11, r11, r9 - mov QWORD PTR [rcx+328], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+344] - mov r11, QWORD PTR [rdx+344] - pext r12, r12, r9 - mov QWORD PTR [rcx+336], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+352] - mov r12, QWORD PTR [rdx+352] - pext r10, r10, r9 - mov QWORD PTR [rcx+344], r11 - sbb r12, r10 - mov r11, QWORD PTR [r8+360] - mov r10, QWORD PTR [rdx+360] - pext r11, r11, r9 - mov QWORD PTR [rcx+352], r12 - sbb r10, r11 - mov r12, QWORD PTR [r8+368] - mov r11, QWORD PTR [rdx+368] - pext r12, r12, r9 - mov QWORD PTR [rcx+360], r10 - sbb r11, r12 - mov r10, QWORD PTR [r8+376] - mov r12, QWORD PTR [rdx+376] + mov r10, QWORD PTR [r8+160] + mov r12, QWORD PTR [rdx+160] pext r10, r10, r9 - mov QWORD PTR [rcx+368], r11 + mov QWORD PTR [rcx+152], r11 sbb r12, r10 - mov r11, QWORD PTR [r8+384] - mov r10, QWORD PTR [rdx+384] + mov r11, QWORD PTR [r8+168] + mov r10, QWORD PTR [rdx+168] pext r11, r11, r9 - mov QWORD PTR [rcx+376], r12 + mov QWORD PTR [rcx+160], r12 sbb r10, r11 - mov r12, QWORD PTR [r8+392] - mov r11, QWORD PTR [rdx+392] + mov r12, QWORD PTR [r8+176] + mov r11, QWORD PTR [rdx+176] pext r12, r12, r9 - mov QWORD PTR [rcx+384], r10 + mov QWORD PTR [rcx+168], r10 sbb r11, r12 - mov r10, QWORD PTR [r8+400] - mov r12, QWORD PTR [rdx+400] + mov r10, QWORD PTR [r8+184] + mov r12, QWORD PTR [rdx+184] pext r10, r10, r9 - mov QWORD PTR [rcx+392], r11 + mov QWORD PTR [rcx+176], r11 sbb r12, r10 - mov r11, QWORD PTR [r8+408] - mov r10, QWORD PTR [rdx+408] + mov r11, QWORD PTR [r8+192] + mov r10, QWORD PTR [rdx+192] pext r11, r11, r9 - mov QWORD PTR [rcx+400], r12 + mov QWORD PTR [rcx+184], r12 sbb r10, r11 - mov r12, QWORD PTR [r8+416] - mov r11, QWORD PTR [rdx+416] + mov r12, QWORD PTR [r8+200] + mov r11, QWORD PTR [rdx+200] pext r12, r12, r9 - mov QWORD PTR [rcx+408], r10 + mov QWORD PTR [rcx+192], r10 sbb r11, r12 - mov r10, QWORD PTR [r8+424] - mov r12, QWORD PTR [rdx+424] + mov r10, QWORD PTR [r8+208] + mov r12, QWORD PTR [rdx+208] pext r10, r10, r9 - mov QWORD PTR [rcx+416], r11 + mov QWORD PTR [rcx+200], r11 sbb r12, r10 - mov r11, QWORD PTR [r8+432] - mov r10, QWORD PTR [rdx+432] + mov r11, QWORD PTR [r8+216] + mov r10, QWORD PTR [rdx+216] pext r11, r11, r9 - mov QWORD PTR [rcx+424], r12 + mov QWORD PTR [rcx+208], r12 sbb r10, r11 - mov r12, QWORD PTR [r8+440] - mov r11, QWORD PTR [rdx+440] + mov r12, QWORD PTR [r8+224] + mov r11, QWORD PTR [rdx+224] pext r12, r12, r9 - mov QWORD PTR [rcx+432], r10 + mov QWORD PTR [rcx+216], r10 sbb r11, r12 - mov r10, QWORD PTR [r8+448] - mov r12, QWORD PTR [rdx+448] + mov r10, QWORD PTR [r8+232] + mov r12, QWORD PTR [rdx+232] pext r10, r10, r9 - mov QWORD PTR [rcx+440], r11 + mov QWORD PTR [rcx+224], r11 sbb r12, r10 - mov r11, QWORD PTR [r8+456] - mov r10, QWORD PTR [rdx+456] + mov r11, QWORD PTR [r8+240] + mov r10, QWORD PTR [rdx+240] pext r11, r11, r9 - mov QWORD PTR [rcx+448], r12 + mov QWORD PTR [rcx+232], r12 sbb r10, r11 - mov r12, QWORD PTR [r8+464] - mov r11, QWORD PTR [rdx+464] + mov r12, QWORD PTR [r8+248] + mov r11, QWORD PTR [rdx+248] pext r12, r12, r9 - mov QWORD PTR [rcx+456], r10 + mov QWORD PTR [rcx+240], r10 sbb r11, r12 - mov r10, QWORD PTR [r8+472] - mov r12, QWORD PTR [rdx+472] + mov r10, QWORD PTR [r8+256] + mov r12, QWORD PTR [rdx+256] pext r10, r10, r9 - mov QWORD PTR [rcx+464], r11 + mov QWORD PTR [rcx+248], r11 sbb r12, r10 - mov r11, QWORD PTR [r8+480] - mov r10, QWORD PTR [rdx+480] + mov r11, QWORD PTR [r8+264] + mov r10, QWORD PTR [rdx+264] pext r11, r11, r9 - mov QWORD PTR [rcx+472], r12 + mov QWORD PTR [rcx+256], r12 sbb r10, r11 - mov r12, QWORD PTR [r8+488] - mov r11, QWORD PTR [rdx+488] + mov r12, QWORD PTR [r8+272] + mov r11, QWORD PTR [rdx+272] pext r12, r12, r9 - mov QWORD PTR [rcx+480], r10 + mov QWORD PTR [rcx+264], r10 sbb r11, r12 - mov r10, QWORD PTR [r8+496] - mov r12, QWORD PTR [rdx+496] + mov r10, QWORD PTR [r8+280] + mov r12, QWORD PTR [rdx+280] pext r10, r10, r9 - mov QWORD PTR [rcx+488], r11 + mov QWORD PTR [rcx+272], r11 sbb r12, r10 - mov r11, QWORD PTR [r8+504] - mov r10, QWORD PTR [rdx+504] + mov r11, QWORD PTR [r8+288] + mov r10, QWORD PTR [rdx+288] pext r11, r11, r9 - mov QWORD PTR [rcx+496], r12 + mov QWORD PTR [rcx+280], r12 sbb r10, r11 - mov QWORD PTR [rcx+504], r10 - sbb rax, rax - pop r12 - ret -sp_4096_cond_sub_avx2_64 ENDP -_TEXT ENDS -ENDIF -; /* 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. -; */ -_TEXT SEGMENT READONLY PARA -sp_4096_cmp_64 PROC - push r12 - xor r9, r9 - mov r8, -1 - mov rax, -1 - mov r10, 1 - mov r11, QWORD PTR [rcx+504] - mov r12, QWORD PTR [rdx+504] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+496] - mov r12, QWORD PTR [rdx+496] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+488] - mov r12, QWORD PTR [rdx+488] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+480] - mov r12, QWORD PTR [rdx+480] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+472] - mov r12, QWORD PTR [rdx+472] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+464] - mov r12, QWORD PTR [rdx+464] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+456] - mov r12, QWORD PTR [rdx+456] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+448] - mov r12, QWORD PTR [rdx+448] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+440] - mov r12, QWORD PTR [rdx+440] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+432] - mov r12, QWORD PTR [rdx+432] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+424] - mov r12, QWORD PTR [rdx+424] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+416] - mov r12, QWORD PTR [rdx+416] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+408] - mov r12, QWORD PTR [rdx+408] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+400] - mov r12, QWORD PTR [rdx+400] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+392] - mov r12, QWORD PTR [rdx+392] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+384] - mov r12, QWORD PTR [rdx+384] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 + mov r12, QWORD PTR [r8+296] + mov r11, QWORD PTR [rdx+296] + pext r12, r12, r9 + mov QWORD PTR [rcx+288], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+304] + mov r12, QWORD PTR [rdx+304] + pext r10, r10, r9 + mov QWORD PTR [rcx+296], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+312] + mov r10, QWORD PTR [rdx+312] + pext r11, r11, r9 + mov QWORD PTR [rcx+304], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+320] + mov r11, QWORD PTR [rdx+320] + pext r12, r12, r9 + mov QWORD PTR [rcx+312], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+328] + mov r12, QWORD PTR [rdx+328] + pext r10, r10, r9 + mov QWORD PTR [rcx+320], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+336] + mov r10, QWORD PTR [rdx+336] + pext r11, r11, r9 + mov QWORD PTR [rcx+328], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+344] + mov r11, QWORD PTR [rdx+344] + pext r12, r12, r9 + mov QWORD PTR [rcx+336], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+352] + mov r12, QWORD PTR [rdx+352] + pext r10, r10, r9 + mov QWORD PTR [rcx+344], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+360] + mov r10, QWORD PTR [rdx+360] + pext r11, r11, r9 + mov QWORD PTR [rcx+352], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+368] + mov r11, QWORD PTR [rdx+368] + pext r12, r12, r9 + mov QWORD PTR [rcx+360], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+376] + mov r12, QWORD PTR [rdx+376] + pext r10, r10, r9 + mov QWORD PTR [rcx+368], r11 + sbb r12, r10 + mov QWORD PTR [rcx+376], r12 + sbb rax, rax + pop r12 + ret +sp_3072_cond_sub_avx2_48 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_cmp_48 PROC + push r12 + xor r9, r9 + mov r8, -1 + mov rax, -1 + mov r10, 1 mov r11, QWORD PTR [rcx+376] mov r12, QWORD PTR [rdx+376] and r11, r8 @@ -49194,2447 +29265,10590 @@ sp_4096_cmp_64 PROC cmovnz r8, r9 mov r11, QWORD PTR [rcx+16] mov r12, QWORD PTR [rdx+16] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx+8] - mov r12, QWORD PTR [rdx+8] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - mov r11, QWORD PTR [rcx] - mov r12, QWORD PTR [rdx] - and r11, r8 - and r12, r8 - sub r11, r12 - cmova rax, r10 - cmovc rax, r8 - cmovnz r8, r9 - xor rax, r8 + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+8] + mov r12, QWORD PTR [rdx+8] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx] + mov r12, QWORD PTR [rdx] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + xor rax, r8 + pop r12 + ret +sp_3072_cmp_48 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_mont_reduce_avx2_48 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + push rbx + push rbp + mov r9, rcx + mov r10, rdx + xor rbp, rbp + ; i = 48 + mov r11, 48 + mov r14, QWORD PTR [r9] + mov r15, QWORD PTR [r9+8] + mov rdi, QWORD PTR [r9+16] + mov rsi, QWORD PTR [r9+24] + add r9, 192 + xor rbp, rbp +L_3072_mont_reduce_avx2_48_loop: + ; mu = a[i] * mp + mov rdx, r14 + mov r12, r14 + imul rdx, r8 + xor rbx, rbx + ; a[i+0] += m[0] * mu + mulx rcx, rax, QWORD PTR [r10] + mov r14, r15 + adcx r12, rax + adox r14, rcx + ; a[i+1] += m[1] * mu + mulx rcx, rax, QWORD PTR [r10+8] + mov r15, rdi + adcx r14, rax + adox r15, rcx + ; a[i+2] += m[2] * mu + mulx rcx, rax, QWORD PTR [r10+16] + mov rdi, rsi + adcx r15, rax + adox rdi, rcx + ; a[i+3] += m[3] * mu + mulx rcx, rax, QWORD PTR [r10+24] + mov rsi, QWORD PTR [r9+-160] + adcx rdi, rax + adox rsi, rcx + ; a[i+4] += m[4] * mu + mulx rcx, rax, QWORD PTR [r10+32] + mov r13, QWORD PTR [r9+-152] + adcx rsi, rax + adox r13, rcx + ; a[i+5] += m[5] * mu + mulx rcx, rax, QWORD PTR [r10+40] + mov r12, QWORD PTR [r9+-144] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-152], r13 + ; a[i+6] += m[6] * mu + mulx rcx, rax, QWORD PTR [r10+48] + mov r13, QWORD PTR [r9+-136] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-144], r12 + ; a[i+7] += m[7] * mu + mulx rcx, rax, QWORD PTR [r10+56] + mov r12, QWORD PTR [r9+-128] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-136], r13 + ; a[i+8] += m[8] * mu + mulx rcx, rax, QWORD PTR [r10+64] + mov r13, QWORD PTR [r9+-120] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-128], r12 + ; a[i+9] += m[9] * mu + mulx rcx, rax, QWORD PTR [r10+72] + mov r12, QWORD PTR [r9+-112] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-120], r13 + ; a[i+10] += m[10] * mu + mulx rcx, rax, QWORD PTR [r10+80] + mov r13, QWORD PTR [r9+-104] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-112], r12 + ; a[i+11] += m[11] * mu + mulx rcx, rax, QWORD PTR [r10+88] + mov r12, QWORD PTR [r9+-96] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-104], r13 + ; a[i+12] += m[12] * mu + mulx rcx, rax, QWORD PTR [r10+96] + mov r13, QWORD PTR [r9+-88] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-96], r12 + ; a[i+13] += m[13] * mu + mulx rcx, rax, QWORD PTR [r10+104] + mov r12, QWORD PTR [r9+-80] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-88], r13 + ; a[i+14] += m[14] * mu + mulx rcx, rax, QWORD PTR [r10+112] + mov r13, QWORD PTR [r9+-72] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-80], r12 + ; a[i+15] += m[15] * mu + mulx rcx, rax, QWORD PTR [r10+120] + mov r12, QWORD PTR [r9+-64] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-72], r13 + ; a[i+16] += m[16] * mu + mulx rcx, rax, QWORD PTR [r10+128] + mov r13, QWORD PTR [r9+-56] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-64], r12 + ; a[i+17] += m[17] * mu + mulx rcx, rax, QWORD PTR [r10+136] + mov r12, QWORD PTR [r9+-48] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-56], r13 + ; a[i+18] += m[18] * mu + mulx rcx, rax, QWORD PTR [r10+144] + mov r13, QWORD PTR [r9+-40] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-48], r12 + ; a[i+19] += m[19] * mu + mulx rcx, rax, QWORD PTR [r10+152] + mov r12, QWORD PTR [r9+-32] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-40], r13 + ; a[i+20] += m[20] * mu + mulx rcx, rax, QWORD PTR [r10+160] + mov r13, QWORD PTR [r9+-24] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-32], r12 + ; a[i+21] += m[21] * mu + mulx rcx, rax, QWORD PTR [r10+168] + mov r12, QWORD PTR [r9+-16] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-24], r13 + ; a[i+22] += m[22] * mu + mulx rcx, rax, QWORD PTR [r10+176] + mov r13, QWORD PTR [r9+-8] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+-16], r12 + ; a[i+23] += m[23] * mu + mulx rcx, rax, QWORD PTR [r10+184] + mov r12, QWORD PTR [r9] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+-8], r13 + ; a[i+24] += m[24] * mu + mulx rcx, rax, QWORD PTR [r10+192] + mov r13, QWORD PTR [r9+8] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9], r12 + ; a[i+25] += m[25] * mu + mulx rcx, rax, QWORD PTR [r10+200] + mov r12, QWORD PTR [r9+16] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+8], r13 + ; a[i+26] += m[26] * mu + mulx rcx, rax, QWORD PTR [r10+208] + mov r13, QWORD PTR [r9+24] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+16], r12 + ; a[i+27] += m[27] * mu + mulx rcx, rax, QWORD PTR [r10+216] + mov r12, QWORD PTR [r9+32] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+24], r13 + ; a[i+28] += m[28] * mu + mulx rcx, rax, QWORD PTR [r10+224] + mov r13, QWORD PTR [r9+40] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+32], r12 + ; a[i+29] += m[29] * mu + mulx rcx, rax, QWORD PTR [r10+232] + mov r12, QWORD PTR [r9+48] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+40], r13 + ; a[i+30] += m[30] * mu + mulx rcx, rax, QWORD PTR [r10+240] + mov r13, QWORD PTR [r9+56] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+48], r12 + ; a[i+31] += m[31] * mu + mulx rcx, rax, QWORD PTR [r10+248] + mov r12, QWORD PTR [r9+64] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+56], r13 + ; a[i+32] += m[32] * mu + mulx rcx, rax, QWORD PTR [r10+256] + mov r13, QWORD PTR [r9+72] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+64], r12 + ; a[i+33] += m[33] * mu + mulx rcx, rax, QWORD PTR [r10+264] + mov r12, QWORD PTR [r9+80] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+72], r13 + ; a[i+34] += m[34] * mu + mulx rcx, rax, QWORD PTR [r10+272] + mov r13, QWORD PTR [r9+88] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+80], r12 + ; a[i+35] += m[35] * mu + mulx rcx, rax, QWORD PTR [r10+280] + mov r12, QWORD PTR [r9+96] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+88], r13 + ; a[i+36] += m[36] * mu + mulx rcx, rax, QWORD PTR [r10+288] + mov r13, QWORD PTR [r9+104] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+96], r12 + ; a[i+37] += m[37] * mu + mulx rcx, rax, QWORD PTR [r10+296] + mov r12, QWORD PTR [r9+112] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+104], r13 + ; a[i+38] += m[38] * mu + mulx rcx, rax, QWORD PTR [r10+304] + mov r13, QWORD PTR [r9+120] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+112], r12 + ; a[i+39] += m[39] * mu + mulx rcx, rax, QWORD PTR [r10+312] + mov r12, QWORD PTR [r9+128] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+120], r13 + ; a[i+40] += m[40] * mu + mulx rcx, rax, QWORD PTR [r10+320] + mov r13, QWORD PTR [r9+136] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+128], r12 + ; a[i+41] += m[41] * mu + mulx rcx, rax, QWORD PTR [r10+328] + mov r12, QWORD PTR [r9+144] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+136], r13 + ; a[i+42] += m[42] * mu + mulx rcx, rax, QWORD PTR [r10+336] + mov r13, QWORD PTR [r9+152] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+144], r12 + ; a[i+43] += m[43] * mu + mulx rcx, rax, QWORD PTR [r10+344] + mov r12, QWORD PTR [r9+160] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+152], r13 + ; a[i+44] += m[44] * mu + mulx rcx, rax, QWORD PTR [r10+352] + mov r13, QWORD PTR [r9+168] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+160], r12 + ; a[i+45] += m[45] * mu + mulx rcx, rax, QWORD PTR [r10+360] + mov r12, QWORD PTR [r9+176] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+168], r13 + ; a[i+46] += m[46] * mu + mulx rcx, rax, QWORD PTR [r10+368] + mov r13, QWORD PTR [r9+184] + adcx r12, rax + adox r13, rcx + mov QWORD PTR [r9+176], r12 + ; a[i+47] += m[47] * mu + mulx rcx, rax, QWORD PTR [r10+376] + mov r12, QWORD PTR [r9+192] + adcx r13, rax + adox r12, rcx + mov QWORD PTR [r9+184], r13 + adcx r12, rbp + mov rbp, rbx + mov QWORD PTR [r9+192], r12 + adox rbp, rbx + adcx rbp, rbx + ; a += 1 + add r9, 8 + ; i -= 1 + sub r11, 1 + jnz L_3072_mont_reduce_avx2_48_loop + sub r9, 192 + neg rbp + mov r8, r9 + sub r9, 384 + mov rcx, QWORD PTR [r10] + mov rdx, r14 + pext rcx, rcx, rbp + sub rdx, rcx + mov rcx, QWORD PTR [r10+8] + mov rax, r15 + pext rcx, rcx, rbp + mov QWORD PTR [r9], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+16] + mov rcx, rdi + pext rdx, rdx, rbp + mov QWORD PTR [r9+8], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+24] + mov rdx, rsi + pext rax, rax, rbp + mov QWORD PTR [r9+16], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+32] + mov rax, QWORD PTR [r8+32] + pext rcx, rcx, rbp + mov QWORD PTR [r9+24], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+40] + mov rcx, QWORD PTR [r8+40] + pext rdx, rdx, rbp + mov QWORD PTR [r9+32], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+48] + mov rdx, QWORD PTR [r8+48] + pext rax, rax, rbp + mov QWORD PTR [r9+40], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+56] + mov rax, QWORD PTR [r8+56] + pext rcx, rcx, rbp + mov QWORD PTR [r9+48], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+64] + mov rcx, QWORD PTR [r8+64] + pext rdx, rdx, rbp + mov QWORD PTR [r9+56], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+72] + mov rdx, QWORD PTR [r8+72] + pext rax, rax, rbp + mov QWORD PTR [r9+64], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+80] + mov rax, QWORD PTR [r8+80] + pext rcx, rcx, rbp + mov QWORD PTR [r9+72], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+88] + mov rcx, QWORD PTR [r8+88] + pext rdx, rdx, rbp + mov QWORD PTR [r9+80], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+96] + mov rdx, QWORD PTR [r8+96] + pext rax, rax, rbp + mov QWORD PTR [r9+88], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+104] + mov rax, QWORD PTR [r8+104] + pext rcx, rcx, rbp + mov QWORD PTR [r9+96], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+112] + mov rcx, QWORD PTR [r8+112] + pext rdx, rdx, rbp + mov QWORD PTR [r9+104], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+120] + mov rdx, QWORD PTR [r8+120] + pext rax, rax, rbp + mov QWORD PTR [r9+112], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+128] + mov rax, QWORD PTR [r8+128] + pext rcx, rcx, rbp + mov QWORD PTR [r9+120], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+136] + mov rcx, QWORD PTR [r8+136] + pext rdx, rdx, rbp + mov QWORD PTR [r9+128], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+144] + mov rdx, QWORD PTR [r8+144] + pext rax, rax, rbp + mov QWORD PTR [r9+136], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+152] + mov rax, QWORD PTR [r8+152] + pext rcx, rcx, rbp + mov QWORD PTR [r9+144], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+160] + mov rcx, QWORD PTR [r8+160] + pext rdx, rdx, rbp + mov QWORD PTR [r9+152], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+168] + mov rdx, QWORD PTR [r8+168] + pext rax, rax, rbp + mov QWORD PTR [r9+160], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+176] + mov rax, QWORD PTR [r8+176] + pext rcx, rcx, rbp + mov QWORD PTR [r9+168], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+184] + mov rcx, QWORD PTR [r8+184] + pext rdx, rdx, rbp + mov QWORD PTR [r9+176], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+192] + mov rdx, QWORD PTR [r8+192] + pext rax, rax, rbp + mov QWORD PTR [r9+184], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+200] + mov rax, QWORD PTR [r8+200] + pext rcx, rcx, rbp + mov QWORD PTR [r9+192], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+208] + mov rcx, QWORD PTR [r8+208] + pext rdx, rdx, rbp + mov QWORD PTR [r9+200], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+216] + mov rdx, QWORD PTR [r8+216] + pext rax, rax, rbp + mov QWORD PTR [r9+208], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+224] + mov rax, QWORD PTR [r8+224] + pext rcx, rcx, rbp + mov QWORD PTR [r9+216], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+232] + mov rcx, QWORD PTR [r8+232] + pext rdx, rdx, rbp + mov QWORD PTR [r9+224], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+240] + mov rdx, QWORD PTR [r8+240] + pext rax, rax, rbp + mov QWORD PTR [r9+232], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+248] + mov rax, QWORD PTR [r8+248] + pext rcx, rcx, rbp + mov QWORD PTR [r9+240], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+256] + mov rcx, QWORD PTR [r8+256] + pext rdx, rdx, rbp + mov QWORD PTR [r9+248], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+264] + mov rdx, QWORD PTR [r8+264] + pext rax, rax, rbp + mov QWORD PTR [r9+256], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+272] + mov rax, QWORD PTR [r8+272] + pext rcx, rcx, rbp + mov QWORD PTR [r9+264], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+280] + mov rcx, QWORD PTR [r8+280] + pext rdx, rdx, rbp + mov QWORD PTR [r9+272], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+288] + mov rdx, QWORD PTR [r8+288] + pext rax, rax, rbp + mov QWORD PTR [r9+280], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+296] + mov rax, QWORD PTR [r8+296] + pext rcx, rcx, rbp + mov QWORD PTR [r9+288], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+304] + mov rcx, QWORD PTR [r8+304] + pext rdx, rdx, rbp + mov QWORD PTR [r9+296], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+312] + mov rdx, QWORD PTR [r8+312] + pext rax, rax, rbp + mov QWORD PTR [r9+304], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+320] + mov rax, QWORD PTR [r8+320] + pext rcx, rcx, rbp + mov QWORD PTR [r9+312], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+328] + mov rcx, QWORD PTR [r8+328] + pext rdx, rdx, rbp + mov QWORD PTR [r9+320], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+336] + mov rdx, QWORD PTR [r8+336] + pext rax, rax, rbp + mov QWORD PTR [r9+328], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+344] + mov rax, QWORD PTR [r8+344] + pext rcx, rcx, rbp + mov QWORD PTR [r9+336], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+352] + mov rcx, QWORD PTR [r8+352] + pext rdx, rdx, rbp + mov QWORD PTR [r9+344], rax + sbb rcx, rdx + mov rax, QWORD PTR [r10+360] + mov rdx, QWORD PTR [r8+360] + pext rax, rax, rbp + mov QWORD PTR [r9+352], rcx + sbb rdx, rax + mov rcx, QWORD PTR [r10+368] + mov rax, QWORD PTR [r8+368] + pext rcx, rcx, rbp + mov QWORD PTR [r9+360], rdx + sbb rax, rcx + mov rdx, QWORD PTR [r10+376] + mov rcx, QWORD PTR [r8+376] + pext rdx, rdx, rbp + mov QWORD PTR [r9+368], rax + sbb rcx, rdx + mov QWORD PTR [r9+376], rcx + pop rbp + pop rbx + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +sp_3072_mont_reduce_avx2_48 ENDP +_TEXT ENDS +ENDIF +IFNDEF WC_NO_CACHE_RESISTANT +_TEXT SEGMENT READONLY PARA +sp_3072_get_from_table_avx2_48 PROC + sub rsp, 128 + vmovdqu OWORD PTR [rsp], xmm6 + vmovdqu OWORD PTR [rsp+16], xmm7 + vmovdqu OWORD PTR [rsp+32], xmm8 + vmovdqu OWORD PTR [rsp+48], xmm9 + vmovdqu OWORD PTR [rsp+64], xmm10 + vmovdqu OWORD PTR [rsp+80], xmm11 + vmovdqu OWORD PTR [rsp+96], xmm12 + vmovdqu OWORD PTR [rsp+112], xmm13 + mov rax, 1 + movd xmm10, r8 + movd xmm11, rax + 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 + mov r9, QWORD PTR [rdx] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + vmovdqu YMMWORD PTR [rcx], ymm4 + vmovdqu YMMWORD PTR [rcx+32], ymm5 + vmovdqu YMMWORD PTR [rcx+64], ymm6 + vmovdqu YMMWORD PTR [rcx+96], ymm7 + add rcx, 128 + ; 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 + mov r9, QWORD PTR [rdx] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + add r9, 128 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + vmovdqu YMMWORD PTR [rcx], ymm4 + vmovdqu YMMWORD PTR [rcx+32], ymm5 + vmovdqu YMMWORD PTR [rcx+64], ymm6 + vmovdqu YMMWORD PTR [rcx+96], ymm7 + add rcx, 128 + ; 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 + mov r9, QWORD PTR [rdx] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 1 + mov r9, QWORD PTR [rdx+8] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 2 + mov r9, QWORD PTR [rdx+16] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 3 + mov r9, QWORD PTR [rdx+24] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 4 + mov r9, QWORD PTR [rdx+32] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 5 + mov r9, QWORD PTR [rdx+40] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 6 + mov r9, QWORD PTR [rdx+48] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 7 + mov r9, QWORD PTR [rdx+56] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 8 + mov r9, QWORD PTR [rdx+64] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 9 + mov r9, QWORD PTR [rdx+72] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 10 + mov r9, QWORD PTR [rdx+80] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 11 + mov r9, QWORD PTR [rdx+88] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 12 + mov r9, QWORD PTR [rdx+96] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 13 + mov r9, QWORD PTR [rdx+104] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 14 + mov r9, QWORD PTR [rdx+112] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + ; ENTRY: 15 + mov r9, QWORD PTR [rdx+120] + add r9, 256 + vpcmpeqd ymm12, ymm13, ymm10 + vmovdqu ymm0, YMMWORD PTR [r9] + vmovdqu ymm1, YMMWORD PTR [r9+32] + vmovdqu ymm2, YMMWORD PTR [r9+64] + vmovdqu ymm3, YMMWORD PTR [r9+96] + vpand ymm0, ymm0, ymm12 + vpand ymm1, ymm1, ymm12 + vpand ymm2, ymm2, ymm12 + vpand ymm3, ymm3, ymm12 + vpor ymm4, ymm4, ymm0 + vpor ymm5, ymm5, ymm1 + vpor ymm6, ymm6, ymm2 + vpor ymm7, ymm7, ymm3 + vpaddd ymm13, ymm13, ymm11 + vmovdqu YMMWORD PTR [rcx], ymm4 + vmovdqu YMMWORD PTR [rcx+32], ymm5 + vmovdqu YMMWORD PTR [rcx+64], ymm6 + vmovdqu YMMWORD PTR [rcx+96], ymm7 + ; END: 32-47 + vmovdqu xmm6, OWORD PTR [rsp] + vmovdqu xmm7, OWORD PTR [rsp+16] + vmovdqu xmm8, OWORD PTR [rsp+32] + vmovdqu xmm9, OWORD PTR [rsp+48] + vmovdqu xmm10, OWORD PTR [rsp+64] + vmovdqu xmm11, OWORD PTR [rsp+80] + vmovdqu xmm12, OWORD PTR [rsp+96] + vmovdqu xmm13, OWORD PTR [rsp+112] + add rsp, 128 + ret +sp_3072_get_from_table_avx2_48 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_cond_add_24 PROC + sub rsp, 192 + mov rax, 0 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp], r10 + mov QWORD PTR [rsp+8], r11 + mov r10, QWORD PTR [r8+16] + mov r11, QWORD PTR [r8+24] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+16], r10 + mov QWORD PTR [rsp+24], r11 + mov r10, QWORD PTR [r8+32] + mov r11, QWORD PTR [r8+40] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+32], r10 + mov QWORD PTR [rsp+40], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+48], r10 + mov QWORD PTR [rsp+56], r11 + mov r10, QWORD PTR [r8+64] + mov r11, QWORD PTR [r8+72] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+64], r10 + mov QWORD PTR [rsp+72], r11 + mov r10, QWORD PTR [r8+80] + mov r11, QWORD PTR [r8+88] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+80], r10 + mov QWORD PTR [rsp+88], r11 + mov r10, QWORD PTR [r8+96] + mov r11, QWORD PTR [r8+104] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+96], r10 + mov QWORD PTR [rsp+104], r11 + mov r10, QWORD PTR [r8+112] + mov r11, QWORD PTR [r8+120] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+112], r10 + mov QWORD PTR [rsp+120], r11 + mov r10, QWORD PTR [r8+128] + mov r11, QWORD PTR [r8+136] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+128], r10 + mov QWORD PTR [rsp+136], r11 + mov r10, QWORD PTR [r8+144] + mov r11, QWORD PTR [r8+152] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+144], r10 + mov QWORD PTR [rsp+152], r11 + mov r10, QWORD PTR [r8+160] + mov r11, QWORD PTR [r8+168] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+160], r10 + mov QWORD PTR [rsp+168], r11 + mov r10, QWORD PTR [r8+176] + mov r11, QWORD PTR [r8+184] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+176], r10 + mov QWORD PTR [rsp+184], r11 + mov r10, QWORD PTR [rdx] + mov r8, QWORD PTR [rsp] + add r10, r8 + mov r11, QWORD PTR [rdx+8] + mov r8, QWORD PTR [rsp+8] + adc r11, r8 + mov QWORD PTR [rcx], r10 + mov r10, QWORD PTR [rdx+16] + mov r8, QWORD PTR [rsp+16] + adc r10, r8 + mov QWORD PTR [rcx+8], r11 + mov r11, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rsp+24] + adc r11, r8 + mov QWORD PTR [rcx+16], r10 + mov r10, QWORD PTR [rdx+32] + mov r8, QWORD PTR [rsp+32] + adc r10, r8 + mov QWORD PTR [rcx+24], r11 + mov r11, QWORD PTR [rdx+40] + mov r8, QWORD PTR [rsp+40] + adc r11, r8 + mov QWORD PTR [rcx+32], r10 + mov r10, QWORD PTR [rdx+48] + mov r8, QWORD PTR [rsp+48] + adc r10, r8 + mov QWORD PTR [rcx+40], r11 + mov r11, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rsp+56] + adc r11, r8 + mov QWORD PTR [rcx+48], r10 + mov r10, QWORD PTR [rdx+64] + mov r8, QWORD PTR [rsp+64] + adc r10, r8 + mov QWORD PTR [rcx+56], r11 + mov r11, QWORD PTR [rdx+72] + mov r8, QWORD PTR [rsp+72] + adc r11, r8 + mov QWORD PTR [rcx+64], r10 + mov r10, QWORD PTR [rdx+80] + mov r8, QWORD PTR [rsp+80] + adc r10, r8 + mov QWORD PTR [rcx+72], r11 + mov r11, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rsp+88] + adc r11, r8 + mov QWORD PTR [rcx+80], r10 + mov r10, QWORD PTR [rdx+96] + mov r8, QWORD PTR [rsp+96] + adc r10, r8 + mov QWORD PTR [rcx+88], r11 + mov r11, QWORD PTR [rdx+104] + mov r8, QWORD PTR [rsp+104] + adc r11, r8 + mov QWORD PTR [rcx+96], r10 + mov r10, QWORD PTR [rdx+112] + mov r8, QWORD PTR [rsp+112] + adc r10, r8 + mov QWORD PTR [rcx+104], r11 + mov r11, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rsp+120] + adc r11, r8 + mov QWORD PTR [rcx+112], r10 + mov r10, QWORD PTR [rdx+128] + mov r8, QWORD PTR [rsp+128] + adc r10, r8 + mov QWORD PTR [rcx+120], r11 + mov r11, QWORD PTR [rdx+136] + mov r8, QWORD PTR [rsp+136] + adc r11, r8 + mov QWORD PTR [rcx+128], r10 + mov r10, QWORD PTR [rdx+144] + mov r8, QWORD PTR [rsp+144] + adc r10, r8 + mov QWORD PTR [rcx+136], r11 + mov r11, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rsp+152] + adc r11, r8 + mov QWORD PTR [rcx+144], r10 + mov r10, QWORD PTR [rdx+160] + mov r8, QWORD PTR [rsp+160] + adc r10, r8 + mov QWORD PTR [rcx+152], r11 + mov r11, QWORD PTR [rdx+168] + mov r8, QWORD PTR [rsp+168] + adc r11, r8 + mov QWORD PTR [rcx+160], r10 + mov r10, QWORD PTR [rdx+176] + mov r8, QWORD PTR [rsp+176] + adc r10, r8 + mov QWORD PTR [rcx+168], r11 + mov r11, QWORD PTR [rdx+184] + mov r8, QWORD PTR [rsp+184] + adc r11, r8 + mov QWORD PTR [rcx+176], r10 + mov QWORD PTR [rcx+184], r11 + adc rax, 0 + add rsp, 192 + ret +sp_3072_cond_add_24 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_cond_add_avx2_24 PROC + push r12 + mov rax, 0 + mov r12, QWORD PTR [r8] + mov r10, QWORD PTR [rdx] + pext r12, r12, r9 + add r10, r12 + mov r12, QWORD PTR [r8+8] + mov r11, QWORD PTR [rdx+8] + pext r12, r12, r9 + mov QWORD PTR [rcx], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+16] + mov r12, QWORD PTR [rdx+16] + pext r10, r10, r9 + mov QWORD PTR [rcx+8], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+24] + mov r10, QWORD PTR [rdx+24] + pext r11, r11, r9 + mov QWORD PTR [rcx+16], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+32] + mov r11, QWORD PTR [rdx+32] + pext r12, r12, r9 + mov QWORD PTR [rcx+24], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+40] + mov r12, QWORD PTR [rdx+40] + pext r10, r10, r9 + mov QWORD PTR [rcx+32], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+48] + pext r11, r11, r9 + mov QWORD PTR [rcx+40], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+56] + mov r11, QWORD PTR [rdx+56] + pext r12, r12, r9 + mov QWORD PTR [rcx+48], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+64] + mov r12, QWORD PTR [rdx+64] + pext r10, r10, r9 + mov QWORD PTR [rcx+56], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+72] + mov r10, QWORD PTR [rdx+72] + pext r11, r11, r9 + mov QWORD PTR [rcx+64], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+80] + mov r11, QWORD PTR [rdx+80] + pext r12, r12, r9 + mov QWORD PTR [rcx+72], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+88] + mov r12, QWORD PTR [rdx+88] + pext r10, r10, r9 + mov QWORD PTR [rcx+80], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+96] + pext r11, r11, r9 + mov QWORD PTR [rcx+88], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+104] + mov r11, QWORD PTR [rdx+104] + pext r12, r12, r9 + mov QWORD PTR [rcx+96], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+112] + mov r12, QWORD PTR [rdx+112] + pext r10, r10, r9 + mov QWORD PTR [rcx+104], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+120] + mov r10, QWORD PTR [rdx+120] + pext r11, r11, r9 + mov QWORD PTR [rcx+112], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+128] + mov r11, QWORD PTR [rdx+128] + pext r12, r12, r9 + mov QWORD PTR [rcx+120], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+136] + mov r12, QWORD PTR [rdx+136] + pext r10, r10, r9 + mov QWORD PTR [rcx+128], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+144] + mov r10, QWORD PTR [rdx+144] + pext r11, r11, r9 + mov QWORD PTR [rcx+136], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+152] + mov r11, QWORD PTR [rdx+152] + pext r12, r12, r9 + mov QWORD PTR [rcx+144], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+160] + mov r12, QWORD PTR [rdx+160] + pext r10, r10, r9 + mov QWORD PTR [rcx+152], r11 + adc r12, r10 + mov r11, QWORD PTR [r8+168] + mov r10, QWORD PTR [rdx+168] + pext r11, r11, r9 + mov QWORD PTR [rcx+160], r12 + adc r10, r11 + mov r12, QWORD PTR [r8+176] + mov r11, QWORD PTR [rdx+176] + pext r12, r12, r9 + mov QWORD PTR [rcx+168], r10 + adc r11, r12 + mov r10, QWORD PTR [r8+184] + mov r12, QWORD PTR [rdx+184] + pext r10, r10, r9 + mov QWORD PTR [rcx+176], r11 + adc r12, r10 + mov QWORD PTR [rcx+184], r12 + adc rax, 0 + pop r12 + ret +sp_3072_cond_add_avx2_24 ENDP +_TEXT ENDS +ENDIF +; /* Shift number left by n bit. (r = a << n) +; * +; * r Result of left shift by n. +; * a Number to shift. +; * n Amoutnt o shift. +; */ +_TEXT SEGMENT READONLY PARA +sp_3072_lshift_48 PROC + push r12 + push r13 + mov rax, rcx + mov cl, r8b + mov r12, 0 + mov r13, QWORD PTR [rdx+344] + mov r8, QWORD PTR [rdx+352] + mov r9, QWORD PTR [rdx+360] + mov r10, QWORD PTR [rdx+368] + mov r11, QWORD PTR [rdx+376] + shld r12, r11, cl + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+352], r8 + mov QWORD PTR [rax+360], r9 + mov QWORD PTR [rax+368], r10 + mov QWORD PTR [rax+376], r11 + mov QWORD PTR [rax+384], r12 + mov r11, QWORD PTR [rdx+312] + mov r8, QWORD PTR [rdx+320] + mov r9, QWORD PTR [rdx+328] + mov r10, QWORD PTR [rdx+336] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+320], r8 + mov QWORD PTR [rax+328], r9 + mov QWORD PTR [rax+336], r10 + mov QWORD PTR [rax+344], r13 + mov r13, QWORD PTR [rdx+280] + mov r8, QWORD PTR [rdx+288] + mov r9, QWORD PTR [rdx+296] + mov r10, QWORD PTR [rdx+304] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+288], r8 + mov QWORD PTR [rax+296], r9 + mov QWORD PTR [rax+304], r10 + mov QWORD PTR [rax+312], r11 + mov r11, QWORD PTR [rdx+248] + mov r8, QWORD PTR [rdx+256] + mov r9, QWORD PTR [rdx+264] + mov r10, QWORD PTR [rdx+272] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+256], r8 + mov QWORD PTR [rax+264], r9 + mov QWORD PTR [rax+272], r10 + mov QWORD PTR [rax+280], r13 + mov r13, QWORD PTR [rdx+216] + mov r8, QWORD PTR [rdx+224] + mov r9, QWORD PTR [rdx+232] + mov r10, QWORD PTR [rdx+240] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+224], r8 + mov QWORD PTR [rax+232], r9 + mov QWORD PTR [rax+240], r10 + mov QWORD PTR [rax+248], r11 + mov r11, QWORD PTR [rdx+184] + mov r8, QWORD PTR [rdx+192] + mov r9, QWORD PTR [rdx+200] + mov r10, QWORD PTR [rdx+208] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+192], r8 + mov QWORD PTR [rax+200], r9 + mov QWORD PTR [rax+208], r10 + mov QWORD PTR [rax+216], r13 + mov r13, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rdx+160] + mov r9, QWORD PTR [rdx+168] + mov r10, QWORD PTR [rdx+176] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+160], r8 + mov QWORD PTR [rax+168], r9 + mov QWORD PTR [rax+176], r10 + mov QWORD PTR [rax+184], r11 + mov r11, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rdx+128] + mov r9, QWORD PTR [rdx+136] + mov r10, QWORD PTR [rdx+144] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+128], r8 + mov QWORD PTR [rax+136], r9 + mov QWORD PTR [rax+144], r10 + mov QWORD PTR [rax+152], r13 + mov r13, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rdx+96] + mov r9, QWORD PTR [rdx+104] + mov r10, QWORD PTR [rdx+112] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+96], r8 + mov QWORD PTR [rax+104], r9 + mov QWORD PTR [rax+112], r10 + mov QWORD PTR [rax+120], r11 + mov r11, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rdx+64] + mov r9, QWORD PTR [rdx+72] + mov r10, QWORD PTR [rdx+80] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r11, cl + mov QWORD PTR [rax+64], r8 + mov QWORD PTR [rax+72], r9 + mov QWORD PTR [rax+80], r10 + mov QWORD PTR [rax+88], r13 + mov r13, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rdx+32] + mov r9, QWORD PTR [rdx+40] + mov r10, QWORD PTR [rdx+48] + shld r11, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shld r8, r13, cl + mov QWORD PTR [rax+32], r8 + mov QWORD PTR [rax+40], r9 + mov QWORD PTR [rax+48], r10 + mov QWORD PTR [rax+56], r11 + mov r8, QWORD PTR [rdx] + mov r9, QWORD PTR [rdx+8] + mov r10, QWORD PTR [rdx+16] + shld r13, r10, cl + shld r10, r9, cl + shld r9, r8, cl + shl r8, cl + mov QWORD PTR [rax], r8 + mov QWORD PTR [rax+8], r9 + mov QWORD PTR [rax+16], r10 + mov QWORD PTR [rax+24], r13 + pop r13 + pop r12 + ret +sp_3072_lshift_48 ENDP +_TEXT ENDS +ENDIF +ENDIF +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_from_bin_bswap PROC + push r12 + push r13 + mov r11, r8 + mov r12, rcx + add r11, r9 + add r12, 512 + xor r13, r13 + jmp L_4096_from_bin_bswap_64_end +L_4096_from_bin_bswap_64_start: + sub r11, 64 + mov rax, QWORD PTR [r11+56] + mov r10, QWORD PTR [r11+48] + bswap rax + bswap r10 + mov QWORD PTR [rcx], rax + mov QWORD PTR [rcx+8], r10 + mov rax, QWORD PTR [r11+40] + mov r10, QWORD PTR [r11+32] + bswap rax + bswap r10 + mov QWORD PTR [rcx+16], rax + mov QWORD PTR [rcx+24], r10 + mov rax, QWORD PTR [r11+24] + mov r10, QWORD PTR [r11+16] + bswap rax + bswap r10 + mov QWORD PTR [rcx+32], rax + mov QWORD PTR [rcx+40], r10 + mov rax, QWORD PTR [r11+8] + mov r10, QWORD PTR [r11] + bswap rax + bswap r10 + mov QWORD PTR [rcx+48], rax + mov QWORD PTR [rcx+56], r10 + add rcx, 64 + sub r9, 64 +L_4096_from_bin_bswap_64_end: + cmp r9, 63 + jg L_4096_from_bin_bswap_64_start + jmp L_4096_from_bin_bswap_8_end +L_4096_from_bin_bswap_8_start: + sub r11, 8 + mov rax, QWORD PTR [r11] + bswap rax + mov QWORD PTR [rcx], rax + add rcx, 8 + sub r9, 8 +L_4096_from_bin_bswap_8_end: + cmp r9, 7 + jg L_4096_from_bin_bswap_8_start + cmp r9, r13 + je L_4096_from_bin_bswap_hi_end + mov r10, r13 + mov rax, r13 +L_4096_from_bin_bswap_hi_start: + mov al, BYTE PTR [r8] + shl r10, 8 + inc r8 + add r10, rax + dec r9 + jg L_4096_from_bin_bswap_hi_start + mov QWORD PTR [rcx], r10 + add rcx, 8 +L_4096_from_bin_bswap_hi_end: + cmp rcx, r12 + jge L_4096_from_bin_bswap_zero_end +L_4096_from_bin_bswap_zero_start: + mov QWORD PTR [rcx], r13 + add rcx, 8 + cmp rcx, r12 + jl L_4096_from_bin_bswap_zero_start +L_4096_from_bin_bswap_zero_end: + pop r13 + pop r12 + ret +sp_4096_from_bin_bswap ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_from_bin_movbe PROC + push r12 + mov r11, r8 + mov r12, rcx + add r11, r9 + add r12, 512 + jmp L_4096_from_bin_movbe_64_end +L_4096_from_bin_movbe_64_start: + sub r11, 64 + movbe rax, QWORD PTR [r11+56] + movbe r10, QWORD PTR [r11+48] + mov QWORD PTR [rcx], rax + mov QWORD PTR [rcx+8], r10 + movbe rax, QWORD PTR [r11+40] + movbe r10, QWORD PTR [r11+32] + mov QWORD PTR [rcx+16], rax + mov QWORD PTR [rcx+24], r10 + movbe rax, QWORD PTR [r11+24] + movbe r10, QWORD PTR [r11+16] + mov QWORD PTR [rcx+32], rax + mov QWORD PTR [rcx+40], r10 + movbe rax, QWORD PTR [r11+8] + movbe r10, QWORD PTR [r11] + mov QWORD PTR [rcx+48], rax + mov QWORD PTR [rcx+56], r10 + add rcx, 64 + sub r9, 64 +L_4096_from_bin_movbe_64_end: + cmp r9, 63 + jg L_4096_from_bin_movbe_64_start + jmp L_4096_from_bin_movbe_8_end +L_4096_from_bin_movbe_8_start: + sub r11, 8 + movbe rax, QWORD PTR [r11] + mov QWORD PTR [rcx], rax + add rcx, 8 + sub r9, 8 +L_4096_from_bin_movbe_8_end: + cmp r9, 7 + jg L_4096_from_bin_movbe_8_start + cmp r9, 0 + je L_4096_from_bin_movbe_hi_end + mov r10, 0 + mov rax, 0 +L_4096_from_bin_movbe_hi_start: + mov al, BYTE PTR [r8] + shl r10, 8 + inc r8 + add r10, rax + dec r9 + jg L_4096_from_bin_movbe_hi_start + mov QWORD PTR [rcx], r10 + add rcx, 8 +L_4096_from_bin_movbe_hi_end: + cmp rcx, r12 + jge L_4096_from_bin_movbe_zero_end +L_4096_from_bin_movbe_zero_start: + mov QWORD PTR [rcx], 0 + add rcx, 8 + cmp rcx, r12 + jl L_4096_from_bin_movbe_zero_start +L_4096_from_bin_movbe_zero_end: pop r12 ret -sp_4096_cmp_64 ENDP +sp_4096_from_bin_movbe ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_to_bin_bswap_64 PROC + mov rax, QWORD PTR [rcx+504] + mov r8, QWORD PTR [rcx+496] + bswap rax + bswap r8 + mov QWORD PTR [rdx], rax + mov QWORD PTR [rdx+8], r8 + mov rax, QWORD PTR [rcx+488] + mov r8, QWORD PTR [rcx+480] + bswap rax + bswap r8 + mov QWORD PTR [rdx+16], rax + mov QWORD PTR [rdx+24], r8 + mov rax, QWORD PTR [rcx+472] + mov r8, QWORD PTR [rcx+464] + bswap rax + bswap r8 + mov QWORD PTR [rdx+32], rax + mov QWORD PTR [rdx+40], r8 + mov rax, QWORD PTR [rcx+456] + mov r8, QWORD PTR [rcx+448] + bswap rax + bswap r8 + mov QWORD PTR [rdx+48], rax + mov QWORD PTR [rdx+56], r8 + mov rax, QWORD PTR [rcx+440] + mov r8, QWORD PTR [rcx+432] + bswap rax + bswap r8 + mov QWORD PTR [rdx+64], rax + mov QWORD PTR [rdx+72], r8 + mov rax, QWORD PTR [rcx+424] + mov r8, QWORD PTR [rcx+416] + bswap rax + bswap r8 + mov QWORD PTR [rdx+80], rax + mov QWORD PTR [rdx+88], r8 + mov rax, QWORD PTR [rcx+408] + mov r8, QWORD PTR [rcx+400] + bswap rax + bswap r8 + mov QWORD PTR [rdx+96], rax + mov QWORD PTR [rdx+104], r8 + mov rax, QWORD PTR [rcx+392] + mov r8, QWORD PTR [rcx+384] + bswap rax + bswap r8 + mov QWORD PTR [rdx+112], rax + mov QWORD PTR [rdx+120], r8 + mov rax, QWORD PTR [rcx+376] + mov r8, QWORD PTR [rcx+368] + bswap rax + bswap r8 + mov QWORD PTR [rdx+128], rax + mov QWORD PTR [rdx+136], r8 + mov rax, QWORD PTR [rcx+360] + mov r8, QWORD PTR [rcx+352] + bswap rax + bswap r8 + mov QWORD PTR [rdx+144], rax + mov QWORD PTR [rdx+152], r8 + mov rax, QWORD PTR [rcx+344] + mov r8, QWORD PTR [rcx+336] + bswap rax + bswap r8 + mov QWORD PTR [rdx+160], rax + mov QWORD PTR [rdx+168], r8 + mov rax, QWORD PTR [rcx+328] + mov r8, QWORD PTR [rcx+320] + bswap rax + bswap r8 + mov QWORD PTR [rdx+176], rax + mov QWORD PTR [rdx+184], r8 + mov rax, QWORD PTR [rcx+312] + mov r8, QWORD PTR [rcx+304] + bswap rax + bswap r8 + mov QWORD PTR [rdx+192], rax + mov QWORD PTR [rdx+200], r8 + mov rax, QWORD PTR [rcx+296] + mov r8, QWORD PTR [rcx+288] + bswap rax + bswap r8 + mov QWORD PTR [rdx+208], rax + mov QWORD PTR [rdx+216], r8 + mov rax, QWORD PTR [rcx+280] + mov r8, QWORD PTR [rcx+272] + bswap rax + bswap r8 + mov QWORD PTR [rdx+224], rax + mov QWORD PTR [rdx+232], r8 + mov rax, QWORD PTR [rcx+264] + mov r8, QWORD PTR [rcx+256] + bswap rax + bswap r8 + mov QWORD PTR [rdx+240], rax + mov QWORD PTR [rdx+248], r8 + mov rax, QWORD PTR [rcx+248] + mov r8, QWORD PTR [rcx+240] + bswap rax + bswap r8 + mov QWORD PTR [rdx+256], rax + mov QWORD PTR [rdx+264], r8 + mov rax, QWORD PTR [rcx+232] + mov r8, QWORD PTR [rcx+224] + bswap rax + bswap r8 + mov QWORD PTR [rdx+272], rax + mov QWORD PTR [rdx+280], r8 + mov rax, QWORD PTR [rcx+216] + mov r8, QWORD PTR [rcx+208] + bswap rax + bswap r8 + mov QWORD PTR [rdx+288], rax + mov QWORD PTR [rdx+296], r8 + mov rax, QWORD PTR [rcx+200] + mov r8, QWORD PTR [rcx+192] + bswap rax + bswap r8 + mov QWORD PTR [rdx+304], rax + mov QWORD PTR [rdx+312], r8 + mov rax, QWORD PTR [rcx+184] + mov r8, QWORD PTR [rcx+176] + bswap rax + bswap r8 + mov QWORD PTR [rdx+320], rax + mov QWORD PTR [rdx+328], r8 + mov rax, QWORD PTR [rcx+168] + mov r8, QWORD PTR [rcx+160] + bswap rax + bswap r8 + mov QWORD PTR [rdx+336], rax + mov QWORD PTR [rdx+344], r8 + mov rax, QWORD PTR [rcx+152] + mov r8, QWORD PTR [rcx+144] + bswap rax + bswap r8 + mov QWORD PTR [rdx+352], rax + mov QWORD PTR [rdx+360], r8 + mov rax, QWORD PTR [rcx+136] + mov r8, QWORD PTR [rcx+128] + bswap rax + bswap r8 + mov QWORD PTR [rdx+368], rax + mov QWORD PTR [rdx+376], r8 + mov rax, QWORD PTR [rcx+120] + mov r8, QWORD PTR [rcx+112] + bswap rax + bswap r8 + mov QWORD PTR [rdx+384], rax + mov QWORD PTR [rdx+392], r8 + mov rax, QWORD PTR [rcx+104] + mov r8, QWORD PTR [rcx+96] + bswap rax + bswap r8 + mov QWORD PTR [rdx+400], rax + mov QWORD PTR [rdx+408], r8 + mov rax, QWORD PTR [rcx+88] + mov r8, QWORD PTR [rcx+80] + bswap rax + bswap r8 + mov QWORD PTR [rdx+416], rax + mov QWORD PTR [rdx+424], r8 + mov rax, QWORD PTR [rcx+72] + mov r8, QWORD PTR [rcx+64] + bswap rax + bswap r8 + mov QWORD PTR [rdx+432], rax + mov QWORD PTR [rdx+440], r8 + mov rax, QWORD PTR [rcx+56] + mov r8, QWORD PTR [rcx+48] + bswap rax + bswap r8 + mov QWORD PTR [rdx+448], rax + mov QWORD PTR [rdx+456], r8 + mov rax, QWORD PTR [rcx+40] + mov r8, QWORD PTR [rcx+32] + bswap rax + bswap r8 + mov QWORD PTR [rdx+464], rax + mov QWORD PTR [rdx+472], r8 + mov rax, QWORD PTR [rcx+24] + mov r8, QWORD PTR [rcx+16] + bswap rax + bswap r8 + mov QWORD PTR [rdx+480], rax + mov QWORD PTR [rdx+488], r8 + mov rax, QWORD PTR [rcx+8] + mov r8, QWORD PTR [rcx] + bswap rax + bswap r8 + mov QWORD PTR [rdx+496], rax + mov QWORD PTR [rdx+504], r8 + ret +sp_4096_to_bin_bswap_64 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_to_bin_movbe_64 PROC + movbe rax, QWORD PTR [rcx+504] + movbe r8, QWORD PTR [rcx+496] + mov QWORD PTR [rdx], rax + mov QWORD PTR [rdx+8], r8 + movbe rax, QWORD PTR [rcx+488] + movbe r8, QWORD PTR [rcx+480] + mov QWORD PTR [rdx+16], rax + mov QWORD PTR [rdx+24], r8 + movbe rax, QWORD PTR [rcx+472] + movbe r8, QWORD PTR [rcx+464] + mov QWORD PTR [rdx+32], rax + mov QWORD PTR [rdx+40], r8 + movbe rax, QWORD PTR [rcx+456] + movbe r8, QWORD PTR [rcx+448] + mov QWORD PTR [rdx+48], rax + mov QWORD PTR [rdx+56], r8 + movbe rax, QWORD PTR [rcx+440] + movbe r8, QWORD PTR [rcx+432] + mov QWORD PTR [rdx+64], rax + mov QWORD PTR [rdx+72], r8 + movbe rax, QWORD PTR [rcx+424] + movbe r8, QWORD PTR [rcx+416] + mov QWORD PTR [rdx+80], rax + mov QWORD PTR [rdx+88], r8 + movbe rax, QWORD PTR [rcx+408] + movbe r8, QWORD PTR [rcx+400] + mov QWORD PTR [rdx+96], rax + mov QWORD PTR [rdx+104], r8 + movbe rax, QWORD PTR [rcx+392] + movbe r8, QWORD PTR [rcx+384] + mov QWORD PTR [rdx+112], rax + mov QWORD PTR [rdx+120], r8 + movbe rax, QWORD PTR [rcx+376] + movbe r8, QWORD PTR [rcx+368] + mov QWORD PTR [rdx+128], rax + mov QWORD PTR [rdx+136], r8 + movbe rax, QWORD PTR [rcx+360] + movbe r8, QWORD PTR [rcx+352] + mov QWORD PTR [rdx+144], rax + mov QWORD PTR [rdx+152], r8 + movbe rax, QWORD PTR [rcx+344] + movbe r8, QWORD PTR [rcx+336] + mov QWORD PTR [rdx+160], rax + mov QWORD PTR [rdx+168], r8 + movbe rax, QWORD PTR [rcx+328] + movbe r8, QWORD PTR [rcx+320] + mov QWORD PTR [rdx+176], rax + mov QWORD PTR [rdx+184], r8 + movbe rax, QWORD PTR [rcx+312] + movbe r8, QWORD PTR [rcx+304] + mov QWORD PTR [rdx+192], rax + mov QWORD PTR [rdx+200], r8 + movbe rax, QWORD PTR [rcx+296] + movbe r8, QWORD PTR [rcx+288] + mov QWORD PTR [rdx+208], rax + mov QWORD PTR [rdx+216], r8 + movbe rax, QWORD PTR [rcx+280] + movbe r8, QWORD PTR [rcx+272] + mov QWORD PTR [rdx+224], rax + mov QWORD PTR [rdx+232], r8 + movbe rax, QWORD PTR [rcx+264] + movbe r8, QWORD PTR [rcx+256] + mov QWORD PTR [rdx+240], rax + mov QWORD PTR [rdx+248], r8 + movbe rax, QWORD PTR [rcx+248] + movbe r8, QWORD PTR [rcx+240] + mov QWORD PTR [rdx+256], rax + mov QWORD PTR [rdx+264], r8 + movbe rax, QWORD PTR [rcx+232] + movbe r8, QWORD PTR [rcx+224] + mov QWORD PTR [rdx+272], rax + mov QWORD PTR [rdx+280], r8 + movbe rax, QWORD PTR [rcx+216] + movbe r8, QWORD PTR [rcx+208] + mov QWORD PTR [rdx+288], rax + mov QWORD PTR [rdx+296], r8 + movbe rax, QWORD PTR [rcx+200] + movbe r8, QWORD PTR [rcx+192] + mov QWORD PTR [rdx+304], rax + mov QWORD PTR [rdx+312], r8 + movbe rax, QWORD PTR [rcx+184] + movbe r8, QWORD PTR [rcx+176] + mov QWORD PTR [rdx+320], rax + mov QWORD PTR [rdx+328], r8 + movbe rax, QWORD PTR [rcx+168] + movbe r8, QWORD PTR [rcx+160] + mov QWORD PTR [rdx+336], rax + mov QWORD PTR [rdx+344], r8 + movbe rax, QWORD PTR [rcx+152] + movbe r8, QWORD PTR [rcx+144] + mov QWORD PTR [rdx+352], rax + mov QWORD PTR [rdx+360], r8 + movbe rax, QWORD PTR [rcx+136] + movbe r8, QWORD PTR [rcx+128] + mov QWORD PTR [rdx+368], rax + mov QWORD PTR [rdx+376], r8 + movbe rax, QWORD PTR [rcx+120] + movbe r8, QWORD PTR [rcx+112] + mov QWORD PTR [rdx+384], rax + mov QWORD PTR [rdx+392], r8 + movbe rax, QWORD PTR [rcx+104] + movbe r8, QWORD PTR [rcx+96] + mov QWORD PTR [rdx+400], rax + mov QWORD PTR [rdx+408], r8 + movbe rax, QWORD PTR [rcx+88] + movbe r8, QWORD PTR [rcx+80] + mov QWORD PTR [rdx+416], rax + mov QWORD PTR [rdx+424], r8 + movbe rax, QWORD PTR [rcx+72] + movbe r8, QWORD PTR [rcx+64] + mov QWORD PTR [rdx+432], rax + mov QWORD PTR [rdx+440], r8 + movbe rax, QWORD PTR [rcx+56] + movbe r8, QWORD PTR [rcx+48] + mov QWORD PTR [rdx+448], rax + mov QWORD PTR [rdx+456], r8 + movbe rax, QWORD PTR [rcx+40] + movbe r8, QWORD PTR [rcx+32] + mov QWORD PTR [rdx+464], rax + mov QWORD PTR [rdx+472], r8 + movbe rax, QWORD PTR [rcx+24] + movbe r8, QWORD PTR [rcx+16] + mov QWORD PTR [rdx+480], rax + mov QWORD PTR [rdx+488], r8 + movbe rax, QWORD PTR [rcx+8] + movbe r8, QWORD PTR [rcx] + mov QWORD PTR [rdx+496], rax + mov QWORD PTR [rdx+504], r8 + ret +sp_4096_to_bin_movbe_64 ENDP _TEXT ENDS -IFNDEF WC_NO_CACHE_RESISTANT +ENDIF +; /* Sub b from a into a. (a -= b) +; * +; * a A single precision integer and result. +; * b A single precision integer. +; */ _TEXT SEGMENT READONLY PARA -sp_4096_get_from_table_64 PROC - sub rsp, 128 - movdqu OWORD PTR [rsp], xmm6 - movdqu OWORD PTR [rsp+16], xmm7 - movdqu OWORD PTR [rsp+32], xmm8 - movdqu OWORD PTR [rsp+48], xmm9 - movdqu OWORD PTR [rsp+64], xmm10 - movdqu OWORD PTR [rsp+80], xmm11 - movdqu OWORD PTR [rsp+96], xmm12 - movdqu OWORD PTR [rsp+112], xmm13 - mov rax, 1 - movd xmm10, r8 - movd xmm11, rax - pxor xmm13, xmm13 - pshufd xmm11, xmm11, 0 - pshufd xmm10, xmm10, 0 - ; START: 0-7 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 0-7 - ; START: 8-15 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 64 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 8-15 - ; START: 16-23 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 128 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 16-23 - ; START: 24-31 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 - mov r9, QWORD PTR [rdx+32] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 - mov r9, QWORD PTR [rdx+80] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 192 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 24-31 - ; START: 32-39 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 +sp_4096_sub_in_place_64 PROC + mov r8, QWORD PTR [rcx] + sub r8, QWORD PTR [rdx] + mov r9, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + sbb r9, QWORD PTR [rdx+8] + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], r9 + sbb r8, QWORD PTR [rdx+16] + mov r9, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + sbb r9, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], r9 + sbb r8, QWORD PTR [rdx+32] + mov r9, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + sbb r9, QWORD PTR [rdx+40] + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], r9 + sbb r8, QWORD PTR [rdx+48] + mov r9, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + sbb r9, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], r9 + sbb r8, QWORD PTR [rdx+64] + mov r9, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + sbb r9, QWORD PTR [rdx+72] + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], r9 + sbb r8, QWORD PTR [rdx+80] + mov r9, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + sbb r9, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rcx+96] + mov QWORD PTR [rcx+88], r9 + sbb r8, QWORD PTR [rdx+96] + mov r9, QWORD PTR [rcx+104] + mov QWORD PTR [rcx+96], r8 + sbb r9, QWORD PTR [rdx+104] + mov r8, QWORD PTR [rcx+112] + mov QWORD PTR [rcx+104], r9 + sbb r8, QWORD PTR [rdx+112] + mov r9, QWORD PTR [rcx+120] + mov QWORD PTR [rcx+112], r8 + sbb r9, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rcx+128] + mov QWORD PTR [rcx+120], r9 + sbb r8, QWORD PTR [rdx+128] + mov r9, QWORD PTR [rcx+136] + mov QWORD PTR [rcx+128], r8 + sbb r9, QWORD PTR [rdx+136] + mov r8, QWORD PTR [rcx+144] + mov QWORD PTR [rcx+136], r9 + sbb r8, QWORD PTR [rdx+144] + mov r9, QWORD PTR [rcx+152] + mov QWORD PTR [rcx+144], r8 + sbb r9, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rcx+160] + mov QWORD PTR [rcx+152], r9 + sbb r8, QWORD PTR [rdx+160] + mov r9, QWORD PTR [rcx+168] + mov QWORD PTR [rcx+160], r8 + sbb r9, QWORD PTR [rdx+168] + mov r8, QWORD PTR [rcx+176] + mov QWORD PTR [rcx+168], r9 + sbb r8, QWORD PTR [rdx+176] + mov r9, QWORD PTR [rcx+184] + mov QWORD PTR [rcx+176], r8 + sbb r9, QWORD PTR [rdx+184] + mov r8, QWORD PTR [rcx+192] + mov QWORD PTR [rcx+184], r9 + sbb r8, QWORD PTR [rdx+192] + mov r9, QWORD PTR [rcx+200] + mov QWORD PTR [rcx+192], r8 + sbb r9, QWORD PTR [rdx+200] + mov r8, QWORD PTR [rcx+208] + mov QWORD PTR [rcx+200], r9 + sbb r8, QWORD PTR [rdx+208] + mov r9, QWORD PTR [rcx+216] + mov QWORD PTR [rcx+208], r8 + sbb r9, QWORD PTR [rdx+216] + mov r8, QWORD PTR [rcx+224] + mov QWORD PTR [rcx+216], r9 + sbb r8, QWORD PTR [rdx+224] + mov r9, QWORD PTR [rcx+232] + mov QWORD PTR [rcx+224], r8 + sbb r9, QWORD PTR [rdx+232] + mov r8, QWORD PTR [rcx+240] + mov QWORD PTR [rcx+232], r9 + sbb r8, QWORD PTR [rdx+240] + mov r9, QWORD PTR [rcx+248] + mov QWORD PTR [rcx+240], r8 + sbb r9, QWORD PTR [rdx+248] + mov r8, QWORD PTR [rcx+256] + mov QWORD PTR [rcx+248], r9 + sbb r8, QWORD PTR [rdx+256] + mov r9, QWORD PTR [rcx+264] + mov QWORD PTR [rcx+256], r8 + sbb r9, QWORD PTR [rdx+264] + mov r8, QWORD PTR [rcx+272] + mov QWORD PTR [rcx+264], r9 + sbb r8, QWORD PTR [rdx+272] + mov r9, QWORD PTR [rcx+280] + mov QWORD PTR [rcx+272], r8 + sbb r9, QWORD PTR [rdx+280] + mov r8, QWORD PTR [rcx+288] + mov QWORD PTR [rcx+280], r9 + sbb r8, QWORD PTR [rdx+288] + mov r9, QWORD PTR [rcx+296] + mov QWORD PTR [rcx+288], r8 + sbb r9, QWORD PTR [rdx+296] + mov r8, QWORD PTR [rcx+304] + mov QWORD PTR [rcx+296], r9 + sbb r8, QWORD PTR [rdx+304] + mov r9, QWORD PTR [rcx+312] + mov QWORD PTR [rcx+304], r8 + sbb r9, QWORD PTR [rdx+312] + mov r8, QWORD PTR [rcx+320] + mov QWORD PTR [rcx+312], r9 + sbb r8, QWORD PTR [rdx+320] + mov r9, QWORD PTR [rcx+328] + mov QWORD PTR [rcx+320], r8 + sbb r9, QWORD PTR [rdx+328] + mov r8, QWORD PTR [rcx+336] + mov QWORD PTR [rcx+328], r9 + sbb r8, QWORD PTR [rdx+336] + mov r9, QWORD PTR [rcx+344] + mov QWORD PTR [rcx+336], r8 + sbb r9, QWORD PTR [rdx+344] + mov r8, QWORD PTR [rcx+352] + mov QWORD PTR [rcx+344], r9 + sbb r8, QWORD PTR [rdx+352] + mov r9, QWORD PTR [rcx+360] + mov QWORD PTR [rcx+352], r8 + sbb r9, QWORD PTR [rdx+360] + mov r8, QWORD PTR [rcx+368] + mov QWORD PTR [rcx+360], r9 + sbb r8, QWORD PTR [rdx+368] + mov r9, QWORD PTR [rcx+376] + mov QWORD PTR [rcx+368], r8 + sbb r9, QWORD PTR [rdx+376] + mov r8, QWORD PTR [rcx+384] + mov QWORD PTR [rcx+376], r9 + sbb r8, QWORD PTR [rdx+384] + mov r9, QWORD PTR [rcx+392] + mov QWORD PTR [rcx+384], r8 + sbb r9, QWORD PTR [rdx+392] + mov r8, QWORD PTR [rcx+400] + mov QWORD PTR [rcx+392], r9 + sbb r8, QWORD PTR [rdx+400] + mov r9, QWORD PTR [rcx+408] + mov QWORD PTR [rcx+400], r8 + sbb r9, QWORD PTR [rdx+408] + mov r8, QWORD PTR [rcx+416] + mov QWORD PTR [rcx+408], r9 + sbb r8, QWORD PTR [rdx+416] + mov r9, QWORD PTR [rcx+424] + mov QWORD PTR [rcx+416], r8 + sbb r9, QWORD PTR [rdx+424] + mov r8, QWORD PTR [rcx+432] + mov QWORD PTR [rcx+424], r9 + sbb r8, QWORD PTR [rdx+432] + mov r9, QWORD PTR [rcx+440] + mov QWORD PTR [rcx+432], r8 + sbb r9, QWORD PTR [rdx+440] + mov r8, QWORD PTR [rcx+448] + mov QWORD PTR [rcx+440], r9 + sbb r8, QWORD PTR [rdx+448] + mov r9, QWORD PTR [rcx+456] + mov QWORD PTR [rcx+448], r8 + sbb r9, QWORD PTR [rdx+456] + mov r8, QWORD PTR [rcx+464] + mov QWORD PTR [rcx+456], r9 + sbb r8, QWORD PTR [rdx+464] + mov r9, QWORD PTR [rcx+472] + mov QWORD PTR [rcx+464], r8 + sbb r9, QWORD PTR [rdx+472] + mov r8, QWORD PTR [rcx+480] + mov QWORD PTR [rcx+472], r9 + sbb r8, QWORD PTR [rdx+480] + mov r9, QWORD PTR [rcx+488] + mov QWORD PTR [rcx+480], r8 + sbb r9, QWORD PTR [rdx+488] + mov r8, QWORD PTR [rcx+496] + mov QWORD PTR [rcx+488], r9 + sbb r8, QWORD PTR [rdx+496] + mov r9, QWORD PTR [rcx+504] + mov QWORD PTR [rcx+496], r8 + sbb r9, QWORD PTR [rdx+504] + mov QWORD PTR [rcx+504], r9 + sbb rax, rax + ret +sp_4096_sub_in_place_64 ENDP +_TEXT ENDS +; /* Add b to a into r. (r = a + b) +; * +; * r A single precision integer. +; * a A single precision integer. +; * b A single precision integer. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_add_64 PROC + ; Add mov r9, QWORD PTR [rdx] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 + xor rax, rax + add r9, QWORD PTR [r8] + mov r10, QWORD PTR [rdx+8] + mov QWORD PTR [rcx], r9 + adc r10, QWORD PTR [r8+8] mov r9, QWORD PTR [rdx+16] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 + mov QWORD PTR [rcx+8], r10 + adc r9, QWORD PTR [r8+16] + mov r10, QWORD PTR [rdx+24] + mov QWORD PTR [rcx+16], r9 + adc r10, QWORD PTR [r8+24] mov r9, QWORD PTR [rdx+32] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 + mov QWORD PTR [rcx+24], r10 + adc r9, QWORD PTR [r8+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [rcx+32], r9 + adc r10, QWORD PTR [r8+40] mov r9, QWORD PTR [rdx+48] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 + mov QWORD PTR [rcx+40], r10 + adc r9, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+56] + mov QWORD PTR [rcx+48], r9 + adc r10, QWORD PTR [r8+56] mov r9, QWORD PTR [rdx+64] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 + mov QWORD PTR [rcx+56], r10 + adc r9, QWORD PTR [r8+64] + mov r10, QWORD PTR [rdx+72] + mov QWORD PTR [rcx+64], r9 + adc r10, QWORD PTR [r8+72] mov r9, QWORD PTR [rdx+80] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 + mov QWORD PTR [rcx+72], r10 + adc r9, QWORD PTR [r8+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [rcx+80], r9 + adc r10, QWORD PTR [r8+88] mov r9, QWORD PTR [rdx+96] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 + mov QWORD PTR [rcx+88], r10 + adc r9, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+104] + mov QWORD PTR [rcx+96], r9 + adc r10, QWORD PTR [r8+104] mov r9, QWORD PTR [rdx+112] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 256 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 32-39 - ; START: 40-47 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 + mov QWORD PTR [rcx+104], r10 + adc r9, QWORD PTR [r8+112] + mov r10, QWORD PTR [rdx+120] + mov QWORD PTR [rcx+112], r9 + adc r10, QWORD PTR [r8+120] + mov r9, QWORD PTR [rdx+128] + mov QWORD PTR [rcx+120], r10 + adc r9, QWORD PTR [r8+128] + mov r10, QWORD PTR [rdx+136] + mov QWORD PTR [rcx+128], r9 + adc r10, QWORD PTR [r8+136] + mov r9, QWORD PTR [rdx+144] + mov QWORD PTR [rcx+136], r10 + adc r9, QWORD PTR [r8+144] + mov r10, QWORD PTR [rdx+152] + mov QWORD PTR [rcx+144], r9 + adc r10, QWORD PTR [r8+152] + mov r9, QWORD PTR [rdx+160] + mov QWORD PTR [rcx+152], r10 + adc r9, QWORD PTR [r8+160] + mov r10, QWORD PTR [rdx+168] + mov QWORD PTR [rcx+160], r9 + adc r10, QWORD PTR [r8+168] + mov r9, QWORD PTR [rdx+176] + mov QWORD PTR [rcx+168], r10 + adc r9, QWORD PTR [r8+176] + mov r10, QWORD PTR [rdx+184] + mov QWORD PTR [rcx+176], r9 + adc r10, QWORD PTR [r8+184] + mov r9, QWORD PTR [rdx+192] + mov QWORD PTR [rcx+184], r10 + adc r9, QWORD PTR [r8+192] + mov r10, QWORD PTR [rdx+200] + mov QWORD PTR [rcx+192], r9 + adc r10, QWORD PTR [r8+200] + mov r9, QWORD PTR [rdx+208] + mov QWORD PTR [rcx+200], r10 + adc r9, QWORD PTR [r8+208] + mov r10, QWORD PTR [rdx+216] + mov QWORD PTR [rcx+208], r9 + adc r10, QWORD PTR [r8+216] + mov r9, QWORD PTR [rdx+224] + mov QWORD PTR [rcx+216], r10 + adc r9, QWORD PTR [r8+224] + mov r10, QWORD PTR [rdx+232] + mov QWORD PTR [rcx+224], r9 + adc r10, QWORD PTR [r8+232] + mov r9, QWORD PTR [rdx+240] + mov QWORD PTR [rcx+232], r10 + adc r9, QWORD PTR [r8+240] + mov r10, QWORD PTR [rdx+248] + mov QWORD PTR [rcx+240], r9 + adc r10, QWORD PTR [r8+248] + mov r9, QWORD PTR [rdx+256] + mov QWORD PTR [rcx+248], r10 + adc r9, QWORD PTR [r8+256] + mov r10, QWORD PTR [rdx+264] + mov QWORD PTR [rcx+256], r9 + adc r10, QWORD PTR [r8+264] + mov r9, QWORD PTR [rdx+272] + mov QWORD PTR [rcx+264], r10 + adc r9, QWORD PTR [r8+272] + mov r10, QWORD PTR [rdx+280] + mov QWORD PTR [rcx+272], r9 + adc r10, QWORD PTR [r8+280] + mov r9, QWORD PTR [rdx+288] + mov QWORD PTR [rcx+280], r10 + adc r9, QWORD PTR [r8+288] + mov r10, QWORD PTR [rdx+296] + mov QWORD PTR [rcx+288], r9 + adc r10, QWORD PTR [r8+296] + mov r9, QWORD PTR [rdx+304] + mov QWORD PTR [rcx+296], r10 + adc r9, QWORD PTR [r8+304] + mov r10, QWORD PTR [rdx+312] + mov QWORD PTR [rcx+304], r9 + adc r10, QWORD PTR [r8+312] + mov r9, QWORD PTR [rdx+320] + mov QWORD PTR [rcx+312], r10 + adc r9, QWORD PTR [r8+320] + mov r10, QWORD PTR [rdx+328] + mov QWORD PTR [rcx+320], r9 + adc r10, QWORD PTR [r8+328] + mov r9, QWORD PTR [rdx+336] + mov QWORD PTR [rcx+328], r10 + adc r9, QWORD PTR [r8+336] + mov r10, QWORD PTR [rdx+344] + mov QWORD PTR [rcx+336], r9 + adc r10, QWORD PTR [r8+344] + mov r9, QWORD PTR [rdx+352] + mov QWORD PTR [rcx+344], r10 + adc r9, QWORD PTR [r8+352] + mov r10, QWORD PTR [rdx+360] + mov QWORD PTR [rcx+352], r9 + adc r10, QWORD PTR [r8+360] + mov r9, QWORD PTR [rdx+368] + mov QWORD PTR [rcx+360], r10 + adc r9, QWORD PTR [r8+368] + mov r10, QWORD PTR [rdx+376] + mov QWORD PTR [rcx+368], r9 + adc r10, QWORD PTR [r8+376] + mov r9, QWORD PTR [rdx+384] + mov QWORD PTR [rcx+376], r10 + adc r9, QWORD PTR [r8+384] + mov r10, QWORD PTR [rdx+392] + mov QWORD PTR [rcx+384], r9 + adc r10, QWORD PTR [r8+392] + mov r9, QWORD PTR [rdx+400] + mov QWORD PTR [rcx+392], r10 + adc r9, QWORD PTR [r8+400] + mov r10, QWORD PTR [rdx+408] + mov QWORD PTR [rcx+400], r9 + adc r10, QWORD PTR [r8+408] + mov r9, QWORD PTR [rdx+416] + mov QWORD PTR [rcx+408], r10 + adc r9, QWORD PTR [r8+416] + mov r10, QWORD PTR [rdx+424] + mov QWORD PTR [rcx+416], r9 + adc r10, QWORD PTR [r8+424] + mov r9, QWORD PTR [rdx+432] + mov QWORD PTR [rcx+424], r10 + adc r9, QWORD PTR [r8+432] + mov r10, QWORD PTR [rdx+440] + mov QWORD PTR [rcx+432], r9 + adc r10, QWORD PTR [r8+440] + mov r9, QWORD PTR [rdx+448] + mov QWORD PTR [rcx+440], r10 + adc r9, QWORD PTR [r8+448] + mov r10, QWORD PTR [rdx+456] + mov QWORD PTR [rcx+448], r9 + adc r10, QWORD PTR [r8+456] + mov r9, QWORD PTR [rdx+464] + mov QWORD PTR [rcx+456], r10 + adc r9, QWORD PTR [r8+464] + mov r10, QWORD PTR [rdx+472] + mov QWORD PTR [rcx+464], r9 + adc r10, QWORD PTR [r8+472] + mov r9, QWORD PTR [rdx+480] + mov QWORD PTR [rcx+472], r10 + adc r9, QWORD PTR [r8+480] + mov r10, QWORD PTR [rdx+488] + mov QWORD PTR [rcx+480], r9 + adc r10, QWORD PTR [r8+488] + mov r9, QWORD PTR [rdx+496] + mov QWORD PTR [rcx+488], r10 + adc r9, QWORD PTR [r8+496] + mov r10, QWORD PTR [rdx+504] + mov QWORD PTR [rcx+496], r9 + adc r10, QWORD PTR [r8+504] + mov QWORD PTR [rcx+504], r10 + adc rax, 0 + ret +sp_4096_add_64 ENDP +_TEXT ENDS +; /* Multiply a and b into r. (r = a * b) +; * +; * r A single precision integer. +; * a A single precision integer. +; * b A single precision integer. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_mul_64 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + sub rsp, 1576 + mov QWORD PTR [rsp+1536], rcx + mov QWORD PTR [rsp+1544], rdx + mov QWORD PTR [rsp+1552], r8 + lea r12, QWORD PTR [rsp+1024] + lea r14, QWORD PTR [rdx+256] + ; Add + mov rax, QWORD PTR [rdx] + xor r15, r15 + add rax, QWORD PTR [r14] mov r9, QWORD PTR [rdx+8] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 + mov QWORD PTR [r12], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [rdx+16] + mov QWORD PTR [r12+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [rdx+24] + mov QWORD PTR [r12+16], r10 + adc rax, QWORD PTR [r14+24] mov r9, QWORD PTR [rdx+32] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 + mov QWORD PTR [r12+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [r12+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r12+40], r10 + adc rax, QWORD PTR [r14+48] mov r9, QWORD PTR [rdx+56] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 + mov QWORD PTR [r12+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [rdx+64] + mov QWORD PTR [r12+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [rdx+72] + mov QWORD PTR [r12+64], r10 + adc rax, QWORD PTR [r14+72] mov r9, QWORD PTR [rdx+80] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 + mov QWORD PTR [r12+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [r12+80], r9 + adc r10, QWORD PTR [r14+88] + mov rax, QWORD PTR [rdx+96] + mov QWORD PTR [r12+88], r10 + adc rax, QWORD PTR [r14+96] mov r9, QWORD PTR [rdx+104] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 320 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 40-47 - ; START: 48-55 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 - mov r9, QWORD PTR [rdx] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 - mov r9, QWORD PTR [rdx+16] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 + mov QWORD PTR [r12+96], rax + adc r9, QWORD PTR [r14+104] + mov r10, QWORD PTR [rdx+112] + mov QWORD PTR [r12+104], r9 + adc r10, QWORD PTR [r14+112] + mov rax, QWORD PTR [rdx+120] + mov QWORD PTR [r12+112], r10 + adc rax, QWORD PTR [r14+120] + mov r9, QWORD PTR [rdx+128] + mov QWORD PTR [r12+120], rax + adc r9, QWORD PTR [r14+128] + mov r10, QWORD PTR [rdx+136] + mov QWORD PTR [r12+128], r9 + adc r10, QWORD PTR [r14+136] + mov rax, QWORD PTR [rdx+144] + mov QWORD PTR [r12+136], r10 + adc rax, QWORD PTR [r14+144] + mov r9, QWORD PTR [rdx+152] + mov QWORD PTR [r12+144], rax + adc r9, QWORD PTR [r14+152] + mov r10, QWORD PTR [rdx+160] + mov QWORD PTR [r12+152], r9 + adc r10, QWORD PTR [r14+160] + mov rax, QWORD PTR [rdx+168] + mov QWORD PTR [r12+160], r10 + adc rax, QWORD PTR [r14+168] + mov r9, QWORD PTR [rdx+176] + mov QWORD PTR [r12+168], rax + adc r9, QWORD PTR [r14+176] + mov r10, QWORD PTR [rdx+184] + mov QWORD PTR [r12+176], r9 + adc r10, QWORD PTR [r14+184] + mov rax, QWORD PTR [rdx+192] + mov QWORD PTR [r12+184], r10 + adc rax, QWORD PTR [r14+192] + mov r9, QWORD PTR [rdx+200] + mov QWORD PTR [r12+192], rax + adc r9, QWORD PTR [r14+200] + mov r10, QWORD PTR [rdx+208] + mov QWORD PTR [r12+200], r9 + adc r10, QWORD PTR [r14+208] + mov rax, QWORD PTR [rdx+216] + mov QWORD PTR [r12+208], r10 + adc rax, QWORD PTR [r14+216] + mov r9, QWORD PTR [rdx+224] + mov QWORD PTR [r12+216], rax + adc r9, QWORD PTR [r14+224] + mov r10, QWORD PTR [rdx+232] + mov QWORD PTR [r12+224], r9 + adc r10, QWORD PTR [r14+232] + mov rax, QWORD PTR [rdx+240] + mov QWORD PTR [r12+232], r10 + adc rax, QWORD PTR [r14+240] + mov r9, QWORD PTR [rdx+248] + mov QWORD PTR [r12+240], rax + adc r9, QWORD PTR [r14+248] + mov QWORD PTR [r12+248], r9 + adc r15, 0 + mov QWORD PTR [rsp+1560], r15 + lea r13, QWORD PTR [rsp+1280] + lea r14, QWORD PTR [r8+256] + ; Add + mov rax, QWORD PTR [r8] + xor rdi, rdi + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [r8+8] + mov QWORD PTR [r13], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [r8+16] + mov QWORD PTR [r13+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [r8+24] + mov QWORD PTR [r13+16], r10 + adc rax, QWORD PTR [r14+24] + mov r9, QWORD PTR [r8+32] + mov QWORD PTR [r13+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [r8+40] + mov QWORD PTR [r13+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [r8+48] + mov QWORD PTR [r13+40], r10 + adc rax, QWORD PTR [r14+48] + mov r9, QWORD PTR [r8+56] + mov QWORD PTR [r13+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [r8+64] + mov QWORD PTR [r13+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [r8+72] + mov QWORD PTR [r13+64], r10 + adc rax, QWORD PTR [r14+72] + mov r9, QWORD PTR [r8+80] + mov QWORD PTR [r13+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [r8+88] + mov QWORD PTR [r13+80], r9 + adc r10, QWORD PTR [r14+88] + mov rax, QWORD PTR [r8+96] + mov QWORD PTR [r13+88], r10 + adc rax, QWORD PTR [r14+96] + mov r9, QWORD PTR [r8+104] + mov QWORD PTR [r13+96], rax + adc r9, QWORD PTR [r14+104] + mov r10, QWORD PTR [r8+112] + mov QWORD PTR [r13+104], r9 + adc r10, QWORD PTR [r14+112] + mov rax, QWORD PTR [r8+120] + mov QWORD PTR [r13+112], r10 + adc rax, QWORD PTR [r14+120] + mov r9, QWORD PTR [r8+128] + mov QWORD PTR [r13+120], rax + adc r9, QWORD PTR [r14+128] + mov r10, QWORD PTR [r8+136] + mov QWORD PTR [r13+128], r9 + adc r10, QWORD PTR [r14+136] + mov rax, QWORD PTR [r8+144] + mov QWORD PTR [r13+136], r10 + adc rax, QWORD PTR [r14+144] + mov r9, QWORD PTR [r8+152] + mov QWORD PTR [r13+144], rax + adc r9, QWORD PTR [r14+152] + mov r10, QWORD PTR [r8+160] + mov QWORD PTR [r13+152], r9 + adc r10, QWORD PTR [r14+160] + mov rax, QWORD PTR [r8+168] + mov QWORD PTR [r13+160], r10 + adc rax, QWORD PTR [r14+168] + mov r9, QWORD PTR [r8+176] + mov QWORD PTR [r13+168], rax + adc r9, QWORD PTR [r14+176] + mov r10, QWORD PTR [r8+184] + mov QWORD PTR [r13+176], r9 + adc r10, QWORD PTR [r14+184] + mov rax, QWORD PTR [r8+192] + mov QWORD PTR [r13+184], r10 + adc rax, QWORD PTR [r14+192] + mov r9, QWORD PTR [r8+200] + mov QWORD PTR [r13+192], rax + adc r9, QWORD PTR [r14+200] + mov r10, QWORD PTR [r8+208] + mov QWORD PTR [r13+200], r9 + adc r10, QWORD PTR [r14+208] + mov rax, QWORD PTR [r8+216] + mov QWORD PTR [r13+208], r10 + adc rax, QWORD PTR [r14+216] + mov r9, QWORD PTR [r8+224] + mov QWORD PTR [r13+216], rax + adc r9, QWORD PTR [r14+224] + mov r10, QWORD PTR [r8+232] + mov QWORD PTR [r13+224], r9 + adc r10, QWORD PTR [r14+232] + mov rax, QWORD PTR [r8+240] + mov QWORD PTR [r13+232], r10 + adc rax, QWORD PTR [r14+240] + mov r9, QWORD PTR [r8+248] + mov QWORD PTR [r13+240], rax + adc r9, QWORD PTR [r14+248] + mov QWORD PTR [r13+248], r9 + adc rdi, 0 + mov QWORD PTR [rsp+1568], rdi + mov r8, r13 + mov rdx, r12 + mov rcx, rsp + call sp_2048_mul_32 + mov r8, QWORD PTR [rsp+1552] + mov rdx, QWORD PTR [rsp+1544] + lea rcx, QWORD PTR [rsp+512] + add r8, 256 + add rdx, 256 + call sp_2048_mul_32 + mov r8, QWORD PTR [rsp+1552] + mov rdx, QWORD PTR [rsp+1544] + mov rcx, QWORD PTR [rsp+1536] + call sp_2048_mul_32 +IFDEF _WIN64 + mov r8, QWORD PTR [rsp+1552] + mov rdx, QWORD PTR [rsp+1544] + mov rcx, QWORD PTR [rsp+1536] +ENDIF + mov r15, QWORD PTR [rsp+1560] + mov rdi, QWORD PTR [rsp+1568] + mov rsi, QWORD PTR [rsp+1536] + mov r11, r15 + lea r12, QWORD PTR [rsp+1024] + lea r13, QWORD PTR [rsp+1280] + and r11, rdi + neg r15 + neg rdi + add rsi, 512 + mov rax, QWORD PTR [r12] + mov r9, QWORD PTR [r13] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12], rax + mov QWORD PTR [r13], r9 + mov rax, QWORD PTR [r12+8] + mov r9, QWORD PTR [r13+8] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+8], rax + mov QWORD PTR [r13+8], r9 + mov rax, QWORD PTR [r12+16] + mov r9, QWORD PTR [r13+16] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+16], rax + mov QWORD PTR [r13+16], r9 + mov rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [r13+24] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+24], rax + mov QWORD PTR [r13+24], r9 + mov rax, QWORD PTR [r12+32] + mov r9, QWORD PTR [r13+32] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+32], rax + mov QWORD PTR [r13+32], r9 + mov rax, QWORD PTR [r12+40] + mov r9, QWORD PTR [r13+40] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+40], rax + mov QWORD PTR [r13+40], r9 + mov rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [r13+48] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+48], rax + mov QWORD PTR [r13+48], r9 + mov rax, QWORD PTR [r12+56] + mov r9, QWORD PTR [r13+56] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+56], rax + mov QWORD PTR [r13+56], r9 + mov rax, QWORD PTR [r12+64] + mov r9, QWORD PTR [r13+64] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+64], rax + mov QWORD PTR [r13+64], r9 + mov rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [r13+72] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+72], rax + mov QWORD PTR [r13+72], r9 + mov rax, QWORD PTR [r12+80] + mov r9, QWORD PTR [r13+80] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+80], rax + mov QWORD PTR [r13+80], r9 + mov rax, QWORD PTR [r12+88] + mov r9, QWORD PTR [r13+88] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+88], rax + mov QWORD PTR [r13+88], r9 + mov rax, QWORD PTR [r12+96] + mov r9, QWORD PTR [r13+96] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+96], rax + mov QWORD PTR [r13+96], r9 + mov rax, QWORD PTR [r12+104] + mov r9, QWORD PTR [r13+104] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+104], rax + mov QWORD PTR [r13+104], r9 + mov rax, QWORD PTR [r12+112] + mov r9, QWORD PTR [r13+112] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+112], rax + mov QWORD PTR [r13+112], r9 + mov rax, QWORD PTR [r12+120] + mov r9, QWORD PTR [r13+120] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+120], rax + mov QWORD PTR [r13+120], r9 + mov rax, QWORD PTR [r12+128] + mov r9, QWORD PTR [r13+128] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+128], rax + mov QWORD PTR [r13+128], r9 + mov rax, QWORD PTR [r12+136] + mov r9, QWORD PTR [r13+136] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+136], rax + mov QWORD PTR [r13+136], r9 + mov rax, QWORD PTR [r12+144] + mov r9, QWORD PTR [r13+144] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+144], rax + mov QWORD PTR [r13+144], r9 + mov rax, QWORD PTR [r12+152] + mov r9, QWORD PTR [r13+152] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+152], rax + mov QWORD PTR [r13+152], r9 + mov rax, QWORD PTR [r12+160] + mov r9, QWORD PTR [r13+160] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+160], rax + mov QWORD PTR [r13+160], r9 + mov rax, QWORD PTR [r12+168] + mov r9, QWORD PTR [r13+168] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+168], rax + mov QWORD PTR [r13+168], r9 + mov rax, QWORD PTR [r12+176] + mov r9, QWORD PTR [r13+176] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+176], rax + mov QWORD PTR [r13+176], r9 + mov rax, QWORD PTR [r12+184] + mov r9, QWORD PTR [r13+184] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+184], rax + mov QWORD PTR [r13+184], r9 + mov rax, QWORD PTR [r12+192] + mov r9, QWORD PTR [r13+192] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+192], rax + mov QWORD PTR [r13+192], r9 + mov rax, QWORD PTR [r12+200] + mov r9, QWORD PTR [r13+200] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+200], rax + mov QWORD PTR [r13+200], r9 + mov rax, QWORD PTR [r12+208] + mov r9, QWORD PTR [r13+208] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+208], rax + mov QWORD PTR [r13+208], r9 + mov rax, QWORD PTR [r12+216] + mov r9, QWORD PTR [r13+216] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+216], rax + mov QWORD PTR [r13+216], r9 + mov rax, QWORD PTR [r12+224] + mov r9, QWORD PTR [r13+224] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+224], rax + mov QWORD PTR [r13+224], r9 + mov rax, QWORD PTR [r12+232] + mov r9, QWORD PTR [r13+232] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+232], rax + mov QWORD PTR [r13+232], r9 + mov rax, QWORD PTR [r12+240] + mov r9, QWORD PTR [r13+240] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+240], rax + mov QWORD PTR [r13+240], r9 + mov rax, QWORD PTR [r12+248] + mov r9, QWORD PTR [r13+248] + and rax, rdi + and r9, r15 + mov QWORD PTR [r12+248], rax + mov QWORD PTR [r13+248], r9 + mov rax, QWORD PTR [r12] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r13+184] + mov rax, QWORD PTR [r12+192] + mov QWORD PTR [rsi+184], r10 + adc rax, QWORD PTR [r13+192] + mov r9, QWORD PTR [r12+200] + mov QWORD PTR [rsi+192], rax + adc r9, QWORD PTR [r13+200] + mov r10, QWORD PTR [r12+208] + mov QWORD PTR [rsi+200], r9 + adc r10, QWORD PTR [r13+208] + mov rax, QWORD PTR [r12+216] + mov QWORD PTR [rsi+208], r10 + adc rax, QWORD PTR [r13+216] + mov r9, QWORD PTR [r12+224] + mov QWORD PTR [rsi+216], rax + adc r9, QWORD PTR [r13+224] + mov r10, QWORD PTR [r12+232] + mov QWORD PTR [rsi+224], r9 + adc r10, QWORD PTR [r13+232] + mov rax, QWORD PTR [r12+240] + mov QWORD PTR [rsi+232], r10 + adc rax, QWORD PTR [r13+240] + mov r9, QWORD PTR [r12+248] + mov QWORD PTR [rsi+240], rax + adc r9, QWORD PTR [r13+248] + mov QWORD PTR [rsi+248], r9 + adc r11, 0 + lea r13, QWORD PTR [rsp+512] + mov r12, rsp + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [r13] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [r13+184] + mov rax, QWORD PTR [r12+192] + mov QWORD PTR [r12+184], r10 + sbb rax, QWORD PTR [r13+192] + mov r9, QWORD PTR [r12+200] + mov QWORD PTR [r12+192], rax + sbb r9, QWORD PTR [r13+200] + mov r10, QWORD PTR [r12+208] + mov QWORD PTR [r12+200], r9 + sbb r10, QWORD PTR [r13+208] + mov rax, QWORD PTR [r12+216] + mov QWORD PTR [r12+208], r10 + sbb rax, QWORD PTR [r13+216] + mov r9, QWORD PTR [r12+224] + mov QWORD PTR [r12+216], rax + sbb r9, QWORD PTR [r13+224] + mov r10, QWORD PTR [r12+232] + mov QWORD PTR [r12+224], r9 + sbb r10, QWORD PTR [r13+232] + mov rax, QWORD PTR [r12+240] + mov QWORD PTR [r12+232], r10 + sbb rax, QWORD PTR [r13+240] + mov r9, QWORD PTR [r12+248] + mov QWORD PTR [r12+240], rax + sbb r9, QWORD PTR [r13+248] + mov r10, QWORD PTR [r12+256] + mov QWORD PTR [r12+248], r9 + sbb r10, QWORD PTR [r13+256] + mov rax, QWORD PTR [r12+264] + mov QWORD PTR [r12+256], r10 + sbb rax, QWORD PTR [r13+264] + mov r9, QWORD PTR [r12+272] + mov QWORD PTR [r12+264], rax + sbb r9, QWORD PTR [r13+272] + mov r10, QWORD PTR [r12+280] + mov QWORD PTR [r12+272], r9 + sbb r10, QWORD PTR [r13+280] + mov rax, QWORD PTR [r12+288] + mov QWORD PTR [r12+280], r10 + sbb rax, QWORD PTR [r13+288] + mov r9, QWORD PTR [r12+296] + mov QWORD PTR [r12+288], rax + sbb r9, QWORD PTR [r13+296] + mov r10, QWORD PTR [r12+304] + mov QWORD PTR [r12+296], r9 + sbb r10, QWORD PTR [r13+304] + mov rax, QWORD PTR [r12+312] + mov QWORD PTR [r12+304], r10 + sbb rax, QWORD PTR [r13+312] + mov r9, QWORD PTR [r12+320] + mov QWORD PTR [r12+312], rax + sbb r9, QWORD PTR [r13+320] + mov r10, QWORD PTR [r12+328] + mov QWORD PTR [r12+320], r9 + sbb r10, QWORD PTR [r13+328] + mov rax, QWORD PTR [r12+336] + mov QWORD PTR [r12+328], r10 + sbb rax, QWORD PTR [r13+336] + mov r9, QWORD PTR [r12+344] + mov QWORD PTR [r12+336], rax + sbb r9, QWORD PTR [r13+344] + mov r10, QWORD PTR [r12+352] + mov QWORD PTR [r12+344], r9 + sbb r10, QWORD PTR [r13+352] + mov rax, QWORD PTR [r12+360] + mov QWORD PTR [r12+352], r10 + sbb rax, QWORD PTR [r13+360] + mov r9, QWORD PTR [r12+368] + mov QWORD PTR [r12+360], rax + sbb r9, QWORD PTR [r13+368] + mov r10, QWORD PTR [r12+376] + mov QWORD PTR [r12+368], r9 + sbb r10, QWORD PTR [r13+376] + mov rax, QWORD PTR [r12+384] + mov QWORD PTR [r12+376], r10 + sbb rax, QWORD PTR [r13+384] + mov r9, QWORD PTR [r12+392] + mov QWORD PTR [r12+384], rax + sbb r9, QWORD PTR [r13+392] + mov r10, QWORD PTR [r12+400] + mov QWORD PTR [r12+392], r9 + sbb r10, QWORD PTR [r13+400] + mov rax, QWORD PTR [r12+408] + mov QWORD PTR [r12+400], r10 + sbb rax, QWORD PTR [r13+408] + mov r9, QWORD PTR [r12+416] + mov QWORD PTR [r12+408], rax + sbb r9, QWORD PTR [r13+416] + mov r10, QWORD PTR [r12+424] + mov QWORD PTR [r12+416], r9 + sbb r10, QWORD PTR [r13+424] + mov rax, QWORD PTR [r12+432] + mov QWORD PTR [r12+424], r10 + sbb rax, QWORD PTR [r13+432] + mov r9, QWORD PTR [r12+440] + mov QWORD PTR [r12+432], rax + sbb r9, QWORD PTR [r13+440] + mov r10, QWORD PTR [r12+448] + mov QWORD PTR [r12+440], r9 + sbb r10, QWORD PTR [r13+448] + mov rax, QWORD PTR [r12+456] + mov QWORD PTR [r12+448], r10 + sbb rax, QWORD PTR [r13+456] + mov r9, QWORD PTR [r12+464] + mov QWORD PTR [r12+456], rax + sbb r9, QWORD PTR [r13+464] + mov r10, QWORD PTR [r12+472] + mov QWORD PTR [r12+464], r9 + sbb r10, QWORD PTR [r13+472] + mov rax, QWORD PTR [r12+480] + mov QWORD PTR [r12+472], r10 + sbb rax, QWORD PTR [r13+480] + mov r9, QWORD PTR [r12+488] + mov QWORD PTR [r12+480], rax + sbb r9, QWORD PTR [r13+488] + mov r10, QWORD PTR [r12+496] + mov QWORD PTR [r12+488], r9 + sbb r10, QWORD PTR [r13+496] + mov rax, QWORD PTR [r12+504] + mov QWORD PTR [r12+496], r10 + sbb rax, QWORD PTR [r13+504] + mov QWORD PTR [r12+504], rax + sbb r11, 0 + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [rcx] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [rcx+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [rcx+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [rcx+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [rcx+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [rcx+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [rcx+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [rcx+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [rcx+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [rcx+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [rcx+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [rcx+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [rcx+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [rcx+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [rcx+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [rcx+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [rcx+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [rcx+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [rcx+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [rcx+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [rcx+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [rcx+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [rcx+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [rcx+184] + mov rax, QWORD PTR [r12+192] + mov QWORD PTR [r12+184], r10 + sbb rax, QWORD PTR [rcx+192] + mov r9, QWORD PTR [r12+200] + mov QWORD PTR [r12+192], rax + sbb r9, QWORD PTR [rcx+200] + mov r10, QWORD PTR [r12+208] + mov QWORD PTR [r12+200], r9 + sbb r10, QWORD PTR [rcx+208] + mov rax, QWORD PTR [r12+216] + mov QWORD PTR [r12+208], r10 + sbb rax, QWORD PTR [rcx+216] + mov r9, QWORD PTR [r12+224] + mov QWORD PTR [r12+216], rax + sbb r9, QWORD PTR [rcx+224] + mov r10, QWORD PTR [r12+232] + mov QWORD PTR [r12+224], r9 + sbb r10, QWORD PTR [rcx+232] + mov rax, QWORD PTR [r12+240] + mov QWORD PTR [r12+232], r10 + sbb rax, QWORD PTR [rcx+240] + mov r9, QWORD PTR [r12+248] + mov QWORD PTR [r12+240], rax + sbb r9, QWORD PTR [rcx+248] + mov r10, QWORD PTR [r12+256] + mov QWORD PTR [r12+248], r9 + sbb r10, QWORD PTR [rcx+256] + mov rax, QWORD PTR [r12+264] + mov QWORD PTR [r12+256], r10 + sbb rax, QWORD PTR [rcx+264] + mov r9, QWORD PTR [r12+272] + mov QWORD PTR [r12+264], rax + sbb r9, QWORD PTR [rcx+272] + mov r10, QWORD PTR [r12+280] + mov QWORD PTR [r12+272], r9 + sbb r10, QWORD PTR [rcx+280] + mov rax, QWORD PTR [r12+288] + mov QWORD PTR [r12+280], r10 + sbb rax, QWORD PTR [rcx+288] + mov r9, QWORD PTR [r12+296] + mov QWORD PTR [r12+288], rax + sbb r9, QWORD PTR [rcx+296] + mov r10, QWORD PTR [r12+304] + mov QWORD PTR [r12+296], r9 + sbb r10, QWORD PTR [rcx+304] + mov rax, QWORD PTR [r12+312] + mov QWORD PTR [r12+304], r10 + sbb rax, QWORD PTR [rcx+312] + mov r9, QWORD PTR [r12+320] + mov QWORD PTR [r12+312], rax + sbb r9, QWORD PTR [rcx+320] + mov r10, QWORD PTR [r12+328] + mov QWORD PTR [r12+320], r9 + sbb r10, QWORD PTR [rcx+328] + mov rax, QWORD PTR [r12+336] + mov QWORD PTR [r12+328], r10 + sbb rax, QWORD PTR [rcx+336] + mov r9, QWORD PTR [r12+344] + mov QWORD PTR [r12+336], rax + sbb r9, QWORD PTR [rcx+344] + mov r10, QWORD PTR [r12+352] + mov QWORD PTR [r12+344], r9 + sbb r10, QWORD PTR [rcx+352] + mov rax, QWORD PTR [r12+360] + mov QWORD PTR [r12+352], r10 + sbb rax, QWORD PTR [rcx+360] + mov r9, QWORD PTR [r12+368] + mov QWORD PTR [r12+360], rax + sbb r9, QWORD PTR [rcx+368] + mov r10, QWORD PTR [r12+376] + mov QWORD PTR [r12+368], r9 + sbb r10, QWORD PTR [rcx+376] + mov rax, QWORD PTR [r12+384] + mov QWORD PTR [r12+376], r10 + sbb rax, QWORD PTR [rcx+384] + mov r9, QWORD PTR [r12+392] + mov QWORD PTR [r12+384], rax + sbb r9, QWORD PTR [rcx+392] + mov r10, QWORD PTR [r12+400] + mov QWORD PTR [r12+392], r9 + sbb r10, QWORD PTR [rcx+400] + mov rax, QWORD PTR [r12+408] + mov QWORD PTR [r12+400], r10 + sbb rax, QWORD PTR [rcx+408] + mov r9, QWORD PTR [r12+416] + mov QWORD PTR [r12+408], rax + sbb r9, QWORD PTR [rcx+416] + mov r10, QWORD PTR [r12+424] + mov QWORD PTR [r12+416], r9 + sbb r10, QWORD PTR [rcx+424] + mov rax, QWORD PTR [r12+432] + mov QWORD PTR [r12+424], r10 + sbb rax, QWORD PTR [rcx+432] + mov r9, QWORD PTR [r12+440] + mov QWORD PTR [r12+432], rax + sbb r9, QWORD PTR [rcx+440] + mov r10, QWORD PTR [r12+448] + mov QWORD PTR [r12+440], r9 + sbb r10, QWORD PTR [rcx+448] + mov rax, QWORD PTR [r12+456] + mov QWORD PTR [r12+448], r10 + sbb rax, QWORD PTR [rcx+456] + mov r9, QWORD PTR [r12+464] + mov QWORD PTR [r12+456], rax + sbb r9, QWORD PTR [rcx+464] + mov r10, QWORD PTR [r12+472] + mov QWORD PTR [r12+464], r9 + sbb r10, QWORD PTR [rcx+472] + mov rax, QWORD PTR [r12+480] + mov QWORD PTR [r12+472], r10 + sbb rax, QWORD PTR [rcx+480] + mov r9, QWORD PTR [r12+488] + mov QWORD PTR [r12+480], rax + sbb r9, QWORD PTR [rcx+488] + mov r10, QWORD PTR [r12+496] + mov QWORD PTR [r12+488], r9 + sbb r10, QWORD PTR [rcx+496] + mov rax, QWORD PTR [r12+504] + mov QWORD PTR [r12+496], r10 + sbb rax, QWORD PTR [rcx+504] + mov QWORD PTR [r12+504], rax + sbb r11, 0 + sub rsi, 256 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r12] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r12+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r12+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r12+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r12+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r12+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r12+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r12+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r12+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r12+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r12+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r12+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r12+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r12+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r12+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r12+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r12+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r12+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r12+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r12+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r12+184] + mov rax, QWORD PTR [rsi+192] + mov QWORD PTR [rsi+184], r10 + adc rax, QWORD PTR [r12+192] + mov r9, QWORD PTR [rsi+200] + mov QWORD PTR [rsi+192], rax + adc r9, QWORD PTR [r12+200] + mov r10, QWORD PTR [rsi+208] + mov QWORD PTR [rsi+200], r9 + adc r10, QWORD PTR [r12+208] + mov rax, QWORD PTR [rsi+216] + mov QWORD PTR [rsi+208], r10 + adc rax, QWORD PTR [r12+216] + mov r9, QWORD PTR [rsi+224] + mov QWORD PTR [rsi+216], rax + adc r9, QWORD PTR [r12+224] + mov r10, QWORD PTR [rsi+232] + mov QWORD PTR [rsi+224], r9 + adc r10, QWORD PTR [r12+232] + mov rax, QWORD PTR [rsi+240] + mov QWORD PTR [rsi+232], r10 + adc rax, QWORD PTR [r12+240] + mov r9, QWORD PTR [rsi+248] + mov QWORD PTR [rsi+240], rax + adc r9, QWORD PTR [r12+248] + mov r10, QWORD PTR [rsi+256] + mov QWORD PTR [rsi+248], r9 + adc r10, QWORD PTR [r12+256] + mov rax, QWORD PTR [rsi+264] + mov QWORD PTR [rsi+256], r10 + adc rax, QWORD PTR [r12+264] + mov r9, QWORD PTR [rsi+272] + mov QWORD PTR [rsi+264], rax + adc r9, QWORD PTR [r12+272] + mov r10, QWORD PTR [rsi+280] + mov QWORD PTR [rsi+272], r9 + adc r10, QWORD PTR [r12+280] + mov rax, QWORD PTR [rsi+288] + mov QWORD PTR [rsi+280], r10 + adc rax, QWORD PTR [r12+288] + mov r9, QWORD PTR [rsi+296] + mov QWORD PTR [rsi+288], rax + adc r9, QWORD PTR [r12+296] + mov r10, QWORD PTR [rsi+304] + mov QWORD PTR [rsi+296], r9 + adc r10, QWORD PTR [r12+304] + mov rax, QWORD PTR [rsi+312] + mov QWORD PTR [rsi+304], r10 + adc rax, QWORD PTR [r12+312] + mov r9, QWORD PTR [rsi+320] + mov QWORD PTR [rsi+312], rax + adc r9, QWORD PTR [r12+320] + mov r10, QWORD PTR [rsi+328] + mov QWORD PTR [rsi+320], r9 + adc r10, QWORD PTR [r12+328] + mov rax, QWORD PTR [rsi+336] + mov QWORD PTR [rsi+328], r10 + adc rax, QWORD PTR [r12+336] + mov r9, QWORD PTR [rsi+344] + mov QWORD PTR [rsi+336], rax + adc r9, QWORD PTR [r12+344] + mov r10, QWORD PTR [rsi+352] + mov QWORD PTR [rsi+344], r9 + adc r10, QWORD PTR [r12+352] + mov rax, QWORD PTR [rsi+360] + mov QWORD PTR [rsi+352], r10 + adc rax, QWORD PTR [r12+360] + mov r9, QWORD PTR [rsi+368] + mov QWORD PTR [rsi+360], rax + adc r9, QWORD PTR [r12+368] + mov r10, QWORD PTR [rsi+376] + mov QWORD PTR [rsi+368], r9 + adc r10, QWORD PTR [r12+376] + mov rax, QWORD PTR [rsi+384] + mov QWORD PTR [rsi+376], r10 + adc rax, QWORD PTR [r12+384] + mov r9, QWORD PTR [rsi+392] + mov QWORD PTR [rsi+384], rax + adc r9, QWORD PTR [r12+392] + mov r10, QWORD PTR [rsi+400] + mov QWORD PTR [rsi+392], r9 + adc r10, QWORD PTR [r12+400] + mov rax, QWORD PTR [rsi+408] + mov QWORD PTR [rsi+400], r10 + adc rax, QWORD PTR [r12+408] + mov r9, QWORD PTR [rsi+416] + mov QWORD PTR [rsi+408], rax + adc r9, QWORD PTR [r12+416] + mov r10, QWORD PTR [rsi+424] + mov QWORD PTR [rsi+416], r9 + adc r10, QWORD PTR [r12+424] + mov rax, QWORD PTR [rsi+432] + mov QWORD PTR [rsi+424], r10 + adc rax, QWORD PTR [r12+432] + mov r9, QWORD PTR [rsi+440] + mov QWORD PTR [rsi+432], rax + adc r9, QWORD PTR [r12+440] + mov r10, QWORD PTR [rsi+448] + mov QWORD PTR [rsi+440], r9 + adc r10, QWORD PTR [r12+448] + mov rax, QWORD PTR [rsi+456] + mov QWORD PTR [rsi+448], r10 + adc rax, QWORD PTR [r12+456] + mov r9, QWORD PTR [rsi+464] + mov QWORD PTR [rsi+456], rax + adc r9, QWORD PTR [r12+464] + mov r10, QWORD PTR [rsi+472] + mov QWORD PTR [rsi+464], r9 + adc r10, QWORD PTR [r12+472] + mov rax, QWORD PTR [rsi+480] + mov QWORD PTR [rsi+472], r10 + adc rax, QWORD PTR [r12+480] + mov r9, QWORD PTR [rsi+488] + mov QWORD PTR [rsi+480], rax + adc r9, QWORD PTR [r12+488] + mov r10, QWORD PTR [rsi+496] + mov QWORD PTR [rsi+488], r9 + adc r10, QWORD PTR [r12+496] + mov rax, QWORD PTR [rsi+504] + mov QWORD PTR [rsi+496], r10 + adc rax, QWORD PTR [r12+504] + mov QWORD PTR [rsi+504], rax + adc r11, 0 + mov QWORD PTR [rcx+768], r11 + add rsi, 256 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r13+184] + mov rax, QWORD PTR [rsi+192] + mov QWORD PTR [rsi+184], r10 + adc rax, QWORD PTR [r13+192] + mov r9, QWORD PTR [rsi+200] + mov QWORD PTR [rsi+192], rax + adc r9, QWORD PTR [r13+200] + mov r10, QWORD PTR [rsi+208] + mov QWORD PTR [rsi+200], r9 + adc r10, QWORD PTR [r13+208] + mov rax, QWORD PTR [rsi+216] + mov QWORD PTR [rsi+208], r10 + adc rax, QWORD PTR [r13+216] + mov r9, QWORD PTR [rsi+224] + mov QWORD PTR [rsi+216], rax + adc r9, QWORD PTR [r13+224] + mov r10, QWORD PTR [rsi+232] + mov QWORD PTR [rsi+224], r9 + adc r10, QWORD PTR [r13+232] + mov rax, QWORD PTR [rsi+240] + mov QWORD PTR [rsi+232], r10 + adc rax, QWORD PTR [r13+240] + mov r9, QWORD PTR [rsi+248] + mov QWORD PTR [rsi+240], rax + adc r9, QWORD PTR [r13+248] + mov r10, QWORD PTR [rsi+256] + mov QWORD PTR [rsi+248], r9 + adc r10, QWORD PTR [r13+256] + mov QWORD PTR [rsi+256], r10 + ; Add to zero + mov rax, QWORD PTR [r13+264] + adc rax, 0 + mov r9, QWORD PTR [r13+272] + mov QWORD PTR [rsi+264], rax + adc r9, 0 + mov r10, QWORD PTR [r13+280] + mov QWORD PTR [rsi+272], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+288] + mov QWORD PTR [rsi+280], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+296] + mov QWORD PTR [rsi+288], rax + adc r9, 0 + mov r10, QWORD PTR [r13+304] + mov QWORD PTR [rsi+296], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+312] + mov QWORD PTR [rsi+304], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+320] + mov QWORD PTR [rsi+312], rax + adc r9, 0 + mov r10, QWORD PTR [r13+328] + mov QWORD PTR [rsi+320], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+336] + mov QWORD PTR [rsi+328], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+344] + mov QWORD PTR [rsi+336], rax + adc r9, 0 + mov r10, QWORD PTR [r13+352] + mov QWORD PTR [rsi+344], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+360] + mov QWORD PTR [rsi+352], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+368] + mov QWORD PTR [rsi+360], rax + adc r9, 0 + mov r10, QWORD PTR [r13+376] + mov QWORD PTR [rsi+368], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+384] + mov QWORD PTR [rsi+376], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+392] + mov QWORD PTR [rsi+384], rax + adc r9, 0 + mov r10, QWORD PTR [r13+400] + mov QWORD PTR [rsi+392], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+408] + mov QWORD PTR [rsi+400], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+416] + mov QWORD PTR [rsi+408], rax + adc r9, 0 + mov r10, QWORD PTR [r13+424] + mov QWORD PTR [rsi+416], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+432] + mov QWORD PTR [rsi+424], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+440] + mov QWORD PTR [rsi+432], rax + adc r9, 0 + mov r10, QWORD PTR [r13+448] + mov QWORD PTR [rsi+440], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+456] + mov QWORD PTR [rsi+448], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+464] + mov QWORD PTR [rsi+456], rax + adc r9, 0 + mov r10, QWORD PTR [r13+472] + mov QWORD PTR [rsi+464], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+480] + mov QWORD PTR [rsi+472], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+488] + mov QWORD PTR [rsi+480], rax + adc r9, 0 + mov r10, QWORD PTR [r13+496] + mov QWORD PTR [rsi+488], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+504] + mov QWORD PTR [rsi+496], r10 + adc rax, 0 + mov QWORD PTR [rsi+504], rax + add rsp, 1576 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +sp_4096_mul_64 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_mul_avx2_64 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + sub rsp, 1576 + mov QWORD PTR [rsp+1536], rcx + mov QWORD PTR [rsp+1544], rdx + mov QWORD PTR [rsp+1552], r8 + lea r12, QWORD PTR [rsp+1024] + lea r14, QWORD PTR [rdx+256] + ; Add + mov rax, QWORD PTR [rdx] + xor r15, r15 + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [rdx+8] + mov QWORD PTR [r12], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [rdx+16] + mov QWORD PTR [r12+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [rdx+24] + mov QWORD PTR [r12+16], r10 + adc rax, QWORD PTR [r14+24] mov r9, QWORD PTR [rdx+32] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 - mov r9, QWORD PTR [rdx+48] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 + mov QWORD PTR [r12+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [r12+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r12+40], r10 + adc rax, QWORD PTR [r14+48] mov r9, QWORD PTR [rdx+56] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 - mov r9, QWORD PTR [rdx+64] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 + mov QWORD PTR [r12+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [rdx+64] + mov QWORD PTR [r12+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [rdx+72] + mov QWORD PTR [r12+64], r10 + adc rax, QWORD PTR [r14+72] mov r9, QWORD PTR [rdx+80] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 - mov r9, QWORD PTR [rdx+96] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 + mov QWORD PTR [r12+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [r12+80], r9 + adc r10, QWORD PTR [r14+88] + mov rax, QWORD PTR [rdx+96] + mov QWORD PTR [r12+88], r10 + adc rax, QWORD PTR [r14+96] mov r9, QWORD PTR [rdx+104] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 - mov r9, QWORD PTR [rdx+112] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 384 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - add rcx, 64 - ; END: 48-55 - ; START: 56-63 - pxor xmm13, xmm13 - pxor xmm4, xmm4 - pxor xmm5, xmm5 - pxor xmm6, xmm6 - pxor xmm7, xmm7 - ; ENTRY: 0 + mov QWORD PTR [r12+96], rax + adc r9, QWORD PTR [r14+104] + mov r10, QWORD PTR [rdx+112] + mov QWORD PTR [r12+104], r9 + adc r10, QWORD PTR [r14+112] + mov rax, QWORD PTR [rdx+120] + mov QWORD PTR [r12+112], r10 + adc rax, QWORD PTR [r14+120] + mov r9, QWORD PTR [rdx+128] + mov QWORD PTR [r12+120], rax + adc r9, QWORD PTR [r14+128] + mov r10, QWORD PTR [rdx+136] + mov QWORD PTR [r12+128], r9 + adc r10, QWORD PTR [r14+136] + mov rax, QWORD PTR [rdx+144] + mov QWORD PTR [r12+136], r10 + adc rax, QWORD PTR [r14+144] + mov r9, QWORD PTR [rdx+152] + mov QWORD PTR [r12+144], rax + adc r9, QWORD PTR [r14+152] + mov r10, QWORD PTR [rdx+160] + mov QWORD PTR [r12+152], r9 + adc r10, QWORD PTR [r14+160] + mov rax, QWORD PTR [rdx+168] + mov QWORD PTR [r12+160], r10 + adc rax, QWORD PTR [r14+168] + mov r9, QWORD PTR [rdx+176] + mov QWORD PTR [r12+168], rax + adc r9, QWORD PTR [r14+176] + mov r10, QWORD PTR [rdx+184] + mov QWORD PTR [r12+176], r9 + adc r10, QWORD PTR [r14+184] + mov rax, QWORD PTR [rdx+192] + mov QWORD PTR [r12+184], r10 + adc rax, QWORD PTR [r14+192] + mov r9, QWORD PTR [rdx+200] + mov QWORD PTR [r12+192], rax + adc r9, QWORD PTR [r14+200] + mov r10, QWORD PTR [rdx+208] + mov QWORD PTR [r12+200], r9 + adc r10, QWORD PTR [r14+208] + mov rax, QWORD PTR [rdx+216] + mov QWORD PTR [r12+208], r10 + adc rax, QWORD PTR [r14+216] + mov r9, QWORD PTR [rdx+224] + mov QWORD PTR [r12+216], rax + adc r9, QWORD PTR [r14+224] + mov r10, QWORD PTR [rdx+232] + mov QWORD PTR [r12+224], r9 + adc r10, QWORD PTR [r14+232] + mov rax, QWORD PTR [rdx+240] + mov QWORD PTR [r12+232], r10 + adc rax, QWORD PTR [r14+240] + mov r9, QWORD PTR [rdx+248] + mov QWORD PTR [r12+240], rax + adc r9, QWORD PTR [r14+248] + mov QWORD PTR [r12+248], r9 + adc r15, 0 + mov QWORD PTR [rsp+1560], r15 + lea r13, QWORD PTR [rsp+1280] + lea r14, QWORD PTR [r8+256] + ; Add + mov rax, QWORD PTR [r8] + xor rdi, rdi + add rax, QWORD PTR [r14] + mov r9, QWORD PTR [r8+8] + mov QWORD PTR [r13], rax + adc r9, QWORD PTR [r14+8] + mov r10, QWORD PTR [r8+16] + mov QWORD PTR [r13+8], r9 + adc r10, QWORD PTR [r14+16] + mov rax, QWORD PTR [r8+24] + mov QWORD PTR [r13+16], r10 + adc rax, QWORD PTR [r14+24] + mov r9, QWORD PTR [r8+32] + mov QWORD PTR [r13+24], rax + adc r9, QWORD PTR [r14+32] + mov r10, QWORD PTR [r8+40] + mov QWORD PTR [r13+32], r9 + adc r10, QWORD PTR [r14+40] + mov rax, QWORD PTR [r8+48] + mov QWORD PTR [r13+40], r10 + adc rax, QWORD PTR [r14+48] + mov r9, QWORD PTR [r8+56] + mov QWORD PTR [r13+48], rax + adc r9, QWORD PTR [r14+56] + mov r10, QWORD PTR [r8+64] + mov QWORD PTR [r13+56], r9 + adc r10, QWORD PTR [r14+64] + mov rax, QWORD PTR [r8+72] + mov QWORD PTR [r13+64], r10 + adc rax, QWORD PTR [r14+72] + mov r9, QWORD PTR [r8+80] + mov QWORD PTR [r13+72], rax + adc r9, QWORD PTR [r14+80] + mov r10, QWORD PTR [r8+88] + mov QWORD PTR [r13+80], r9 + adc r10, QWORD PTR [r14+88] + mov rax, QWORD PTR [r8+96] + mov QWORD PTR [r13+88], r10 + adc rax, QWORD PTR [r14+96] + mov r9, QWORD PTR [r8+104] + mov QWORD PTR [r13+96], rax + adc r9, QWORD PTR [r14+104] + mov r10, QWORD PTR [r8+112] + mov QWORD PTR [r13+104], r9 + adc r10, QWORD PTR [r14+112] + mov rax, QWORD PTR [r8+120] + mov QWORD PTR [r13+112], r10 + adc rax, QWORD PTR [r14+120] + mov r9, QWORD PTR [r8+128] + mov QWORD PTR [r13+120], rax + adc r9, QWORD PTR [r14+128] + mov r10, QWORD PTR [r8+136] + mov QWORD PTR [r13+128], r9 + adc r10, QWORD PTR [r14+136] + mov rax, QWORD PTR [r8+144] + mov QWORD PTR [r13+136], r10 + adc rax, QWORD PTR [r14+144] + mov r9, QWORD PTR [r8+152] + mov QWORD PTR [r13+144], rax + adc r9, QWORD PTR [r14+152] + mov r10, QWORD PTR [r8+160] + mov QWORD PTR [r13+152], r9 + adc r10, QWORD PTR [r14+160] + mov rax, QWORD PTR [r8+168] + mov QWORD PTR [r13+160], r10 + adc rax, QWORD PTR [r14+168] + mov r9, QWORD PTR [r8+176] + mov QWORD PTR [r13+168], rax + adc r9, QWORD PTR [r14+176] + mov r10, QWORD PTR [r8+184] + mov QWORD PTR [r13+176], r9 + adc r10, QWORD PTR [r14+184] + mov rax, QWORD PTR [r8+192] + mov QWORD PTR [r13+184], r10 + adc rax, QWORD PTR [r14+192] + mov r9, QWORD PTR [r8+200] + mov QWORD PTR [r13+192], rax + adc r9, QWORD PTR [r14+200] + mov r10, QWORD PTR [r8+208] + mov QWORD PTR [r13+200], r9 + adc r10, QWORD PTR [r14+208] + mov rax, QWORD PTR [r8+216] + mov QWORD PTR [r13+208], r10 + adc rax, QWORD PTR [r14+216] + mov r9, QWORD PTR [r8+224] + mov QWORD PTR [r13+216], rax + adc r9, QWORD PTR [r14+224] + mov r10, QWORD PTR [r8+232] + mov QWORD PTR [r13+224], r9 + adc r10, QWORD PTR [r14+232] + mov rax, QWORD PTR [r8+240] + mov QWORD PTR [r13+232], r10 + adc rax, QWORD PTR [r14+240] + mov r9, QWORD PTR [r8+248] + mov QWORD PTR [r13+240], rax + adc r9, QWORD PTR [r14+248] + mov QWORD PTR [r13+248], r9 + adc rdi, 0 + mov QWORD PTR [rsp+1568], rdi + mov r8, r13 + mov rdx, r12 + mov rcx, rsp + call sp_2048_mul_avx2_32 + mov r8, QWORD PTR [rsp+1552] + mov rdx, QWORD PTR [rsp+1544] + lea rcx, QWORD PTR [rsp+512] + add r8, 256 + add rdx, 256 + call sp_2048_mul_avx2_32 + mov r8, QWORD PTR [rsp+1552] + mov rdx, QWORD PTR [rsp+1544] + mov rcx, QWORD PTR [rsp+1536] + call sp_2048_mul_avx2_32 +IFDEF _WIN64 + mov r8, QWORD PTR [rsp+1552] + mov rdx, QWORD PTR [rsp+1544] + mov rcx, QWORD PTR [rsp+1536] +ENDIF + mov r15, QWORD PTR [rsp+1560] + mov rdi, QWORD PTR [rsp+1568] + mov rsi, QWORD PTR [rsp+1536] + mov r11, r15 + lea r12, QWORD PTR [rsp+1024] + lea r13, QWORD PTR [rsp+1280] + and r11, rdi + neg r15 + neg rdi + add rsi, 512 + mov rax, QWORD PTR [r12] + mov r9, QWORD PTR [r13] + pext rax, rax, rdi + pext r9, r9, r15 + add rax, r9 + mov r9, QWORD PTR [r12+8] + mov r10, QWORD PTR [r13+8] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi], rax + adc r9, r10 + mov r10, QWORD PTR [r12+16] + mov rax, QWORD PTR [r13+16] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+8], r9 + adc r10, rax + mov rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [r13+24] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+16], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+32] + mov r10, QWORD PTR [r13+32] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+24], rax + adc r9, r10 + mov r10, QWORD PTR [r12+40] + mov rax, QWORD PTR [r13+40] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+32], r9 + adc r10, rax + mov rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [r13+48] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+40], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+56] + mov r10, QWORD PTR [r13+56] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+48], rax + adc r9, r10 + mov r10, QWORD PTR [r12+64] + mov rax, QWORD PTR [r13+64] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+56], r9 + adc r10, rax + mov rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [r13+72] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+64], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+80] + mov r10, QWORD PTR [r13+80] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+72], rax + adc r9, r10 + mov r10, QWORD PTR [r12+88] + mov rax, QWORD PTR [r13+88] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+80], r9 + adc r10, rax + mov rax, QWORD PTR [r12+96] + mov r9, QWORD PTR [r13+96] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+88], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+104] + mov r10, QWORD PTR [r13+104] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+96], rax + adc r9, r10 + mov r10, QWORD PTR [r12+112] + mov rax, QWORD PTR [r13+112] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+104], r9 + adc r10, rax + mov rax, QWORD PTR [r12+120] + mov r9, QWORD PTR [r13+120] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+112], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+128] + mov r10, QWORD PTR [r13+128] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+120], rax + adc r9, r10 + mov r10, QWORD PTR [r12+136] + mov rax, QWORD PTR [r13+136] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+128], r9 + adc r10, rax + mov rax, QWORD PTR [r12+144] + mov r9, QWORD PTR [r13+144] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+136], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+152] + mov r10, QWORD PTR [r13+152] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+144], rax + adc r9, r10 + mov r10, QWORD PTR [r12+160] + mov rax, QWORD PTR [r13+160] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+152], r9 + adc r10, rax + mov rax, QWORD PTR [r12+168] + mov r9, QWORD PTR [r13+168] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+160], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+176] + mov r10, QWORD PTR [r13+176] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+168], rax + adc r9, r10 + mov r10, QWORD PTR [r12+184] + mov rax, QWORD PTR [r13+184] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+176], r9 + adc r10, rax + mov rax, QWORD PTR [r12+192] + mov r9, QWORD PTR [r13+192] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+184], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+200] + mov r10, QWORD PTR [r13+200] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+192], rax + adc r9, r10 + mov r10, QWORD PTR [r12+208] + mov rax, QWORD PTR [r13+208] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+200], r9 + adc r10, rax + mov rax, QWORD PTR [r12+216] + mov r9, QWORD PTR [r13+216] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+208], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+224] + mov r10, QWORD PTR [r13+224] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+216], rax + adc r9, r10 + mov r10, QWORD PTR [r12+232] + mov rax, QWORD PTR [r13+232] + pext r10, r10, rdi + pext rax, rax, r15 + mov QWORD PTR [rsi+224], r9 + adc r10, rax + mov rax, QWORD PTR [r12+240] + mov r9, QWORD PTR [r13+240] + pext rax, rax, rdi + pext r9, r9, r15 + mov QWORD PTR [rsi+232], r10 + adc rax, r9 + mov r9, QWORD PTR [r12+248] + mov r10, QWORD PTR [r13+248] + pext r9, r9, rdi + pext r10, r10, r15 + mov QWORD PTR [rsi+240], rax + adc r9, r10 + mov QWORD PTR [rsi+248], r9 + adc r11, 0 + lea r13, QWORD PTR [rsp+512] + mov r12, rsp + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [r13] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [r13+184] + mov rax, QWORD PTR [r12+192] + mov QWORD PTR [r12+184], r10 + sbb rax, QWORD PTR [r13+192] + mov r9, QWORD PTR [r12+200] + mov QWORD PTR [r12+192], rax + sbb r9, QWORD PTR [r13+200] + mov r10, QWORD PTR [r12+208] + mov QWORD PTR [r12+200], r9 + sbb r10, QWORD PTR [r13+208] + mov rax, QWORD PTR [r12+216] + mov QWORD PTR [r12+208], r10 + sbb rax, QWORD PTR [r13+216] + mov r9, QWORD PTR [r12+224] + mov QWORD PTR [r12+216], rax + sbb r9, QWORD PTR [r13+224] + mov r10, QWORD PTR [r12+232] + mov QWORD PTR [r12+224], r9 + sbb r10, QWORD PTR [r13+232] + mov rax, QWORD PTR [r12+240] + mov QWORD PTR [r12+232], r10 + sbb rax, QWORD PTR [r13+240] + mov r9, QWORD PTR [r12+248] + mov QWORD PTR [r12+240], rax + sbb r9, QWORD PTR [r13+248] + mov r10, QWORD PTR [r12+256] + mov QWORD PTR [r12+248], r9 + sbb r10, QWORD PTR [r13+256] + mov rax, QWORD PTR [r12+264] + mov QWORD PTR [r12+256], r10 + sbb rax, QWORD PTR [r13+264] + mov r9, QWORD PTR [r12+272] + mov QWORD PTR [r12+264], rax + sbb r9, QWORD PTR [r13+272] + mov r10, QWORD PTR [r12+280] + mov QWORD PTR [r12+272], r9 + sbb r10, QWORD PTR [r13+280] + mov rax, QWORD PTR [r12+288] + mov QWORD PTR [r12+280], r10 + sbb rax, QWORD PTR [r13+288] + mov r9, QWORD PTR [r12+296] + mov QWORD PTR [r12+288], rax + sbb r9, QWORD PTR [r13+296] + mov r10, QWORD PTR [r12+304] + mov QWORD PTR [r12+296], r9 + sbb r10, QWORD PTR [r13+304] + mov rax, QWORD PTR [r12+312] + mov QWORD PTR [r12+304], r10 + sbb rax, QWORD PTR [r13+312] + mov r9, QWORD PTR [r12+320] + mov QWORD PTR [r12+312], rax + sbb r9, QWORD PTR [r13+320] + mov r10, QWORD PTR [r12+328] + mov QWORD PTR [r12+320], r9 + sbb r10, QWORD PTR [r13+328] + mov rax, QWORD PTR [r12+336] + mov QWORD PTR [r12+328], r10 + sbb rax, QWORD PTR [r13+336] + mov r9, QWORD PTR [r12+344] + mov QWORD PTR [r12+336], rax + sbb r9, QWORD PTR [r13+344] + mov r10, QWORD PTR [r12+352] + mov QWORD PTR [r12+344], r9 + sbb r10, QWORD PTR [r13+352] + mov rax, QWORD PTR [r12+360] + mov QWORD PTR [r12+352], r10 + sbb rax, QWORD PTR [r13+360] + mov r9, QWORD PTR [r12+368] + mov QWORD PTR [r12+360], rax + sbb r9, QWORD PTR [r13+368] + mov r10, QWORD PTR [r12+376] + mov QWORD PTR [r12+368], r9 + sbb r10, QWORD PTR [r13+376] + mov rax, QWORD PTR [r12+384] + mov QWORD PTR [r12+376], r10 + sbb rax, QWORD PTR [r13+384] + mov r9, QWORD PTR [r12+392] + mov QWORD PTR [r12+384], rax + sbb r9, QWORD PTR [r13+392] + mov r10, QWORD PTR [r12+400] + mov QWORD PTR [r12+392], r9 + sbb r10, QWORD PTR [r13+400] + mov rax, QWORD PTR [r12+408] + mov QWORD PTR [r12+400], r10 + sbb rax, QWORD PTR [r13+408] + mov r9, QWORD PTR [r12+416] + mov QWORD PTR [r12+408], rax + sbb r9, QWORD PTR [r13+416] + mov r10, QWORD PTR [r12+424] + mov QWORD PTR [r12+416], r9 + sbb r10, QWORD PTR [r13+424] + mov rax, QWORD PTR [r12+432] + mov QWORD PTR [r12+424], r10 + sbb rax, QWORD PTR [r13+432] + mov r9, QWORD PTR [r12+440] + mov QWORD PTR [r12+432], rax + sbb r9, QWORD PTR [r13+440] + mov r10, QWORD PTR [r12+448] + mov QWORD PTR [r12+440], r9 + sbb r10, QWORD PTR [r13+448] + mov rax, QWORD PTR [r12+456] + mov QWORD PTR [r12+448], r10 + sbb rax, QWORD PTR [r13+456] + mov r9, QWORD PTR [r12+464] + mov QWORD PTR [r12+456], rax + sbb r9, QWORD PTR [r13+464] + mov r10, QWORD PTR [r12+472] + mov QWORD PTR [r12+464], r9 + sbb r10, QWORD PTR [r13+472] + mov rax, QWORD PTR [r12+480] + mov QWORD PTR [r12+472], r10 + sbb rax, QWORD PTR [r13+480] + mov r9, QWORD PTR [r12+488] + mov QWORD PTR [r12+480], rax + sbb r9, QWORD PTR [r13+488] + mov r10, QWORD PTR [r12+496] + mov QWORD PTR [r12+488], r9 + sbb r10, QWORD PTR [r13+496] + mov rax, QWORD PTR [r12+504] + mov QWORD PTR [r12+496], r10 + sbb rax, QWORD PTR [r13+504] + mov QWORD PTR [r12+504], rax + sbb r11, 0 + mov rax, QWORD PTR [r12] + sub rax, QWORD PTR [rcx] + mov r9, QWORD PTR [r12+8] + mov QWORD PTR [r12], rax + sbb r9, QWORD PTR [rcx+8] + mov r10, QWORD PTR [r12+16] + mov QWORD PTR [r12+8], r9 + sbb r10, QWORD PTR [rcx+16] + mov rax, QWORD PTR [r12+24] + mov QWORD PTR [r12+16], r10 + sbb rax, QWORD PTR [rcx+24] + mov r9, QWORD PTR [r12+32] + mov QWORD PTR [r12+24], rax + sbb r9, QWORD PTR [rcx+32] + mov r10, QWORD PTR [r12+40] + mov QWORD PTR [r12+32], r9 + sbb r10, QWORD PTR [rcx+40] + mov rax, QWORD PTR [r12+48] + mov QWORD PTR [r12+40], r10 + sbb rax, QWORD PTR [rcx+48] + mov r9, QWORD PTR [r12+56] + mov QWORD PTR [r12+48], rax + sbb r9, QWORD PTR [rcx+56] + mov r10, QWORD PTR [r12+64] + mov QWORD PTR [r12+56], r9 + sbb r10, QWORD PTR [rcx+64] + mov rax, QWORD PTR [r12+72] + mov QWORD PTR [r12+64], r10 + sbb rax, QWORD PTR [rcx+72] + mov r9, QWORD PTR [r12+80] + mov QWORD PTR [r12+72], rax + sbb r9, QWORD PTR [rcx+80] + mov r10, QWORD PTR [r12+88] + mov QWORD PTR [r12+80], r9 + sbb r10, QWORD PTR [rcx+88] + mov rax, QWORD PTR [r12+96] + mov QWORD PTR [r12+88], r10 + sbb rax, QWORD PTR [rcx+96] + mov r9, QWORD PTR [r12+104] + mov QWORD PTR [r12+96], rax + sbb r9, QWORD PTR [rcx+104] + mov r10, QWORD PTR [r12+112] + mov QWORD PTR [r12+104], r9 + sbb r10, QWORD PTR [rcx+112] + mov rax, QWORD PTR [r12+120] + mov QWORD PTR [r12+112], r10 + sbb rax, QWORD PTR [rcx+120] + mov r9, QWORD PTR [r12+128] + mov QWORD PTR [r12+120], rax + sbb r9, QWORD PTR [rcx+128] + mov r10, QWORD PTR [r12+136] + mov QWORD PTR [r12+128], r9 + sbb r10, QWORD PTR [rcx+136] + mov rax, QWORD PTR [r12+144] + mov QWORD PTR [r12+136], r10 + sbb rax, QWORD PTR [rcx+144] + mov r9, QWORD PTR [r12+152] + mov QWORD PTR [r12+144], rax + sbb r9, QWORD PTR [rcx+152] + mov r10, QWORD PTR [r12+160] + mov QWORD PTR [r12+152], r9 + sbb r10, QWORD PTR [rcx+160] + mov rax, QWORD PTR [r12+168] + mov QWORD PTR [r12+160], r10 + sbb rax, QWORD PTR [rcx+168] + mov r9, QWORD PTR [r12+176] + mov QWORD PTR [r12+168], rax + sbb r9, QWORD PTR [rcx+176] + mov r10, QWORD PTR [r12+184] + mov QWORD PTR [r12+176], r9 + sbb r10, QWORD PTR [rcx+184] + mov rax, QWORD PTR [r12+192] + mov QWORD PTR [r12+184], r10 + sbb rax, QWORD PTR [rcx+192] + mov r9, QWORD PTR [r12+200] + mov QWORD PTR [r12+192], rax + sbb r9, QWORD PTR [rcx+200] + mov r10, QWORD PTR [r12+208] + mov QWORD PTR [r12+200], r9 + sbb r10, QWORD PTR [rcx+208] + mov rax, QWORD PTR [r12+216] + mov QWORD PTR [r12+208], r10 + sbb rax, QWORD PTR [rcx+216] + mov r9, QWORD PTR [r12+224] + mov QWORD PTR [r12+216], rax + sbb r9, QWORD PTR [rcx+224] + mov r10, QWORD PTR [r12+232] + mov QWORD PTR [r12+224], r9 + sbb r10, QWORD PTR [rcx+232] + mov rax, QWORD PTR [r12+240] + mov QWORD PTR [r12+232], r10 + sbb rax, QWORD PTR [rcx+240] + mov r9, QWORD PTR [r12+248] + mov QWORD PTR [r12+240], rax + sbb r9, QWORD PTR [rcx+248] + mov r10, QWORD PTR [r12+256] + mov QWORD PTR [r12+248], r9 + sbb r10, QWORD PTR [rcx+256] + mov rax, QWORD PTR [r12+264] + mov QWORD PTR [r12+256], r10 + sbb rax, QWORD PTR [rcx+264] + mov r9, QWORD PTR [r12+272] + mov QWORD PTR [r12+264], rax + sbb r9, QWORD PTR [rcx+272] + mov r10, QWORD PTR [r12+280] + mov QWORD PTR [r12+272], r9 + sbb r10, QWORD PTR [rcx+280] + mov rax, QWORD PTR [r12+288] + mov QWORD PTR [r12+280], r10 + sbb rax, QWORD PTR [rcx+288] + mov r9, QWORD PTR [r12+296] + mov QWORD PTR [r12+288], rax + sbb r9, QWORD PTR [rcx+296] + mov r10, QWORD PTR [r12+304] + mov QWORD PTR [r12+296], r9 + sbb r10, QWORD PTR [rcx+304] + mov rax, QWORD PTR [r12+312] + mov QWORD PTR [r12+304], r10 + sbb rax, QWORD PTR [rcx+312] + mov r9, QWORD PTR [r12+320] + mov QWORD PTR [r12+312], rax + sbb r9, QWORD PTR [rcx+320] + mov r10, QWORD PTR [r12+328] + mov QWORD PTR [r12+320], r9 + sbb r10, QWORD PTR [rcx+328] + mov rax, QWORD PTR [r12+336] + mov QWORD PTR [r12+328], r10 + sbb rax, QWORD PTR [rcx+336] + mov r9, QWORD PTR [r12+344] + mov QWORD PTR [r12+336], rax + sbb r9, QWORD PTR [rcx+344] + mov r10, QWORD PTR [r12+352] + mov QWORD PTR [r12+344], r9 + sbb r10, QWORD PTR [rcx+352] + mov rax, QWORD PTR [r12+360] + mov QWORD PTR [r12+352], r10 + sbb rax, QWORD PTR [rcx+360] + mov r9, QWORD PTR [r12+368] + mov QWORD PTR [r12+360], rax + sbb r9, QWORD PTR [rcx+368] + mov r10, QWORD PTR [r12+376] + mov QWORD PTR [r12+368], r9 + sbb r10, QWORD PTR [rcx+376] + mov rax, QWORD PTR [r12+384] + mov QWORD PTR [r12+376], r10 + sbb rax, QWORD PTR [rcx+384] + mov r9, QWORD PTR [r12+392] + mov QWORD PTR [r12+384], rax + sbb r9, QWORD PTR [rcx+392] + mov r10, QWORD PTR [r12+400] + mov QWORD PTR [r12+392], r9 + sbb r10, QWORD PTR [rcx+400] + mov rax, QWORD PTR [r12+408] + mov QWORD PTR [r12+400], r10 + sbb rax, QWORD PTR [rcx+408] + mov r9, QWORD PTR [r12+416] + mov QWORD PTR [r12+408], rax + sbb r9, QWORD PTR [rcx+416] + mov r10, QWORD PTR [r12+424] + mov QWORD PTR [r12+416], r9 + sbb r10, QWORD PTR [rcx+424] + mov rax, QWORD PTR [r12+432] + mov QWORD PTR [r12+424], r10 + sbb rax, QWORD PTR [rcx+432] + mov r9, QWORD PTR [r12+440] + mov QWORD PTR [r12+432], rax + sbb r9, QWORD PTR [rcx+440] + mov r10, QWORD PTR [r12+448] + mov QWORD PTR [r12+440], r9 + sbb r10, QWORD PTR [rcx+448] + mov rax, QWORD PTR [r12+456] + mov QWORD PTR [r12+448], r10 + sbb rax, QWORD PTR [rcx+456] + mov r9, QWORD PTR [r12+464] + mov QWORD PTR [r12+456], rax + sbb r9, QWORD PTR [rcx+464] + mov r10, QWORD PTR [r12+472] + mov QWORD PTR [r12+464], r9 + sbb r10, QWORD PTR [rcx+472] + mov rax, QWORD PTR [r12+480] + mov QWORD PTR [r12+472], r10 + sbb rax, QWORD PTR [rcx+480] + mov r9, QWORD PTR [r12+488] + mov QWORD PTR [r12+480], rax + sbb r9, QWORD PTR [rcx+488] + mov r10, QWORD PTR [r12+496] + mov QWORD PTR [r12+488], r9 + sbb r10, QWORD PTR [rcx+496] + mov rax, QWORD PTR [r12+504] + mov QWORD PTR [r12+496], r10 + sbb rax, QWORD PTR [rcx+504] + mov QWORD PTR [r12+504], rax + sbb r11, 0 + sub rsi, 256 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r12] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r12+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r12+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r12+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r12+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r12+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r12+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r12+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r12+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r12+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r12+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r12+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r12+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r12+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r12+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r12+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r12+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r12+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r12+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r12+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r12+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r12+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r12+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r12+184] + mov rax, QWORD PTR [rsi+192] + mov QWORD PTR [rsi+184], r10 + adc rax, QWORD PTR [r12+192] + mov r9, QWORD PTR [rsi+200] + mov QWORD PTR [rsi+192], rax + adc r9, QWORD PTR [r12+200] + mov r10, QWORD PTR [rsi+208] + mov QWORD PTR [rsi+200], r9 + adc r10, QWORD PTR [r12+208] + mov rax, QWORD PTR [rsi+216] + mov QWORD PTR [rsi+208], r10 + adc rax, QWORD PTR [r12+216] + mov r9, QWORD PTR [rsi+224] + mov QWORD PTR [rsi+216], rax + adc r9, QWORD PTR [r12+224] + mov r10, QWORD PTR [rsi+232] + mov QWORD PTR [rsi+224], r9 + adc r10, QWORD PTR [r12+232] + mov rax, QWORD PTR [rsi+240] + mov QWORD PTR [rsi+232], r10 + adc rax, QWORD PTR [r12+240] + mov r9, QWORD PTR [rsi+248] + mov QWORD PTR [rsi+240], rax + adc r9, QWORD PTR [r12+248] + mov r10, QWORD PTR [rsi+256] + mov QWORD PTR [rsi+248], r9 + adc r10, QWORD PTR [r12+256] + mov rax, QWORD PTR [rsi+264] + mov QWORD PTR [rsi+256], r10 + adc rax, QWORD PTR [r12+264] + mov r9, QWORD PTR [rsi+272] + mov QWORD PTR [rsi+264], rax + adc r9, QWORD PTR [r12+272] + mov r10, QWORD PTR [rsi+280] + mov QWORD PTR [rsi+272], r9 + adc r10, QWORD PTR [r12+280] + mov rax, QWORD PTR [rsi+288] + mov QWORD PTR [rsi+280], r10 + adc rax, QWORD PTR [r12+288] + mov r9, QWORD PTR [rsi+296] + mov QWORD PTR [rsi+288], rax + adc r9, QWORD PTR [r12+296] + mov r10, QWORD PTR [rsi+304] + mov QWORD PTR [rsi+296], r9 + adc r10, QWORD PTR [r12+304] + mov rax, QWORD PTR [rsi+312] + mov QWORD PTR [rsi+304], r10 + adc rax, QWORD PTR [r12+312] + mov r9, QWORD PTR [rsi+320] + mov QWORD PTR [rsi+312], rax + adc r9, QWORD PTR [r12+320] + mov r10, QWORD PTR [rsi+328] + mov QWORD PTR [rsi+320], r9 + adc r10, QWORD PTR [r12+328] + mov rax, QWORD PTR [rsi+336] + mov QWORD PTR [rsi+328], r10 + adc rax, QWORD PTR [r12+336] + mov r9, QWORD PTR [rsi+344] + mov QWORD PTR [rsi+336], rax + adc r9, QWORD PTR [r12+344] + mov r10, QWORD PTR [rsi+352] + mov QWORD PTR [rsi+344], r9 + adc r10, QWORD PTR [r12+352] + mov rax, QWORD PTR [rsi+360] + mov QWORD PTR [rsi+352], r10 + adc rax, QWORD PTR [r12+360] + mov r9, QWORD PTR [rsi+368] + mov QWORD PTR [rsi+360], rax + adc r9, QWORD PTR [r12+368] + mov r10, QWORD PTR [rsi+376] + mov QWORD PTR [rsi+368], r9 + adc r10, QWORD PTR [r12+376] + mov rax, QWORD PTR [rsi+384] + mov QWORD PTR [rsi+376], r10 + adc rax, QWORD PTR [r12+384] + mov r9, QWORD PTR [rsi+392] + mov QWORD PTR [rsi+384], rax + adc r9, QWORD PTR [r12+392] + mov r10, QWORD PTR [rsi+400] + mov QWORD PTR [rsi+392], r9 + adc r10, QWORD PTR [r12+400] + mov rax, QWORD PTR [rsi+408] + mov QWORD PTR [rsi+400], r10 + adc rax, QWORD PTR [r12+408] + mov r9, QWORD PTR [rsi+416] + mov QWORD PTR [rsi+408], rax + adc r9, QWORD PTR [r12+416] + mov r10, QWORD PTR [rsi+424] + mov QWORD PTR [rsi+416], r9 + adc r10, QWORD PTR [r12+424] + mov rax, QWORD PTR [rsi+432] + mov QWORD PTR [rsi+424], r10 + adc rax, QWORD PTR [r12+432] + mov r9, QWORD PTR [rsi+440] + mov QWORD PTR [rsi+432], rax + adc r9, QWORD PTR [r12+440] + mov r10, QWORD PTR [rsi+448] + mov QWORD PTR [rsi+440], r9 + adc r10, QWORD PTR [r12+448] + mov rax, QWORD PTR [rsi+456] + mov QWORD PTR [rsi+448], r10 + adc rax, QWORD PTR [r12+456] + mov r9, QWORD PTR [rsi+464] + mov QWORD PTR [rsi+456], rax + adc r9, QWORD PTR [r12+464] + mov r10, QWORD PTR [rsi+472] + mov QWORD PTR [rsi+464], r9 + adc r10, QWORD PTR [r12+472] + mov rax, QWORD PTR [rsi+480] + mov QWORD PTR [rsi+472], r10 + adc rax, QWORD PTR [r12+480] + mov r9, QWORD PTR [rsi+488] + mov QWORD PTR [rsi+480], rax + adc r9, QWORD PTR [r12+488] + mov r10, QWORD PTR [rsi+496] + mov QWORD PTR [rsi+488], r9 + adc r10, QWORD PTR [r12+496] + mov rax, QWORD PTR [rsi+504] + mov QWORD PTR [rsi+496], r10 + adc rax, QWORD PTR [r12+504] + mov QWORD PTR [rsi+504], rax + adc r11, 0 + mov QWORD PTR [rcx+768], r11 + add rsi, 256 + ; Add + mov rax, QWORD PTR [rsi] + add rax, QWORD PTR [r13] + mov r9, QWORD PTR [rsi+8] + mov QWORD PTR [rsi], rax + adc r9, QWORD PTR [r13+8] + mov r10, QWORD PTR [rsi+16] + mov QWORD PTR [rsi+8], r9 + adc r10, QWORD PTR [r13+16] + mov rax, QWORD PTR [rsi+24] + mov QWORD PTR [rsi+16], r10 + adc rax, QWORD PTR [r13+24] + mov r9, QWORD PTR [rsi+32] + mov QWORD PTR [rsi+24], rax + adc r9, QWORD PTR [r13+32] + mov r10, QWORD PTR [rsi+40] + mov QWORD PTR [rsi+32], r9 + adc r10, QWORD PTR [r13+40] + mov rax, QWORD PTR [rsi+48] + mov QWORD PTR [rsi+40], r10 + adc rax, QWORD PTR [r13+48] + mov r9, QWORD PTR [rsi+56] + mov QWORD PTR [rsi+48], rax + adc r9, QWORD PTR [r13+56] + mov r10, QWORD PTR [rsi+64] + mov QWORD PTR [rsi+56], r9 + adc r10, QWORD PTR [r13+64] + mov rax, QWORD PTR [rsi+72] + mov QWORD PTR [rsi+64], r10 + adc rax, QWORD PTR [r13+72] + mov r9, QWORD PTR [rsi+80] + mov QWORD PTR [rsi+72], rax + adc r9, QWORD PTR [r13+80] + mov r10, QWORD PTR [rsi+88] + mov QWORD PTR [rsi+80], r9 + adc r10, QWORD PTR [r13+88] + mov rax, QWORD PTR [rsi+96] + mov QWORD PTR [rsi+88], r10 + adc rax, QWORD PTR [r13+96] + mov r9, QWORD PTR [rsi+104] + mov QWORD PTR [rsi+96], rax + adc r9, QWORD PTR [r13+104] + mov r10, QWORD PTR [rsi+112] + mov QWORD PTR [rsi+104], r9 + adc r10, QWORD PTR [r13+112] + mov rax, QWORD PTR [rsi+120] + mov QWORD PTR [rsi+112], r10 + adc rax, QWORD PTR [r13+120] + mov r9, QWORD PTR [rsi+128] + mov QWORD PTR [rsi+120], rax + adc r9, QWORD PTR [r13+128] + mov r10, QWORD PTR [rsi+136] + mov QWORD PTR [rsi+128], r9 + adc r10, QWORD PTR [r13+136] + mov rax, QWORD PTR [rsi+144] + mov QWORD PTR [rsi+136], r10 + adc rax, QWORD PTR [r13+144] + mov r9, QWORD PTR [rsi+152] + mov QWORD PTR [rsi+144], rax + adc r9, QWORD PTR [r13+152] + mov r10, QWORD PTR [rsi+160] + mov QWORD PTR [rsi+152], r9 + adc r10, QWORD PTR [r13+160] + mov rax, QWORD PTR [rsi+168] + mov QWORD PTR [rsi+160], r10 + adc rax, QWORD PTR [r13+168] + mov r9, QWORD PTR [rsi+176] + mov QWORD PTR [rsi+168], rax + adc r9, QWORD PTR [r13+176] + mov r10, QWORD PTR [rsi+184] + mov QWORD PTR [rsi+176], r9 + adc r10, QWORD PTR [r13+184] + mov rax, QWORD PTR [rsi+192] + mov QWORD PTR [rsi+184], r10 + adc rax, QWORD PTR [r13+192] + mov r9, QWORD PTR [rsi+200] + mov QWORD PTR [rsi+192], rax + adc r9, QWORD PTR [r13+200] + mov r10, QWORD PTR [rsi+208] + mov QWORD PTR [rsi+200], r9 + adc r10, QWORD PTR [r13+208] + mov rax, QWORD PTR [rsi+216] + mov QWORD PTR [rsi+208], r10 + adc rax, QWORD PTR [r13+216] + mov r9, QWORD PTR [rsi+224] + mov QWORD PTR [rsi+216], rax + adc r9, QWORD PTR [r13+224] + mov r10, QWORD PTR [rsi+232] + mov QWORD PTR [rsi+224], r9 + adc r10, QWORD PTR [r13+232] + mov rax, QWORD PTR [rsi+240] + mov QWORD PTR [rsi+232], r10 + adc rax, QWORD PTR [r13+240] + mov r9, QWORD PTR [rsi+248] + mov QWORD PTR [rsi+240], rax + adc r9, QWORD PTR [r13+248] + mov r10, QWORD PTR [rsi+256] + mov QWORD PTR [rsi+248], r9 + adc r10, QWORD PTR [r13+256] + mov QWORD PTR [rsi+256], r10 + ; Add to zero + mov rax, QWORD PTR [r13+264] + adc rax, 0 + mov r9, QWORD PTR [r13+272] + mov QWORD PTR [rsi+264], rax + adc r9, 0 + mov r10, QWORD PTR [r13+280] + mov QWORD PTR [rsi+272], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+288] + mov QWORD PTR [rsi+280], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+296] + mov QWORD PTR [rsi+288], rax + adc r9, 0 + mov r10, QWORD PTR [r13+304] + mov QWORD PTR [rsi+296], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+312] + mov QWORD PTR [rsi+304], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+320] + mov QWORD PTR [rsi+312], rax + adc r9, 0 + mov r10, QWORD PTR [r13+328] + mov QWORD PTR [rsi+320], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+336] + mov QWORD PTR [rsi+328], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+344] + mov QWORD PTR [rsi+336], rax + adc r9, 0 + mov r10, QWORD PTR [r13+352] + mov QWORD PTR [rsi+344], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+360] + mov QWORD PTR [rsi+352], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+368] + mov QWORD PTR [rsi+360], rax + adc r9, 0 + mov r10, QWORD PTR [r13+376] + mov QWORD PTR [rsi+368], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+384] + mov QWORD PTR [rsi+376], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+392] + mov QWORD PTR [rsi+384], rax + adc r9, 0 + mov r10, QWORD PTR [r13+400] + mov QWORD PTR [rsi+392], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+408] + mov QWORD PTR [rsi+400], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+416] + mov QWORD PTR [rsi+408], rax + adc r9, 0 + mov r10, QWORD PTR [r13+424] + mov QWORD PTR [rsi+416], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+432] + mov QWORD PTR [rsi+424], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+440] + mov QWORD PTR [rsi+432], rax + adc r9, 0 + mov r10, QWORD PTR [r13+448] + mov QWORD PTR [rsi+440], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+456] + mov QWORD PTR [rsi+448], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+464] + mov QWORD PTR [rsi+456], rax + adc r9, 0 + mov r10, QWORD PTR [r13+472] + mov QWORD PTR [rsi+464], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+480] + mov QWORD PTR [rsi+472], r10 + adc rax, 0 + mov r9, QWORD PTR [r13+488] + mov QWORD PTR [rsi+480], rax + adc r9, 0 + mov r10, QWORD PTR [r13+496] + mov QWORD PTR [rsi+488], r9 + adc r10, 0 + mov rax, QWORD PTR [r13+504] + mov QWORD PTR [rsi+496], r10 + adc rax, 0 + mov QWORD PTR [rsi+504], rax + add rsp, 1576 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +sp_4096_mul_avx2_64 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_sqr_64 PROC + sub rsp, 528 + mov QWORD PTR [rsp+512], rcx + mov QWORD PTR [rsp+520], rdx + mov r9, 0 + mov r10, rsp + lea r11, QWORD PTR [rdx+256] + mov rax, QWORD PTR [rdx] + sub rax, QWORD PTR [r11] + mov r8, QWORD PTR [rdx+8] + mov QWORD PTR [r10], rax + sbb r8, QWORD PTR [r11+8] + mov rax, QWORD PTR [rdx+16] + mov QWORD PTR [r10+8], r8 + sbb rax, QWORD PTR [r11+16] + mov r8, QWORD PTR [rdx+24] + mov QWORD PTR [r10+16], rax + sbb r8, QWORD PTR [r11+24] + mov rax, QWORD PTR [rdx+32] + mov QWORD PTR [r10+24], r8 + sbb rax, QWORD PTR [r11+32] + mov r8, QWORD PTR [rdx+40] + mov QWORD PTR [r10+32], rax + sbb r8, QWORD PTR [r11+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r10+40], r8 + sbb rax, QWORD PTR [r11+48] + mov r8, QWORD PTR [rdx+56] + mov QWORD PTR [r10+48], rax + sbb r8, QWORD PTR [r11+56] + mov rax, QWORD PTR [rdx+64] + mov QWORD PTR [r10+56], r8 + sbb rax, QWORD PTR [r11+64] + mov r8, QWORD PTR [rdx+72] + mov QWORD PTR [r10+64], rax + sbb r8, QWORD PTR [r11+72] + mov rax, QWORD PTR [rdx+80] + mov QWORD PTR [r10+72], r8 + sbb rax, QWORD PTR [r11+80] + mov r8, QWORD PTR [rdx+88] + mov QWORD PTR [r10+80], rax + sbb r8, QWORD PTR [r11+88] + mov rax, QWORD PTR [rdx+96] + mov QWORD PTR [r10+88], r8 + sbb rax, QWORD PTR [r11+96] + mov r8, QWORD PTR [rdx+104] + mov QWORD PTR [r10+96], rax + sbb r8, QWORD PTR [r11+104] + mov rax, QWORD PTR [rdx+112] + mov QWORD PTR [r10+104], r8 + sbb rax, QWORD PTR [r11+112] + mov r8, QWORD PTR [rdx+120] + mov QWORD PTR [r10+112], rax + sbb r8, QWORD PTR [r11+120] + mov rax, QWORD PTR [rdx+128] + mov QWORD PTR [r10+120], r8 + sbb rax, QWORD PTR [r11+128] + mov r8, QWORD PTR [rdx+136] + mov QWORD PTR [r10+128], rax + sbb r8, QWORD PTR [r11+136] + mov rax, QWORD PTR [rdx+144] + mov QWORD PTR [r10+136], r8 + sbb rax, QWORD PTR [r11+144] + mov r8, QWORD PTR [rdx+152] + mov QWORD PTR [r10+144], rax + sbb r8, QWORD PTR [r11+152] + mov rax, QWORD PTR [rdx+160] + mov QWORD PTR [r10+152], r8 + sbb rax, QWORD PTR [r11+160] + mov r8, QWORD PTR [rdx+168] + mov QWORD PTR [r10+160], rax + sbb r8, QWORD PTR [r11+168] + mov rax, QWORD PTR [rdx+176] + mov QWORD PTR [r10+168], r8 + sbb rax, QWORD PTR [r11+176] + mov r8, QWORD PTR [rdx+184] + mov QWORD PTR [r10+176], rax + sbb r8, QWORD PTR [r11+184] + mov rax, QWORD PTR [rdx+192] + mov QWORD PTR [r10+184], r8 + sbb rax, QWORD PTR [r11+192] + mov r8, QWORD PTR [rdx+200] + mov QWORD PTR [r10+192], rax + sbb r8, QWORD PTR [r11+200] + mov rax, QWORD PTR [rdx+208] + mov QWORD PTR [r10+200], r8 + sbb rax, QWORD PTR [r11+208] + mov r8, QWORD PTR [rdx+216] + mov QWORD PTR [r10+208], rax + sbb r8, QWORD PTR [r11+216] + mov rax, QWORD PTR [rdx+224] + mov QWORD PTR [r10+216], r8 + sbb rax, QWORD PTR [r11+224] + mov r8, QWORD PTR [rdx+232] + mov QWORD PTR [r10+224], rax + sbb r8, QWORD PTR [r11+232] + mov rax, QWORD PTR [rdx+240] + mov QWORD PTR [r10+232], r8 + sbb rax, QWORD PTR [r11+240] + mov r8, QWORD PTR [rdx+248] + mov QWORD PTR [r10+240], rax + sbb r8, QWORD PTR [r11+248] + mov QWORD PTR [r10+248], r8 + sbb r9, 0 + ; Cond Negate + mov rax, QWORD PTR [r10] + mov r11, r9 + xor rax, r9 + neg r11 + sub rax, r9 + mov r8, QWORD PTR [r10+8] + sbb r11, 0 + mov QWORD PTR [r10], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+16] + setc r11b + mov QWORD PTR [r10+8], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+24] + setc r11b + mov QWORD PTR [r10+16], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+32] + setc r11b + mov QWORD PTR [r10+24], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+40] + setc r11b + mov QWORD PTR [r10+32], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+48] + setc r11b + mov QWORD PTR [r10+40], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+56] + setc r11b + mov QWORD PTR [r10+48], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+64] + setc r11b + mov QWORD PTR [r10+56], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+72] + setc r11b + mov QWORD PTR [r10+64], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+80] + setc r11b + mov QWORD PTR [r10+72], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+88] + setc r11b + mov QWORD PTR [r10+80], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+96] + setc r11b + mov QWORD PTR [r10+88], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+104] + setc r11b + mov QWORD PTR [r10+96], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+112] + setc r11b + mov QWORD PTR [r10+104], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+120] + setc r11b + mov QWORD PTR [r10+112], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+128] + setc r11b + mov QWORD PTR [r10+120], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+136] + setc r11b + mov QWORD PTR [r10+128], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+144] + setc r11b + mov QWORD PTR [r10+136], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+152] + setc r11b + mov QWORD PTR [r10+144], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+160] + setc r11b + mov QWORD PTR [r10+152], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+168] + setc r11b + mov QWORD PTR [r10+160], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+176] + setc r11b + mov QWORD PTR [r10+168], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+184] + setc r11b + mov QWORD PTR [r10+176], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+192] + setc r11b + mov QWORD PTR [r10+184], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+200] + setc r11b + mov QWORD PTR [r10+192], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+208] + setc r11b + mov QWORD PTR [r10+200], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+216] + setc r11b + mov QWORD PTR [r10+208], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+224] + setc r11b + mov QWORD PTR [r10+216], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+232] + setc r11b + mov QWORD PTR [r10+224], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+240] + setc r11b + mov QWORD PTR [r10+232], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+248] + setc r11b + mov QWORD PTR [r10+240], rax + xor r8, r9 + add r8, r11 + mov QWORD PTR [r10+248], r8 + mov rdx, r10 + mov rcx, rsp + call sp_2048_sqr_32 + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] + add rdx, 256 + add rcx, 512 + call sp_2048_sqr_32 + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] + call sp_2048_sqr_32 +IFDEF _WIN64 + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] +ENDIF + mov rdx, QWORD PTR [rsp+512] + lea r10, QWORD PTR [rsp+256] + add rdx, 768 + mov r9, 0 + mov r8, QWORD PTR [r10+-256] + sub r8, QWORD PTR [rdx+-256] + mov rax, QWORD PTR [r10+-248] + mov QWORD PTR [r10+-256], r8 + sbb rax, QWORD PTR [rdx+-248] + mov r8, QWORD PTR [r10+-240] + mov QWORD PTR [r10+-248], rax + sbb r8, QWORD PTR [rdx+-240] + mov rax, QWORD PTR [r10+-232] + mov QWORD PTR [r10+-240], r8 + sbb rax, QWORD PTR [rdx+-232] + mov r8, QWORD PTR [r10+-224] + mov QWORD PTR [r10+-232], rax + sbb r8, QWORD PTR [rdx+-224] + mov rax, QWORD PTR [r10+-216] + mov QWORD PTR [r10+-224], r8 + sbb rax, QWORD PTR [rdx+-216] + mov r8, QWORD PTR [r10+-208] + mov QWORD PTR [r10+-216], rax + sbb r8, QWORD PTR [rdx+-208] + mov rax, QWORD PTR [r10+-200] + mov QWORD PTR [r10+-208], r8 + sbb rax, QWORD PTR [rdx+-200] + mov r8, QWORD PTR [r10+-192] + mov QWORD PTR [r10+-200], rax + sbb r8, QWORD PTR [rdx+-192] + mov rax, QWORD PTR [r10+-184] + mov QWORD PTR [r10+-192], r8 + sbb rax, QWORD PTR [rdx+-184] + mov r8, QWORD PTR [r10+-176] + mov QWORD PTR [r10+-184], rax + sbb r8, QWORD PTR [rdx+-176] + mov rax, QWORD PTR [r10+-168] + mov QWORD PTR [r10+-176], r8 + sbb rax, QWORD PTR [rdx+-168] + mov r8, QWORD PTR [r10+-160] + mov QWORD PTR [r10+-168], rax + sbb r8, QWORD PTR [rdx+-160] + mov rax, QWORD PTR [r10+-152] + mov QWORD PTR [r10+-160], r8 + sbb rax, QWORD PTR [rdx+-152] + mov r8, QWORD PTR [r10+-144] + mov QWORD PTR [r10+-152], rax + sbb r8, QWORD PTR [rdx+-144] + mov rax, QWORD PTR [r10+-136] + mov QWORD PTR [r10+-144], r8 + sbb rax, QWORD PTR [rdx+-136] + mov r8, QWORD PTR [r10+-128] + mov QWORD PTR [r10+-136], rax + sbb r8, QWORD PTR [rdx+-128] + mov rax, QWORD PTR [r10+-120] + mov QWORD PTR [r10+-128], r8 + sbb rax, QWORD PTR [rdx+-120] + mov r8, QWORD PTR [r10+-112] + mov QWORD PTR [r10+-120], rax + sbb r8, QWORD PTR [rdx+-112] + mov rax, QWORD PTR [r10+-104] + mov QWORD PTR [r10+-112], r8 + sbb rax, QWORD PTR [rdx+-104] + mov r8, QWORD PTR [r10+-96] + mov QWORD PTR [r10+-104], rax + sbb r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov r8, QWORD PTR [r10+96] + mov QWORD PTR [r10+88], rax + sbb r8, QWORD PTR [rdx+96] + mov rax, QWORD PTR [r10+104] + mov QWORD PTR [r10+96], r8 + sbb rax, QWORD PTR [rdx+104] + mov r8, QWORD PTR [r10+112] + mov QWORD PTR [r10+104], rax + sbb r8, QWORD PTR [rdx+112] + mov rax, QWORD PTR [r10+120] + mov QWORD PTR [r10+112], r8 + sbb rax, QWORD PTR [rdx+120] + mov r8, QWORD PTR [r10+128] + mov QWORD PTR [r10+120], rax + sbb r8, QWORD PTR [rdx+128] + mov rax, QWORD PTR [r10+136] + mov QWORD PTR [r10+128], r8 + sbb rax, QWORD PTR [rdx+136] + mov r8, QWORD PTR [r10+144] + mov QWORD PTR [r10+136], rax + sbb r8, QWORD PTR [rdx+144] + mov rax, QWORD PTR [r10+152] + mov QWORD PTR [r10+144], r8 + sbb rax, QWORD PTR [rdx+152] + mov r8, QWORD PTR [r10+160] + mov QWORD PTR [r10+152], rax + sbb r8, QWORD PTR [rdx+160] + mov rax, QWORD PTR [r10+168] + mov QWORD PTR [r10+160], r8 + sbb rax, QWORD PTR [rdx+168] + mov r8, QWORD PTR [r10+176] + mov QWORD PTR [r10+168], rax + sbb r8, QWORD PTR [rdx+176] + mov rax, QWORD PTR [r10+184] + mov QWORD PTR [r10+176], r8 + sbb rax, QWORD PTR [rdx+184] + mov r8, QWORD PTR [r10+192] + mov QWORD PTR [r10+184], rax + sbb r8, QWORD PTR [rdx+192] + mov rax, QWORD PTR [r10+200] + mov QWORD PTR [r10+192], r8 + sbb rax, QWORD PTR [rdx+200] + mov r8, QWORD PTR [r10+208] + mov QWORD PTR [r10+200], rax + sbb r8, QWORD PTR [rdx+208] + mov rax, QWORD PTR [r10+216] + mov QWORD PTR [r10+208], r8 + sbb rax, QWORD PTR [rdx+216] + mov r8, QWORD PTR [r10+224] + mov QWORD PTR [r10+216], rax + sbb r8, QWORD PTR [rdx+224] + mov rax, QWORD PTR [r10+232] + mov QWORD PTR [r10+224], r8 + sbb rax, QWORD PTR [rdx+232] + mov r8, QWORD PTR [r10+240] + mov QWORD PTR [r10+232], rax + sbb r8, QWORD PTR [rdx+240] + mov rax, QWORD PTR [r10+248] + mov QWORD PTR [r10+240], r8 + sbb rax, QWORD PTR [rdx+248] + mov QWORD PTR [r10+248], rax + sbb r9, 0 + sub rdx, 512 + mov r8, QWORD PTR [r10+-256] + sub r8, QWORD PTR [rdx+-256] + mov rax, QWORD PTR [r10+-248] + mov QWORD PTR [r10+-256], r8 + sbb rax, QWORD PTR [rdx+-248] + mov r8, QWORD PTR [r10+-240] + mov QWORD PTR [r10+-248], rax + sbb r8, QWORD PTR [rdx+-240] + mov rax, QWORD PTR [r10+-232] + mov QWORD PTR [r10+-240], r8 + sbb rax, QWORD PTR [rdx+-232] + mov r8, QWORD PTR [r10+-224] + mov QWORD PTR [r10+-232], rax + sbb r8, QWORD PTR [rdx+-224] + mov rax, QWORD PTR [r10+-216] + mov QWORD PTR [r10+-224], r8 + sbb rax, QWORD PTR [rdx+-216] + mov r8, QWORD PTR [r10+-208] + mov QWORD PTR [r10+-216], rax + sbb r8, QWORD PTR [rdx+-208] + mov rax, QWORD PTR [r10+-200] + mov QWORD PTR [r10+-208], r8 + sbb rax, QWORD PTR [rdx+-200] + mov r8, QWORD PTR [r10+-192] + mov QWORD PTR [r10+-200], rax + sbb r8, QWORD PTR [rdx+-192] + mov rax, QWORD PTR [r10+-184] + mov QWORD PTR [r10+-192], r8 + sbb rax, QWORD PTR [rdx+-184] + mov r8, QWORD PTR [r10+-176] + mov QWORD PTR [r10+-184], rax + sbb r8, QWORD PTR [rdx+-176] + mov rax, QWORD PTR [r10+-168] + mov QWORD PTR [r10+-176], r8 + sbb rax, QWORD PTR [rdx+-168] + mov r8, QWORD PTR [r10+-160] + mov QWORD PTR [r10+-168], rax + sbb r8, QWORD PTR [rdx+-160] + mov rax, QWORD PTR [r10+-152] + mov QWORD PTR [r10+-160], r8 + sbb rax, QWORD PTR [rdx+-152] + mov r8, QWORD PTR [r10+-144] + mov QWORD PTR [r10+-152], rax + sbb r8, QWORD PTR [rdx+-144] + mov rax, QWORD PTR [r10+-136] + mov QWORD PTR [r10+-144], r8 + sbb rax, QWORD PTR [rdx+-136] + mov r8, QWORD PTR [r10+-128] + mov QWORD PTR [r10+-136], rax + sbb r8, QWORD PTR [rdx+-128] + mov rax, QWORD PTR [r10+-120] + mov QWORD PTR [r10+-128], r8 + sbb rax, QWORD PTR [rdx+-120] + mov r8, QWORD PTR [r10+-112] + mov QWORD PTR [r10+-120], rax + sbb r8, QWORD PTR [rdx+-112] + mov rax, QWORD PTR [r10+-104] + mov QWORD PTR [r10+-112], r8 + sbb rax, QWORD PTR [rdx+-104] + mov r8, QWORD PTR [r10+-96] + mov QWORD PTR [r10+-104], rax + sbb r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov r8, QWORD PTR [r10+96] + mov QWORD PTR [r10+88], rax + sbb r8, QWORD PTR [rdx+96] + mov rax, QWORD PTR [r10+104] + mov QWORD PTR [r10+96], r8 + sbb rax, QWORD PTR [rdx+104] + mov r8, QWORD PTR [r10+112] + mov QWORD PTR [r10+104], rax + sbb r8, QWORD PTR [rdx+112] + mov rax, QWORD PTR [r10+120] + mov QWORD PTR [r10+112], r8 + sbb rax, QWORD PTR [rdx+120] + mov r8, QWORD PTR [r10+128] + mov QWORD PTR [r10+120], rax + sbb r8, QWORD PTR [rdx+128] + mov rax, QWORD PTR [r10+136] + mov QWORD PTR [r10+128], r8 + sbb rax, QWORD PTR [rdx+136] + mov r8, QWORD PTR [r10+144] + mov QWORD PTR [r10+136], rax + sbb r8, QWORD PTR [rdx+144] + mov rax, QWORD PTR [r10+152] + mov QWORD PTR [r10+144], r8 + sbb rax, QWORD PTR [rdx+152] + mov r8, QWORD PTR [r10+160] + mov QWORD PTR [r10+152], rax + sbb r8, QWORD PTR [rdx+160] + mov rax, QWORD PTR [r10+168] + mov QWORD PTR [r10+160], r8 + sbb rax, QWORD PTR [rdx+168] + mov r8, QWORD PTR [r10+176] + mov QWORD PTR [r10+168], rax + sbb r8, QWORD PTR [rdx+176] + mov rax, QWORD PTR [r10+184] + mov QWORD PTR [r10+176], r8 + sbb rax, QWORD PTR [rdx+184] + mov r8, QWORD PTR [r10+192] + mov QWORD PTR [r10+184], rax + sbb r8, QWORD PTR [rdx+192] + mov rax, QWORD PTR [r10+200] + mov QWORD PTR [r10+192], r8 + sbb rax, QWORD PTR [rdx+200] + mov r8, QWORD PTR [r10+208] + mov QWORD PTR [r10+200], rax + sbb r8, QWORD PTR [rdx+208] + mov rax, QWORD PTR [r10+216] + mov QWORD PTR [r10+208], r8 + sbb rax, QWORD PTR [rdx+216] + mov r8, QWORD PTR [r10+224] + mov QWORD PTR [r10+216], rax + sbb r8, QWORD PTR [rdx+224] + mov rax, QWORD PTR [r10+232] + mov QWORD PTR [r10+224], r8 + sbb rax, QWORD PTR [rdx+232] + mov r8, QWORD PTR [r10+240] + mov QWORD PTR [r10+232], rax + sbb r8, QWORD PTR [rdx+240] + mov rax, QWORD PTR [r10+248] + mov QWORD PTR [r10+240], r8 + sbb rax, QWORD PTR [rdx+248] + mov QWORD PTR [r10+248], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+512] + neg r9 + add rcx, 512 + mov r8, QWORD PTR [rcx+-256] + sub r8, QWORD PTR [r10+-256] + mov rax, QWORD PTR [rcx+-248] + mov QWORD PTR [rcx+-256], r8 + sbb rax, QWORD PTR [r10+-248] + mov r8, QWORD PTR [rcx+-240] + mov QWORD PTR [rcx+-248], rax + sbb r8, QWORD PTR [r10+-240] + mov rax, QWORD PTR [rcx+-232] + mov QWORD PTR [rcx+-240], r8 + sbb rax, QWORD PTR [r10+-232] + mov r8, QWORD PTR [rcx+-224] + mov QWORD PTR [rcx+-232], rax + sbb r8, QWORD PTR [r10+-224] + mov rax, QWORD PTR [rcx+-216] + mov QWORD PTR [rcx+-224], r8 + sbb rax, QWORD PTR [r10+-216] + mov r8, QWORD PTR [rcx+-208] + mov QWORD PTR [rcx+-216], rax + sbb r8, QWORD PTR [r10+-208] + mov rax, QWORD PTR [rcx+-200] + mov QWORD PTR [rcx+-208], r8 + sbb rax, QWORD PTR [r10+-200] + mov r8, QWORD PTR [rcx+-192] + mov QWORD PTR [rcx+-200], rax + sbb r8, QWORD PTR [r10+-192] + mov rax, QWORD PTR [rcx+-184] + mov QWORD PTR [rcx+-192], r8 + sbb rax, QWORD PTR [r10+-184] + mov r8, QWORD PTR [rcx+-176] + mov QWORD PTR [rcx+-184], rax + sbb r8, QWORD PTR [r10+-176] + mov rax, QWORD PTR [rcx+-168] + mov QWORD PTR [rcx+-176], r8 + sbb rax, QWORD PTR [r10+-168] + mov r8, QWORD PTR [rcx+-160] + mov QWORD PTR [rcx+-168], rax + sbb r8, QWORD PTR [r10+-160] + mov rax, QWORD PTR [rcx+-152] + mov QWORD PTR [rcx+-160], r8 + sbb rax, QWORD PTR [r10+-152] + mov r8, QWORD PTR [rcx+-144] + mov QWORD PTR [rcx+-152], rax + sbb r8, QWORD PTR [r10+-144] + mov rax, QWORD PTR [rcx+-136] + mov QWORD PTR [rcx+-144], r8 + sbb rax, QWORD PTR [r10+-136] + mov r8, QWORD PTR [rcx+-128] + mov QWORD PTR [rcx+-136], rax + sbb r8, QWORD PTR [r10+-128] + mov rax, QWORD PTR [rcx+-120] + mov QWORD PTR [rcx+-128], r8 + sbb rax, QWORD PTR [r10+-120] + mov r8, QWORD PTR [rcx+-112] + mov QWORD PTR [rcx+-120], rax + sbb r8, QWORD PTR [r10+-112] + mov rax, QWORD PTR [rcx+-104] + mov QWORD PTR [rcx+-112], r8 + sbb rax, QWORD PTR [r10+-104] + mov r8, QWORD PTR [rcx+-96] + mov QWORD PTR [rcx+-104], rax + sbb r8, QWORD PTR [r10+-96] + mov rax, QWORD PTR [rcx+-88] + mov QWORD PTR [rcx+-96], r8 + sbb rax, QWORD PTR [r10+-88] + mov r8, QWORD PTR [rcx+-80] + mov QWORD PTR [rcx+-88], rax + sbb r8, QWORD PTR [r10+-80] + mov rax, QWORD PTR [rcx+-72] + mov QWORD PTR [rcx+-80], r8 + sbb rax, QWORD PTR [r10+-72] + mov r8, QWORD PTR [rcx+-64] + mov QWORD PTR [rcx+-72], rax + sbb r8, QWORD PTR [r10+-64] + mov rax, QWORD PTR [rcx+-56] + mov QWORD PTR [rcx+-64], r8 + sbb rax, QWORD PTR [r10+-56] + mov r8, QWORD PTR [rcx+-48] + mov QWORD PTR [rcx+-56], rax + sbb r8, QWORD PTR [r10+-48] + mov rax, QWORD PTR [rcx+-40] + mov QWORD PTR [rcx+-48], r8 + sbb rax, QWORD PTR [r10+-40] + mov r8, QWORD PTR [rcx+-32] + mov QWORD PTR [rcx+-40], rax + sbb r8, QWORD PTR [r10+-32] + mov rax, QWORD PTR [rcx+-24] + mov QWORD PTR [rcx+-32], r8 + sbb rax, QWORD PTR [r10+-24] + mov r8, QWORD PTR [rcx+-16] + mov QWORD PTR [rcx+-24], rax + sbb r8, QWORD PTR [r10+-16] + mov rax, QWORD PTR [rcx+-8] + mov QWORD PTR [rcx+-16], r8 + sbb rax, QWORD PTR [r10+-8] + mov r8, QWORD PTR [rcx] + mov QWORD PTR [rcx+-8], rax + sbb r8, QWORD PTR [r10] + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + sbb rax, QWORD PTR [r10+8] + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + sbb r8, QWORD PTR [r10+16] + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + sbb rax, QWORD PTR [r10+24] + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + sbb r8, QWORD PTR [r10+32] + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + sbb rax, QWORD PTR [r10+40] + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + sbb r8, QWORD PTR [r10+48] + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + sbb rax, QWORD PTR [r10+56] + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + sbb r8, QWORD PTR [r10+64] + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + sbb rax, QWORD PTR [r10+72] + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + sbb r8, QWORD PTR [r10+80] + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + sbb rax, QWORD PTR [r10+88] + mov r8, QWORD PTR [rcx+96] + mov QWORD PTR [rcx+88], rax + sbb r8, QWORD PTR [r10+96] + mov rax, QWORD PTR [rcx+104] + mov QWORD PTR [rcx+96], r8 + sbb rax, QWORD PTR [r10+104] + mov r8, QWORD PTR [rcx+112] + mov QWORD PTR [rcx+104], rax + sbb r8, QWORD PTR [r10+112] + mov rax, QWORD PTR [rcx+120] + mov QWORD PTR [rcx+112], r8 + sbb rax, QWORD PTR [r10+120] + mov r8, QWORD PTR [rcx+128] + mov QWORD PTR [rcx+120], rax + sbb r8, QWORD PTR [r10+128] + mov rax, QWORD PTR [rcx+136] + mov QWORD PTR [rcx+128], r8 + sbb rax, QWORD PTR [r10+136] + mov r8, QWORD PTR [rcx+144] + mov QWORD PTR [rcx+136], rax + sbb r8, QWORD PTR [r10+144] + mov rax, QWORD PTR [rcx+152] + mov QWORD PTR [rcx+144], r8 + sbb rax, QWORD PTR [r10+152] + mov r8, QWORD PTR [rcx+160] + mov QWORD PTR [rcx+152], rax + sbb r8, QWORD PTR [r10+160] + mov rax, QWORD PTR [rcx+168] + mov QWORD PTR [rcx+160], r8 + sbb rax, QWORD PTR [r10+168] + mov r8, QWORD PTR [rcx+176] + mov QWORD PTR [rcx+168], rax + sbb r8, QWORD PTR [r10+176] + mov rax, QWORD PTR [rcx+184] + mov QWORD PTR [rcx+176], r8 + sbb rax, QWORD PTR [r10+184] + mov r8, QWORD PTR [rcx+192] + mov QWORD PTR [rcx+184], rax + sbb r8, QWORD PTR [r10+192] + mov rax, QWORD PTR [rcx+200] + mov QWORD PTR [rcx+192], r8 + sbb rax, QWORD PTR [r10+200] + mov r8, QWORD PTR [rcx+208] + mov QWORD PTR [rcx+200], rax + sbb r8, QWORD PTR [r10+208] + mov rax, QWORD PTR [rcx+216] + mov QWORD PTR [rcx+208], r8 + sbb rax, QWORD PTR [r10+216] + mov r8, QWORD PTR [rcx+224] + mov QWORD PTR [rcx+216], rax + sbb r8, QWORD PTR [r10+224] + mov rax, QWORD PTR [rcx+232] + mov QWORD PTR [rcx+224], r8 + sbb rax, QWORD PTR [r10+232] + mov r8, QWORD PTR [rcx+240] + mov QWORD PTR [rcx+232], rax + sbb r8, QWORD PTR [r10+240] + mov rax, QWORD PTR [rcx+248] + mov QWORD PTR [rcx+240], r8 + sbb rax, QWORD PTR [r10+248] + mov QWORD PTR [rcx+248], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+512] + add rcx, 768 + ; Add in word + mov r8, QWORD PTR [rcx] + add r8, r9 + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+96] + mov QWORD PTR [rcx+88], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+104] + mov QWORD PTR [rcx+96], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+112] + mov QWORD PTR [rcx+104], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+120] + mov QWORD PTR [rcx+112], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+128] + mov QWORD PTR [rcx+120], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+136] + mov QWORD PTR [rcx+128], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+144] + mov QWORD PTR [rcx+136], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+152] + mov QWORD PTR [rcx+144], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+160] + mov QWORD PTR [rcx+152], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+168] + mov QWORD PTR [rcx+160], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+176] + mov QWORD PTR [rcx+168], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+184] + mov QWORD PTR [rcx+176], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+192] + mov QWORD PTR [rcx+184], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+200] + mov QWORD PTR [rcx+192], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+208] + mov QWORD PTR [rcx+200], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+216] + mov QWORD PTR [rcx+208], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+224] + mov QWORD PTR [rcx+216], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+232] + mov QWORD PTR [rcx+224], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+240] + mov QWORD PTR [rcx+232], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+248] + mov QWORD PTR [rcx+240], r8 + adc rax, 0 + mov QWORD PTR [rcx+248], rax + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] + add rsp, 528 + ret +sp_4096_sqr_64 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_sqr_avx2_64 PROC + sub rsp, 528 + mov QWORD PTR [rsp+512], rcx + mov QWORD PTR [rsp+520], rdx + mov r9, 0 + mov r10, rsp + lea r11, QWORD PTR [rdx+256] + mov rax, QWORD PTR [rdx] + sub rax, QWORD PTR [r11] + mov r8, QWORD PTR [rdx+8] + mov QWORD PTR [r10], rax + sbb r8, QWORD PTR [r11+8] + mov rax, QWORD PTR [rdx+16] + mov QWORD PTR [r10+8], r8 + sbb rax, QWORD PTR [r11+16] + mov r8, QWORD PTR [rdx+24] + mov QWORD PTR [r10+16], rax + sbb r8, QWORD PTR [r11+24] + mov rax, QWORD PTR [rdx+32] + mov QWORD PTR [r10+24], r8 + sbb rax, QWORD PTR [r11+32] + mov r8, QWORD PTR [rdx+40] + mov QWORD PTR [r10+32], rax + sbb r8, QWORD PTR [r11+40] + mov rax, QWORD PTR [rdx+48] + mov QWORD PTR [r10+40], r8 + sbb rax, QWORD PTR [r11+48] + mov r8, QWORD PTR [rdx+56] + mov QWORD PTR [r10+48], rax + sbb r8, QWORD PTR [r11+56] + mov rax, QWORD PTR [rdx+64] + mov QWORD PTR [r10+56], r8 + sbb rax, QWORD PTR [r11+64] + mov r8, QWORD PTR [rdx+72] + mov QWORD PTR [r10+64], rax + sbb r8, QWORD PTR [r11+72] + mov rax, QWORD PTR [rdx+80] + mov QWORD PTR [r10+72], r8 + sbb rax, QWORD PTR [r11+80] + mov r8, QWORD PTR [rdx+88] + mov QWORD PTR [r10+80], rax + sbb r8, QWORD PTR [r11+88] + mov rax, QWORD PTR [rdx+96] + mov QWORD PTR [r10+88], r8 + sbb rax, QWORD PTR [r11+96] + mov r8, QWORD PTR [rdx+104] + mov QWORD PTR [r10+96], rax + sbb r8, QWORD PTR [r11+104] + mov rax, QWORD PTR [rdx+112] + mov QWORD PTR [r10+104], r8 + sbb rax, QWORD PTR [r11+112] + mov r8, QWORD PTR [rdx+120] + mov QWORD PTR [r10+112], rax + sbb r8, QWORD PTR [r11+120] + mov rax, QWORD PTR [rdx+128] + mov QWORD PTR [r10+120], r8 + sbb rax, QWORD PTR [r11+128] + mov r8, QWORD PTR [rdx+136] + mov QWORD PTR [r10+128], rax + sbb r8, QWORD PTR [r11+136] + mov rax, QWORD PTR [rdx+144] + mov QWORD PTR [r10+136], r8 + sbb rax, QWORD PTR [r11+144] + mov r8, QWORD PTR [rdx+152] + mov QWORD PTR [r10+144], rax + sbb r8, QWORD PTR [r11+152] + mov rax, QWORD PTR [rdx+160] + mov QWORD PTR [r10+152], r8 + sbb rax, QWORD PTR [r11+160] + mov r8, QWORD PTR [rdx+168] + mov QWORD PTR [r10+160], rax + sbb r8, QWORD PTR [r11+168] + mov rax, QWORD PTR [rdx+176] + mov QWORD PTR [r10+168], r8 + sbb rax, QWORD PTR [r11+176] + mov r8, QWORD PTR [rdx+184] + mov QWORD PTR [r10+176], rax + sbb r8, QWORD PTR [r11+184] + mov rax, QWORD PTR [rdx+192] + mov QWORD PTR [r10+184], r8 + sbb rax, QWORD PTR [r11+192] + mov r8, QWORD PTR [rdx+200] + mov QWORD PTR [r10+192], rax + sbb r8, QWORD PTR [r11+200] + mov rax, QWORD PTR [rdx+208] + mov QWORD PTR [r10+200], r8 + sbb rax, QWORD PTR [r11+208] + mov r8, QWORD PTR [rdx+216] + mov QWORD PTR [r10+208], rax + sbb r8, QWORD PTR [r11+216] + mov rax, QWORD PTR [rdx+224] + mov QWORD PTR [r10+216], r8 + sbb rax, QWORD PTR [r11+224] + mov r8, QWORD PTR [rdx+232] + mov QWORD PTR [r10+224], rax + sbb r8, QWORD PTR [r11+232] + mov rax, QWORD PTR [rdx+240] + mov QWORD PTR [r10+232], r8 + sbb rax, QWORD PTR [r11+240] + mov r8, QWORD PTR [rdx+248] + mov QWORD PTR [r10+240], rax + sbb r8, QWORD PTR [r11+248] + mov QWORD PTR [r10+248], r8 + sbb r9, 0 + ; Cond Negate + mov rax, QWORD PTR [r10] + mov r11, r9 + xor rax, r9 + neg r11 + sub rax, r9 + mov r8, QWORD PTR [r10+8] + sbb r11, 0 + mov QWORD PTR [r10], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+16] + setc r11b + mov QWORD PTR [r10+8], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+24] + setc r11b + mov QWORD PTR [r10+16], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+32] + setc r11b + mov QWORD PTR [r10+24], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+40] + setc r11b + mov QWORD PTR [r10+32], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+48] + setc r11b + mov QWORD PTR [r10+40], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+56] + setc r11b + mov QWORD PTR [r10+48], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+64] + setc r11b + mov QWORD PTR [r10+56], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+72] + setc r11b + mov QWORD PTR [r10+64], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+80] + setc r11b + mov QWORD PTR [r10+72], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+88] + setc r11b + mov QWORD PTR [r10+80], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+96] + setc r11b + mov QWORD PTR [r10+88], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+104] + setc r11b + mov QWORD PTR [r10+96], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+112] + setc r11b + mov QWORD PTR [r10+104], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+120] + setc r11b + mov QWORD PTR [r10+112], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+128] + setc r11b + mov QWORD PTR [r10+120], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+136] + setc r11b + mov QWORD PTR [r10+128], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+144] + setc r11b + mov QWORD PTR [r10+136], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+152] + setc r11b + mov QWORD PTR [r10+144], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+160] + setc r11b + mov QWORD PTR [r10+152], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+168] + setc r11b + mov QWORD PTR [r10+160], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+176] + setc r11b + mov QWORD PTR [r10+168], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+184] + setc r11b + mov QWORD PTR [r10+176], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+192] + setc r11b + mov QWORD PTR [r10+184], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+200] + setc r11b + mov QWORD PTR [r10+192], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+208] + setc r11b + mov QWORD PTR [r10+200], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+216] + setc r11b + mov QWORD PTR [r10+208], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+224] + setc r11b + mov QWORD PTR [r10+216], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+232] + setc r11b + mov QWORD PTR [r10+224], rax + xor r8, r9 + add r8, r11 + mov rax, QWORD PTR [r10+240] + setc r11b + mov QWORD PTR [r10+232], r8 + xor rax, r9 + add rax, r11 + mov r8, QWORD PTR [r10+248] + setc r11b + mov QWORD PTR [r10+240], rax + xor r8, r9 + add r8, r11 + mov QWORD PTR [r10+248], r8 + mov rdx, r10 + mov rcx, rsp + call sp_2048_sqr_avx2_32 + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] + add rdx, 256 + add rcx, 512 + call sp_2048_sqr_avx2_32 + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] + call sp_2048_sqr_avx2_32 +IFDEF _WIN64 + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] +ENDIF + mov rdx, QWORD PTR [rsp+512] + lea r10, QWORD PTR [rsp+256] + add rdx, 768 + mov r9, 0 + mov r8, QWORD PTR [r10+-256] + sub r8, QWORD PTR [rdx+-256] + mov rax, QWORD PTR [r10+-248] + mov QWORD PTR [r10+-256], r8 + sbb rax, QWORD PTR [rdx+-248] + mov r8, QWORD PTR [r10+-240] + mov QWORD PTR [r10+-248], rax + sbb r8, QWORD PTR [rdx+-240] + mov rax, QWORD PTR [r10+-232] + mov QWORD PTR [r10+-240], r8 + sbb rax, QWORD PTR [rdx+-232] + mov r8, QWORD PTR [r10+-224] + mov QWORD PTR [r10+-232], rax + sbb r8, QWORD PTR [rdx+-224] + mov rax, QWORD PTR [r10+-216] + mov QWORD PTR [r10+-224], r8 + sbb rax, QWORD PTR [rdx+-216] + mov r8, QWORD PTR [r10+-208] + mov QWORD PTR [r10+-216], rax + sbb r8, QWORD PTR [rdx+-208] + mov rax, QWORD PTR [r10+-200] + mov QWORD PTR [r10+-208], r8 + sbb rax, QWORD PTR [rdx+-200] + mov r8, QWORD PTR [r10+-192] + mov QWORD PTR [r10+-200], rax + sbb r8, QWORD PTR [rdx+-192] + mov rax, QWORD PTR [r10+-184] + mov QWORD PTR [r10+-192], r8 + sbb rax, QWORD PTR [rdx+-184] + mov r8, QWORD PTR [r10+-176] + mov QWORD PTR [r10+-184], rax + sbb r8, QWORD PTR [rdx+-176] + mov rax, QWORD PTR [r10+-168] + mov QWORD PTR [r10+-176], r8 + sbb rax, QWORD PTR [rdx+-168] + mov r8, QWORD PTR [r10+-160] + mov QWORD PTR [r10+-168], rax + sbb r8, QWORD PTR [rdx+-160] + mov rax, QWORD PTR [r10+-152] + mov QWORD PTR [r10+-160], r8 + sbb rax, QWORD PTR [rdx+-152] + mov r8, QWORD PTR [r10+-144] + mov QWORD PTR [r10+-152], rax + sbb r8, QWORD PTR [rdx+-144] + mov rax, QWORD PTR [r10+-136] + mov QWORD PTR [r10+-144], r8 + sbb rax, QWORD PTR [rdx+-136] + mov r8, QWORD PTR [r10+-128] + mov QWORD PTR [r10+-136], rax + sbb r8, QWORD PTR [rdx+-128] + mov rax, QWORD PTR [r10+-120] + mov QWORD PTR [r10+-128], r8 + sbb rax, QWORD PTR [rdx+-120] + mov r8, QWORD PTR [r10+-112] + mov QWORD PTR [r10+-120], rax + sbb r8, QWORD PTR [rdx+-112] + mov rax, QWORD PTR [r10+-104] + mov QWORD PTR [r10+-112], r8 + sbb rax, QWORD PTR [rdx+-104] + mov r8, QWORD PTR [r10+-96] + mov QWORD PTR [r10+-104], rax + sbb r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov r8, QWORD PTR [r10+96] + mov QWORD PTR [r10+88], rax + sbb r8, QWORD PTR [rdx+96] + mov rax, QWORD PTR [r10+104] + mov QWORD PTR [r10+96], r8 + sbb rax, QWORD PTR [rdx+104] + mov r8, QWORD PTR [r10+112] + mov QWORD PTR [r10+104], rax + sbb r8, QWORD PTR [rdx+112] + mov rax, QWORD PTR [r10+120] + mov QWORD PTR [r10+112], r8 + sbb rax, QWORD PTR [rdx+120] + mov r8, QWORD PTR [r10+128] + mov QWORD PTR [r10+120], rax + sbb r8, QWORD PTR [rdx+128] + mov rax, QWORD PTR [r10+136] + mov QWORD PTR [r10+128], r8 + sbb rax, QWORD PTR [rdx+136] + mov r8, QWORD PTR [r10+144] + mov QWORD PTR [r10+136], rax + sbb r8, QWORD PTR [rdx+144] + mov rax, QWORD PTR [r10+152] + mov QWORD PTR [r10+144], r8 + sbb rax, QWORD PTR [rdx+152] + mov r8, QWORD PTR [r10+160] + mov QWORD PTR [r10+152], rax + sbb r8, QWORD PTR [rdx+160] + mov rax, QWORD PTR [r10+168] + mov QWORD PTR [r10+160], r8 + sbb rax, QWORD PTR [rdx+168] + mov r8, QWORD PTR [r10+176] + mov QWORD PTR [r10+168], rax + sbb r8, QWORD PTR [rdx+176] + mov rax, QWORD PTR [r10+184] + mov QWORD PTR [r10+176], r8 + sbb rax, QWORD PTR [rdx+184] + mov r8, QWORD PTR [r10+192] + mov QWORD PTR [r10+184], rax + sbb r8, QWORD PTR [rdx+192] + mov rax, QWORD PTR [r10+200] + mov QWORD PTR [r10+192], r8 + sbb rax, QWORD PTR [rdx+200] + mov r8, QWORD PTR [r10+208] + mov QWORD PTR [r10+200], rax + sbb r8, QWORD PTR [rdx+208] + mov rax, QWORD PTR [r10+216] + mov QWORD PTR [r10+208], r8 + sbb rax, QWORD PTR [rdx+216] + mov r8, QWORD PTR [r10+224] + mov QWORD PTR [r10+216], rax + sbb r8, QWORD PTR [rdx+224] + mov rax, QWORD PTR [r10+232] + mov QWORD PTR [r10+224], r8 + sbb rax, QWORD PTR [rdx+232] + mov r8, QWORD PTR [r10+240] + mov QWORD PTR [r10+232], rax + sbb r8, QWORD PTR [rdx+240] + mov rax, QWORD PTR [r10+248] + mov QWORD PTR [r10+240], r8 + sbb rax, QWORD PTR [rdx+248] + mov QWORD PTR [r10+248], rax + sbb r9, 0 + sub rdx, 512 + mov r8, QWORD PTR [r10+-256] + sub r8, QWORD PTR [rdx+-256] + mov rax, QWORD PTR [r10+-248] + mov QWORD PTR [r10+-256], r8 + sbb rax, QWORD PTR [rdx+-248] + mov r8, QWORD PTR [r10+-240] + mov QWORD PTR [r10+-248], rax + sbb r8, QWORD PTR [rdx+-240] + mov rax, QWORD PTR [r10+-232] + mov QWORD PTR [r10+-240], r8 + sbb rax, QWORD PTR [rdx+-232] + mov r8, QWORD PTR [r10+-224] + mov QWORD PTR [r10+-232], rax + sbb r8, QWORD PTR [rdx+-224] + mov rax, QWORD PTR [r10+-216] + mov QWORD PTR [r10+-224], r8 + sbb rax, QWORD PTR [rdx+-216] + mov r8, QWORD PTR [r10+-208] + mov QWORD PTR [r10+-216], rax + sbb r8, QWORD PTR [rdx+-208] + mov rax, QWORD PTR [r10+-200] + mov QWORD PTR [r10+-208], r8 + sbb rax, QWORD PTR [rdx+-200] + mov r8, QWORD PTR [r10+-192] + mov QWORD PTR [r10+-200], rax + sbb r8, QWORD PTR [rdx+-192] + mov rax, QWORD PTR [r10+-184] + mov QWORD PTR [r10+-192], r8 + sbb rax, QWORD PTR [rdx+-184] + mov r8, QWORD PTR [r10+-176] + mov QWORD PTR [r10+-184], rax + sbb r8, QWORD PTR [rdx+-176] + mov rax, QWORD PTR [r10+-168] + mov QWORD PTR [r10+-176], r8 + sbb rax, QWORD PTR [rdx+-168] + mov r8, QWORD PTR [r10+-160] + mov QWORD PTR [r10+-168], rax + sbb r8, QWORD PTR [rdx+-160] + mov rax, QWORD PTR [r10+-152] + mov QWORD PTR [r10+-160], r8 + sbb rax, QWORD PTR [rdx+-152] + mov r8, QWORD PTR [r10+-144] + mov QWORD PTR [r10+-152], rax + sbb r8, QWORD PTR [rdx+-144] + mov rax, QWORD PTR [r10+-136] + mov QWORD PTR [r10+-144], r8 + sbb rax, QWORD PTR [rdx+-136] + mov r8, QWORD PTR [r10+-128] + mov QWORD PTR [r10+-136], rax + sbb r8, QWORD PTR [rdx+-128] + mov rax, QWORD PTR [r10+-120] + mov QWORD PTR [r10+-128], r8 + sbb rax, QWORD PTR [rdx+-120] + mov r8, QWORD PTR [r10+-112] + mov QWORD PTR [r10+-120], rax + sbb r8, QWORD PTR [rdx+-112] + mov rax, QWORD PTR [r10+-104] + mov QWORD PTR [r10+-112], r8 + sbb rax, QWORD PTR [rdx+-104] + mov r8, QWORD PTR [r10+-96] + mov QWORD PTR [r10+-104], rax + sbb r8, QWORD PTR [rdx+-96] + mov rax, QWORD PTR [r10+-88] + mov QWORD PTR [r10+-96], r8 + sbb rax, QWORD PTR [rdx+-88] + mov r8, QWORD PTR [r10+-80] + mov QWORD PTR [r10+-88], rax + sbb r8, QWORD PTR [rdx+-80] + mov rax, QWORD PTR [r10+-72] + mov QWORD PTR [r10+-80], r8 + sbb rax, QWORD PTR [rdx+-72] + mov r8, QWORD PTR [r10+-64] + mov QWORD PTR [r10+-72], rax + sbb r8, QWORD PTR [rdx+-64] + mov rax, QWORD PTR [r10+-56] + mov QWORD PTR [r10+-64], r8 + sbb rax, QWORD PTR [rdx+-56] + mov r8, QWORD PTR [r10+-48] + mov QWORD PTR [r10+-56], rax + sbb r8, QWORD PTR [rdx+-48] + mov rax, QWORD PTR [r10+-40] + mov QWORD PTR [r10+-48], r8 + sbb rax, QWORD PTR [rdx+-40] + mov r8, QWORD PTR [r10+-32] + mov QWORD PTR [r10+-40], rax + sbb r8, QWORD PTR [rdx+-32] + mov rax, QWORD PTR [r10+-24] + mov QWORD PTR [r10+-32], r8 + sbb rax, QWORD PTR [rdx+-24] + mov r8, QWORD PTR [r10+-16] + mov QWORD PTR [r10+-24], rax + sbb r8, QWORD PTR [rdx+-16] + mov rax, QWORD PTR [r10+-8] + mov QWORD PTR [r10+-16], r8 + sbb rax, QWORD PTR [rdx+-8] + mov r8, QWORD PTR [r10] + mov QWORD PTR [r10+-8], rax + sbb r8, QWORD PTR [rdx] + mov rax, QWORD PTR [r10+8] + mov QWORD PTR [r10], r8 + sbb rax, QWORD PTR [rdx+8] + mov r8, QWORD PTR [r10+16] + mov QWORD PTR [r10+8], rax + sbb r8, QWORD PTR [rdx+16] + mov rax, QWORD PTR [r10+24] + mov QWORD PTR [r10+16], r8 + sbb rax, QWORD PTR [rdx+24] + mov r8, QWORD PTR [r10+32] + mov QWORD PTR [r10+24], rax + sbb r8, QWORD PTR [rdx+32] + mov rax, QWORD PTR [r10+40] + mov QWORD PTR [r10+32], r8 + sbb rax, QWORD PTR [rdx+40] + mov r8, QWORD PTR [r10+48] + mov QWORD PTR [r10+40], rax + sbb r8, QWORD PTR [rdx+48] + mov rax, QWORD PTR [r10+56] + mov QWORD PTR [r10+48], r8 + sbb rax, QWORD PTR [rdx+56] + mov r8, QWORD PTR [r10+64] + mov QWORD PTR [r10+56], rax + sbb r8, QWORD PTR [rdx+64] + mov rax, QWORD PTR [r10+72] + mov QWORD PTR [r10+64], r8 + sbb rax, QWORD PTR [rdx+72] + mov r8, QWORD PTR [r10+80] + mov QWORD PTR [r10+72], rax + sbb r8, QWORD PTR [rdx+80] + mov rax, QWORD PTR [r10+88] + mov QWORD PTR [r10+80], r8 + sbb rax, QWORD PTR [rdx+88] + mov r8, QWORD PTR [r10+96] + mov QWORD PTR [r10+88], rax + sbb r8, QWORD PTR [rdx+96] + mov rax, QWORD PTR [r10+104] + mov QWORD PTR [r10+96], r8 + sbb rax, QWORD PTR [rdx+104] + mov r8, QWORD PTR [r10+112] + mov QWORD PTR [r10+104], rax + sbb r8, QWORD PTR [rdx+112] + mov rax, QWORD PTR [r10+120] + mov QWORD PTR [r10+112], r8 + sbb rax, QWORD PTR [rdx+120] + mov r8, QWORD PTR [r10+128] + mov QWORD PTR [r10+120], rax + sbb r8, QWORD PTR [rdx+128] + mov rax, QWORD PTR [r10+136] + mov QWORD PTR [r10+128], r8 + sbb rax, QWORD PTR [rdx+136] + mov r8, QWORD PTR [r10+144] + mov QWORD PTR [r10+136], rax + sbb r8, QWORD PTR [rdx+144] + mov rax, QWORD PTR [r10+152] + mov QWORD PTR [r10+144], r8 + sbb rax, QWORD PTR [rdx+152] + mov r8, QWORD PTR [r10+160] + mov QWORD PTR [r10+152], rax + sbb r8, QWORD PTR [rdx+160] + mov rax, QWORD PTR [r10+168] + mov QWORD PTR [r10+160], r8 + sbb rax, QWORD PTR [rdx+168] + mov r8, QWORD PTR [r10+176] + mov QWORD PTR [r10+168], rax + sbb r8, QWORD PTR [rdx+176] + mov rax, QWORD PTR [r10+184] + mov QWORD PTR [r10+176], r8 + sbb rax, QWORD PTR [rdx+184] + mov r8, QWORD PTR [r10+192] + mov QWORD PTR [r10+184], rax + sbb r8, QWORD PTR [rdx+192] + mov rax, QWORD PTR [r10+200] + mov QWORD PTR [r10+192], r8 + sbb rax, QWORD PTR [rdx+200] + mov r8, QWORD PTR [r10+208] + mov QWORD PTR [r10+200], rax + sbb r8, QWORD PTR [rdx+208] + mov rax, QWORD PTR [r10+216] + mov QWORD PTR [r10+208], r8 + sbb rax, QWORD PTR [rdx+216] + mov r8, QWORD PTR [r10+224] + mov QWORD PTR [r10+216], rax + sbb r8, QWORD PTR [rdx+224] + mov rax, QWORD PTR [r10+232] + mov QWORD PTR [r10+224], r8 + sbb rax, QWORD PTR [rdx+232] + mov r8, QWORD PTR [r10+240] + mov QWORD PTR [r10+232], rax + sbb r8, QWORD PTR [rdx+240] + mov rax, QWORD PTR [r10+248] + mov QWORD PTR [r10+240], r8 + sbb rax, QWORD PTR [rdx+248] + mov QWORD PTR [r10+248], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+512] + neg r9 + add rcx, 512 + mov r8, QWORD PTR [rcx+-256] + sub r8, QWORD PTR [r10+-256] + mov rax, QWORD PTR [rcx+-248] + mov QWORD PTR [rcx+-256], r8 + sbb rax, QWORD PTR [r10+-248] + mov r8, QWORD PTR [rcx+-240] + mov QWORD PTR [rcx+-248], rax + sbb r8, QWORD PTR [r10+-240] + mov rax, QWORD PTR [rcx+-232] + mov QWORD PTR [rcx+-240], r8 + sbb rax, QWORD PTR [r10+-232] + mov r8, QWORD PTR [rcx+-224] + mov QWORD PTR [rcx+-232], rax + sbb r8, QWORD PTR [r10+-224] + mov rax, QWORD PTR [rcx+-216] + mov QWORD PTR [rcx+-224], r8 + sbb rax, QWORD PTR [r10+-216] + mov r8, QWORD PTR [rcx+-208] + mov QWORD PTR [rcx+-216], rax + sbb r8, QWORD PTR [r10+-208] + mov rax, QWORD PTR [rcx+-200] + mov QWORD PTR [rcx+-208], r8 + sbb rax, QWORD PTR [r10+-200] + mov r8, QWORD PTR [rcx+-192] + mov QWORD PTR [rcx+-200], rax + sbb r8, QWORD PTR [r10+-192] + mov rax, QWORD PTR [rcx+-184] + mov QWORD PTR [rcx+-192], r8 + sbb rax, QWORD PTR [r10+-184] + mov r8, QWORD PTR [rcx+-176] + mov QWORD PTR [rcx+-184], rax + sbb r8, QWORD PTR [r10+-176] + mov rax, QWORD PTR [rcx+-168] + mov QWORD PTR [rcx+-176], r8 + sbb rax, QWORD PTR [r10+-168] + mov r8, QWORD PTR [rcx+-160] + mov QWORD PTR [rcx+-168], rax + sbb r8, QWORD PTR [r10+-160] + mov rax, QWORD PTR [rcx+-152] + mov QWORD PTR [rcx+-160], r8 + sbb rax, QWORD PTR [r10+-152] + mov r8, QWORD PTR [rcx+-144] + mov QWORD PTR [rcx+-152], rax + sbb r8, QWORD PTR [r10+-144] + mov rax, QWORD PTR [rcx+-136] + mov QWORD PTR [rcx+-144], r8 + sbb rax, QWORD PTR [r10+-136] + mov r8, QWORD PTR [rcx+-128] + mov QWORD PTR [rcx+-136], rax + sbb r8, QWORD PTR [r10+-128] + mov rax, QWORD PTR [rcx+-120] + mov QWORD PTR [rcx+-128], r8 + sbb rax, QWORD PTR [r10+-120] + mov r8, QWORD PTR [rcx+-112] + mov QWORD PTR [rcx+-120], rax + sbb r8, QWORD PTR [r10+-112] + mov rax, QWORD PTR [rcx+-104] + mov QWORD PTR [rcx+-112], r8 + sbb rax, QWORD PTR [r10+-104] + mov r8, QWORD PTR [rcx+-96] + mov QWORD PTR [rcx+-104], rax + sbb r8, QWORD PTR [r10+-96] + mov rax, QWORD PTR [rcx+-88] + mov QWORD PTR [rcx+-96], r8 + sbb rax, QWORD PTR [r10+-88] + mov r8, QWORD PTR [rcx+-80] + mov QWORD PTR [rcx+-88], rax + sbb r8, QWORD PTR [r10+-80] + mov rax, QWORD PTR [rcx+-72] + mov QWORD PTR [rcx+-80], r8 + sbb rax, QWORD PTR [r10+-72] + mov r8, QWORD PTR [rcx+-64] + mov QWORD PTR [rcx+-72], rax + sbb r8, QWORD PTR [r10+-64] + mov rax, QWORD PTR [rcx+-56] + mov QWORD PTR [rcx+-64], r8 + sbb rax, QWORD PTR [r10+-56] + mov r8, QWORD PTR [rcx+-48] + mov QWORD PTR [rcx+-56], rax + sbb r8, QWORD PTR [r10+-48] + mov rax, QWORD PTR [rcx+-40] + mov QWORD PTR [rcx+-48], r8 + sbb rax, QWORD PTR [r10+-40] + mov r8, QWORD PTR [rcx+-32] + mov QWORD PTR [rcx+-40], rax + sbb r8, QWORD PTR [r10+-32] + mov rax, QWORD PTR [rcx+-24] + mov QWORD PTR [rcx+-32], r8 + sbb rax, QWORD PTR [r10+-24] + mov r8, QWORD PTR [rcx+-16] + mov QWORD PTR [rcx+-24], rax + sbb r8, QWORD PTR [r10+-16] + mov rax, QWORD PTR [rcx+-8] + mov QWORD PTR [rcx+-16], r8 + sbb rax, QWORD PTR [r10+-8] + mov r8, QWORD PTR [rcx] + mov QWORD PTR [rcx+-8], rax + sbb r8, QWORD PTR [r10] + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + sbb rax, QWORD PTR [r10+8] + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + sbb r8, QWORD PTR [r10+16] + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + sbb rax, QWORD PTR [r10+24] + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + sbb r8, QWORD PTR [r10+32] + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + sbb rax, QWORD PTR [r10+40] + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + sbb r8, QWORD PTR [r10+48] + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + sbb rax, QWORD PTR [r10+56] + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + sbb r8, QWORD PTR [r10+64] + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + sbb rax, QWORD PTR [r10+72] + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + sbb r8, QWORD PTR [r10+80] + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + sbb rax, QWORD PTR [r10+88] + mov r8, QWORD PTR [rcx+96] + mov QWORD PTR [rcx+88], rax + sbb r8, QWORD PTR [r10+96] + mov rax, QWORD PTR [rcx+104] + mov QWORD PTR [rcx+96], r8 + sbb rax, QWORD PTR [r10+104] + mov r8, QWORD PTR [rcx+112] + mov QWORD PTR [rcx+104], rax + sbb r8, QWORD PTR [r10+112] + mov rax, QWORD PTR [rcx+120] + mov QWORD PTR [rcx+112], r8 + sbb rax, QWORD PTR [r10+120] + mov r8, QWORD PTR [rcx+128] + mov QWORD PTR [rcx+120], rax + sbb r8, QWORD PTR [r10+128] + mov rax, QWORD PTR [rcx+136] + mov QWORD PTR [rcx+128], r8 + sbb rax, QWORD PTR [r10+136] + mov r8, QWORD PTR [rcx+144] + mov QWORD PTR [rcx+136], rax + sbb r8, QWORD PTR [r10+144] + mov rax, QWORD PTR [rcx+152] + mov QWORD PTR [rcx+144], r8 + sbb rax, QWORD PTR [r10+152] + mov r8, QWORD PTR [rcx+160] + mov QWORD PTR [rcx+152], rax + sbb r8, QWORD PTR [r10+160] + mov rax, QWORD PTR [rcx+168] + mov QWORD PTR [rcx+160], r8 + sbb rax, QWORD PTR [r10+168] + mov r8, QWORD PTR [rcx+176] + mov QWORD PTR [rcx+168], rax + sbb r8, QWORD PTR [r10+176] + mov rax, QWORD PTR [rcx+184] + mov QWORD PTR [rcx+176], r8 + sbb rax, QWORD PTR [r10+184] + mov r8, QWORD PTR [rcx+192] + mov QWORD PTR [rcx+184], rax + sbb r8, QWORD PTR [r10+192] + mov rax, QWORD PTR [rcx+200] + mov QWORD PTR [rcx+192], r8 + sbb rax, QWORD PTR [r10+200] + mov r8, QWORD PTR [rcx+208] + mov QWORD PTR [rcx+200], rax + sbb r8, QWORD PTR [r10+208] + mov rax, QWORD PTR [rcx+216] + mov QWORD PTR [rcx+208], r8 + sbb rax, QWORD PTR [r10+216] + mov r8, QWORD PTR [rcx+224] + mov QWORD PTR [rcx+216], rax + sbb r8, QWORD PTR [r10+224] + mov rax, QWORD PTR [rcx+232] + mov QWORD PTR [rcx+224], r8 + sbb rax, QWORD PTR [r10+232] + mov r8, QWORD PTR [rcx+240] + mov QWORD PTR [rcx+232], rax + sbb r8, QWORD PTR [r10+240] + mov rax, QWORD PTR [rcx+248] + mov QWORD PTR [rcx+240], r8 + sbb rax, QWORD PTR [r10+248] + mov QWORD PTR [rcx+248], rax + sbb r9, 0 + mov rcx, QWORD PTR [rsp+512] + add rcx, 768 + ; Add in word + mov r8, QWORD PTR [rcx] + add r8, r9 + mov rax, QWORD PTR [rcx+8] + mov QWORD PTR [rcx], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+16] + mov QWORD PTR [rcx+8], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+24] + mov QWORD PTR [rcx+16], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+32] + mov QWORD PTR [rcx+24], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+40] + mov QWORD PTR [rcx+32], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+48] + mov QWORD PTR [rcx+40], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+56] + mov QWORD PTR [rcx+48], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+64] + mov QWORD PTR [rcx+56], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+72] + mov QWORD PTR [rcx+64], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+80] + mov QWORD PTR [rcx+72], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+88] + mov QWORD PTR [rcx+80], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+96] + mov QWORD PTR [rcx+88], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+104] + mov QWORD PTR [rcx+96], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+112] + mov QWORD PTR [rcx+104], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+120] + mov QWORD PTR [rcx+112], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+128] + mov QWORD PTR [rcx+120], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+136] + mov QWORD PTR [rcx+128], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+144] + mov QWORD PTR [rcx+136], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+152] + mov QWORD PTR [rcx+144], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+160] + mov QWORD PTR [rcx+152], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+168] + mov QWORD PTR [rcx+160], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+176] + mov QWORD PTR [rcx+168], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+184] + mov QWORD PTR [rcx+176], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+192] + mov QWORD PTR [rcx+184], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+200] + mov QWORD PTR [rcx+192], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+208] + mov QWORD PTR [rcx+200], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+216] + mov QWORD PTR [rcx+208], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+224] + mov QWORD PTR [rcx+216], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+232] + mov QWORD PTR [rcx+224], r8 + adc rax, 0 + mov r8, QWORD PTR [rcx+240] + mov QWORD PTR [rcx+232], rax + adc r8, 0 + mov rax, QWORD PTR [rcx+248] + mov QWORD PTR [rcx+240], r8 + adc rax, 0 + mov QWORD PTR [rcx+248], rax + mov rdx, QWORD PTR [rsp+520] + mov rcx, QWORD PTR [rsp+512] + add rsp, 528 + ret +sp_4096_sqr_avx2_64 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_mul_d_64 PROC + push r12 + mov r9, rdx + ; A[0] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9] + mov r10, rax + mov r11, rdx + mov QWORD PTR [rcx], r10 + ; A[1] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+8] + add r11, rax + mov QWORD PTR [rcx+8], r11 + adc r12, rdx + adc r10, 0 + ; A[2] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+16] + add r12, rax + mov QWORD PTR [rcx+16], r12 + adc r10, rdx + adc r11, 0 + ; A[3] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+24] + add r10, rax + mov QWORD PTR [rcx+24], r10 + adc r11, rdx + adc r12, 0 + ; A[4] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+32] + add r11, rax + mov QWORD PTR [rcx+32], r11 + adc r12, rdx + adc r10, 0 + ; A[5] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+40] + add r12, rax + mov QWORD PTR [rcx+40], r12 + adc r10, rdx + adc r11, 0 + ; A[6] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+48] + add r10, rax + mov QWORD PTR [rcx+48], r10 + adc r11, rdx + adc r12, 0 + ; A[7] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+56] + add r11, rax + mov QWORD PTR [rcx+56], r11 + adc r12, rdx + adc r10, 0 + ; A[8] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+64] + add r12, rax + mov QWORD PTR [rcx+64], r12 + adc r10, rdx + adc r11, 0 + ; A[9] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+72] + add r10, rax + mov QWORD PTR [rcx+72], r10 + adc r11, rdx + adc r12, 0 + ; A[10] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+80] + add r11, rax + mov QWORD PTR [rcx+80], r11 + adc r12, rdx + adc r10, 0 + ; A[11] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+88] + add r12, rax + mov QWORD PTR [rcx+88], r12 + adc r10, rdx + adc r11, 0 + ; A[12] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+96] + add r10, rax + mov QWORD PTR [rcx+96], r10 + adc r11, rdx + adc r12, 0 + ; A[13] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+104] + add r11, rax + mov QWORD PTR [rcx+104], r11 + adc r12, rdx + adc r10, 0 + ; A[14] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+112] + add r12, rax + mov QWORD PTR [rcx+112], r12 + adc r10, rdx + adc r11, 0 + ; A[15] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+120] + add r10, rax + mov QWORD PTR [rcx+120], r10 + adc r11, rdx + adc r12, 0 + ; A[16] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+128] + add r11, rax + mov QWORD PTR [rcx+128], r11 + adc r12, rdx + adc r10, 0 + ; A[17] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+136] + add r12, rax + mov QWORD PTR [rcx+136], r12 + adc r10, rdx + adc r11, 0 + ; A[18] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+144] + add r10, rax + mov QWORD PTR [rcx+144], r10 + adc r11, rdx + adc r12, 0 + ; A[19] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+152] + add r11, rax + mov QWORD PTR [rcx+152], r11 + adc r12, rdx + adc r10, 0 + ; A[20] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+160] + add r12, rax + mov QWORD PTR [rcx+160], r12 + adc r10, rdx + adc r11, 0 + ; A[21] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+168] + add r10, rax + mov QWORD PTR [rcx+168], r10 + adc r11, rdx + adc r12, 0 + ; A[22] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+176] + add r11, rax + mov QWORD PTR [rcx+176], r11 + adc r12, rdx + adc r10, 0 + ; A[23] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+184] + add r12, rax + mov QWORD PTR [rcx+184], r12 + adc r10, rdx + adc r11, 0 + ; A[24] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+192] + add r10, rax + mov QWORD PTR [rcx+192], r10 + adc r11, rdx + adc r12, 0 + ; A[25] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+200] + add r11, rax + mov QWORD PTR [rcx+200], r11 + adc r12, rdx + adc r10, 0 + ; A[26] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+208] + add r12, rax + mov QWORD PTR [rcx+208], r12 + adc r10, rdx + adc r11, 0 + ; A[27] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+216] + add r10, rax + mov QWORD PTR [rcx+216], r10 + adc r11, rdx + adc r12, 0 + ; A[28] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+224] + add r11, rax + mov QWORD PTR [rcx+224], r11 + adc r12, rdx + adc r10, 0 + ; A[29] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+232] + add r12, rax + mov QWORD PTR [rcx+232], r12 + adc r10, rdx + adc r11, 0 + ; A[30] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+240] + add r10, rax + mov QWORD PTR [rcx+240], r10 + adc r11, rdx + adc r12, 0 + ; A[31] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+248] + add r11, rax + mov QWORD PTR [rcx+248], r11 + adc r12, rdx + adc r10, 0 + ; A[32] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+256] + add r12, rax + mov QWORD PTR [rcx+256], r12 + adc r10, rdx + adc r11, 0 + ; A[33] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+264] + add r10, rax + mov QWORD PTR [rcx+264], r10 + adc r11, rdx + adc r12, 0 + ; A[34] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+272] + add r11, rax + mov QWORD PTR [rcx+272], r11 + adc r12, rdx + adc r10, 0 + ; A[35] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+280] + add r12, rax + mov QWORD PTR [rcx+280], r12 + adc r10, rdx + adc r11, 0 + ; A[36] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+288] + add r10, rax + mov QWORD PTR [rcx+288], r10 + adc r11, rdx + adc r12, 0 + ; A[37] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+296] + add r11, rax + mov QWORD PTR [rcx+296], r11 + adc r12, rdx + adc r10, 0 + ; A[38] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+304] + add r12, rax + mov QWORD PTR [rcx+304], r12 + adc r10, rdx + adc r11, 0 + ; A[39] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+312] + add r10, rax + mov QWORD PTR [rcx+312], r10 + adc r11, rdx + adc r12, 0 + ; A[40] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+320] + add r11, rax + mov QWORD PTR [rcx+320], r11 + adc r12, rdx + adc r10, 0 + ; A[41] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+328] + add r12, rax + mov QWORD PTR [rcx+328], r12 + adc r10, rdx + adc r11, 0 + ; A[42] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+336] + add r10, rax + mov QWORD PTR [rcx+336], r10 + adc r11, rdx + adc r12, 0 + ; A[43] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+344] + add r11, rax + mov QWORD PTR [rcx+344], r11 + adc r12, rdx + adc r10, 0 + ; A[44] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+352] + add r12, rax + mov QWORD PTR [rcx+352], r12 + adc r10, rdx + adc r11, 0 + ; A[45] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+360] + add r10, rax + mov QWORD PTR [rcx+360], r10 + adc r11, rdx + adc r12, 0 + ; A[46] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+368] + add r11, rax + mov QWORD PTR [rcx+368], r11 + adc r12, rdx + adc r10, 0 + ; A[47] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+376] + add r12, rax + mov QWORD PTR [rcx+376], r12 + adc r10, rdx + adc r11, 0 + ; A[48] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+384] + add r10, rax + mov QWORD PTR [rcx+384], r10 + adc r11, rdx + adc r12, 0 + ; A[49] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+392] + add r11, rax + mov QWORD PTR [rcx+392], r11 + adc r12, rdx + adc r10, 0 + ; A[50] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+400] + add r12, rax + mov QWORD PTR [rcx+400], r12 + adc r10, rdx + adc r11, 0 + ; A[51] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+408] + add r10, rax + mov QWORD PTR [rcx+408], r10 + adc r11, rdx + adc r12, 0 + ; A[52] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+416] + add r11, rax + mov QWORD PTR [rcx+416], r11 + adc r12, rdx + adc r10, 0 + ; A[53] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+424] + add r12, rax + mov QWORD PTR [rcx+424], r12 + adc r10, rdx + adc r11, 0 + ; A[54] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+432] + add r10, rax + mov QWORD PTR [rcx+432], r10 + adc r11, rdx + adc r12, 0 + ; A[55] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+440] + add r11, rax + mov QWORD PTR [rcx+440], r11 + adc r12, rdx + adc r10, 0 + ; A[56] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+448] + add r12, rax + mov QWORD PTR [rcx+448], r12 + adc r10, rdx + adc r11, 0 + ; A[57] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+456] + add r10, rax + mov QWORD PTR [rcx+456], r10 + adc r11, rdx + adc r12, 0 + ; A[58] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+464] + add r11, rax + mov QWORD PTR [rcx+464], r11 + adc r12, rdx + adc r10, 0 + ; A[59] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+472] + add r12, rax + mov QWORD PTR [rcx+472], r12 + adc r10, rdx + adc r11, 0 + ; A[60] * B + mov rax, r8 + xor r12, r12 + mul QWORD PTR [r9+480] + add r10, rax + mov QWORD PTR [rcx+480], r10 + adc r11, rdx + adc r12, 0 + ; A[61] * B + mov rax, r8 + xor r10, r10 + mul QWORD PTR [r9+488] + add r11, rax + mov QWORD PTR [rcx+488], r11 + adc r12, rdx + adc r10, 0 + ; A[62] * B + mov rax, r8 + xor r11, r11 + mul QWORD PTR [r9+496] + add r12, rax + mov QWORD PTR [rcx+496], r12 + adc r10, rdx + adc r11, 0 + ; A[63] * B + mov rax, r8 + mul QWORD PTR [r9+504] + add r10, rax + adc r11, rdx + mov QWORD PTR [rcx+504], r10 + mov QWORD PTR [rcx+512], r11 + pop r12 + ret +sp_4096_mul_d_64 ENDP +_TEXT ENDS +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_cond_sub_64 PROC + sub rsp, 512 + mov r10, QWORD PTR [r8] + mov r11, QWORD PTR [r8+8] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp], r10 + mov QWORD PTR [rsp+8], r11 + mov r10, QWORD PTR [r8+16] + mov r11, QWORD PTR [r8+24] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+16], r10 + mov QWORD PTR [rsp+24], r11 + mov r10, QWORD PTR [r8+32] + mov r11, QWORD PTR [r8+40] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+32], r10 + mov QWORD PTR [rsp+40], r11 + mov r10, QWORD PTR [r8+48] + mov r11, QWORD PTR [r8+56] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+48], r10 + mov QWORD PTR [rsp+56], r11 + mov r10, QWORD PTR [r8+64] + mov r11, QWORD PTR [r8+72] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+64], r10 + mov QWORD PTR [rsp+72], r11 + mov r10, QWORD PTR [r8+80] + mov r11, QWORD PTR [r8+88] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+80], r10 + mov QWORD PTR [rsp+88], r11 + mov r10, QWORD PTR [r8+96] + mov r11, QWORD PTR [r8+104] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+96], r10 + mov QWORD PTR [rsp+104], r11 + mov r10, QWORD PTR [r8+112] + mov r11, QWORD PTR [r8+120] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+112], r10 + mov QWORD PTR [rsp+120], r11 + mov r10, QWORD PTR [r8+128] + mov r11, QWORD PTR [r8+136] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+128], r10 + mov QWORD PTR [rsp+136], r11 + mov r10, QWORD PTR [r8+144] + mov r11, QWORD PTR [r8+152] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+144], r10 + mov QWORD PTR [rsp+152], r11 + mov r10, QWORD PTR [r8+160] + mov r11, QWORD PTR [r8+168] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+160], r10 + mov QWORD PTR [rsp+168], r11 + mov r10, QWORD PTR [r8+176] + mov r11, QWORD PTR [r8+184] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+176], r10 + mov QWORD PTR [rsp+184], r11 + mov r10, QWORD PTR [r8+192] + mov r11, QWORD PTR [r8+200] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+192], r10 + mov QWORD PTR [rsp+200], r11 + mov r10, QWORD PTR [r8+208] + mov r11, QWORD PTR [r8+216] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+208], r10 + mov QWORD PTR [rsp+216], r11 + mov r10, QWORD PTR [r8+224] + mov r11, QWORD PTR [r8+232] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+224], r10 + mov QWORD PTR [rsp+232], r11 + mov r10, QWORD PTR [r8+240] + mov r11, QWORD PTR [r8+248] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+240], r10 + mov QWORD PTR [rsp+248], r11 + mov r10, QWORD PTR [r8+256] + mov r11, QWORD PTR [r8+264] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+256], r10 + mov QWORD PTR [rsp+264], r11 + mov r10, QWORD PTR [r8+272] + mov r11, QWORD PTR [r8+280] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+272], r10 + mov QWORD PTR [rsp+280], r11 + mov r10, QWORD PTR [r8+288] + mov r11, QWORD PTR [r8+296] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+288], r10 + mov QWORD PTR [rsp+296], r11 + mov r10, QWORD PTR [r8+304] + mov r11, QWORD PTR [r8+312] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+304], r10 + mov QWORD PTR [rsp+312], r11 + mov r10, QWORD PTR [r8+320] + mov r11, QWORD PTR [r8+328] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+320], r10 + mov QWORD PTR [rsp+328], r11 + mov r10, QWORD PTR [r8+336] + mov r11, QWORD PTR [r8+344] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+336], r10 + mov QWORD PTR [rsp+344], r11 + mov r10, QWORD PTR [r8+352] + mov r11, QWORD PTR [r8+360] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+352], r10 + mov QWORD PTR [rsp+360], r11 + mov r10, QWORD PTR [r8+368] + mov r11, QWORD PTR [r8+376] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+368], r10 + mov QWORD PTR [rsp+376], r11 + mov r10, QWORD PTR [r8+384] + mov r11, QWORD PTR [r8+392] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+384], r10 + mov QWORD PTR [rsp+392], r11 + mov r10, QWORD PTR [r8+400] + mov r11, QWORD PTR [r8+408] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+400], r10 + mov QWORD PTR [rsp+408], r11 + mov r10, QWORD PTR [r8+416] + mov r11, QWORD PTR [r8+424] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+416], r10 + mov QWORD PTR [rsp+424], r11 + mov r10, QWORD PTR [r8+432] + mov r11, QWORD PTR [r8+440] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+432], r10 + mov QWORD PTR [rsp+440], r11 + mov r10, QWORD PTR [r8+448] + mov r11, QWORD PTR [r8+456] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+448], r10 + mov QWORD PTR [rsp+456], r11 + mov r10, QWORD PTR [r8+464] + mov r11, QWORD PTR [r8+472] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+464], r10 + mov QWORD PTR [rsp+472], r11 + mov r10, QWORD PTR [r8+480] + mov r11, QWORD PTR [r8+488] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+480], r10 + mov QWORD PTR [rsp+488], r11 + mov r10, QWORD PTR [r8+496] + mov r11, QWORD PTR [r8+504] + and r10, r9 + and r11, r9 + mov QWORD PTR [rsp+496], r10 + mov QWORD PTR [rsp+504], r11 + mov r10, QWORD PTR [rdx] + mov r8, QWORD PTR [rsp] + sub r10, r8 + mov r11, QWORD PTR [rdx+8] + mov r8, QWORD PTR [rsp+8] + sbb r11, r8 + mov QWORD PTR [rcx], r10 + mov r10, QWORD PTR [rdx+16] + mov r8, QWORD PTR [rsp+16] + sbb r10, r8 + mov QWORD PTR [rcx+8], r11 + mov r11, QWORD PTR [rdx+24] + mov r8, QWORD PTR [rsp+24] + sbb r11, r8 + mov QWORD PTR [rcx+16], r10 + mov r10, QWORD PTR [rdx+32] + mov r8, QWORD PTR [rsp+32] + sbb r10, r8 + mov QWORD PTR [rcx+24], r11 + mov r11, QWORD PTR [rdx+40] + mov r8, QWORD PTR [rsp+40] + sbb r11, r8 + mov QWORD PTR [rcx+32], r10 + mov r10, QWORD PTR [rdx+48] + mov r8, QWORD PTR [rsp+48] + sbb r10, r8 + mov QWORD PTR [rcx+40], r11 + mov r11, QWORD PTR [rdx+56] + mov r8, QWORD PTR [rsp+56] + sbb r11, r8 + mov QWORD PTR [rcx+48], r10 + mov r10, QWORD PTR [rdx+64] + mov r8, QWORD PTR [rsp+64] + sbb r10, r8 + mov QWORD PTR [rcx+56], r11 + mov r11, QWORD PTR [rdx+72] + mov r8, QWORD PTR [rsp+72] + sbb r11, r8 + mov QWORD PTR [rcx+64], r10 + mov r10, QWORD PTR [rdx+80] + mov r8, QWORD PTR [rsp+80] + sbb r10, r8 + mov QWORD PTR [rcx+72], r11 + mov r11, QWORD PTR [rdx+88] + mov r8, QWORD PTR [rsp+88] + sbb r11, r8 + mov QWORD PTR [rcx+80], r10 + mov r10, QWORD PTR [rdx+96] + mov r8, QWORD PTR [rsp+96] + sbb r10, r8 + mov QWORD PTR [rcx+88], r11 + mov r11, QWORD PTR [rdx+104] + mov r8, QWORD PTR [rsp+104] + sbb r11, r8 + mov QWORD PTR [rcx+96], r10 + mov r10, QWORD PTR [rdx+112] + mov r8, QWORD PTR [rsp+112] + sbb r10, r8 + mov QWORD PTR [rcx+104], r11 + mov r11, QWORD PTR [rdx+120] + mov r8, QWORD PTR [rsp+120] + sbb r11, r8 + mov QWORD PTR [rcx+112], r10 + mov r10, QWORD PTR [rdx+128] + mov r8, QWORD PTR [rsp+128] + sbb r10, r8 + mov QWORD PTR [rcx+120], r11 + mov r11, QWORD PTR [rdx+136] + mov r8, QWORD PTR [rsp+136] + sbb r11, r8 + mov QWORD PTR [rcx+128], r10 + mov r10, QWORD PTR [rdx+144] + mov r8, QWORD PTR [rsp+144] + sbb r10, r8 + mov QWORD PTR [rcx+136], r11 + mov r11, QWORD PTR [rdx+152] + mov r8, QWORD PTR [rsp+152] + sbb r11, r8 + mov QWORD PTR [rcx+144], r10 + mov r10, QWORD PTR [rdx+160] + mov r8, QWORD PTR [rsp+160] + sbb r10, r8 + mov QWORD PTR [rcx+152], r11 + mov r11, QWORD PTR [rdx+168] + mov r8, QWORD PTR [rsp+168] + sbb r11, r8 + mov QWORD PTR [rcx+160], r10 + mov r10, QWORD PTR [rdx+176] + mov r8, QWORD PTR [rsp+176] + sbb r10, r8 + mov QWORD PTR [rcx+168], r11 + mov r11, QWORD PTR [rdx+184] + mov r8, QWORD PTR [rsp+184] + sbb r11, r8 + mov QWORD PTR [rcx+176], r10 + mov r10, QWORD PTR [rdx+192] + mov r8, QWORD PTR [rsp+192] + sbb r10, r8 + mov QWORD PTR [rcx+184], r11 + mov r11, QWORD PTR [rdx+200] + mov r8, QWORD PTR [rsp+200] + sbb r11, r8 + mov QWORD PTR [rcx+192], r10 + mov r10, QWORD PTR [rdx+208] + mov r8, QWORD PTR [rsp+208] + sbb r10, r8 + mov QWORD PTR [rcx+200], r11 + mov r11, QWORD PTR [rdx+216] + mov r8, QWORD PTR [rsp+216] + sbb r11, r8 + mov QWORD PTR [rcx+208], r10 + mov r10, QWORD PTR [rdx+224] + mov r8, QWORD PTR [rsp+224] + sbb r10, r8 + mov QWORD PTR [rcx+216], r11 + mov r11, QWORD PTR [rdx+232] + mov r8, QWORD PTR [rsp+232] + sbb r11, r8 + mov QWORD PTR [rcx+224], r10 + mov r10, QWORD PTR [rdx+240] + mov r8, QWORD PTR [rsp+240] + sbb r10, r8 + mov QWORD PTR [rcx+232], r11 + mov r11, QWORD PTR [rdx+248] + mov r8, QWORD PTR [rsp+248] + sbb r11, r8 + mov QWORD PTR [rcx+240], r10 + mov r10, QWORD PTR [rdx+256] + mov r8, QWORD PTR [rsp+256] + sbb r10, r8 + mov QWORD PTR [rcx+248], r11 + mov r11, QWORD PTR [rdx+264] + mov r8, QWORD PTR [rsp+264] + sbb r11, r8 + mov QWORD PTR [rcx+256], r10 + mov r10, QWORD PTR [rdx+272] + mov r8, QWORD PTR [rsp+272] + sbb r10, r8 + mov QWORD PTR [rcx+264], r11 + mov r11, QWORD PTR [rdx+280] + mov r8, QWORD PTR [rsp+280] + sbb r11, r8 + mov QWORD PTR [rcx+272], r10 + mov r10, QWORD PTR [rdx+288] + mov r8, QWORD PTR [rsp+288] + sbb r10, r8 + mov QWORD PTR [rcx+280], r11 + mov r11, QWORD PTR [rdx+296] + mov r8, QWORD PTR [rsp+296] + sbb r11, r8 + mov QWORD PTR [rcx+288], r10 + mov r10, QWORD PTR [rdx+304] + mov r8, QWORD PTR [rsp+304] + sbb r10, r8 + mov QWORD PTR [rcx+296], r11 + mov r11, QWORD PTR [rdx+312] + mov r8, QWORD PTR [rsp+312] + sbb r11, r8 + mov QWORD PTR [rcx+304], r10 + mov r10, QWORD PTR [rdx+320] + mov r8, QWORD PTR [rsp+320] + sbb r10, r8 + mov QWORD PTR [rcx+312], r11 + mov r11, QWORD PTR [rdx+328] + mov r8, QWORD PTR [rsp+328] + sbb r11, r8 + mov QWORD PTR [rcx+320], r10 + mov r10, QWORD PTR [rdx+336] + mov r8, QWORD PTR [rsp+336] + sbb r10, r8 + mov QWORD PTR [rcx+328], r11 + mov r11, QWORD PTR [rdx+344] + mov r8, QWORD PTR [rsp+344] + sbb r11, r8 + mov QWORD PTR [rcx+336], r10 + mov r10, QWORD PTR [rdx+352] + mov r8, QWORD PTR [rsp+352] + sbb r10, r8 + mov QWORD PTR [rcx+344], r11 + mov r11, QWORD PTR [rdx+360] + mov r8, QWORD PTR [rsp+360] + sbb r11, r8 + mov QWORD PTR [rcx+352], r10 + mov r10, QWORD PTR [rdx+368] + mov r8, QWORD PTR [rsp+368] + sbb r10, r8 + mov QWORD PTR [rcx+360], r11 + mov r11, QWORD PTR [rdx+376] + mov r8, QWORD PTR [rsp+376] + sbb r11, r8 + mov QWORD PTR [rcx+368], r10 + mov r10, QWORD PTR [rdx+384] + mov r8, QWORD PTR [rsp+384] + sbb r10, r8 + mov QWORD PTR [rcx+376], r11 + mov r11, QWORD PTR [rdx+392] + mov r8, QWORD PTR [rsp+392] + sbb r11, r8 + mov QWORD PTR [rcx+384], r10 + mov r10, QWORD PTR [rdx+400] + mov r8, QWORD PTR [rsp+400] + sbb r10, r8 + mov QWORD PTR [rcx+392], r11 + mov r11, QWORD PTR [rdx+408] + mov r8, QWORD PTR [rsp+408] + sbb r11, r8 + mov QWORD PTR [rcx+400], r10 + mov r10, QWORD PTR [rdx+416] + mov r8, QWORD PTR [rsp+416] + sbb r10, r8 + mov QWORD PTR [rcx+408], r11 + mov r11, QWORD PTR [rdx+424] + mov r8, QWORD PTR [rsp+424] + sbb r11, r8 + mov QWORD PTR [rcx+416], r10 + mov r10, QWORD PTR [rdx+432] + mov r8, QWORD PTR [rsp+432] + sbb r10, r8 + mov QWORD PTR [rcx+424], r11 + mov r11, QWORD PTR [rdx+440] + mov r8, QWORD PTR [rsp+440] + sbb r11, r8 + mov QWORD PTR [rcx+432], r10 + mov r10, QWORD PTR [rdx+448] + mov r8, QWORD PTR [rsp+448] + sbb r10, r8 + mov QWORD PTR [rcx+440], r11 + mov r11, QWORD PTR [rdx+456] + mov r8, QWORD PTR [rsp+456] + sbb r11, r8 + mov QWORD PTR [rcx+448], r10 + mov r10, QWORD PTR [rdx+464] + mov r8, QWORD PTR [rsp+464] + sbb r10, r8 + mov QWORD PTR [rcx+456], r11 + mov r11, QWORD PTR [rdx+472] + mov r8, QWORD PTR [rsp+472] + sbb r11, r8 + mov QWORD PTR [rcx+464], r10 + mov r10, QWORD PTR [rdx+480] + mov r8, QWORD PTR [rsp+480] + sbb r10, r8 + mov QWORD PTR [rcx+472], r11 + mov r11, QWORD PTR [rdx+488] + mov r8, QWORD PTR [rsp+488] + sbb r11, r8 + mov QWORD PTR [rcx+480], r10 + mov r10, QWORD PTR [rdx+496] + mov r8, QWORD PTR [rsp+496] + sbb r10, r8 + mov QWORD PTR [rcx+488], r11 + mov r11, QWORD PTR [rdx+504] + mov r8, QWORD PTR [rsp+504] + sbb r11, r8 + mov QWORD PTR [rcx+496], r10 + mov QWORD PTR [rcx+504], r11 + sbb rax, rax + add rsp, 512 + ret +sp_4096_cond_sub_64 ENDP +_TEXT ENDS +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_mont_reduce_64 PROC + push r12 + push r13 + push r14 + push r15 + push rdi + push rsi + mov r9, rdx + xor rsi, rsi + ; i = 64 + mov r10, 64 + mov r15, QWORD PTR [rcx] + mov rdi, QWORD PTR [rcx+8] +L_4096_mont_reduce_64_loop: + ; mu = a[i] * mp + mov r13, r15 + imul r13, r8 + ; a[i+0] += m[0] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9] + add r15, rax + adc r12, rdx + ; a[i+1] += m[1] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+8] + mov r15, rdi + add r15, rax + adc r11, rdx + add r15, r12 + adc r11, 0 + ; a[i+2] += m[2] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+16] + mov rdi, QWORD PTR [rcx+16] + add rdi, rax + adc r12, rdx + add rdi, r11 + adc r12, 0 + ; a[i+3] += m[3] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+24] + mov r14, QWORD PTR [rcx+24] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+24], r14 + adc r11, 0 + ; a[i+4] += m[4] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+32] + mov r14, QWORD PTR [rcx+32] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+32], r14 + adc r12, 0 + ; a[i+5] += m[5] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+40] + mov r14, QWORD PTR [rcx+40] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+40], r14 + adc r11, 0 + ; a[i+6] += m[6] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+48] + mov r14, QWORD PTR [rcx+48] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+48], r14 + adc r12, 0 + ; a[i+7] += m[7] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+56] + mov r14, QWORD PTR [rcx+56] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+56], r14 + adc r11, 0 + ; a[i+8] += m[8] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+64] + mov r14, QWORD PTR [rcx+64] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+64], r14 + adc r12, 0 + ; a[i+9] += m[9] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+72] + mov r14, QWORD PTR [rcx+72] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+72], r14 + adc r11, 0 + ; a[i+10] += m[10] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+80] + mov r14, QWORD PTR [rcx+80] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+80], r14 + adc r12, 0 + ; a[i+11] += m[11] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+88] + mov r14, QWORD PTR [rcx+88] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+88], r14 + adc r11, 0 + ; a[i+12] += m[12] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+96] + mov r14, QWORD PTR [rcx+96] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+96], r14 + adc r12, 0 + ; a[i+13] += m[13] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+104] + mov r14, QWORD PTR [rcx+104] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+104], r14 + adc r11, 0 + ; a[i+14] += m[14] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+112] + mov r14, QWORD PTR [rcx+112] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+112], r14 + adc r12, 0 + ; a[i+15] += m[15] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+120] + mov r14, QWORD PTR [rcx+120] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+120], r14 + adc r11, 0 + ; a[i+16] += m[16] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+128] + mov r14, QWORD PTR [rcx+128] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+128], r14 + adc r12, 0 + ; a[i+17] += m[17] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+136] + mov r14, QWORD PTR [rcx+136] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+136], r14 + adc r11, 0 + ; a[i+18] += m[18] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+144] + mov r14, QWORD PTR [rcx+144] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+144], r14 + adc r12, 0 + ; a[i+19] += m[19] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+152] + mov r14, QWORD PTR [rcx+152] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+152], r14 + adc r11, 0 + ; a[i+20] += m[20] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+160] + mov r14, QWORD PTR [rcx+160] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+160], r14 + adc r12, 0 + ; a[i+21] += m[21] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+168] + mov r14, QWORD PTR [rcx+168] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+168], r14 + adc r11, 0 + ; a[i+22] += m[22] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+176] + mov r14, QWORD PTR [rcx+176] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+176], r14 + adc r12, 0 + ; a[i+23] += m[23] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+184] + mov r14, QWORD PTR [rcx+184] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+184], r14 + adc r11, 0 + ; a[i+24] += m[24] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+192] + mov r14, QWORD PTR [rcx+192] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+192], r14 + adc r12, 0 + ; a[i+25] += m[25] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+200] + mov r14, QWORD PTR [rcx+200] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+200], r14 + adc r11, 0 + ; a[i+26] += m[26] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+208] + mov r14, QWORD PTR [rcx+208] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+208], r14 + adc r12, 0 + ; a[i+27] += m[27] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+216] + mov r14, QWORD PTR [rcx+216] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+216], r14 + adc r11, 0 + ; a[i+28] += m[28] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+224] + mov r14, QWORD PTR [rcx+224] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+224], r14 + adc r12, 0 + ; a[i+29] += m[29] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+232] + mov r14, QWORD PTR [rcx+232] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+232], r14 + adc r11, 0 + ; a[i+30] += m[30] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+240] + mov r14, QWORD PTR [rcx+240] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+240], r14 + adc r12, 0 + ; a[i+31] += m[31] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+248] + mov r14, QWORD PTR [rcx+248] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+248], r14 + adc r11, 0 + ; a[i+32] += m[32] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+256] + mov r14, QWORD PTR [rcx+256] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+256], r14 + adc r12, 0 + ; a[i+33] += m[33] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+264] + mov r14, QWORD PTR [rcx+264] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+264], r14 + adc r11, 0 + ; a[i+34] += m[34] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+272] + mov r14, QWORD PTR [rcx+272] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+272], r14 + adc r12, 0 + ; a[i+35] += m[35] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+280] + mov r14, QWORD PTR [rcx+280] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+280], r14 + adc r11, 0 + ; a[i+36] += m[36] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+288] + mov r14, QWORD PTR [rcx+288] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+288], r14 + adc r12, 0 + ; a[i+37] += m[37] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+296] + mov r14, QWORD PTR [rcx+296] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+296], r14 + adc r11, 0 + ; a[i+38] += m[38] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+304] + mov r14, QWORD PTR [rcx+304] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+304], r14 + adc r12, 0 + ; a[i+39] += m[39] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+312] + mov r14, QWORD PTR [rcx+312] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+312], r14 + adc r11, 0 + ; a[i+40] += m[40] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+320] + mov r14, QWORD PTR [rcx+320] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+320], r14 + adc r12, 0 + ; a[i+41] += m[41] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+328] + mov r14, QWORD PTR [rcx+328] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+328], r14 + adc r11, 0 + ; a[i+42] += m[42] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+336] + mov r14, QWORD PTR [rcx+336] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+336], r14 + adc r12, 0 + ; a[i+43] += m[43] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+344] + mov r14, QWORD PTR [rcx+344] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+344], r14 + adc r11, 0 + ; a[i+44] += m[44] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+352] + mov r14, QWORD PTR [rcx+352] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+352], r14 + adc r12, 0 + ; a[i+45] += m[45] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+360] + mov r14, QWORD PTR [rcx+360] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+360], r14 + adc r11, 0 + ; a[i+46] += m[46] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+368] + mov r14, QWORD PTR [rcx+368] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+368], r14 + adc r12, 0 + ; a[i+47] += m[47] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+376] + mov r14, QWORD PTR [rcx+376] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+376], r14 + adc r11, 0 + ; a[i+48] += m[48] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+384] + mov r14, QWORD PTR [rcx+384] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+384], r14 + adc r12, 0 + ; a[i+49] += m[49] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+392] + mov r14, QWORD PTR [rcx+392] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+392], r14 + adc r11, 0 + ; a[i+50] += m[50] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+400] + mov r14, QWORD PTR [rcx+400] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+400], r14 + adc r12, 0 + ; a[i+51] += m[51] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+408] + mov r14, QWORD PTR [rcx+408] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+408], r14 + adc r11, 0 + ; a[i+52] += m[52] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+416] + mov r14, QWORD PTR [rcx+416] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+416], r14 + adc r12, 0 + ; a[i+53] += m[53] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+424] + mov r14, QWORD PTR [rcx+424] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+424], r14 + adc r11, 0 + ; a[i+54] += m[54] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+432] + mov r14, QWORD PTR [rcx+432] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+432], r14 + adc r12, 0 + ; a[i+55] += m[55] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+440] + mov r14, QWORD PTR [rcx+440] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+440], r14 + adc r11, 0 + ; a[i+56] += m[56] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+448] + mov r14, QWORD PTR [rcx+448] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+448], r14 + adc r12, 0 + ; a[i+57] += m[57] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+456] + mov r14, QWORD PTR [rcx+456] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+456], r14 + adc r11, 0 + ; a[i+58] += m[58] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+464] + mov r14, QWORD PTR [rcx+464] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+464], r14 + adc r12, 0 + ; a[i+59] += m[59] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+472] + mov r14, QWORD PTR [rcx+472] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+472], r14 + adc r11, 0 + ; a[i+60] += m[60] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+480] + mov r14, QWORD PTR [rcx+480] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+480], r14 + adc r12, 0 + ; a[i+61] += m[61] * mu + mov rax, r13 + xor r11, r11 + mul QWORD PTR [r9+488] + mov r14, QWORD PTR [rcx+488] + add r14, rax + adc r11, rdx + add r14, r12 + mov QWORD PTR [rcx+488], r14 + adc r11, 0 + ; a[i+62] += m[62] * mu + mov rax, r13 + xor r12, r12 + mul QWORD PTR [r9+496] + mov r14, QWORD PTR [rcx+496] + add r14, rax + adc r12, rdx + add r14, r11 + mov QWORD PTR [rcx+496], r14 + adc r12, 0 + ; a[i+63] += m[63] * mu + mov rax, r13 + mul QWORD PTR [r9+504] + mov r14, QWORD PTR [rcx+504] + add r12, rax + adc rdx, rsi + mov rsi, 0 + adc rsi, 0 + add r14, r12 + mov QWORD PTR [rcx+504], r14 + adc QWORD PTR [rcx+512], rdx + adc rsi, 0 + ; i -= 1 + add rcx, 8 + dec r10 + jnz L_4096_mont_reduce_64_loop + mov QWORD PTR [rcx], r15 + mov QWORD PTR [rcx+8], rdi + neg rsi +IFDEF _WIN64 + mov r8, r9 + mov r9, rsi +ELSE + mov r9, rsi + mov r8, r9 +ENDIF + mov rdx, rcx + mov rcx, rcx + sub rcx, 512 + call sp_4096_cond_sub_64 + pop rsi + pop rdi + pop r15 + pop r14 + pop r13 + pop r12 + ret +sp_4096_mont_reduce_64 ENDP +_TEXT ENDS +; /* Sub b from a into r. (r = a - b) +; * +; * r A single precision integer. +; * a A single precision integer. +; * b A single precision integer. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_sub_64 PROC mov r9, QWORD PTR [rdx] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 1 - mov r9, QWORD PTR [rdx+8] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 2 + sub r9, QWORD PTR [r8] + mov r10, QWORD PTR [rdx+8] + mov QWORD PTR [rcx], r9 + sbb r10, QWORD PTR [r8+8] mov r9, QWORD PTR [rdx+16] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 3 - mov r9, QWORD PTR [rdx+24] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 4 + mov QWORD PTR [rcx+8], r10 + sbb r9, QWORD PTR [r8+16] + mov r10, QWORD PTR [rdx+24] + mov QWORD PTR [rcx+16], r9 + sbb r10, QWORD PTR [r8+24] mov r9, QWORD PTR [rdx+32] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 5 - mov r9, QWORD PTR [rdx+40] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 6 + mov QWORD PTR [rcx+24], r10 + sbb r9, QWORD PTR [r8+32] + mov r10, QWORD PTR [rdx+40] + mov QWORD PTR [rcx+32], r9 + sbb r10, QWORD PTR [r8+40] mov r9, QWORD PTR [rdx+48] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 7 - mov r9, QWORD PTR [rdx+56] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 8 + mov QWORD PTR [rcx+40], r10 + sbb r9, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+56] + mov QWORD PTR [rcx+48], r9 + sbb r10, QWORD PTR [r8+56] mov r9, QWORD PTR [rdx+64] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 9 - mov r9, QWORD PTR [rdx+72] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 10 + mov QWORD PTR [rcx+56], r10 + sbb r9, QWORD PTR [r8+64] + mov r10, QWORD PTR [rdx+72] + mov QWORD PTR [rcx+64], r9 + sbb r10, QWORD PTR [r8+72] mov r9, QWORD PTR [rdx+80] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 11 - mov r9, QWORD PTR [rdx+88] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 12 + mov QWORD PTR [rcx+72], r10 + sbb r9, QWORD PTR [r8+80] + mov r10, QWORD PTR [rdx+88] + mov QWORD PTR [rcx+80], r9 + sbb r10, QWORD PTR [r8+88] mov r9, QWORD PTR [rdx+96] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 13 - mov r9, QWORD PTR [rdx+104] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 14 + mov QWORD PTR [rcx+88], r10 + sbb r9, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+104] + mov QWORD PTR [rcx+96], r9 + sbb r10, QWORD PTR [r8+104] mov r9, QWORD PTR [rdx+112] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - ; ENTRY: 15 - mov r9, QWORD PTR [rdx+120] - add r9, 448 - movdqu xmm12, xmm13 - pcmpeqd xmm12, xmm10 - movdqu xmm0, OWORD PTR [r9] - movdqu xmm1, OWORD PTR [r9+16] - movdqu xmm2, OWORD PTR [r9+32] - movdqu xmm3, OWORD PTR [r9+48] - pand xmm0, xmm12 - pand xmm1, xmm12 - pand xmm2, xmm12 - pand xmm3, xmm12 - por xmm4, xmm0 - por xmm5, xmm1 - por xmm6, xmm2 - por xmm7, xmm3 - paddd xmm13, xmm11 - movdqu OWORD PTR [rcx], xmm4 - movdqu OWORD PTR [rcx+16], xmm5 - movdqu OWORD PTR [rcx+32], xmm6 - movdqu OWORD PTR [rcx+48], xmm7 - ; END: 56-63 - movdqu xmm6, OWORD PTR [rsp] - movdqu xmm7, OWORD PTR [rsp+16] - movdqu xmm8, OWORD PTR [rsp+32] - movdqu xmm9, OWORD PTR [rsp+48] - movdqu xmm10, OWORD PTR [rsp+64] - movdqu xmm11, OWORD PTR [rsp+80] - movdqu xmm12, OWORD PTR [rsp+96] - movdqu xmm13, OWORD PTR [rsp+112] - add rsp, 128 + mov QWORD PTR [rcx+104], r10 + sbb r9, QWORD PTR [r8+112] + mov r10, QWORD PTR [rdx+120] + mov QWORD PTR [rcx+112], r9 + sbb r10, QWORD PTR [r8+120] + mov r9, QWORD PTR [rdx+128] + mov QWORD PTR [rcx+120], r10 + sbb r9, QWORD PTR [r8+128] + mov r10, QWORD PTR [rdx+136] + mov QWORD PTR [rcx+128], r9 + sbb r10, QWORD PTR [r8+136] + mov r9, QWORD PTR [rdx+144] + mov QWORD PTR [rcx+136], r10 + sbb r9, QWORD PTR [r8+144] + mov r10, QWORD PTR [rdx+152] + mov QWORD PTR [rcx+144], r9 + sbb r10, QWORD PTR [r8+152] + mov r9, QWORD PTR [rdx+160] + mov QWORD PTR [rcx+152], r10 + sbb r9, QWORD PTR [r8+160] + mov r10, QWORD PTR [rdx+168] + mov QWORD PTR [rcx+160], r9 + sbb r10, QWORD PTR [r8+168] + mov r9, QWORD PTR [rdx+176] + mov QWORD PTR [rcx+168], r10 + sbb r9, QWORD PTR [r8+176] + mov r10, QWORD PTR [rdx+184] + mov QWORD PTR [rcx+176], r9 + sbb r10, QWORD PTR [r8+184] + mov r9, QWORD PTR [rdx+192] + mov QWORD PTR [rcx+184], r10 + sbb r9, QWORD PTR [r8+192] + mov r10, QWORD PTR [rdx+200] + mov QWORD PTR [rcx+192], r9 + sbb r10, QWORD PTR [r8+200] + mov r9, QWORD PTR [rdx+208] + mov QWORD PTR [rcx+200], r10 + sbb r9, QWORD PTR [r8+208] + mov r10, QWORD PTR [rdx+216] + mov QWORD PTR [rcx+208], r9 + sbb r10, QWORD PTR [r8+216] + mov r9, QWORD PTR [rdx+224] + mov QWORD PTR [rcx+216], r10 + sbb r9, QWORD PTR [r8+224] + mov r10, QWORD PTR [rdx+232] + mov QWORD PTR [rcx+224], r9 + sbb r10, QWORD PTR [r8+232] + mov r9, QWORD PTR [rdx+240] + mov QWORD PTR [rcx+232], r10 + sbb r9, QWORD PTR [r8+240] + mov r10, QWORD PTR [rdx+248] + mov QWORD PTR [rcx+240], r9 + sbb r10, QWORD PTR [r8+248] + mov r9, QWORD PTR [rdx+256] + mov QWORD PTR [rcx+248], r10 + sbb r9, QWORD PTR [r8+256] + mov r10, QWORD PTR [rdx+264] + mov QWORD PTR [rcx+256], r9 + sbb r10, QWORD PTR [r8+264] + mov r9, QWORD PTR [rdx+272] + mov QWORD PTR [rcx+264], r10 + sbb r9, QWORD PTR [r8+272] + mov r10, QWORD PTR [rdx+280] + mov QWORD PTR [rcx+272], r9 + sbb r10, QWORD PTR [r8+280] + mov r9, QWORD PTR [rdx+288] + mov QWORD PTR [rcx+280], r10 + sbb r9, QWORD PTR [r8+288] + mov r10, QWORD PTR [rdx+296] + mov QWORD PTR [rcx+288], r9 + sbb r10, QWORD PTR [r8+296] + mov r9, QWORD PTR [rdx+304] + mov QWORD PTR [rcx+296], r10 + sbb r9, QWORD PTR [r8+304] + mov r10, QWORD PTR [rdx+312] + mov QWORD PTR [rcx+304], r9 + sbb r10, QWORD PTR [r8+312] + mov r9, QWORD PTR [rdx+320] + mov QWORD PTR [rcx+312], r10 + sbb r9, QWORD PTR [r8+320] + mov r10, QWORD PTR [rdx+328] + mov QWORD PTR [rcx+320], r9 + sbb r10, QWORD PTR [r8+328] + mov r9, QWORD PTR [rdx+336] + mov QWORD PTR [rcx+328], r10 + sbb r9, QWORD PTR [r8+336] + mov r10, QWORD PTR [rdx+344] + mov QWORD PTR [rcx+336], r9 + sbb r10, QWORD PTR [r8+344] + mov r9, QWORD PTR [rdx+352] + mov QWORD PTR [rcx+344], r10 + sbb r9, QWORD PTR [r8+352] + mov r10, QWORD PTR [rdx+360] + mov QWORD PTR [rcx+352], r9 + sbb r10, QWORD PTR [r8+360] + mov r9, QWORD PTR [rdx+368] + mov QWORD PTR [rcx+360], r10 + sbb r9, QWORD PTR [r8+368] + mov r10, QWORD PTR [rdx+376] + mov QWORD PTR [rcx+368], r9 + sbb r10, QWORD PTR [r8+376] + mov r9, QWORD PTR [rdx+384] + mov QWORD PTR [rcx+376], r10 + sbb r9, QWORD PTR [r8+384] + mov r10, QWORD PTR [rdx+392] + mov QWORD PTR [rcx+384], r9 + sbb r10, QWORD PTR [r8+392] + mov r9, QWORD PTR [rdx+400] + mov QWORD PTR [rcx+392], r10 + sbb r9, QWORD PTR [r8+400] + mov r10, QWORD PTR [rdx+408] + mov QWORD PTR [rcx+400], r9 + sbb r10, QWORD PTR [r8+408] + mov r9, QWORD PTR [rdx+416] + mov QWORD PTR [rcx+408], r10 + sbb r9, QWORD PTR [r8+416] + mov r10, QWORD PTR [rdx+424] + mov QWORD PTR [rcx+416], r9 + sbb r10, QWORD PTR [r8+424] + mov r9, QWORD PTR [rdx+432] + mov QWORD PTR [rcx+424], r10 + sbb r9, QWORD PTR [r8+432] + mov r10, QWORD PTR [rdx+440] + mov QWORD PTR [rcx+432], r9 + sbb r10, QWORD PTR [r8+440] + mov r9, QWORD PTR [rdx+448] + mov QWORD PTR [rcx+440], r10 + sbb r9, QWORD PTR [r8+448] + mov r10, QWORD PTR [rdx+456] + mov QWORD PTR [rcx+448], r9 + sbb r10, QWORD PTR [r8+456] + mov r9, QWORD PTR [rdx+464] + mov QWORD PTR [rcx+456], r10 + sbb r9, QWORD PTR [r8+464] + mov r10, QWORD PTR [rdx+472] + mov QWORD PTR [rcx+464], r9 + sbb r10, QWORD PTR [r8+472] + mov r9, QWORD PTR [rdx+480] + mov QWORD PTR [rcx+472], r10 + sbb r9, QWORD PTR [r8+480] + mov r10, QWORD PTR [rdx+488] + mov QWORD PTR [rcx+480], r9 + sbb r10, QWORD PTR [r8+488] + mov r9, QWORD PTR [rdx+496] + mov QWORD PTR [rcx+488], r10 + sbb r9, QWORD PTR [r8+496] + mov r10, QWORD PTR [rdx+504] + mov QWORD PTR [rcx+496], r9 + sbb r10, QWORD PTR [r8+504] + mov QWORD PTR [rcx+504], r10 + sbb rax, rax + ret +sp_4096_sub_64 ENDP +_TEXT ENDS +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_mul_d_avx2_64 PROC + push r12 + push r13 + mov rax, rdx + ; A[0] * B + mov rdx, r8 + xor r13, r13 + mulx r12, r11, QWORD PTR [rax] + mov QWORD PTR [rcx], r11 + ; A[1] * B + mulx r10, r9, QWORD PTR [rax+8] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+8], r12 + ; A[2] * B + mulx r10, r9, QWORD PTR [rax+16] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+16], r11 + ; A[3] * B + mulx r10, r9, QWORD PTR [rax+24] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+24], r12 + ; A[4] * B + mulx r10, r9, QWORD PTR [rax+32] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+32], r11 + ; A[5] * B + mulx r10, r9, QWORD PTR [rax+40] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+40], r12 + ; A[6] * B + mulx r10, r9, QWORD PTR [rax+48] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+48], r11 + ; A[7] * B + mulx r10, r9, QWORD PTR [rax+56] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+56], r12 + ; A[8] * B + mulx r10, r9, QWORD PTR [rax+64] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+64], r11 + ; A[9] * B + mulx r10, r9, QWORD PTR [rax+72] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+72], r12 + ; A[10] * B + mulx r10, r9, QWORD PTR [rax+80] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+80], r11 + ; A[11] * B + mulx r10, r9, QWORD PTR [rax+88] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+88], r12 + ; A[12] * B + mulx r10, r9, QWORD PTR [rax+96] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+96], r11 + ; A[13] * B + mulx r10, r9, QWORD PTR [rax+104] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+104], r12 + ; A[14] * B + mulx r10, r9, QWORD PTR [rax+112] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+112], r11 + ; A[15] * B + mulx r10, r9, QWORD PTR [rax+120] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+120], r12 + ; A[16] * B + mulx r10, r9, QWORD PTR [rax+128] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+128], r11 + ; A[17] * B + mulx r10, r9, QWORD PTR [rax+136] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+136], r12 + ; A[18] * B + mulx r10, r9, QWORD PTR [rax+144] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+144], r11 + ; A[19] * B + mulx r10, r9, QWORD PTR [rax+152] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+152], r12 + ; A[20] * B + mulx r10, r9, QWORD PTR [rax+160] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+160], r11 + ; A[21] * B + mulx r10, r9, QWORD PTR [rax+168] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+168], r12 + ; A[22] * B + mulx r10, r9, QWORD PTR [rax+176] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+176], r11 + ; A[23] * B + mulx r10, r9, QWORD PTR [rax+184] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+184], r12 + ; A[24] * B + mulx r10, r9, QWORD PTR [rax+192] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+192], r11 + ; A[25] * B + mulx r10, r9, QWORD PTR [rax+200] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+200], r12 + ; A[26] * B + mulx r10, r9, QWORD PTR [rax+208] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+208], r11 + ; A[27] * B + mulx r10, r9, QWORD PTR [rax+216] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+216], r12 + ; A[28] * B + mulx r10, r9, QWORD PTR [rax+224] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+224], r11 + ; A[29] * B + mulx r10, r9, QWORD PTR [rax+232] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+232], r12 + ; A[30] * B + mulx r10, r9, QWORD PTR [rax+240] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+240], r11 + ; A[31] * B + mulx r10, r9, QWORD PTR [rax+248] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+248], r12 + ; A[32] * B + mulx r10, r9, QWORD PTR [rax+256] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+256], r11 + ; A[33] * B + mulx r10, r9, QWORD PTR [rax+264] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+264], r12 + ; A[34] * B + mulx r10, r9, QWORD PTR [rax+272] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+272], r11 + ; A[35] * B + mulx r10, r9, QWORD PTR [rax+280] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+280], r12 + ; A[36] * B + mulx r10, r9, QWORD PTR [rax+288] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+288], r11 + ; A[37] * B + mulx r10, r9, QWORD PTR [rax+296] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+296], r12 + ; A[38] * B + mulx r10, r9, QWORD PTR [rax+304] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+304], r11 + ; A[39] * B + mulx r10, r9, QWORD PTR [rax+312] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+312], r12 + ; A[40] * B + mulx r10, r9, QWORD PTR [rax+320] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+320], r11 + ; A[41] * B + mulx r10, r9, QWORD PTR [rax+328] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+328], r12 + ; A[42] * B + mulx r10, r9, QWORD PTR [rax+336] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+336], r11 + ; A[43] * B + mulx r10, r9, QWORD PTR [rax+344] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+344], r12 + ; A[44] * B + mulx r10, r9, QWORD PTR [rax+352] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+352], r11 + ; A[45] * B + mulx r10, r9, QWORD PTR [rax+360] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+360], r12 + ; A[46] * B + mulx r10, r9, QWORD PTR [rax+368] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+368], r11 + ; A[47] * B + mulx r10, r9, QWORD PTR [rax+376] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+376], r12 + ; A[48] * B + mulx r10, r9, QWORD PTR [rax+384] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+384], r11 + ; A[49] * B + mulx r10, r9, QWORD PTR [rax+392] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+392], r12 + ; A[50] * B + mulx r10, r9, QWORD PTR [rax+400] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+400], r11 + ; A[51] * B + mulx r10, r9, QWORD PTR [rax+408] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+408], r12 + ; A[52] * B + mulx r10, r9, QWORD PTR [rax+416] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+416], r11 + ; A[53] * B + mulx r10, r9, QWORD PTR [rax+424] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+424], r12 + ; A[54] * B + mulx r10, r9, QWORD PTR [rax+432] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+432], r11 + ; A[55] * B + mulx r10, r9, QWORD PTR [rax+440] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+440], r12 + ; A[56] * B + mulx r10, r9, QWORD PTR [rax+448] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+448], r11 + ; A[57] * B + mulx r10, r9, QWORD PTR [rax+456] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+456], r12 + ; A[58] * B + mulx r10, r9, QWORD PTR [rax+464] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+464], r11 + ; A[59] * B + mulx r10, r9, QWORD PTR [rax+472] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+472], r12 + ; A[60] * B + mulx r10, r9, QWORD PTR [rax+480] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+480], r11 + ; A[61] * B + mulx r10, r9, QWORD PTR [rax+488] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + mov QWORD PTR [rcx+488], r12 + ; A[62] * B + mulx r10, r9, QWORD PTR [rax+496] + mov r12, r13 + adcx r11, r9 + adox r12, r10 + mov QWORD PTR [rcx+496], r11 + ; A[63] * B + mulx r10, r9, QWORD PTR [rax+504] + mov r11, r13 + adcx r12, r9 + adox r11, r10 + adcx r11, r13 + mov QWORD PTR [rcx+504], r12 + mov QWORD PTR [rcx+512], r11 + pop r13 + pop r12 + ret +sp_4096_mul_d_avx2_64 ENDP +_TEXT ENDS +ENDIF +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. +; */ +_TEXT SEGMENT READONLY PARA +div_4096_word_asm_64 PROC + mov r9, rdx + mov rax, r9 + mov rdx, rcx + div r8 + ret +div_4096_word_asm_64 ENDP +_TEXT ENDS +ENDIF +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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_cond_sub_avx2_64 PROC + push r12 + mov r12, QWORD PTR [r8] + mov r10, QWORD PTR [rdx] + pext r12, r12, r9 + sub r10, r12 + mov r12, QWORD PTR [r8+8] + mov r11, QWORD PTR [rdx+8] + pext r12, r12, r9 + mov QWORD PTR [rcx], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+16] + mov r12, QWORD PTR [rdx+16] + pext r10, r10, r9 + mov QWORD PTR [rcx+8], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+24] + mov r10, QWORD PTR [rdx+24] + pext r11, r11, r9 + mov QWORD PTR [rcx+16], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+32] + mov r11, QWORD PTR [rdx+32] + pext r12, r12, r9 + mov QWORD PTR [rcx+24], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+40] + mov r12, QWORD PTR [rdx+40] + pext r10, r10, r9 + mov QWORD PTR [rcx+32], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+48] + mov r10, QWORD PTR [rdx+48] + pext r11, r11, r9 + mov QWORD PTR [rcx+40], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+56] + mov r11, QWORD PTR [rdx+56] + pext r12, r12, r9 + mov QWORD PTR [rcx+48], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+64] + mov r12, QWORD PTR [rdx+64] + pext r10, r10, r9 + mov QWORD PTR [rcx+56], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+72] + mov r10, QWORD PTR [rdx+72] + pext r11, r11, r9 + mov QWORD PTR [rcx+64], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+80] + mov r11, QWORD PTR [rdx+80] + pext r12, r12, r9 + mov QWORD PTR [rcx+72], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+88] + mov r12, QWORD PTR [rdx+88] + pext r10, r10, r9 + mov QWORD PTR [rcx+80], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+96] + mov r10, QWORD PTR [rdx+96] + pext r11, r11, r9 + mov QWORD PTR [rcx+88], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+104] + mov r11, QWORD PTR [rdx+104] + pext r12, r12, r9 + mov QWORD PTR [rcx+96], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+112] + mov r12, QWORD PTR [rdx+112] + pext r10, r10, r9 + mov QWORD PTR [rcx+104], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+120] + mov r10, QWORD PTR [rdx+120] + pext r11, r11, r9 + mov QWORD PTR [rcx+112], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+128] + mov r11, QWORD PTR [rdx+128] + pext r12, r12, r9 + mov QWORD PTR [rcx+120], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+136] + mov r12, QWORD PTR [rdx+136] + pext r10, r10, r9 + mov QWORD PTR [rcx+128], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+144] + mov r10, QWORD PTR [rdx+144] + pext r11, r11, r9 + mov QWORD PTR [rcx+136], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+152] + mov r11, QWORD PTR [rdx+152] + pext r12, r12, r9 + mov QWORD PTR [rcx+144], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+160] + mov r12, QWORD PTR [rdx+160] + pext r10, r10, r9 + mov QWORD PTR [rcx+152], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+168] + mov r10, QWORD PTR [rdx+168] + pext r11, r11, r9 + mov QWORD PTR [rcx+160], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+176] + mov r11, QWORD PTR [rdx+176] + pext r12, r12, r9 + mov QWORD PTR [rcx+168], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+184] + mov r12, QWORD PTR [rdx+184] + pext r10, r10, r9 + mov QWORD PTR [rcx+176], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+192] + mov r10, QWORD PTR [rdx+192] + pext r11, r11, r9 + mov QWORD PTR [rcx+184], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+200] + mov r11, QWORD PTR [rdx+200] + pext r12, r12, r9 + mov QWORD PTR [rcx+192], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+208] + mov r12, QWORD PTR [rdx+208] + pext r10, r10, r9 + mov QWORD PTR [rcx+200], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+216] + mov r10, QWORD PTR [rdx+216] + pext r11, r11, r9 + mov QWORD PTR [rcx+208], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+224] + mov r11, QWORD PTR [rdx+224] + pext r12, r12, r9 + mov QWORD PTR [rcx+216], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+232] + mov r12, QWORD PTR [rdx+232] + pext r10, r10, r9 + mov QWORD PTR [rcx+224], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+240] + mov r10, QWORD PTR [rdx+240] + pext r11, r11, r9 + mov QWORD PTR [rcx+232], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+248] + mov r11, QWORD PTR [rdx+248] + pext r12, r12, r9 + mov QWORD PTR [rcx+240], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+256] + mov r12, QWORD PTR [rdx+256] + pext r10, r10, r9 + mov QWORD PTR [rcx+248], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+264] + mov r10, QWORD PTR [rdx+264] + pext r11, r11, r9 + mov QWORD PTR [rcx+256], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+272] + mov r11, QWORD PTR [rdx+272] + pext r12, r12, r9 + mov QWORD PTR [rcx+264], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+280] + mov r12, QWORD PTR [rdx+280] + pext r10, r10, r9 + mov QWORD PTR [rcx+272], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+288] + mov r10, QWORD PTR [rdx+288] + pext r11, r11, r9 + mov QWORD PTR [rcx+280], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+296] + mov r11, QWORD PTR [rdx+296] + pext r12, r12, r9 + mov QWORD PTR [rcx+288], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+304] + mov r12, QWORD PTR [rdx+304] + pext r10, r10, r9 + mov QWORD PTR [rcx+296], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+312] + mov r10, QWORD PTR [rdx+312] + pext r11, r11, r9 + mov QWORD PTR [rcx+304], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+320] + mov r11, QWORD PTR [rdx+320] + pext r12, r12, r9 + mov QWORD PTR [rcx+312], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+328] + mov r12, QWORD PTR [rdx+328] + pext r10, r10, r9 + mov QWORD PTR [rcx+320], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+336] + mov r10, QWORD PTR [rdx+336] + pext r11, r11, r9 + mov QWORD PTR [rcx+328], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+344] + mov r11, QWORD PTR [rdx+344] + pext r12, r12, r9 + mov QWORD PTR [rcx+336], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+352] + mov r12, QWORD PTR [rdx+352] + pext r10, r10, r9 + mov QWORD PTR [rcx+344], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+360] + mov r10, QWORD PTR [rdx+360] + pext r11, r11, r9 + mov QWORD PTR [rcx+352], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+368] + mov r11, QWORD PTR [rdx+368] + pext r12, r12, r9 + mov QWORD PTR [rcx+360], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+376] + mov r12, QWORD PTR [rdx+376] + pext r10, r10, r9 + mov QWORD PTR [rcx+368], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+384] + mov r10, QWORD PTR [rdx+384] + pext r11, r11, r9 + mov QWORD PTR [rcx+376], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+392] + mov r11, QWORD PTR [rdx+392] + pext r12, r12, r9 + mov QWORD PTR [rcx+384], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+400] + mov r12, QWORD PTR [rdx+400] + pext r10, r10, r9 + mov QWORD PTR [rcx+392], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+408] + mov r10, QWORD PTR [rdx+408] + pext r11, r11, r9 + mov QWORD PTR [rcx+400], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+416] + mov r11, QWORD PTR [rdx+416] + pext r12, r12, r9 + mov QWORD PTR [rcx+408], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+424] + mov r12, QWORD PTR [rdx+424] + pext r10, r10, r9 + mov QWORD PTR [rcx+416], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+432] + mov r10, QWORD PTR [rdx+432] + pext r11, r11, r9 + mov QWORD PTR [rcx+424], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+440] + mov r11, QWORD PTR [rdx+440] + pext r12, r12, r9 + mov QWORD PTR [rcx+432], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+448] + mov r12, QWORD PTR [rdx+448] + pext r10, r10, r9 + mov QWORD PTR [rcx+440], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+456] + mov r10, QWORD PTR [rdx+456] + pext r11, r11, r9 + mov QWORD PTR [rcx+448], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+464] + mov r11, QWORD PTR [rdx+464] + pext r12, r12, r9 + mov QWORD PTR [rcx+456], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+472] + mov r12, QWORD PTR [rdx+472] + pext r10, r10, r9 + mov QWORD PTR [rcx+464], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+480] + mov r10, QWORD PTR [rdx+480] + pext r11, r11, r9 + mov QWORD PTR [rcx+472], r12 + sbb r10, r11 + mov r12, QWORD PTR [r8+488] + mov r11, QWORD PTR [rdx+488] + pext r12, r12, r9 + mov QWORD PTR [rcx+480], r10 + sbb r11, r12 + mov r10, QWORD PTR [r8+496] + mov r12, QWORD PTR [rdx+496] + pext r10, r10, r9 + mov QWORD PTR [rcx+488], r11 + sbb r12, r10 + mov r11, QWORD PTR [r8+504] + mov r10, QWORD PTR [rdx+504] + pext r11, r11, r9 + mov QWORD PTR [rcx+496], r12 + sbb r10, r11 + mov QWORD PTR [rcx+504], r10 + sbb rax, rax + pop r12 + ret +sp_4096_cond_sub_avx2_64 ENDP +_TEXT ENDS +ENDIF +; /* 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. +; */ +_TEXT SEGMENT READONLY PARA +sp_4096_cmp_64 PROC + push r12 + xor r9, r9 + mov r8, -1 + mov rax, -1 + mov r10, 1 + mov r11, QWORD PTR [rcx+504] + mov r12, QWORD PTR [rdx+504] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+496] + mov r12, QWORD PTR [rdx+496] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+488] + mov r12, QWORD PTR [rdx+488] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+480] + mov r12, QWORD PTR [rdx+480] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+472] + mov r12, QWORD PTR [rdx+472] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+464] + mov r12, QWORD PTR [rdx+464] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+456] + mov r12, QWORD PTR [rdx+456] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+448] + mov r12, QWORD PTR [rdx+448] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+440] + mov r12, QWORD PTR [rdx+440] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+432] + mov r12, QWORD PTR [rdx+432] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+424] + mov r12, QWORD PTR [rdx+424] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+416] + mov r12, QWORD PTR [rdx+416] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+408] + mov r12, QWORD PTR [rdx+408] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+400] + mov r12, QWORD PTR [rdx+400] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+392] + mov r12, QWORD PTR [rdx+392] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+384] + mov r12, QWORD PTR [rdx+384] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+376] + mov r12, QWORD PTR [rdx+376] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+368] + mov r12, QWORD PTR [rdx+368] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+360] + mov r12, QWORD PTR [rdx+360] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+352] + mov r12, QWORD PTR [rdx+352] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+344] + mov r12, QWORD PTR [rdx+344] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+336] + mov r12, QWORD PTR [rdx+336] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+328] + mov r12, QWORD PTR [rdx+328] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+320] + mov r12, QWORD PTR [rdx+320] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+312] + mov r12, QWORD PTR [rdx+312] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+304] + mov r12, QWORD PTR [rdx+304] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+296] + mov r12, QWORD PTR [rdx+296] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+288] + mov r12, QWORD PTR [rdx+288] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+280] + mov r12, QWORD PTR [rdx+280] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+272] + mov r12, QWORD PTR [rdx+272] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+264] + mov r12, QWORD PTR [rdx+264] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+256] + mov r12, QWORD PTR [rdx+256] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+248] + mov r12, QWORD PTR [rdx+248] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+240] + mov r12, QWORD PTR [rdx+240] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+232] + mov r12, QWORD PTR [rdx+232] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+224] + mov r12, QWORD PTR [rdx+224] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+216] + mov r12, QWORD PTR [rdx+216] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+208] + mov r12, QWORD PTR [rdx+208] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+200] + mov r12, QWORD PTR [rdx+200] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+192] + mov r12, QWORD PTR [rdx+192] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+184] + mov r12, QWORD PTR [rdx+184] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+176] + mov r12, QWORD PTR [rdx+176] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+168] + mov r12, QWORD PTR [rdx+168] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+160] + mov r12, QWORD PTR [rdx+160] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+152] + mov r12, QWORD PTR [rdx+152] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+144] + mov r12, QWORD PTR [rdx+144] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+136] + mov r12, QWORD PTR [rdx+136] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+128] + mov r12, QWORD PTR [rdx+128] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+120] + mov r12, QWORD PTR [rdx+120] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+112] + mov r12, QWORD PTR [rdx+112] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+104] + mov r12, QWORD PTR [rdx+104] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+96] + mov r12, QWORD PTR [rdx+96] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+88] + mov r12, QWORD PTR [rdx+88] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+80] + mov r12, QWORD PTR [rdx+80] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+72] + mov r12, QWORD PTR [rdx+72] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+64] + mov r12, QWORD PTR [rdx+64] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+56] + mov r12, QWORD PTR [rdx+56] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+48] + mov r12, QWORD PTR [rdx+48] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+40] + mov r12, QWORD PTR [rdx+40] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+32] + mov r12, QWORD PTR [rdx+32] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+24] + mov r12, QWORD PTR [rdx+24] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+16] + mov r12, QWORD PTR [rdx+16] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx+8] + mov r12, QWORD PTR [rdx+8] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + mov r11, QWORD PTR [rcx] + mov r12, QWORD PTR [rdx] + and r11, r8 + and r12, r8 + sub r11, r12 + cmova rax, r10 + cmovc rax, r8 + cmovnz r8, r9 + xor rax, r8 + pop r12 ret -sp_4096_get_from_table_64 ENDP +sp_4096_cmp_64 ENDP _TEXT ENDS -ENDIF IFDEF HAVE_INTEL_AVX2 ; /* Reduce the number back to 4096 bits using Montgomery reduction. ; * diff --git a/wolfcrypt/src/wolfmath.c b/wolfcrypt/src/wolfmath.c index 06fb8ed017d..f073be133e3 100644 --- a/wolfcrypt/src/wolfmath.c +++ b/wolfcrypt/src/wolfmath.c @@ -43,12 +43,13 @@ #if !defined(NO_BIG_INT) || defined(WOLFSSL_SP_MATH) -#if (!defined(WC_NO_CACHE_RESISTANT) && \ - ((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \ - (defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \ - ((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \ - !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \ - defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM)) +#if !defined(WC_NO_GLOBAL_OBJECT_POINTERS) && \ + ((!defined(WC_NO_CACHE_RESISTANT) && \ + ((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \ + (defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \ + ((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \ + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \ + defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM))) /* all off / all on pointer addresses for constant calculations */ /* ecc.c uses same table */ diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 329c88cffdf..f3fc88c8a16 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -60460,38 +60460,25 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t eccsi_test(void) wc_test_ret_t ret = 0; WC_RNG rng; int rng_inited = 0; - EccsiKey* priv = NULL; - EccsiKey* pub = NULL; - mp_int* ssk = NULL; + WC_DECLARE_VAR(priv, EccsiKey, 1, HEAP_HINT); + WC_DECLARE_VAR(pub, EccsiKey, 1, HEAP_HINT); + WC_DECLARE_VAR(ssk, mp_int, 1, HEAP_HINT); ecc_point* pvt = NULL; WOLFSSL_ENTER("eccsi_test"); - priv = (EccsiKey*)XMALLOC(sizeof(EccsiKey), HEAP_HINT, - DYNAMIC_TYPE_TMP_BUFFER); - if (priv == NULL) - ret = WC_TEST_RET_ENC_NC; - else - XMEMSET(priv, 0, sizeof(*priv)); - + WC_ALLOC_VAR_EX(priv, EccsiKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E)); if (ret == 0) { - pub = (EccsiKey*)XMALLOC(sizeof(EccsiKey), HEAP_HINT, - DYNAMIC_TYPE_TMP_BUFFER); - if (pub == NULL) - ret = WC_TEST_RET_ENC_NC; - else - XMEMSET(pub, 0, sizeof(*pub)); + XMEMSET(priv, 0, sizeof(*priv)); + WC_ALLOC_VAR_EX(pub, EccsiKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E)); } - if (ret == 0) { - ssk = (mp_int*)XMALLOC(sizeof(mp_int), HEAP_HINT, - DYNAMIC_TYPE_TMP_BUFFER); - if (ssk == NULL) - ret = WC_TEST_RET_ENC_NC; - else - XMEMSET(ssk, 0, sizeof(*ssk)); + XMEMSET(pub, 0, sizeof(*pub)); + WC_ALLOC_VAR_EX(ssk, mp_int, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E)); } if (ret == 0) { + XMEMSET(ssk, 0, sizeof(*ssk)); + #ifndef HAVE_FIPS ret = wc_InitRng_ex(&rng, HEAP_HINT, devId); #else @@ -60547,18 +60534,12 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t eccsi_test(void) wc_ecc_del_point(pvt); if (rng_inited) wc_FreeRng(&rng); - if (ssk != NULL) { - mp_free(ssk); - XFREE(ssk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } - if (pub != NULL) { - wc_FreeEccsiKey(pub); - XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } - if (priv != NULL) { - wc_FreeEccsiKey(priv); - XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } + mp_free(ssk); + WC_FREE_VAR_EX(ssk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + wc_FreeEccsiKey(pub); + WC_FREE_VAR_EX(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + wc_FreeEccsiKey(priv); + WC_FREE_VAR_EX(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -61704,38 +61685,25 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sakke_test(void) wc_test_ret_t ret = 0; WC_RNG rng; int rng_inited = 0; - SakkeKey* priv = NULL; - SakkeKey* pub = NULL; - SakkeKey* key = NULL; + WC_DECLARE_VAR(priv, SakkeKey, 1, HEAP_HINT); + WC_DECLARE_VAR(pub, SakkeKey, 1, HEAP_HINT); + WC_DECLARE_VAR(key, SakkeKey, 1, HEAP_HINT); ecc_point* rsk = NULL; WOLFSSL_ENTER("sakke_test"); - priv = (SakkeKey*)XMALLOC(sizeof(SakkeKey), HEAP_HINT, - DYNAMIC_TYPE_TMP_BUFFER); - if (priv == NULL) - ret = WC_TEST_RET_ENC_NC; - else - XMEMSET(priv, 0, sizeof(*priv)); - + WC_ALLOC_VAR_EX(priv, SakkeKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E)); if (ret == 0) { - pub = (SakkeKey*)XMALLOC(sizeof(SakkeKey), HEAP_HINT, - DYNAMIC_TYPE_TMP_BUFFER); - if (pub == NULL) - ret = WC_TEST_RET_ENC_NC; - else - XMEMSET(pub, 0, sizeof(*pub)); + XMEMSET(priv, 0, sizeof(*priv)); + WC_ALLOC_VAR_EX(pub, SakkeKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E)); } - if (ret == 0) { - key = (SakkeKey*)XMALLOC(sizeof(SakkeKey), HEAP_HINT, - DYNAMIC_TYPE_TMP_BUFFER); - if (key == NULL) - ret = WC_TEST_RET_ENC_NC; - else - XMEMSET(key, 0, sizeof(*key)); + XMEMSET(pub, 0, sizeof(*pub)); + WC_ALLOC_VAR_EX(key, SakkeKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E)); } if (ret == 0) { + XMEMSET(key, 0, sizeof(*key)); + #ifndef HAVE_FIPS ret = wc_InitRng_ex(&rng, HEAP_HINT, devId); #else @@ -61791,15 +61759,12 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sakke_test(void) } if (rng_inited) wc_FreeRng(&rng); - XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (pub != NULL) { - wc_FreeSakkeKey(pub); - XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } - if (priv != NULL) { - wc_FreeSakkeKey(priv); - XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } + + WC_FREE_VAR_EX(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + wc_FreeSakkeKey(pub); + WC_FREE_VAR_EX(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + wc_FreeSakkeKey(priv); + WC_FREE_VAR_EX(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/wolfssl/wolfcrypt/error-crypt.h b/wolfssl/wolfcrypt/error-crypt.h index 8d49ffc18ef..736954a0a76 100644 --- a/wolfssl/wolfcrypt/error-crypt.h +++ b/wolfssl/wolfcrypt/error-crypt.h @@ -356,10 +356,13 @@ WOLFSSL_API void wc_ErrorString(int err, char* buff); WOLFSSL_ABI WOLFSSL_API const char* wc_GetErrorString(int error); #endif +#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES + WOLFSSL_API extern int wc_backtrace_render(void); +#endif + #if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && \ (defined(BUILDING_WOLFSSL) || \ defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES_ALWAYS)) - WOLFSSL_API extern int wc_backtrace_render(void); #define WC_NO_ERR_TRACE(label) (CONST_NUM_ERR_ ## label) #ifndef WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES diff --git a/wolfssl/wolfcrypt/logging.h b/wolfssl/wolfcrypt/logging.h index 414b41c2337..efed186fdb7 100644 --- a/wolfssl/wolfcrypt/logging.h +++ b/wolfssl/wolfcrypt/logging.h @@ -579,12 +579,13 @@ WOLFSSL_API void wolfSSL_SetLoggingPrefix(const char* prefix); #error "Failed: Cannot WOLFSSL_DEBUG_CERTS with WOLFSSL_DEBUG_ERRORS_ONLY" #endif +#if defined(WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES) && defined(XFILE) + WOLFSSL_API XFILE wc_backtrace_set_fp(XFILE new_fp); +#endif + #ifdef WOLFSSL_DEBUG_TRACE_ERROR_CODES WOLFSSL_API int wc_debug_trace_error_codes_enabled(void); WOLFSSL_API int wc_debug_trace_error_codes_set(int state); - #ifdef XFILE - WOLFSSL_API XFILE wc_backtrace_set_fp(XFILE new_fp); - #endif #endif #ifdef __cplusplus diff --git a/wolfssl/wolfcrypt/memory.h b/wolfssl/wolfcrypt/memory.h index 06518690608..cdc6a040452 100644 --- a/wolfssl/wolfcrypt/memory.h +++ b/wolfssl/wolfcrypt/memory.h @@ -370,6 +370,8 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, #define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE abort(); #elif defined(DEBUG_VECTOR_REGISTERS_EXIT_ON_FAIL) #define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE exit(1); + #elif defined(DEBUG_VECTOR_REGISTERS_BACKTRACE_ON_FAIL) + #define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE wc_backtrace_render(); #elif !defined(DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE) #define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE #endif @@ -381,8 +383,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, ++wc_svr_count; \ if (wc_svr_count > 5) { \ fprintf(stderr, \ - ("%s @ L%d : incr : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("%s() %s @ L %d : incr : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -403,8 +406,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, #define WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(x) do { \ if (((x) != 0) && (wc_svr_count > 0)) { \ fprintf(stderr, \ - ("%s @ L%d : incr : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("%s() %s @ L %d : incr : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -422,8 +426,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, ++wc_svr_count; \ if (wc_svr_count > 5) { \ fprintf(stderr, \ - ("%s @ L%d : incr : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("%s() %s @ L %d : incr : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -445,8 +450,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, if (wc_debug_vector_registers_retval != 0) { \ if (wc_svr_count > 0) { \ fprintf(stderr, \ - ("%s @ L%d : incr : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("%s() %s @ L %d : incr : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -459,8 +465,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, ++wc_svr_count; \ if (wc_svr_count > 5) { \ fprintf(stderr, \ - ("%s @ L%d : incr : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("%s() %s @ L %d : incr : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -480,8 +487,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, #define ASSERT_SAVED_VECTOR_REGISTERS() do { \ if (wc_svr_count <= 0) { \ fprintf(stderr, \ - ("ASSERT_SAVED_VECTOR_REGISTERS : %s @ L%d : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("ASSERT_SAVED_VECTOR_REGISTERS : %s() %s @ L %d : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -493,8 +501,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, #define ASSERT_RESTORED_VECTOR_REGISTERS(fail_clause) do { \ if (wc_svr_count != 0) { \ fprintf(stderr, \ - ("ASSERT_RESTORED_VECTOR_REGISTERS : %s @ L%d" \ - " : wc_svr_count %d (last op %s L%d)\n"), \ + ("ASSERT_RESTORED_VECTOR_REGISTERS : %s() %s @ L %d" \ + " : wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ @@ -508,8 +517,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, --wc_svr_count; \ if ((wc_svr_count > 4) || (wc_svr_count < 0)) { \ fprintf(stderr, \ - ("%s @ L%d : decr : " \ - "wc_svr_count %d (last op %s L%d)\n"), \ + ("%s() %s @ L %d : decr : " \ + "wc_svr_count %d (last op %s L %d)\n"), \ + __FUNCTION__, \ __FILE__, \ __LINE__, \ wc_svr_count, \ diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index c3ced88da7f..0fb49e93510 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -3963,6 +3963,9 @@ extern void uITRON4_free(void *p) ; #ifndef WC_NO_INTERNAL_FUNCTION_POINTERS #define WC_NO_INTERNAL_FUNCTION_POINTERS #endif + #ifndef WC_NO_GLOBAL_OBJECT_POINTERS + #define WC_NO_GLOBAL_OBJECT_POINTERS + #endif #ifndef WOLFSSL_ECC_CURVE_STATIC #define WOLFSSL_ECC_CURVE_STATIC #endif diff --git a/wolfssl/wolfcrypt/wolfmath.h b/wolfssl/wolfcrypt/wolfmath.h index f6563299790..1353f40d17a 100644 --- a/wolfssl/wolfcrypt/wolfmath.h +++ b/wolfssl/wolfcrypt/wolfmath.h @@ -74,12 +74,13 @@ This library provides big integer math functions. #endif /* timing resistance array */ -#if (!defined(WC_NO_CACHE_RESISTANT) && \ - ((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \ - (defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \ - ((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \ - !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \ - defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM)) +#if !defined(WC_NO_GLOBAL_OBJECT_POINTERS) && \ + ((!defined(WC_NO_CACHE_RESISTANT) && \ + ((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \ + (defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \ + ((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \ + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \ + defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM))) extern const wc_ptr_t wc_off_on_addr[2]; #endif