diff --git a/contrib/src/gnutls/gnutls-3.6.7-win32-compat.patch b/contrib/src/gnutls/gnutls-3.6.7-win32-compat.patch new file mode 100644 index 0000000000000000000000000000000000000000..e53a5c70c9500930285b52f766d3197c524dc35b --- /dev/null +++ b/contrib/src/gnutls/gnutls-3.6.7-win32-compat.patch @@ -0,0 +1,420 @@ +From e30e6957e0f7fa707e15fbcd8077023ec6c793d8 Mon Sep 17 00:00:00 2001 +From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> +Date: Fri, 21 Jun 2019 15:53:30 -0400 +Subject: [PATCH] gnutls-3.6.7-win32-compat + +--- + gl/c-strcase.h | 10 +- + gl/read-file.c | 379 +++++++++++++++++++------------------- + lib/nettle/gost/nettle-internal.h | 9 +- + lib/nettle/gost/streebog.c | 4 +- + lib/nettle/pk.c | 10 +- + lib/priority.c | 8 - + lib/system/fastopen.c | 9 +- + lib/x509/common.c | 16 +- + lib/x509/hostname-verify.c | 12 +- + lib/x509/ip.c | 5 +- + 10 files changed, 230 insertions(+), 232 deletions(-) + +diff --git a/gl/c-strcase.h b/gl/c-strcase.h +index b67c9b5..64d794f 100644 +--- a/gl/c-strcase.h ++++ b/gl/c-strcase.h +@@ -20,7 +20,6 @@ + + #include <stddef.h> + +- + /* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII +@@ -30,12 +29,11 @@ + string; the other one can also contain non-ASCII characters (but then + the comparison result will be nonzero). */ + +- + #ifdef __cplusplus + extern "C" { + #endif + +- ++#ifndef _MSC_VER + /* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. */ +@@ -46,11 +44,13 @@ extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; + lexicographically less than, equal to or greater than S2. */ + extern int c_strncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE; +- ++#else ++#define c_strcasecmp strcasecmp ++#define c_strncasecmp strncasecmp ++#endif + + #ifdef __cplusplus + } + #endif + +- + #endif /* C_STRCASE_H */ +diff --git a/lib/nettle/gost/nettle-internal.h b/lib/nettle/gost/nettle-internal.h +index 2e06ebb..f40430e 100644 +--- a/lib/nettle/gost/nettle-internal.h ++++ b/lib/nettle/gost/nettle-internal.h +@@ -42,11 +42,16 @@ + + #if HAVE_ALLOCA + # define TMP_DECL(name, type, max) type *name +-# define TMP_ALLOC(name, size) (name = alloca(sizeof (*name) * (size))) ++# ifndef _MSC_VER ++# define TMP_ALLOC(name, size) (name = alloca(sizeof (*name) * (size))) ++# else ++# include <malloc.h> ++# define TMP_ALLOC(name, size) (name = _alloca(sizeof (*name) * (size))) ++# endif + #else /* !HAVE_ALLOCA */ + # define TMP_DECL(name, type, max) type name[max] + # define TMP_ALLOC(name, size) \ + do { if ((size) > (sizeof(name) / sizeof(name[0]))) abort(); } while (0) +-#endif ++#endif + + #endif /* NETTLE_INTERNAL_H_INCLUDED */ +diff --git a/lib/nettle/gost/streebog.c b/lib/nettle/gost/streebog.c +index 12c5c08..bc5c1ee 100644 +--- a/lib/nettle/gost/streebog.c ++++ b/lib/nettle/gost/streebog.c +@@ -45,7 +45,6 @@ + #include <nettle/macros.h> + #include "nettle-write.h" + +- + /* Pre-computed results of multiplication of bytes on A and reordered with + Pi[]. */ + static const uint64_t streebog_table[8][256] = +@@ -1195,7 +1194,6 @@ static inline void g (uint64_t *h, uint64_t *m, uint64_t *N) + h[7] ^= T[7] ^ K[7] ^ m[7]; + } + +- + static void + streebog512_compress (struct streebog512_ctx *ctx, const uint8_t *input, size_t count) + { +@@ -1230,7 +1228,7 @@ streebog512_compress (struct streebog512_ctx *ctx, const uint8_t *input, size_t + static void + streebog_final (struct streebog512_ctx *ctx) + { +- uint64_t Z[8] = {}; ++ uint64_t Z[8] = {0}; + unsigned int i; + + /* PAD. It does not count towards message length */ +diff --git a/lib/nettle/pk.c b/lib/nettle/pk.c +index 9aa5166..ee90af6 100644 +--- a/lib/nettle/pk.c ++++ b/lib/nettle/pk.c +@@ -99,7 +99,7 @@ ecc_point_zclear (struct ecc_point *p) + zeroize_key(p->p, ecc_size_a(p->ecc)*sizeof(mp_limb_t)); + ecc_point_clear(p); + } +- ++ + static void + _dsa_params_get(const gnutls_pk_params_st * pk_params, + struct dsa_params *pub) +@@ -276,7 +276,6 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, + goto dh_cleanup; + } + +- + ret = _gnutls_mpi_powm(k, f, x, prime); + if (ret < 0) { + gnutls_assert(); +@@ -562,7 +561,7 @@ _wrap_nettle_pk_decrypt2(gnutls_pk_algorithm_t algo, + return gnutls_assert_val (GNUTLS_E_MPI_SCAN_FAILED); + } + +- ret = rsa_sec_decrypt(&pub, &priv, NULL, rnd_nonce_func, ++ ret = nettle_rsa_sec_decrypt(&pub, &priv, NULL, rnd_nonce_func, + plaintext_size, plaintext, TOMPZ(c)); + /* after this point, any conditional on failure that cause differences + * in execution may create a timing or cache access pattern side +@@ -1464,7 +1463,6 @@ int _gnutls_ecdh_generate_key(gnutls_ecc_curve_t curve, + gnutls_datum_t *x, gnutls_datum_t *y, + gnutls_datum_t *k); + +- + int _gnutls_dh_generate_key(gnutls_dh_params_t dh_params, + gnutls_datum_t *priv_key, gnutls_datum_t *pub_key) + { +@@ -1669,7 +1667,6 @@ int _gnutls_ecdh_compute_key(gnutls_ecc_curve_t curve, + goto cleanup; + } + +- + priv.params_nr = 3; + priv.algo = GNUTLS_PK_ECDSA; + priv.curve = curve; +@@ -2170,7 +2167,6 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, + goto ecc_fail; + } + +- + ret = _gnutls_mpi_init_multi(¶ms->params[GOST_X], ¶ms->params[GOST_Y], + ¶ms->params[GOST_K], NULL); + if (ret < 0) { +@@ -2258,7 +2254,6 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, + return ret; + } + +- + static int + wrap_nettle_pk_verify_priv_params(gnutls_pk_algorithm_t algo, + const gnutls_pk_params_st * params) +@@ -2703,7 +2698,6 @@ fail: + return ret; + } + +- + static int + wrap_nettle_pk_fixup(gnutls_pk_algorithm_t algo, + gnutls_direction_t direction, +diff --git a/lib/priority.c b/lib/priority.c +index 900bbf7..5f158f3 100644 +--- a/lib/priority.c ++++ b/lib/priority.c +@@ -337,7 +337,6 @@ static const int cipher_priority_normal_fips[] = { + 0 + }; + +- + static const int _cipher_priority_suiteb128[] = { + GNUTLS_CIPHER_AES_256_GCM, + GNUTLS_CIPHER_AES_128_GCM, +@@ -351,7 +350,6 @@ static const int _cipher_priority_suiteb192[] = { + }; + static const int* cipher_priority_suiteb192 = _cipher_priority_suiteb192; + +- + static const int _cipher_priority_secure128[] = { + GNUTLS_CIPHER_AES_256_GCM, + GNUTLS_CIPHER_CHACHA20_POLY1305, +@@ -365,7 +363,6 @@ static const int _cipher_priority_secure128[] = { + }; + static const int *cipher_priority_secure128 = _cipher_priority_secure128; + +- + static const int _cipher_priority_secure192[] = { + GNUTLS_CIPHER_AES_256_GCM, + GNUTLS_CIPHER_CHACHA20_POLY1305, +@@ -566,7 +563,6 @@ static void prio_add(priority_st * priority_list, unsigned int algo) + return; + } + +- + /** + * gnutls_priority_set: + * @session: is a #gnutls_session_t type. +@@ -630,7 +626,6 @@ gnutls_priority_set(gnutls_session_t session, gnutls_priority_t priority) + return 0; + } + +- + #define LEVEL_NONE "NONE" + #define LEVEL_NORMAL "NORMAL" + #define LEVEL_PFS "PFS" +@@ -993,7 +988,6 @@ static char *system_priority_buf = NULL; + static size_t system_priority_buf_size = 0; + static time_t system_priority_last_mod = 0; + +- + static void _gnutls_update_system_priorities(void) + { + #ifdef HAVE_FMEMOPEN +@@ -1293,7 +1287,6 @@ static int set_ciphersuite_list(gnutls_priority_t priority_cache) + if ((!tlsmax || !tlsmin) && (!dtlsmax || !dtlsmin)) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); + +- + priority_cache->have_psk = have_psk; + + /* if we are have TLS1.3+ do not enable any key exchange algorithms, +@@ -1923,7 +1916,6 @@ void gnutls_priority_deinit(gnutls_priority_t priority_cache) + } + } + +- + /** + * gnutls_priority_set_direct: + * @session: is a #gnutls_session_t type. +diff --git a/lib/system/fastopen.c b/lib/system/fastopen.c +index 8d8409e..0118d77 100644 +--- a/lib/system/fastopen.c ++++ b/lib/system/fastopen.c +@@ -26,7 +26,11 @@ + #include "errors.h" + + #include <sys/socket.h> +-#include <netinet/in.h> /* IPPROTO_TCP */ ++#ifndef _WIN32 ++# include <netinet/in.h> /* IPPROTO_TCP */ ++#else ++# include <winsock.h> /* IPPROTO_TCP */ ++#endif + #include <errno.h> + #include <sys/stat.h> + #include <sys/types.h> +@@ -191,7 +195,7 @@ tfo_read(gnutls_transport_ptr_t ptr, void *data, size_t data_size) + * Note: This function overrides all the transport callback functions. + * If this is undesirable, TCP Fast Open must be implemented on the user + * callback functions without calling this function. When using +- * this function, transport callbacks must not be set, and ++ * this function, transport callbacks must not be set, and + * gnutls_transport_set_ptr() or gnutls_transport_set_int() + * must not be called. + * +@@ -238,4 +242,3 @@ gnutls_transport_set_fastopen(gnutls_session_t session, + gnutls_transport_set_vec_push_function(session, tfo_writev); + #endif + } +- +diff --git a/lib/x509/common.c b/lib/x509/common.c +index 4669d37..39986ea 100644 +--- a/lib/x509/common.c ++++ b/lib/x509/common.c +@@ -274,7 +274,7 @@ const char *gnutls_x509_dn_oid_name(const char *oid, unsigned int flags) + unsigned len = strlen(oid); + + do { +- if ((_oid2str[i].oid_size == len) && ++ if ((_oid2str[i].oid_size == len) && + strcmp(_oid2str[i].oid, oid) == 0 && _oid2str[i].ldap_desc != NULL) + return _oid2str[i].ldap_desc; + i++; +@@ -428,7 +428,6 @@ decode_complex_string(const struct oid_to_string *oentry, void *value, + return 0; + } + +- + /* This function will convert an attribute value, specified by the OID, + * to a string. The result will be a null terminated string. + * +@@ -684,7 +683,6 @@ _gnutls_x509_decode_string(unsigned int etype, + return ret; + } + +- + /* Reads a value from an ASN1 tree, and puts the output + * in an allocated variable in the given datum. + * +@@ -972,7 +970,7 @@ _gnutls_x509_der_encode_and_copy(ASN1_TYPE src, const char *src_name, + return 0; + } + +-/* Writes the value of the datum in the given ASN1_TYPE. ++/* Writes the value of the datum in the given ASN1_TYPE. + */ + int + _gnutls_x509_write_value(ASN1_TYPE c, const char *root, +@@ -991,7 +989,7 @@ _gnutls_x509_write_value(ASN1_TYPE c, const char *root, + return 0; + } + +-/* Writes the value of the datum in the given ASN1_TYPE as a string. ++/* Writes the value of the datum in the given ASN1_TYPE as a string. + */ + int + _gnutls_x509_write_string(ASN1_TYPE c, const char *root, +@@ -1034,8 +1032,6 @@ _asnstr_append_name(char *name, size_t name_size, const char *part1, + part2 + 1 /* remove initial dot */ ); + } + +- +- + /* Encodes and copies the private key parameters into a + * subjectPublicKeyInfo structure. + * +@@ -1182,7 +1178,7 @@ _gnutls_x509_get_pk_algorithm(ASN1_TYPE src, const char *src_name, + return algo; + } + +- /* Now read the parameters' bits ++ /* Now read the parameters' bits + */ + if (lcurve != GNUTLS_ECC_CURVE_INVALID) { /* curve present */ + bits[0] = gnutls_ecc_curve_get_size(lcurve)*8; +@@ -1307,7 +1303,6 @@ _gnutls_x509_get_signature_algorithm(ASN1_TYPE src, const char *src_name) + return result; + } + +- + /* Reads the DER signature from the certificate and allocates space and + * returns them into signed_data. + */ +@@ -1321,7 +1316,7 @@ _gnutls_x509_get_signature(ASN1_TYPE src, const char *src_name, + signature->data = NULL; + signature->size = 0; + +- /* Read the signature ++ /* Read the signature + */ + len = 0; + result = asn1_read_value(src, src_name, NULL, &len); +@@ -1445,7 +1440,6 @@ static int write_complex_string(ASN1_TYPE asn_struct, const char *where, + return result; + } + +- + /* This will encode and write the AttributeTypeAndValue field. + * 'multi' must be (0) if writing an AttributeTypeAndValue, and 1 if Attribute. + * In all cases only one value is written. +diff --git a/lib/x509/hostname-verify.c b/lib/x509/hostname-verify.c +index 967d9b8..d3b6968 100644 +--- a/lib/x509/hostname-verify.c ++++ b/lib/x509/hostname-verify.c +@@ -26,8 +26,14 @@ + #include <common.h> + #include "errors.h" + #include <system.h> +-#include <netinet/in.h> +-#include <arpa/inet.h> ++#ifndef _WIN32 ++# include <netinet/in.h> /* IPPROTO_TCP */ ++#else ++# include <winsock.h> /* IPPROTO_TCP */ ++#endif ++#ifdef HAVE_INET_NTOP ++# include <arpa/inet.h> ++#endif + + /** + * gnutls_x509_crt_check_hostname: +@@ -100,7 +106,7 @@ static int has_embedded_null(const char *str, unsigned size) + * @ip_size: the number of bytes in ip (4 or 16) + * @flags: should be zero + * +- * This function will check if the IP allowed IP addresses in ++ * This function will check if the IP allowed IP addresses in + * the certificate's subject alternative name match the provided + * IP address. + * +diff --git a/lib/x509/ip.c b/lib/x509/ip.c +index c4cb008..b359d27 100644 +--- a/lib/x509/ip.c ++++ b/lib/x509/ip.c +@@ -24,7 +24,10 @@ + #include "gnutls_int.h" + #include "ip.h" + #include <gnutls/x509.h> +-#include <arpa/inet.h> ++ ++#ifdef HAVE_INET_NTOP ++# include <arpa/inet.h> ++#endif + + /*- + * _gnutls_mask_to_prefix: +-- +2.7.4 + diff --git a/contrib/src/gnutls/gnutls-3.6.7-win32-vs-support.patch b/contrib/src/gnutls/gnutls-3.6.7-win32-vs-support.patch new file mode 100644 index 0000000000000000000000000000000000000000..537ffbd20483c2f0defaec93474b9544034f8c5f --- /dev/null +++ b/contrib/src/gnutls/gnutls-3.6.7-win32-vs-support.patch @@ -0,0 +1,56920 @@ +From 14ea482521f9fcba7ade4837a67eba45ab08d3fb Mon Sep 17 00:00:00 2001 +From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> +Date: Fri, 21 Jun 2019 16:10:36 -0400 +Subject: [PATCH] gnutls-3.6.7-win32-vs-support + +--- + SMP/.gitattributes | 4 + + SMP/.gitignore | 28 + + SMP/appveyor.yml | 142 + + SMP/byteswap.h | 36 + + SMP/config.h | 2273 ++++++ + SMP/dirent.h | 757 ++ + SMP/gnutls/gnutls.h | 3329 ++++++++ + SMP/lib/accelerated/x86/coff/aes-ssse3-x86.asm | 643 ++ + SMP/lib/accelerated/x86/coff/aes-ssse3-x86_64.asm | 1137 +++ + SMP/lib/accelerated/x86/coff/aesni-gcm-x86_64.asm | 986 +++ + SMP/lib/accelerated/x86/coff/aesni-x86.asm | 3204 ++++++++ + SMP/lib/accelerated/x86/coff/aesni-x86_64.asm | 4994 ++++++++++++ + SMP/lib/accelerated/x86/coff/cpuid-x86.asm | 54 + + SMP/lib/accelerated/x86/coff/cpuid-x86_64.asm | 53 + + SMP/lib/accelerated/x86/coff/e_padlock-x86.asm | 1015 +++ + SMP/lib/accelerated/x86/coff/e_padlock-x86_64.asm | 1171 +++ + SMP/lib/accelerated/x86/coff/ghash-x86.asm | 692 ++ + SMP/lib/accelerated/x86/coff/ghash-x86_64.asm | 2018 +++++ + SMP/lib/accelerated/x86/coff/sha1-ssse3-x86.asm | 1386 ++++ + SMP/lib/accelerated/x86/coff/sha1-ssse3-x86_64.asm | 5714 ++++++++++++++ + SMP/lib/accelerated/x86/coff/sha256-avx-x86_64.asm | 8209 ++++++++++++++++++++ + SMP/lib/accelerated/x86/coff/sha256-ssse3-x86.asm | 3356 ++++++++ + .../accelerated/x86/coff/sha256-ssse3-x86_64.asm | 5634 ++++++++++++++ + SMP/lib/priority_options.h | 179 + + SMP/lib/unistring/unictype.h | 1060 +++ + SMP/lib/unistring/unictype/categ_byname.h | 622 ++ + SMP/lib/unistring/uninorm.h | 258 + + SMP/lib/unistring/unistr.h | 756 ++ + SMP/lib/unistring/unitypes.h | 56 + + SMP/lib/unused-parameter.h | 36 + + SMP/libgnutls.def | 1056 +++ + SMP/libgnutls.sln | 57 + + SMP/libgnutls.vcxproj | 2811 +++++++ + SMP/libgnutls.vcxproj.filters | 1804 +++++ + SMP/libgnutls_deps.sln | 195 + + SMP/project_get_dependencies.bat | 161 + + SMP/readme.txt | 16 + + SMP/stdio.h | 147 + + SMP/string.h | 130 + + SMP/sys/socket.h | 35 + + SMP/sys/stat.h | 103 + + SMP/sys/time.h | 72 + + SMP/test.bat | 6 + + SMP/time.h | 47 + + SMP/unistd.h | 78 + + SMP/version.h | 5 + + 46 files changed, 56525 insertions(+) + create mode 100644 SMP/.gitattributes + create mode 100644 SMP/.gitignore + create mode 100644 SMP/appveyor.yml + create mode 100644 SMP/byteswap.h + create mode 100644 SMP/config.h + create mode 100644 SMP/dirent.h + create mode 100644 SMP/gnutls/gnutls.h + create mode 100644 SMP/lib/accelerated/x86/coff/aes-ssse3-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/aes-ssse3-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/aesni-gcm-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/aesni-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/aesni-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/cpuid-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/cpuid-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/e_padlock-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/e_padlock-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/ghash-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/ghash-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/sha1-ssse3-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/sha1-ssse3-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/sha256-avx-x86_64.asm + create mode 100644 SMP/lib/accelerated/x86/coff/sha256-ssse3-x86.asm + create mode 100644 SMP/lib/accelerated/x86/coff/sha256-ssse3-x86_64.asm + create mode 100644 SMP/lib/priority_options.h + create mode 100644 SMP/lib/unistring/unictype.h + create mode 100644 SMP/lib/unistring/unictype/categ_byname.h + create mode 100644 SMP/lib/unistring/uninorm.h + create mode 100644 SMP/lib/unistring/unistr.h + create mode 100644 SMP/lib/unistring/unitypes.h + create mode 100644 SMP/lib/unused-parameter.h + create mode 100644 SMP/libgnutls.def + create mode 100644 SMP/libgnutls.sln + create mode 100644 SMP/libgnutls.vcxproj + create mode 100644 SMP/libgnutls.vcxproj.filters + create mode 100644 SMP/libgnutls_deps.sln + create mode 100644 SMP/project_get_dependencies.bat + create mode 100644 SMP/readme.txt + create mode 100644 SMP/stdio.h + create mode 100644 SMP/string.h + create mode 100644 SMP/sys/socket.h + create mode 100644 SMP/sys/stat.h + create mode 100644 SMP/sys/time.h + create mode 100644 SMP/test.bat + create mode 100644 SMP/time.h + create mode 100644 SMP/unistd.h + create mode 100644 SMP/version.h + +diff --git a/SMP/.gitattributes b/SMP/.gitattributes +new file mode 100644 +index 0000000..c25326f +--- /dev/null ++++ b/SMP/.gitattributes +@@ -0,0 +1,4 @@ ++*.sln text=auto ++*.vcxproj text=auto ++*.vcxproj.filters text=auto ++*.bat text=auto +\ No newline at end of file +diff --git a/SMP/.gitignore b/SMP/.gitignore +new file mode 100644 +index 0000000..46bcf6a +--- /dev/null ++++ b/SMP/.gitignore +@@ -0,0 +1,28 @@ ++*.obj ++*.lib ++*.log ++*.tlog ++*.pdb ++*.ildb ++*.pgd ++*.pch ++*.manifest ++*.suo ++*.user ++*.sdf ++*.opensdf ++[Oo]bj/ ++*.exe ++!*.h ++!*.c ++!*.asm ++!*.def ++!*.rc ++*.sbr ++*.iobj ++*.ipdb ++.vs/ ++*.VC.db ++*.opendb ++*.ilk ++[Bb]in/ +\ No newline at end of file +diff --git a/SMP/appveyor.yml b/SMP/appveyor.yml +new file mode 100644 +index 0000000..b86a17c +--- /dev/null ++++ b/SMP/appveyor.yml +@@ -0,0 +1,142 @@ ++version: '{build}' ++ ++branches: ++ only: ++ - master ++skip_non_tags: true ++clone_depth: 10 ++ ++configuration: Release+ReleaseDLLStaticDeps ++ ++platform: x86+x64 ++ ++environment: ++ GITHUBTOKEN: ++ secure: aiTcAD/YitqgwuiBdC3ImXiUlHfIIDD7ayjCs3Y3aAO5vEm1gA7flCZpUZ60a5am ++ matrix: ++ - MSVC_VER: 12 ++ APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 ++ - MSVC_VER: 14 ++ APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 ++ - MSVC_VER: 15 ++ APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ++ ++install: ++# Install GitLink ++- cmd: nuget install gitlink -Version 2.4.0 ++- cmd: for /f "tokens=*" %%f in ('dir /s /b gitlink.exe') do copy /b %%f .\ ++ ++before_build: ++# Backup platform so it is not affected by vcvars ++- cmd: SET PLATFORMBACK=%PLATFORM% ++ ++# Setup msvc environment for required compiler version (specified by MSVC_VER) ++- ps: >- ++ if ($env:MSVC_VER -eq 15) { ++ $env:VCVARS="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" ++ } else { ++ $env:VSCOMNTOOLS=(Get-Content ("env:VS" + "$env:MSVC_VER" + "0COMNTOOLS")) ++ $env:VCVARS="%VSCOMNTOOLS%\..\..\VC\vcvarsall.bat" ++ } ++ ++- cmd: call "%VCVARS%" amd64 ++ ++# Detect latest available windows sdk version ++- ps: >- ++ if ($env:MSVC_VER -eq 12) { ++ $env:WindowsSDKVersion=8.1 ++ } else { ++ $env:WindowsSDKVersion=$env:WindowsSDKVersion.TrimEnd('\') ++ } ++ ++# Reset platform ++- cmd: SET PLATFORM=%PLATFORMBACK% ++ ++# Create build project to compile all configurations and platforms at once ++- ps: >- ++ $script = @' ++ ++ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="GitLink" ToolsVersion="APPVEYOR_MSVC_VER.0"> ++ <ItemGroup> ++ <ConfigurationList Condition="'@(ConfigurationList)' == '' and $(Configuration) != ''" Include="$(Configuration.Split('+'))" /> ++ <ConfigurationList Condition="'@(ConfigurationList)' == ''" Include="Release" /> ++ <PlatformList Condition="'@(PlatformList)' == '' and $(Platform) != ''" Include="$(Platform.Split('+'))" /> ++ <PlatformList Condition="'@(PlatformList)' == ''" Include="x64;x86" /> ++ </ItemGroup> ++ <Target Name="List" Outputs="%(PlatformList.Identity)"> ++ <PropertyGroup> ++ <CurrentPlatform>%(PlatformList.Identity)</CurrentPlatform> ++ </PropertyGroup> ++ <ItemGroup> ++ <ProjectToBuild Include="SMP/APPVEYOR_PROJECT_NAME.sln"> ++ <Properties>Configuration=%(ConfigurationList.Identity);Platform=$(CurrentPlatform);OutDir=$(MSBuildThisFileDirectory)build_out\;WindowsTargetPlatformVersion=SDK_VER</Properties> ++ </ProjectToBuild> ++ </ItemGroup> ++ </Target> ++ <Target Name="Build" DependsOnTargets="List"> ++ <MSBuild Projects="@(ProjectToBuild)" BuildInParallel="true" /> ++ </Target> ++ <Target Name="GitLink" DependsOnTargets="Build" Outputs="%(PlatformList.Identity)"> ++ <PropertyGroup> ++ <CurrentPlatform>%(PlatformList.Identity)</CurrentPlatform> ++ </PropertyGroup> ++ <Exec Command="GitLink . -f SMP/APPVEYOR_PROJECT_NAME.sln -c %(ConfigurationList.Identity) -p $(CurrentPlatform) -d $(MSBuildThisFileDirectory)build_out\lib\$(CurrentPlatform) -u https://github.com/APPVEYOR_REPO_NAME.git -s APPVEYOR_REPO_COMMIT -errorsaswarnings"/> ++ </Target> ++ </Project> ++ ++ '@ ++ ++ ++ $script = $script -replace "APPVEYOR_PROJECT_NAME", "$env:APPVEYOR_PROJECT_NAME" ++ ++ $script = $script -replace "APPVEYOR_REPO_NAME", "$env:APPVEYOR_REPO_NAME" ++ ++ $script = $script -replace "APPVEYOR_REPO_COMMIT", "$env:APPVEYOR_REPO_COMMIT" ++ ++ $script = $script -replace "APPVEYOR_MSVC_VER", "$env:MSVC_VER" ++ ++ $script = $script -replace "SDK_VER", "$env:WindowsSDKVersion" ++ ++ $script | Out-File build.vcxproj ++ ++# Set Targets path so that gitlink works correctly ++- ps: $env:MSBUILDDIR=((Get-Command msbuild.exe).Path | Split-Path -parent) ++- ps: >- ++ if ($env:MSVC_VER -eq 15) { ++ $env:VCTargetsPath="$env:MSBUILDDIR\..\..\..\Common7\IDE\VC\VCTargets" ++ } else { ++ $env:VCTargetsPath="$env:MSBUILDDIR\..\..\..\Microsoft.Cpp\v4.0\V${env:MSVC_VER}0" ++ } ++ ++# Download and install yasm integration ++- ps: (New-Object Net.WebClient).DownloadFile('https://github.com/ShiftMediaProject/VSYASM/releases/download/0.1/VSYASM.zip', "$pwd\yasm.zip") ++- ps: Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory("$pwd\yasm.zip", "$pwd\TempYASMUnpack") ++- cmd: call ".\TempYASMUnpack\install_script.bat" ++# Additional yasm location in order to fix gitlink error ++- ps: if ($env:MSVC_VER -ne 15) { Copy-Item -Force "TempYASMUnpack\*.*" "$env:VCTargetsPath\..\BuildCustomizations" } ++ ++# Use project supplied script to download all required dependency libraries ++- cmd: call "%APPVEYOR_BUILD_FOLDER%\SMP\project_get_dependencies.bat" ++ ++build: ++ project: build.vcxproj ++ parallel: true ++ verbosity: minimal ++ ++after_build: ++# Copy licenses for dependencies ++- cmd: copy /y %APPVEYOR_BUILD_FOLDER%\..\prebuilt\licenses\*.* %APPVEYOR_BUILD_FOLDER%\build_out\licenses\ ++ ++artifacts: ++- path: build_out ++ name: $(APPVEYOR_PROJECT_NAME)_$(APPVEYOR_REPO_TAG_NAME)_msvc$(MSVC_VER) ++ type: zip ++ ++deploy: ++- provider: GitHub ++ tag: $(APPVEYOR_REPO_TAG_NAME) ++ description: Pre-built static and shared libraries in 32b and 64b for $(APPVEYOR_PROJECT_NAME) $(APPVEYOR_REPO_TAG_NAME) ++ auth_token: ++ secure: aiTcAD/YitqgwuiBdC3ImXiUlHfIIDD7ayjCs3Y3aAO5vEm1gA7flCZpUZ60a5am ++ artifact: $(APPVEYOR_PROJECT_NAME)_$(APPVEYOR_REPO_TAG_NAME)_msvc$(MSVC_VER) ++ force_update: true +\ No newline at end of file +diff --git a/SMP/byteswap.h b/SMP/byteswap.h +new file mode 100644 +index 0000000..db77db3 +--- /dev/null ++++ b/SMP/byteswap.h +@@ -0,0 +1,36 @@ ++/* ++ * MSVC byteswap.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_BYTESWAP_H ++#define SMP_BYTESWAP_H ++ ++#ifndef _MSC_VER ++# include_next <byteswap.h> ++#else ++ ++#define bswap_16 _byteswap_ushort ++#define bswap_32 _byteswap_ulong ++#define bswap_64 _byteswap_uint64 ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_BYTESWAP_H */ +diff --git a/SMP/config.h b/SMP/config.h +new file mode 100644 +index 0000000..911fa49 +--- /dev/null ++++ b/SMP/config.h +@@ -0,0 +1,2273 @@ ++ ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++ ++/* Define to the number of bits in type 'ptrdiff_t'. */ ++/* #undef BITSIZEOF_PTRDIFF_T */ ++ ++/* Define to the number of bits in type 'sig_atomic_t'. */ ++/* #undef BITSIZEOF_SIG_ATOMIC_T */ ++ ++/* Define to the number of bits in type 'size_t'. */ ++/* #undef BITSIZEOF_SIZE_T */ ++ ++/* Define to the number of bits in type 'wchar_t'. */ ++/* #undef BITSIZEOF_WCHAR_T */ ++ ++/* Define to the number of bits in type 'wint_t'. */ ++/* #undef BITSIZEOF_WINT_T */ ++ ++/* C99 macros are supported */ ++#define C99_MACROS 1 ++ ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ ++ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ ++ ++/* Define as the bit index in the word where to find bit 0 of the exponent of ++ 'double'. */ ++#define DBL_EXPBIT0_BIT 20 ++ ++/* Define as the word index where to find the exponent of 'double'. */ ++#define DBL_EXPBIT0_WORD 1 ++ ++/* use the given certificate blacklist file */ ++/* #undef DEFAULT_BLACKLIST_FILE */ ++ ++/* use the given CRL file */ ++/* #undef DEFAULT_CRL_FILE */ ++ ++/* The default priority string */ ++#define DEFAULT_PRIORITY_STRING "NORMAL" ++ ++/* use the given directory as default trust store */ ++/* #undef DEFAULT_TRUST_STORE_DIR */ ++ ++/* use the given file default trust store */ ++/* #undef DEFAULT_TRUST_STORE_FILE */ ++ ++/* use the given pkcs11 uri as default trust store */ ++/* #undef DEFAULT_TRUST_STORE_PKCS11 */ ++ ++/* Define to 1 if // is a file system root distinct from /. */ ++/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */ ++ ++/* enable ALPN support */ ++#define ENABLE_ALPN 1 ++ ++/* enable anonymous authentication */ ++#define ENABLE_ANON 1 ++ ++/* Enable cryptodev support */ ++/* #undef ENABLE_CRYPTODEV */ ++ ++/* enable DHE */ ++#define ENABLE_DHE 1 ++ ++/* enable DTLS-SRTP support */ ++/* #undef ENABLE_DTLS_SRTP */ ++ ++/* enable DHE */ ++#define ENABLE_ECDHE 1 ++ ++/* Enable FIPS140-2 mode */ ++/* #undef ENABLE_FIPS140 */ ++ ++/* enable GOST */ ++#define ENABLE_GOST 1 ++ ++/* enable heartbeat support */ ++#define ENABLE_HEARTBEAT 1 ++ ++/* nls support in libopts */ ++/* #undef ENABLE_NLS */ ++ ++/* Enable all curves */ ++#define ENABLE_NON_SUITEB_CURVES 1 ++ ++/* enable OCSP support */ ++#define ENABLE_OCSP 1 ++ ++/* use openpgp authentication */ ++#define ENABLE_OPENPGP 1 ++ ++/* Enable padlock acceleration */ ++#define ENABLE_PADLOCK 1 ++ ++/* Build PKCS#11 support */ ++/* #undef ENABLE_PKCS11 */ ++ ++/* enable PSK authentication */ ++#define ENABLE_PSK 1 ++ ++/* Self checks are included in the library */ ++/* #undef ENABLE_SELF_CHECKS */ ++ ++/* enable session tickets support */ ++#define ENABLE_SESSION_TICKETS 1 ++ ++/* enable SRP authentication */ ++#define ENABLE_SRP 1 ++ ++/* enable SSL2.0 support for client hello */ ++#define ENABLE_SSL2 1 ++ ++/* enable SSL3.0 support */ ++#define ENABLE_SSL3 1 ++ ++/* The FIPS140-2 integrity key */ ++/* #undef FIPS_KEY */ ++ ++/* Define to nothing if C supports flexible array members, and to 1 if it does ++ not. That way, with a declaration like 'struct s { int n; double ++ d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 ++ compilers. When computing the size of such an object, don't use 'sizeof ++ (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' ++ instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with ++ MSVC and with C++ compilers. */ ++#define FLEXIBLE_ARRAY_MEMBER /**/ ++ ++/* fopen(3) accepts a 'b' in the mode flag */ ++/* #undef FOPEN_BINARY_FLAG */ ++ ++/* fopen(3) accepts a 't' in the mode flag */ ++/* #undef FOPEN_TEXT_FLAG */ ++ ++/* Define to 1 if the system's ftello function has the Solaris bug. */ ++/* #undef FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE */ ++ ++/* Define to 1 if ungetc is broken when used on arbitrary bytes. */ ++/* #undef FUNC_UNGETC_BROKEN */ ++ ++/* Define if gettimeofday clobbers the localtime buffer. */ ++/* #undef GETTIMEOFDAY_CLOBBERS_LOCALTIME */ ++ ++/* Define this to 'void' or 'struct timezone' to match the system's ++ declaration of the second argument to gettimeofday. */ ++#define GETTIMEOFDAY_TIMEZONE struct timezone ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module fscanf shall be considered present. */ ++#define GNULIB_FSCANF 1 ++ ++/* Define to 1 if printf and friends should be labeled with attribute ++ "__gnu_printf__" instead of "__printf__" */ ++/* #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU */ ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module scanf shall be considered present. */ ++#define GNULIB_SCANF 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module snprintf shall be considered present. */ ++#define GNULIB_SNPRINTF 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module strerror shall be considered present. */ ++#define GNULIB_STRERROR 1 ++ ++/* Define to 1 when the gnulib module accept should be tested. */ ++#define GNULIB_TEST_ACCEPT 1 ++ ++/* Define to 1 when the gnulib module bind should be tested. */ ++#define GNULIB_TEST_BIND 1 ++ ++/* Define to 1 when the gnulib module close should be tested. */ ++#define GNULIB_TEST_CLOSE 1 ++ ++/* Define to 1 when the gnulib module connect should be tested. */ ++#define GNULIB_TEST_CONNECT 1 ++ ++/* Define to 1 when the gnulib module dup2 should be tested. */ ++#define GNULIB_TEST_DUP2 1 ++ ++/* Define to 1 when the gnulib module environ should be tested. */ ++#define GNULIB_TEST_ENVIRON 1 ++ ++/* Define to 1 when the gnulib module fdopen should be tested. */ ++#define GNULIB_TEST_FDOPEN 1 ++ ++/* Define to 1 when the gnulib module fseek should be tested. */ ++#define GNULIB_TEST_FSEEK 1 ++ ++/* Define to 1 when the gnulib module fseeko should be tested. */ ++#define GNULIB_TEST_FSEEKO 1 ++ ++/* Define to 1 when the gnulib module fstat should be tested. */ ++#define GNULIB_TEST_FSTAT 1 ++ ++/* Define to 1 when the gnulib module ftell should be tested. */ ++#define GNULIB_TEST_FTELL 1 ++ ++/* Define to 1 when the gnulib module ftello should be tested. */ ++#define GNULIB_TEST_FTELLO 1 ++ ++/* Define to 1 when the gnulib module getaddrinfo should be tested. */ ++#define GNULIB_TEST_GETADDRINFO 1 ++ ++/* Define to 1 when the gnulib module getdelim should be tested. */ ++#define GNULIB_TEST_GETDELIM 1 ++ ++/* Define to 1 when the gnulib module getline should be tested. */ ++#define GNULIB_TEST_GETLINE 1 ++ ++/* Define to 1 when the gnulib module getpagesize should be tested. */ ++#define GNULIB_TEST_GETPAGESIZE 1 ++ ++/* Define to 1 when the gnulib module getpeername should be tested. */ ++#define GNULIB_TEST_GETPEERNAME 1 ++ ++/* Define to 1 when the gnulib module gettimeofday should be tested. */ ++#define GNULIB_TEST_GETTIMEOFDAY 1 ++ ++/* Define to 1 when the gnulib module listen should be tested. */ ++#define GNULIB_TEST_LISTEN 1 ++ ++/* Define to 1 when the gnulib module lseek should be tested. */ ++#define GNULIB_TEST_LSEEK 1 ++ ++/* Define to 1 when the gnulib module malloc-posix should be tested. */ ++#define GNULIB_TEST_MALLOC_POSIX 1 ++ ++/* Define to 1 when the gnulib module memchr should be tested. */ ++#define GNULIB_TEST_MEMCHR 1 ++ ++/* Define to 1 when the gnulib module memmem should be tested. */ ++#define GNULIB_TEST_MEMMEM 1 ++ ++/* Define to 1 when the gnulib module mktime should be tested. */ ++#define GNULIB_TEST_MKTIME 1 ++ ++/* Define to 1 when the gnulib module realloc-posix should be tested. */ ++#define GNULIB_TEST_REALLOC_POSIX 1 ++ ++/* Define to 1 when the gnulib module recv should be tested. */ ++#define GNULIB_TEST_RECV 1 ++ ++/* Define to 1 when the gnulib module recvfrom should be tested. */ ++#define GNULIB_TEST_RECVFROM 1 ++ ++/* Define to 1 when the gnulib module secure_getenv should be tested. */ ++#define GNULIB_TEST_SECURE_GETENV 1 ++ ++/* Define to 1 when the gnulib module select should be tested. */ ++#define GNULIB_TEST_SELECT 1 ++ ++/* Define to 1 when the gnulib module send should be tested. */ ++#define GNULIB_TEST_SEND 1 ++ ++/* Define to 1 when the gnulib module sendto should be tested. */ ++#define GNULIB_TEST_SENDTO 1 ++ ++/* Define to 1 when the gnulib module setenv should be tested. */ ++#define GNULIB_TEST_SETENV 1 ++ ++/* Define to 1 when the gnulib module setsockopt should be tested. */ ++#define GNULIB_TEST_SETSOCKOPT 1 ++ ++/* Define to 1 when the gnulib module shutdown should be tested. */ ++#define GNULIB_TEST_SHUTDOWN 1 ++ ++/* Define to 1 when the gnulib module snprintf should be tested. */ ++#define GNULIB_TEST_SNPRINTF 1 ++ ++/* Define to 1 when the gnulib module socket should be tested. */ ++#define GNULIB_TEST_SOCKET 1 ++ ++/* Define to 1 when the gnulib module strdup should be tested. */ ++#define GNULIB_TEST_STRDUP 1 ++ ++/* Define to 1 when the gnulib module strerror should be tested. */ ++#define GNULIB_TEST_STRERROR 1 ++ ++/* Define to 1 when the gnulib module strndup should be tested. */ ++#define GNULIB_TEST_STRNDUP 1 ++ ++/* Define to 1 when the gnulib module strnlen should be tested. */ ++#define GNULIB_TEST_STRNLEN 1 ++ ++/* Define to 1 when the gnulib module strtok_r should be tested. */ ++#define GNULIB_TEST_STRTOK_R 1 ++ ++/* Define to 1 when the gnulib module strverscmp should be tested. */ ++#define GNULIB_TEST_STRVERSCMP 1 ++ ++/* Define to 1 when the gnulib module timegm should be tested. */ ++#define GNULIB_TEST_TIMEGM 1 ++ ++/* Define to 1 when the gnulib module time_r should be tested. */ ++#define GNULIB_TEST_TIME_R 1 ++ ++/* Define to 1 when the gnulib module time_rz should be tested. */ ++#define GNULIB_TEST_TIME_RZ 1 ++ ++/* Define to 1 when the gnulib module uninorm/u16-normalize should be tested. ++ */ ++#define GNULIB_TEST_UNINORM_U16_NORMALIZE 1 ++ ++/* Define to 1 when the gnulib module uninorm/u32-normalize should be tested. ++ */ ++#define GNULIB_TEST_UNINORM_U32_NORMALIZE 1 ++ ++/* Define to 1 when the gnulib module uninorm/u8-normalize should be tested. ++ */ ++#define GNULIB_TEST_UNINORM_U8_NORMALIZE 1 ++ ++/* Define to 1 when the gnulib module unsetenv should be tested. */ ++#define GNULIB_TEST_UNSETENV 1 ++ ++/* Define to 1 when the gnulib module vasprintf should be tested. */ ++#define GNULIB_TEST_VASPRINTF 1 ++ ++/* Define to 1 when the gnulib module vsnprintf should be tested. */ ++#define GNULIB_TEST_VSNPRINTF 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u16-mbtoucr shall be considered present. ++ */ ++#define GNULIB_UNISTR_U16_MBTOUCR 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u16-mbtouc-unsafe shall be considered ++ present. */ ++#define GNULIB_UNISTR_U16_MBTOUC_UNSAFE 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u16-uctomb shall be considered present. */ ++#define GNULIB_UNISTR_U16_UCTOMB 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u32-mbtouc-unsafe shall be considered ++ present. */ ++#define GNULIB_UNISTR_U32_MBTOUC_UNSAFE 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u32-uctomb shall be considered present. */ ++#define GNULIB_UNISTR_U32_UCTOMB 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u8-mbtoucr shall be considered present. */ ++#define GNULIB_UNISTR_U8_MBTOUCR 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u8-mbtouc-unsafe shall be considered ++ present. */ ++#define GNULIB_UNISTR_U8_MBTOUC_UNSAFE 1 ++ ++/* Define to a C preprocessor expression that evaluates to 1 or 0, depending ++ whether the gnulib module unistr/u8-uctomb shall be considered present. */ ++#define GNULIB_UNISTR_U8_UCTOMB 1 ++ ++/* Make sure we don't use old features in code. */ ++#define GNUTLS_COMPAT_H 1 ++ ++/* We allow temporarily usage of deprecated functions - until they are ++ removed. */ ++#define GNUTLS_INTERNAL_BUILD 1 ++ ++/* Additional cast to bring void* to a type castable to int. */ ++#define GNUTLS_POINTER_TO_INT_CAST (long) ++ ++/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that ++ may be supplied by this distribution. */ ++#define HAVE_ALLOCA 1 ++ ++/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). ++ */ ++/* #undef HAVE_ALLOCA_H */ ++ ++/* Define to 1 if you have the <arpa/inet.h> header file. */ ++/* #undef HAVE_ARPA_INET_H */ ++ ++/* Define to 1 if you have the <bp-sym.h> header file. */ ++/* #undef HAVE_BP_SYM_H */ ++ ++/* Define to 1 if you have the <byteswap.h> header file. */ ++/* #undef HAVE_BYTESWAP_H */ ++ ++/* Define to 1 if you have the `canonicalize_file_name' function. */ ++/* #undef HAVE_CANONICALIZE_FILE_NAME */ ++ ++/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the ++ CoreFoundation framework. */ ++/* #undef HAVE_CFLOCALECOPYCURRENT */ ++ ++/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in ++ the CoreFoundation framework. */ ++/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ ++ ++/* Define to 1 if you have the `chmod' function. */ ++/* #undef HAVE_CHMOD */ ++ ++/* Define to 1 if you have the `clock_gettime' function. */ ++/* #undef HAVE_CLOCK_GETTIME */ ++ ++/* Define to 1 if you have the `clock_settime' function. */ ++/* #undef HAVE_CLOCK_SETTIME */ ++ ++/* Define if you have compound literals. */ ++#define HAVE_COMPOUND_LITERALS 1 ++ ++/* Define to 1 if you have the <cpuid.h> header file. */ ++#define HAVE_CPUID_H 1 ++ ++/* Define to 1 if you have the `daemon' function. */ ++/* #undef HAVE_DAEMON */ ++ ++/* Enable the DANE library */ ++/* #undef HAVE_DANE */ ++ ++/* Define if the GNU dcgettext() function is already present or preinstalled. ++ */ ++/* #undef HAVE_DCGETTEXT */ ++ ++/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. ++ */ ++#define HAVE_DECL_ALARM 0 ++ ++/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if ++ you don't. */ ++#define HAVE_DECL_FFLUSH_UNLOCKED 0 ++ ++/* Define to 1 if you have the declaration of `flockfile', and to 0 if you ++ don't. */ ++#define HAVE_DECL_FLOCKFILE 0 ++ ++/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if ++ you don't. */ ++#define HAVE_DECL_FPUTS_UNLOCKED 0 ++ ++/* Define to 1 if you have the declaration of `freeaddrinfo', and to 0 if you ++ don't. */ ++#define HAVE_DECL_FREEADDRINFO 1 ++ ++/* Define to 1 if you have the declaration of `fseeko', and to 0 if you don't. ++ */ ++#define HAVE_DECL_FSEEKO 1 ++ ++/* Define to 1 if you have the declaration of `ftello', and to 0 if you don't. ++ */ ++#define HAVE_DECL_FTELLO 1 ++ ++/* Define to 1 if you have the declaration of `funlockfile', and to 0 if you ++ don't. */ ++#define HAVE_DECL_FUNLOCKFILE 0 ++ ++/* Define to 1 if you have the declaration of `gai_strerror', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GAI_STRERROR 1 ++ ++/* Define to 1 if you have the declaration of `gai_strerrorA', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GAI_STRERRORA 0 ++ ++/* Define to 1 if you have the declaration of `getaddrinfo', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GETADDRINFO 1 ++ ++/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GETC_UNLOCKED 0 ++ ++/* Define to 1 if you have the declaration of `getdelim', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GETDELIM 0 ++ ++/* Define to 1 if you have the declaration of `getline', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GETLINE 0 ++ ++/* Define to 1 if you have the declaration of `getnameinfo', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GETNAMEINFO 1 ++ ++/* Define to 1 if you have the declaration of `getpass', and to 0 if you ++ don't. */ ++#define HAVE_DECL_GETPASS 0 ++ ++/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you ++ don't. */ ++#define HAVE_DECL_INET_NTOP 0 ++ ++/* Define to 1 if you have the declaration of `inet_pton', and to 0 if you ++ don't. */ ++#define HAVE_DECL_INET_PTON 0 ++ ++/* Define to 1 if you have the declaration of `localtime_r', and to 0 if you ++ don't. */ ++#define HAVE_DECL_LOCALTIME_R 0 ++ ++/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't. ++ */ ++#define HAVE_DECL_MEMMEM 0 ++ ++/* Define to 1 if you have the declaration of `program_invocation_name', and ++ to 0 if you don't. */ ++#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0 ++ ++/* Define to 1 if you have the declaration of `program_invocation_short_name', ++ and to 0 if you don't. */ ++#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0 ++ ++/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you ++ don't. */ ++#define HAVE_DECL_PUTC_UNLOCKED 0 ++ ++/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. ++ */ ++#define HAVE_DECL_SETENV 0 ++ ++/* Define to 1 if you have the declaration of `snprintf', and to 0 if you ++ don't. */ ++#define HAVE_DECL_SNPRINTF 1 ++ ++/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't. ++ */ ++#define HAVE_DECL_STRDUP 1 ++ ++/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you ++ don't. */ ++#define HAVE_DECL_STRERROR_R 0 ++ ++/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you ++ don't. */ ++#define HAVE_DECL_STRNCASECMP 1 ++ ++/* Define to 1 if you have the declaration of `strndup', and to 0 if you ++ don't. */ ++#define HAVE_DECL_STRNDUP 0 ++ ++/* Define to 1 if you have the declaration of `strnlen', and to 0 if you ++ don't. */ ++#define HAVE_DECL_STRNLEN 1 ++ ++/* Define to 1 if you have the declaration of `strtok_r', and to 0 if you ++ don't. */ ++#define HAVE_DECL_STRTOK_R 0 ++ ++/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. ++ */ ++#define HAVE_DECL_TZNAME 1 ++ ++/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you ++ don't. */ ++#define HAVE_DECL_UNSETENV 0 ++ ++/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you ++ don't. */ ++#define HAVE_DECL_VSNPRINTF 1 ++ ++/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you ++ don't. */ ++#define HAVE_DECL__SNPRINTF 1 ++ ++/* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. ++ */ ++#define HAVE_DECL___ARGV 0 ++ ++/* Define to 1 if you have the declaration of `__fsetlocking', and to 0 if you ++ don't. */ ++#define HAVE_DECL___FSETLOCKING 0 ++ ++/* Define this if /dev/zero is readable device */ ++/* #undef HAVE_DEV_ZERO */ ++ ++/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'. ++ */ ++/* #undef HAVE_DIRENT_H */ ++ ++/* Define to 1 if you have the <dlfcn.h> header file. */ ++/* #undef HAVE_DLFCN_H */ ++ ++/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ ++/* #undef HAVE_DOPRNT */ ++ ++/* Define to 1 if you have the 'dup2' function. */ ++#define HAVE_DUP2 1 ++ ++/* Define if you have the declaration of environ. */ ++#define HAVE_ENVIRON_DECL 1 ++ ++/* Define to 1 if you have the <errno.h> header file. */ ++/* #undef HAVE_ERRNO_H */ ++ ++/* Define to 1 if you have the `fchmod' function. */ ++/* #undef HAVE_FCHMOD */ ++ ++/* Define to 1 if you have the <fcntl.h> header file. */ ++/* #undef HAVE_FCNTL_H */ ++ ++/* Define to 1 if you have the <features.h> header file. */ ++/* #undef HAVE_FEATURES_H */ ++ ++/* Define to 1 if you have the `flockfile' function. */ ++/* #undef HAVE_FLOCKFILE */ ++ ++/* Define to 1 if you have the `fmemopen' function. */ ++/* #undef HAVE_FMEMOPEN */ ++ ++/* Define to 1 if you have the `fork' function. */ ++/* #undef HAVE_FORK */ ++ ++/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ ++#define HAVE_FSEEKO 1 ++ ++/* Define to 1 if you have the `fstat' function. */ ++/* #undef HAVE_FSTAT */ ++ ++/* Define to 1 if you have the `funlockfile' function. */ ++/* #undef HAVE_FUNLOCKFILE */ ++ ++/* Define to 1 if you have the `getdelim' function. */ ++/* #undef HAVE_GETDELIM */ ++ ++/* Define to 1 if you have the `getegid' function. */ ++/* #undef HAVE_GETEGID */ ++ ++/* Enable the OpenBSD getentropy function */ ++/* #undef HAVE_GETENTROPY */ ++ ++/* Define to 1 if you have the `geteuid' function. */ ++/* #undef HAVE_GETEUID */ ++ ++/* Define to 1 if you have the `getexecname' function. */ ++/* #undef HAVE_GETEXECNAME */ ++ ++/* Define to 1 if you have the `getgid' function. */ ++/* #undef HAVE_GETGID */ ++ ++/* Define to 1 if you have the `gethostbyname' function. */ ++/* #undef HAVE_GETHOSTBYNAME */ ++ ++/* Define to 1 if you have the `getpagesize' function. */ ++#define HAVE_GETPAGESIZE 1 ++ ++/* Define to 1 if you have the `getpass' function. */ ++/* #undef HAVE_GETPASS */ ++ ++/* Define to 1 if you have the `getpid' function. */ ++/* #undef HAVE_GETPID */ ++ ++/* Define to 1 if you have the `getprogname' function. */ ++/* #undef HAVE_GETPROGNAME */ ++ ++/* Define to 1 if you have the `getpwuid_r' function. */ ++/* #undef HAVE_GETPWUID_R */ ++ ++/* Define to 1 if you have the `getrusage' function. */ ++/* #undef HAVE_GETRUSAGE */ ++ ++/* Define to 1 if you have the `getservbyname' function. */ ++/* #undef HAVE_GETSERVBYNAME */ ++ ++/* Define if the GNU gettext() function is already present or preinstalled. */ ++/* #undef HAVE_GETTEXT */ ++ ++/* Define to 1 if you have the `gettimeofday' function. */ ++#define HAVE_GETTIMEOFDAY 1 ++ ++/* Define to 1 if you have the `getuid' function. */ ++/* #undef HAVE_GETUID */ ++ ++/* Define if you have the iconv() function and it works. */ ++/* #undef HAVE_ICONV */ ++ ++/* Define to 1 if you have the `inet_ntop' function. */ ++/* #undef HAVE_INET_NTOP */ ++ ++/* Define to 1 if you have the `inet_pton' function. */ ++/* #undef HAVE_INET_PTON */ ++ ++/* Define to 1 if the compiler supports one of the keywords 'inline', ++ '__inline__', '__inline' and effectively inlines functions marked as such. ++ */ ++#define HAVE_INLINE 1 ++ ++/* Define to 1 if the system has the type `int16_t'. */ ++#define HAVE_INT16_T 1 ++ ++/* Define to 1 if the system has the type `int32_t'. */ ++#define HAVE_INT32_T 1 ++ ++/* Define to 1 if the system has the type `int8_t'. */ ++#define HAVE_INT8_T 1 ++ ++/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ ++#define HAVE_INTMAX_T 1 ++ ++/* Define to 1 if the system has the type `intptr_t'. */ ++#define HAVE_INTPTR_T 1 ++ ++/* Define to 1 if you have the <inttypes.h> header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and ++ declares uintmax_t. */ ++#define HAVE_INTTYPES_H_WITH_UINTMAX 1 ++ ++/* Define to 1 if <sys/socket.h> defines AF_INET. */ ++#define HAVE_IPV4 1 ++ ++/* Define to 1 if <sys/socket.h> defines AF_INET6. */ ++#define HAVE_IPV6 1 ++ ++/* Define to 1 if you have the `issetugid' function. */ ++/* #undef HAVE_ISSETUGID */ ++ ++/* Define if you have the libcrypto library. */ ++/* #undef HAVE_LIBCRYPTO */ ++ ++/* Define if you have the libdl library. */ ++/* #undef HAVE_LIBDL */ ++ ++/* Define to 1 if you have the `gen' library (-lgen). */ ++/* #undef HAVE_LIBGEN */ ++ ++/* Define to 1 if you have the <libgen.h> header file. */ ++/* #undef HAVE_LIBGEN_H */ ++ ++/* Build IDNA support */ ++/* #undef HAVE_LIBIDN */ ++ ++/* Define if IDNA 2008 support is enabled. */ ++/* #undef HAVE_LIBIDN2 */ ++ ++/* Define to 1 if you have the `intl' library (-lintl). */ ++/* #undef HAVE_LIBINTL */ ++ ++/* Define to 1 if you have the <libintl.h> header file. */ ++/* #undef HAVE_LIBINTL_H */ ++ ++/* nettle is enabled */ ++#define HAVE_LIBNETTLE 1 ++ ++/* Define if you have the libnsl library. */ ++/* #undef HAVE_LIBNSL */ ++ ++/* Define if you have the libpthread library. */ ++/* #undef HAVE_LIBPTHREAD */ ++ ++/* Define if you have the librt library. */ ++/* #undef HAVE_LIBRT */ ++ ++/* Define if you have the libseccomp library. */ ++/* #undef HAVE_LIBSECCOMP */ ++ ++/* Define if you have the libunistring library. */ ++/* #undef HAVE_LIBUNISTRING */ ++ ++/* Define if you have the libz library. */ ++#define HAVE_LIBZ 1 ++ ++/* Define to 1 if you have the <limits.h> header file. */ ++#define HAVE_LIMITS_H 1 ++ ++/* Enable the Linux getrandom function */ ++/* #undef HAVE_GETRANDOM */ ++ ++/* Define to 1 if you have the `localtime' function. */ ++#define HAVE_LOCALTIME 1 ++ ++/* Define to 1 if you have the `localtime_r' function. */ ++/* #undef HAVE_LOCALTIME_R */ ++ ++/* Define to 1 if the system has the type 'long long int'. */ ++#define HAVE_LONG_LONG_INT 1 ++ ++/* Define if the 'malloc' function is POSIX compliant. */ ++/* #undef HAVE_MALLOC_POSIX */ ++ ++/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including ++ config.h and <sys/mman.h>. */ ++/* #undef HAVE_MAP_ANONYMOUS */ ++ ++/* Define to 1 if you have the `mbrtowc' function. */ ++#define HAVE_MBRTOWC 1 ++ ++/* Define to 1 if you have the `memmem' function. */ ++/* #undef HAVE_MEMMEM */ ++ ++/* Define to 1 if you have the <memory.h> header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define to 1 if <limits.h> defines the MIN and MAX macros. */ ++/* #undef HAVE_MINMAX_IN_LIMITS_H */ ++ ++/* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ ++/* #undef HAVE_MINMAX_IN_SYS_PARAM_H */ ++ ++/* Define to 1 if you have the `mmap' function. */ ++/* #undef HAVE_MMAP */ ++ ++/* Define to 1 if you have the `mprotect' function. */ ++#define HAVE_MPROTECT 1 ++ ++/* Define to 1 on MSVC platforms that have the "invalid parameter handler" ++ concept. */ ++#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1 ++ ++/* Define to 1 if you have the `nanosleep' function. */ ++/* #undef HAVE_NANOSLEEP */ ++ ++/* Define to 1 if you have the `nanotime' function. */ ++/* #undef HAVE_NANOTIME */ ++ ++/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ ++/* #undef HAVE_NDIR_H */ ++ ++/* Define to 1 if you have the <netdb.h> header file. */ ++/* #undef HAVE_NETDB_H */ ++ ++/* Define to 1 if you have the <netinet/in.h> header file. */ ++/* #undef HAVE_NETINET_IN_H */ ++ ++/* Define to 1 if you have the <netinet/tcp.h> header file. */ ++/* #undef HAVE_NETINET_TCP_H */ ++ ++/* Define to 1 if you have the <OS.h> header file. */ ++/* #undef HAVE_OS_H */ ++ ++/* Define this if pathfind(3) works */ ++/* #undef HAVE_PATHFIND */ ++ ++/* Define to 1 if the system has the type `pid_t'. */ ++#define HAVE_PID_T 1 ++ ++/* Define to 1 if you have the `pthread_mutex_lock' function. */ ++/* #undef HAVE_PTHREAD_MUTEX_LOCK */ ++ ++/* Define to 1 if the system has the type `ptrdiff_t'. */ ++#define HAVE_PTRDIFF_T 1 ++ ++/* Define to 1 if accept is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_ACCEPT */ ++ ++/* Define to 1 if accept4 is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_ACCEPT4 */ ++ ++/* Define to 1 if atoll is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_ATOLL 1 ++ ++/* Define to 1 if bind is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_BIND */ ++ ++/* Define to 1 if btowc is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_BTOWC 1 ++ ++/* Define to 1 if canonicalize_file_name is declared even after undefining ++ macros. */ ++/* #undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME */ ++ ++/* Define to 1 if chdir is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_CHDIR 1 ++ ++/* Define to 1 if chown is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_CHOWN */ ++ ++/* Define to 1 if connect is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_CONNECT */ ++ ++/* Define to 1 if dprintf is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_DPRINTF */ ++ ++/* Define to 1 if dup is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_DUP 1 ++ ++/* Define to 1 if dup2 is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_DUP2 1 ++ ++/* Define to 1 if dup3 is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_DUP3 */ ++ ++/* Define to 1 if endusershell is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_ENDUSERSHELL */ ++ ++/* Define to 1 if environ is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_ENVIRON */ ++ ++/* Define to 1 if euidaccess is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_EUIDACCESS */ ++ ++/* Define to 1 if faccessat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FACCESSAT */ ++ ++/* Define to 1 if fchdir is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FCHDIR */ ++ ++/* Define to 1 if fchmodat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FCHMODAT */ ++ ++/* Define to 1 if fchownat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FCHOWNAT */ ++ ++/* Define to 1 if fcntl is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FCNTL */ ++ ++/* Define to 1 if fdatasync is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FDATASYNC */ ++ ++/* Define to 1 if ffs is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FFS */ ++ ++/* Define to 1 if ffsl is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FFSL */ ++ ++/* Define to 1 if ffsll is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FFSLL */ ++ ++/* Define to 1 if fpurge is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FPURGE */ ++ ++/* Define to 1 if freeaddrinfo is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FREEADDRINFO */ ++ ++/* Define to 1 if fseeko is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_FSEEKO 1 ++ ++/* Define to 1 if fstat is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_FSTAT 1 ++ ++/* Define to 1 if fstatat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FSTATAT */ ++ ++/* Define to 1 if fsync is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FSYNC */ ++ ++/* Define to 1 if ftello is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_FTELLO 1 ++ ++/* Define to 1 if ftruncate is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_FTRUNCATE 1 ++ ++/* Define to 1 if futimens is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_FUTIMENS */ ++ ++/* Define to 1 if gai_strerror is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GAI_STRERROR */ ++ ++/* Define to 1 if getaddrinfo is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETADDRINFO */ ++ ++/* Define to 1 if getcwd is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_GETCWD 1 ++ ++/* Define to 1 if getdelim is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETDELIM */ ++ ++/* Define to 1 if getdomainname is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETDOMAINNAME */ ++ ++/* Define to 1 if getdtablesize is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETDTABLESIZE */ ++ ++/* Define to 1 if getgroups is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETGROUPS */ ++ ++/* Define to 1 if gethostname is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETHOSTNAME */ ++ ++/* Define to 1 if getline is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETLINE */ ++ ++/* Define to 1 if getloadavg is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETLOADAVG */ ++ ++/* Define to 1 if getlogin is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETLOGIN */ ++ ++/* Define to 1 if getlogin_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETLOGIN_R */ ++ ++/* Define to 1 if getnameinfo is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETNAMEINFO */ ++ ++/* Define to 1 if getpagesize is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETPAGESIZE */ ++ ++/* Define to 1 if getpeername is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETPEERNAME */ ++ ++/* Define to 1 if gets is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_GETS 1 ++ ++/* Define to 1 if getsockname is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETSOCKNAME */ ++ ++/* Define to 1 if getsockopt is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETSOCKOPT */ ++ ++/* Define to 1 if getsubopt is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETSUBOPT */ ++ ++/* Define to 1 if gettimeofday is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_GETTIMEOFDAY 1 ++ ++/* Define to 1 if getusershell is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GETUSERSHELL */ ++ ++/* Define to 1 if grantpt is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GRANTPT */ ++ ++/* Define to 1 if group_member is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_GROUP_MEMBER */ ++ ++/* Define to 1 if imaxabs is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_IMAXABS 1 ++ ++/* Define to 1 if imaxdiv is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_IMAXDIV 1 ++ ++/* Define to 1 if inet_ntop is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_INET_NTOP */ ++ ++/* Define to 1 if inet_pton is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_INET_PTON */ ++ ++/* Define to 1 if initstate is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_INITSTATE */ ++ ++/* Define to 1 if initstate_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_INITSTATE_R */ ++ ++/* Define to 1 if isatty is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_ISATTY 1 ++ ++/* Define to 1 if isblank is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_ISBLANK 1 ++ ++/* Define to 1 if lchmod is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_LCHMOD */ ++ ++/* Define to 1 if lchown is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_LCHOWN */ ++ ++/* Define to 1 if link is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_LINK */ ++ ++/* Define to 1 if linkat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_LINKAT */ ++ ++/* Define to 1 if listen is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_LISTEN */ ++ ++/* Define to 1 if lseek is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_LSEEK 1 ++ ++/* Define to 1 if lstat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_LSTAT */ ++ ++/* Define to 1 if mbrlen is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_MBRLEN 1 ++ ++/* Define to 1 if mbrtowc is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_MBRTOWC 1 ++ ++/* Define to 1 if mbsinit is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_MBSINIT 1 ++ ++/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MBSNRTOWCS */ ++ ++/* Define to 1 if mbsrtowcs is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_MBSRTOWCS 1 ++ ++/* Define to 1 if memmem is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MEMMEM */ ++ ++/* Define to 1 if mempcpy is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_MEMPCPY 1 ++ ++/* Define to 1 if memrchr is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MEMRCHR */ ++ ++/* Define to 1 if mkdirat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKDIRAT */ ++ ++/* Define to 1 if mkdtemp is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKDTEMP */ ++ ++/* Define to 1 if mkfifo is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKFIFO */ ++ ++/* Define to 1 if mkfifoat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKFIFOAT */ ++ ++/* Define to 1 if mknod is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKNOD */ ++ ++/* Define to 1 if mknodat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKNODAT */ ++ ++/* Define to 1 if mkostemp is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKOSTEMP */ ++ ++/* Define to 1 if mkostemps is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKOSTEMPS */ ++ ++/* Define to 1 if mkstemp is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKSTEMP */ ++ ++/* Define to 1 if mkstemps is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_MKSTEMPS */ ++ ++/* Define to 1 if openat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_OPENAT */ ++ ++/* Define to 1 if pclose is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PCLOSE */ ++ ++/* Define to 1 if pipe is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PIPE */ ++ ++/* Define to 1 if pipe2 is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PIPE2 */ ++ ++/* Define to 1 if popen is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_POPEN */ ++ ++/* Define to 1 if posix_openpt is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_POSIX_OPENPT */ ++ ++/* Define to 1 if pread is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PREAD */ ++ ++/* Define to 1 if pselect is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PSELECT */ ++ ++/* Define to 1 if pthread_sigmask is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PTHREAD_SIGMASK */ ++ ++/* Define to 1 if ptsname is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PTSNAME */ ++ ++/* Define to 1 if ptsname_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PTSNAME_R */ ++ ++/* Define to 1 if pwrite is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_PWRITE */ ++ ++/* Define to 1 if random is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RANDOM */ ++ ++/* Define to 1 if random_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RANDOM_R */ ++ ++/* Define to 1 if rawmemchr is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RAWMEMCHR */ ++ ++/* Define to 1 if readlink is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_READLINK */ ++ ++/* Define to 1 if readlinkat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_READLINKAT */ ++ ++/* Define to 1 if realpath is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_REALPATH */ ++ ++/* Define to 1 if recv is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RECV */ ++ ++/* Define to 1 if recvfrom is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RECVFROM */ ++ ++/* Define to 1 if renameat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RENAMEAT */ ++ ++/* Define to 1 if rmdir is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_RMDIR 1 ++ ++/* Define to 1 if rpmatch is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_RPMATCH */ ++ ++/* Define to 1 if secure_getenv is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SECURE_GETENV */ ++ ++/* Define to 1 if select is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SELECT */ ++ ++/* Define to 1 if send is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SEND */ ++ ++/* Define to 1 if sendto is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SENDTO */ ++ ++/* Define to 1 if setenv is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SETENV */ ++ ++/* Define to 1 if sethostname is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SETHOSTNAME */ ++ ++/* Define to 1 if setsockopt is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SETSOCKOPT */ ++ ++/* Define to 1 if setstate is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SETSTATE */ ++ ++/* Define to 1 if setstate_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SETSTATE_R */ ++ ++/* Define to 1 if setusershell is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SETUSERSHELL */ ++ ++/* Define to 1 if shutdown is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SHUTDOWN */ ++ ++/* Define to 1 if sigaction is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGACTION */ ++ ++/* Define to 1 if sigaddset is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGADDSET */ ++ ++/* Define to 1 if sigdelset is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGDELSET */ ++ ++/* Define to 1 if sigemptyset is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGEMPTYSET */ ++ ++/* Define to 1 if sigfillset is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGFILLSET */ ++ ++/* Define to 1 if sigismember is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGISMEMBER */ ++ ++/* Define to 1 if sigpending is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGPENDING */ ++ ++/* Define to 1 if sigprocmask is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SIGPROCMASK */ ++ ++/* Define to 1 if sleep is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_SLEEP 1 ++ ++/* Define to 1 if snprintf is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_SNPRINTF 1 ++ ++/* Define to 1 if socket is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SOCKET */ ++ ++/* Define to 1 if srandom is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SRANDOM */ ++ ++/* Define to 1 if srandom_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SRANDOM_R */ ++ ++/* Define to 1 if stat is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STAT 1 ++ ++/* Define to 1 if stpcpy is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STPCPY */ ++ ++/* Define to 1 if stpncpy is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STPNCPY */ ++ ++/* Define to 1 if strcasecmp is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRCASECMP 1 ++ ++/* Define to 1 if strcasestr is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRCASESTR */ ++ ++/* Define to 1 if strchrnul is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRCHRNUL */ ++ ++/* Define to 1 if strdup is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRDUP 1 ++ ++/* Define to 1 if strerror_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRERROR_R */ ++ ++/* Define to 1 if strncasecmp is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRNCASECMP 1 ++ ++/* Define to 1 if strncat is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRNCAT 1 ++ ++/* Define to 1 if strndup is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRNDUP */ ++ ++/* Define to 1 if strnlen is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRNLEN 1 ++ ++/* Define to 1 if strpbrk is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRPBRK 1 ++ ++/* Define to 1 if strsep is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRSEP */ ++ ++/* Define to 1 if strsignal is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRSIGNAL */ ++ ++/* Define to 1 if strtod is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRTOD 1 ++ ++/* Define to 1 if strtoimax is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRTOIMAX 1 ++ ++/* Define to 1 if strtok_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRTOK_R */ ++ ++/* Define to 1 if strtoll is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRTOLL 1 ++ ++/* Define to 1 if strtoull is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRTOULL 1 ++ ++/* Define to 1 if strtoumax is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_STRTOUMAX 1 ++ ++/* Define to 1 if strverscmp is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_STRVERSCMP */ ++ ++/* Define to 1 if symlink is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SYMLINK */ ++ ++/* Define to 1 if symlinkat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_SYMLINKAT */ ++ ++/* Define to 1 if tmpfile is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_TMPFILE 1 ++ ++/* Define to 1 if ttyname_r is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_TTYNAME_R */ ++ ++/* Define to 1 if unlink is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_UNLINK 1 ++ ++/* Define to 1 if unlinkat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_UNLINKAT */ ++ ++/* Define to 1 if unlockpt is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_UNLOCKPT */ ++ ++/* Define to 1 if unsetenv is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_UNSETENV */ ++ ++/* Define to 1 if usleep is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_USLEEP 1 ++ ++/* Define to 1 if utimensat is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_UTIMENSAT */ ++ ++/* Define to 1 if vdprintf is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_VDPRINTF */ ++ ++/* Define to 1 if vsnprintf is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_VSNPRINTF 1 ++ ++/* Define to 1 if wcpcpy is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCPCPY */ ++ ++/* Define to 1 if wcpncpy is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCPNCPY */ ++ ++/* Define to 1 if wcrtomb is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCRTOMB 1 ++ ++/* Define to 1 if wcscasecmp is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCSCASECMP */ ++ ++/* Define to 1 if wcscat is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSCAT 1 ++ ++/* Define to 1 if wcschr is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSCHR 1 ++ ++/* Define to 1 if wcscmp is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSCMP 1 ++ ++/* Define to 1 if wcscoll is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSCOLL 1 ++ ++/* Define to 1 if wcscpy is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSCPY 1 ++ ++/* Define to 1 if wcscspn is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSCSPN 1 ++ ++/* Define to 1 if wcsdup is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSDUP 1 ++ ++/* Define to 1 if wcslen is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSLEN 1 ++ ++/* Define to 1 if wcsncasecmp is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCSNCASECMP */ ++ ++/* Define to 1 if wcsncat is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSNCAT 1 ++ ++/* Define to 1 if wcsncmp is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSNCMP 1 ++ ++/* Define to 1 if wcsncpy is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSNCPY 1 ++ ++/* Define to 1 if wcsnlen is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSNLEN 1 ++ ++/* Define to 1 if wcsnrtombs is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCSNRTOMBS */ ++ ++/* Define to 1 if wcspbrk is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSPBRK 1 ++ ++/* Define to 1 if wcsrchr is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSRCHR 1 ++ ++/* Define to 1 if wcsrtombs is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSRTOMBS 1 ++ ++/* Define to 1 if wcsspn is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSSPN 1 ++ ++/* Define to 1 if wcsstr is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSSTR 1 ++ ++/* Define to 1 if wcstok is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSTOK 1 ++ ++/* Define to 1 if wcswidth is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCSWIDTH */ ++ ++/* Define to 1 if wcsxfrm is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCSXFRM 1 ++ ++/* Define to 1 if wctob is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WCTOB 1 ++ ++/* Define to 1 if wcwidth is declared even after undefining macros. */ ++/* #undef HAVE_RAW_DECL_WCWIDTH */ ++ ++/* Define to 1 if wmemchr is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WMEMCHR 1 ++ ++/* Define to 1 if wmemcmp is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WMEMCMP 1 ++ ++/* Define to 1 if wmemcpy is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WMEMCPY 1 ++ ++/* Define to 1 if wmemmove is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WMEMMOVE 1 ++ ++/* Define to 1 if wmemset is declared even after undefining macros. */ ++#define HAVE_RAW_DECL_WMEMSET 1 ++ ++/* Define to 1 if _Exit is declared even after undefining macros. */ ++#define HAVE_RAW_DECL__EXIT 1 ++ ++/* Define if the 'realloc' function is POSIX compliant. */ ++/* #undef HAVE_REALLOC_POSIX */ ++ ++/* Define this if we have a functional realpath(3C) */ ++/* #undef HAVE_REALPATH */ ++ ++/* Define to 1 if you have the <runetype.h> header file. */ ++/* #undef HAVE_RUNETYPE_H */ ++ ++/* Define to 1 if the system has the type `sa_family_t'. */ ++/* #undef HAVE_SA_FAMILY_T */ ++ ++/* Define to 1 if you have the `scm_gc_malloc_pointerless' function. */ ++/* #undef HAVE_SCM_GC_MALLOC_POINTERLESS */ ++ ++/* Define to 1 if you have the <search.h> header file. */ ++#define HAVE_SEARCH_H 1 ++ ++/* Define to 1 if you have the `secure_getenv' function. */ ++/* #undef HAVE_SECURE_GETENV */ ++ ++/* Define to 1 if you have the `setdtablesize' function. */ ++/* #undef HAVE_SETDTABLESIZE */ ++ ++/* Define to 1 if you have the `setenv' function. */ ++/* #undef HAVE_SETENV */ ++ ++/* Define to 1 if you have the `setitimer' function. */ ++/* #undef HAVE_SETITIMER */ ++ ++/* Define to 1 if you have the <setjmp.h> header file. */ ++/* #undef HAVE_SETJMP_H */ ++ ++/* Define to 1 if you have the `shutdown' function. */ ++/* #undef HAVE_SHUTDOWN */ ++ ++/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ ++/* #undef HAVE_SIGNED_SIG_ATOMIC_T */ ++ ++/* Define to 1 if 'wchar_t' is a signed integer type. */ ++/* #undef HAVE_SIGNED_WCHAR_T */ ++ ++/* Define to 1 if 'wint_t' is a signed integer type. */ ++/* #undef HAVE_SIGNED_WINT_T */ ++ ++/* Define to 1 if the system has the type `sigset_t'. */ ++/* #undef HAVE_SIGSET_T */ ++ ++/* Define to 1 if the system has the type `size_t'. */ ++#define HAVE_SIZE_T 1 ++ ++/* Define to 1 if you have the `sleep' function. */ ++#define HAVE_SLEEP 1 ++ ++/* Define to 1 if you have the `snprintf' function. */ ++#define HAVE_SNPRINTF 1 ++ ++/* Define if the return value of the snprintf function is the number of of ++ bytes (excluding the terminating NUL) that would have been produced if the ++ buffer had been large enough. */ ++#define HAVE_SNPRINTF_RETVAL_C99 1 ++ ++/* Define to 1 if you have the <stdarg.h> header file. */ ++#define HAVE_STDARG_H 1 ++ ++/* Define to 1 if you have the <stdatomic.h> header file. */ ++/* #undef HAVE_STDATOMIC_H */ ++ ++/* Define to 1 if you have the <stdbool.h> header file. */ ++#define HAVE_STDBOOL_H 1 ++ ++/* Define to 1 if you have the <stdint.h> header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares ++ uintmax_t. */ ++#define HAVE_STDINT_H_WITH_UINTMAX 1 ++ ++/* Define to 1 if you have the <stdio_ext.h> header file. */ ++/* #undef HAVE_STDIO_EXT_H */ ++ ++/* Define to 1 if you have the <stdlib.h> header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the `strcasecmp' function. */ ++#define HAVE_STRCASECMP 1 ++ ++/* Define to 1 if you have the `strchr' function. */ ++#define HAVE_STRCHR 1 ++ ++/* Define to 1 if you have the `strdup' function. */ ++#define HAVE_STRDUP 1 ++ ++/* Define to 1 if you have the `strerror_r' function. */ ++/* #undef HAVE_STRERROR_R */ ++ ++/* Define this if strftime() works */ ++/* #undef HAVE_STRFTIME */ ++ ++/* Define to 1 if you have the <strings.h> header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the <string.h> header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the `strncasecmp' function. */ ++#define HAVE_STRNCASECMP 1 ++ ++/* Define to 1 if you have the `strndup' function. */ ++/* #undef HAVE_STRNDUP */ ++ ++/* Define to 1 if you have the `strnlen' function. */ ++#define HAVE_STRNLEN 1 ++ ++/* Define to 1 if you have the `strrchr' function. */ ++/* #undef HAVE_STRRCHR */ ++ ++/* Define to 1 if you have the `strsignal' function. */ ++/* #undef HAVE_STRSIGNAL */ ++ ++/* Define to 1 if you have the `strtok_r' function. */ ++/* #undef HAVE_STRTOK_R */ ++ ++/* Define to 1 if the system has the type `struct addrinfo'. */ ++#define HAVE_STRUCT_ADDRINFO 1 ++ ++/* Define to 1 if `iov_basea' is a member of `struct iovec'. */ ++/* #undef HAVE_STRUCT_IOVEC_IOV_BASEA */ ++ ++/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ ++/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */ ++ ++/* Define to 1 if the system has the type `struct sockaddr_storage'. */ ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++ ++/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */ ++#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1 ++ ++/* Define to 1 if `tm_zone' is a member of `struct tm'. */ ++/* #undef HAVE_STRUCT_TM_TM_ZONE */ ++ ++/* Define to 1 if you have the `strverscmp' function. */ ++/* #undef HAVE_STRVERSCMP */ ++ ++/* Define to 1 if you have the `symlink' function. */ ++/* #undef HAVE_SYMLINK */ ++ ++/* Define to 1 if you have the <sysexits.h> header file. */ ++/* #undef HAVE_SYSEXITS_H */ ++ ++/* Define to 1 if you have the <sys/bitypes.h> header file. */ ++/* #undef HAVE_SYS_BITYPES_H */ ++ ++/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. ++ */ ++/* #undef HAVE_SYS_DIR_H */ ++ ++/* Define to 1 if you have the <sys/inttypes.h> header file. */ ++/* #undef HAVE_SYS_INTTYPES_H */ ++ ++/* Define to 1 if you have the <sys/limits.h> header file. */ ++/* #undef HAVE_SYS_LIMITS_H */ ++ ++/* Define to 1 if you have the <sys/mman.h> header file. */ ++/* #undef HAVE_SYS_MMAN_H */ ++ ++/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. ++ */ ++/* #undef HAVE_SYS_NDIR_H */ ++ ++/* Define to 1 if you have the <sys/param.h> header file. */ ++/* #undef HAVE_SYS_PARAM_H */ ++ ++/* Define to 1 if you have the <sys/poll.h> header file. */ ++/* #undef HAVE_SYS_POLL_H */ ++ ++/* Define to 1 if you have the <sys/procset.h> header file. */ ++/* #undef HAVE_SYS_PROCSET_H */ ++ ++/* Define to 1 if you have the <sys/select.h> header file. */ ++/* #undef HAVE_SYS_SELECT_H */ ++ ++/* Define to 1 if you have the <sys/socket.h> header file. */ ++/* #undef HAVE_SYS_SOCKET_H */ ++ ++/* Define to 1 if you have the <sys/stat.h> header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the <sys/stropts.h> header file. */ ++/* #undef HAVE_SYS_STROPTS_H */ ++ ++/* Define to 1 if you have the <sys/timeb.h> header file. */ ++/* #undef HAVE_SYS_TIMEB_H */ ++ ++/* Define to 1 if you have the <sys/time.h> header file. */ ++#define HAVE_SYS_TIME_H 1 ++ ++/* Define to 1 if you have the <sys/types.h> header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the <sys/uio.h> header file. */ ++/* #undef HAVE_SYS_UIO_H */ ++ ++/* Define to 1 if you have the <sys/un.h> header file. */ ++/* #undef HAVE_SYS_UN_H */ ++ ++/* Define to 1 if you have the <sys/wait.h> header file. */ ++/* #undef HAVE_SYS_WAIT_H */ ++ ++/* Define to 1 if you have the `tcgetattr' function. */ ++/* #undef HAVE_TCGETATTR */ ++ ++/* Define to 1 if you have the `tcsetattr' function. */ ++/* #undef HAVE_TCSETATTR */ ++ ++/* Define to 1 if you have the <termios.h> header file. */ ++/* #undef HAVE_TERMIOS_H */ ++ ++/* Define to 1 if you have the `timegm' function. */ ++#define HAVE_TIMEGM 1 ++ ++/* Define to 1 if the system has the type `timezone_t'. */ ++/* #undef HAVE_TIMEZONE_T */ ++ ++/* Define if struct tm has the tm_gmtoff member. */ ++/* #undef HAVE_TM_GMTOFF */ ++ ++/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use ++ `HAVE_STRUCT_TM_TM_ZONE' instead. */ ++/* #undef HAVE_TM_ZONE */ ++ ++/* Enable TPM */ ++/* #undef HAVE_TROUSERS */ ++ ++/* Define to 1 if you have the `tsearch' function. */ ++#define HAVE_TSEARCH 1 ++ ++/* Define to 1 if you don't have `tm_zone' but do have the external array ++ `tzname'. */ ++#define HAVE_TZNAME 1 ++ ++/* Define to 1 if you have the `tzset' function. */ ++#define HAVE_TZSET 1 ++ ++/* Define to 1 if the system has the type `uint16_t'. */ ++#define HAVE_UINT16_T 1 ++ ++/* Define to 1 if the system has the type `uint32_t'. */ ++#define HAVE_UINT32_T 1 ++ ++/* Define to 1 if the system has the type `uint8_t'. */ ++#define HAVE_UINT8_T 1 ++ ++/* Define to 1 if the system has the type `uintptr_t'. */ ++#define HAVE_UINTPTR_T 1 ++ ++/* Define to 1 if the system has the type `uint_t'. */ ++#define HAVE_UINT_T 1 ++ ++/* Define to 1 if you have the <unistd.h> header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to 1 if you have the `unsetenv' function. */ ++/* #undef HAVE_UNSETENV */ ++ ++/* Define to 1 if the system has the type 'unsigned long long int'. */ ++#define HAVE_UNSIGNED_LONG_LONG_INT 1 ++ ++/* Define to 1 if you have the <utime.h> header file. */ ++/* #undef HAVE_UTIME_H */ ++ ++/* Define to 1 if you have the <values.h> header file. */ ++/* #undef HAVE_VALUES_H */ ++ ++/* Define to 1 if you have the <varargs.h> header file. */ ++/* #undef HAVE_VARARGS_H */ ++ ++/* Define if you have a global __progname variable */ ++/* #undef HAVE_VAR___PROGNAME */ ++ ++/* Define to 1 if you have the `vasnprintf' function. */ ++/* #undef HAVE_VASNPRINTF */ ++ ++/* Define to 1 if you have the `vasprintf' function. */ ++#define HAVE_VASPRINTF 1 ++ ++/* Have va_copy() */ ++/* #undef HAVE_VA_COPY */ ++ ++/* Define to 1 if you have the `vfork' function. */ ++/* #undef HAVE_VFORK */ ++ ++/* Define to 1 if you have the <vfork.h> header file. */ ++/* #undef HAVE_VFORK_H */ ++ ++/* Define to 1 if you have the `vprintf' function. */ ++/* #undef HAVE_VPRINTF */ ++ ++/* Define to 1 if you have the `vsnprintf' function. */ ++#define HAVE_VSNPRINTF 1 ++ ++/* Define to 1 if you have the <wchar.h> header file. */ ++#define HAVE_WCHAR_H 1 ++ ++/* Define to 1 if the system has the type `wchar_t'. */ ++#define HAVE_WCHAR_T 1 ++ ++/* Define to 1 if you have the `wcrtomb' function. */ ++#define HAVE_WCRTOMB 1 ++ ++/* Define to 1 if you have the `wcslen' function. */ ++#define HAVE_WCSLEN 1 ++ ++/* Define to 1 if you have the `wcsnlen' function. */ ++#define HAVE_WCSNLEN 1 ++ ++/* Define to 1 if you have the <winsock2.h> header file. */ ++#define HAVE_WINSOCK2_H 1 ++ ++/* Define to 1 if the system has the type `wint_t'. */ ++#define HAVE_WINT_T 1 ++ ++/* Define to 1 if `fork' works. */ ++/* #undef HAVE_WORKING_FORK */ ++ ++/* Define to 1 if O_NOATIME works. */ ++#define HAVE_WORKING_O_NOATIME 0 ++ ++/* Define to 1 if O_NOFOLLOW works. */ ++#define HAVE_WORKING_O_NOFOLLOW 0 ++ ++/* Define to 1 if `vfork' works. */ ++/* #undef HAVE_WORKING_VFORK */ ++ ++/* Define to 1 if you have the <ws2tcpip.h> header file. */ ++#define HAVE_WS2TCPIP_H 1 ++ ++/* Define to 1 if the system has the type `_Bool'. */ ++#define HAVE__BOOL 1 ++ ++/* Define to 1 if you have the `_fseeki64' function. */ ++#define HAVE__FSEEKI64 1 ++ ++/* Define to 1 if you have the `_ftelli64' function. */ ++#define HAVE__FTELLI64 1 ++ ++/* Define to 1 if you have the `_ftime' function. */ ++#define HAVE__FTIME 1 ++ ++/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ ++#define HAVE__SET_INVALID_PARAMETER_HANDLER 1 ++ ++/* Define to 1 if you have the `__fsetlocking' function. */ ++/* #undef HAVE___FSETLOCKING */ ++ ++/* Define to 1 if you have the `__register_atfork' function. */ ++/* #undef HAVE___REGISTER_ATFORK */ ++ ++/* Define to 1 if you have the `__secure_getenv' function. */ ++/* #undef HAVE___SECURE_GETENV */ ++ ++/* Have __va_copy() */ ++/* #undef HAVE___VA_COPY */ ++ ++/* Define to 1 if lseek does not detect pipes. */ ++#define LSEEK_PIPE_BROKEN 1 ++ ++/* Define to the sub-directory where libtool stores uninstalled libraries. */ ++#define LT_OBJDIR ".libs/" ++ ++/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ ++#define MALLOC_0_IS_NONNULL 1 ++ ++/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ ++/* #undef MAP_ANONYMOUS */ ++ ++/* Define this if optional arguments are disallowed */ ++/* #undef NO_OPTIONAL_OPT_ARGS */ ++ ++/* no ssize_t type was found */ ++/* #undef NO_SSIZE_T */ ++ ++/* Name of package */ ++#define PACKAGE "gnutls" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "bugs@gnutls.org" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "GnuTLS" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "GnuTLS 3.6.7" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "gnutls" ++ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.6.7" ++ ++/* define to a working POSIX compliant shell */ ++#define POSIX_SHELL "/bin/bash" ++ ++/* Define if <inttypes.h> exists and defines unusable PRI* macros. */ ++/* #undef PRI_MACROS_BROKEN */ ++ ++/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type ++ 'ptrdiff_t'. */ ++/* #undef PTRDIFF_T_SUFFIX */ ++ ++/* name of regex header file */ ++/* #undef REGEX_HEADER */ ++ ++/* Define to 1 if strerror(0) does not return a message implying success. */ ++/* #undef REPLACE_STRERROR_0 */ ++ ++/* Define if vasnprintf exists but is overridden by gnulib. */ ++/* #undef REPLACE_VASNPRINTF */ ++ ++/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type ++ 'sig_atomic_t'. */ ++/* #undef SIG_ATOMIC_T_SUFFIX */ ++ ++/* The size of `char*', as computed by sizeof. */ ++#if defined(__x86_64) || defined(_M_X64) ++#define SIZEOF_CHARP 8 ++#else ++#define SIZEOF_CHARP 4 ++#endif ++ ++/* The size of `int', as computed by sizeof. */ ++#define SIZEOF_INT 4 ++ ++/* The size of `long', as computed by sizeof. */ ++#define SIZEOF_LONG 4 ++ ++/* The size of `long long', as computed by sizeof. */ ++#define SIZEOF_LONG_LONG 8 ++ ++/* The size of `short', as computed by sizeof. */ ++#define SIZEOF_SHORT 2 ++ ++/* The size of `unsigned int', as computed by sizeof. */ ++#define SIZEOF_UNSIGNED_INT 4 ++ ++/* The size of `unsigned long int', as computed by sizeof. */ ++#define SIZEOF_UNSIGNED_LONG_INT 4 ++ ++/* The size of `void *', as computed by sizeof. */ ++#if defined(__x86_64) || defined(_M_X64) ++#define SIZEOF_VOID_P 8 ++#else ++#define SIZEOF_VOID_P 4 ++#endif ++ ++/* Define as the maximum value of type 'size_t', if the system doesn't define ++ it. */ ++#ifndef SIZE_MAX ++/* # undef SIZE_MAX */ ++#endif ++ ++/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type ++ 'size_t'. */ ++/* #undef SIZE_T_SUFFIX */ ++ ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ ++ ++/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */ ++/* #undef STAT_MACROS_BROKEN */ ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Define to 1 if strerror_r returns char *. */ ++/* #undef STRERROR_R_CHAR_P */ ++ ++/* The system priority file */ ++#define SYSTEM_PRIORITY_FILE "/etc/gnutls/default-priorities" ++ ++/* Define to 1 if all 'time_t' values fit in a 'long int'. */ ++/* #undef TIME_T_FITS_IN_LONG_INT */ ++ ++/* Define to 1 if time_t is signed. */ ++#define TIME_T_IS_SIGNED 1 ++ ++/* Define to 1 if your <sys/time.h> declares `struct tm'. */ ++/* #undef TM_IN_SYS_TIME */ ++ ++/* the location of the trousers library */ ++#define TROUSERS_LIB "" ++ ++/* The DNSSEC root key file */ ++#define UNBOUND_ROOT_KEY_FILE "C:\Program Files\Unbound\root.key" ++ ++/* Enable extensions on AIX 3, Interix. */ ++#ifndef _ALL_SOURCE ++# define _ALL_SOURCE 1 ++#endif ++/* Enable general extensions on macOS. */ ++#ifndef _DARWIN_C_SOURCE ++# define _DARWIN_C_SOURCE 1 ++#endif ++/* Enable GNU extensions on systems that have them. */ ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE 1 ++#endif ++/* Use GNU style printf and scanf. */ ++#ifndef __USE_MINGW_ANSI_STDIO ++# define __USE_MINGW_ANSI_STDIO 1 ++#endif ++/* Enable threading extensions on Solaris. */ ++#ifndef _POSIX_PTHREAD_SEMANTICS ++# define _POSIX_PTHREAD_SEMANTICS 1 ++#endif ++/* Enable extensions on HP NonStop. */ ++#ifndef _TANDEM_SOURCE ++# define _TANDEM_SOURCE 1 ++#endif ++/* Enable X/Open extensions if necessary. HP-UX 11.11 defines ++ mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of ++ whether compiling with -Ae or -D_HPUX_SOURCE=1. */ ++#ifndef _XOPEN_SOURCE ++/* # undef _XOPEN_SOURCE */ ++#endif ++/* Enable general extensions on Solaris. */ ++#ifndef __EXTENSIONS__ ++# define __EXTENSIONS__ 1 ++#endif ++ ++#include "version.h" ++ ++/* Define to 1 if unsetenv returns void instead of int. */ ++/* #undef VOID_UNSETENV */ ++ ++/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type ++ 'wchar_t'. */ ++/* #undef WCHAR_T_SUFFIX */ ++ ++/* Define if WSAStartup is needed. */ ++#define WINDOWS_SOCKETS 1 ++ ++/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type ++ 'wint_t'. */ ++/* #undef WINT_T_SUFFIX */ ++ ++/* Define this if a working libregex can be found */ ++/* #undef WITH_LIBREGEX */ ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Enable large inode numbers on Mac OS X 10.5. */ ++#define _DARWIN_USE_64_BIT_INODE 1 ++ ++/* Number of bits in a file offset, on hosts where this is settable. */ ++#define _FILE_OFFSET_BITS 64 ++ ++/* Define to 1 if Gnulib overrides 'struct stat' on Windows so that struct ++ stat.st_size becomes 64-bit. */ ++#define _GL_WINDOWS_64_BIT_ST_SIZE 1 ++ ++/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ ++/* #undef _LARGEFILE_SOURCE */ ++ ++/* Define for large files, on AIX-style hosts. */ ++/* #undef _LARGE_FILES */ ++ ++/* Define to 1 if on MINIX. */ ++/* #undef _MINIX */ ++ ++/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ ++/* #undef _NETBSD_SOURCE */ ++ ++/* The _Noreturn keyword of C11. */ ++#if ! (defined _Noreturn \ ++ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) ++# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ ++ || 0x5110 <= __SUNPRO_C) ++# define _Noreturn __attribute__ ((__noreturn__)) ++# elif defined _MSC_VER && 1200 <= _MSC_VER ++# define _Noreturn __declspec (noreturn) ++# else ++# define _Noreturn ++# endif ++#endif ++ ++/* Define to 2 if the system does not provide POSIX.1 features except with ++ this defined. */ ++/* #undef _POSIX_1_SOURCE */ ++ ++/* Define to 1 in order to get the POSIX compatible declarations of socket ++ functions. */ ++/* #undef _POSIX_PII_SOCKET */ ++ ++/* Define to 1 if you need to in order for 'stat' and other things to work. */ ++/* #undef _POSIX_SOURCE */ ++ ++/* Define to 1 if the system <stdint.h> predates C++11. */ ++/* #undef __STDC_CONSTANT_MACROS */ ++ ++/* Define to 1 if the system <stdint.h> predates C++11. */ ++/* #undef __STDC_LIMIT_MACROS */ ++ ++/* Define as a replacement for the ISO C99 __func__ variable. */ ++/* #undef __func__ */ ++ ++/* Please see the Gnulib manual for how to use these macros. ++ ++ Suppress extern inline with HP-UX cc, as it appears to be broken; see ++ <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>. ++ ++ Suppress extern inline with Sun C in standards-conformance mode, as it ++ mishandles inline functions that call each other. E.g., for 'inline void f ++ (void) { } inline void g (void) { f (); }', c99 incorrectly complains ++ 'reference to static identifier "f" in extern inline function'. ++ This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. ++ ++ Suppress the use of extern inline on problematic Apple configurations. ++ OS X 10.8 and earlier mishandle it; see, e.g., ++ <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. ++ OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and ++ for clang but remains for g++; see <http://trac.macports.org/ticket/41033>. ++ Perhaps Apple will fix this some day. */ ++#if (defined __APPLE__ \ ++ && (defined __header_inline \ ++ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ ++ && ! defined __clang__) \ ++ : ((! defined _DONT_USE_CTYPE_INLINE_ \ ++ && (defined __GNUC__ || defined __cplusplus)) \ ++ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ ++ && defined __GNUC__ && ! defined __cplusplus)))) ++# define _GL_EXTERN_INLINE_APPLE_BUG ++#endif ++#if ((__GNUC__ \ ++ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ ++ : (199901L <= __STDC_VERSION__ \ ++ && !defined __HP_cc \ ++ && !(defined __SUNPRO_C && __STDC__))) \ ++ && !defined _GL_EXTERN_INLINE_APPLE_BUG) ++# define _GL_INLINE inline ++# define _GL_EXTERN_INLINE extern inline ++# define _GL_EXTERN_INLINE_IN_USE ++#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ ++ && !defined _GL_EXTERN_INLINE_APPLE_BUG) ++# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ ++ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ ++# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) ++# else ++# define _GL_INLINE extern inline ++# endif ++# define _GL_EXTERN_INLINE extern ++# define _GL_EXTERN_INLINE_IN_USE ++#else ++# define _GL_INLINE static _GL_UNUSED ++# define _GL_EXTERN_INLINE static _GL_UNUSED ++#endif ++ ++#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) ++# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ ++# define _GL_INLINE_HEADER_CONST_PRAGMA ++# else ++# define _GL_INLINE_HEADER_CONST_PRAGMA \ ++ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") ++# endif ++ /* Suppress GCC's bogus "no previous prototype for 'FOO'" ++ and "no previous declaration for 'FOO'" diagnostics, ++ when FOO is an inline function in the header; see ++ <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>. */ ++# define _GL_INLINE_HEADER_BEGIN \ ++ _Pragma ("GCC diagnostic push") \ ++ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ ++ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ ++ _GL_INLINE_HEADER_CONST_PRAGMA ++# define _GL_INLINE_HEADER_END \ ++ _Pragma ("GCC diagnostic pop") ++#else ++# define _GL_INLINE_HEADER_BEGIN ++# define _GL_INLINE_HEADER_END ++#endif ++ ++/* static lib rename */ ++#define fread_file _gnutls_fread_file ++ ++/* Define to `int' if <sys/types.h> doesn't define. */ ++#define gid_t int ++ ++/* Define to `__inline__' or `__inline' if that's what the C compiler ++ calls it, or to nothing if 'inline' is not supported under any name. */ ++#ifndef __cplusplus ++/* #undef inline */ ++#endif ++ ++/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */ ++/* #undef intmax_t */ ++ ++/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports ++ the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of ++ earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. ++ __APPLE__ && __MACH__ test for Mac OS X. ++ __APPLE_CC__ tests for the Apple compiler and its version. ++ __STDC_VERSION__ tests for the C99 mode. */ ++#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ ++# define __GNUC_STDC_INLINE__ 1 ++#endif ++ ++/* Define to the real name of the mktime_internal function. */ ++/* #undef mktime_internal */ ++ ++/* Define to `int' if <sys/types.h> does not define. */ ++/* #undef mode_t */ ++ ++/* Define to the name of the strftime replacement function. */ ++#define my_strftime nstrftime ++ ++/* Define to the type of st_nlink in struct stat, or a supertype. */ ++#define nlink_t int ++ ++/* Define to `int' if <sys/types.h> does not define. */ ++/* #undef pid_t */ ++ ++/* Define as the type of the result of subtracting two pointers, if the system ++ doesn't define it. */ ++/* #undef ptrdiff_t */ ++ ++/* static lib rename */ ++#define read_binary_file _gnutls_read_binary_file ++ ++/* static lib rename */ ++#define read_file _gnutls_read_file ++ ++/* Define to the equivalent of the C99 'restrict' keyword, or to ++ nothing if this is not supported. Do not define if restrict is ++ supported directly. */ ++#define restrict //__restrict ++/* Work around a bug in Sun C++: it does not support _Restrict or ++ __restrict__, even though the corresponding Sun C compiler ends up with ++ "#define restrict _Restrict" or "#define restrict __restrict__" in the ++ previous line. Perhaps some future version of Sun C++ will work with ++ restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ ++#if defined __SUNPRO_CC && !defined __RESTRICT ++# define _Restrict ++# define __restrict__ ++#endif ++ ++/* Define to `unsigned int' if <sys/types.h> does not define. */ ++/* #undef size_t */ ++ ++/* type to use in place of socklen_t if not defined */ ++/* #undef socklen_t */ ++ ++/* Define as a signed type of the same size as size_t. */ ++/* #undef ssize_t */ ++ ++/* Define to `int' if <sys/types.h> doesn't define. */ ++#define uid_t int ++ ++/* Define as a marker that can be attached to declarations that might not ++ be used. This helps to reduce warnings, such as from ++ GCC -Wunused-parameter. */ ++#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) ++# define _GL_UNUSED __attribute__ ((__unused__)) ++#else ++# define _GL_UNUSED ++#endif ++/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name ++ is a misnomer outside of parameter lists. */ ++#define _UNUSED_PARAMETER_ _GL_UNUSED ++ ++/* gcc supports the "unused" attribute on possibly unused labels, and ++ g++ has since version 4.5. Note to support C++ as well as C, ++ _GL_UNUSED_LABEL should be used with a trailing ; */ ++#if !defined __cplusplus || __GNUC__ > 4 \ ++ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) ++# define _GL_UNUSED_LABEL _GL_UNUSED ++#else ++# define _GL_UNUSED_LABEL ++#endif ++ ++/* The __pure__ attribute was added in gcc 2.96. */ ++#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) ++# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) ++#else ++# define _GL_ATTRIBUTE_PURE /* empty */ ++#endif ++ ++/* The __const__ attribute was added in gcc 2.95. */ ++#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) ++# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) ++#else ++# define _GL_ATTRIBUTE_CONST /* empty */ ++#endif ++ ++/* Define as `fork' if `vfork' does not work. */ ++/* #undef vfork */ +diff --git a/SMP/dirent.h b/SMP/dirent.h +new file mode 100644 +index 0000000..5fc402e +--- /dev/null ++++ b/SMP/dirent.h +@@ -0,0 +1,757 @@ ++/* ++* MSVC dirent.h compatibility header. ++* ++* Permission is hereby granted, free of charge, to any person obtaining a copy ++* of this software and associated documentation files (the "Software"), to deal ++* in the Software without restriction, including without limitation the rights ++* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++* copies of the Software, and to permit persons to whom the Software is ++* furnished to do so, subject to the following conditions: ++* ++* The above copyright notice and this permission notice shall be included in ++* all copies or substantial portions of the Software. ++* ++* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++* THE SOFTWARE. ++*/ ++ ++#ifndef SMP_DIRENT_H ++#define SMP_DIRENT_H ++ ++#ifndef _MSC_VER ++# include_next <dirent.h> ++#else ++ ++#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_IX86) ++# define _X86_ ++#endif ++#include <stdio.h> ++#include <stdarg.h> ++#include <wtypes.h> ++#include <windef.h> ++#include <winbase.h> ++#include <wchar.h> ++#include <string.h> ++#include <stdlib.h> ++#include <malloc.h> ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <errno.h> ++ ++/* Indicates that d_type field is available in dirent structure */ ++#define _DIRENT_HAVE_D_TYPE ++ ++/* Indicates that d_namlen field is available in dirent structure */ ++#define _DIRENT_HAVE_D_NAMLEN ++ ++/* Entries missing from MSVC 6.0 */ ++#if !defined(FILE_ATTRIBUTE_DEVICE) ++# define FILE_ATTRIBUTE_DEVICE 0x40 ++#endif ++ ++/* File type and permission flags for stat() */ ++#if !defined(S_IFMT) ++# define S_IFMT _S_IFMT /* File type mask */ ++#endif ++#if !defined(S_IFDIR) ++# define S_IFDIR _S_IFDIR /* Directory */ ++#endif ++#if !defined(S_IFCHR) ++# define S_IFCHR _S_IFCHR /* Character device */ ++#endif ++#if !defined(S_IFFIFO) ++# define S_IFFIFO _S_IFFIFO /* Pipe */ ++#endif ++#if !defined(S_IFREG) ++# define S_IFREG _S_IFREG /* Regular file */ ++#endif ++#if !defined(S_IREAD) ++# define S_IREAD _S_IREAD /* Read permission */ ++#endif ++#if !defined(S_IWRITE) ++# define S_IWRITE _S_IWRITE /* Write permission */ ++#endif ++#if !defined(S_IEXEC) ++# define S_IEXEC _S_IEXEC /* Execute permission */ ++#endif ++#if !defined(S_IFIFO) ++# define S_IFIFO _S_IFIFO /* Pipe */ ++#endif ++#if !defined(S_IFBLK) ++# define S_IFBLK 0 /* Block device */ ++#endif ++#if !defined(S_IFLNK) ++# define S_IFLNK 0 /* Link */ ++#endif ++#if !defined(S_IFSOCK) ++# define S_IFSOCK 0 /* Socket */ ++#endif ++ ++#if defined(_MSC_VER) ++#if !defined(S_IRUSR) ++# define S_IRUSR S_IREAD /* Read user */ ++#endif ++#if !defined(S_IWUSR) ++# define S_IWUSR S_IWRITE /* Write user */ ++#endif ++#if !defined(S_IXUSR) ++# define S_IXUSR 0 /* Execute user */ ++#endif ++#if !defined(S_IRGRP) ++# define S_IRGRP 0 /* Read group */ ++#endif ++#if !defined(S_IWGRP) ++# define S_IWGRP 0 /* Write group */ ++#endif ++#if !defined(S_IXGRP) ++# define S_IXGRP 0 /* Execute group */ ++#endif ++#if !defined(S_IROTH) ++# define S_IROTH 0 /* Read others */ ++#endif ++#if !defined(S_IWOTH) ++# define S_IWOTH 0 /* Write others */ ++#endif ++#if !defined(S_IXOTH) ++# define S_IXOTH 0 /* Execute others */ ++#endif ++#endif ++ ++/* Maximum length of file name */ ++#if !defined(PATH_MAX) ++# define PATH_MAX MAX_PATH ++#endif ++#if !defined(FILENAME_MAX) ++# define FILENAME_MAX MAX_PATH ++#endif ++#if !defined(NAME_MAX) ++# define NAME_MAX FILENAME_MAX ++#endif ++ ++/* File type flags for d_type */ ++#define DT_UNKNOWN 0 ++#define DT_REG S_IFREG ++#define DT_DIR S_IFDIR ++#define DT_FIFO S_IFIFO ++#define DT_SOCK S_IFSOCK ++#define DT_CHR S_IFCHR ++#define DT_BLK S_IFBLK ++#define DT_LNK S_IFLNK ++ ++/* Macros for converting between st_mode and d_type */ ++#define IFTODT(mode) ((mode) & S_IFMT) ++#define DTTOIF(type) (type) ++ ++/* ++ * File type macros. Note that block devices, sockets and links cannot be ++ * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are ++ * only defined for compatibility. These macros should always return false ++ * on Windows. ++ */ ++#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) ++#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) ++#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) ++#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) ++#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) ++#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) ++#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) ++ ++/* Return the exact length of d_namlen without zero terminator */ ++#define _D_EXACT_NAMLEN(p) ((p)->d_namlen) ++ ++/* Return number of bytes needed to store d_namlen */ ++#define _D_ALLOC_NAMLEN(p) (PATH_MAX + 1) ++ ++/* Wide-character version */ ++struct _wdirent ++{ ++ long d_ino; /* Always zero */ ++ unsigned short d_reclen; /* Structure size */ ++ size_t d_namlen; /* Length of name without \0 */ ++ int d_type; /* File type */ ++ wchar_t d_name[PATH_MAX + 1]; /* File name */ ++}; ++typedef struct _wdirent _wdirent; ++ ++struct _WDIR ++{ ++ struct _wdirent ent; /* Current directory entry */ ++ WIN32_FIND_DATAW data; /* Private file data */ ++ int cached; /* True if data is valid */ ++ HANDLE handle; /* Win32 search handle */ ++ wchar_t *patt; /* Initial directory name */ ++}; ++typedef struct _WDIR _WDIR; ++ ++static _WDIR *_wopendir(const wchar_t *dirname); ++static struct _wdirent *_wreaddir(_WDIR *dirp); ++static int _wclosedir(_WDIR *dirp); ++static void _wrewinddir(_WDIR* dirp); ++ ++/* For compatibility with Symbian */ ++#define wdirent _wdirent ++#define WDIR _WDIR ++#define wopendir _wopendir ++#define wreaddir _wreaddir ++#define wclosedir _wclosedir ++#define wrewinddir _wrewinddir ++ ++/* Multi-byte character versions */ ++struct dirent ++{ ++ long d_ino; /* Always zero */ ++ unsigned short d_reclen; /* Structure size */ ++ size_t d_namlen; /* Length of name without \0 */ ++ int d_type; /* File type */ ++ char d_name[PATH_MAX + 1]; /* File name */ ++}; ++typedef struct dirent dirent; ++ ++struct DIR ++{ ++ struct dirent ent; ++ struct _WDIR *wdirp; ++}; ++typedef struct DIR DIR; ++ ++static DIR *opendir(const char *dirname); ++static struct dirent *readdir(DIR *dirp); ++static int closedir(DIR *dirp); ++static void rewinddir(DIR* dirp); ++ ++/* Internal utility functions */ ++static WIN32_FIND_DATAW *dirent_first(_WDIR *dirp); ++static WIN32_FIND_DATAW *dirent_next(_WDIR *dirp); ++ ++static int dirent_mbstowcs_s( ++ size_t *pReturnValue, ++ wchar_t *wcstr, ++ size_t sizeInWords, ++ const char *mbstr, ++ size_t count); ++ ++static int dirent_wcstombs_s( ++ size_t *pReturnValue, ++ char *mbstr, ++ size_t sizeInBytes, ++ const wchar_t *wcstr, ++ size_t count); ++ ++static void dirent_set_errno(int error); ++ ++/* ++ * Open directory stream DIRNAME for read and return a pointer to the ++ * internal working area that is used to retrieve individual directory ++ * entries. ++ */ ++static __inline _WDIR* _wopendir(const wchar_t *dirname) ++{ ++ _WDIR *dirp = NULL; ++ int error; ++ ++ /* Must have directory name */ ++ if (dirname == NULL || dirname[0] == '\0') { ++ dirent_set_errno(ENOENT); ++ return NULL; ++ } ++ ++ /* Allocate new _WDIR structure */ ++ dirp = (_WDIR*)malloc(sizeof(struct _WDIR)); ++ if (dirp != NULL) { ++ DWORD n; ++ ++ /* Reset _WDIR structure */ ++ dirp->handle = INVALID_HANDLE_VALUE; ++ dirp->patt = NULL; ++ dirp->cached = 0; ++ ++ /* Compute the length of full path plus zero terminator */ ++ n = GetFullPathNameW(dirname, 0, NULL, NULL); ++ ++ /* Allocate room for absolute directory name and search pattern */ ++ dirp->patt = (wchar_t*)malloc(sizeof(wchar_t) * n + 16); ++ if (dirp->patt) { ++ /* ++ * Convert relative directory name to an absolute one. This ++ * allows rewinddir() to function correctly even when current ++ * working directory is changed between opendir() and rewinddir(). ++ */ ++ n = GetFullPathNameW(dirname, n, dirp->patt, NULL); ++ if (n > 0) { ++ wchar_t *p; ++ ++ /* Append search pattern \* to the directory name */ ++ p = dirp->patt + n; ++ if (dirp->patt < p) { ++ switch (p[-1]) { ++ case '\\': ++ case '/': ++ case ':': ++ /* Directory ends in path separator, e.g. c:\temp\ */ ++ /*NOP*/; ++ break; ++ ++ default: ++ /* Directory name doesn't end in path separator */ ++ *p++ = '\\'; ++ } ++ } ++ *p++ = '*'; ++ *p = '\0'; ++ ++ /* Open directory stream and retrieve the first entry */ ++ if (dirent_first(dirp)) { ++ /* Directory stream opened successfully */ ++ error = 0; ++ } else { ++ /* Cannot retrieve first entry */ ++ error = 1; ++ dirent_set_errno(ENOENT); ++ } ++ } else { ++ /* Cannot retrieve full path name */ ++ dirent_set_errno(ENOENT); ++ error = 1; ++ } ++ } else { ++ /* Cannot allocate memory for search pattern */ ++ error = 1; ++ } ++ } else { ++ /* Cannot allocate _WDIR structure */ ++ error = 1; ++ } ++ ++ /* Clean up in case of error */ ++ if (error && dirp) { ++ _wclosedir(dirp); ++ dirp = NULL; ++ } ++ ++ return dirp; ++} ++ ++/* ++ * Read next directory entry. The directory entry is returned in dirent ++ * structure in the d_name field. Individual directory entries returned by ++ * this function include regular files, sub-directories, pseudo-directories ++ * "." and ".." as well as volume labels, hidden files and system files. ++ */ ++static __inline struct _wdirent* _wreaddir(_WDIR *dirp) ++{ ++ WIN32_FIND_DATAW *datap; ++ struct _wdirent *entp; ++ ++ /* Read next directory entry */ ++ datap = dirent_next(dirp); ++ if (datap) { ++ size_t n; ++ DWORD attr; ++ ++ /* Pointer to directory entry to return */ ++ entp = &dirp->ent; ++ ++ /* ++ * Copy file name as wide-character string. If the file name is too ++ * long to fit in to the destination buffer, then truncate file name ++ * to PATH_MAX characters and zero-terminate the buffer. ++ */ ++ n = 0; ++ while (n < PATH_MAX && datap->cFileName[n] != 0) { ++ entp->d_name[n] = datap->cFileName[n]; ++ n++; ++ } ++ dirp->ent.d_name[n] = 0; ++ ++ /* Length of file name excluding zero terminator */ ++ entp->d_namlen = n; ++ ++ /* File type */ ++ attr = datap->dwFileAttributes; ++ if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) { ++ entp->d_type = DT_CHR; ++ } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) { ++ entp->d_type = DT_DIR; ++ } else { ++ entp->d_type = DT_REG; ++ } ++ ++ /* Reset dummy fields */ ++ entp->d_ino = 0; ++ entp->d_reclen = sizeof(struct _wdirent); ++ } else { ++ /* Last directory entry read */ ++ entp = NULL; ++ } ++ ++ return entp; ++} ++ ++/* ++ * Close directory stream opened by opendir() function. This invalidates the ++ * DIR structure as well as any directory entry read previously by ++ * _wreaddir(). ++ */ ++static __inline int _wclosedir(_WDIR *dirp) ++{ ++ int ok; ++ if (dirp) { ++ /* Release search handle */ ++ if (dirp->handle != INVALID_HANDLE_VALUE) { ++ FindClose(dirp->handle); ++ dirp->handle = INVALID_HANDLE_VALUE; ++ } ++ ++ /* Release search pattern */ ++ if (dirp->patt) { ++ free(dirp->patt); ++ dirp->patt = NULL; ++ } ++ ++ /* Release directory structure */ ++ free(dirp); ++ ok = /*success*/0; ++ } else { ++ /* Invalid directory stream */ ++ dirent_set_errno(EBADF); ++ ok = /*failure*/-1; ++ } ++ return ok; ++} ++ ++/* ++ * Rewind directory stream such that _wreaddir() returns the very first ++ * file name again. ++ */ ++static __inline void _wrewinddir(_WDIR* dirp) ++{ ++ if (dirp) { ++ /* Release existing search handle */ ++ if (dirp->handle != INVALID_HANDLE_VALUE) { ++ FindClose(dirp->handle); ++ } ++ ++ /* Open new search handle */ ++ dirent_first(dirp); ++ } ++} ++ ++/* Get first directory entry (internal) */ ++static __inline WIN32_FIND_DATAW* dirent_first(_WDIR *dirp) ++{ ++ WIN32_FIND_DATAW *datap; ++ ++ /* Open directory and retrieve the first entry */ ++ dirp->handle = FindFirstFileW(dirp->patt, &dirp->data); ++ if (dirp->handle != INVALID_HANDLE_VALUE) { ++ /* a directory entry is now waiting in memory */ ++ datap = &dirp->data; ++ dirp->cached = 1; ++ } else { ++ /* Failed to re-open directory: no directory entry in memory */ ++ dirp->cached = 0; ++ datap = NULL; ++ } ++ return datap; ++} ++ ++/* Get next directory entry (internal) */ ++static __inline WIN32_FIND_DATAW* dirent_next(_WDIR *dirp) ++{ ++ WIN32_FIND_DATAW *p; ++ ++ /* Get next directory entry */ ++ if (dirp->cached != 0) { ++ /* A valid directory entry already in memory */ ++ p = &dirp->data; ++ dirp->cached = 0; ++ } else if (dirp->handle != INVALID_HANDLE_VALUE) { ++ /* Get the next directory entry from stream */ ++ if (FindNextFileW(dirp->handle, &dirp->data) != FALSE) { ++ /* Got a file */ ++ p = &dirp->data; ++ } else { ++ /* The very last entry has been processed or an error occured */ ++ FindClose(dirp->handle); ++ dirp->handle = INVALID_HANDLE_VALUE; ++ p = NULL; ++ } ++ } else { ++ /* End of directory stream reached */ ++ p = NULL; ++ } ++ return p; ++} ++ ++/* ++ * Open directory stream using plain old C-string. ++ */ ++static __inline DIR* opendir(const char *dirname) ++{ ++ struct DIR *dirp; ++ int error; ++ ++ /* Must have directory name */ ++ if (dirname == NULL || dirname[0] == '\0') { ++ dirent_set_errno(ENOENT); ++ return NULL; ++ } ++ ++ /* Allocate memory for DIR structure */ ++ dirp = (DIR*)malloc(sizeof(struct DIR)); ++ if (dirp) { ++ wchar_t wname[PATH_MAX + 1]; ++ size_t n; ++ ++ /* Convert directory name to wide-character string */ ++ error = dirent_mbstowcs_s( ++ &n, wname, PATH_MAX + 1, dirname, PATH_MAX); ++ if (!error) { ++ /* Open directory stream using wide-character name */ ++ dirp->wdirp = _wopendir(wname); ++ if (dirp->wdirp) { ++ /* Directory stream opened */ ++ error = 0; ++ } else { ++ /* Failed to open directory stream */ ++ error = 1; ++ } ++ } else { ++ /* ++ * Cannot convert file name to wide-character string. This ++ * occurs if the string contains invalid multi-byte sequences or ++ * the output buffer is too small to contain the resulting ++ * string. ++ */ ++ error = 1; ++ } ++ } else { ++ /* Cannot allocate DIR structure */ ++ error = 1; ++ } ++ ++ /* Clean up in case of error */ ++ if (error && dirp) { ++ free(dirp); ++ dirp = NULL; ++ } ++ ++ return dirp; ++} ++ ++/* ++ * Read next directory entry. ++ * ++ * When working with text consoles, please note that file names returned by ++ * readdir() are represented in the default ANSI code page while any output to ++ * console is typically formatted on another code page. Thus, non-ASCII ++ * characters in file names will not usually display correctly on console. The ++ * problem can be fixed in two ways: (1) change the character set of console ++ * to 1252 using chcp utility and use Lucida Console font, or (2) use ++ * _cprintf function when writing to console. The _cprinf() will re-encode ++ * ANSI strings to the console code page so many non-ASCII characters will ++ * display correcly. ++ */ ++static __inline struct dirent* readdir(DIR *dirp) ++{ ++ WIN32_FIND_DATAW *datap; ++ struct dirent *entp; ++ ++ /* Read next directory entry */ ++ datap = dirent_next(dirp->wdirp); ++ if (datap) { ++ size_t n; ++ int error; ++ ++ /* Attempt to convert file name to multi-byte string */ ++ error = dirent_wcstombs_s( ++ &n, dirp->ent.d_name, MAX_PATH + 1, datap->cFileName, MAX_PATH); ++ ++ /* ++ * If the file name cannot be represented by a multi-byte string, ++ * then attempt to use old 8+3 file name. This allows traditional ++ * Unix-code to access some file names despite of unicode ++ * characters, although file names may seem unfamiliar to the user. ++ * ++ * Be ware that the code below cannot come up with a short file ++ * name unless the file system provides one. At least ++ * VirtualBox shared folders fail to do this. ++ */ ++ if (error && datap->cAlternateFileName[0] != '\0') { ++ error = dirent_wcstombs_s( ++ &n, dirp->ent.d_name, MAX_PATH + 1, datap->cAlternateFileName, ++ sizeof(datap->cAlternateFileName) / ++ sizeof(datap->cAlternateFileName[0])); ++ } ++ ++ if (!error) { ++ DWORD attr; ++ ++ /* Initialize directory entry for return */ ++ entp = &dirp->ent; ++ ++ /* Length of file name excluding zero terminator */ ++ entp->d_namlen = n - 1; ++ ++ /* File attributes */ ++ attr = datap->dwFileAttributes; ++ if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) { ++ entp->d_type = DT_CHR; ++ } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) { ++ entp->d_type = DT_DIR; ++ } else { ++ entp->d_type = DT_REG; ++ } ++ ++ /* Reset dummy fields */ ++ entp->d_ino = 0; ++ entp->d_reclen = sizeof(struct dirent); ++ } else { ++ /* ++ * Cannot convert file name to multi-byte string so construct ++ * an errornous directory entry and return that. Note that ++ * we cannot return NULL as that would stop the processing ++ * of directory entries completely. ++ */ ++ entp = &dirp->ent; ++ entp->d_name[0] = '?'; ++ entp->d_name[1] = '\0'; ++ entp->d_namlen = 1; ++ entp->d_type = DT_UNKNOWN; ++ entp->d_ino = 0; ++ entp->d_reclen = 0; ++ } ++ } else { ++ /* No more directory entries */ ++ entp = NULL; ++ } ++ ++ return entp; ++} ++ ++/* ++ * Close directory stream. ++ */ ++static __inline int closedir(DIR *dirp) ++{ ++ int ok; ++ if (dirp) { ++ /* Close wide-character directory stream */ ++ ok = _wclosedir(dirp->wdirp); ++ dirp->wdirp = NULL; ++ ++ /* Release multi-byte character version */ ++ free(dirp); ++ } else { ++ /* Invalid directory stream */ ++ dirent_set_errno(EBADF); ++ ok = /*failure*/-1; ++ } ++ return ok; ++} ++ ++/* ++ * Rewind directory stream to beginning. ++ */ ++static __inline void rewinddir(DIR* dirp) ++{ ++ /* Rewind wide-character string directory stream */ ++ _wrewinddir(dirp->wdirp); ++} ++ ++/* Convert multi-byte string to wide character string */ ++static __inline int dirent_mbstowcs_s( ++ size_t *pReturnValue, ++ wchar_t *wcstr, ++ size_t sizeInWords, ++ const char *mbstr, ++ size_t count) ++{ ++ int error; ++ ++#if _MSC_VER >= 1400 ++ /* Microsoft Visual Studio 2005 or later */ ++ error = mbstowcs_s(pReturnValue, wcstr, sizeInWords, mbstr, count); ++#else ++ /* Older Visual Studio or non-Microsoft compiler */ ++ size_t n; ++ ++ /* Convert to wide-character string */ ++ n = mbstowcs(wcstr, mbstr, count); ++ if (n < sizeInWords) { ++ /* Zero-terminate output buffer */ ++ if (wcstr) { ++ wcstr[n] = 0; ++ } ++ ++ /* Length of resuting multi-byte string WITH zero terminator */ ++ if (pReturnValue) { ++ *pReturnValue = n + 1; ++ } ++ ++ /* Success */ ++ error = 0; ++ } else { ++ /* Could not convert string */ ++ error = 1; ++ } ++#endif ++ return error; ++} ++ ++/* Convert wide-character string to multi-byte string */ ++static __inline int dirent_wcstombs_s( ++ size_t *pReturnValue, ++ char *mbstr, ++ size_t sizeInBytes, ++ const wchar_t *wcstr, ++ size_t count) ++{ ++ int error; ++ ++#if _MSC_VER >= 1400 ++ /* Microsoft Visual Studio 2005 or later */ ++ error = wcstombs_s(pReturnValue, mbstr, sizeInBytes, wcstr, count); ++#else ++ /* Older Visual Studio or non-Microsoft compiler */ ++ size_t n; ++ ++ /* Convert to multi-byte string */ ++ n = wcstombs(mbstr, wcstr, count); ++ if (n < sizeInBytes) { ++ /* Zero-terminate output buffer */ ++ if (mbstr) { ++ mbstr[n] = '\0'; ++ } ++ ++ /* Lenght of resulting multi-bytes string WITH zero-terminator */ ++ if (pReturnValue) { ++ *pReturnValue = n + 1; ++ } ++ ++ /* Success */ ++ error = 0; ++ } else { ++ /* Cannot convert string */ ++ error = 1; ++ } ++#endif ++ ++ return error; ++} ++ ++/* Set errno variable */ ++static __inline void dirent_set_errno(int error) ++{ ++ /* Microsoft Visual Studio */ ++ _set_errno(error); ++} ++ ++#endif /* _MSC_VER */ ++ ++#endif /*SMP_DIRENT_H*/ +diff --git a/SMP/gnutls/gnutls.h b/SMP/gnutls/gnutls.h +new file mode 100644 +index 0000000..11e8af8 +--- /dev/null ++++ b/SMP/gnutls/gnutls.h +@@ -0,0 +1,3329 @@ ++/* -*- c -*- ++ * Copyright (C) 2000-2016 Free Software Foundation, Inc. ++ * Copyright (C) 2015-2016 Red Hat, Inc. ++ * ++ * Author: Nikos Mavrogiannopoulos ++ * ++ * This file is part of GnuTLS. ++ * ++ * The GnuTLS is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public License ++ * as published by the Free Software Foundation; either version 2.1 of ++ * the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public License ++ * along with this program. If not, see <https://www.gnu.org/licenses/> ++ * ++ */ ++ ++/* This file contains the types and prototypes for all the ++ * high level functionality of the gnutls main library. ++ * ++ * If the optional C++ binding was built, it is available in ++ * gnutls/gnutlsxx.h. ++ * ++ * The openssl compatibility layer (which is under the GNU GPL ++ * license) is in gnutls/openssl.h. ++ * ++ * The low level cipher functionality is in gnutls/crypto.h. ++ */ ++ ++#ifndef GNUTLS_H ++#define GNUTLS_H ++ ++/* Get size_t. */ ++#include <stddef.h> ++/* Get ssize_t. */ ++#ifndef HAVE_SSIZE_T ++#define HAVE_SSIZE_T ++/* *INDENT-OFF* */ ++#include <sys/types.h> ++#include <BaseTsd.h> ++typedef SSIZE_T ssize_t; ++/* *INDENT-ON* */ ++#endif ++/* Get time_t. */ ++#include <time.h> ++ ++/* *INDENT-OFF* */ ++#ifdef __cplusplus ++extern "C" { ++#endif ++/* *INDENT-ON* */ ++ ++#define GNUTLS_VERSION "3.6.7" ++ ++#define GNUTLS_VERSION_MAJOR 3 ++#define GNUTLS_VERSION_MINOR 6 ++#define GNUTLS_VERSION_PATCH 7 ++ ++#define GNUTLS_VERSION_NUMBER 0x030607 ++ ++#define GNUTLS_CIPHER_RIJNDAEL_128_CBC GNUTLS_CIPHER_AES_128_CBC ++#define GNUTLS_CIPHER_RIJNDAEL_256_CBC GNUTLS_CIPHER_AES_256_CBC ++#define GNUTLS_CIPHER_RIJNDAEL_CBC GNUTLS_CIPHER_AES_128_CBC ++#define GNUTLS_CIPHER_ARCFOUR GNUTLS_CIPHER_ARCFOUR_128 ++ ++#if !defined(GNUTLS_INTERNAL_BUILD) && defined(_WIN32) ++# define _SYM_EXPORT __declspec(dllimport) ++#else ++# define _SYM_EXPORT ++#endif ++ ++#ifdef __GNUC__ ++# define __GNUTLS_CONST__ __attribute__((const)) ++# define __GNUTLS_PURE__ __attribute__((pure)) ++#else ++# define __GNUTLS_CONST__ ++# define __GNUTLS_PURE__ ++#endif ++ ++/* Use the following definition globally in your program to disable ++ * implicit initialization of gnutls. */ ++#define GNUTLS_SKIP_GLOBAL_INIT int _gnutls_global_init_skip(void); \ ++ int _gnutls_global_init_skip(void) {return 1;} ++ ++/** ++ * gnutls_cipher_algorithm_t: ++ * @GNUTLS_CIPHER_UNKNOWN: Value to identify an unknown/unsupported algorithm. ++ * @GNUTLS_CIPHER_NULL: The NULL (identity) encryption algorithm. ++ * @GNUTLS_CIPHER_ARCFOUR_128: ARCFOUR stream cipher with 128-bit keys. ++ * @GNUTLS_CIPHER_3DES_CBC: 3DES in CBC mode. ++ * @GNUTLS_CIPHER_AES_128_CBC: AES in CBC mode with 128-bit keys. ++ * @GNUTLS_CIPHER_AES_192_CBC: AES in CBC mode with 192-bit keys. ++ * @GNUTLS_CIPHER_AES_256_CBC: AES in CBC mode with 256-bit keys. ++ * @GNUTLS_CIPHER_AES_128_CFB8: AES in CFB8 mode with 128-bit keys. ++ * @GNUTLS_CIPHER_AES_192_CFB8: AES in CFB8 mode with 192-bit keys. ++ * @GNUTLS_CIPHER_AES_256_CFB8: AES in CFB8 mode with 256-bit keys. ++ * @GNUTLS_CIPHER_ARCFOUR_40: ARCFOUR stream cipher with 40-bit keys. ++ * @GNUTLS_CIPHER_CAMELLIA_128_CBC: Camellia in CBC mode with 128-bit keys. ++ * @GNUTLS_CIPHER_CAMELLIA_192_CBC: Camellia in CBC mode with 192-bit keys. ++ * @GNUTLS_CIPHER_CAMELLIA_256_CBC: Camellia in CBC mode with 256-bit keys. ++ * @GNUTLS_CIPHER_RC2_40_CBC: RC2 in CBC mode with 40-bit keys. ++ * @GNUTLS_CIPHER_DES_CBC: DES in CBC mode (56-bit keys). ++ * @GNUTLS_CIPHER_AES_128_GCM: AES in GCM mode with 128-bit keys. ++ * @GNUTLS_CIPHER_AES_256_GCM: AES in GCM mode with 256-bit keys. ++ * @GNUTLS_CIPHER_AES_128_CCM: AES in CCM mode with 128-bit keys. ++ * @GNUTLS_CIPHER_AES_256_CCM: AES in CCM mode with 256-bit keys. ++ * @GNUTLS_CIPHER_AES_128_CCM_8: AES in CCM mode with 64-bit tag and 128-bit keys. ++ * @GNUTLS_CIPHER_AES_256_CCM_8: AES in CCM mode with 64-bit tag and 256-bit keys. ++ * @GNUTLS_CIPHER_CAMELLIA_128_GCM: CAMELLIA in GCM mode with 128-bit keys. ++ * @GNUTLS_CIPHER_CAMELLIA_256_GCM: CAMELLIA in GCM mode with 256-bit keys. ++ * @GNUTLS_CIPHER_SALSA20_256: Salsa20 with 256-bit keys. ++ * @GNUTLS_CIPHER_ESTREAM_SALSA20_256: Estream's Salsa20 variant with 256-bit keys. ++ * @GNUTLS_CIPHER_CHACHA20_POLY1305: The Chacha20 cipher with the Poly1305 authenticator (AEAD). ++ * @GNUTLS_CIPHER_GOST28147_TC26Z_CFB: GOST 28147-89 (Magma) cipher in CFB mode with TC26 Z S-box. ++ * @GNUTLS_CIPHER_GOST28147_CPA_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro A S-box. ++ * @GNUTLS_CIPHER_GOST28147_CPB_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro B S-box. ++ * @GNUTLS_CIPHER_GOST28147_CPC_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro C S-box. ++ * @GNUTLS_CIPHER_GOST28147_CPD_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro D S-box. ++ * @GNUTLS_CIPHER_IDEA_PGP_CFB: IDEA in CFB mode (placeholder - unsupported). ++ * @GNUTLS_CIPHER_3DES_PGP_CFB: 3DES in CFB mode (placeholder - unsupported). ++ * @GNUTLS_CIPHER_CAST5_PGP_CFB: CAST5 in CFB mode (placeholder - unsupported). ++ * @GNUTLS_CIPHER_BLOWFISH_PGP_CFB: Blowfish in CFB mode (placeholder - unsupported). ++ * @GNUTLS_CIPHER_SAFER_SK128_PGP_CFB: Safer-SK in CFB mode with 128-bit keys (placeholder - unsupported). ++ * @GNUTLS_CIPHER_AES128_PGP_CFB: AES in CFB mode with 128-bit keys (placeholder - unsupported). ++ * @GNUTLS_CIPHER_AES192_PGP_CFB: AES in CFB mode with 192-bit keys (placeholder - unsupported). ++ * @GNUTLS_CIPHER_AES256_PGP_CFB: AES in CFB mode with 256-bit keys (placeholder - unsupported). ++ * @GNUTLS_CIPHER_TWOFISH_PGP_CFB: Twofish in CFB mode (placeholder - unsupported). ++ * ++ * Enumeration of different symmetric encryption algorithms. ++ */ ++typedef enum gnutls_cipher_algorithm { ++ GNUTLS_CIPHER_UNKNOWN = 0, ++ GNUTLS_CIPHER_NULL = 1, ++ GNUTLS_CIPHER_ARCFOUR_128 = 2, ++ GNUTLS_CIPHER_3DES_CBC = 3, ++ GNUTLS_CIPHER_AES_128_CBC = 4, ++ GNUTLS_CIPHER_AES_256_CBC = 5, ++ GNUTLS_CIPHER_ARCFOUR_40 = 6, ++ GNUTLS_CIPHER_CAMELLIA_128_CBC = 7, ++ GNUTLS_CIPHER_CAMELLIA_256_CBC = 8, ++ GNUTLS_CIPHER_AES_192_CBC = 9, ++ GNUTLS_CIPHER_AES_128_GCM = 10, ++ GNUTLS_CIPHER_AES_256_GCM = 11, ++ GNUTLS_CIPHER_CAMELLIA_192_CBC = 12, ++ GNUTLS_CIPHER_SALSA20_256 = 13, ++ GNUTLS_CIPHER_ESTREAM_SALSA20_256 = 14, ++ GNUTLS_CIPHER_CAMELLIA_128_GCM = 15, ++ GNUTLS_CIPHER_CAMELLIA_256_GCM = 16, ++ GNUTLS_CIPHER_RC2_40_CBC = 17, ++ GNUTLS_CIPHER_DES_CBC = 18, ++ GNUTLS_CIPHER_AES_128_CCM = 19, ++ GNUTLS_CIPHER_AES_256_CCM = 20, ++ GNUTLS_CIPHER_AES_128_CCM_8 = 21, ++ GNUTLS_CIPHER_AES_256_CCM_8 = 22, ++ GNUTLS_CIPHER_CHACHA20_POLY1305 = 23, ++ GNUTLS_CIPHER_GOST28147_TC26Z_CFB = 24, ++ GNUTLS_CIPHER_GOST28147_CPA_CFB = 25, ++ GNUTLS_CIPHER_GOST28147_CPB_CFB = 26, ++ GNUTLS_CIPHER_GOST28147_CPC_CFB = 27, ++ GNUTLS_CIPHER_GOST28147_CPD_CFB = 28, ++ GNUTLS_CIPHER_AES_128_CFB8 = 29, ++ GNUTLS_CIPHER_AES_192_CFB8 = 30, ++ GNUTLS_CIPHER_AES_256_CFB8 = 31, ++ ++ /* used only for PGP internals. Ignored in TLS/SSL ++ */ ++ GNUTLS_CIPHER_IDEA_PGP_CFB = 200, ++ GNUTLS_CIPHER_3DES_PGP_CFB = 201, ++ GNUTLS_CIPHER_CAST5_PGP_CFB = 202, ++ GNUTLS_CIPHER_BLOWFISH_PGP_CFB = 203, ++ GNUTLS_CIPHER_SAFER_SK128_PGP_CFB = 204, ++ GNUTLS_CIPHER_AES128_PGP_CFB = 205, ++ GNUTLS_CIPHER_AES192_PGP_CFB = 206, ++ GNUTLS_CIPHER_AES256_PGP_CFB = 207, ++ GNUTLS_CIPHER_TWOFISH_PGP_CFB = 208 ++} gnutls_cipher_algorithm_t; ++ ++/** ++ * gnutls_kx_algorithm_t: ++ * @GNUTLS_KX_UNKNOWN: Unknown key-exchange algorithm. ++ * @GNUTLS_KX_RSA: RSA key-exchange algorithm. ++ * @GNUTLS_KX_DHE_DSS: DHE-DSS key-exchange algorithm. ++ * @GNUTLS_KX_DHE_RSA: DHE-RSA key-exchange algorithm. ++ * @GNUTLS_KX_ECDHE_RSA: ECDHE-RSA key-exchange algorithm. ++ * @GNUTLS_KX_ECDHE_ECDSA: ECDHE-ECDSA key-exchange algorithm. ++ * @GNUTLS_KX_ANON_DH: Anon-DH key-exchange algorithm. ++ * @GNUTLS_KX_ANON_ECDH: Anon-ECDH key-exchange algorithm. ++ * @GNUTLS_KX_SRP: SRP key-exchange algorithm. ++ * @GNUTLS_KX_RSA_EXPORT: RSA-EXPORT key-exchange algorithm (defunc). ++ * @GNUTLS_KX_SRP_RSA: SRP-RSA key-exchange algorithm. ++ * @GNUTLS_KX_SRP_DSS: SRP-DSS key-exchange algorithm. ++ * @GNUTLS_KX_PSK: PSK key-exchange algorithm. ++ * @GNUTLS_KX_DHE_PSK: DHE-PSK key-exchange algorithm. ++ * @GNUTLS_KX_ECDHE_PSK: ECDHE-PSK key-exchange algorithm. ++ * @GNUTLS_KX_RSA_PSK: RSA-PSK key-exchange algorithm. ++ * ++ * Enumeration of different key exchange algorithms. ++ */ ++typedef enum { ++ GNUTLS_KX_UNKNOWN = 0, ++ GNUTLS_KX_RSA = 1, ++ GNUTLS_KX_DHE_DSS = 2, ++ GNUTLS_KX_DHE_RSA = 3, ++ GNUTLS_KX_ANON_DH = 4, ++ GNUTLS_KX_SRP = 5, ++ GNUTLS_KX_RSA_EXPORT = 6, ++ GNUTLS_KX_SRP_RSA = 7, ++ GNUTLS_KX_SRP_DSS = 8, ++ GNUTLS_KX_PSK = 9, ++ GNUTLS_KX_DHE_PSK = 10, ++ GNUTLS_KX_ANON_ECDH = 11, ++ GNUTLS_KX_ECDHE_RSA = 12, ++ GNUTLS_KX_ECDHE_ECDSA = 13, ++ GNUTLS_KX_ECDHE_PSK = 14, ++ GNUTLS_KX_RSA_PSK = 15 ++} gnutls_kx_algorithm_t; ++ ++/** ++ * gnutls_params_type_t: ++ * @GNUTLS_PARAMS_RSA_EXPORT: Session RSA-EXPORT parameters (defunc). ++ * @GNUTLS_PARAMS_DH: Session Diffie-Hellman parameters. ++ * @GNUTLS_PARAMS_ECDH: Session Elliptic-Curve Diffie-Hellman parameters. ++ * ++ * Enumeration of different TLS session parameter types. ++ */ ++typedef enum { ++ GNUTLS_PARAMS_RSA_EXPORT = 1, ++ GNUTLS_PARAMS_DH = 2, ++ GNUTLS_PARAMS_ECDH = 3 ++} gnutls_params_type_t; ++ ++/** ++ * gnutls_credentials_type_t: ++ * @GNUTLS_CRD_CERTIFICATE: Certificate credential. ++ * @GNUTLS_CRD_ANON: Anonymous credential. ++ * @GNUTLS_CRD_SRP: SRP credential. ++ * @GNUTLS_CRD_PSK: PSK credential. ++ * @GNUTLS_CRD_IA: IA credential. ++ * ++ * Enumeration of different credential types. ++ */ ++typedef enum { ++ GNUTLS_CRD_CERTIFICATE = 1, ++ GNUTLS_CRD_ANON, ++ GNUTLS_CRD_SRP, ++ GNUTLS_CRD_PSK, ++ GNUTLS_CRD_IA ++} gnutls_credentials_type_t; ++ ++#define GNUTLS_MAC_SHA GNUTLS_MAC_SHA1 ++#define GNUTLS_DIG_SHA GNUTLS_DIG_SHA1 ++ ++/** ++ * gnutls_mac_algorithm_t: ++ * @GNUTLS_MAC_UNKNOWN: Unknown MAC algorithm. ++ * @GNUTLS_MAC_NULL: NULL MAC algorithm (empty output). ++ * @GNUTLS_MAC_MD5: HMAC-MD5 algorithm. ++ * @GNUTLS_MAC_SHA1: HMAC-SHA-1 algorithm. ++ * @GNUTLS_MAC_RMD160: HMAC-RMD160 algorithm. ++ * @GNUTLS_MAC_MD2: HMAC-MD2 algorithm. ++ * @GNUTLS_MAC_SHA256: HMAC-SHA-256 algorithm. ++ * @GNUTLS_MAC_SHA384: HMAC-SHA-384 algorithm. ++ * @GNUTLS_MAC_SHA512: HMAC-SHA-512 algorithm. ++ * @GNUTLS_MAC_SHA224: HMAC-SHA-224 algorithm. ++ * @GNUTLS_MAC_MD5_SHA1: Combined MD5+SHA1 MAC placeholder. ++ * @GNUTLS_MAC_GOSTR_94: HMAC GOST R 34.11-94 algorithm. ++ * @GNUTLS_MAC_STREEBOG_256: HMAC GOST R 34.11-2001 (Streebog) algorithm, 256 bit. ++ * @GNUTLS_MAC_STREEBOG_512: HMAC GOST R 34.11-2001 (Streebog) algorithm, 512 bit. ++ * @GNUTLS_MAC_AEAD: MAC implicit through AEAD cipher. ++ * @GNUTLS_MAC_UMAC_96: The UMAC-96 MAC algorithm. ++ * @GNUTLS_MAC_UMAC_128: The UMAC-128 MAC algorithm. ++ * @GNUTLS_MAC_AES_CMAC_128: The AES-CMAC-128 MAC algorithm. ++ * @GNUTLS_MAC_AES_CMAC_256: The AES-CMAC-256 MAC algorithm. ++ * @GNUTLS_MAC_SHA3_224: Reserved; unimplemented. ++ * @GNUTLS_MAC_SHA3_256: Reserved; unimplemented. ++ * @GNUTLS_MAC_SHA3_384: Reserved; unimplemented. ++ * @GNUTLS_MAC_SHA3_512: Reserved; unimplemented. ++ * ++ * Enumeration of different Message Authentication Code (MAC) ++ * algorithms. ++ */ ++typedef enum { ++ GNUTLS_MAC_UNKNOWN = 0, ++ GNUTLS_MAC_NULL = 1, ++ GNUTLS_MAC_MD5 = 2, ++ GNUTLS_MAC_SHA1 = 3, ++ GNUTLS_MAC_RMD160 = 4, ++ GNUTLS_MAC_MD2 = 5, ++ GNUTLS_MAC_SHA256 = 6, ++ GNUTLS_MAC_SHA384 = 7, ++ GNUTLS_MAC_SHA512 = 8, ++ GNUTLS_MAC_SHA224 = 9, ++ GNUTLS_MAC_SHA3_224 = 10, /* reserved: no implementation */ ++ GNUTLS_MAC_SHA3_256 = 11, /* reserved: no implementation */ ++ GNUTLS_MAC_SHA3_384 = 12, /* reserved: no implementation */ ++ GNUTLS_MAC_SHA3_512 = 13, /* reserved: no implementation */ ++ GNUTLS_MAC_MD5_SHA1 = 14, /* reserved: no implementation */ ++ GNUTLS_MAC_GOSTR_94 = 15, ++ GNUTLS_MAC_STREEBOG_256 = 16, ++ GNUTLS_MAC_STREEBOG_512 = 17, ++ /* If you add anything here, make sure you align with ++ gnutls_digest_algorithm_t. */ ++ GNUTLS_MAC_AEAD = 200, /* indicates that MAC is on the cipher */ ++ GNUTLS_MAC_UMAC_96 = 201, ++ GNUTLS_MAC_UMAC_128 = 202, ++ GNUTLS_MAC_AES_CMAC_128 = 203, ++ GNUTLS_MAC_AES_CMAC_256 = 204, ++} gnutls_mac_algorithm_t; ++ ++/** ++ * gnutls_digest_algorithm_t: ++ * @GNUTLS_DIG_UNKNOWN: Unknown hash algorithm. ++ * @GNUTLS_DIG_NULL: NULL hash algorithm (empty output). ++ * @GNUTLS_DIG_MD5: MD5 algorithm. ++ * @GNUTLS_DIG_SHA1: SHA-1 algorithm. ++ * @GNUTLS_DIG_RMD160: RMD160 algorithm. ++ * @GNUTLS_DIG_MD2: MD2 algorithm. ++ * @GNUTLS_DIG_SHA256: SHA-256 algorithm. ++ * @GNUTLS_DIG_SHA384: SHA-384 algorithm. ++ * @GNUTLS_DIG_SHA512: SHA-512 algorithm. ++ * @GNUTLS_DIG_SHA224: SHA-224 algorithm. ++ * @GNUTLS_DIG_SHA3_224: SHA3-224 algorithm. ++ * @GNUTLS_DIG_SHA3_256: SHA3-256 algorithm. ++ * @GNUTLS_DIG_SHA3_384: SHA3-384 algorithm. ++ * @GNUTLS_DIG_SHA3_512: SHA3-512 algorithm. ++ * @GNUTLS_DIG_MD5_SHA1: Combined MD5+SHA1 algorithm. ++ * @GNUTLS_DIG_GOSTR_94: GOST R 34.11-94 algorithm. ++ * @GNUTLS_DIG_STREEBOG_256: GOST R 34.11-2001 (Streebog) algorithm, 256 bit. ++ * @GNUTLS_DIG_STREEBOG_512: GOST R 34.11-2001 (Streebog) algorithm, 512 bit. ++ * ++ * Enumeration of different digest (hash) algorithms. ++ */ ++typedef enum { ++ GNUTLS_DIG_UNKNOWN = GNUTLS_MAC_UNKNOWN, ++ GNUTLS_DIG_NULL = GNUTLS_MAC_NULL, ++ GNUTLS_DIG_MD5 = GNUTLS_MAC_MD5, ++ GNUTLS_DIG_SHA1 = GNUTLS_MAC_SHA1, ++ GNUTLS_DIG_RMD160 = GNUTLS_MAC_RMD160, ++ GNUTLS_DIG_MD2 = GNUTLS_MAC_MD2, ++ GNUTLS_DIG_SHA256 = GNUTLS_MAC_SHA256, ++ GNUTLS_DIG_SHA384 = GNUTLS_MAC_SHA384, ++ GNUTLS_DIG_SHA512 = GNUTLS_MAC_SHA512, ++ GNUTLS_DIG_SHA224 = GNUTLS_MAC_SHA224, ++ GNUTLS_DIG_SHA3_224 = GNUTLS_MAC_SHA3_224, ++ GNUTLS_DIG_SHA3_256 = GNUTLS_MAC_SHA3_256, ++ GNUTLS_DIG_SHA3_384 = GNUTLS_MAC_SHA3_384, ++ GNUTLS_DIG_SHA3_512 = GNUTLS_MAC_SHA3_512, ++ GNUTLS_DIG_MD5_SHA1 = GNUTLS_MAC_MD5_SHA1, ++ GNUTLS_DIG_GOSTR_94 = GNUTLS_MAC_GOSTR_94, ++ GNUTLS_DIG_STREEBOG_256 = GNUTLS_MAC_STREEBOG_256, ++ GNUTLS_DIG_STREEBOG_512 = GNUTLS_MAC_STREEBOG_512 ++ /* If you add anything here, make sure you align with ++ gnutls_mac_algorithm_t. */ ++} gnutls_digest_algorithm_t; ++ ++ /* exported for other gnutls headers. This is the maximum number of ++ * algorithms (ciphers, kx or macs). ++ */ ++#define GNUTLS_MAX_ALGORITHM_NUM 64 ++#define GNUTLS_MAX_SESSION_ID_SIZE 32 ++ ++/** ++ * gnutls_compression_method_t: ++ * @GNUTLS_COMP_UNKNOWN: Unknown compression method. ++ * @GNUTLS_COMP_NULL: The NULL compression method (no compression). ++ * @GNUTLS_COMP_DEFLATE: The DEFLATE compression method from zlib. ++ * @GNUTLS_COMP_ZLIB: Same as %GNUTLS_COMP_DEFLATE. ++ * ++ * Enumeration of different TLS compression methods. ++ */ ++typedef enum { ++ GNUTLS_COMP_UNKNOWN = 0, ++ GNUTLS_COMP_NULL = 1, ++ GNUTLS_COMP_DEFLATE = 2, ++ GNUTLS_COMP_ZLIB = GNUTLS_COMP_DEFLATE ++} gnutls_compression_method_t; ++ ++/** ++ * gnutls_init_flags_t: ++ * ++ * @GNUTLS_SERVER: Connection end is a server. ++ * @GNUTLS_CLIENT: Connection end is a client. ++ * @GNUTLS_DATAGRAM: Connection is datagram oriented (DTLS). Since 3.0.0. ++ * @GNUTLS_NONBLOCK: Connection should not block. Since 3.0.0. ++ * @GNUTLS_NO_SIGNAL: In systems where SIGPIPE is delivered on send, it will be disabled. That flag has effect in systems which support the MSG_NOSIGNAL sockets flag (since 3.4.2). ++ * @GNUTLS_NO_EXTENSIONS: Do not enable any TLS extensions by default (since 3.1.2). As TLS 1.2 and later require extensions this option is considered obsolete and should not be used. ++ * @GNUTLS_NO_REPLAY_PROTECTION: Disable any replay protection in DTLS. This must only be used if replay protection is achieved using other means. Since 3.2.2. ++ * @GNUTLS_ALLOW_ID_CHANGE: Allow the peer to replace its certificate, or change its ID during a rehandshake. This change is often used in attacks and thus prohibited by default. Since 3.5.0. ++ * @GNUTLS_ENABLE_FALSE_START: Enable the TLS false start on client side if the negotiated ciphersuites allow it. This will enable sending data prior to the handshake being complete, and may introduce a risk of crypto failure when combined with certain key exchanged; for that GnuTLS may not enable that option in ciphersuites that are known to be not safe for false start. Since 3.5.0. ++ * @GNUTLS_ENABLE_EARLY_START: Under TLS1.3 allow the server to return earlier than the full handshake ++ * finish; similarly to false start the handshake will be completed once data are received by the ++ * client, while the server is able to transmit sooner. This is not enabled by default as it could ++ * break certain existing server assumptions and use-cases. Since 3.6.4. ++ * @GNUTLS_ENABLE_EARLY_DATA: Under TLS1.3 allow the server to receive early data sent as part of the initial ClientHello (0-RTT). This is not enabled by default as early data has weaker security properties than other data. Since 3.6.5. ++ * @GNUTLS_FORCE_CLIENT_CERT: When in client side and only a single cert is specified, send that certificate irrespective of the issuers expected by the server. Since 3.5.0. ++ * @GNUTLS_NO_TICKETS: Flag to indicate that the session should not use resumption with session tickets. ++ * @GNUTLS_KEY_SHARE_TOP3: Generate key shares for the top-3 different groups which are enabled. ++ * That is, as each group is associated with a key type (EC, finite field, x25519), generate ++ * three keys using %GNUTLS_PK_DH, %GNUTLS_PK_EC, %GNUTLS_PK_ECDH_X25519 if all of them are enabled. ++ * @GNUTLS_KEY_SHARE_TOP2: Generate key shares for the top-2 different groups which are enabled. ++ * For example (ECDH + x25519). This is the default. ++ * @GNUTLS_KEY_SHARE_TOP: Generate key share for the first group which is enabled. ++ * For example x25519. This option is the most performant for client (less CPU spent ++ * generating keys), but if the server doesn't support the advertized option it may ++ * result to more roundtrips needed to discover the server's choice. ++ * @GNUTLS_NO_AUTO_REKEY: Disable auto-rekeying under TLS1.3. If this option is not specified ++ * gnutls will force a rekey after 2^24 records have been sent. ++ * @GNUTLS_POST_HANDSHAKE_AUTH: Enable post handshake authentication for server and client. When set and ++ * a server requests authentication after handshake %GNUTLS_E_REAUTH_REQUEST will be returned ++ * by gnutls_record_recv(). A client should then call gnutls_reauth() to re-authenticate. ++ * @GNUTLS_SAFE_PADDING_CHECK: Flag to indicate that the TLS 1.3 padding check will be done in a ++ * safe way which doesn't leak the pad size based on GnuTLS processing time. This is of use to ++ * applications which hide the length of transferred data via the TLS1.3 padding mechanism and ++ * are already taking steps to hide the data processing time. This comes at a performance ++ * penalty. ++ * @GNUTLS_AUTO_REAUTH: Enable transparent re-authentication in client side when the server ++ * requests to. That is, reauthentication is handled within gnutls_record_recv(), and ++ * the %GNUTLS_E_REHANDSHAKE or %GNUTLS_E_REAUTH_REQUEST are not returned. This must be ++ * enabled with %GNUTLS_POST_HANDSHAKE_AUTH for TLS1.3. Enabling this flag requires to restore ++ * interrupted calls to gnutls_record_recv() based on the output of gnutls_record_get_direction(), ++ * since gnutls_record_recv() could be interrupted when sending when this flag is enabled. ++ * Note this flag may not be used if you are using the same session for sending and receiving ++ * in different threads. ++ * @GNUTLS_ENABLE_EARLY_DATA: Under TLS1.3 allow the server to receive early data sent as part of the initial ClientHello (0-RTT). ++ * This is not enabled by default as early data has weaker security properties than other data. Since 3.6.5. ++ * @GNUTLS_ENABLE_RAWPK: Allows raw public-keys to be negotiated during the handshake. Since 3.6.6. ++ * ++ * Enumeration of different flags for gnutls_init() function. All the flags ++ * can be combined except @GNUTLS_SERVER and @GNUTLS_CLIENT which are mutually ++ * exclusive. ++ * ++ * The key share options relate to the TLS 1.3 key share extension ++ * which is a speculative key generation expecting that the server ++ * would support the generated key. ++ */ ++typedef enum { ++ GNUTLS_SERVER = 1, ++ GNUTLS_CLIENT = (1<<1), ++ GNUTLS_DATAGRAM = (1<<2), ++ GNUTLS_NONBLOCK = (1<<3), ++ GNUTLS_NO_EXTENSIONS = (1<<4), ++ GNUTLS_NO_REPLAY_PROTECTION = (1<<5), ++ GNUTLS_NO_SIGNAL = (1<<6), ++ GNUTLS_ALLOW_ID_CHANGE = (1<<7), ++ GNUTLS_ENABLE_FALSE_START = (1<<8), ++ GNUTLS_FORCE_CLIENT_CERT = (1<<9), ++ GNUTLS_NO_TICKETS = (1<<10), ++ GNUTLS_KEY_SHARE_TOP = (1<<11), ++ GNUTLS_KEY_SHARE_TOP2 = (1<<12), ++ GNUTLS_KEY_SHARE_TOP3 = (1<<13), ++ GNUTLS_POST_HANDSHAKE_AUTH = (1<<14), ++ GNUTLS_NO_AUTO_REKEY = (1<<15), ++ GNUTLS_SAFE_PADDING_CHECK = (1<<16), ++ GNUTLS_ENABLE_EARLY_START = (1<<17), ++ GNUTLS_ENABLE_RAWPK = (1<<18), ++ GNUTLS_AUTO_REAUTH = (1<<19), ++ GNUTLS_ENABLE_EARLY_DATA = (1<<20) ++} gnutls_init_flags_t; ++ ++/* compatibility defines (previous versions of gnutls ++ * used defines instead of enumerated values). */ ++#define GNUTLS_SERVER (1) ++#define GNUTLS_CLIENT (1<<1) ++#define GNUTLS_DATAGRAM (1<<2) ++#define GNUTLS_NONBLOCK (1<<3) ++#define GNUTLS_NO_EXTENSIONS (1<<4) ++#define GNUTLS_NO_REPLAY_PROTECTION (1<<5) ++#define GNUTLS_NO_SIGNAL (1<<6) ++#define GNUTLS_ALLOW_ID_CHANGE (1<<7) ++#define GNUTLS_ENABLE_FALSE_START (1<<8) ++#define GNUTLS_FORCE_CLIENT_CERT (1<<9) ++#define GNUTLS_NO_TICKETS (1<<10) ++#define GNUTLS_ENABLE_CERT_TYPE_NEG 0 ++ // Here for compatibility reasons ++ ++/** ++ * gnutls_alert_level_t: ++ * @GNUTLS_AL_WARNING: Alert of warning severity. ++ * @GNUTLS_AL_FATAL: Alert of fatal severity. ++ * ++ * Enumeration of different TLS alert severities. ++ */ ++typedef enum { ++ GNUTLS_AL_WARNING = 1, ++ GNUTLS_AL_FATAL ++} gnutls_alert_level_t; ++ ++/** ++ * gnutls_alert_description_t: ++ * @GNUTLS_A_CLOSE_NOTIFY: Close notify. ++ * @GNUTLS_A_UNEXPECTED_MESSAGE: Unexpected message. ++ * @GNUTLS_A_BAD_RECORD_MAC: Bad record MAC. ++ * @GNUTLS_A_DECRYPTION_FAILED: Decryption failed. ++ * @GNUTLS_A_RECORD_OVERFLOW: Record overflow. ++ * @GNUTLS_A_DECOMPRESSION_FAILURE: Decompression failed. ++ * @GNUTLS_A_HANDSHAKE_FAILURE: Handshake failed. ++ * @GNUTLS_A_SSL3_NO_CERTIFICATE: No certificate. ++ * @GNUTLS_A_BAD_CERTIFICATE: Certificate is bad. ++ * @GNUTLS_A_UNSUPPORTED_CERTIFICATE: Certificate is not supported. ++ * @GNUTLS_A_CERTIFICATE_REVOKED: Certificate was revoked. ++ * @GNUTLS_A_CERTIFICATE_EXPIRED: Certificate is expired. ++ * @GNUTLS_A_CERTIFICATE_UNKNOWN: Unknown certificate. ++ * @GNUTLS_A_ILLEGAL_PARAMETER: Illegal parameter. ++ * @GNUTLS_A_UNKNOWN_CA: CA is unknown. ++ * @GNUTLS_A_ACCESS_DENIED: Access was denied. ++ * @GNUTLS_A_DECODE_ERROR: Decode error. ++ * @GNUTLS_A_DECRYPT_ERROR: Decrypt error. ++ * @GNUTLS_A_EXPORT_RESTRICTION: Export restriction. ++ * @GNUTLS_A_PROTOCOL_VERSION: Error in protocol version. ++ * @GNUTLS_A_INSUFFICIENT_SECURITY: Insufficient security. ++ * @GNUTLS_A_INTERNAL_ERROR: Internal error. ++ * @GNUTLS_A_INAPPROPRIATE_FALLBACK: Inappropriate fallback, ++ * @GNUTLS_A_USER_CANCELED: User canceled. ++ * @GNUTLS_A_NO_RENEGOTIATION: No renegotiation is allowed. ++ * @GNUTLS_A_MISSING_EXTENSION: An extension was expected but was not seen ++ * @GNUTLS_A_UNSUPPORTED_EXTENSION: An unsupported extension was ++ * sent. ++ * @GNUTLS_A_CERTIFICATE_UNOBTAINABLE: Could not retrieve the ++ * specified certificate. ++ * @GNUTLS_A_UNRECOGNIZED_NAME: The server name sent was not ++ * recognized. ++ * @GNUTLS_A_UNKNOWN_PSK_IDENTITY: The SRP/PSK username is missing ++ * or not known. ++ * @GNUTLS_A_CERTIFICATE_REQUIRED: Certificate is required. ++ * @GNUTLS_A_NO_APPLICATION_PROTOCOL: The ALPN protocol requested is ++ * not supported by the peer. ++ * ++ * Enumeration of different TLS alerts. ++ */ ++typedef enum { ++ GNUTLS_A_CLOSE_NOTIFY, ++ GNUTLS_A_UNEXPECTED_MESSAGE = 10, ++ GNUTLS_A_BAD_RECORD_MAC = 20, ++ GNUTLS_A_DECRYPTION_FAILED, ++ GNUTLS_A_RECORD_OVERFLOW, ++ GNUTLS_A_DECOMPRESSION_FAILURE = 30, ++ GNUTLS_A_HANDSHAKE_FAILURE = 40, ++ GNUTLS_A_SSL3_NO_CERTIFICATE = 41, ++ GNUTLS_A_BAD_CERTIFICATE = 42, ++ GNUTLS_A_UNSUPPORTED_CERTIFICATE, ++ GNUTLS_A_CERTIFICATE_REVOKED, ++ GNUTLS_A_CERTIFICATE_EXPIRED, ++ GNUTLS_A_CERTIFICATE_UNKNOWN, ++ GNUTLS_A_ILLEGAL_PARAMETER, ++ GNUTLS_A_UNKNOWN_CA, ++ GNUTLS_A_ACCESS_DENIED, ++ GNUTLS_A_DECODE_ERROR = 50, ++ GNUTLS_A_DECRYPT_ERROR, ++ GNUTLS_A_EXPORT_RESTRICTION = 60, ++ GNUTLS_A_PROTOCOL_VERSION = 70, ++ GNUTLS_A_INSUFFICIENT_SECURITY, ++ GNUTLS_A_INTERNAL_ERROR = 80, ++ GNUTLS_A_INAPPROPRIATE_FALLBACK = 86, ++ GNUTLS_A_USER_CANCELED = 90, ++ GNUTLS_A_NO_RENEGOTIATION = 100, ++ GNUTLS_A_MISSING_EXTENSION = 109, ++ GNUTLS_A_UNSUPPORTED_EXTENSION = 110, ++ GNUTLS_A_CERTIFICATE_UNOBTAINABLE = 111, ++ GNUTLS_A_UNRECOGNIZED_NAME = 112, ++ GNUTLS_A_UNKNOWN_PSK_IDENTITY = 115, ++ GNUTLS_A_CERTIFICATE_REQUIRED = 116, ++ GNUTLS_A_NO_APPLICATION_PROTOCOL = 120, ++ GNUTLS_A_MAX = GNUTLS_A_NO_APPLICATION_PROTOCOL ++} gnutls_alert_description_t; ++ ++/** ++ * gnutls_handshake_description_t: ++ * @GNUTLS_HANDSHAKE_HELLO_REQUEST: Hello request. ++ * @GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST: DTLS Hello verify request. ++ * @GNUTLS_HANDSHAKE_CLIENT_HELLO: Client hello. ++ * @GNUTLS_HANDSHAKE_SERVER_HELLO: Server hello. ++ * @GNUTLS_HANDSHAKE_END_OF_EARLY_DATA: End of early data. ++ * @GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST: Hello retry request. ++ * @GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: New session ticket. ++ * @GNUTLS_HANDSHAKE_CERTIFICATE_PKT: Certificate packet. ++ * @GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: Server key exchange. ++ * @GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: Certificate request. ++ * @GNUTLS_HANDSHAKE_SERVER_HELLO_DONE: Server hello done. ++ * @GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: Certificate verify. ++ * @GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: Client key exchange. ++ * @GNUTLS_HANDSHAKE_FINISHED: Finished. ++ * @GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: Certificate status (OCSP). ++ * @GNUTLS_HANDSHAKE_KEY_UPDATE: TLS1.3 key update message. ++ * @GNUTLS_HANDSHAKE_SUPPLEMENTAL: Supplemental. ++ * @GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC: Change Cipher Spec. ++ * @GNUTLS_HANDSHAKE_CLIENT_HELLO_V2: SSLv2 Client Hello. ++ * @GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: Encrypted extensions message. ++ * ++ * Enumeration of different TLS handshake packets. ++ */ ++typedef enum { ++ GNUTLS_HANDSHAKE_HELLO_REQUEST = 0, ++ GNUTLS_HANDSHAKE_CLIENT_HELLO = 1, ++ GNUTLS_HANDSHAKE_SERVER_HELLO = 2, ++ GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST = 3, ++ GNUTLS_HANDSHAKE_NEW_SESSION_TICKET = 4, ++ GNUTLS_HANDSHAKE_END_OF_EARLY_DATA = 5, ++ GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS = 8, ++ GNUTLS_HANDSHAKE_CERTIFICATE_PKT = 11, ++ GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE = 12, ++ GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST = 13, ++ GNUTLS_HANDSHAKE_SERVER_HELLO_DONE = 14, ++ GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY = 15, ++ GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE = 16, ++ GNUTLS_HANDSHAKE_FINISHED = 20, ++ GNUTLS_HANDSHAKE_CERTIFICATE_STATUS = 22, ++ GNUTLS_HANDSHAKE_SUPPLEMENTAL = 23, ++ GNUTLS_HANDSHAKE_KEY_UPDATE = 24, ++ GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC = 254, ++ GNUTLS_HANDSHAKE_CLIENT_HELLO_V2 = 1024, ++ GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST = 1025, ++} gnutls_handshake_description_t; ++ ++#define GNUTLS_HANDSHAKE_ANY ((unsigned int)-1) ++ ++const char ++ *gnutls_handshake_description_get_name(gnutls_handshake_description_t ++ type); ++ ++/** ++ * gnutls_certificate_status_t: ++ * @GNUTLS_CERT_INVALID: The certificate is not signed by one of the ++ * known authorities or the signature is invalid (deprecated by the flags ++ * %GNUTLS_CERT_SIGNATURE_FAILURE and %GNUTLS_CERT_SIGNER_NOT_FOUND). ++ * @GNUTLS_CERT_SIGNATURE_FAILURE: The signature verification failed. ++ * @GNUTLS_CERT_REVOKED: Certificate is revoked by its authority. In X.509 this will be ++ * set only if CRLs are checked. ++ * @GNUTLS_CERT_SIGNER_NOT_FOUND: The certificate's issuer is not known. ++ * This is the case if the issuer is not included in the trusted certificate list. ++ * @GNUTLS_CERT_SIGNER_NOT_CA: The certificate's signer was not a CA. This ++ * may happen if this was a version 1 certificate, which is common with ++ * some CAs, or a version 3 certificate without the basic constrains extension. ++ * @GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE: The certificate's signer constraints were ++ * violated. ++ * @GNUTLS_CERT_INSECURE_ALGORITHM: The certificate was signed using an insecure ++ * algorithm such as MD2 or MD5. These algorithms have been broken and ++ * should not be trusted. ++ * @GNUTLS_CERT_NOT_ACTIVATED: The certificate is not yet activated. ++ * @GNUTLS_CERT_EXPIRED: The certificate has expired. ++ * @GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED: The revocation data are old and have been superseded. ++ * @GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE: The revocation data have a future issue date. ++ * @GNUTLS_CERT_UNEXPECTED_OWNER: The owner is not the expected one. ++ * @GNUTLS_CERT_MISMATCH: The certificate presented isn't the expected one (TOFU) ++ * @GNUTLS_CERT_PURPOSE_MISMATCH: The certificate or an intermediate does not match the intended purpose (extended key usage). ++ * @GNUTLS_CERT_MISSING_OCSP_STATUS: The certificate requires the server to send the certifiate status, but no status was received. ++ * @GNUTLS_CERT_INVALID_OCSP_STATUS: The received OCSP status response is invalid. ++ * @GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS: The certificate has extensions marked as critical which are not supported. ++ * ++ * Enumeration of certificate status codes. Note that the status ++ * bits may have different meanings in OpenPGP keys and X.509 ++ * certificate verification. ++ */ ++typedef enum { ++ GNUTLS_CERT_INVALID = 1 << 1, ++ GNUTLS_CERT_REVOKED = 1 << 5, ++ GNUTLS_CERT_SIGNER_NOT_FOUND = 1 << 6, ++ GNUTLS_CERT_SIGNER_NOT_CA = 1 << 7, ++ GNUTLS_CERT_INSECURE_ALGORITHM = 1 << 8, ++ GNUTLS_CERT_NOT_ACTIVATED = 1 << 9, ++ GNUTLS_CERT_EXPIRED = 1 << 10, ++ GNUTLS_CERT_SIGNATURE_FAILURE = 1 << 11, ++ GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED = 1 << 12, ++ GNUTLS_CERT_UNEXPECTED_OWNER = 1 << 14, ++ GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE = 1 << 15, ++ GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE = 1 << 16, ++ GNUTLS_CERT_MISMATCH = 1 << 17, ++ GNUTLS_CERT_PURPOSE_MISMATCH = 1 << 18, ++ GNUTLS_CERT_MISSING_OCSP_STATUS = 1 << 19, ++ GNUTLS_CERT_INVALID_OCSP_STATUS = 1 << 20, ++ GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS = 1 << 21 ++} gnutls_certificate_status_t; ++ ++/** ++ * gnutls_certificate_request_t: ++ * @GNUTLS_CERT_IGNORE: Ignore certificate. ++ * @GNUTLS_CERT_REQUEST: Request certificate. ++ * @GNUTLS_CERT_REQUIRE: Require certificate. ++ * ++ * Enumeration of certificate request types. ++ */ ++typedef enum { ++ GNUTLS_CERT_IGNORE = 0, ++ GNUTLS_CERT_REQUEST = 1, ++ GNUTLS_CERT_REQUIRE = 2 ++} gnutls_certificate_request_t; ++ ++/** ++ * gnutls_openpgp_crt_status_t: ++ * @GNUTLS_OPENPGP_CERT: Send entire certificate. ++ * @GNUTLS_OPENPGP_CERT_FINGERPRINT: Send only certificate fingerprint. ++ * ++ * Enumeration of ways to send OpenPGP certificate. ++ */ ++typedef enum { ++ GNUTLS_OPENPGP_CERT = 0, ++ GNUTLS_OPENPGP_CERT_FINGERPRINT = 1 ++} gnutls_openpgp_crt_status_t; ++ ++/** ++ * gnutls_close_request_t: ++ * @GNUTLS_SHUT_RDWR: Disallow further receives/sends. ++ * @GNUTLS_SHUT_WR: Disallow further sends. ++ * ++ * Enumeration of how TLS session should be terminated. See gnutls_bye(). ++ */ ++typedef enum { ++ GNUTLS_SHUT_RDWR = 0, ++ GNUTLS_SHUT_WR = 1 ++} gnutls_close_request_t; ++ ++/** ++ * gnutls_protocol_t: ++ * @GNUTLS_SSL3: SSL version 3.0. ++ * @GNUTLS_TLS1_0: TLS version 1.0. ++ * @GNUTLS_TLS1: Same as %GNUTLS_TLS1_0. ++ * @GNUTLS_TLS1_1: TLS version 1.1. ++ * @GNUTLS_TLS1_2: TLS version 1.2. ++ * @GNUTLS_TLS1_3: TLS version 1.3. ++ * @GNUTLS_DTLS1_0: DTLS version 1.0. ++ * @GNUTLS_DTLS1_2: DTLS version 1.2. ++ * @GNUTLS_DTLS0_9: DTLS version 0.9 (Cisco AnyConnect / OpenSSL 0.9.8e). ++ * @GNUTLS_TLS_VERSION_MAX: Maps to the highest supported TLS version. ++ * @GNUTLS_DTLS_VERSION_MAX: Maps to the highest supported DTLS version. ++ * @GNUTLS_VERSION_UNKNOWN: Unknown SSL/TLS version. ++ * ++ * Enumeration of different SSL/TLS protocol versions. ++ */ ++typedef enum { ++ GNUTLS_SSL3 = 1, ++ GNUTLS_TLS1_0 = 2, ++ GNUTLS_TLS1 = GNUTLS_TLS1_0, ++ GNUTLS_TLS1_1 = 3, ++ GNUTLS_TLS1_2 = 4, ++ GNUTLS_TLS1_3 = 5, ++ ++ GNUTLS_DTLS0_9 = 200, ++ GNUTLS_DTLS1_0 = 201, /* 201 */ ++ GNUTLS_DTLS1_2 = 202, ++ GNUTLS_DTLS_VERSION_MIN = GNUTLS_DTLS0_9, ++ GNUTLS_DTLS_VERSION_MAX = GNUTLS_DTLS1_2, ++ GNUTLS_TLS_VERSION_MAX = GNUTLS_TLS1_3, ++ GNUTLS_VERSION_UNKNOWN = 0xff /* change it to 0xffff */ ++} gnutls_protocol_t; ++ ++/** ++ * gnutls_certificate_type_t: ++ * @GNUTLS_CRT_UNKNOWN: Unknown certificate type. ++ * @GNUTLS_CRT_X509: X.509 Certificate. ++ * @GNUTLS_CRT_OPENPGP: OpenPGP certificate. ++ * @GNUTLS_CRT_RAWPK: Raw public-key (SubjectPublicKeyInfo) ++ * ++ * Enumeration of different certificate types. ++ */ ++typedef enum { ++ GNUTLS_CRT_UNKNOWN = 0, ++ GNUTLS_CRT_X509 = 1, ++ GNUTLS_CRT_OPENPGP = 2, ++ GNUTLS_CRT_RAWPK = 3, ++ GNUTLS_CRT_MAX = GNUTLS_CRT_RAWPK ++} gnutls_certificate_type_t; ++ ++/** ++ * gnutls_x509_crt_fmt_t: ++ * @GNUTLS_X509_FMT_DER: X.509 certificate in DER format (binary). ++ * @GNUTLS_X509_FMT_PEM: X.509 certificate in PEM format (text). ++ * ++ * Enumeration of different certificate encoding formats. ++ */ ++typedef enum { ++ GNUTLS_X509_FMT_DER = 0, ++ GNUTLS_X509_FMT_PEM = 1 ++} gnutls_x509_crt_fmt_t; ++ ++/** ++ * gnutls_certificate_print_formats_t: ++ * @GNUTLS_CRT_PRINT_FULL: Full information about certificate. ++ * @GNUTLS_CRT_PRINT_FULL_NUMBERS: Full information about certificate and include easy to parse public key parameters. ++ * @GNUTLS_CRT_PRINT_COMPACT: Information about certificate name in one line, plus identification of the public key. ++ * @GNUTLS_CRT_PRINT_ONELINE: Information about certificate in one line. ++ * @GNUTLS_CRT_PRINT_UNSIGNED_FULL: All info for an unsigned certificate. ++ * ++ * Enumeration of different certificate printing variants. ++ */ ++typedef enum gnutls_certificate_print_formats { ++ GNUTLS_CRT_PRINT_FULL = 0, ++ GNUTLS_CRT_PRINT_ONELINE = 1, ++ GNUTLS_CRT_PRINT_UNSIGNED_FULL = 2, ++ GNUTLS_CRT_PRINT_COMPACT = 3, ++ GNUTLS_CRT_PRINT_FULL_NUMBERS = 4 ++} gnutls_certificate_print_formats_t; ++ ++#define GNUTLS_PK_ECC GNUTLS_PK_ECDSA ++#define GNUTLS_PK_EC GNUTLS_PK_ECDSA ++ ++#define GNUTLS_PK_ECDHX GNUTLS_PK_ECDH_X25519 ++/** ++ * gnutls_pk_algorithm_t: ++ * @GNUTLS_PK_UNKNOWN: Unknown public-key algorithm. ++ * @GNUTLS_PK_RSA: RSA public-key algorithm. ++ * @GNUTLS_PK_RSA_PSS: RSA public-key algorithm, with PSS padding. ++ * @GNUTLS_PK_DSA: DSA public-key algorithm. ++ * @GNUTLS_PK_DH: Diffie-Hellman algorithm. Used to generate parameters. ++ * @GNUTLS_PK_ECDSA: Elliptic curve algorithm. These parameters are compatible with the ECDSA and ECDH algorithm. ++ * @GNUTLS_PK_ECDH_X25519: Elliptic curve algorithm, restricted to ECDH as per rfc7748. ++ * @GNUTLS_PK_EDDSA_ED25519: Edwards curve Digital signature algorithm. Used with SHA512 on signatures. ++ * @GNUTLS_PK_GOST_01: GOST R 34.10-2001 algorithm per rfc5832. ++ * @GNUTLS_PK_GOST_12_256: GOST R 34.10-2012 algorithm, 256-bit key per rfc7091. ++ * @GNUTLS_PK_GOST_12_512: GOST R 34.10-2012 algorithm, 512-bit key per rfc7091. ++ * ++ * Enumeration of different public-key algorithms. ++ */ ++typedef enum { ++ GNUTLS_PK_UNKNOWN = 0, ++ GNUTLS_PK_RSA = 1, ++ GNUTLS_PK_DSA = 2, ++ GNUTLS_PK_DH = 3, ++ GNUTLS_PK_ECDSA = 4, ++ GNUTLS_PK_ECDH_X25519 = 5, ++ GNUTLS_PK_RSA_PSS = 6, ++ GNUTLS_PK_EDDSA_ED25519 = 7, ++ GNUTLS_PK_GOST_01 = 8, ++ GNUTLS_PK_GOST_12_256 = 9, ++ GNUTLS_PK_GOST_12_512 = 10, ++ GNUTLS_PK_MAX = GNUTLS_PK_GOST_12_512 ++} gnutls_pk_algorithm_t; ++ ++const char *gnutls_pk_algorithm_get_name(gnutls_pk_algorithm_t algorithm); ++ ++/** ++ * gnutls_sign_algorithm_t: ++ * @GNUTLS_SIGN_UNKNOWN: Unknown signature algorithm. ++ * @GNUTLS_SIGN_RSA_RAW: Digital signature algorithm RSA with DigestInfo formatted data ++ * @GNUTLS_SIGN_RSA_SHA1: Digital signature algorithm RSA with SHA-1 ++ * @GNUTLS_SIGN_RSA_SHA: Same as %GNUTLS_SIGN_RSA_SHA1. ++ * @GNUTLS_SIGN_DSA_SHA1: Digital signature algorithm DSA with SHA-1 ++ * @GNUTLS_SIGN_DSA_SHA224: Digital signature algorithm DSA with SHA-224 ++ * @GNUTLS_SIGN_DSA_SHA256: Digital signature algorithm DSA with SHA-256 ++ * @GNUTLS_SIGN_DSA_SHA384: Digital signature algorithm DSA with SHA-384 ++ * @GNUTLS_SIGN_DSA_SHA512: Digital signature algorithm DSA with SHA-512 ++ * @GNUTLS_SIGN_DSA_SHA: Same as %GNUTLS_SIGN_DSA_SHA1. ++ * @GNUTLS_SIGN_RSA_MD5: Digital signature algorithm RSA with MD5. ++ * @GNUTLS_SIGN_RSA_MD2: Digital signature algorithm RSA with MD2. ++ * @GNUTLS_SIGN_RSA_RMD160: Digital signature algorithm RSA with RMD-160. ++ * @GNUTLS_SIGN_RSA_SHA256: Digital signature algorithm RSA with SHA-256. ++ * @GNUTLS_SIGN_RSA_SHA384: Digital signature algorithm RSA with SHA-384. ++ * @GNUTLS_SIGN_RSA_SHA512: Digital signature algorithm RSA with SHA-512. ++ * @GNUTLS_SIGN_RSA_SHA224: Digital signature algorithm RSA with SHA-224. ++ * @GNUTLS_SIGN_ECDSA_SHA1: ECDSA with SHA1. ++ * @GNUTLS_SIGN_ECDSA_SHA224: Digital signature algorithm ECDSA with SHA-224. ++ * @GNUTLS_SIGN_ECDSA_SHA256: Digital signature algorithm ECDSA with SHA-256. ++ * @GNUTLS_SIGN_ECDSA_SHA384: Digital signature algorithm ECDSA with SHA-384. ++ * @GNUTLS_SIGN_ECDSA_SHA512: Digital signature algorithm ECDSA with SHA-512. ++ * @GNUTLS_SIGN_ECDSA_SECP256R1_SHA256: Digital signature algorithm ECDSA-SECP256R1 with SHA-256 (used in TLS 1.3 but not PKIX). ++ * @GNUTLS_SIGN_ECDSA_SECP384R1_SHA384: Digital signature algorithm ECDSA-SECP384R1 with SHA-384 (used in TLS 1.3 but not PKIX). ++ * @GNUTLS_SIGN_ECDSA_SECP521R1_SHA512: Digital signature algorithm ECDSA-SECP521R1 with SHA-512 (used in TLS 1.3 but not PKIX). ++ * @GNUTLS_SIGN_ECDSA_SHA3_224: Digital signature algorithm ECDSA with SHA3-224. ++ * @GNUTLS_SIGN_ECDSA_SHA3_256: Digital signature algorithm ECDSA with SHA3-256. ++ * @GNUTLS_SIGN_ECDSA_SHA3_384: Digital signature algorithm ECDSA with SHA3-384. ++ * @GNUTLS_SIGN_ECDSA_SHA3_512: Digital signature algorithm ECDSA with SHA3-512. ++ * @GNUTLS_SIGN_DSA_SHA3_224: Digital signature algorithm DSA with SHA3-224. ++ * @GNUTLS_SIGN_DSA_SHA3_256: Digital signature algorithm DSA with SHA3-256. ++ * @GNUTLS_SIGN_DSA_SHA3_384: Digital signature algorithm DSA with SHA3-384. ++ * @GNUTLS_SIGN_DSA_SHA3_512: Digital signature algorithm DSA with SHA3-512. ++ * @GNUTLS_SIGN_RSA_SHA3_224: Digital signature algorithm RSA with SHA3-224. ++ * @GNUTLS_SIGN_RSA_SHA3_256: Digital signature algorithm RSA with SHA3-256. ++ * @GNUTLS_SIGN_RSA_SHA3_384: Digital signature algorithm RSA with SHA3-384. ++ * @GNUTLS_SIGN_RSA_SHA3_512: Digital signature algorithm RSA with SHA3-512. ++ * @GNUTLS_SIGN_RSA_PSS_RSAE_SHA256: Digital signature algorithm RSA with SHA-256, ++ * with PSS padding (RSA PKCS#1 1.5 certificate). This signature is identical ++ * to #GNUTLS_SIGN_RSA_PSS_SHA256, but they are distinct as the TLS1.3 protocol ++ * treats them differently. ++ * @GNUTLS_SIGN_RSA_PSS_RSAE_SHA384: Digital signature algorithm RSA with SHA-384, ++ * with PSS padding (RSA PKCS#1 1.5 certificate). This signature is identical ++ * to #GNUTLS_SIGN_RSA_PSS_SHA384, but they are distinct as the TLS1.3 protocol ++ * treats them differently. ++ * @GNUTLS_SIGN_RSA_PSS_RSAE_SHA512: Digital signature algorithm RSA with SHA-512, ++ * with PSS padding (RSA PKCS#1 1.5 certificate). This signature is identical ++ * to #GNUTLS_SIGN_RSA_PSS_SHA512, but they are distinct as the TLS1.3 protocol ++ * treats them differently. ++ * @GNUTLS_SIGN_RSA_PSS_SHA256: Digital signature algorithm RSA with SHA-256, with PSS padding (RSA-PSS certificate). ++ * @GNUTLS_SIGN_RSA_PSS_SHA384: Digital signature algorithm RSA with SHA-384, with PSS padding (RSA-PSS certificate). ++ * @GNUTLS_SIGN_RSA_PSS_SHA512: Digital signature algorithm RSA with SHA-512, with PSS padding (RSA-PSS certificate). ++ * @GNUTLS_SIGN_EDDSA_ED25519: Digital signature algorithm EdDSA with Ed25519 curve. ++ * @GNUTLS_SIGN_GOST_94: Digital signature algorithm GOST R 34.10-2001 with GOST R 34.11-94 ++ * @GNUTLS_SIGN_GOST_256: Digital signature algorithm GOST R 34.10-2012 with GOST R 34.11-2012 256 bit ++ * @GNUTLS_SIGN_GOST_512: Digital signature algorithm GOST R 34.10-2012 with GOST R 34.11-2012 512 bit ++ * ++ * Enumeration of different digital signature algorithms. ++ */ ++typedef enum { ++ GNUTLS_SIGN_UNKNOWN = 0, ++ GNUTLS_SIGN_RSA_SHA1 = 1, ++ GNUTLS_SIGN_RSA_SHA = GNUTLS_SIGN_RSA_SHA1, ++ GNUTLS_SIGN_DSA_SHA1 = 2, ++ GNUTLS_SIGN_DSA_SHA = GNUTLS_SIGN_DSA_SHA1, ++ GNUTLS_SIGN_RSA_MD5 = 3, ++ GNUTLS_SIGN_RSA_MD2 = 4, ++ GNUTLS_SIGN_RSA_RMD160 = 5, ++ GNUTLS_SIGN_RSA_SHA256 = 6, ++ GNUTLS_SIGN_RSA_SHA384 = 7, ++ GNUTLS_SIGN_RSA_SHA512 = 8, ++ GNUTLS_SIGN_RSA_SHA224 = 9, ++ GNUTLS_SIGN_DSA_SHA224 = 10, ++ GNUTLS_SIGN_DSA_SHA256 = 11, ++ GNUTLS_SIGN_ECDSA_SHA1 = 12, ++ GNUTLS_SIGN_ECDSA_SHA224 = 13, ++ GNUTLS_SIGN_ECDSA_SHA256 = 14, ++ GNUTLS_SIGN_ECDSA_SHA384 = 15, ++ GNUTLS_SIGN_ECDSA_SHA512 = 16, ++ GNUTLS_SIGN_DSA_SHA384 = 17, ++ GNUTLS_SIGN_DSA_SHA512 = 18, ++ GNUTLS_SIGN_ECDSA_SHA3_224 = 20, ++ GNUTLS_SIGN_ECDSA_SHA3_256 = 21, ++ GNUTLS_SIGN_ECDSA_SHA3_384 = 22, ++ GNUTLS_SIGN_ECDSA_SHA3_512 = 23, ++ ++ GNUTLS_SIGN_DSA_SHA3_224 = 24, ++ GNUTLS_SIGN_DSA_SHA3_256 = 25, ++ GNUTLS_SIGN_DSA_SHA3_384 = 26, ++ GNUTLS_SIGN_DSA_SHA3_512 = 27, ++ GNUTLS_SIGN_RSA_SHA3_224 = 28, ++ GNUTLS_SIGN_RSA_SHA3_256 = 29, ++ GNUTLS_SIGN_RSA_SHA3_384 = 30, ++ GNUTLS_SIGN_RSA_SHA3_512 = 31, ++ ++ GNUTLS_SIGN_RSA_PSS_SHA256 = 32, ++ GNUTLS_SIGN_RSA_PSS_SHA384 = 33, ++ GNUTLS_SIGN_RSA_PSS_SHA512 = 34, ++ GNUTLS_SIGN_EDDSA_ED25519 = 35, ++ GNUTLS_SIGN_RSA_RAW = 36, ++ ++ GNUTLS_SIGN_ECDSA_SECP256R1_SHA256 = 37, ++ GNUTLS_SIGN_ECDSA_SECP384R1_SHA384 = 38, ++ GNUTLS_SIGN_ECDSA_SECP521R1_SHA512 = 39, ++ ++ GNUTLS_SIGN_RSA_PSS_RSAE_SHA256 = 40, ++ GNUTLS_SIGN_RSA_PSS_RSAE_SHA384 = 41, ++ GNUTLS_SIGN_RSA_PSS_RSAE_SHA512 = 42, ++ ++ GNUTLS_SIGN_GOST_94 = 43, ++ GNUTLS_SIGN_GOST_256 = 44, ++ GNUTLS_SIGN_GOST_512 = 45, ++ GNUTLS_SIGN_MAX = GNUTLS_SIGN_GOST_512 ++} gnutls_sign_algorithm_t; ++ ++/** ++ * gnutls_ecc_curve_t: ++ * @GNUTLS_ECC_CURVE_INVALID: Cannot be known ++ * @GNUTLS_ECC_CURVE_SECP192R1: the SECP192R1 curve ++ * @GNUTLS_ECC_CURVE_SECP224R1: the SECP224R1 curve ++ * @GNUTLS_ECC_CURVE_SECP256R1: the SECP256R1 curve ++ * @GNUTLS_ECC_CURVE_SECP384R1: the SECP384R1 curve ++ * @GNUTLS_ECC_CURVE_SECP521R1: the SECP521R1 curve ++ * @GNUTLS_ECC_CURVE_X25519: the X25519 curve (ECDH only) ++ * @GNUTLS_ECC_CURVE_ED25519: the Ed25519 curve ++ * @GNUTLS_ECC_CURVE_GOST256CPA: GOST R 34.10 CryptoPro 256 A curve ++ * @GNUTLS_ECC_CURVE_GOST256CPB: GOST R 34.10 CryptoPro 256 B curve ++ * @GNUTLS_ECC_CURVE_GOST256CPC: GOST R 34.10 CryptoPro 256 C curve ++ * @GNUTLS_ECC_CURVE_GOST256CPXA: GOST R 34.10 CryptoPro 256 XchA curve ++ * @GNUTLS_ECC_CURVE_GOST256CPXB: GOST R 34.10 CryptoPro 256 XchB curve ++ * @GNUTLS_ECC_CURVE_GOST512A: GOST R 34.10 TC26 512 A curve ++ * @GNUTLS_ECC_CURVE_GOST512B: GOST R 34.10 TC26 512 B curve ++ * ++ * Enumeration of ECC curves. ++ */ ++typedef enum { ++ GNUTLS_ECC_CURVE_INVALID = 0, ++ GNUTLS_ECC_CURVE_SECP224R1, ++ GNUTLS_ECC_CURVE_SECP256R1, ++ GNUTLS_ECC_CURVE_SECP384R1, ++ GNUTLS_ECC_CURVE_SECP521R1, ++ GNUTLS_ECC_CURVE_SECP192R1, ++ GNUTLS_ECC_CURVE_X25519, ++ GNUTLS_ECC_CURVE_ED25519, ++ GNUTLS_ECC_CURVE_GOST256CPA, ++ GNUTLS_ECC_CURVE_GOST256CPB, ++ GNUTLS_ECC_CURVE_GOST256CPC, ++ GNUTLS_ECC_CURVE_GOST256CPXA, ++ GNUTLS_ECC_CURVE_GOST256CPXB, ++ GNUTLS_ECC_CURVE_GOST512A, ++ GNUTLS_ECC_CURVE_GOST512B, ++ GNUTLS_ECC_CURVE_MAX = GNUTLS_ECC_CURVE_GOST512B ++} gnutls_ecc_curve_t; ++ ++/** ++ * gnutls_group_t: ++ * @GNUTLS_GROUP_INVALID: Indicates unknown/invalid group ++ * @GNUTLS_GROUP_SECP192R1: the SECP192R1 curve group (legacy, only for TLS 1.2 compatibility) ++ * @GNUTLS_GROUP_SECP224R1: the SECP224R1 curve group (legacy, only for TLS 1.2 compatibility) ++ * @GNUTLS_GROUP_SECP256R1: the SECP256R1 curve group ++ * @GNUTLS_GROUP_SECP384R1: the SECP384R1 curve group ++ * @GNUTLS_GROUP_SECP521R1: the SECP521R1 curve group ++ * @GNUTLS_GROUP_X25519: the X25519 curve group ++ * @GNUTLS_GROUP_FFDHE2048: the FFDHE2048 group ++ * @GNUTLS_GROUP_FFDHE3072: the FFDHE3072 group ++ * @GNUTLS_GROUP_FFDHE4096: the FFDHE4096 group ++ * @GNUTLS_GROUP_FFDHE6144: the FFDHE6144 group ++ * @GNUTLS_GROUP_FFDHE8192: the FFDHE8192 group ++ * ++ * Enumeration of supported groups. It is intended to be backwards ++ * compatible with the enumerations in %gnutls_ecc_curve_t for the groups ++ * which are valid elliptic curves. ++ */ ++typedef enum { ++ GNUTLS_GROUP_INVALID = 0, ++ GNUTLS_GROUP_SECP192R1 = GNUTLS_ECC_CURVE_SECP192R1, ++ GNUTLS_GROUP_SECP224R1 = GNUTLS_ECC_CURVE_SECP224R1, ++ GNUTLS_GROUP_SECP256R1 = GNUTLS_ECC_CURVE_SECP256R1, ++ GNUTLS_GROUP_SECP384R1 = GNUTLS_ECC_CURVE_SECP384R1, ++ GNUTLS_GROUP_SECP521R1 = GNUTLS_ECC_CURVE_SECP521R1, ++ GNUTLS_GROUP_X25519 = GNUTLS_ECC_CURVE_X25519, ++ ++ GNUTLS_GROUP_FFDHE2048 = 256, ++ GNUTLS_GROUP_FFDHE3072, ++ GNUTLS_GROUP_FFDHE4096, ++ GNUTLS_GROUP_FFDHE8192, ++ GNUTLS_GROUP_FFDHE6144, ++ GNUTLS_GROUP_MAX = GNUTLS_GROUP_FFDHE6144, ++} gnutls_group_t; ++ ++/* macros to allow specifying a specific curve in gnutls_privkey_generate() ++ * and gnutls_x509_privkey_generate() */ ++#define GNUTLS_CURVE_TO_BITS(curve) (unsigned int)(((unsigned int)1<<31)|((unsigned int)(curve))) ++#define GNUTLS_BITS_TO_CURVE(bits) (((unsigned int)(bits)) & 0x7FFFFFFF) ++#define GNUTLS_BITS_ARE_CURVE(bits) (((unsigned int)(bits)) & 0x80000000) ++ ++/** ++ * gnutls_sec_param_t: ++ * @GNUTLS_SEC_PARAM_UNKNOWN: Cannot be known ++ * @GNUTLS_SEC_PARAM_INSECURE: Less than 42 bits of security ++ * @GNUTLS_SEC_PARAM_EXPORT: 42 bits of security ++ * @GNUTLS_SEC_PARAM_VERY_WEAK: 64 bits of security ++ * @GNUTLS_SEC_PARAM_WEAK: 72 bits of security ++ * @GNUTLS_SEC_PARAM_LOW: 80 bits of security ++ * @GNUTLS_SEC_PARAM_LEGACY: 96 bits of security ++ * @GNUTLS_SEC_PARAM_MEDIUM: 112 bits of security (used to be %GNUTLS_SEC_PARAM_NORMAL) ++ * @GNUTLS_SEC_PARAM_HIGH: 128 bits of security ++ * @GNUTLS_SEC_PARAM_ULTRA: 192 bits of security ++ * @GNUTLS_SEC_PARAM_FUTURE: 256 bits of security ++ * ++ * Enumeration of security parameters for passive attacks. ++ */ ++typedef enum { ++ GNUTLS_SEC_PARAM_UNKNOWN = 0, ++ GNUTLS_SEC_PARAM_INSECURE = 5, ++ GNUTLS_SEC_PARAM_EXPORT = 10, ++ GNUTLS_SEC_PARAM_VERY_WEAK = 15, ++ GNUTLS_SEC_PARAM_WEAK = 20, ++ GNUTLS_SEC_PARAM_LOW = 25, ++ GNUTLS_SEC_PARAM_LEGACY = 30, ++ GNUTLS_SEC_PARAM_MEDIUM = 35, ++ GNUTLS_SEC_PARAM_HIGH = 40, ++ GNUTLS_SEC_PARAM_ULTRA = 45, ++ GNUTLS_SEC_PARAM_FUTURE = 50, ++ GNUTLS_SEC_PARAM_MAX = GNUTLS_SEC_PARAM_FUTURE ++} gnutls_sec_param_t; ++ ++/* old name */ ++#define GNUTLS_SEC_PARAM_NORMAL GNUTLS_SEC_PARAM_MEDIUM ++ ++/** ++ * gnutls_channel_binding_t: ++ * @GNUTLS_CB_TLS_UNIQUE: "tls-unique" (RFC 5929) channel binding ++ * ++ * Enumeration of support channel binding types. ++ */ ++typedef enum { ++ GNUTLS_CB_TLS_UNIQUE ++} gnutls_channel_binding_t; ++ ++/** ++ * gnutls_gost_paramset_t: ++ * @GNUTLS_GOST_PARAMSET_UNKNOWN: Unknown/default parameter set ++ * @GNUTLS_GOST_PARAMSET_TC26_Z: Specified by TC26, see rfc7836 ++ * @GNUTLS_GOST_PARAMSET_CP_A: CryptoPro-A, see rfc4357 ++ * @GNUTLS_GOST_PARAMSET_CP_B: CryptoPro-B, see rfc4357 ++ * @GNUTLS_GOST_PARAMSET_CP_C: CryptoPro-C, see rfc4357 ++ * @GNUTLS_GOST_PARAMSET_CP_D: CryptoPro-D, see rfc4357 ++ * ++ * Enumeration of different GOST 28147 parameter sets. ++ */ ++typedef enum { ++ GNUTLS_GOST_PARAMSET_UNKNOWN = 0, ++ GNUTLS_GOST_PARAMSET_TC26_Z, ++ GNUTLS_GOST_PARAMSET_CP_A, ++ GNUTLS_GOST_PARAMSET_CP_B, ++ GNUTLS_GOST_PARAMSET_CP_C, ++ GNUTLS_GOST_PARAMSET_CP_D ++} gnutls_gost_paramset_t; ++ ++/** ++ * gnutls_ctype_target_t: ++ * @GNUTLS_CTYPE_CLIENT: for requesting client certificate type values. ++ * @GNUTLS_CTYPE_SERVER: for requesting server certificate type values. ++ * @GNUTLS_CTYPE_OURS: for requesting our certificate type values. ++ * @GNUTLS_CTYPE_PEERS: for requesting the peers' certificate type values. ++ * ++ * Enumeration of certificate type targets with respect to asymmetric ++ * certificate types as specified in RFC7250 and P2P connection set up ++ * as specified in draft-vanrein-tls-symmetry-02. ++ */ ++typedef enum { ++ GNUTLS_CTYPE_CLIENT, ++ GNUTLS_CTYPE_SERVER, ++ GNUTLS_CTYPE_OURS, ++ GNUTLS_CTYPE_PEERS ++} gnutls_ctype_target_t; ++ ++/* If you want to change this, then also change the define in ++ * gnutls_int.h, and recompile. ++ */ ++typedef void *gnutls_transport_ptr_t; ++ ++struct gnutls_session_int; ++typedef struct gnutls_session_int *gnutls_session_t; ++ ++struct gnutls_dh_params_int; ++typedef struct gnutls_dh_params_int *gnutls_dh_params_t; ++ ++ /* XXX ugly. */ ++struct gnutls_x509_privkey_int; ++typedef struct gnutls_x509_privkey_int *gnutls_rsa_params_t; ++ ++struct gnutls_priority_st; ++typedef struct gnutls_priority_st *gnutls_priority_t; ++ ++typedef struct { ++ unsigned char *data; ++ unsigned int size; ++} gnutls_datum_t; ++ ++typedef struct gnutls_params_st { ++ gnutls_params_type_t type; ++ union params { ++ gnutls_dh_params_t dh; ++ gnutls_rsa_params_t rsa_export; ++ } params; ++ int deinit; ++} gnutls_params_st; ++ ++typedef int gnutls_params_function(gnutls_session_t, gnutls_params_type_t, ++ gnutls_params_st *); ++ ++/* internal functions */ ++ ++int gnutls_init(gnutls_session_t * session, unsigned int flags); ++void gnutls_deinit(gnutls_session_t session); ++#define _gnutls_deinit(x) gnutls_deinit(x) ++ ++int gnutls_bye(gnutls_session_t session, gnutls_close_request_t how); ++ ++int gnutls_handshake(gnutls_session_t session); ++ ++int gnutls_reauth(gnutls_session_t session, unsigned int flags); ++ ++#define GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT ((unsigned int)-1) ++#define GNUTLS_INDEFINITE_TIMEOUT ((unsigned int)-2) ++void gnutls_handshake_set_timeout(gnutls_session_t session, ++ unsigned int ms); ++int gnutls_rehandshake(gnutls_session_t session); ++ ++#define GNUTLS_KU_PEER 1 ++int gnutls_session_key_update(gnutls_session_t session, unsigned flags); ++ ++gnutls_alert_description_t gnutls_alert_get(gnutls_session_t session); ++int gnutls_alert_send(gnutls_session_t session, ++ gnutls_alert_level_t level, ++ gnutls_alert_description_t desc); ++int gnutls_alert_send_appropriate(gnutls_session_t session, int err); ++const char *gnutls_alert_get_name(gnutls_alert_description_t alert); ++const char *gnutls_alert_get_strname(gnutls_alert_description_t alert); ++ ++gnutls_sec_param_t gnutls_pk_bits_to_sec_param(gnutls_pk_algorithm_t algo, ++ unsigned int bits); ++const char *gnutls_sec_param_get_name(gnutls_sec_param_t param); ++unsigned int gnutls_sec_param_to_pk_bits(gnutls_pk_algorithm_t algo, ++ gnutls_sec_param_t param); ++unsigned int ++ gnutls_sec_param_to_symmetric_bits(gnutls_sec_param_t param) __GNUTLS_CONST__; ++ ++/* Elliptic curves */ ++const char * ++ gnutls_ecc_curve_get_name(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; ++const char * ++ gnutls_ecc_curve_get_oid(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; ++ ++const char * ++ gnutls_group_get_name(gnutls_group_t group) __GNUTLS_CONST__; ++ ++int ++ gnutls_ecc_curve_get_size(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; ++gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session); ++ ++gnutls_group_t gnutls_group_get(gnutls_session_t session); ++ ++/* get information on the current session */ ++gnutls_cipher_algorithm_t gnutls_cipher_get(gnutls_session_t session); ++gnutls_kx_algorithm_t gnutls_kx_get(gnutls_session_t session); ++gnutls_mac_algorithm_t gnutls_mac_get(gnutls_session_t session); ++gnutls_certificate_type_t ++gnutls_certificate_type_get(gnutls_session_t session); ++gnutls_certificate_type_t ++gnutls_certificate_type_get2(gnutls_session_t session, ++ gnutls_ctype_target_t target); ++ ++int gnutls_sign_algorithm_get(gnutls_session_t session); ++int gnutls_sign_algorithm_get_client(gnutls_session_t session); ++ ++int gnutls_sign_algorithm_get_requested(gnutls_session_t session, ++ size_t indx, ++ gnutls_sign_algorithm_t * algo); ++ ++/* the name of the specified algorithms */ ++const char * ++ gnutls_cipher_get_name(gnutls_cipher_algorithm_t algorithm) __GNUTLS_CONST__; ++const char * ++ gnutls_mac_get_name(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__; ++ ++const char * ++ gnutls_digest_get_name(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__; ++const char * ++ gnutls_digest_get_oid(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__; ++ ++const char * ++ gnutls_kx_get_name(gnutls_kx_algorithm_t algorithm) __GNUTLS_CONST__; ++const char * ++ gnutls_certificate_type_get_name(gnutls_certificate_type_t ++ type) __GNUTLS_CONST__; ++const char * ++ gnutls_pk_get_name(gnutls_pk_algorithm_t algorithm) __GNUTLS_CONST__; ++const char * ++ gnutls_pk_get_oid(gnutls_pk_algorithm_t algorithm) __GNUTLS_CONST__; ++ ++const char * ++ gnutls_sign_get_name(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__; ++ ++const char *gnutls_sign_get_oid(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__; ++ ++const char * ++ gnutls_gost_paramset_get_name(gnutls_gost_paramset_t param) __GNUTLS_CONST__; ++const char * ++ gnutls_gost_paramset_get_oid(gnutls_gost_paramset_t param) __GNUTLS_CONST__; ++ ++size_t ++ gnutls_cipher_get_key_size(gnutls_cipher_algorithm_t algorithm) __GNUTLS_CONST__; ++size_t ++ gnutls_mac_get_key_size(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__; ++ ++unsigned gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__; ++ ++/* It is possible that a signature algorithm is ok to use for short-lived ++ * data (e.g., to sign a TLS session), but not for data that are long-lived ++ * like certificates. This flag is about checking the security of the algorithm ++ * for long-lived data. */ ++#define GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS 1 ++unsigned gnutls_sign_is_secure2(gnutls_sign_algorithm_t algorithm, unsigned int flags) __GNUTLS_CONST__; ++ ++gnutls_digest_algorithm_t ++ gnutls_sign_get_hash_algorithm(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__; ++gnutls_pk_algorithm_t ++ gnutls_sign_get_pk_algorithm(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__; ++gnutls_sign_algorithm_t ++ gnutls_pk_to_sign(gnutls_pk_algorithm_t pk, ++ gnutls_digest_algorithm_t hash) __GNUTLS_CONST__; ++ ++unsigned ++gnutls_sign_supports_pk_algorithm(gnutls_sign_algorithm_t sign, gnutls_pk_algorithm_t pk) __GNUTLS_CONST__; ++ ++#define gnutls_sign_algorithm_get_name gnutls_sign_get_name ++ ++gnutls_mac_algorithm_t gnutls_mac_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_digest_algorithm_t gnutls_digest_get_id(const char *name) __GNUTLS_CONST__; ++ ++gnutls_cipher_algorithm_t ++ gnutls_cipher_get_id(const char *name) __GNUTLS_CONST__; ++ ++gnutls_kx_algorithm_t ++ gnutls_kx_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_protocol_t ++ gnutls_protocol_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_certificate_type_t ++ gnutls_certificate_type_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_pk_algorithm_t ++ gnutls_pk_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_sign_algorithm_t ++ gnutls_sign_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name) __GNUTLS_CONST__; ++gnutls_pk_algorithm_t gnutls_ecc_curve_get_pk(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; ++gnutls_group_t gnutls_group_get_id(const char *name); ++ ++gnutls_digest_algorithm_t ++ gnutls_oid_to_digest(const char *oid) __GNUTLS_CONST__; ++gnutls_mac_algorithm_t ++ gnutls_oid_to_mac(const char *oid) __GNUTLS_CONST__; ++gnutls_pk_algorithm_t ++ gnutls_oid_to_pk(const char *oid) __GNUTLS_CONST__; ++gnutls_sign_algorithm_t ++ gnutls_oid_to_sign(const char *oid) __GNUTLS_CONST__; ++gnutls_ecc_curve_t ++ gnutls_oid_to_ecc_curve(const char *oid) __GNUTLS_CONST__; ++gnutls_gost_paramset_t ++ gnutls_oid_to_gost_paramset(const char *oid) __GNUTLS_CONST__; ++ ++ /* list supported algorithms */ ++const gnutls_ecc_curve_t * ++ gnutls_ecc_curve_list(void) __GNUTLS_PURE__; ++const gnutls_group_t * ++ gnutls_group_list(void) __GNUTLS_PURE__; ++const gnutls_cipher_algorithm_t * ++ gnutls_cipher_list(void) __GNUTLS_PURE__; ++const gnutls_mac_algorithm_t * ++ gnutls_mac_list(void) __GNUTLS_PURE__; ++const gnutls_digest_algorithm_t * ++ gnutls_digest_list(void) __GNUTLS_PURE__; ++const gnutls_protocol_t * ++ gnutls_protocol_list(void) __GNUTLS_PURE__; ++const gnutls_certificate_type_t * ++ gnutls_certificate_type_list(void) __GNUTLS_PURE__; ++const gnutls_kx_algorithm_t * ++ gnutls_kx_list(void) __GNUTLS_PURE__; ++const gnutls_pk_algorithm_t * ++ gnutls_pk_list(void) __GNUTLS_PURE__; ++const gnutls_sign_algorithm_t * ++ gnutls_sign_list(void) __GNUTLS_PURE__; ++const char * ++ gnutls_cipher_suite_info(size_t idx, ++ unsigned char *cs_id, ++ gnutls_kx_algorithm_t * kx, ++ gnutls_cipher_algorithm_t * cipher, ++ gnutls_mac_algorithm_t * mac, ++ gnutls_protocol_t * min_version); ++ ++ /* error functions */ ++int gnutls_error_is_fatal(int error) __GNUTLS_CONST__; ++int gnutls_error_to_alert(int err, int *level); ++ ++void gnutls_perror(int error); ++const char * gnutls_strerror(int error) __GNUTLS_CONST__; ++const char * gnutls_strerror_name(int error) __GNUTLS_CONST__; ++ ++/* Semi-internal functions. ++ */ ++void gnutls_handshake_set_private_extensions(gnutls_session_t session, ++ int allow); ++int gnutls_handshake_set_random(gnutls_session_t session, ++ const gnutls_datum_t * random); ++ ++gnutls_handshake_description_t ++gnutls_handshake_get_last_out(gnutls_session_t session); ++gnutls_handshake_description_t ++gnutls_handshake_get_last_in(gnutls_session_t session); ++ ++/* Record layer functions. ++ */ ++#define GNUTLS_HEARTBEAT_WAIT 1 ++int gnutls_heartbeat_ping(gnutls_session_t session, size_t data_size, ++ unsigned int max_tries, unsigned int flags); ++int gnutls_heartbeat_pong(gnutls_session_t session, unsigned int flags); ++ ++void gnutls_record_set_timeout(gnutls_session_t session, unsigned int ms); ++void gnutls_record_disable_padding(gnutls_session_t session); ++ ++void gnutls_record_cork(gnutls_session_t session); ++#define GNUTLS_RECORD_WAIT 1 ++int gnutls_record_uncork(gnutls_session_t session, unsigned int flags); ++size_t gnutls_record_discard_queued(gnutls_session_t session); ++ ++int ++gnutls_record_get_state(gnutls_session_t session, ++ unsigned read, ++ gnutls_datum_t *mac_key, ++ gnutls_datum_t *IV, ++ gnutls_datum_t *cipher_key, ++ unsigned char seq_number[8]); ++ ++int ++gnutls_record_set_state(gnutls_session_t session, ++ unsigned read, ++ unsigned char seq_number[8]); ++ ++typedef struct { ++ size_t low; ++ size_t high; ++} gnutls_range_st; ++ ++int gnutls_range_split(gnutls_session_t session, ++ const gnutls_range_st * orig, ++ gnutls_range_st * small_range, ++ gnutls_range_st * rem_range); ++ ++ssize_t gnutls_record_send(gnutls_session_t session, const void *data, ++ size_t data_size); ++ssize_t gnutls_record_send2(gnutls_session_t session, const void *data, ++ size_t data_size, size_t pad, unsigned flags); ++ssize_t gnutls_record_send_range(gnutls_session_t session, ++ const void *data, size_t data_size, ++ const gnutls_range_st * range); ++ssize_t gnutls_record_recv(gnutls_session_t session, void *data, ++ size_t data_size); ++ ++typedef struct mbuffer_st *gnutls_packet_t; ++ ++ssize_t ++gnutls_record_recv_packet(gnutls_session_t session, ++ gnutls_packet_t *packet); ++ ++void gnutls_packet_get(gnutls_packet_t packet, gnutls_datum_t *data, unsigned char *sequence); ++void gnutls_packet_deinit(gnutls_packet_t packet); ++ ++#define gnutls_read gnutls_record_recv ++#define gnutls_write gnutls_record_send ++ssize_t gnutls_record_recv_seq(gnutls_session_t session, void *data, ++ size_t data_size, unsigned char *seq); ++ ++size_t gnutls_record_overhead_size(gnutls_session_t session); ++ ++size_t ++ gnutls_est_record_overhead_size(gnutls_protocol_t version, ++ gnutls_cipher_algorithm_t cipher, ++ gnutls_mac_algorithm_t mac, ++ gnutls_compression_method_t comp, ++ unsigned int flags) __GNUTLS_CONST__; ++ ++void gnutls_session_enable_compatibility_mode(gnutls_session_t session); ++#define gnutls_record_set_max_empty_records(session, x) ++ ++int gnutls_record_can_use_length_hiding(gnutls_session_t session); ++ ++int gnutls_record_get_direction(gnutls_session_t session); ++ ++size_t gnutls_record_get_max_size(gnutls_session_t session); ++ssize_t gnutls_record_set_max_size(gnutls_session_t session, size_t size); ++ ++size_t gnutls_record_check_pending(gnutls_session_t session); ++size_t gnutls_record_check_corked(gnutls_session_t session); ++ ++size_t gnutls_record_get_max_early_data_size(gnutls_session_t session); ++int gnutls_record_set_max_early_data_size(gnutls_session_t session, size_t size); ++ssize_t gnutls_record_send_early_data(gnutls_session_t session, ++ const void *data, ++ size_t length); ++ssize_t gnutls_record_recv_early_data(gnutls_session_t session, ++ void *data, ++ size_t data_size); ++ ++void gnutls_session_force_valid(gnutls_session_t session); ++ ++int gnutls_prf(gnutls_session_t session, ++ size_t label_size, const char *label, ++ int server_random_first, ++ size_t extra_size, const char *extra, ++ size_t outsize, char *out); ++int gnutls_prf_rfc5705(gnutls_session_t session, ++ size_t label_size, const char *label, ++ size_t context_size, const char *context, ++ size_t outsize, char *out); ++ ++int gnutls_prf_raw(gnutls_session_t session, ++ size_t label_size, const char *label, ++ size_t seed_size, const char *seed, ++ size_t outsize, char *out); ++ ++/** ++ * gnutls_server_name_type_t: ++ * @GNUTLS_NAME_DNS: Domain Name System name type. ++ * ++ * Enumeration of different server name types. ++ */ ++typedef enum { ++ GNUTLS_NAME_DNS = 1 ++} gnutls_server_name_type_t; ++ ++int gnutls_server_name_set(gnutls_session_t session, ++ gnutls_server_name_type_t type, ++ const void *name, size_t name_length); ++ ++int gnutls_server_name_get(gnutls_session_t session, ++ void *data, size_t * data_length, ++ unsigned int *type, unsigned int indx); ++ ++unsigned int gnutls_heartbeat_get_timeout(gnutls_session_t session); ++void gnutls_heartbeat_set_timeouts(gnutls_session_t session, ++ unsigned int retrans_timeout, ++ unsigned int total_timeout); ++ ++#define GNUTLS_HB_PEER_ALLOWED_TO_SEND (1) ++#define GNUTLS_HB_PEER_NOT_ALLOWED_TO_SEND (1<<1) ++ ++ /* Heartbeat */ ++void gnutls_heartbeat_enable(gnutls_session_t session, unsigned int type); ++ ++#define GNUTLS_HB_LOCAL_ALLOWED_TO_SEND (1<<2) ++unsigned gnutls_heartbeat_allowed(gnutls_session_t session, unsigned int type); ++ ++ /* Safe renegotiation */ ++unsigned gnutls_safe_renegotiation_status(gnutls_session_t session); ++unsigned gnutls_session_ext_master_secret_status(gnutls_session_t session); ++unsigned gnutls_session_etm_status(gnutls_session_t session); ++ ++/** ++ * gnutls_session_flags_t: ++ * @GNUTLS_SFLAGS_SAFE_RENEGOTIATION: Safe renegotiation (RFC5746) was used ++ * @GNUTLS_SFLAGS_EXT_MASTER_SECRET: The extended master secret (RFC7627) extension was used ++ * @GNUTLS_SFLAGS_ETM: The encrypt then MAC (RFC7366) extension was used ++ * @GNUTLS_SFLAGS_RFC7919: The RFC7919 Diffie-Hellman parameters were negotiated ++ * @GNUTLS_SFLAGS_HB_LOCAL_SEND: The heartbeat negotiation allows the local side to send heartbeat messages ++ * @GNUTLS_SFLAGS_HB_PEER_SEND: The heartbeat negotiation allows the peer to send heartbeat messages ++ * @GNUTLS_SFLAGS_FALSE_START: False start was used in this client session. ++ * @GNUTLS_SFLAGS_SESSION_TICKET: A session ticket has been received by the server. ++ * @GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH: Indicates client capability for post-handshake auth; set only on server side. ++ * @GNUTLS_SFLAGS_EARLY_START: The TLS1.3 server session returned early. ++ * @GNUTLS_SFLAGS_EARLY_DATA: The TLS1.3 early data has been received by the server. ++ * ++ * Enumeration of different session parameters. ++ */ ++typedef enum { ++ GNUTLS_SFLAGS_SAFE_RENEGOTIATION = 1, ++ GNUTLS_SFLAGS_EXT_MASTER_SECRET = 1<<1, ++ GNUTLS_SFLAGS_ETM = 1<<2, ++ GNUTLS_SFLAGS_HB_LOCAL_SEND = 1<<3, ++ GNUTLS_SFLAGS_HB_PEER_SEND = 1<<4, ++ GNUTLS_SFLAGS_FALSE_START = 1<<5, ++ GNUTLS_SFLAGS_RFC7919 = 1<<6, ++ GNUTLS_SFLAGS_SESSION_TICKET = 1<<7, ++ GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH = 1<<8, ++ GNUTLS_SFLAGS_EARLY_START = 1<<9, ++ GNUTLS_SFLAGS_EARLY_DATA = 1<<10 ++} gnutls_session_flags_t; ++ ++unsigned gnutls_session_get_flags(gnutls_session_t session); ++ ++/** ++ * gnutls_supplemental_data_format_type_t: ++ * @GNUTLS_SUPPLEMENTAL_UNKNOWN: Unknown data format ++ * ++ * Enumeration of different supplemental data types (RFC 4680). ++ */ ++typedef enum { ++ GNUTLS_SUPPLEMENTAL_UNKNOWN = 0, ++} gnutls_supplemental_data_format_type_t; ++ ++const char ++*gnutls_supplemental_get_name(gnutls_supplemental_data_format_type_t type); ++ ++ /* SessionTicket, RFC 5077. */ ++int gnutls_session_ticket_key_generate(gnutls_datum_t * key); ++int gnutls_session_ticket_enable_client(gnutls_session_t session); ++int gnutls_session_ticket_enable_server(gnutls_session_t session, ++ const gnutls_datum_t * key); ++ ++int gnutls_session_ticket_send(gnutls_session_t session, unsigned nr, unsigned flags); ++ ++ /* SRTP, RFC 5764 */ ++ ++/** ++ * gnutls_srtp_profile_t: ++ * @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80: 128 bit AES with a 80 bit HMAC-SHA1 ++ * @GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32: 128 bit AES with a 32 bit HMAC-SHA1 ++ * @GNUTLS_SRTP_NULL_HMAC_SHA1_80: NULL cipher with a 80 bit HMAC-SHA1 ++ * @GNUTLS_SRTP_NULL_HMAC_SHA1_32: NULL cipher with a 32 bit HMAC-SHA1 ++ * ++ * Enumeration of different SRTP protection profiles. ++ */ ++typedef enum { ++ GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80 = 0x0001, ++ GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32 = 0x0002, ++ GNUTLS_SRTP_NULL_HMAC_SHA1_80 = 0x0005, ++ GNUTLS_SRTP_NULL_HMAC_SHA1_32 = 0x0006 ++} gnutls_srtp_profile_t; ++ ++int gnutls_srtp_set_profile(gnutls_session_t session, ++ gnutls_srtp_profile_t profile); ++int gnutls_srtp_set_profile_direct(gnutls_session_t session, ++ const char *profiles, ++ const char **err_pos); ++int gnutls_srtp_get_selected_profile(gnutls_session_t session, ++ gnutls_srtp_profile_t * profile); ++ ++const char *gnutls_srtp_get_profile_name(gnutls_srtp_profile_t profile); ++int gnutls_srtp_get_profile_id(const char *name, ++ gnutls_srtp_profile_t * profile); ++int gnutls_srtp_get_keys(gnutls_session_t session, ++ void *key_material, ++ unsigned int key_material_size, ++ gnutls_datum_t * client_key, ++ gnutls_datum_t * client_salt, ++ gnutls_datum_t * server_key, ++ gnutls_datum_t * server_salt); ++ ++int gnutls_srtp_set_mki(gnutls_session_t session, ++ const gnutls_datum_t * mki); ++int gnutls_srtp_get_mki(gnutls_session_t session, gnutls_datum_t * mki); ++ ++/* ALPN TLS extension */ ++ ++/** ++ * gnutls_alpn_flags_t: ++ * @GNUTLS_ALPN_MANDATORY: Require ALPN negotiation. The connection will be ++ * aborted if no matching ALPN protocol is found. ++ * @GNUTLS_ALPN_SERVER_PRECEDENCE: The choices set by the server ++ * will take precedence over the client's. ++ * ++ * Enumeration of different ALPN flags. These are used by gnutls_alpn_set_protocols(). ++ */ ++typedef enum { ++ GNUTLS_ALPN_MANDATORY = 1, ++ GNUTLS_ALPN_SERVER_PRECEDENCE = (1<<1) ++} gnutls_alpn_flags_t; ++ ++#define GNUTLS_ALPN_MAND GNUTLS_ALPN_MANDATORY ++int gnutls_alpn_get_selected_protocol(gnutls_session_t session, ++ gnutls_datum_t * protocol); ++int gnutls_alpn_set_protocols(gnutls_session_t session, ++ const gnutls_datum_t * protocols, ++ unsigned protocols_size, unsigned flags); ++ ++int gnutls_key_generate(gnutls_datum_t * key, unsigned int key_size); ++ ++#define GNUTLS_PRIORITY_INIT_DEF_APPEND 1 ++int gnutls_priority_init(gnutls_priority_t * priority_cache, ++ const char *priorities, const char **err_pos); ++int gnutls_priority_init2(gnutls_priority_t * priority_cache, ++ const char *priorities, const char **err_pos, ++ unsigned flags); ++void gnutls_priority_deinit(gnutls_priority_t priority_cache); ++int gnutls_priority_get_cipher_suite_index(gnutls_priority_t pcache, ++ unsigned int idx, ++ unsigned int *sidx); ++ ++#define GNUTLS_PRIORITY_LIST_INIT_KEYWORDS 1 ++#define GNUTLS_PRIORITY_LIST_SPECIAL 2 ++const char * ++gnutls_priority_string_list(unsigned iter, unsigned int flags); ++ ++int gnutls_priority_set(gnutls_session_t session, ++ gnutls_priority_t priority); ++ ++int gnutls_priority_set_direct(gnutls_session_t session, ++ const char *priorities, ++ const char **err_pos); ++ ++int gnutls_priority_certificate_type_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++int gnutls_priority_certificate_type_list2(gnutls_priority_t pcache, ++ const unsigned int **list, ++ gnutls_ctype_target_t target); ++int gnutls_priority_sign_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++int gnutls_priority_protocol_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++int gnutls_priority_ecc_curve_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++int ++gnutls_priority_group_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++ ++int gnutls_priority_kx_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++int gnutls_priority_cipher_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++int gnutls_priority_mac_list(gnutls_priority_t pcache, ++ const unsigned int **list); ++ ++int gnutls_set_default_priority(gnutls_session_t session); ++int gnutls_set_default_priority_append(gnutls_session_t session, ++ const char *add_prio, ++ const char **err_pos, ++ unsigned flags); ++ ++/* Returns the name of a cipher suite */ ++const char * ++ gnutls_cipher_suite_get_name(gnutls_kx_algorithm_t kx_algorithm, ++ gnutls_cipher_algorithm_t cipher_algorithm, ++ gnutls_mac_algorithm_t mac_algorithm) __GNUTLS_CONST__; ++ ++/* get the currently used protocol version */ ++gnutls_protocol_t gnutls_protocol_get_version(gnutls_session_t session); ++ ++const char * ++ gnutls_protocol_get_name(gnutls_protocol_t version) __GNUTLS_CONST__; ++ ++/* get/set session ++ */ ++int gnutls_session_set_data(gnutls_session_t session, ++ const void *session_data, ++ size_t session_data_size); ++int gnutls_session_get_data(gnutls_session_t session, void *session_data, ++ size_t * session_data_size); ++int gnutls_session_get_data2(gnutls_session_t session, ++ gnutls_datum_t * data); ++void gnutls_session_get_random(gnutls_session_t session, ++ gnutls_datum_t * client, ++ gnutls_datum_t * server); ++ ++void gnutls_session_get_master_secret(gnutls_session_t session, ++ gnutls_datum_t * secret); ++ ++char *gnutls_session_get_desc(gnutls_session_t session); ++ ++typedef int gnutls_certificate_verify_function(gnutls_session_t); ++void gnutls_session_set_verify_function(gnutls_session_t session, gnutls_certificate_verify_function * func); ++ ++/** ++ * gnutls_vdata_types_t: ++ * @GNUTLS_DT_UNKNOWN: Unknown data type. ++ * @GNUTLS_DT_DNS_HOSTNAME: The data contain a null-terminated DNS hostname; the hostname will be ++ * matched using the RFC6125 rules. If the data contain a textual IP (v4 or v6) address it will ++ * be marched against the IPAddress Alternative name, unless the verification flag %GNUTLS_VERIFY_DO_NOT_ALLOW_IP_MATCHES ++ * is specified. ++ * @GNUTLS_DT_IP_ADDRESS: The data contain a raw IP address (4 or 16 bytes). If will be matched ++ * against the IPAddress Alternative name; option available since 3.6.0. ++ * @GNUTLS_DT_RFC822NAME: The data contain a null-terminated email address; the email will be ++ * matched against the RFC822Name Alternative name of the certificate, or the EMAIL DN component if the ++ * former isn't available. Prior to matching the email address will be converted to ACE ++ * (ASCII-compatible-encoding). ++ * @GNUTLS_DT_KEY_PURPOSE_OID: The data contain a null-terminated key purpose OID. It will be matched ++ * against the certificate's Extended Key Usage extension. ++ * ++ * Enumeration of different typed-data options. They are used as input to certificate ++ * verification functions to provide information about the name and purpose of the ++ * certificate. Only a single option of a type can be provided to the relevant functions ++ * (i.e., options %GNUTLS_DT_DNS_HOSTNAME, %GNUTLS_DT_IP_ADDRESS and ++ * %GNUTLS_DT_RFC822NAME cannot be combined). ++ */ ++typedef enum { ++ GNUTLS_DT_UNKNOWN = 0, ++ GNUTLS_DT_DNS_HOSTNAME = 1, ++ GNUTLS_DT_KEY_PURPOSE_OID = 2, ++ GNUTLS_DT_RFC822NAME = 3, ++ GNUTLS_DT_IP_ADDRESS = 4 ++} gnutls_vdata_types_t; ++ ++typedef struct { ++ gnutls_vdata_types_t type; ++ unsigned char *data; ++ unsigned int size; ++} gnutls_typed_vdata_st; ++ ++void gnutls_session_set_verify_cert(gnutls_session_t session, ++ const char *hostname, unsigned flags); ++ ++void ++gnutls_session_set_verify_cert2(gnutls_session_t session, ++ gnutls_typed_vdata_st * data, ++ unsigned elements, unsigned flags); ++ ++unsigned int gnutls_session_get_verify_cert_status(gnutls_session_t); ++ ++int gnutls_session_set_premaster(gnutls_session_t session, ++ unsigned int entity, ++ gnutls_protocol_t version, ++ gnutls_kx_algorithm_t kx, ++ gnutls_cipher_algorithm_t cipher, ++ gnutls_mac_algorithm_t mac, ++ gnutls_compression_method_t comp, ++ const gnutls_datum_t * master, ++ const gnutls_datum_t * session_id); ++ ++/* returns the session ID */ ++#define GNUTLS_MAX_SESSION_ID 32 ++int gnutls_session_get_id(gnutls_session_t session, void *session_id, ++ size_t * session_id_size); ++int gnutls_session_get_id2(gnutls_session_t session, ++ gnutls_datum_t * session_id); ++ ++int gnutls_session_set_id(gnutls_session_t session, ++ const gnutls_datum_t * sid); ++ ++int gnutls_session_channel_binding(gnutls_session_t session, ++ gnutls_channel_binding_t cbtype, ++ gnutls_datum_t * cb); ++ ++/* checks if this session is a resumed one ++ */ ++int gnutls_session_is_resumed(gnutls_session_t session); ++int gnutls_session_resumption_requested(gnutls_session_t session); ++ ++typedef int (*gnutls_db_store_func) (void *, gnutls_datum_t key, ++ gnutls_datum_t data); ++typedef int (*gnutls_db_remove_func) (void *, gnutls_datum_t key); ++typedef gnutls_datum_t(*gnutls_db_retr_func) (void *, gnutls_datum_t key); ++ ++void gnutls_db_set_cache_expiration(gnutls_session_t session, int seconds); ++unsigned gnutls_db_get_default_cache_expiration(void); ++ ++void gnutls_db_remove_session(gnutls_session_t session); ++void gnutls_db_set_retrieve_function(gnutls_session_t session, ++ gnutls_db_retr_func retr_func); ++void gnutls_db_set_remove_function(gnutls_session_t session, ++ gnutls_db_remove_func rem_func); ++void gnutls_db_set_store_function(gnutls_session_t session, ++ gnutls_db_store_func store_func); ++void gnutls_db_set_ptr(gnutls_session_t session, void *ptr); ++void *gnutls_db_get_ptr(gnutls_session_t session); ++int gnutls_db_check_entry(gnutls_session_t session, ++ gnutls_datum_t session_entry); ++time_t gnutls_db_check_entry_time(gnutls_datum_t * entry); ++time_t gnutls_db_check_entry_expire_time(gnutls_datum_t * entry); ++ ++ /** ++ * gnutls_handshake_hook_func: ++ * @session: the current session ++ * @htype: the type of the handshake message (%gnutls_handshake_description_t) ++ * @when: non zero if this is a post-process/generation call and zero otherwise ++ * @incoming: non zero if this is an incoming message and zero if this is an outgoing message ++ * @msg: the (const) data of the handshake message without the handshake headers. ++ * ++ * Function prototype for handshake hooks. It is set using ++ * gnutls_handshake_set_hook_function(). ++ * ++ * Returns: Non zero on error. ++ */ ++#define GNUTLS_HOOK_POST (1) ++#define GNUTLS_HOOK_PRE (0) ++#define GNUTLS_HOOK_BOTH (-1) ++ ++typedef int (*gnutls_handshake_hook_func) (gnutls_session_t, ++ unsigned int htype, ++ unsigned when, ++ unsigned int incoming, ++ const gnutls_datum_t *msg); ++void gnutls_handshake_set_hook_function(gnutls_session_t session, ++ unsigned int htype, int when, ++ gnutls_handshake_hook_func func); ++ ++#define gnutls_handshake_post_client_hello_func gnutls_handshake_simple_hook_func ++typedef int (*gnutls_handshake_simple_hook_func) (gnutls_session_t); ++void ++gnutls_handshake_set_post_client_hello_function(gnutls_session_t session, ++ gnutls_handshake_simple_hook_func func); ++ ++void gnutls_handshake_set_max_packet_length(gnutls_session_t session, ++ size_t max); ++ ++/* returns libgnutls version (call it with a NULL argument) ++ */ ++const char * gnutls_check_version(const char *req_version) __GNUTLS_CONST__; ++ ++/* A macro which will allow optimizing out calls to gnutls_check_version() ++ * when the version being compiled with is sufficient. ++ * Used as: ++ * if (gnutls_check_version_numerc(3,3,16)) { ++ */ ++#define gnutls_check_version_numeric(a,b,c) \ ++ ((GNUTLS_VERSION_MAJOR >= (a)) && \ ++ ((GNUTLS_VERSION_NUMBER >= ( ((a) << 16) + ((b) << 8) + (c) )) || \ ++ gnutls_check_version(#a "." #b "." #c))) ++ ++/* Functions for setting/clearing credentials ++ */ ++void gnutls_credentials_clear(gnutls_session_t session); ++ ++/* cred is a structure defined by the kx algorithm ++ */ ++int gnutls_credentials_set(gnutls_session_t session, ++ gnutls_credentials_type_t type, void *cred); ++int gnutls_credentials_get(gnutls_session_t session, ++ gnutls_credentials_type_t type, void **cred); ++#define gnutls_cred_set gnutls_credentials_set ++ ++/* x.509 types */ ++ ++struct gnutls_pubkey_st; ++typedef struct gnutls_pubkey_st *gnutls_pubkey_t; ++ ++struct gnutls_privkey_st; ++typedef struct gnutls_privkey_st *gnutls_privkey_t; ++ ++struct gnutls_x509_privkey_int; ++typedef struct gnutls_x509_privkey_int *gnutls_x509_privkey_t; ++ ++struct gnutls_x509_crl_int; ++typedef struct gnutls_x509_crl_int *gnutls_x509_crl_t; ++ ++struct gnutls_x509_crt_int; ++typedef struct gnutls_x509_crt_int *gnutls_x509_crt_t; ++ ++struct gnutls_x509_crq_int; ++typedef struct gnutls_x509_crq_int *gnutls_x509_crq_t; ++ ++struct gnutls_openpgp_keyring_int; ++typedef struct gnutls_openpgp_keyring_int *gnutls_openpgp_keyring_t; ++ ++/* Credential structures - used in gnutls_credentials_set(); */ ++ ++struct gnutls_certificate_credentials_st; ++typedef struct gnutls_certificate_credentials_st ++*gnutls_certificate_credentials_t; ++typedef gnutls_certificate_credentials_t ++ gnutls_certificate_server_credentials; ++typedef gnutls_certificate_credentials_t ++ gnutls_certificate_client_credentials; ++ ++typedef struct gnutls_anon_server_credentials_st ++*gnutls_anon_server_credentials_t; ++typedef struct gnutls_anon_client_credentials_st ++*gnutls_anon_client_credentials_t; ++ ++void gnutls_anon_free_server_credentials(gnutls_anon_server_credentials_t ++ sc); ++int ++gnutls_anon_allocate_server_credentials(gnutls_anon_server_credentials_t ++ * sc); ++ ++void gnutls_anon_set_server_dh_params(gnutls_anon_server_credentials_t res, ++ gnutls_dh_params_t dh_params); ++ ++int ++gnutls_anon_set_server_known_dh_params(gnutls_anon_server_credentials_t res, ++ gnutls_sec_param_t sec_param); ++ ++void ++gnutls_anon_set_server_params_function(gnutls_anon_server_credentials_t ++ res, gnutls_params_function * func); ++ ++void ++gnutls_anon_free_client_credentials(gnutls_anon_client_credentials_t sc); ++int ++gnutls_anon_allocate_client_credentials(gnutls_anon_client_credentials_t ++ * sc); ++ ++/* CERTFILE is an x509 certificate in PEM form. ++ * KEYFILE is a pkcs-1 private key in PEM form (for RSA keys). ++ */ ++void ++gnutls_certificate_free_credentials(gnutls_certificate_credentials_t sc); ++int ++gnutls_certificate_allocate_credentials(gnutls_certificate_credentials_t ++ * res); ++ ++int ++gnutls_certificate_get_issuer(gnutls_certificate_credentials_t sc, ++ gnutls_x509_crt_t cert, ++ gnutls_x509_crt_t * issuer, ++ unsigned int flags); ++ ++int gnutls_certificate_get_crt_raw(gnutls_certificate_credentials_t sc, ++ unsigned idx1, unsigned idx2, ++ gnutls_datum_t * cert); ++ ++void gnutls_certificate_free_keys(gnutls_certificate_credentials_t sc); ++void gnutls_certificate_free_cas(gnutls_certificate_credentials_t sc); ++void gnutls_certificate_free_ca_names(gnutls_certificate_credentials_t sc); ++void gnutls_certificate_free_crls(gnutls_certificate_credentials_t sc); ++ ++void gnutls_certificate_set_dh_params(gnutls_certificate_credentials_t res, ++ gnutls_dh_params_t dh_params); ++ ++int gnutls_certificate_set_known_dh_params(gnutls_certificate_credentials_t res, ++ gnutls_sec_param_t sec_param); ++void gnutls_certificate_set_verify_flags(gnutls_certificate_credentials_t ++ res, unsigned int flags); ++unsigned int ++gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t res); ++ ++/** ++ * gnutls_certificate_flags: ++ * @GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH: Skip the key and certificate matching check. ++ * @GNUTLS_CERTIFICATE_API_V2: If set the gnutls_certificate_set_*key* functions will return an index of the added key pair instead of zero. ++ * @GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK: If set, the gnutls_certificate_set_ocsp_status_request_file ++ * function, will not check whether the response set matches any of the certificates. ++ * @GNUTLS_CERTIFICATE_VERIFY_CRLS: This will enable CRL verification when added in the certificate structure. ++ * When used, it requires CAs to be added before CRLs. ++ * ++ * Enumeration of different certificate credentials flags. ++ */ ++typedef enum gnutls_certificate_flags { ++ GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH = 1, ++ GNUTLS_CERTIFICATE_API_V2 = (1<<1), ++ GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK = (1<<2), ++ GNUTLS_CERTIFICATE_VERIFY_CRLS = (1<<3) ++} gnutls_certificate_flags; ++ ++void gnutls_certificate_set_flags(gnutls_certificate_credentials_t, ++ unsigned flags); ++ ++void gnutls_certificate_set_verify_limits(gnutls_certificate_credentials_t ++ res, unsigned int max_bits, ++ unsigned int max_depth); ++ ++int ++gnutls_certificate_set_x509_system_trust(gnutls_certificate_credentials_t ++ cred); ++ ++int ++gnutls_certificate_set_x509_trust_file(gnutls_certificate_credentials_t ++ cred, const char *cafile, ++ gnutls_x509_crt_fmt_t type); ++int ++gnutls_certificate_set_x509_trust_dir(gnutls_certificate_credentials_t cred, ++ const char *ca_dir, ++ gnutls_x509_crt_fmt_t type); ++ ++int gnutls_certificate_set_x509_trust_mem(gnutls_certificate_credentials_t ++ res, const gnutls_datum_t * ca, ++ gnutls_x509_crt_fmt_t type); ++ ++int ++gnutls_certificate_set_x509_crl_file(gnutls_certificate_credentials_t ++ res, const char *crlfile, ++ gnutls_x509_crt_fmt_t type); ++int gnutls_certificate_set_x509_crl_mem(gnutls_certificate_credentials_t ++ res, const gnutls_datum_t * CRL, ++ gnutls_x509_crt_fmt_t type); ++ ++int ++gnutls_certificate_set_x509_key_file(gnutls_certificate_credentials_t ++ res, const char *certfile, ++ const char *keyfile, ++ gnutls_x509_crt_fmt_t type); ++ ++int ++gnutls_certificate_set_x509_key_file2(gnutls_certificate_credentials_t ++ res, const char *certfile, ++ const char *keyfile, ++ gnutls_x509_crt_fmt_t type, ++ const char *pass, ++ unsigned int flags); ++ ++int gnutls_certificate_set_x509_key_mem(gnutls_certificate_credentials_t ++ res, const gnutls_datum_t * cert, ++ const gnutls_datum_t * key, ++ gnutls_x509_crt_fmt_t type); ++ ++int gnutls_certificate_set_x509_key_mem2(gnutls_certificate_credentials_t ++ res, const gnutls_datum_t * cert, ++ const gnutls_datum_t * key, ++ gnutls_x509_crt_fmt_t type, ++ const char *pass, ++ unsigned int flags); ++ ++void gnutls_certificate_send_x509_rdn_sequence(gnutls_session_t session, ++ int status); ++ ++int ++gnutls_certificate_set_x509_simple_pkcs12_file ++(gnutls_certificate_credentials_t res, const char *pkcs12file, ++ gnutls_x509_crt_fmt_t type, const char *password); ++int ++gnutls_certificate_set_x509_simple_pkcs12_mem ++(gnutls_certificate_credentials_t res, const gnutls_datum_t * p12blob, ++ gnutls_x509_crt_fmt_t type, const char *password); ++ ++/* New functions to allow setting already parsed X.509 stuff. ++ */ ++ ++int gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res, ++ gnutls_x509_crt_t * cert_list, ++ int cert_list_size, ++ gnutls_x509_privkey_t key); ++int gnutls_certificate_set_x509_trust(gnutls_certificate_credentials_t res, ++ gnutls_x509_crt_t * ca_list, ++ int ca_list_size); ++int gnutls_certificate_set_x509_crl(gnutls_certificate_credentials_t res, ++ gnutls_x509_crl_t * crl_list, ++ int crl_list_size); ++ ++int gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res, ++ unsigned index, ++ gnutls_x509_privkey_t *key); ++int gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res, ++ unsigned index, ++ gnutls_x509_crt_t **crt_list, ++ unsigned *crt_list_size); ++ ++ /* OCSP status request extension, RFC 6066 */ ++typedef int (*gnutls_status_request_ocsp_func) ++ (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response); ++ ++void ++gnutls_certificate_set_ocsp_status_request_function ++(gnutls_certificate_credentials_t res, ++gnutls_status_request_ocsp_func ocsp_func, void *ptr); ++ ++int ++gnutls_certificate_set_ocsp_status_request_function2 ++(gnutls_certificate_credentials_t res, unsigned idx, ++gnutls_status_request_ocsp_func ocsp_func, void *ptr); ++ ++int ++gnutls_certificate_set_ocsp_status_request_file ++(gnutls_certificate_credentials_t res, const char *response_file, ++ unsigned idx); ++ ++int ++gnutls_certificate_set_ocsp_status_request_file2 ++(gnutls_certificate_credentials_t res, const char *response_file, ++ unsigned idx, gnutls_x509_crt_fmt_t fmt); ++ ++int ++gnutls_certificate_set_ocsp_status_request_mem ++(gnutls_certificate_credentials_t res, const gnutls_datum_t *resp, ++ unsigned idx, gnutls_x509_crt_fmt_t fmt); ++ ++typedef struct gnutls_ocsp_data_st { ++ unsigned int version; /* must be zero */ ++ gnutls_datum_t response; ++ time_t exptime; ++ unsigned char padding[32]; ++} gnutls_ocsp_data_st; ++ ++time_t ++gnutls_certificate_get_ocsp_expiration(gnutls_certificate_credentials_t sc, ++ unsigned idx, ++ int oidx, ++ unsigned flags); ++ ++int gnutls_ocsp_status_request_enable_client(gnutls_session_t session, ++ gnutls_datum_t * responder_id, ++ size_t responder_id_size, ++ gnutls_datum_t * ++ request_extensions); ++ ++int gnutls_ocsp_status_request_get(gnutls_session_t session, ++ gnutls_datum_t * response); ++ ++#define GNUTLS_OCSP_SR_IS_AVAIL 1 ++int gnutls_ocsp_status_request_is_checked(gnutls_session_t session, ++ unsigned int flags); ++ ++int ++gnutls_ocsp_status_request_get2(gnutls_session_t session, ++ unsigned idx, ++ gnutls_datum_t * response); ++ ++/* RAW public key functions (RFC7250) */ ++int gnutls_certificate_set_rawpk_key_mem(gnutls_certificate_credentials_t cred, ++ const gnutls_datum_t* spki, ++ const gnutls_datum_t* pkey, ++ gnutls_x509_crt_fmt_t format, ++ const char* pass, ++ unsigned int key_usage, ++ const char **names, ++ unsigned int names_length, ++ unsigned int flags); ++ ++int gnutls_certificate_set_rawpk_key_file(gnutls_certificate_credentials_t cred, ++ const char* rawpkfile, ++ const char* privkeyfile, ++ gnutls_x509_crt_fmt_t format, ++ const char *pass, ++ unsigned int key_usage, ++ const char **names, ++ unsigned int names_length, ++ unsigned int privkey_flags, ++ unsigned int pkcs11_flags); ++ ++/* global state functions ++ */ ++int gnutls_global_init(void); ++void gnutls_global_deinit(void); ++ ++ /** ++ * gnutls_time_func: ++ * @t: where to store time. ++ * ++ * Function prototype for time()-like function. Set with ++ * gnutls_global_set_time_function(). ++ * ++ * Returns: Number of seconds since the epoch, or (time_t)-1 on errors. ++ */ ++typedef time_t(*gnutls_time_func) (time_t * t); ++ ++typedef int (*mutex_init_func) (void **mutex); ++typedef int (*mutex_lock_func) (void **mutex); ++typedef int (*mutex_unlock_func) (void **mutex); ++typedef int (*mutex_deinit_func) (void **mutex); ++ ++void gnutls_global_set_mutex(mutex_init_func init, ++ mutex_deinit_func deinit, ++ mutex_lock_func lock, ++ mutex_unlock_func unlock); ++ ++typedef void *(*gnutls_alloc_function) (size_t); ++typedef void *(*gnutls_calloc_function) (size_t, size_t); ++typedef int (*gnutls_is_secure_function) (const void *); ++typedef void (*gnutls_free_function) (void *); ++typedef void *(*gnutls_realloc_function) (void *, size_t); ++ ++void gnutls_global_set_time_function(gnutls_time_func time_func); ++ ++/* For use in callbacks */ ++extern _SYM_EXPORT gnutls_alloc_function gnutls_malloc; ++extern _SYM_EXPORT gnutls_realloc_function gnutls_realloc; ++extern _SYM_EXPORT gnutls_calloc_function gnutls_calloc; ++extern _SYM_EXPORT gnutls_free_function gnutls_free; ++ ++#ifdef GNUTLS_INTERNAL_BUILD ++#define gnutls_free(a) gnutls_free((void *) (a)), a=NULL ++#endif ++ ++extern _SYM_EXPORT char *(*gnutls_strdup) (const char *); ++ ++/* a variant of memset that doesn't get optimized out */ ++void gnutls_memset(void *data, int c, size_t size); ++ ++/* constant time memcmp */ ++int gnutls_memcmp(const void *s1, const void *s2, size_t n); ++ ++typedef void (*gnutls_log_func) (int, const char *); ++typedef void (*gnutls_audit_log_func) (gnutls_session_t, const char *); ++void gnutls_global_set_log_function(gnutls_log_func log_func); ++void gnutls_global_set_audit_log_function(gnutls_audit_log_func log_func); ++void gnutls_global_set_log_level(int level); ++ ++/* Diffie-Hellman parameter handling. ++ */ ++int gnutls_dh_params_init(gnutls_dh_params_t * dh_params); ++void gnutls_dh_params_deinit(gnutls_dh_params_t dh_params); ++int gnutls_dh_params_import_raw(gnutls_dh_params_t dh_params, ++ const gnutls_datum_t * prime, ++ const gnutls_datum_t * generator); ++int gnutls_dh_params_import_dsa(gnutls_dh_params_t dh_params, gnutls_x509_privkey_t key); ++int gnutls_dh_params_import_raw2(gnutls_dh_params_t dh_params, ++ const gnutls_datum_t * prime, ++ const gnutls_datum_t * generator, ++ unsigned key_bits); ++int gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params, ++ const gnutls_datum_t * pkcs3_params, ++ gnutls_x509_crt_fmt_t format); ++int gnutls_dh_params_generate2(gnutls_dh_params_t params, ++ unsigned int bits); ++int gnutls_dh_params_export_pkcs3(gnutls_dh_params_t params, ++ gnutls_x509_crt_fmt_t format, ++ unsigned char *params_data, ++ size_t * params_data_size); ++int gnutls_dh_params_export2_pkcs3(gnutls_dh_params_t params, ++ gnutls_x509_crt_fmt_t format, ++ gnutls_datum_t * out); ++int gnutls_dh_params_export_raw(gnutls_dh_params_t params, ++ gnutls_datum_t * prime, ++ gnutls_datum_t * generator, ++ unsigned int *bits); ++int gnutls_dh_params_cpy(gnutls_dh_params_t dst, gnutls_dh_params_t src); ++ ++/* Session stuff ++ */ ++typedef struct { ++ void *iov_base; ++ size_t iov_len; ++} giovec_t; ++ ++typedef ssize_t(*gnutls_pull_func) (gnutls_transport_ptr_t, void *, ++ size_t); ++typedef ssize_t(*gnutls_push_func) (gnutls_transport_ptr_t, const void *, ++ size_t); ++ ++int gnutls_system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms); ++typedef int (*gnutls_pull_timeout_func) (gnutls_transport_ptr_t, ++ unsigned int ms); ++ ++typedef ssize_t(*gnutls_vec_push_func) (gnutls_transport_ptr_t, ++ const giovec_t * iov, int iovcnt); ++ ++typedef int (*gnutls_errno_func) (gnutls_transport_ptr_t); ++ ++#if 0 ++ /* This will be defined as macro. */ ++ void gnutls_transport_set_int (gnutls_session_t session, int r); ++#endif ++ ++void gnutls_transport_set_int2(gnutls_session_t session, int r, int s); ++#define gnutls_transport_set_int(s, i) gnutls_transport_set_int2(s, i, i) ++ ++void gnutls_transport_get_int2(gnutls_session_t session, int *r, int *s); ++int gnutls_transport_get_int(gnutls_session_t session); ++ ++void gnutls_transport_set_ptr(gnutls_session_t session, ++ gnutls_transport_ptr_t ptr); ++void gnutls_transport_set_ptr2(gnutls_session_t session, ++ gnutls_transport_ptr_t recv_ptr, ++ gnutls_transport_ptr_t send_ptr); ++ ++gnutls_transport_ptr_t gnutls_transport_get_ptr(gnutls_session_t session); ++void gnutls_transport_get_ptr2(gnutls_session_t session, ++ gnutls_transport_ptr_t * recv_ptr, ++ gnutls_transport_ptr_t * send_ptr); ++ ++void gnutls_transport_set_vec_push_function(gnutls_session_t session, ++ gnutls_vec_push_func vec_func); ++void gnutls_transport_set_push_function(gnutls_session_t session, ++ gnutls_push_func push_func); ++void gnutls_transport_set_pull_function(gnutls_session_t session, ++ gnutls_pull_func pull_func); ++ ++void gnutls_transport_set_pull_timeout_function(gnutls_session_t session, ++ gnutls_pull_timeout_func ++ func); ++ ++void gnutls_transport_set_errno_function(gnutls_session_t session, ++ gnutls_errno_func errno_func); ++ ++void gnutls_transport_set_errno(gnutls_session_t session, int err); ++ ++/* session specific ++ */ ++void gnutls_session_set_ptr(gnutls_session_t session, void *ptr); ++void *gnutls_session_get_ptr(gnutls_session_t session); ++ ++void gnutls_openpgp_send_cert(gnutls_session_t session, ++ gnutls_openpgp_crt_status_t status); ++ ++/* This function returns the hash of the given data. ++ */ ++int gnutls_fingerprint(gnutls_digest_algorithm_t algo, ++ const gnutls_datum_t * data, void *result, ++ size_t * result_size); ++ ++ /** ++ * gnutls_random_art_t: ++ * @GNUTLS_RANDOM_ART_OPENSSH: OpenSSH-style random art. ++ * ++ * Enumeration of different random art types. ++ */ ++typedef enum gnutls_random_art { ++ GNUTLS_RANDOM_ART_OPENSSH = 1 ++} gnutls_random_art_t; ++ ++int gnutls_random_art(gnutls_random_art_t type, ++ const char *key_type, unsigned int key_size, ++ void *fpr, size_t fpr_size, gnutls_datum_t * art); ++ ++/* IDNA */ ++#define GNUTLS_IDNA_FORCE_2008 (1<<1) ++int gnutls_idna_map(const char * input, unsigned ilen, gnutls_datum_t *out, unsigned flags); ++int gnutls_idna_reverse_map(const char *input, unsigned ilen, gnutls_datum_t *out, unsigned flags); ++ ++/* SRP ++ */ ++ ++typedef struct gnutls_srp_server_credentials_st ++*gnutls_srp_server_credentials_t; ++typedef struct gnutls_srp_client_credentials_st ++*gnutls_srp_client_credentials_t; ++ ++void ++gnutls_srp_free_client_credentials(gnutls_srp_client_credentials_t sc); ++int ++gnutls_srp_allocate_client_credentials(gnutls_srp_client_credentials_t * ++ sc); ++int gnutls_srp_set_client_credentials(gnutls_srp_client_credentials_t res, ++ const char *username, ++ const char *password); ++ ++void ++gnutls_srp_free_server_credentials(gnutls_srp_server_credentials_t sc); ++int ++gnutls_srp_allocate_server_credentials(gnutls_srp_server_credentials_t * ++ sc); ++int gnutls_srp_set_server_credentials_file(gnutls_srp_server_credentials_t ++ res, const char *password_file, ++ const char *password_conf_file); ++ ++const char *gnutls_srp_server_get_username(gnutls_session_t session); ++ ++void gnutls_srp_set_prime_bits(gnutls_session_t session, ++ unsigned int bits); ++ ++int gnutls_srp_verifier(const char *username, ++ const char *password, ++ const gnutls_datum_t * salt, ++ const gnutls_datum_t * generator, ++ const gnutls_datum_t * prime, ++ gnutls_datum_t * res); ++ ++/* The static parameters defined in draft-ietf-tls-srp-05 ++ * Those should be used as input to gnutls_srp_verifier(). ++ */ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_8192_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_8192_group_generator; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_4096_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_4096_group_generator; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_3072_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_3072_group_generator; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_2048_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_2048_group_generator; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1536_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1536_group_generator; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1024_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1024_group_generator; ++ ++/* The static parameters defined in rfc7919 ++ */ ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_generator; ++extern _SYM_EXPORT const unsigned int gnutls_ffdhe_8192_key_bits; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_6144_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_6144_group_generator; ++extern _SYM_EXPORT const unsigned int gnutls_ffdhe_6144_key_bits; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_generator; ++extern _SYM_EXPORT const unsigned int gnutls_ffdhe_4096_key_bits; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_generator; ++extern _SYM_EXPORT const unsigned int gnutls_ffdhe_3072_key_bits; ++ ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_prime; ++extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_generator; ++extern _SYM_EXPORT const unsigned int gnutls_ffdhe_2048_key_bits; ++ ++typedef int gnutls_srp_server_credentials_function(gnutls_session_t, ++ const char *username, ++ gnutls_datum_t * salt, ++ gnutls_datum_t * ++ verifier, ++ gnutls_datum_t * ++ generator, ++ gnutls_datum_t * prime); ++void ++gnutls_srp_set_server_credentials_function(gnutls_srp_server_credentials_t ++ cred, ++ gnutls_srp_server_credentials_function ++ * func); ++ ++typedef int gnutls_srp_client_credentials_function(gnutls_session_t, ++ char **, char **); ++void ++gnutls_srp_set_client_credentials_function(gnutls_srp_client_credentials_t ++ cred, ++ gnutls_srp_client_credentials_function ++ * func); ++ ++int gnutls_srp_base64_encode(const gnutls_datum_t * data, char *result, ++ size_t * result_size); ++int gnutls_srp_base64_encode2(const gnutls_datum_t * data, ++ gnutls_datum_t * result); ++ ++int gnutls_srp_base64_decode(const gnutls_datum_t * b64_data, char *result, ++ size_t * result_size); ++int gnutls_srp_base64_decode2(const gnutls_datum_t * b64_data, ++ gnutls_datum_t * result); ++ ++#define gnutls_srp_base64_encode_alloc gnutls_srp_base64_encode2 ++#define gnutls_srp_base64_decode_alloc gnutls_srp_base64_decode2 ++ ++void ++gnutls_srp_set_server_fake_salt_seed(gnutls_srp_server_credentials_t ++ sc, ++ const gnutls_datum_t * seed, ++ unsigned int salt_length); ++ ++/* PSK stuff */ ++typedef struct gnutls_psk_server_credentials_st ++*gnutls_psk_server_credentials_t; ++typedef struct gnutls_psk_client_credentials_st ++*gnutls_psk_client_credentials_t; ++ ++/** ++ * gnutls_psk_key_flags: ++ * @GNUTLS_PSK_KEY_RAW: PSK-key in raw format. ++ * @GNUTLS_PSK_KEY_HEX: PSK-key in hex format. ++ * ++ * Enumeration of different PSK key flags. ++ */ ++typedef enum gnutls_psk_key_flags { ++ GNUTLS_PSK_KEY_RAW = 0, ++ GNUTLS_PSK_KEY_HEX ++} gnutls_psk_key_flags; ++ ++void ++gnutls_psk_free_client_credentials(gnutls_psk_client_credentials_t sc); ++int ++gnutls_psk_allocate_client_credentials(gnutls_psk_client_credentials_t * ++ sc); ++int gnutls_psk_set_client_credentials(gnutls_psk_client_credentials_t res, ++ const char *username, ++ const gnutls_datum_t * key, ++ gnutls_psk_key_flags flags); ++ ++void ++gnutls_psk_free_server_credentials(gnutls_psk_server_credentials_t sc); ++int ++gnutls_psk_allocate_server_credentials(gnutls_psk_server_credentials_t * ++ sc); ++int gnutls_psk_set_server_credentials_file(gnutls_psk_server_credentials_t ++ res, const char *password_file); ++ ++int ++gnutls_psk_set_server_credentials_hint(gnutls_psk_server_credentials_t ++ res, const char *hint); ++ ++const char *gnutls_psk_server_get_username(gnutls_session_t session); ++const char *gnutls_psk_client_get_hint(gnutls_session_t session); ++ ++typedef int gnutls_psk_server_credentials_function(gnutls_session_t, ++ const char *username, ++ gnutls_datum_t * key); ++void ++gnutls_psk_set_server_credentials_function(gnutls_psk_server_credentials_t ++ cred, ++ gnutls_psk_server_credentials_function ++ * func); ++ ++typedef int gnutls_psk_client_credentials_function(gnutls_session_t, ++ char **username, ++ gnutls_datum_t * key); ++void ++gnutls_psk_set_client_credentials_function(gnutls_psk_client_credentials_t ++ cred, ++ gnutls_psk_client_credentials_function ++ * func); ++ ++int gnutls_hex_encode(const gnutls_datum_t * data, char *result, ++ size_t * result_size); ++int gnutls_hex_decode(const gnutls_datum_t * hex_data, void *result, ++ size_t * result_size); ++ ++int gnutls_hex_encode2(const gnutls_datum_t * data, gnutls_datum_t *result); ++int gnutls_hex_decode2(const gnutls_datum_t * data, gnutls_datum_t *result); ++ ++void ++gnutls_psk_set_server_dh_params(gnutls_psk_server_credentials_t res, ++ gnutls_dh_params_t dh_params); ++ ++int ++gnutls_psk_set_server_known_dh_params(gnutls_psk_server_credentials_t res, ++ gnutls_sec_param_t sec_param); ++ ++void ++gnutls_psk_set_server_params_function(gnutls_psk_server_credentials_t ++ res, gnutls_params_function * func); ++ ++/** ++ * gnutls_x509_subject_alt_name_t: ++ * @GNUTLS_SAN_DNSNAME: DNS-name SAN. ++ * @GNUTLS_SAN_RFC822NAME: E-mail address SAN. ++ * @GNUTLS_SAN_URI: URI SAN. ++ * @GNUTLS_SAN_IPADDRESS: IP address SAN. ++ * @GNUTLS_SAN_OTHERNAME: OtherName SAN. ++ * @GNUTLS_SAN_DN: DN SAN. ++ * @GNUTLS_SAN_OTHERNAME_XMPP: Virtual SAN, used by certain functions for convenience. ++ * @GNUTLS_SAN_OTHERNAME_KRB5PRINCIPAL: Virtual SAN, used by certain functions for convenience. ++ * ++ * Enumeration of different subject alternative names types. ++ */ ++typedef enum gnutls_x509_subject_alt_name_t { ++ GNUTLS_SAN_DNSNAME = 1, ++ GNUTLS_SAN_RFC822NAME = 2, ++ GNUTLS_SAN_URI = 3, ++ GNUTLS_SAN_IPADDRESS = 4, ++ GNUTLS_SAN_OTHERNAME = 5, ++ GNUTLS_SAN_DN = 6, ++ GNUTLS_SAN_MAX = GNUTLS_SAN_DN, ++ /* The following are "virtual" subject alternative name types, in ++ that they are represented by an otherName value and an OID. ++ Used by gnutls_x509_crt_get_subject_alt_othername_oid. */ ++ GNUTLS_SAN_OTHERNAME_XMPP = 1000, ++ GNUTLS_SAN_OTHERNAME_KRB5PRINCIPAL ++} gnutls_x509_subject_alt_name_t; ++ ++struct gnutls_openpgp_crt_int; ++typedef struct gnutls_openpgp_crt_int *gnutls_openpgp_crt_t; ++ ++struct gnutls_openpgp_privkey_int; ++typedef struct gnutls_openpgp_privkey_int *gnutls_openpgp_privkey_t; ++ ++struct gnutls_pkcs11_privkey_st; ++typedef struct gnutls_pkcs11_privkey_st *gnutls_pkcs11_privkey_t; ++ ++/** ++ * gnutls_privkey_type_t: ++ * @GNUTLS_PRIVKEY_X509: X.509 private key, #gnutls_x509_privkey_t. ++ * @GNUTLS_PRIVKEY_OPENPGP: OpenPGP private key, #gnutls_openpgp_privkey_t. ++ * @GNUTLS_PRIVKEY_PKCS11: PKCS11 private key, #gnutls_pkcs11_privkey_t. ++ * @GNUTLS_PRIVKEY_EXT: External private key, operating using callbacks. ++ * ++ * Enumeration of different private key types. ++ */ ++typedef enum { ++ GNUTLS_PRIVKEY_X509, ++ GNUTLS_PRIVKEY_OPENPGP, ++ GNUTLS_PRIVKEY_PKCS11, ++ GNUTLS_PRIVKEY_EXT ++} gnutls_privkey_type_t; ++ ++typedef struct gnutls_retr2_st { ++ gnutls_certificate_type_t cert_type; ++ gnutls_privkey_type_t key_type; ++ ++ union { ++ gnutls_x509_crt_t *x509; ++ gnutls_openpgp_crt_t pgp; ++ } cert; ++ unsigned int ncerts; /* one for pgp keys */ ++ ++ union { ++ gnutls_x509_privkey_t x509; ++ gnutls_openpgp_privkey_t pgp; ++ gnutls_pkcs11_privkey_t pkcs11; ++ } key; ++ ++ unsigned int deinit_all; /* if non zero all keys will be deinited */ ++} gnutls_retr2_st; ++ ++ /* Functions that allow auth_info_t structures handling ++ */ ++ ++gnutls_credentials_type_t gnutls_auth_get_type(gnutls_session_t session); ++gnutls_credentials_type_t ++gnutls_auth_server_get_type(gnutls_session_t session); ++gnutls_credentials_type_t ++gnutls_auth_client_get_type(gnutls_session_t session); ++ ++ /* DH */ ++ ++void gnutls_dh_set_prime_bits(gnutls_session_t session, unsigned int bits); ++int gnutls_dh_get_secret_bits(gnutls_session_t session); ++int gnutls_dh_get_peers_public_bits(gnutls_session_t session); ++int gnutls_dh_get_prime_bits(gnutls_session_t session); ++ ++int gnutls_dh_get_group(gnutls_session_t session, gnutls_datum_t * raw_gen, ++ gnutls_datum_t * raw_prime); ++int gnutls_dh_get_pubkey(gnutls_session_t session, ++ gnutls_datum_t * raw_key); ++ ++ /* X509PKI */ ++ ++ /* These are set on the credentials structure. ++ */ ++ ++ /* use gnutls_certificate_set_retrieve_function2() in abstract.h ++ * instead. It's much more efficient. ++ */ ++ ++typedef int gnutls_certificate_retrieve_function(gnutls_session_t, ++ const ++ gnutls_datum_t * ++ req_ca_rdn, ++ int nreqs, ++ const ++ gnutls_pk_algorithm_t ++ * pk_algos, ++ int ++ pk_algos_length, ++ gnutls_retr2_st *); ++ ++void ++gnutls_certificate_set_retrieve_function(gnutls_certificate_credentials_t ++ cred, ++ gnutls_certificate_retrieve_function ++ * func); ++ ++void ++gnutls_certificate_set_verify_function(gnutls_certificate_credentials_t ++ cred, ++ gnutls_certificate_verify_function ++ * func); ++ ++void ++gnutls_certificate_server_set_request(gnutls_session_t session, ++ gnutls_certificate_request_t req); ++ ++ /* get data from the session ++ */ ++const gnutls_datum_t *gnutls_certificate_get_peers(gnutls_session_t ++ session, unsigned int ++ *list_size); ++const gnutls_datum_t *gnutls_certificate_get_ours(gnutls_session_t ++ session); ++ ++int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session, ++ gnutls_datum_t * id); ++ ++time_t gnutls_certificate_activation_time_peers(gnutls_session_t session); ++time_t gnutls_certificate_expiration_time_peers(gnutls_session_t session); ++ ++unsigned gnutls_certificate_client_get_request_status(gnutls_session_t session); ++int gnutls_certificate_verify_peers2(gnutls_session_t session, ++ unsigned int *status); ++int gnutls_certificate_verify_peers3(gnutls_session_t session, ++ const char *hostname, ++ unsigned int *status); ++ ++int ++gnutls_certificate_verify_peers(gnutls_session_t session, ++ gnutls_typed_vdata_st * data, ++ unsigned int elements, ++ unsigned int *status); ++ ++int gnutls_certificate_verification_status_print(unsigned int status, ++ gnutls_certificate_type_t ++ type, ++ gnutls_datum_t * out, ++ unsigned int flags); ++ ++int gnutls_pem_base64_encode(const char *msg, const gnutls_datum_t * data, ++ char *result, size_t * result_size); ++int gnutls_pem_base64_decode(const char *header, ++ const gnutls_datum_t * b64_data, ++ unsigned char *result, size_t * result_size); ++ ++int gnutls_pem_base64_encode2(const char *msg, ++ const gnutls_datum_t * data, ++ gnutls_datum_t * result); ++int gnutls_pem_base64_decode2(const char *header, ++ const gnutls_datum_t * b64_data, ++ gnutls_datum_t * result); ++ ++#define gnutls_pem_base64_encode_alloc gnutls_pem_base64_encode2 ++#define gnutls_pem_base64_decode_alloc gnutls_pem_base64_decode2 ++ ++ /* key_usage will be an OR of the following values: ++ */ ++ ++ /* when the key is to be used for signing: */ ++#define GNUTLS_KEY_DIGITAL_SIGNATURE 128 ++#define GNUTLS_KEY_NON_REPUDIATION 64 ++ /* when the key is to be used for encryption: */ ++#define GNUTLS_KEY_KEY_ENCIPHERMENT 32 ++#define GNUTLS_KEY_DATA_ENCIPHERMENT 16 ++#define GNUTLS_KEY_KEY_AGREEMENT 8 ++#define GNUTLS_KEY_KEY_CERT_SIGN 4 ++#define GNUTLS_KEY_CRL_SIGN 2 ++#define GNUTLS_KEY_ENCIPHER_ONLY 1 ++#define GNUTLS_KEY_DECIPHER_ONLY 32768 ++ ++void ++gnutls_certificate_set_params_function(gnutls_certificate_credentials_t ++ res, gnutls_params_function * func); ++void gnutls_anon_set_params_function(gnutls_anon_server_credentials_t res, ++ gnutls_params_function * func); ++void gnutls_psk_set_params_function(gnutls_psk_server_credentials_t res, ++ gnutls_params_function * func); ++ ++int gnutls_hex2bin(const char *hex_data, size_t hex_size, ++ void *bin_data, size_t * bin_size); ++ ++ /* Trust on first use (or ssh like) functions */ ++ ++ /* stores the provided information to a database ++ */ ++typedef int (*gnutls_tdb_store_func) (const char *db_name, ++ const char *host, ++ const char *service, ++ time_t expiration, ++ const gnutls_datum_t * pubkey); ++ ++typedef int (*gnutls_tdb_store_commitment_func) (const char *db_name, ++ const char *host, ++ const char *service, ++ time_t expiration, ++ gnutls_digest_algorithm_t ++ hash_algo, ++ const gnutls_datum_t * ++ hash); ++ ++ /* searches for the provided host/service pair that match the ++ * provided public key in the database. */ ++typedef int (*gnutls_tdb_verify_func) (const char *db_name, ++ const char *host, ++ const char *service, ++ const gnutls_datum_t * pubkey); ++ ++struct gnutls_tdb_int; ++typedef struct gnutls_tdb_int *gnutls_tdb_t; ++ ++int gnutls_tdb_init(gnutls_tdb_t * tdb); ++void gnutls_tdb_set_store_func(gnutls_tdb_t tdb, ++ gnutls_tdb_store_func store); ++void gnutls_tdb_set_store_commitment_func(gnutls_tdb_t tdb, ++ gnutls_tdb_store_commitment_func ++ cstore); ++void gnutls_tdb_set_verify_func(gnutls_tdb_t tdb, ++ gnutls_tdb_verify_func verify); ++void gnutls_tdb_deinit(gnutls_tdb_t tdb); ++ ++int gnutls_verify_stored_pubkey(const char *db_name, ++ gnutls_tdb_t tdb, ++ const char *host, ++ const char *service, ++ gnutls_certificate_type_t cert_type, ++ const gnutls_datum_t * cert, ++ unsigned int flags); ++ ++#define GNUTLS_SCOMMIT_FLAG_ALLOW_BROKEN 1 ++int gnutls_store_commitment(const char *db_name, ++ gnutls_tdb_t tdb, ++ const char *host, ++ const char *service, ++ gnutls_digest_algorithm_t hash_algo, ++ const gnutls_datum_t * hash, ++ time_t expiration, unsigned int flags); ++ ++int gnutls_store_pubkey(const char *db_name, ++ gnutls_tdb_t tdb, ++ const char *host, ++ const char *service, ++ gnutls_certificate_type_t cert_type, ++ const gnutls_datum_t * cert, ++ time_t expiration, unsigned int flags); ++ ++ /* Other helper functions */ ++int gnutls_load_file(const char *filename, gnutls_datum_t * data); ++ ++unsigned gnutls_url_is_supported(const char *url); ++ ++ /* PIN callback */ ++ ++/** ++ * gnutls_pin_flag_t: ++ * @GNUTLS_PIN_USER: The PIN for the user. ++ * @GNUTLS_PIN_SO: The PIN for the security officer (admin). ++ * @GNUTLS_PIN_CONTEXT_SPECIFIC: The PIN is for a specific action and key like signing. ++ * @GNUTLS_PIN_FINAL_TRY: This is the final try before blocking. ++ * @GNUTLS_PIN_COUNT_LOW: Few tries remain before token blocks. ++ * @GNUTLS_PIN_WRONG: Last given PIN was not correct. ++ * ++ * Enumeration of different flags that are input to the PIN function. ++ */ ++typedef enum { ++ GNUTLS_PIN_USER = (1 << 0), ++ GNUTLS_PIN_SO = (1 << 1), ++ GNUTLS_PIN_FINAL_TRY = (1 << 2), ++ GNUTLS_PIN_COUNT_LOW = (1 << 3), ++ GNUTLS_PIN_CONTEXT_SPECIFIC = (1 << 4), ++ GNUTLS_PIN_WRONG = (1 << 5) ++} gnutls_pin_flag_t; ++ ++#define GNUTLS_PKCS11_PIN_USER GNUTLS_PIN_USER ++#define GNUTLS_PKCS11_PIN_SO GNUTLS_PIN_SO ++#define GNUTLS_PKCS11_PIN_FINAL_TRY GNUTLS_PIN_FINAL_TRY ++#define GNUTLS_PKCS11_PIN_COUNT_LOW GNUTLS_PIN_COUNT_LOW ++#define GNUTLS_PKCS11_PIN_CONTEXT_SPECIFIC GNUTLS_PIN_CONTEXT_SPECIFIC ++#define GNUTLS_PKCS11_PIN_WRONG GNUTLS_PIN_WRONG ++ ++/** ++ * gnutls_pin_callback_t: ++ * @userdata: user-controlled data from gnutls_pkcs11_set_pin_function(). ++ * @attempt: pin-attempt counter, initially 0. ++ * @token_url: URL of token. ++ * @token_label: label of token. ++ * @flags: a #gnutls_pin_flag_t flag. ++ * @pin: buffer to hold PIN, of size @pin_max. ++ * @pin_max: size of @pin buffer. ++ * ++ * Callback function type for PKCS#11 or TPM PIN entry. It is set by ++ * functions like gnutls_pkcs11_set_pin_function(). ++ * ++ * The callback should provides the PIN code to unlock the token with ++ * label @token_label, specified by the URL @token_url. ++ * ++ * The PIN code, as a NUL-terminated ASCII string, should be copied ++ * into the @pin buffer (of maximum size @pin_max), and return 0 to ++ * indicate success. Alternatively, the callback may return a ++ * negative gnutls error code to indicate failure and cancel PIN entry ++ * (in which case, the contents of the @pin parameter are ignored). ++ * ++ * When a PIN is required, the callback will be invoked repeatedly ++ * (and indefinitely) until either the returned PIN code is correct, ++ * the callback returns failure, or the token refuses login (e.g. when ++ * the token is locked due to too many incorrect PINs!). For the ++ * first such invocation, the @attempt counter will have value zero; ++ * it will increase by one for each subsequent attempt. ++ * ++ * Returns: %GNUTLS_E_SUCCESS (0) on success or a negative error code on error. ++ * ++ * Since: 2.12.0 ++ **/ ++typedef int (*gnutls_pin_callback_t) (void *userdata, int attempt, ++ const char *token_url, ++ const char *token_label, ++ unsigned int flags, ++ char *pin, size_t pin_max); ++ ++void gnutls_certificate_set_pin_function(gnutls_certificate_credentials_t, ++ gnutls_pin_callback_t fn, ++ void *userdata); ++ ++/* Public string related functions */ ++typedef struct gnutls_buffer_st *gnutls_buffer_t; ++ ++int gnutls_buffer_append_data(gnutls_buffer_t, const void *data, size_t data_size); ++ ++#define GNUTLS_UTF8_IGNORE_ERRS 1 ++int gnutls_utf8_password_normalize(const unsigned char *password, unsigned password_len, ++ gnutls_datum_t *out, unsigned flags); ++ ++/* Public extensions related functions */ ++ ++typedef void *gnutls_ext_priv_data_t; ++ ++void gnutls_ext_set_data(gnutls_session_t session, unsigned type, ++ gnutls_ext_priv_data_t); ++int gnutls_ext_get_data(gnutls_session_t session, unsigned type, ++ gnutls_ext_priv_data_t *); ++ ++unsigned gnutls_ext_get_current_msg(gnutls_session_t session); ++ ++typedef int (*gnutls_ext_recv_func) (gnutls_session_t session, ++ const unsigned char *data, ++ size_t len); ++ ++typedef int (*gnutls_ext_send_func) (gnutls_session_t session, ++ gnutls_buffer_t extdata); ++ ++typedef void (*gnutls_ext_deinit_data_func) (gnutls_ext_priv_data_t data); ++ ++typedef int (*gnutls_ext_pack_func) (gnutls_ext_priv_data_t data, ++ gnutls_buffer_t packed_data); ++ ++typedef int (*gnutls_ext_unpack_func) (gnutls_buffer_t packed_data, ++ gnutls_ext_priv_data_t *data); ++ ++#define GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO 1 ++#define GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO (1<<1) ++typedef int (*gnutls_ext_raw_process_func)(void *ctx, unsigned tls_id, const unsigned char *data, unsigned data_size); ++int gnutls_ext_raw_parse(void *ctx, gnutls_ext_raw_process_func cb, ++ const gnutls_datum_t *data, unsigned int flags); ++ ++/** ++ * gnutls_ext_parse_type_t: ++ * @GNUTLS_EXT_NONE: Never to be parsed ++ * @GNUTLS_EXT_ANY: Any extension type (should not be used as it is used only internally). ++ * @GNUTLS_EXT_VERSION_NEG: Extensions to be parsed first for TLS version negotiation. ++ * @GNUTLS_EXT_MANDATORY: Parsed after @GNUTLS_EXT_VERSION_NEG and even when resuming. ++ * @GNUTLS_EXT_APPLICATION: Parsed after @GNUTLS_EXT_MANDATORY ++ * @GNUTLS_EXT_TLS: TLS-internal extensions, parsed after @GNUTLS_EXT_APPLICATION. ++ * ++ * Enumeration of different TLS extension parsing phases. The @gnutls_ext_parse_type_t ++ * indicates the time/phase an extension is parsed during Client or Server hello parsing. ++ * ++ */ ++typedef enum { ++ GNUTLS_EXT_ANY = 0, ++ GNUTLS_EXT_APPLICATION = 1, ++ GNUTLS_EXT_TLS = 2, ++ GNUTLS_EXT_MANDATORY = 3, ++ GNUTLS_EXT_NONE = 4, ++ GNUTLS_EXT_VERSION_NEG = 5 ++} gnutls_ext_parse_type_t; ++ ++/** ++ * gnutls_ext_flags_t: ++ * @GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL: If specified the extension registered will override the internal; this does not work with extensions existing prior to 3.6.0. ++ * @GNUTLS_EXT_FLAG_CLIENT_HELLO: This extension can be present in a client hello ++ * @GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO: This extension can be present in a TLS1.2 or earlier server hello ++ * @GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO: This extension can be present in a TLS1.3 server hello ++ * @GNUTLS_EXT_FLAG_EE: This extension can be present in encrypted extensions message ++ * @GNUTLS_EXT_FLAG_HRR: This extension can be present in hello retry request message ++ * @GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST: When flag is present, this extension will be send even if the client didn't advertise it. An extension of this type is the Cookie TLS1.3 extension. ++ * @GNUTLS_EXT_FLAG_DTLS: This extension can be present under DTLS; otherwise ignored. ++ * @GNUTLS_EXT_FLAG_TLS: This extension can be present under TLS; otherwise ignored. ++ * ++ * Enumeration of different TLS extension registration flags. ++ */ ++typedef enum { ++ GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL = 1, ++ GNUTLS_EXT_FLAG_CLIENT_HELLO = (1<<1), ++ GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO = (1<<2), ++ GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO = (1<<3), ++ GNUTLS_EXT_FLAG_EE = (1<<4), /* ENCRYPTED */ ++ GNUTLS_EXT_FLAG_HRR = (1<<5), ++ GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST = (1<<6), ++ GNUTLS_EXT_FLAG_TLS = (1<<7), ++ GNUTLS_EXT_FLAG_DTLS = (1<<8) ++} gnutls_ext_flags_t; ++ ++/* Register a custom tls extension ++ */ ++int gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_type, ++ gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, ++ gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, ++ gnutls_ext_unpack_func unpack_func); ++ ++int gnutls_session_ext_register(gnutls_session_t, const char *name, int type, gnutls_ext_parse_type_t parse_type, ++ gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, ++ gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, ++ gnutls_ext_unpack_func unpack_func, unsigned flags); ++ ++const char *gnutls_ext_get_name(unsigned int ext); ++ ++/* Public supplemental data related functions */ ++ ++typedef int (*gnutls_supp_recv_func) (gnutls_session_t session, ++ const unsigned char * data, size_t data_size); ++typedef int (*gnutls_supp_send_func) (gnutls_session_t session, ++ gnutls_buffer_t buf); ++ ++int gnutls_supplemental_register(const char *name, ++ gnutls_supplemental_data_format_type_t type, ++ gnutls_supp_recv_func supp_recv_func, ++ gnutls_supp_send_func supp_send_func); ++ ++int gnutls_session_supplemental_register(gnutls_session_t session, const char *name, ++ gnutls_supplemental_data_format_type_t type, ++ gnutls_supp_recv_func supp_recv_func, ++ gnutls_supp_send_func supp_send_func, ++ unsigned int flags); ++ ++void gnutls_supplemental_recv(gnutls_session_t session, unsigned do_recv_supplemental); ++ ++void gnutls_supplemental_send(gnutls_session_t session, unsigned do_send_supplemental); ++ ++/* Anti-replay related functions */ ++ ++typedef struct gnutls_anti_replay_st *gnutls_anti_replay_t; ++ ++int gnutls_anti_replay_init(gnutls_anti_replay_t *anti_replay); ++void gnutls_anti_replay_deinit(gnutls_anti_replay_t anti_replay); ++void gnutls_anti_replay_set_window(gnutls_anti_replay_t anti_replay, ++ unsigned int window); ++void gnutls_anti_replay_enable(gnutls_session_t session, ++ gnutls_anti_replay_t anti_replay); ++ ++typedef int (*gnutls_db_add_func) (void *, time_t exp_time, const gnutls_datum_t *key, ++ const gnutls_datum_t *data); ++ ++void gnutls_anti_replay_set_add_function(gnutls_anti_replay_t, ++ gnutls_db_add_func add_func); ++ ++void gnutls_anti_replay_set_ptr(gnutls_anti_replay_t, void *ptr); ++ ++/* FIPS140-2 related functions */ ++unsigned gnutls_fips140_mode_enabled(void); ++ ++/** ++ * gnutls_fips_mode_t: ++ * @GNUTLS_FIPS140_DISABLED: The FIPS140-2 mode is disabled. ++ * @GNUTLS_FIPS140_STRICT: The default mode; all forbidden operations will cause an ++ * operation failure via error code. ++ * @GNUTLS_FIPS140_LAX: The library still uses the FIPS140-2 relevant algorithms but all ++ * forbidden by FIPS140-2 operations are allowed; this is useful when the ++ * application is aware of the followed security policy, and needs ++ * to utilize disallowed operations for other reasons (e.g., compatibility). ++ * @GNUTLS_FIPS140_LOG: Similarly to %GNUTLS_FIPS140_LAX, it allows forbidden operations; any use of them results ++ * to a message to the audit callback functions. ++ * @GNUTLS_FIPS140_SELFTESTS: A transient state during library initialization. That state ++ * cannot be set or seen by applications. ++ * ++ * Enumeration of different operational modes under FIPS140-2. ++ */ ++typedef enum gnutls_fips_mode_t { ++ GNUTLS_FIPS140_DISABLED = 0, ++ GNUTLS_FIPS140_STRICT = 1, ++ GNUTLS_FIPS140_SELFTESTS = 2, ++ GNUTLS_FIPS140_LAX = 3, ++ GNUTLS_FIPS140_LOG = 4 ++} gnutls_fips_mode_t; ++ ++#define GNUTLS_FIPS140_SET_MODE_THREAD 1 ++ ++void gnutls_fips140_set_mode(gnutls_fips_mode_t mode, unsigned flags); ++ ++#define GNUTLS_FIPS140_SET_LAX_MODE() do { \ ++ if (gnutls_fips140_mode_enabled()) \ ++ gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, GNUTLS_FIPS140_SET_MODE_THREAD); \ ++ } while(0) ++ ++#define GNUTLS_FIPS140_SET_STRICT_MODE() do { \ ++ if (gnutls_fips140_mode_enabled()) \ ++ gnutls_fips140_set_mode(GNUTLS_FIPS140_STRICT, GNUTLS_FIPS140_SET_MODE_THREAD); \ ++ } while(0) ++ ++ /* Gnutls error codes. The mapping to a TLS alert is also shown in ++ * comments. ++ */ ++ ++#define GNUTLS_E_SUCCESS 0 ++#define GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM -3 ++#define GNUTLS_E_UNKNOWN_CIPHER_TYPE -6 ++#define GNUTLS_E_LARGE_PACKET -7 ++#define GNUTLS_E_UNSUPPORTED_VERSION_PACKET -8 /* GNUTLS_A_PROTOCOL_VERSION */ ++#define GNUTLS_E_TLS_PACKET_DECODING_ERROR GNUTLS_E_UNEXPECTED_PACKET_LENGTH ++#define GNUTLS_E_UNEXPECTED_PACKET_LENGTH -9 /* GNUTLS_A_DECODE_ERROR */ ++#define GNUTLS_E_INVALID_SESSION -10 ++#define GNUTLS_E_FATAL_ALERT_RECEIVED -12 ++#define GNUTLS_E_UNEXPECTED_PACKET -15 /* GNUTLS_A_UNEXPECTED_MESSAGE */ ++#define GNUTLS_E_WARNING_ALERT_RECEIVED -16 ++#define GNUTLS_E_ERROR_IN_FINISHED_PACKET -18 ++#define GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET -19 ++#define GNUTLS_E_UNKNOWN_CIPHER_SUITE -21 /* GNUTLS_A_HANDSHAKE_FAILURE */ ++#define GNUTLS_E_UNWANTED_ALGORITHM -22 ++#define GNUTLS_E_MPI_SCAN_FAILED -23 ++#define GNUTLS_E_DECRYPTION_FAILED -24 /* GNUTLS_A_DECRYPTION_FAILED, GNUTLS_A_BAD_RECORD_MAC */ ++#define GNUTLS_E_MEMORY_ERROR -25 ++#define GNUTLS_E_DECOMPRESSION_FAILED -26 /* GNUTLS_A_DECOMPRESSION_FAILURE */ ++#define GNUTLS_E_COMPRESSION_FAILED -27 ++#define GNUTLS_E_AGAIN -28 ++#define GNUTLS_E_EXPIRED -29 ++#define GNUTLS_E_DB_ERROR -30 ++#define GNUTLS_E_SRP_PWD_ERROR GNUTLS_E_KEYFILE_ERROR ++#define GNUTLS_E_KEYFILE_ERROR -31 ++#define GNUTLS_E_INSUFFICIENT_CREDENTIALS -32 ++#define GNUTLS_E_INSUFICIENT_CREDENTIALS GNUTLS_E_INSUFFICIENT_CREDENTIALS /* for backwards compatibility only */ ++#define GNUTLS_E_INSUFFICIENT_CRED GNUTLS_E_INSUFFICIENT_CREDENTIALS ++#define GNUTLS_E_INSUFICIENT_CRED GNUTLS_E_INSUFFICIENT_CREDENTIALS /* for backwards compatibility only */ ++ ++#define GNUTLS_E_HASH_FAILED -33 ++#define GNUTLS_E_BASE64_DECODING_ERROR -34 ++ ++#define GNUTLS_E_MPI_PRINT_FAILED -35 ++#define GNUTLS_E_REHANDSHAKE -37 /* GNUTLS_A_NO_RENEGOTIATION */ ++#define GNUTLS_E_GOT_APPLICATION_DATA -38 ++#define GNUTLS_E_RECORD_LIMIT_REACHED -39 ++#define GNUTLS_E_ENCRYPTION_FAILED -40 ++ ++#define GNUTLS_E_PK_ENCRYPTION_FAILED -44 ++#define GNUTLS_E_PK_DECRYPTION_FAILED -45 ++#define GNUTLS_E_PK_SIGN_FAILED -46 ++#define GNUTLS_E_X509_UNSUPPORTED_CRITICAL_EXTENSION -47 ++#define GNUTLS_E_KEY_USAGE_VIOLATION -48 ++#define GNUTLS_E_NO_CERTIFICATE_FOUND -49 /* GNUTLS_A_BAD_CERTIFICATE */ ++#define GNUTLS_E_INVALID_REQUEST -50 ++#define GNUTLS_E_SHORT_MEMORY_BUFFER -51 ++#define GNUTLS_E_INTERRUPTED -52 ++#define GNUTLS_E_PUSH_ERROR -53 ++#define GNUTLS_E_PULL_ERROR -54 ++#define GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER -55 /* GNUTLS_A_ILLEGAL_PARAMETER */ ++#define GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE -56 ++#define GNUTLS_E_PKCS1_WRONG_PAD -57 ++#define GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION -58 ++#define GNUTLS_E_INTERNAL_ERROR -59 ++#define GNUTLS_E_DH_PRIME_UNACCEPTABLE -63 ++#define GNUTLS_E_FILE_ERROR -64 ++#define GNUTLS_E_TOO_MANY_EMPTY_PACKETS -78 ++#define GNUTLS_E_UNKNOWN_PK_ALGORITHM -80 ++#define GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS -81 ++#define GNUTLS_E_RECEIVED_DISALLOWED_NAME -82 /* GNUTLS_A_ILLEGAL_PARAMETER */ ++#define GNUTLS_E_CERTIFICATE_REQUIRED -112 /* GNUTLS_A_CERTIFICATE_REQUIRED */ ++ ++ /* returned if you need to generate temporary RSA ++ * parameters. These are needed for export cipher suites. ++ */ ++#define GNUTLS_E_NO_TEMPORARY_RSA_PARAMS -84 ++ ++#define GNUTLS_E_NO_COMPRESSION_ALGORITHMS -86 ++#define GNUTLS_E_NO_CIPHER_SUITES -87 ++ ++#define GNUTLS_E_OPENPGP_GETKEY_FAILED -88 ++#define GNUTLS_E_PK_SIG_VERIFY_FAILED -89 ++ ++#define GNUTLS_E_ILLEGAL_SRP_USERNAME -90 ++#define GNUTLS_E_SRP_PWD_PARSING_ERROR GNUTLS_E_KEYFILE_PARSING_ERROR ++#define GNUTLS_E_KEYFILE_PARSING_ERROR -91 ++#define GNUTLS_E_NO_TEMPORARY_DH_PARAMS -93 ++ ++ /* For certificate and key stuff ++ */ ++#define GNUTLS_E_ASN1_ELEMENT_NOT_FOUND -67 ++#define GNUTLS_E_ASN1_IDENTIFIER_NOT_FOUND -68 ++#define GNUTLS_E_ASN1_DER_ERROR -69 ++#define GNUTLS_E_ASN1_VALUE_NOT_FOUND -70 ++#define GNUTLS_E_ASN1_GENERIC_ERROR -71 ++#define GNUTLS_E_ASN1_VALUE_NOT_VALID -72 ++#define GNUTLS_E_ASN1_TAG_ERROR -73 ++#define GNUTLS_E_ASN1_TAG_IMPLICIT -74 ++#define GNUTLS_E_ASN1_TYPE_ANY_ERROR -75 ++#define GNUTLS_E_ASN1_SYNTAX_ERROR -76 ++#define GNUTLS_E_ASN1_DER_OVERFLOW -77 ++#define GNUTLS_E_OPENPGP_UID_REVOKED -79 ++#define GNUTLS_E_CERTIFICATE_ERROR -43 ++#define GNUTLS_E_X509_CERTIFICATE_ERROR GNUTLS_E_CERTIFICATE_ERROR ++#define GNUTLS_E_CERTIFICATE_KEY_MISMATCH -60 ++#define GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE -61 /* GNUTLS_A_UNSUPPORTED_CERTIFICATE */ ++#define GNUTLS_E_X509_UNKNOWN_SAN -62 ++#define GNUTLS_E_OPENPGP_FINGERPRINT_UNSUPPORTED -94 ++#define GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE -95 ++#define GNUTLS_E_UNKNOWN_HASH_ALGORITHM -96 ++#define GNUTLS_E_UNKNOWN_PKCS_CONTENT_TYPE -97 ++#define GNUTLS_E_UNKNOWN_PKCS_BAG_TYPE -98 ++#define GNUTLS_E_INVALID_PASSWORD -99 ++#define GNUTLS_E_MAC_VERIFY_FAILED -100 /* for PKCS #12 MAC */ ++#define GNUTLS_E_CONSTRAINT_ERROR -101 ++ ++#define GNUTLS_E_WARNING_IA_IPHF_RECEIVED -102 ++#define GNUTLS_E_WARNING_IA_FPHF_RECEIVED -103 ++ ++#define GNUTLS_E_IA_VERIFY_FAILED -104 ++#define GNUTLS_E_UNKNOWN_ALGORITHM -105 ++#define GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM -106 ++#define GNUTLS_E_SAFE_RENEGOTIATION_FAILED -107 ++#define GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED -108 ++#define GNUTLS_E_UNKNOWN_SRP_USERNAME -109 ++#define GNUTLS_E_PREMATURE_TERMINATION -110 ++ ++#define GNUTLS_E_MALFORMED_CIDR -111 ++ ++#define GNUTLS_E_BASE64_ENCODING_ERROR -201 ++#define GNUTLS_E_INCOMPATIBLE_GCRYPT_LIBRARY -202 /* obsolete */ ++#define GNUTLS_E_INCOMPATIBLE_CRYPTO_LIBRARY -202 ++#define GNUTLS_E_INCOMPATIBLE_LIBTASN1_LIBRARY -203 ++ ++#define GNUTLS_E_OPENPGP_KEYRING_ERROR -204 ++#define GNUTLS_E_X509_UNSUPPORTED_OID -205 ++ ++#define GNUTLS_E_RANDOM_FAILED -206 ++#define GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR -207 ++ ++#define GNUTLS_E_OPENPGP_SUBKEY_ERROR -208 ++ ++#define GNUTLS_E_CRYPTO_ALREADY_REGISTERED GNUTLS_E_ALREADY_REGISTERED ++#define GNUTLS_E_ALREADY_REGISTERED -209 ++ ++#define GNUTLS_E_HANDSHAKE_TOO_LARGE -210 ++ ++#define GNUTLS_E_CRYPTODEV_IOCTL_ERROR -211 ++#define GNUTLS_E_CRYPTODEV_DEVICE_ERROR -212 ++ ++#define GNUTLS_E_CHANNEL_BINDING_NOT_AVAILABLE -213 ++#define GNUTLS_E_BAD_COOKIE -214 ++#define GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR -215 ++#define GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL -216 ++#define GNUTLS_E_INSUFFICIENT_SECURITY -217 ++ ++#define GNUTLS_E_HEARTBEAT_PONG_RECEIVED -292 ++#define GNUTLS_E_HEARTBEAT_PING_RECEIVED -293 ++ ++#define GNUTLS_E_UNRECOGNIZED_NAME -294 ++ ++/* PKCS11 related */ ++#define GNUTLS_E_PKCS11_ERROR -300 ++#define GNUTLS_E_PKCS11_LOAD_ERROR -301 ++#define GNUTLS_E_PARSING_ERROR -302 ++#define GNUTLS_E_PKCS11_PIN_ERROR -303 ++ ++#define GNUTLS_E_PKCS11_SLOT_ERROR -305 ++#define GNUTLS_E_LOCKING_ERROR -306 ++#define GNUTLS_E_PKCS11_ATTRIBUTE_ERROR -307 ++#define GNUTLS_E_PKCS11_DEVICE_ERROR -308 ++#define GNUTLS_E_PKCS11_DATA_ERROR -309 ++#define GNUTLS_E_PKCS11_UNSUPPORTED_FEATURE_ERROR -310 ++#define GNUTLS_E_PKCS11_KEY_ERROR -311 ++#define GNUTLS_E_PKCS11_PIN_EXPIRED -312 ++#define GNUTLS_E_PKCS11_PIN_LOCKED -313 ++#define GNUTLS_E_PKCS11_SESSION_ERROR -314 ++#define GNUTLS_E_PKCS11_SIGNATURE_ERROR -315 ++#define GNUTLS_E_PKCS11_TOKEN_ERROR -316 ++#define GNUTLS_E_PKCS11_USER_ERROR -317 ++ ++#define GNUTLS_E_CRYPTO_INIT_FAILED -318 ++#define GNUTLS_E_TIMEDOUT -319 ++#define GNUTLS_E_USER_ERROR -320 ++#define GNUTLS_E_ECC_NO_SUPPORTED_CURVES -321 ++#define GNUTLS_E_ECC_UNSUPPORTED_CURVE -322 ++#define GNUTLS_E_PKCS11_REQUESTED_OBJECT_NOT_AVAILBLE -323 ++#define GNUTLS_E_CERTIFICATE_LIST_UNSORTED -324 ++#define GNUTLS_E_ILLEGAL_PARAMETER -325 /* GNUTLS_A_ILLEGAL_PARAMETER */ ++#define GNUTLS_E_NO_PRIORITIES_WERE_SET -326 ++#define GNUTLS_E_X509_UNSUPPORTED_EXTENSION -327 ++#define GNUTLS_E_SESSION_EOF -328 ++ ++#define GNUTLS_E_TPM_ERROR -329 ++#define GNUTLS_E_TPM_KEY_PASSWORD_ERROR -330 ++#define GNUTLS_E_TPM_SRK_PASSWORD_ERROR -331 ++#define GNUTLS_E_TPM_SESSION_ERROR -332 ++#define GNUTLS_E_TPM_KEY_NOT_FOUND -333 ++#define GNUTLS_E_TPM_UNINITIALIZED -334 ++#define GNUTLS_E_TPM_NO_LIB -335 ++ ++#define GNUTLS_E_NO_CERTIFICATE_STATUS -340 ++#define GNUTLS_E_OCSP_RESPONSE_ERROR -341 ++#define GNUTLS_E_RANDOM_DEVICE_ERROR -342 ++#define GNUTLS_E_AUTH_ERROR -343 ++#define GNUTLS_E_NO_APPLICATION_PROTOCOL -344 ++#define GNUTLS_E_SOCKETS_INIT_ERROR -345 ++#define GNUTLS_E_KEY_IMPORT_FAILED -346 ++#define GNUTLS_E_INAPPROPRIATE_FALLBACK -347 /*GNUTLS_A_INAPPROPRIATE_FALLBACK*/ ++#define GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR -348 ++#define GNUTLS_E_PRIVKEY_VERIFICATION_ERROR -349 ++#define GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH -350 /*GNUTLS_A_DECODE_ERROR*/ ++#define GNUTLS_E_ASN1_EMBEDDED_NULL_IN_STRING -351 ++ ++#define GNUTLS_E_SELF_TEST_ERROR -400 ++#define GNUTLS_E_NO_SELF_TEST -401 ++#define GNUTLS_E_LIB_IN_ERROR_STATE -402 ++#define GNUTLS_E_PK_GENERATION_ERROR -403 ++#define GNUTLS_E_IDNA_ERROR -404 ++ ++#define GNUTLS_E_NEED_FALLBACK -405 ++#define GNUTLS_E_SESSION_USER_ID_CHANGED -406 ++#define GNUTLS_E_HANDSHAKE_DURING_FALSE_START -407 ++#define GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE -408 ++#define GNUTLS_E_PK_INVALID_PUBKEY -409 ++#define GNUTLS_E_PK_INVALID_PRIVKEY -410 ++#define GNUTLS_E_NOT_YET_ACTIVATED -411 ++#define GNUTLS_E_INVALID_UTF8_STRING -412 ++#define GNUTLS_E_NO_EMBEDDED_DATA -413 ++#define GNUTLS_E_INVALID_UTF8_EMAIL -414 ++#define GNUTLS_E_INVALID_PASSWORD_STRING -415 ++#define GNUTLS_E_CERTIFICATE_TIME_ERROR -416 ++#define GNUTLS_E_RECORD_OVERFLOW -417 /* GNUTLS_A_RECORD_OVERFLOW */ ++#define GNUTLS_E_ASN1_TIME_ERROR -418 ++#define GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY -419 ++#define GNUTLS_E_PK_INVALID_PUBKEY_PARAMS -420 ++#define GNUTLS_E_PK_NO_VALIDATION_PARAMS -421 ++#define GNUTLS_E_OCSP_MISMATCH_WITH_CERTS -422 ++ ++#define GNUTLS_E_NO_COMMON_KEY_SHARE -423 ++#define GNUTLS_E_REAUTH_REQUEST -424 ++#define GNUTLS_E_TOO_MANY_MATCHES -425 ++#define GNUTLS_E_CRL_VERIFICATION_ERROR -426 ++#define GNUTLS_E_MISSING_EXTENSION -427 ++#define GNUTLS_E_DB_ENTRY_EXISTS -428 ++#define GNUTLS_E_EARLY_DATA_REJECTED -429 ++ ++#define GNUTLS_E_UNIMPLEMENTED_FEATURE -1250 ++ ++/* Internal errors of the library; will never be returned ++ * to a calling application */ ++#define GNUTLS_E_INT_RET_0 -1251 ++#define GNUTLS_E_INT_CHECK_AGAIN -1252 ++ ++#define GNUTLS_E_APPLICATION_ERROR_MAX -65000 ++#define GNUTLS_E_APPLICATION_ERROR_MIN -65500 ++ ++/* *INDENT-OFF* */ ++#ifdef __cplusplus ++} ++#endif ++/* *INDENT-ON* */ ++ ++#include <gnutls/compat.h> ++ ++#endif /* GNUTLS_H */ +diff --git a/SMP/lib/accelerated/x86/coff/aes-ssse3-x86.asm b/SMP/lib/accelerated/x86/coff/aes-ssse3-x86.asm +new file mode 100644 +index 0000000..aa84848 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/aes-ssse3-x86.asm +@@ -0,0 +1,643 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++align 64 ++L$_vpaes_consts: ++dd 218628480,235210255,168496130,67568393 ++dd 252381056,17041926,33884169,51187212 ++dd 252645135,252645135,252645135,252645135 ++dd 1512730624,3266504856,1377990664,3401244816 ++dd 830229760,1275146365,2969422977,3447763452 ++dd 3411033600,2979783055,338359620,2782886510 ++dd 4209124096,907596821,221174255,1006095553 ++dd 191964160,3799684038,3164090317,1589111125 ++dd 182528256,1777043520,2877432650,3265356744 ++dd 1874708224,3503451415,3305285752,363511674 ++dd 1606117888,3487855781,1093350906,2384367825 ++dd 197121,67569157,134941193,202313229 ++dd 67569157,134941193,202313229,197121 ++dd 134941193,202313229,197121,67569157 ++dd 202313229,197121,67569157,134941193 ++dd 33619971,100992007,168364043,235736079 ++dd 235736079,33619971,100992007,168364043 ++dd 168364043,235736079,33619971,100992007 ++dd 100992007,168364043,235736079,33619971 ++dd 50462976,117835012,185207048,252579084 ++dd 252314880,51251460,117574920,184942860 ++dd 184682752,252054788,50987272,118359308 ++dd 118099200,185467140,251790600,50727180 ++dd 2946363062,528716217,1300004225,1881839624 ++dd 1532713819,1532713819,1532713819,1532713819 ++dd 3602276352,4288629033,3737020424,4153884961 ++dd 1354558464,32357713,2958822624,3775749553 ++dd 1201988352,132424512,1572796698,503232858 ++dd 2213177600,1597421020,4103937655,675398315 ++dd 2749646592,4273543773,1511898873,121693092 ++dd 3040248576,1103263732,2871565598,1608280554 ++dd 2236667136,2588920351,482954393,64377734 ++dd 3069987328,291237287,2117370568,3650299247 ++dd 533321216,3573750986,2572112006,1401264716 ++dd 1339849704,2721158661,548607111,3445553514 ++dd 2128193280,3054596040,2183486460,1257083700 ++dd 655635200,1165381986,3923443150,2344132524 ++dd 190078720,256924420,290342170,357187870 ++dd 1610966272,2263057382,4103205268,309794674 ++dd 2592527872,2233205587,1335446729,3402964816 ++dd 3973531904,3225098121,3002836325,1918774430 ++dd 3870401024,2102906079,2284471353,4117666579 ++dd 617007872,1021508343,366931923,691083277 ++dd 2528395776,3491914898,2968704004,1613121270 ++dd 3445188352,3247741094,844474987,4093578302 ++dd 651481088,1190302358,1689581232,574775300 ++dd 4289380608,206939853,2555985458,2489840491 ++dd 2130264064,327674451,3566485037,3349835193 ++dd 2470714624,316102159,3636825756,3393945945 ++db 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 ++db 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 ++db 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 ++db 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 ++db 118,101,114,115,105,116,121,41,0 ++align 64 ++align 16 ++__vpaes_preheat: ++ add ebp,DWORD [esp] ++ movdqa xmm7,[ebp-48] ++ movdqa xmm6,[ebp-16] ++ ret ++align 16 ++__vpaes_encrypt_core: ++ mov ecx,16 ++ mov eax,DWORD [240+edx] ++ movdqa xmm1,xmm6 ++ movdqa xmm2,[ebp] ++ pandn xmm1,xmm0 ++ pand xmm0,xmm6 ++ movdqu xmm5,[edx] ++db 102,15,56,0,208 ++ movdqa xmm0,[16+ebp] ++ pxor xmm2,xmm5 ++ psrld xmm1,4 ++ add edx,16 ++db 102,15,56,0,193 ++ lea ebx,[192+ebp] ++ pxor xmm0,xmm2 ++ jmp NEAR L$000enc_entry ++align 16 ++L$001enc_loop: ++ movdqa xmm4,[32+ebp] ++ movdqa xmm0,[48+ebp] ++db 102,15,56,0,226 ++db 102,15,56,0,195 ++ pxor xmm4,xmm5 ++ movdqa xmm5,[64+ebp] ++ pxor xmm0,xmm4 ++ movdqa xmm1,[ecx*1+ebx-64] ++db 102,15,56,0,234 ++ movdqa xmm2,[80+ebp] ++ movdqa xmm4,[ecx*1+ebx] ++db 102,15,56,0,211 ++ movdqa xmm3,xmm0 ++ pxor xmm2,xmm5 ++db 102,15,56,0,193 ++ add edx,16 ++ pxor xmm0,xmm2 ++db 102,15,56,0,220 ++ add ecx,16 ++ pxor xmm3,xmm0 ++db 102,15,56,0,193 ++ and ecx,48 ++ sub eax,1 ++ pxor xmm0,xmm3 ++L$000enc_entry: ++ movdqa xmm1,xmm6 ++ movdqa xmm5,[ebp-32] ++ pandn xmm1,xmm0 ++ psrld xmm1,4 ++ pand xmm0,xmm6 ++db 102,15,56,0,232 ++ movdqa xmm3,xmm7 ++ pxor xmm0,xmm1 ++db 102,15,56,0,217 ++ movdqa xmm4,xmm7 ++ pxor xmm3,xmm5 ++db 102,15,56,0,224 ++ movdqa xmm2,xmm7 ++ pxor xmm4,xmm5 ++db 102,15,56,0,211 ++ movdqa xmm3,xmm7 ++ pxor xmm2,xmm0 ++db 102,15,56,0,220 ++ movdqu xmm5,[edx] ++ pxor xmm3,xmm1 ++ jnz NEAR L$001enc_loop ++ movdqa xmm4,[96+ebp] ++ movdqa xmm0,[112+ebp] ++db 102,15,56,0,226 ++ pxor xmm4,xmm5 ++db 102,15,56,0,195 ++ movdqa xmm1,[64+ecx*1+ebx] ++ pxor xmm0,xmm4 ++db 102,15,56,0,193 ++ ret ++align 16 ++__vpaes_decrypt_core: ++ lea ebx,[608+ebp] ++ mov eax,DWORD [240+edx] ++ movdqa xmm1,xmm6 ++ movdqa xmm2,[ebx-64] ++ pandn xmm1,xmm0 ++ mov ecx,eax ++ psrld xmm1,4 ++ movdqu xmm5,[edx] ++ shl ecx,4 ++ pand xmm0,xmm6 ++db 102,15,56,0,208 ++ movdqa xmm0,[ebx-48] ++ xor ecx,48 ++db 102,15,56,0,193 ++ and ecx,48 ++ pxor xmm2,xmm5 ++ movdqa xmm5,[176+ebp] ++ pxor xmm0,xmm2 ++ add edx,16 ++ lea ecx,[ecx*1+ebx-352] ++ jmp NEAR L$002dec_entry ++align 16 ++L$003dec_loop: ++ movdqa xmm4,[ebx-32] ++ movdqa xmm1,[ebx-16] ++db 102,15,56,0,226 ++db 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ movdqa xmm4,[ebx] ++ pxor xmm0,xmm1 ++ movdqa xmm1,[16+ebx] ++db 102,15,56,0,226 ++db 102,15,56,0,197 ++db 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ movdqa xmm4,[32+ebx] ++ pxor xmm0,xmm1 ++ movdqa xmm1,[48+ebx] ++db 102,15,56,0,226 ++db 102,15,56,0,197 ++db 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ movdqa xmm4,[64+ebx] ++ pxor xmm0,xmm1 ++ movdqa xmm1,[80+ebx] ++db 102,15,56,0,226 ++db 102,15,56,0,197 ++db 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ add edx,16 ++db 102,15,58,15,237,12 ++ pxor xmm0,xmm1 ++ sub eax,1 ++L$002dec_entry: ++ movdqa xmm1,xmm6 ++ movdqa xmm2,[ebp-32] ++ pandn xmm1,xmm0 ++ pand xmm0,xmm6 ++ psrld xmm1,4 ++db 102,15,56,0,208 ++ movdqa xmm3,xmm7 ++ pxor xmm0,xmm1 ++db 102,15,56,0,217 ++ movdqa xmm4,xmm7 ++ pxor xmm3,xmm2 ++db 102,15,56,0,224 ++ pxor xmm4,xmm2 ++ movdqa xmm2,xmm7 ++db 102,15,56,0,211 ++ movdqa xmm3,xmm7 ++ pxor xmm2,xmm0 ++db 102,15,56,0,220 ++ movdqu xmm0,[edx] ++ pxor xmm3,xmm1 ++ jnz NEAR L$003dec_loop ++ movdqa xmm4,[96+ebx] ++db 102,15,56,0,226 ++ pxor xmm4,xmm0 ++ movdqa xmm0,[112+ebx] ++ movdqa xmm2,[ecx] ++db 102,15,56,0,195 ++ pxor xmm0,xmm4 ++db 102,15,56,0,194 ++ ret ++align 16 ++__vpaes_schedule_core: ++ add ebp,DWORD [esp] ++ movdqu xmm0,[esi] ++ movdqa xmm2,[320+ebp] ++ movdqa xmm3,xmm0 ++ lea ebx,[ebp] ++ movdqa [4+esp],xmm2 ++ call __vpaes_schedule_transform ++ movdqa xmm7,xmm0 ++ test edi,edi ++ jnz NEAR L$004schedule_am_decrypting ++ movdqu [edx],xmm0 ++ jmp NEAR L$005schedule_go ++L$004schedule_am_decrypting: ++ movdqa xmm1,[256+ecx*1+ebp] ++db 102,15,56,0,217 ++ movdqu [edx],xmm3 ++ xor ecx,48 ++L$005schedule_go: ++ cmp eax,192 ++ ja NEAR L$006schedule_256 ++ je NEAR L$007schedule_192 ++L$008schedule_128: ++ mov eax,10 ++L$009loop_schedule_128: ++ call __vpaes_schedule_round ++ dec eax ++ jz NEAR L$010schedule_mangle_last ++ call __vpaes_schedule_mangle ++ jmp NEAR L$009loop_schedule_128 ++align 16 ++L$007schedule_192: ++ movdqu xmm0,[8+esi] ++ call __vpaes_schedule_transform ++ movdqa xmm6,xmm0 ++ pxor xmm4,xmm4 ++ movhlps xmm6,xmm4 ++ mov eax,4 ++L$011loop_schedule_192: ++ call __vpaes_schedule_round ++db 102,15,58,15,198,8 ++ call __vpaes_schedule_mangle ++ call __vpaes_schedule_192_smear ++ call __vpaes_schedule_mangle ++ call __vpaes_schedule_round ++ dec eax ++ jz NEAR L$010schedule_mangle_last ++ call __vpaes_schedule_mangle ++ call __vpaes_schedule_192_smear ++ jmp NEAR L$011loop_schedule_192 ++align 16 ++L$006schedule_256: ++ movdqu xmm0,[16+esi] ++ call __vpaes_schedule_transform ++ mov eax,7 ++L$012loop_schedule_256: ++ call __vpaes_schedule_mangle ++ movdqa xmm6,xmm0 ++ call __vpaes_schedule_round ++ dec eax ++ jz NEAR L$010schedule_mangle_last ++ call __vpaes_schedule_mangle ++ pshufd xmm0,xmm0,255 ++ movdqa [20+esp],xmm7 ++ movdqa xmm7,xmm6 ++ call L$_vpaes_schedule_low_round ++ movdqa xmm7,[20+esp] ++ jmp NEAR L$012loop_schedule_256 ++align 16 ++L$010schedule_mangle_last: ++ lea ebx,[384+ebp] ++ test edi,edi ++ jnz NEAR L$013schedule_mangle_last_dec ++ movdqa xmm1,[256+ecx*1+ebp] ++db 102,15,56,0,193 ++ lea ebx,[352+ebp] ++ add edx,32 ++L$013schedule_mangle_last_dec: ++ add edx,-16 ++ pxor xmm0,[336+ebp] ++ call __vpaes_schedule_transform ++ movdqu [edx],xmm0 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ ret ++align 16 ++__vpaes_schedule_192_smear: ++ pshufd xmm1,xmm6,128 ++ pshufd xmm0,xmm7,254 ++ pxor xmm6,xmm1 ++ pxor xmm1,xmm1 ++ pxor xmm6,xmm0 ++ movdqa xmm0,xmm6 ++ movhlps xmm6,xmm1 ++ ret ++align 16 ++__vpaes_schedule_round: ++ movdqa xmm2,[8+esp] ++ pxor xmm1,xmm1 ++db 102,15,58,15,202,15 ++db 102,15,58,15,210,15 ++ pxor xmm7,xmm1 ++ pshufd xmm0,xmm0,255 ++db 102,15,58,15,192,1 ++ movdqa [8+esp],xmm2 ++L$_vpaes_schedule_low_round: ++ movdqa xmm1,xmm7 ++ pslldq xmm7,4 ++ pxor xmm7,xmm1 ++ movdqa xmm1,xmm7 ++ pslldq xmm7,8 ++ pxor xmm7,xmm1 ++ pxor xmm7,[336+ebp] ++ movdqa xmm4,[ebp-16] ++ movdqa xmm5,[ebp-48] ++ movdqa xmm1,xmm4 ++ pandn xmm1,xmm0 ++ psrld xmm1,4 ++ pand xmm0,xmm4 ++ movdqa xmm2,[ebp-32] ++db 102,15,56,0,208 ++ pxor xmm0,xmm1 ++ movdqa xmm3,xmm5 ++db 102,15,56,0,217 ++ pxor xmm3,xmm2 ++ movdqa xmm4,xmm5 ++db 102,15,56,0,224 ++ pxor xmm4,xmm2 ++ movdqa xmm2,xmm5 ++db 102,15,56,0,211 ++ pxor xmm2,xmm0 ++ movdqa xmm3,xmm5 ++db 102,15,56,0,220 ++ pxor xmm3,xmm1 ++ movdqa xmm4,[32+ebp] ++db 102,15,56,0,226 ++ movdqa xmm0,[48+ebp] ++db 102,15,56,0,195 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm7 ++ movdqa xmm7,xmm0 ++ ret ++align 16 ++__vpaes_schedule_transform: ++ movdqa xmm2,[ebp-16] ++ movdqa xmm1,xmm2 ++ pandn xmm1,xmm0 ++ psrld xmm1,4 ++ pand xmm0,xmm2 ++ movdqa xmm2,[ebx] ++db 102,15,56,0,208 ++ movdqa xmm0,[16+ebx] ++db 102,15,56,0,193 ++ pxor xmm0,xmm2 ++ ret ++align 16 ++__vpaes_schedule_mangle: ++ movdqa xmm4,xmm0 ++ movdqa xmm5,[128+ebp] ++ test edi,edi ++ jnz NEAR L$014schedule_mangle_dec ++ add edx,16 ++ pxor xmm4,[336+ebp] ++db 102,15,56,0,229 ++ movdqa xmm3,xmm4 ++db 102,15,56,0,229 ++ pxor xmm3,xmm4 ++db 102,15,56,0,229 ++ pxor xmm3,xmm4 ++ jmp NEAR L$015schedule_mangle_both ++align 16 ++L$014schedule_mangle_dec: ++ movdqa xmm2,[ebp-16] ++ lea esi,[416+ebp] ++ movdqa xmm1,xmm2 ++ pandn xmm1,xmm4 ++ psrld xmm1,4 ++ pand xmm4,xmm2 ++ movdqa xmm2,[esi] ++db 102,15,56,0,212 ++ movdqa xmm3,[16+esi] ++db 102,15,56,0,217 ++ pxor xmm3,xmm2 ++db 102,15,56,0,221 ++ movdqa xmm2,[32+esi] ++db 102,15,56,0,212 ++ pxor xmm2,xmm3 ++ movdqa xmm3,[48+esi] ++db 102,15,56,0,217 ++ pxor xmm3,xmm2 ++db 102,15,56,0,221 ++ movdqa xmm2,[64+esi] ++db 102,15,56,0,212 ++ pxor xmm2,xmm3 ++ movdqa xmm3,[80+esi] ++db 102,15,56,0,217 ++ pxor xmm3,xmm2 ++db 102,15,56,0,221 ++ movdqa xmm2,[96+esi] ++db 102,15,56,0,212 ++ pxor xmm2,xmm3 ++ movdqa xmm3,[112+esi] ++db 102,15,56,0,217 ++ pxor xmm3,xmm2 ++ add edx,-16 ++L$015schedule_mangle_both: ++ movdqa xmm1,[256+ecx*1+ebp] ++db 102,15,56,0,217 ++ add ecx,-16 ++ and ecx,48 ++ movdqu [edx],xmm3 ++ ret ++global _vpaes_set_encrypt_key ++align 16 ++_vpaes_set_encrypt_key: ++L$_vpaes_set_encrypt_key_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ lea ebx,[esp-56] ++ mov eax,DWORD [24+esp] ++ and ebx,-16 ++ mov edx,DWORD [28+esp] ++ xchg ebx,esp ++ mov DWORD [48+esp],ebx ++ mov ebx,eax ++ shr ebx,5 ++ add ebx,5 ++ mov DWORD [240+edx],ebx ++ mov ecx,48 ++ mov edi,0 ++ lea ebp,[(L$_vpaes_consts+0x30-L$016pic_point)] ++ call __vpaes_schedule_core ++L$016pic_point: ++ mov esp,DWORD [48+esp] ++ xor eax,eax ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _vpaes_set_decrypt_key ++align 16 ++_vpaes_set_decrypt_key: ++L$_vpaes_set_decrypt_key_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ lea ebx,[esp-56] ++ mov eax,DWORD [24+esp] ++ and ebx,-16 ++ mov edx,DWORD [28+esp] ++ xchg ebx,esp ++ mov DWORD [48+esp],ebx ++ mov ebx,eax ++ shr ebx,5 ++ add ebx,5 ++ mov DWORD [240+edx],ebx ++ shl ebx,4 ++ lea edx,[16+ebx*1+edx] ++ mov edi,1 ++ mov ecx,eax ++ shr ecx,1 ++ and ecx,32 ++ xor ecx,32 ++ lea ebp,[(L$_vpaes_consts+0x30-L$017pic_point)] ++ call __vpaes_schedule_core ++L$017pic_point: ++ mov esp,DWORD [48+esp] ++ xor eax,eax ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _vpaes_encrypt ++align 16 ++_vpaes_encrypt: ++L$_vpaes_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ lea ebp,[(L$_vpaes_consts+0x30-L$018pic_point)] ++ call __vpaes_preheat ++L$018pic_point: ++ mov esi,DWORD [20+esp] ++ lea ebx,[esp-56] ++ mov edi,DWORD [24+esp] ++ and ebx,-16 ++ mov edx,DWORD [28+esp] ++ xchg ebx,esp ++ mov DWORD [48+esp],ebx ++ movdqu xmm0,[esi] ++ call __vpaes_encrypt_core ++ movdqu [edi],xmm0 ++ mov esp,DWORD [48+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _vpaes_decrypt ++align 16 ++_vpaes_decrypt: ++L$_vpaes_decrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ lea ebp,[(L$_vpaes_consts+0x30-L$019pic_point)] ++ call __vpaes_preheat ++L$019pic_point: ++ mov esi,DWORD [20+esp] ++ lea ebx,[esp-56] ++ mov edi,DWORD [24+esp] ++ and ebx,-16 ++ mov edx,DWORD [28+esp] ++ xchg ebx,esp ++ mov DWORD [48+esp],ebx ++ movdqu xmm0,[esi] ++ call __vpaes_decrypt_core ++ movdqu [edi],xmm0 ++ mov esp,DWORD [48+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _vpaes_cbc_encrypt ++align 16 ++_vpaes_cbc_encrypt: ++L$_vpaes_cbc_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ sub eax,16 ++ jc NEAR L$020cbc_abort ++ lea ebx,[esp-56] ++ mov ebp,DWORD [36+esp] ++ and ebx,-16 ++ mov ecx,DWORD [40+esp] ++ xchg ebx,esp ++ movdqu xmm1,[ebp] ++ sub edi,esi ++ mov DWORD [48+esp],ebx ++ mov DWORD [esp],edi ++ mov DWORD [4+esp],edx ++ mov DWORD [8+esp],ebp ++ mov edi,eax ++ lea ebp,[(L$_vpaes_consts+0x30-L$021pic_point)] ++ call __vpaes_preheat ++L$021pic_point: ++ cmp ecx,0 ++ je NEAR L$022cbc_dec_loop ++ jmp NEAR L$023cbc_enc_loop ++align 16 ++L$023cbc_enc_loop: ++ movdqu xmm0,[esi] ++ pxor xmm0,xmm1 ++ call __vpaes_encrypt_core ++ mov ebx,DWORD [esp] ++ mov edx,DWORD [4+esp] ++ movdqa xmm1,xmm0 ++ movdqu [esi*1+ebx],xmm0 ++ lea esi,[16+esi] ++ sub edi,16 ++ jnc NEAR L$023cbc_enc_loop ++ jmp NEAR L$024cbc_done ++align 16 ++L$022cbc_dec_loop: ++ movdqu xmm0,[esi] ++ movdqa [16+esp],xmm1 ++ movdqa [32+esp],xmm0 ++ call __vpaes_decrypt_core ++ mov ebx,DWORD [esp] ++ mov edx,DWORD [4+esp] ++ pxor xmm0,[16+esp] ++ movdqa xmm1,[32+esp] ++ movdqu [esi*1+ebx],xmm0 ++ lea esi,[16+esi] ++ sub edi,16 ++ jnc NEAR L$022cbc_dec_loop ++L$024cbc_done: ++ mov ebx,DWORD [8+esp] ++ mov esp,DWORD [48+esp] ++ movdqu [ebx],xmm1 ++L$020cbc_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret +diff --git a/SMP/lib/accelerated/x86/coff/aes-ssse3-x86_64.asm b/SMP/lib/accelerated/x86/coff/aes-ssse3-x86_64.asm +new file mode 100644 +index 0000000..3edde9f +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/aes-ssse3-x86_64.asm +@@ -0,0 +1,1137 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_encrypt_core: ++ mov r9,rdx ++ mov r11,16 ++ mov eax,DWORD[240+rdx] ++ movdqa xmm1,xmm9 ++ movdqa xmm2,XMMWORD[$L$k_ipt] ++ pandn xmm1,xmm0 ++ movdqu xmm5,XMMWORD[r9] ++ psrld xmm1,4 ++ pand xmm0,xmm9 ++DB 102,15,56,0,208 ++ movdqa xmm0,XMMWORD[(($L$k_ipt+16))] ++DB 102,15,56,0,193 ++ pxor xmm2,xmm5 ++ add r9,16 ++ pxor xmm0,xmm2 ++ lea r10,[$L$k_mc_backward] ++ jmp NEAR $L$enc_entry ++ ++ALIGN 16 ++$L$enc_loop: ++ ++ movdqa xmm4,xmm13 ++ movdqa xmm0,xmm12 ++DB 102,15,56,0,226 ++DB 102,15,56,0,195 ++ pxor xmm4,xmm5 ++ movdqa xmm5,xmm15 ++ pxor xmm0,xmm4 ++ movdqa xmm1,XMMWORD[((-64))+r10*1+r11] ++DB 102,15,56,0,234 ++ movdqa xmm4,XMMWORD[r10*1+r11] ++ movdqa xmm2,xmm14 ++DB 102,15,56,0,211 ++ movdqa xmm3,xmm0 ++ pxor xmm2,xmm5 ++DB 102,15,56,0,193 ++ add r9,16 ++ pxor xmm0,xmm2 ++DB 102,15,56,0,220 ++ add r11,16 ++ pxor xmm3,xmm0 ++DB 102,15,56,0,193 ++ and r11,0x30 ++ sub rax,1 ++ pxor xmm0,xmm3 ++ ++$L$enc_entry: ++ ++ movdqa xmm1,xmm9 ++ movdqa xmm5,xmm11 ++ pandn xmm1,xmm0 ++ psrld xmm1,4 ++ pand xmm0,xmm9 ++DB 102,15,56,0,232 ++ movdqa xmm3,xmm10 ++ pxor xmm0,xmm1 ++DB 102,15,56,0,217 ++ movdqa xmm4,xmm10 ++ pxor xmm3,xmm5 ++DB 102,15,56,0,224 ++ movdqa xmm2,xmm10 ++ pxor xmm4,xmm5 ++DB 102,15,56,0,211 ++ movdqa xmm3,xmm10 ++ pxor xmm2,xmm0 ++DB 102,15,56,0,220 ++ movdqu xmm5,XMMWORD[r9] ++ pxor xmm3,xmm1 ++ jnz NEAR $L$enc_loop ++ ++ ++ movdqa xmm4,XMMWORD[((-96))+r10] ++ movdqa xmm0,XMMWORD[((-80))+r10] ++DB 102,15,56,0,226 ++ pxor xmm4,xmm5 ++DB 102,15,56,0,195 ++ movdqa xmm1,XMMWORD[64+r10*1+r11] ++ pxor xmm0,xmm4 ++DB 102,15,56,0,193 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_decrypt_core: ++ mov r9,rdx ++ mov eax,DWORD[240+rdx] ++ movdqa xmm1,xmm9 ++ movdqa xmm2,XMMWORD[$L$k_dipt] ++ pandn xmm1,xmm0 ++ mov r11,rax ++ psrld xmm1,4 ++ movdqu xmm5,XMMWORD[r9] ++ shl r11,4 ++ pand xmm0,xmm9 ++DB 102,15,56,0,208 ++ movdqa xmm0,XMMWORD[(($L$k_dipt+16))] ++ xor r11,0x30 ++ lea r10,[$L$k_dsbd] ++DB 102,15,56,0,193 ++ and r11,0x30 ++ pxor xmm2,xmm5 ++ movdqa xmm5,XMMWORD[(($L$k_mc_forward+48))] ++ pxor xmm0,xmm2 ++ add r9,16 ++ add r11,r10 ++ jmp NEAR $L$dec_entry ++ ++ALIGN 16 ++$L$dec_loop: ++ ++ ++ ++ movdqa xmm4,XMMWORD[((-32))+r10] ++ movdqa xmm1,XMMWORD[((-16))+r10] ++DB 102,15,56,0,226 ++DB 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ movdqa xmm4,XMMWORD[r10] ++ pxor xmm0,xmm1 ++ movdqa xmm1,XMMWORD[16+r10] ++ ++DB 102,15,56,0,226 ++DB 102,15,56,0,197 ++DB 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ movdqa xmm4,XMMWORD[32+r10] ++ pxor xmm0,xmm1 ++ movdqa xmm1,XMMWORD[48+r10] ++ ++DB 102,15,56,0,226 ++DB 102,15,56,0,197 ++DB 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ movdqa xmm4,XMMWORD[64+r10] ++ pxor xmm0,xmm1 ++ movdqa xmm1,XMMWORD[80+r10] ++ ++DB 102,15,56,0,226 ++DB 102,15,56,0,197 ++DB 102,15,56,0,203 ++ pxor xmm0,xmm4 ++ add r9,16 ++DB 102,15,58,15,237,12 ++ pxor xmm0,xmm1 ++ sub rax,1 ++ ++$L$dec_entry: ++ ++ movdqa xmm1,xmm9 ++ pandn xmm1,xmm0 ++ movdqa xmm2,xmm11 ++ psrld xmm1,4 ++ pand xmm0,xmm9 ++DB 102,15,56,0,208 ++ movdqa xmm3,xmm10 ++ pxor xmm0,xmm1 ++DB 102,15,56,0,217 ++ movdqa xmm4,xmm10 ++ pxor xmm3,xmm2 ++DB 102,15,56,0,224 ++ pxor xmm4,xmm2 ++ movdqa xmm2,xmm10 ++DB 102,15,56,0,211 ++ movdqa xmm3,xmm10 ++ pxor xmm2,xmm0 ++DB 102,15,56,0,220 ++ movdqu xmm0,XMMWORD[r9] ++ pxor xmm3,xmm1 ++ jnz NEAR $L$dec_loop ++ ++ ++ movdqa xmm4,XMMWORD[96+r10] ++DB 102,15,56,0,226 ++ pxor xmm4,xmm0 ++ movdqa xmm0,XMMWORD[112+r10] ++ movdqa xmm2,XMMWORD[((-352))+r11] ++DB 102,15,56,0,195 ++ pxor xmm0,xmm4 ++DB 102,15,56,0,194 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_schedule_core: ++ ++ ++ ++ ++ ++ call _vpaes_preheat ++ movdqa xmm8,XMMWORD[$L$k_rcon] ++ movdqu xmm0,XMMWORD[rdi] ++ ++ ++ movdqa xmm3,xmm0 ++ lea r11,[$L$k_ipt] ++ call _vpaes_schedule_transform ++ movdqa xmm7,xmm0 ++ ++ lea r10,[$L$k_sr] ++ test rcx,rcx ++ jnz NEAR $L$schedule_am_decrypting ++ ++ ++ movdqu XMMWORD[rdx],xmm0 ++ jmp NEAR $L$schedule_go ++ ++$L$schedule_am_decrypting: ++ ++ movdqa xmm1,XMMWORD[r10*1+r8] ++DB 102,15,56,0,217 ++ movdqu XMMWORD[rdx],xmm3 ++ xor r8,0x30 ++ ++$L$schedule_go: ++ cmp esi,192 ++ ja NEAR $L$schedule_256 ++ je NEAR $L$schedule_192 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++$L$schedule_128: ++ mov esi,10 ++ ++$L$oop_schedule_128: ++ call _vpaes_schedule_round ++ dec rsi ++ jz NEAR $L$schedule_mangle_last ++ call _vpaes_schedule_mangle ++ jmp NEAR $L$oop_schedule_128 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++$L$schedule_192: ++ movdqu xmm0,XMMWORD[8+rdi] ++ call _vpaes_schedule_transform ++ movdqa xmm6,xmm0 ++ pxor xmm4,xmm4 ++ movhlps xmm6,xmm4 ++ mov esi,4 ++ ++$L$oop_schedule_192: ++ call _vpaes_schedule_round ++DB 102,15,58,15,198,8 ++ call _vpaes_schedule_mangle ++ call _vpaes_schedule_192_smear ++ call _vpaes_schedule_mangle ++ call _vpaes_schedule_round ++ dec rsi ++ jz NEAR $L$schedule_mangle_last ++ call _vpaes_schedule_mangle ++ call _vpaes_schedule_192_smear ++ jmp NEAR $L$oop_schedule_192 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++$L$schedule_256: ++ movdqu xmm0,XMMWORD[16+rdi] ++ call _vpaes_schedule_transform ++ mov esi,7 ++ ++$L$oop_schedule_256: ++ call _vpaes_schedule_mangle ++ movdqa xmm6,xmm0 ++ ++ ++ call _vpaes_schedule_round ++ dec rsi ++ jz NEAR $L$schedule_mangle_last ++ call _vpaes_schedule_mangle ++ ++ ++ pshufd xmm0,xmm0,0xFF ++ movdqa xmm5,xmm7 ++ movdqa xmm7,xmm6 ++ call _vpaes_schedule_low_round ++ movdqa xmm7,xmm5 ++ ++ jmp NEAR $L$oop_schedule_256 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++$L$schedule_mangle_last: ++ ++ lea r11,[$L$k_deskew] ++ test rcx,rcx ++ jnz NEAR $L$schedule_mangle_last_dec ++ ++ ++ movdqa xmm1,XMMWORD[r10*1+r8] ++DB 102,15,56,0,193 ++ lea r11,[$L$k_opt] ++ add rdx,32 ++ ++$L$schedule_mangle_last_dec: ++ add rdx,-16 ++ pxor xmm0,XMMWORD[$L$k_s63] ++ call _vpaes_schedule_transform ++ movdqu XMMWORD[rdx],xmm0 ++ ++ ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_schedule_192_smear: ++ pshufd xmm1,xmm6,0x80 ++ pshufd xmm0,xmm7,0xFE ++ pxor xmm6,xmm1 ++ pxor xmm1,xmm1 ++ pxor xmm6,xmm0 ++ movdqa xmm0,xmm6 ++ movhlps xmm6,xmm1 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_schedule_round: ++ ++ pxor xmm1,xmm1 ++DB 102,65,15,58,15,200,15 ++DB 102,69,15,58,15,192,15 ++ pxor xmm7,xmm1 ++ ++ ++ pshufd xmm0,xmm0,0xFF ++DB 102,15,58,15,192,1 ++ ++ ++ ++ ++_vpaes_schedule_low_round: ++ ++ movdqa xmm1,xmm7 ++ pslldq xmm7,4 ++ pxor xmm7,xmm1 ++ movdqa xmm1,xmm7 ++ pslldq xmm7,8 ++ pxor xmm7,xmm1 ++ pxor xmm7,XMMWORD[$L$k_s63] ++ ++ ++ movdqa xmm1,xmm9 ++ pandn xmm1,xmm0 ++ psrld xmm1,4 ++ pand xmm0,xmm9 ++ movdqa xmm2,xmm11 ++DB 102,15,56,0,208 ++ pxor xmm0,xmm1 ++ movdqa xmm3,xmm10 ++DB 102,15,56,0,217 ++ pxor xmm3,xmm2 ++ movdqa xmm4,xmm10 ++DB 102,15,56,0,224 ++ pxor xmm4,xmm2 ++ movdqa xmm2,xmm10 ++DB 102,15,56,0,211 ++ pxor xmm2,xmm0 ++ movdqa xmm3,xmm10 ++DB 102,15,56,0,220 ++ pxor xmm3,xmm1 ++ movdqa xmm4,xmm13 ++DB 102,15,56,0,226 ++ movdqa xmm0,xmm12 ++DB 102,15,56,0,195 ++ pxor xmm0,xmm4 ++ ++ ++ pxor xmm0,xmm7 ++ movdqa xmm7,xmm0 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_schedule_transform: ++ movdqa xmm1,xmm9 ++ pandn xmm1,xmm0 ++ psrld xmm1,4 ++ pand xmm0,xmm9 ++ movdqa xmm2,XMMWORD[r11] ++DB 102,15,56,0,208 ++ movdqa xmm0,XMMWORD[16+r11] ++DB 102,15,56,0,193 ++ pxor xmm0,xmm2 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_schedule_mangle: ++ movdqa xmm4,xmm0 ++ movdqa xmm5,XMMWORD[$L$k_mc_forward] ++ test rcx,rcx ++ jnz NEAR $L$schedule_mangle_dec ++ ++ ++ add rdx,16 ++ pxor xmm4,XMMWORD[$L$k_s63] ++DB 102,15,56,0,229 ++ movdqa xmm3,xmm4 ++DB 102,15,56,0,229 ++ pxor xmm3,xmm4 ++DB 102,15,56,0,229 ++ pxor xmm3,xmm4 ++ ++ jmp NEAR $L$schedule_mangle_both ++ALIGN 16 ++$L$schedule_mangle_dec: ++ ++ lea r11,[$L$k_dksd] ++ movdqa xmm1,xmm9 ++ pandn xmm1,xmm4 ++ psrld xmm1,4 ++ pand xmm4,xmm9 ++ ++ movdqa xmm2,XMMWORD[r11] ++DB 102,15,56,0,212 ++ movdqa xmm3,XMMWORD[16+r11] ++DB 102,15,56,0,217 ++ pxor xmm3,xmm2 ++DB 102,15,56,0,221 ++ ++ movdqa xmm2,XMMWORD[32+r11] ++DB 102,15,56,0,212 ++ pxor xmm2,xmm3 ++ movdqa xmm3,XMMWORD[48+r11] ++DB 102,15,56,0,217 ++ pxor xmm3,xmm2 ++DB 102,15,56,0,221 ++ ++ movdqa xmm2,XMMWORD[64+r11] ++DB 102,15,56,0,212 ++ pxor xmm2,xmm3 ++ movdqa xmm3,XMMWORD[80+r11] ++DB 102,15,56,0,217 ++ pxor xmm3,xmm2 ++DB 102,15,56,0,221 ++ ++ movdqa xmm2,XMMWORD[96+r11] ++DB 102,15,56,0,212 ++ pxor xmm2,xmm3 ++ movdqa xmm3,XMMWORD[112+r11] ++DB 102,15,56,0,217 ++ pxor xmm3,xmm2 ++ ++ add rdx,-16 ++ ++$L$schedule_mangle_both: ++ movdqa xmm1,XMMWORD[r10*1+r8] ++DB 102,15,56,0,217 ++ add r8,-16 ++ and r8,0x30 ++ movdqu XMMWORD[rdx],xmm3 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++global vpaes_set_encrypt_key ++ ++ALIGN 16 ++vpaes_set_encrypt_key: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_vpaes_set_encrypt_key: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ lea rsp,[((-184))+rsp] ++ movaps XMMWORD[16+rsp],xmm6 ++ movaps XMMWORD[32+rsp],xmm7 ++ movaps XMMWORD[48+rsp],xmm8 ++ movaps XMMWORD[64+rsp],xmm9 ++ movaps XMMWORD[80+rsp],xmm10 ++ movaps XMMWORD[96+rsp],xmm11 ++ movaps XMMWORD[112+rsp],xmm12 ++ movaps XMMWORD[128+rsp],xmm13 ++ movaps XMMWORD[144+rsp],xmm14 ++ movaps XMMWORD[160+rsp],xmm15 ++$L$enc_key_body: ++ mov eax,esi ++ shr eax,5 ++ add eax,5 ++ mov DWORD[240+rdx],eax ++ ++ mov ecx,0 ++ mov r8d,0x30 ++ call _vpaes_schedule_core ++ movaps xmm6,XMMWORD[16+rsp] ++ movaps xmm7,XMMWORD[32+rsp] ++ movaps xmm8,XMMWORD[48+rsp] ++ movaps xmm9,XMMWORD[64+rsp] ++ movaps xmm10,XMMWORD[80+rsp] ++ movaps xmm11,XMMWORD[96+rsp] ++ movaps xmm12,XMMWORD[112+rsp] ++ movaps xmm13,XMMWORD[128+rsp] ++ movaps xmm14,XMMWORD[144+rsp] ++ movaps xmm15,XMMWORD[160+rsp] ++ lea rsp,[184+rsp] ++$L$enc_key_epilogue: ++ xor eax,eax ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_vpaes_set_encrypt_key: ++ ++global vpaes_set_decrypt_key ++ ++ALIGN 16 ++vpaes_set_decrypt_key: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_vpaes_set_decrypt_key: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ lea rsp,[((-184))+rsp] ++ movaps XMMWORD[16+rsp],xmm6 ++ movaps XMMWORD[32+rsp],xmm7 ++ movaps XMMWORD[48+rsp],xmm8 ++ movaps XMMWORD[64+rsp],xmm9 ++ movaps XMMWORD[80+rsp],xmm10 ++ movaps XMMWORD[96+rsp],xmm11 ++ movaps XMMWORD[112+rsp],xmm12 ++ movaps XMMWORD[128+rsp],xmm13 ++ movaps XMMWORD[144+rsp],xmm14 ++ movaps XMMWORD[160+rsp],xmm15 ++$L$dec_key_body: ++ mov eax,esi ++ shr eax,5 ++ add eax,5 ++ mov DWORD[240+rdx],eax ++ shl eax,4 ++ lea rdx,[16+rax*1+rdx] ++ ++ mov ecx,1 ++ mov r8d,esi ++ shr r8d,1 ++ and r8d,32 ++ xor r8d,32 ++ call _vpaes_schedule_core ++ movaps xmm6,XMMWORD[16+rsp] ++ movaps xmm7,XMMWORD[32+rsp] ++ movaps xmm8,XMMWORD[48+rsp] ++ movaps xmm9,XMMWORD[64+rsp] ++ movaps xmm10,XMMWORD[80+rsp] ++ movaps xmm11,XMMWORD[96+rsp] ++ movaps xmm12,XMMWORD[112+rsp] ++ movaps xmm13,XMMWORD[128+rsp] ++ movaps xmm14,XMMWORD[144+rsp] ++ movaps xmm15,XMMWORD[160+rsp] ++ lea rsp,[184+rsp] ++$L$dec_key_epilogue: ++ xor eax,eax ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_vpaes_set_decrypt_key: ++ ++global vpaes_encrypt ++ ++ALIGN 16 ++vpaes_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_vpaes_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ lea rsp,[((-184))+rsp] ++ movaps XMMWORD[16+rsp],xmm6 ++ movaps XMMWORD[32+rsp],xmm7 ++ movaps XMMWORD[48+rsp],xmm8 ++ movaps XMMWORD[64+rsp],xmm9 ++ movaps XMMWORD[80+rsp],xmm10 ++ movaps XMMWORD[96+rsp],xmm11 ++ movaps XMMWORD[112+rsp],xmm12 ++ movaps XMMWORD[128+rsp],xmm13 ++ movaps XMMWORD[144+rsp],xmm14 ++ movaps XMMWORD[160+rsp],xmm15 ++$L$enc_body: ++ movdqu xmm0,XMMWORD[rdi] ++ call _vpaes_preheat ++ call _vpaes_encrypt_core ++ movdqu XMMWORD[rsi],xmm0 ++ movaps xmm6,XMMWORD[16+rsp] ++ movaps xmm7,XMMWORD[32+rsp] ++ movaps xmm8,XMMWORD[48+rsp] ++ movaps xmm9,XMMWORD[64+rsp] ++ movaps xmm10,XMMWORD[80+rsp] ++ movaps xmm11,XMMWORD[96+rsp] ++ movaps xmm12,XMMWORD[112+rsp] ++ movaps xmm13,XMMWORD[128+rsp] ++ movaps xmm14,XMMWORD[144+rsp] ++ movaps xmm15,XMMWORD[160+rsp] ++ lea rsp,[184+rsp] ++$L$enc_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_vpaes_encrypt: ++ ++global vpaes_decrypt ++ ++ALIGN 16 ++vpaes_decrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_vpaes_decrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ lea rsp,[((-184))+rsp] ++ movaps XMMWORD[16+rsp],xmm6 ++ movaps XMMWORD[32+rsp],xmm7 ++ movaps XMMWORD[48+rsp],xmm8 ++ movaps XMMWORD[64+rsp],xmm9 ++ movaps XMMWORD[80+rsp],xmm10 ++ movaps XMMWORD[96+rsp],xmm11 ++ movaps XMMWORD[112+rsp],xmm12 ++ movaps XMMWORD[128+rsp],xmm13 ++ movaps XMMWORD[144+rsp],xmm14 ++ movaps XMMWORD[160+rsp],xmm15 ++$L$dec_body: ++ movdqu xmm0,XMMWORD[rdi] ++ call _vpaes_preheat ++ call _vpaes_decrypt_core ++ movdqu XMMWORD[rsi],xmm0 ++ movaps xmm6,XMMWORD[16+rsp] ++ movaps xmm7,XMMWORD[32+rsp] ++ movaps xmm8,XMMWORD[48+rsp] ++ movaps xmm9,XMMWORD[64+rsp] ++ movaps xmm10,XMMWORD[80+rsp] ++ movaps xmm11,XMMWORD[96+rsp] ++ movaps xmm12,XMMWORD[112+rsp] ++ movaps xmm13,XMMWORD[128+rsp] ++ movaps xmm14,XMMWORD[144+rsp] ++ movaps xmm15,XMMWORD[160+rsp] ++ lea rsp,[184+rsp] ++$L$dec_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_vpaes_decrypt: ++global vpaes_cbc_encrypt ++ ++ALIGN 16 ++vpaes_cbc_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_vpaes_cbc_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ xchg rdx,rcx ++ sub rcx,16 ++ jc NEAR $L$cbc_abort ++ lea rsp,[((-184))+rsp] ++ movaps XMMWORD[16+rsp],xmm6 ++ movaps XMMWORD[32+rsp],xmm7 ++ movaps XMMWORD[48+rsp],xmm8 ++ movaps XMMWORD[64+rsp],xmm9 ++ movaps XMMWORD[80+rsp],xmm10 ++ movaps XMMWORD[96+rsp],xmm11 ++ movaps XMMWORD[112+rsp],xmm12 ++ movaps XMMWORD[128+rsp],xmm13 ++ movaps XMMWORD[144+rsp],xmm14 ++ movaps XMMWORD[160+rsp],xmm15 ++$L$cbc_body: ++ movdqu xmm6,XMMWORD[r8] ++ sub rsi,rdi ++ call _vpaes_preheat ++ cmp r9d,0 ++ je NEAR $L$cbc_dec_loop ++ jmp NEAR $L$cbc_enc_loop ++ALIGN 16 ++$L$cbc_enc_loop: ++ movdqu xmm0,XMMWORD[rdi] ++ pxor xmm0,xmm6 ++ call _vpaes_encrypt_core ++ movdqa xmm6,xmm0 ++ movdqu XMMWORD[rdi*1+rsi],xmm0 ++ lea rdi,[16+rdi] ++ sub rcx,16 ++ jnc NEAR $L$cbc_enc_loop ++ jmp NEAR $L$cbc_done ++ALIGN 16 ++$L$cbc_dec_loop: ++ movdqu xmm0,XMMWORD[rdi] ++ movdqa xmm7,xmm0 ++ call _vpaes_decrypt_core ++ pxor xmm0,xmm6 ++ movdqa xmm6,xmm7 ++ movdqu XMMWORD[rdi*1+rsi],xmm0 ++ lea rdi,[16+rdi] ++ sub rcx,16 ++ jnc NEAR $L$cbc_dec_loop ++$L$cbc_done: ++ movdqu XMMWORD[r8],xmm6 ++ movaps xmm6,XMMWORD[16+rsp] ++ movaps xmm7,XMMWORD[32+rsp] ++ movaps xmm8,XMMWORD[48+rsp] ++ movaps xmm9,XMMWORD[64+rsp] ++ movaps xmm10,XMMWORD[80+rsp] ++ movaps xmm11,XMMWORD[96+rsp] ++ movaps xmm12,XMMWORD[112+rsp] ++ movaps xmm13,XMMWORD[128+rsp] ++ movaps xmm14,XMMWORD[144+rsp] ++ movaps xmm15,XMMWORD[160+rsp] ++ lea rsp,[184+rsp] ++$L$cbc_epilogue: ++$L$cbc_abort: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_vpaes_cbc_encrypt: ++ ++ ++ ++ ++ ++ ++ ++ALIGN 16 ++_vpaes_preheat: ++ lea r10,[$L$k_s0F] ++ movdqa xmm10,XMMWORD[((-32))+r10] ++ movdqa xmm11,XMMWORD[((-16))+r10] ++ movdqa xmm9,XMMWORD[r10] ++ movdqa xmm13,XMMWORD[48+r10] ++ movdqa xmm12,XMMWORD[64+r10] ++ movdqa xmm15,XMMWORD[80+r10] ++ movdqa xmm14,XMMWORD[96+r10] ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ ++ ++ ++ ++ALIGN 64 ++_vpaes_consts: ++$L$k_inv: ++ DQ 0x0E05060F0D080180,0x040703090A0B0C02 ++ DQ 0x01040A060F0B0780,0x030D0E0C02050809 ++ ++$L$k_s0F: ++ DQ 0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F ++ ++$L$k_ipt: ++ DQ 0xC2B2E8985A2A7000,0xCABAE09052227808 ++ DQ 0x4C01307D317C4D00,0xCD80B1FCB0FDCC81 ++ ++$L$k_sb1: ++ DQ 0xB19BE18FCB503E00,0xA5DF7A6E142AF544 ++ DQ 0x3618D415FAE22300,0x3BF7CCC10D2ED9EF ++$L$k_sb2: ++ DQ 0xE27A93C60B712400,0x5EB7E955BC982FCD ++ DQ 0x69EB88400AE12900,0xC2A163C8AB82234A ++$L$k_sbo: ++ DQ 0xD0D26D176FBDC700,0x15AABF7AC502A878 ++ DQ 0xCFE474A55FBB6A00,0x8E1E90D1412B35FA ++ ++$L$k_mc_forward: ++ DQ 0x0407060500030201,0x0C0F0E0D080B0A09 ++ DQ 0x080B0A0904070605,0x000302010C0F0E0D ++ DQ 0x0C0F0E0D080B0A09,0x0407060500030201 ++ DQ 0x000302010C0F0E0D,0x080B0A0904070605 ++ ++$L$k_mc_backward: ++ DQ 0x0605040702010003,0x0E0D0C0F0A09080B ++ DQ 0x020100030E0D0C0F,0x0A09080B06050407 ++ DQ 0x0E0D0C0F0A09080B,0x0605040702010003 ++ DQ 0x0A09080B06050407,0x020100030E0D0C0F ++ ++$L$k_sr: ++ DQ 0x0706050403020100,0x0F0E0D0C0B0A0908 ++ DQ 0x030E09040F0A0500,0x0B06010C07020D08 ++ DQ 0x0F060D040B020900,0x070E050C030A0108 ++ DQ 0x0B0E0104070A0D00,0x0306090C0F020508 ++ ++$L$k_rcon: ++ DQ 0x1F8391B9AF9DEEB6,0x702A98084D7C7D81 ++ ++$L$k_s63: ++ DQ 0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B ++ ++$L$k_opt: ++ DQ 0xFF9F4929D6B66000,0xF7974121DEBE6808 ++ DQ 0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0 ++ ++$L$k_deskew: ++ DQ 0x07E4A34047A4E300,0x1DFEB95A5DBEF91A ++ DQ 0x5F36B5DC83EA6900,0x2841C2ABF49D1E77 ++ ++ ++ ++ ++ ++$L$k_dksd: ++ DQ 0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9 ++ DQ 0x41C277F4B5368300,0x5FDC69EAAB289D1E ++$L$k_dksb: ++ DQ 0x9A4FCA1F8550D500,0x03D653861CC94C99 ++ DQ 0x115BEDA7B6FC4A00,0xD993256F7E3482C8 ++$L$k_dkse: ++ DQ 0xD5031CCA1FC9D600,0x53859A4C994F5086 ++ DQ 0xA23196054FDC7BE8,0xCD5EF96A20B31487 ++$L$k_dks9: ++ DQ 0xB6116FC87ED9A700,0x4AED933482255BFC ++ DQ 0x4576516227143300,0x8BB89FACE9DAFDCE ++ ++ ++ ++ ++ ++$L$k_dipt: ++ DQ 0x0F505B040B545F00,0x154A411E114E451A ++ DQ 0x86E383E660056500,0x12771772F491F194 ++ ++$L$k_dsb9: ++ DQ 0x851C03539A86D600,0xCAD51F504F994CC9 ++ DQ 0xC03B1789ECD74900,0x725E2C9EB2FBA565 ++$L$k_dsbd: ++ DQ 0x7D57CCDFE6B1A200,0xF56E9B13882A4439 ++ DQ 0x3CE2FAF724C6CB00,0x2931180D15DEEFD3 ++$L$k_dsbb: ++ DQ 0xD022649296B44200,0x602646F6B0F2D404 ++ DQ 0xC19498A6CD596700,0xF3FF0C3E3255AA6B ++$L$k_dsbe: ++ DQ 0x46F2929626D4D000,0x2242600464B4F6B0 ++ DQ 0x0C55A6CDFFAAC100,0x9467F36B98593E32 ++$L$k_dsbo: ++ DQ 0x1387EA537EF94000,0xC7AA6DB9D4943E2D ++ DQ 0x12D7560F93441D00,0xCA4B8159D8C58E9C ++DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 ++DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54 ++DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97 ++DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32 ++DB 85,110,105,118,101,114,115,105,116,121,41,0 ++ALIGN 64 ++ ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$in_prologue ++ ++ lea rsi,[16+rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ lea rax,[184+rax] ++ ++$L$in_prologue: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase ++ DD $L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase ++ DD $L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase ++ ++ DD $L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase ++ DD $L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase ++ DD $L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase ++ ++ DD $L$SEH_begin_vpaes_encrypt wrt ..imagebase ++ DD $L$SEH_end_vpaes_encrypt wrt ..imagebase ++ DD $L$SEH_info_vpaes_encrypt wrt ..imagebase ++ ++ DD $L$SEH_begin_vpaes_decrypt wrt ..imagebase ++ DD $L$SEH_end_vpaes_decrypt wrt ..imagebase ++ DD $L$SEH_info_vpaes_decrypt wrt ..imagebase ++ ++ DD $L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase ++ DD $L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase ++ DD $L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase ++ ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_info_vpaes_set_encrypt_key: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase ++$L$SEH_info_vpaes_set_decrypt_key: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase ++$L$SEH_info_vpaes_encrypt: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase ++$L$SEH_info_vpaes_decrypt: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$dec_body wrt ..imagebase,$L$dec_epilogue wrt ..imagebase ++$L$SEH_info_vpaes_cbc_encrypt: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt ..imagebase +diff --git a/SMP/lib/accelerated/x86/coff/aesni-gcm-x86_64.asm b/SMP/lib/accelerated/x86/coff/aesni-gcm-x86_64.asm +new file mode 100644 +index 0000000..741a9e4 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/aesni-gcm-x86_64.asm +@@ -0,0 +1,986 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++ ++ ++ALIGN 32 ++_aesni_ctr32_ghash_6x: ++ vmovdqu xmm2,XMMWORD[32+r11] ++ sub rdx,6 ++ vpxor xmm4,xmm4,xmm4 ++ vmovdqu xmm15,XMMWORD[((0-128))+rcx] ++ vpaddb xmm10,xmm1,xmm2 ++ vpaddb xmm11,xmm10,xmm2 ++ vpaddb xmm12,xmm11,xmm2 ++ vpaddb xmm13,xmm12,xmm2 ++ vpaddb xmm14,xmm13,xmm2 ++ vpxor xmm9,xmm1,xmm15 ++ vmovdqu XMMWORD[(16+8)+rsp],xmm4 ++ jmp NEAR $L$oop6x ++ ++ALIGN 32 ++$L$oop6x: ++ add ebx,100663296 ++ jc NEAR $L$handle_ctr32 ++ vmovdqu xmm3,XMMWORD[((0-32))+r9] ++ vpaddb xmm1,xmm14,xmm2 ++ vpxor xmm10,xmm10,xmm15 ++ vpxor xmm11,xmm11,xmm15 ++ ++$L$resume_ctr32: ++ vmovdqu XMMWORD[r8],xmm1 ++ vpclmulqdq xmm5,xmm7,xmm3,0x10 ++ vpxor xmm12,xmm12,xmm15 ++ vmovups xmm2,XMMWORD[((16-128))+rcx] ++ vpclmulqdq xmm6,xmm7,xmm3,0x01 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ xor r12,r12 ++ cmp r15,r14 ++ ++ vaesenc xmm9,xmm9,xmm2 ++ vmovdqu xmm0,XMMWORD[((48+8))+rsp] ++ vpxor xmm13,xmm13,xmm15 ++ vpclmulqdq xmm1,xmm7,xmm3,0x00 ++ vaesenc xmm10,xmm10,xmm2 ++ vpxor xmm14,xmm14,xmm15 ++ setnc r12b ++ vpclmulqdq xmm7,xmm7,xmm3,0x11 ++ vaesenc xmm11,xmm11,xmm2 ++ vmovdqu xmm3,XMMWORD[((16-32))+r9] ++ neg r12 ++ vaesenc xmm12,xmm12,xmm2 ++ vpxor xmm6,xmm6,xmm5 ++ vpclmulqdq xmm5,xmm0,xmm3,0x00 ++ vpxor xmm8,xmm8,xmm4 ++ vaesenc xmm13,xmm13,xmm2 ++ vpxor xmm4,xmm1,xmm5 ++ and r12,0x60 ++ vmovups xmm15,XMMWORD[((32-128))+rcx] ++ vpclmulqdq xmm1,xmm0,xmm3,0x10 ++ vaesenc xmm14,xmm14,xmm2 ++ ++ vpclmulqdq xmm2,xmm0,xmm3,0x01 ++ lea r14,[r12*1+r14] ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm8,xmm8,XMMWORD[((16+8))+rsp] ++ vpclmulqdq xmm3,xmm0,xmm3,0x11 ++ vmovdqu xmm0,XMMWORD[((64+8))+rsp] ++ vaesenc xmm10,xmm10,xmm15 ++ movbe r13,QWORD[88+r14] ++ vaesenc xmm11,xmm11,xmm15 ++ movbe r12,QWORD[80+r14] ++ vaesenc xmm12,xmm12,xmm15 ++ mov QWORD[((32+8))+rsp],r13 ++ vaesenc xmm13,xmm13,xmm15 ++ mov QWORD[((40+8))+rsp],r12 ++ vmovdqu xmm5,XMMWORD[((48-32))+r9] ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vmovups xmm15,XMMWORD[((48-128))+rcx] ++ vpxor xmm6,xmm6,xmm1 ++ vpclmulqdq xmm1,xmm0,xmm5,0x00 ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm6,xmm6,xmm2 ++ vpclmulqdq xmm2,xmm0,xmm5,0x10 ++ vaesenc xmm10,xmm10,xmm15 ++ vpxor xmm7,xmm7,xmm3 ++ vpclmulqdq xmm3,xmm0,xmm5,0x01 ++ vaesenc xmm11,xmm11,xmm15 ++ vpclmulqdq xmm5,xmm0,xmm5,0x11 ++ vmovdqu xmm0,XMMWORD[((80+8))+rsp] ++ vaesenc xmm12,xmm12,xmm15 ++ vaesenc xmm13,xmm13,xmm15 ++ vpxor xmm4,xmm4,xmm1 ++ vmovdqu xmm1,XMMWORD[((64-32))+r9] ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vmovups xmm15,XMMWORD[((64-128))+rcx] ++ vpxor xmm6,xmm6,xmm2 ++ vpclmulqdq xmm2,xmm0,xmm1,0x00 ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm6,xmm6,xmm3 ++ vpclmulqdq xmm3,xmm0,xmm1,0x10 ++ vaesenc xmm10,xmm10,xmm15 ++ movbe r13,QWORD[72+r14] ++ vpxor xmm7,xmm7,xmm5 ++ vpclmulqdq xmm5,xmm0,xmm1,0x01 ++ vaesenc xmm11,xmm11,xmm15 ++ movbe r12,QWORD[64+r14] ++ vpclmulqdq xmm1,xmm0,xmm1,0x11 ++ vmovdqu xmm0,XMMWORD[((96+8))+rsp] ++ vaesenc xmm12,xmm12,xmm15 ++ mov QWORD[((48+8))+rsp],r13 ++ vaesenc xmm13,xmm13,xmm15 ++ mov QWORD[((56+8))+rsp],r12 ++ vpxor xmm4,xmm4,xmm2 ++ vmovdqu xmm2,XMMWORD[((96-32))+r9] ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vmovups xmm15,XMMWORD[((80-128))+rcx] ++ vpxor xmm6,xmm6,xmm3 ++ vpclmulqdq xmm3,xmm0,xmm2,0x00 ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm6,xmm6,xmm5 ++ vpclmulqdq xmm5,xmm0,xmm2,0x10 ++ vaesenc xmm10,xmm10,xmm15 ++ movbe r13,QWORD[56+r14] ++ vpxor xmm7,xmm7,xmm1 ++ vpclmulqdq xmm1,xmm0,xmm2,0x01 ++ vpxor xmm8,xmm8,XMMWORD[((112+8))+rsp] ++ vaesenc xmm11,xmm11,xmm15 ++ movbe r12,QWORD[48+r14] ++ vpclmulqdq xmm2,xmm0,xmm2,0x11 ++ vaesenc xmm12,xmm12,xmm15 ++ mov QWORD[((64+8))+rsp],r13 ++ vaesenc xmm13,xmm13,xmm15 ++ mov QWORD[((72+8))+rsp],r12 ++ vpxor xmm4,xmm4,xmm3 ++ vmovdqu xmm3,XMMWORD[((112-32))+r9] ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vmovups xmm15,XMMWORD[((96-128))+rcx] ++ vpxor xmm6,xmm6,xmm5 ++ vpclmulqdq xmm5,xmm8,xmm3,0x10 ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm6,xmm6,xmm1 ++ vpclmulqdq xmm1,xmm8,xmm3,0x01 ++ vaesenc xmm10,xmm10,xmm15 ++ movbe r13,QWORD[40+r14] ++ vpxor xmm7,xmm7,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm3,0x00 ++ vaesenc xmm11,xmm11,xmm15 ++ movbe r12,QWORD[32+r14] ++ vpclmulqdq xmm8,xmm8,xmm3,0x11 ++ vaesenc xmm12,xmm12,xmm15 ++ mov QWORD[((80+8))+rsp],r13 ++ vaesenc xmm13,xmm13,xmm15 ++ mov QWORD[((88+8))+rsp],r12 ++ vpxor xmm6,xmm6,xmm5 ++ vaesenc xmm14,xmm14,xmm15 ++ vpxor xmm6,xmm6,xmm1 ++ ++ vmovups xmm15,XMMWORD[((112-128))+rcx] ++ vpslldq xmm5,xmm6,8 ++ vpxor xmm4,xmm4,xmm2 ++ vmovdqu xmm3,XMMWORD[16+r11] ++ ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm7,xmm7,xmm8 ++ vaesenc xmm10,xmm10,xmm15 ++ vpxor xmm4,xmm4,xmm5 ++ movbe r13,QWORD[24+r14] ++ vaesenc xmm11,xmm11,xmm15 ++ movbe r12,QWORD[16+r14] ++ vpalignr xmm0,xmm4,xmm4,8 ++ vpclmulqdq xmm4,xmm4,xmm3,0x10 ++ mov QWORD[((96+8))+rsp],r13 ++ vaesenc xmm12,xmm12,xmm15 ++ mov QWORD[((104+8))+rsp],r12 ++ vaesenc xmm13,xmm13,xmm15 ++ vmovups xmm1,XMMWORD[((128-128))+rcx] ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vaesenc xmm9,xmm9,xmm1 ++ vmovups xmm15,XMMWORD[((144-128))+rcx] ++ vaesenc xmm10,xmm10,xmm1 ++ vpsrldq xmm6,xmm6,8 ++ vaesenc xmm11,xmm11,xmm1 ++ vpxor xmm7,xmm7,xmm6 ++ vaesenc xmm12,xmm12,xmm1 ++ vpxor xmm4,xmm4,xmm0 ++ movbe r13,QWORD[8+r14] ++ vaesenc xmm13,xmm13,xmm1 ++ movbe r12,QWORD[r14] ++ vaesenc xmm14,xmm14,xmm1 ++ vmovups xmm1,XMMWORD[((160-128))+rcx] ++ cmp ebp,11 ++ jb NEAR $L$enc_tail ++ ++ vaesenc xmm9,xmm9,xmm15 ++ vaesenc xmm10,xmm10,xmm15 ++ vaesenc xmm11,xmm11,xmm15 ++ vaesenc xmm12,xmm12,xmm15 ++ vaesenc xmm13,xmm13,xmm15 ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vaesenc xmm9,xmm9,xmm1 ++ vaesenc xmm10,xmm10,xmm1 ++ vaesenc xmm11,xmm11,xmm1 ++ vaesenc xmm12,xmm12,xmm1 ++ vaesenc xmm13,xmm13,xmm1 ++ vmovups xmm15,XMMWORD[((176-128))+rcx] ++ vaesenc xmm14,xmm14,xmm1 ++ vmovups xmm1,XMMWORD[((192-128))+rcx] ++ je NEAR $L$enc_tail ++ ++ vaesenc xmm9,xmm9,xmm15 ++ vaesenc xmm10,xmm10,xmm15 ++ vaesenc xmm11,xmm11,xmm15 ++ vaesenc xmm12,xmm12,xmm15 ++ vaesenc xmm13,xmm13,xmm15 ++ vaesenc xmm14,xmm14,xmm15 ++ ++ vaesenc xmm9,xmm9,xmm1 ++ vaesenc xmm10,xmm10,xmm1 ++ vaesenc xmm11,xmm11,xmm1 ++ vaesenc xmm12,xmm12,xmm1 ++ vaesenc xmm13,xmm13,xmm1 ++ vmovups xmm15,XMMWORD[((208-128))+rcx] ++ vaesenc xmm14,xmm14,xmm1 ++ vmovups xmm1,XMMWORD[((224-128))+rcx] ++ jmp NEAR $L$enc_tail ++ ++ALIGN 32 ++$L$handle_ctr32: ++ vmovdqu xmm0,XMMWORD[r11] ++ vpshufb xmm6,xmm1,xmm0 ++ vmovdqu xmm5,XMMWORD[48+r11] ++ vpaddd xmm10,xmm6,XMMWORD[64+r11] ++ vpaddd xmm11,xmm6,xmm5 ++ vmovdqu xmm3,XMMWORD[((0-32))+r9] ++ vpaddd xmm12,xmm10,xmm5 ++ vpshufb xmm10,xmm10,xmm0 ++ vpaddd xmm13,xmm11,xmm5 ++ vpshufb xmm11,xmm11,xmm0 ++ vpxor xmm10,xmm10,xmm15 ++ vpaddd xmm14,xmm12,xmm5 ++ vpshufb xmm12,xmm12,xmm0 ++ vpxor xmm11,xmm11,xmm15 ++ vpaddd xmm1,xmm13,xmm5 ++ vpshufb xmm13,xmm13,xmm0 ++ vpshufb xmm14,xmm14,xmm0 ++ vpshufb xmm1,xmm1,xmm0 ++ jmp NEAR $L$resume_ctr32 ++ ++ALIGN 32 ++$L$enc_tail: ++ vaesenc xmm9,xmm9,xmm15 ++ vmovdqu XMMWORD[(16+8)+rsp],xmm7 ++ vpalignr xmm8,xmm4,xmm4,8 ++ vaesenc xmm10,xmm10,xmm15 ++ vpclmulqdq xmm4,xmm4,xmm3,0x10 ++ vpxor xmm2,xmm1,XMMWORD[rdi] ++ vaesenc xmm11,xmm11,xmm15 ++ vpxor xmm0,xmm1,XMMWORD[16+rdi] ++ vaesenc xmm12,xmm12,xmm15 ++ vpxor xmm5,xmm1,XMMWORD[32+rdi] ++ vaesenc xmm13,xmm13,xmm15 ++ vpxor xmm6,xmm1,XMMWORD[48+rdi] ++ vaesenc xmm14,xmm14,xmm15 ++ vpxor xmm7,xmm1,XMMWORD[64+rdi] ++ vpxor xmm3,xmm1,XMMWORD[80+rdi] ++ vmovdqu xmm1,XMMWORD[r8] ++ ++ vaesenclast xmm9,xmm9,xmm2 ++ vmovdqu xmm2,XMMWORD[32+r11] ++ vaesenclast xmm10,xmm10,xmm0 ++ vpaddb xmm0,xmm1,xmm2 ++ mov QWORD[((112+8))+rsp],r13 ++ lea rdi,[96+rdi] ++ vaesenclast xmm11,xmm11,xmm5 ++ vpaddb xmm5,xmm0,xmm2 ++ mov QWORD[((120+8))+rsp],r12 ++ lea rsi,[96+rsi] ++ vmovdqu xmm15,XMMWORD[((0-128))+rcx] ++ vaesenclast xmm12,xmm12,xmm6 ++ vpaddb xmm6,xmm5,xmm2 ++ vaesenclast xmm13,xmm13,xmm7 ++ vpaddb xmm7,xmm6,xmm2 ++ vaesenclast xmm14,xmm14,xmm3 ++ vpaddb xmm3,xmm7,xmm2 ++ ++ add r10,0x60 ++ sub rdx,0x6 ++ jc NEAR $L$6x_done ++ ++ vmovups XMMWORD[(-96)+rsi],xmm9 ++ vpxor xmm9,xmm1,xmm15 ++ vmovups XMMWORD[(-80)+rsi],xmm10 ++ vmovdqa xmm10,xmm0 ++ vmovups XMMWORD[(-64)+rsi],xmm11 ++ vmovdqa xmm11,xmm5 ++ vmovups XMMWORD[(-48)+rsi],xmm12 ++ vmovdqa xmm12,xmm6 ++ vmovups XMMWORD[(-32)+rsi],xmm13 ++ vmovdqa xmm13,xmm7 ++ vmovups XMMWORD[(-16)+rsi],xmm14 ++ vmovdqa xmm14,xmm3 ++ vmovdqu xmm7,XMMWORD[((32+8))+rsp] ++ jmp NEAR $L$oop6x ++ ++$L$6x_done: ++ vpxor xmm8,xmm8,XMMWORD[((16+8))+rsp] ++ vpxor xmm8,xmm8,xmm4 ++ ++ DB 0F3h,0C3h ;repret ++ ++global aesni_gcm_decrypt ++ ++ALIGN 32 ++aesni_gcm_decrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_gcm_decrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ xor r10,r10 ++ ++ ++ ++ cmp rdx,0x60 ++ jb NEAR $L$gcm_dec_abort ++ ++ lea rax,[rsp] ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ lea rsp,[((-168))+rsp] ++ movaps XMMWORD[(-216)+rax],xmm6 ++ movaps XMMWORD[(-200)+rax],xmm7 ++ movaps XMMWORD[(-184)+rax],xmm8 ++ movaps XMMWORD[(-168)+rax],xmm9 ++ movaps XMMWORD[(-152)+rax],xmm10 ++ movaps XMMWORD[(-136)+rax],xmm11 ++ movaps XMMWORD[(-120)+rax],xmm12 ++ movaps XMMWORD[(-104)+rax],xmm13 ++ movaps XMMWORD[(-88)+rax],xmm14 ++ movaps XMMWORD[(-72)+rax],xmm15 ++$L$gcm_dec_body: ++ vzeroupper ++ ++ vmovdqu xmm1,XMMWORD[r8] ++ add rsp,-128 ++ mov ebx,DWORD[12+r8] ++ lea r11,[$L$bswap_mask] ++ lea r14,[((-128))+rcx] ++ mov r15,0xf80 ++ vmovdqu xmm8,XMMWORD[r9] ++ and rsp,-128 ++ vmovdqu xmm0,XMMWORD[r11] ++ lea rcx,[128+rcx] ++ lea r9,[((32+32))+r9] ++ mov ebp,DWORD[((240-128))+rcx] ++ vpshufb xmm8,xmm8,xmm0 ++ ++ and r14,r15 ++ and r15,rsp ++ sub r15,r14 ++ jc NEAR $L$dec_no_key_aliasing ++ cmp r15,768 ++ jnc NEAR $L$dec_no_key_aliasing ++ sub rsp,r15 ++$L$dec_no_key_aliasing: ++ ++ vmovdqu xmm7,XMMWORD[80+rdi] ++ lea r14,[rdi] ++ vmovdqu xmm4,XMMWORD[64+rdi] ++ ++ ++ ++ ++ ++ ++ ++ lea r15,[((-192))+rdx*1+rdi] ++ ++ vmovdqu xmm5,XMMWORD[48+rdi] ++ shr rdx,4 ++ xor r10,r10 ++ vmovdqu xmm6,XMMWORD[32+rdi] ++ vpshufb xmm7,xmm7,xmm0 ++ vmovdqu xmm2,XMMWORD[16+rdi] ++ vpshufb xmm4,xmm4,xmm0 ++ vmovdqu xmm3,XMMWORD[rdi] ++ vpshufb xmm5,xmm5,xmm0 ++ vmovdqu XMMWORD[48+rsp],xmm4 ++ vpshufb xmm6,xmm6,xmm0 ++ vmovdqu XMMWORD[64+rsp],xmm5 ++ vpshufb xmm2,xmm2,xmm0 ++ vmovdqu XMMWORD[80+rsp],xmm6 ++ vpshufb xmm3,xmm3,xmm0 ++ vmovdqu XMMWORD[96+rsp],xmm2 ++ vmovdqu XMMWORD[112+rsp],xmm3 ++ ++ call _aesni_ctr32_ghash_6x ++ ++ vmovups XMMWORD[(-96)+rsi],xmm9 ++ vmovups XMMWORD[(-80)+rsi],xmm10 ++ vmovups XMMWORD[(-64)+rsi],xmm11 ++ vmovups XMMWORD[(-48)+rsi],xmm12 ++ vmovups XMMWORD[(-32)+rsi],xmm13 ++ vmovups XMMWORD[(-16)+rsi],xmm14 ++ ++ vpshufb xmm8,xmm8,XMMWORD[r11] ++ vmovdqu XMMWORD[(-64)+r9],xmm8 ++ ++ vzeroupper ++ movaps xmm6,XMMWORD[((-216))+rax] ++ movaps xmm7,XMMWORD[((-200))+rax] ++ movaps xmm8,XMMWORD[((-184))+rax] ++ movaps xmm9,XMMWORD[((-168))+rax] ++ movaps xmm10,XMMWORD[((-152))+rax] ++ movaps xmm11,XMMWORD[((-136))+rax] ++ movaps xmm12,XMMWORD[((-120))+rax] ++ movaps xmm13,XMMWORD[((-104))+rax] ++ movaps xmm14,XMMWORD[((-88))+rax] ++ movaps xmm15,XMMWORD[((-72))+rax] ++ mov r15,QWORD[((-48))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ lea rsp,[rax] ++$L$gcm_dec_abort: ++ mov rax,r10 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_gcm_decrypt: ++ ++ALIGN 32 ++_aesni_ctr32_6x: ++ vmovdqu xmm4,XMMWORD[((0-128))+rcx] ++ vmovdqu xmm2,XMMWORD[32+r11] ++ lea r13,[((-1))+rbp] ++ vmovups xmm15,XMMWORD[((16-128))+rcx] ++ lea r12,[((32-128))+rcx] ++ vpxor xmm9,xmm1,xmm4 ++ add ebx,100663296 ++ jc NEAR $L$handle_ctr32_2 ++ vpaddb xmm10,xmm1,xmm2 ++ vpaddb xmm11,xmm10,xmm2 ++ vpxor xmm10,xmm10,xmm4 ++ vpaddb xmm12,xmm11,xmm2 ++ vpxor xmm11,xmm11,xmm4 ++ vpaddb xmm13,xmm12,xmm2 ++ vpxor xmm12,xmm12,xmm4 ++ vpaddb xmm14,xmm13,xmm2 ++ vpxor xmm13,xmm13,xmm4 ++ vpaddb xmm1,xmm14,xmm2 ++ vpxor xmm14,xmm14,xmm4 ++ jmp NEAR $L$oop_ctr32 ++ ++ALIGN 16 ++$L$oop_ctr32: ++ vaesenc xmm9,xmm9,xmm15 ++ vaesenc xmm10,xmm10,xmm15 ++ vaesenc xmm11,xmm11,xmm15 ++ vaesenc xmm12,xmm12,xmm15 ++ vaesenc xmm13,xmm13,xmm15 ++ vaesenc xmm14,xmm14,xmm15 ++ vmovups xmm15,XMMWORD[r12] ++ lea r12,[16+r12] ++ dec r13d ++ jnz NEAR $L$oop_ctr32 ++ ++ vmovdqu xmm3,XMMWORD[r12] ++ vaesenc xmm9,xmm9,xmm15 ++ vpxor xmm4,xmm3,XMMWORD[rdi] ++ vaesenc xmm10,xmm10,xmm15 ++ vpxor xmm5,xmm3,XMMWORD[16+rdi] ++ vaesenc xmm11,xmm11,xmm15 ++ vpxor xmm6,xmm3,XMMWORD[32+rdi] ++ vaesenc xmm12,xmm12,xmm15 ++ vpxor xmm8,xmm3,XMMWORD[48+rdi] ++ vaesenc xmm13,xmm13,xmm15 ++ vpxor xmm2,xmm3,XMMWORD[64+rdi] ++ vaesenc xmm14,xmm14,xmm15 ++ vpxor xmm3,xmm3,XMMWORD[80+rdi] ++ lea rdi,[96+rdi] ++ ++ vaesenclast xmm9,xmm9,xmm4 ++ vaesenclast xmm10,xmm10,xmm5 ++ vaesenclast xmm11,xmm11,xmm6 ++ vaesenclast xmm12,xmm12,xmm8 ++ vaesenclast xmm13,xmm13,xmm2 ++ vaesenclast xmm14,xmm14,xmm3 ++ vmovups XMMWORD[rsi],xmm9 ++ vmovups XMMWORD[16+rsi],xmm10 ++ vmovups XMMWORD[32+rsi],xmm11 ++ vmovups XMMWORD[48+rsi],xmm12 ++ vmovups XMMWORD[64+rsi],xmm13 ++ vmovups XMMWORD[80+rsi],xmm14 ++ lea rsi,[96+rsi] ++ ++ DB 0F3h,0C3h ;repret ++ALIGN 32 ++$L$handle_ctr32_2: ++ vpshufb xmm6,xmm1,xmm0 ++ vmovdqu xmm5,XMMWORD[48+r11] ++ vpaddd xmm10,xmm6,XMMWORD[64+r11] ++ vpaddd xmm11,xmm6,xmm5 ++ vpaddd xmm12,xmm10,xmm5 ++ vpshufb xmm10,xmm10,xmm0 ++ vpaddd xmm13,xmm11,xmm5 ++ vpshufb xmm11,xmm11,xmm0 ++ vpxor xmm10,xmm10,xmm4 ++ vpaddd xmm14,xmm12,xmm5 ++ vpshufb xmm12,xmm12,xmm0 ++ vpxor xmm11,xmm11,xmm4 ++ vpaddd xmm1,xmm13,xmm5 ++ vpshufb xmm13,xmm13,xmm0 ++ vpxor xmm12,xmm12,xmm4 ++ vpshufb xmm14,xmm14,xmm0 ++ vpxor xmm13,xmm13,xmm4 ++ vpshufb xmm1,xmm1,xmm0 ++ vpxor xmm14,xmm14,xmm4 ++ jmp NEAR $L$oop_ctr32 ++ ++ ++global aesni_gcm_encrypt ++ ++ALIGN 32 ++aesni_gcm_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_gcm_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ xor r10,r10 ++ ++ ++ ++ ++ cmp rdx,0x60*3 ++ jb NEAR $L$gcm_enc_abort ++ ++ lea rax,[rsp] ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ lea rsp,[((-168))+rsp] ++ movaps XMMWORD[(-216)+rax],xmm6 ++ movaps XMMWORD[(-200)+rax],xmm7 ++ movaps XMMWORD[(-184)+rax],xmm8 ++ movaps XMMWORD[(-168)+rax],xmm9 ++ movaps XMMWORD[(-152)+rax],xmm10 ++ movaps XMMWORD[(-136)+rax],xmm11 ++ movaps XMMWORD[(-120)+rax],xmm12 ++ movaps XMMWORD[(-104)+rax],xmm13 ++ movaps XMMWORD[(-88)+rax],xmm14 ++ movaps XMMWORD[(-72)+rax],xmm15 ++$L$gcm_enc_body: ++ vzeroupper ++ ++ vmovdqu xmm1,XMMWORD[r8] ++ add rsp,-128 ++ mov ebx,DWORD[12+r8] ++ lea r11,[$L$bswap_mask] ++ lea r14,[((-128))+rcx] ++ mov r15,0xf80 ++ lea rcx,[128+rcx] ++ vmovdqu xmm0,XMMWORD[r11] ++ and rsp,-128 ++ mov ebp,DWORD[((240-128))+rcx] ++ ++ and r14,r15 ++ and r15,rsp ++ sub r15,r14 ++ jc NEAR $L$enc_no_key_aliasing ++ cmp r15,768 ++ jnc NEAR $L$enc_no_key_aliasing ++ sub rsp,r15 ++$L$enc_no_key_aliasing: ++ ++ lea r14,[rsi] ++ ++ ++ ++ ++ ++ ++ ++ ++ lea r15,[((-192))+rdx*1+rsi] ++ ++ shr rdx,4 ++ ++ call _aesni_ctr32_6x ++ vpshufb xmm8,xmm9,xmm0 ++ vpshufb xmm2,xmm10,xmm0 ++ vmovdqu XMMWORD[112+rsp],xmm8 ++ vpshufb xmm4,xmm11,xmm0 ++ vmovdqu XMMWORD[96+rsp],xmm2 ++ vpshufb xmm5,xmm12,xmm0 ++ vmovdqu XMMWORD[80+rsp],xmm4 ++ vpshufb xmm6,xmm13,xmm0 ++ vmovdqu XMMWORD[64+rsp],xmm5 ++ vpshufb xmm7,xmm14,xmm0 ++ vmovdqu XMMWORD[48+rsp],xmm6 ++ ++ call _aesni_ctr32_6x ++ ++ vmovdqu xmm8,XMMWORD[r9] ++ lea r9,[((32+32))+r9] ++ sub rdx,12 ++ mov r10,0x60*2 ++ vpshufb xmm8,xmm8,xmm0 ++ ++ call _aesni_ctr32_ghash_6x ++ vmovdqu xmm7,XMMWORD[32+rsp] ++ vmovdqu xmm0,XMMWORD[r11] ++ vmovdqu xmm3,XMMWORD[((0-32))+r9] ++ vpunpckhqdq xmm1,xmm7,xmm7 ++ vmovdqu xmm15,XMMWORD[((32-32))+r9] ++ vmovups XMMWORD[(-96)+rsi],xmm9 ++ vpshufb xmm9,xmm9,xmm0 ++ vpxor xmm1,xmm1,xmm7 ++ vmovups XMMWORD[(-80)+rsi],xmm10 ++ vpshufb xmm10,xmm10,xmm0 ++ vmovups XMMWORD[(-64)+rsi],xmm11 ++ vpshufb xmm11,xmm11,xmm0 ++ vmovups XMMWORD[(-48)+rsi],xmm12 ++ vpshufb xmm12,xmm12,xmm0 ++ vmovups XMMWORD[(-32)+rsi],xmm13 ++ vpshufb xmm13,xmm13,xmm0 ++ vmovups XMMWORD[(-16)+rsi],xmm14 ++ vpshufb xmm14,xmm14,xmm0 ++ vmovdqu XMMWORD[16+rsp],xmm9 ++ vmovdqu xmm6,XMMWORD[48+rsp] ++ vmovdqu xmm0,XMMWORD[((16-32))+r9] ++ vpunpckhqdq xmm2,xmm6,xmm6 ++ vpclmulqdq xmm5,xmm7,xmm3,0x00 ++ vpxor xmm2,xmm2,xmm6 ++ vpclmulqdq xmm7,xmm7,xmm3,0x11 ++ vpclmulqdq xmm1,xmm1,xmm15,0x00 ++ ++ vmovdqu xmm9,XMMWORD[64+rsp] ++ vpclmulqdq xmm4,xmm6,xmm0,0x00 ++ vmovdqu xmm3,XMMWORD[((48-32))+r9] ++ vpxor xmm4,xmm4,xmm5 ++ vpunpckhqdq xmm5,xmm9,xmm9 ++ vpclmulqdq xmm6,xmm6,xmm0,0x11 ++ vpxor xmm5,xmm5,xmm9 ++ vpxor xmm6,xmm6,xmm7 ++ vpclmulqdq xmm2,xmm2,xmm15,0x10 ++ vmovdqu xmm15,XMMWORD[((80-32))+r9] ++ vpxor xmm2,xmm2,xmm1 ++ ++ vmovdqu xmm1,XMMWORD[80+rsp] ++ vpclmulqdq xmm7,xmm9,xmm3,0x00 ++ vmovdqu xmm0,XMMWORD[((64-32))+r9] ++ vpxor xmm7,xmm7,xmm4 ++ vpunpckhqdq xmm4,xmm1,xmm1 ++ vpclmulqdq xmm9,xmm9,xmm3,0x11 ++ vpxor xmm4,xmm4,xmm1 ++ vpxor xmm9,xmm9,xmm6 ++ vpclmulqdq xmm5,xmm5,xmm15,0x00 ++ vpxor xmm5,xmm5,xmm2 ++ ++ vmovdqu xmm2,XMMWORD[96+rsp] ++ vpclmulqdq xmm6,xmm1,xmm0,0x00 ++ vmovdqu xmm3,XMMWORD[((96-32))+r9] ++ vpxor xmm6,xmm6,xmm7 ++ vpunpckhqdq xmm7,xmm2,xmm2 ++ vpclmulqdq xmm1,xmm1,xmm0,0x11 ++ vpxor xmm7,xmm7,xmm2 ++ vpxor xmm1,xmm1,xmm9 ++ vpclmulqdq xmm4,xmm4,xmm15,0x10 ++ vmovdqu xmm15,XMMWORD[((128-32))+r9] ++ vpxor xmm4,xmm4,xmm5 ++ ++ vpxor xmm8,xmm8,XMMWORD[112+rsp] ++ vpclmulqdq xmm5,xmm2,xmm3,0x00 ++ vmovdqu xmm0,XMMWORD[((112-32))+r9] ++ vpunpckhqdq xmm9,xmm8,xmm8 ++ vpxor xmm5,xmm5,xmm6 ++ vpclmulqdq xmm2,xmm2,xmm3,0x11 ++ vpxor xmm9,xmm9,xmm8 ++ vpxor xmm2,xmm2,xmm1 ++ vpclmulqdq xmm7,xmm7,xmm15,0x00 ++ vpxor xmm4,xmm7,xmm4 ++ ++ vpclmulqdq xmm6,xmm8,xmm0,0x00 ++ vmovdqu xmm3,XMMWORD[((0-32))+r9] ++ vpunpckhqdq xmm1,xmm14,xmm14 ++ vpclmulqdq xmm8,xmm8,xmm0,0x11 ++ vpxor xmm1,xmm1,xmm14 ++ vpxor xmm5,xmm6,xmm5 ++ vpclmulqdq xmm9,xmm9,xmm15,0x10 ++ vmovdqu xmm15,XMMWORD[((32-32))+r9] ++ vpxor xmm7,xmm8,xmm2 ++ vpxor xmm6,xmm9,xmm4 ++ ++ vmovdqu xmm0,XMMWORD[((16-32))+r9] ++ vpxor xmm9,xmm7,xmm5 ++ vpclmulqdq xmm4,xmm14,xmm3,0x00 ++ vpxor xmm6,xmm6,xmm9 ++ vpunpckhqdq xmm2,xmm13,xmm13 ++ vpclmulqdq xmm14,xmm14,xmm3,0x11 ++ vpxor xmm2,xmm2,xmm13 ++ vpslldq xmm9,xmm6,8 ++ vpclmulqdq xmm1,xmm1,xmm15,0x00 ++ vpxor xmm8,xmm5,xmm9 ++ vpsrldq xmm6,xmm6,8 ++ vpxor xmm7,xmm7,xmm6 ++ ++ vpclmulqdq xmm5,xmm13,xmm0,0x00 ++ vmovdqu xmm3,XMMWORD[((48-32))+r9] ++ vpxor xmm5,xmm5,xmm4 ++ vpunpckhqdq xmm9,xmm12,xmm12 ++ vpclmulqdq xmm13,xmm13,xmm0,0x11 ++ vpxor xmm9,xmm9,xmm12 ++ vpxor xmm13,xmm13,xmm14 ++ vpalignr xmm14,xmm8,xmm8,8 ++ vpclmulqdq xmm2,xmm2,xmm15,0x10 ++ vmovdqu xmm15,XMMWORD[((80-32))+r9] ++ vpxor xmm2,xmm2,xmm1 ++ ++ vpclmulqdq xmm4,xmm12,xmm3,0x00 ++ vmovdqu xmm0,XMMWORD[((64-32))+r9] ++ vpxor xmm4,xmm4,xmm5 ++ vpunpckhqdq xmm1,xmm11,xmm11 ++ vpclmulqdq xmm12,xmm12,xmm3,0x11 ++ vpxor xmm1,xmm1,xmm11 ++ vpxor xmm12,xmm12,xmm13 ++ vxorps xmm7,xmm7,XMMWORD[16+rsp] ++ vpclmulqdq xmm9,xmm9,xmm15,0x00 ++ vpxor xmm9,xmm9,xmm2 ++ ++ vpclmulqdq xmm8,xmm8,XMMWORD[16+r11],0x10 ++ vxorps xmm8,xmm8,xmm14 ++ ++ vpclmulqdq xmm5,xmm11,xmm0,0x00 ++ vmovdqu xmm3,XMMWORD[((96-32))+r9] ++ vpxor xmm5,xmm5,xmm4 ++ vpunpckhqdq xmm2,xmm10,xmm10 ++ vpclmulqdq xmm11,xmm11,xmm0,0x11 ++ vpxor xmm2,xmm2,xmm10 ++ vpalignr xmm14,xmm8,xmm8,8 ++ vpxor xmm11,xmm11,xmm12 ++ vpclmulqdq xmm1,xmm1,xmm15,0x10 ++ vmovdqu xmm15,XMMWORD[((128-32))+r9] ++ vpxor xmm1,xmm1,xmm9 ++ ++ vxorps xmm14,xmm14,xmm7 ++ vpclmulqdq xmm8,xmm8,XMMWORD[16+r11],0x10 ++ vxorps xmm8,xmm8,xmm14 ++ ++ vpclmulqdq xmm4,xmm10,xmm3,0x00 ++ vmovdqu xmm0,XMMWORD[((112-32))+r9] ++ vpxor xmm4,xmm4,xmm5 ++ vpunpckhqdq xmm9,xmm8,xmm8 ++ vpclmulqdq xmm10,xmm10,xmm3,0x11 ++ vpxor xmm9,xmm9,xmm8 ++ vpxor xmm10,xmm10,xmm11 ++ vpclmulqdq xmm2,xmm2,xmm15,0x00 ++ vpxor xmm2,xmm2,xmm1 ++ ++ vpclmulqdq xmm5,xmm8,xmm0,0x00 ++ vpclmulqdq xmm7,xmm8,xmm0,0x11 ++ vpxor xmm5,xmm5,xmm4 ++ vpclmulqdq xmm6,xmm9,xmm15,0x10 ++ vpxor xmm7,xmm7,xmm10 ++ vpxor xmm6,xmm6,xmm2 ++ ++ vpxor xmm4,xmm7,xmm5 ++ vpxor xmm6,xmm6,xmm4 ++ vpslldq xmm1,xmm6,8 ++ vmovdqu xmm3,XMMWORD[16+r11] ++ vpsrldq xmm6,xmm6,8 ++ vpxor xmm8,xmm5,xmm1 ++ vpxor xmm7,xmm7,xmm6 ++ ++ vpalignr xmm2,xmm8,xmm8,8 ++ vpclmulqdq xmm8,xmm8,xmm3,0x10 ++ vpxor xmm8,xmm8,xmm2 ++ ++ vpalignr xmm2,xmm8,xmm8,8 ++ vpclmulqdq xmm8,xmm8,xmm3,0x10 ++ vpxor xmm2,xmm2,xmm7 ++ vpxor xmm8,xmm8,xmm2 ++ vpshufb xmm8,xmm8,XMMWORD[r11] ++ vmovdqu XMMWORD[(-64)+r9],xmm8 ++ ++ vzeroupper ++ movaps xmm6,XMMWORD[((-216))+rax] ++ movaps xmm7,XMMWORD[((-200))+rax] ++ movaps xmm8,XMMWORD[((-184))+rax] ++ movaps xmm9,XMMWORD[((-168))+rax] ++ movaps xmm10,XMMWORD[((-152))+rax] ++ movaps xmm11,XMMWORD[((-136))+rax] ++ movaps xmm12,XMMWORD[((-120))+rax] ++ movaps xmm13,XMMWORD[((-104))+rax] ++ movaps xmm14,XMMWORD[((-88))+rax] ++ movaps xmm15,XMMWORD[((-72))+rax] ++ mov r15,QWORD[((-48))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ lea rsp,[rax] ++$L$gcm_enc_abort: ++ mov rax,r10 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_gcm_encrypt: ++ALIGN 64 ++$L$bswap_mask: ++DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 ++$L$poly: ++DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 ++$L$one_msb: ++DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ++$L$two_lsb: ++DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ++$L$one_lsb: ++DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ++DB 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108 ++DB 101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82 ++DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 ++DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 ++ALIGN 64 ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++gcm_se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[120+r8] ++ ++ mov r15,QWORD[((-48))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ mov QWORD[240+r8],r15 ++ mov QWORD[232+r8],r14 ++ mov QWORD[224+r8],r13 ++ mov QWORD[216+r8],r12 ++ mov QWORD[160+r8],rbp ++ mov QWORD[144+r8],rbx ++ ++ lea rsi,[((-216))+rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ ++$L$common_seh_tail: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_aesni_gcm_decrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_gcm_decrypt wrt ..imagebase ++ DD $L$SEH_gcm_dec_info wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_gcm_encrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_gcm_encrypt wrt ..imagebase ++ DD $L$SEH_gcm_enc_info wrt ..imagebase ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_gcm_dec_info: ++DB 9,0,0,0 ++ DD gcm_se_handler wrt ..imagebase ++ DD $L$gcm_dec_body wrt ..imagebase,$L$gcm_dec_abort wrt ..imagebase ++$L$SEH_gcm_enc_info: ++DB 9,0,0,0 ++ DD gcm_se_handler wrt ..imagebase ++ DD $L$gcm_enc_body wrt ..imagebase,$L$gcm_enc_abort wrt ..imagebase +diff --git a/SMP/lib/accelerated/x86/coff/aesni-x86.asm b/SMP/lib/accelerated/x86/coff/aesni-x86.asm +new file mode 100644 +index 0000000..1b64723 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/aesni-x86.asm +@@ -0,0 +1,3204 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++;extern __gnutls_x86_cpuid_s ++global _aesni_encrypt ++align 16 ++_aesni_encrypt: ++L$_aesni_encrypt_begin: ++ mov eax,DWORD [4+esp] ++ mov edx,DWORD [12+esp] ++ movups xmm2,[eax] ++ mov ecx,DWORD [240+edx] ++ mov eax,DWORD [8+esp] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$000enc1_loop_1: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$000enc1_loop_1 ++db 102,15,56,221,209 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movups [eax],xmm2 ++ pxor xmm2,xmm2 ++ ret ++global _aesni_decrypt ++align 16 ++_aesni_decrypt: ++L$_aesni_decrypt_begin: ++ mov eax,DWORD [4+esp] ++ mov edx,DWORD [12+esp] ++ movups xmm2,[eax] ++ mov ecx,DWORD [240+edx] ++ mov eax,DWORD [8+esp] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$001dec1_loop_2: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$001dec1_loop_2 ++db 102,15,56,223,209 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movups [eax],xmm2 ++ pxor xmm2,xmm2 ++ ret ++align 16 ++__aesni_encrypt2: ++ movups xmm0,[edx] ++ shl ecx,4 ++ movups xmm1,[16+edx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ movups xmm0,[32+edx] ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++ add ecx,16 ++L$002enc2_loop: ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,220,208 ++db 102,15,56,220,216 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$002enc2_loop ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,221,208 ++db 102,15,56,221,216 ++ ret ++align 16 ++__aesni_decrypt2: ++ movups xmm0,[edx] ++ shl ecx,4 ++ movups xmm1,[16+edx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ movups xmm0,[32+edx] ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++ add ecx,16 ++L$003dec2_loop: ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,222,208 ++db 102,15,56,222,216 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$003dec2_loop ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,223,208 ++db 102,15,56,223,216 ++ ret ++align 16 ++__aesni_encrypt3: ++ movups xmm0,[edx] ++ shl ecx,4 ++ movups xmm1,[16+edx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++ movups xmm0,[32+edx] ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++ add ecx,16 ++L$004enc3_loop: ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,220,208 ++db 102,15,56,220,216 ++db 102,15,56,220,224 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$004enc3_loop ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++db 102,15,56,221,208 ++db 102,15,56,221,216 ++db 102,15,56,221,224 ++ ret ++align 16 ++__aesni_decrypt3: ++ movups xmm0,[edx] ++ shl ecx,4 ++ movups xmm1,[16+edx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++ movups xmm0,[32+edx] ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++ add ecx,16 ++L$005dec3_loop: ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,222,208 ++db 102,15,56,222,216 ++db 102,15,56,222,224 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$005dec3_loop ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++db 102,15,56,223,208 ++db 102,15,56,223,216 ++db 102,15,56,223,224 ++ ret ++align 16 ++__aesni_encrypt4: ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ shl ecx,4 ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++ movups xmm0,[32+edx] ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++db 15,31,64,0 ++ add ecx,16 ++L$006enc4_loop: ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,220,208 ++db 102,15,56,220,216 ++db 102,15,56,220,224 ++db 102,15,56,220,232 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$006enc4_loop ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++db 102,15,56,221,208 ++db 102,15,56,221,216 ++db 102,15,56,221,224 ++db 102,15,56,221,232 ++ ret ++align 16 ++__aesni_decrypt4: ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ shl ecx,4 ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++ movups xmm0,[32+edx] ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++db 15,31,64,0 ++ add ecx,16 ++L$007dec4_loop: ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++db 102,15,56,222,233 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,222,208 ++db 102,15,56,222,216 ++db 102,15,56,222,224 ++db 102,15,56,222,232 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$007dec4_loop ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++db 102,15,56,222,233 ++db 102,15,56,223,208 ++db 102,15,56,223,216 ++db 102,15,56,223,224 ++db 102,15,56,223,232 ++ ret ++align 16 ++__aesni_encrypt6: ++ movups xmm0,[edx] ++ shl ecx,4 ++ movups xmm1,[16+edx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++db 102,15,56,220,209 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++db 102,15,56,220,217 ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++db 102,15,56,220,225 ++ pxor xmm7,xmm0 ++ movups xmm0,[ecx*1+edx] ++ add ecx,16 ++ jmp NEAR L$008_aesni_encrypt6_inner ++align 16 ++L$009enc6_loop: ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++L$008_aesni_encrypt6_inner: ++db 102,15,56,220,233 ++db 102,15,56,220,241 ++db 102,15,56,220,249 ++L$_aesni_encrypt6_enter: ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,220,208 ++db 102,15,56,220,216 ++db 102,15,56,220,224 ++db 102,15,56,220,232 ++db 102,15,56,220,240 ++db 102,15,56,220,248 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$009enc6_loop ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++db 102,15,56,220,241 ++db 102,15,56,220,249 ++db 102,15,56,221,208 ++db 102,15,56,221,216 ++db 102,15,56,221,224 ++db 102,15,56,221,232 ++db 102,15,56,221,240 ++db 102,15,56,221,248 ++ ret ++align 16 ++__aesni_decrypt6: ++ movups xmm0,[edx] ++ shl ecx,4 ++ movups xmm1,[16+edx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++db 102,15,56,222,209 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++db 102,15,56,222,217 ++ lea edx,[32+ecx*1+edx] ++ neg ecx ++db 102,15,56,222,225 ++ pxor xmm7,xmm0 ++ movups xmm0,[ecx*1+edx] ++ add ecx,16 ++ jmp NEAR L$010_aesni_decrypt6_inner ++align 16 ++L$011dec6_loop: ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++L$010_aesni_decrypt6_inner: ++db 102,15,56,222,233 ++db 102,15,56,222,241 ++db 102,15,56,222,249 ++L$_aesni_decrypt6_enter: ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,222,208 ++db 102,15,56,222,216 ++db 102,15,56,222,224 ++db 102,15,56,222,232 ++db 102,15,56,222,240 ++db 102,15,56,222,248 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$011dec6_loop ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++db 102,15,56,222,233 ++db 102,15,56,222,241 ++db 102,15,56,222,249 ++db 102,15,56,223,208 ++db 102,15,56,223,216 ++db 102,15,56,223,224 ++db 102,15,56,223,232 ++db 102,15,56,223,240 ++db 102,15,56,223,248 ++ ret ++global _aesni_ecb_encrypt ++align 16 ++_aesni_ecb_encrypt: ++L$_aesni_ecb_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ mov ebx,DWORD [36+esp] ++ and eax,-16 ++ jz NEAR L$012ecb_ret ++ mov ecx,DWORD [240+edx] ++ test ebx,ebx ++ jz NEAR L$013ecb_decrypt ++ mov ebp,edx ++ mov ebx,ecx ++ cmp eax,96 ++ jb NEAR L$014ecb_enc_tail ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ movdqu xmm7,[80+esi] ++ lea esi,[96+esi] ++ sub eax,96 ++ jmp NEAR L$015ecb_enc_loop6_enter ++align 16 ++L$016ecb_enc_loop6: ++ movups [edi],xmm2 ++ movdqu xmm2,[esi] ++ movups [16+edi],xmm3 ++ movdqu xmm3,[16+esi] ++ movups [32+edi],xmm4 ++ movdqu xmm4,[32+esi] ++ movups [48+edi],xmm5 ++ movdqu xmm5,[48+esi] ++ movups [64+edi],xmm6 ++ movdqu xmm6,[64+esi] ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ movdqu xmm7,[80+esi] ++ lea esi,[96+esi] ++L$015ecb_enc_loop6_enter: ++ call __aesni_encrypt6 ++ mov edx,ebp ++ mov ecx,ebx ++ sub eax,96 ++ jnc NEAR L$016ecb_enc_loop6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ add eax,96 ++ jz NEAR L$012ecb_ret ++L$014ecb_enc_tail: ++ movups xmm2,[esi] ++ cmp eax,32 ++ jb NEAR L$017ecb_enc_one ++ movups xmm3,[16+esi] ++ je NEAR L$018ecb_enc_two ++ movups xmm4,[32+esi] ++ cmp eax,64 ++ jb NEAR L$019ecb_enc_three ++ movups xmm5,[48+esi] ++ je NEAR L$020ecb_enc_four ++ movups xmm6,[64+esi] ++ xorps xmm7,xmm7 ++ call __aesni_encrypt6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$017ecb_enc_one: ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$021enc1_loop_3: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$021enc1_loop_3 ++db 102,15,56,221,209 ++ movups [edi],xmm2 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$018ecb_enc_two: ++ call __aesni_encrypt2 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$019ecb_enc_three: ++ call __aesni_encrypt3 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$020ecb_enc_four: ++ call __aesni_encrypt4 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$013ecb_decrypt: ++ mov ebp,edx ++ mov ebx,ecx ++ cmp eax,96 ++ jb NEAR L$022ecb_dec_tail ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ movdqu xmm7,[80+esi] ++ lea esi,[96+esi] ++ sub eax,96 ++ jmp NEAR L$023ecb_dec_loop6_enter ++align 16 ++L$024ecb_dec_loop6: ++ movups [edi],xmm2 ++ movdqu xmm2,[esi] ++ movups [16+edi],xmm3 ++ movdqu xmm3,[16+esi] ++ movups [32+edi],xmm4 ++ movdqu xmm4,[32+esi] ++ movups [48+edi],xmm5 ++ movdqu xmm5,[48+esi] ++ movups [64+edi],xmm6 ++ movdqu xmm6,[64+esi] ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ movdqu xmm7,[80+esi] ++ lea esi,[96+esi] ++L$023ecb_dec_loop6_enter: ++ call __aesni_decrypt6 ++ mov edx,ebp ++ mov ecx,ebx ++ sub eax,96 ++ jnc NEAR L$024ecb_dec_loop6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ add eax,96 ++ jz NEAR L$012ecb_ret ++L$022ecb_dec_tail: ++ movups xmm2,[esi] ++ cmp eax,32 ++ jb NEAR L$025ecb_dec_one ++ movups xmm3,[16+esi] ++ je NEAR L$026ecb_dec_two ++ movups xmm4,[32+esi] ++ cmp eax,64 ++ jb NEAR L$027ecb_dec_three ++ movups xmm5,[48+esi] ++ je NEAR L$028ecb_dec_four ++ movups xmm6,[64+esi] ++ xorps xmm7,xmm7 ++ call __aesni_decrypt6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$025ecb_dec_one: ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$029dec1_loop_4: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$029dec1_loop_4 ++db 102,15,56,223,209 ++ movups [edi],xmm2 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$026ecb_dec_two: ++ call __aesni_decrypt2 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$027ecb_dec_three: ++ call __aesni_decrypt3 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ jmp NEAR L$012ecb_ret ++align 16 ++L$028ecb_dec_four: ++ call __aesni_decrypt4 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++L$012ecb_ret: ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_ccm64_encrypt_blocks ++align 16 ++_aesni_ccm64_encrypt_blocks: ++L$_aesni_ccm64_encrypt_blocks_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ mov ebx,DWORD [36+esp] ++ mov ecx,DWORD [40+esp] ++ mov ebp,esp ++ sub esp,60 ++ and esp,-16 ++ mov DWORD [48+esp],ebp ++ movdqu xmm7,[ebx] ++ movdqu xmm3,[ecx] ++ mov ecx,DWORD [240+edx] ++ mov DWORD [esp],202182159 ++ mov DWORD [4+esp],134810123 ++ mov DWORD [8+esp],67438087 ++ mov DWORD [12+esp],66051 ++ mov ebx,1 ++ xor ebp,ebp ++ mov DWORD [16+esp],ebx ++ mov DWORD [20+esp],ebp ++ mov DWORD [24+esp],ebp ++ mov DWORD [28+esp],ebp ++ shl ecx,4 ++ mov ebx,16 ++ lea ebp,[edx] ++ movdqa xmm5,[esp] ++ movdqa xmm2,xmm7 ++ lea edx,[32+ecx*1+edx] ++ sub ebx,ecx ++db 102,15,56,0,253 ++L$030ccm64_enc_outer: ++ movups xmm0,[ebp] ++ mov ecx,ebx ++ movups xmm6,[esi] ++ xorps xmm2,xmm0 ++ movups xmm1,[16+ebp] ++ xorps xmm0,xmm6 ++ xorps xmm3,xmm0 ++ movups xmm0,[32+ebp] ++L$031ccm64_enc2_loop: ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,220,208 ++db 102,15,56,220,216 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$031ccm64_enc2_loop ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++ paddq xmm7,[16+esp] ++ dec eax ++db 102,15,56,221,208 ++db 102,15,56,221,216 ++ lea esi,[16+esi] ++ xorps xmm6,xmm2 ++ movdqa xmm2,xmm7 ++ movups [edi],xmm6 ++db 102,15,56,0,213 ++ lea edi,[16+edi] ++ jnz NEAR L$030ccm64_enc_outer ++ mov esp,DWORD [48+esp] ++ mov edi,DWORD [40+esp] ++ movups [edi],xmm3 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_ccm64_decrypt_blocks ++align 16 ++_aesni_ccm64_decrypt_blocks: ++L$_aesni_ccm64_decrypt_blocks_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ mov ebx,DWORD [36+esp] ++ mov ecx,DWORD [40+esp] ++ mov ebp,esp ++ sub esp,60 ++ and esp,-16 ++ mov DWORD [48+esp],ebp ++ movdqu xmm7,[ebx] ++ movdqu xmm3,[ecx] ++ mov ecx,DWORD [240+edx] ++ mov DWORD [esp],202182159 ++ mov DWORD [4+esp],134810123 ++ mov DWORD [8+esp],67438087 ++ mov DWORD [12+esp],66051 ++ mov ebx,1 ++ xor ebp,ebp ++ mov DWORD [16+esp],ebx ++ mov DWORD [20+esp],ebp ++ mov DWORD [24+esp],ebp ++ mov DWORD [28+esp],ebp ++ movdqa xmm5,[esp] ++ movdqa xmm2,xmm7 ++ mov ebp,edx ++ mov ebx,ecx ++db 102,15,56,0,253 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$032enc1_loop_5: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$032enc1_loop_5 ++db 102,15,56,221,209 ++ shl ebx,4 ++ mov ecx,16 ++ movups xmm6,[esi] ++ paddq xmm7,[16+esp] ++ lea esi,[16+esi] ++ sub ecx,ebx ++ lea edx,[32+ebx*1+ebp] ++ mov ebx,ecx ++ jmp NEAR L$033ccm64_dec_outer ++align 16 ++L$033ccm64_dec_outer: ++ xorps xmm6,xmm2 ++ movdqa xmm2,xmm7 ++ movups [edi],xmm6 ++ lea edi,[16+edi] ++db 102,15,56,0,213 ++ sub eax,1 ++ jz NEAR L$034ccm64_dec_break ++ movups xmm0,[ebp] ++ mov ecx,ebx ++ movups xmm1,[16+ebp] ++ xorps xmm6,xmm0 ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm6 ++ movups xmm0,[32+ebp] ++L$035ccm64_dec2_loop: ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++ movups xmm1,[ecx*1+edx] ++ add ecx,32 ++db 102,15,56,220,208 ++db 102,15,56,220,216 ++ movups xmm0,[ecx*1+edx-16] ++ jnz NEAR L$035ccm64_dec2_loop ++ movups xmm6,[esi] ++ paddq xmm7,[16+esp] ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,221,208 ++db 102,15,56,221,216 ++ lea esi,[16+esi] ++ jmp NEAR L$033ccm64_dec_outer ++align 16 ++L$034ccm64_dec_break: ++ mov ecx,DWORD [240+ebp] ++ mov edx,ebp ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ xorps xmm6,xmm0 ++ lea edx,[32+edx] ++ xorps xmm3,xmm6 ++L$036enc1_loop_6: ++db 102,15,56,220,217 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$036enc1_loop_6 ++db 102,15,56,221,217 ++ mov esp,DWORD [48+esp] ++ mov edi,DWORD [40+esp] ++ movups [edi],xmm3 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_ctr32_encrypt_blocks ++align 16 ++_aesni_ctr32_encrypt_blocks: ++L$_aesni_ctr32_encrypt_blocks_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ mov ebx,DWORD [36+esp] ++ mov ebp,esp ++ sub esp,88 ++ and esp,-16 ++ mov DWORD [80+esp],ebp ++ cmp eax,1 ++ je NEAR L$037ctr32_one_shortcut ++ movdqu xmm7,[ebx] ++ mov DWORD [esp],202182159 ++ mov DWORD [4+esp],134810123 ++ mov DWORD [8+esp],67438087 ++ mov DWORD [12+esp],66051 ++ mov ecx,6 ++ xor ebp,ebp ++ mov DWORD [16+esp],ecx ++ mov DWORD [20+esp],ecx ++ mov DWORD [24+esp],ecx ++ mov DWORD [28+esp],ebp ++db 102,15,58,22,251,3 ++db 102,15,58,34,253,3 ++ mov ecx,DWORD [240+edx] ++ bswap ebx ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movdqa xmm2,[esp] ++db 102,15,58,34,195,0 ++ lea ebp,[3+ebx] ++db 102,15,58,34,205,0 ++ inc ebx ++db 102,15,58,34,195,1 ++ inc ebp ++db 102,15,58,34,205,1 ++ inc ebx ++db 102,15,58,34,195,2 ++ inc ebp ++db 102,15,58,34,205,2 ++ movdqa [48+esp],xmm0 ++db 102,15,56,0,194 ++ movdqu xmm6,[edx] ++ movdqa [64+esp],xmm1 ++db 102,15,56,0,202 ++ pshufd xmm2,xmm0,192 ++ pshufd xmm3,xmm0,128 ++ cmp eax,6 ++ jb NEAR L$038ctr32_tail ++ pxor xmm7,xmm6 ++ shl ecx,4 ++ mov ebx,16 ++ movdqa [32+esp],xmm7 ++ mov ebp,edx ++ sub ebx,ecx ++ lea edx,[32+ecx*1+edx] ++ sub eax,6 ++ jmp NEAR L$039ctr32_loop6 ++align 16 ++L$039ctr32_loop6: ++ pshufd xmm4,xmm0,64 ++ movdqa xmm0,[32+esp] ++ pshufd xmm5,xmm1,192 ++ pxor xmm2,xmm0 ++ pshufd xmm6,xmm1,128 ++ pxor xmm3,xmm0 ++ pshufd xmm7,xmm1,64 ++ movups xmm1,[16+ebp] ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++db 102,15,56,220,209 ++ pxor xmm6,xmm0 ++ pxor xmm7,xmm0 ++db 102,15,56,220,217 ++ movups xmm0,[32+ebp] ++ mov ecx,ebx ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++db 102,15,56,220,241 ++db 102,15,56,220,249 ++ call L$_aesni_encrypt6_enter ++ movups xmm1,[esi] ++ movups xmm0,[16+esi] ++ xorps xmm2,xmm1 ++ movups xmm1,[32+esi] ++ xorps xmm3,xmm0 ++ movups [edi],xmm2 ++ movdqa xmm0,[16+esp] ++ xorps xmm4,xmm1 ++ movdqa xmm1,[64+esp] ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ paddd xmm1,xmm0 ++ paddd xmm0,[48+esp] ++ movdqa xmm2,[esp] ++ movups xmm3,[48+esi] ++ movups xmm4,[64+esi] ++ xorps xmm5,xmm3 ++ movups xmm3,[80+esi] ++ lea esi,[96+esi] ++ movdqa [48+esp],xmm0 ++db 102,15,56,0,194 ++ xorps xmm6,xmm4 ++ movups [48+edi],xmm5 ++ xorps xmm7,xmm3 ++ movdqa [64+esp],xmm1 ++db 102,15,56,0,202 ++ movups [64+edi],xmm6 ++ pshufd xmm2,xmm0,192 ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ pshufd xmm3,xmm0,128 ++ sub eax,6 ++ jnc NEAR L$039ctr32_loop6 ++ add eax,6 ++ jz NEAR L$040ctr32_ret ++ movdqu xmm7,[ebp] ++ mov edx,ebp ++ pxor xmm7,[32+esp] ++ mov ecx,DWORD [240+ebp] ++L$038ctr32_tail: ++ por xmm2,xmm7 ++ cmp eax,2 ++ jb NEAR L$041ctr32_one ++ pshufd xmm4,xmm0,64 ++ por xmm3,xmm7 ++ je NEAR L$042ctr32_two ++ pshufd xmm5,xmm1,192 ++ por xmm4,xmm7 ++ cmp eax,4 ++ jb NEAR L$043ctr32_three ++ pshufd xmm6,xmm1,128 ++ por xmm5,xmm7 ++ je NEAR L$044ctr32_four ++ por xmm6,xmm7 ++ call __aesni_encrypt6 ++ movups xmm1,[esi] ++ movups xmm0,[16+esi] ++ xorps xmm2,xmm1 ++ movups xmm1,[32+esi] ++ xorps xmm3,xmm0 ++ movups xmm0,[48+esi] ++ xorps xmm4,xmm1 ++ movups xmm1,[64+esi] ++ xorps xmm5,xmm0 ++ movups [edi],xmm2 ++ xorps xmm6,xmm1 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ jmp NEAR L$040ctr32_ret ++align 16 ++L$037ctr32_one_shortcut: ++ movups xmm2,[ebx] ++ mov ecx,DWORD [240+edx] ++L$041ctr32_one: ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$045enc1_loop_7: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$045enc1_loop_7 ++db 102,15,56,221,209 ++ movups xmm6,[esi] ++ xorps xmm6,xmm2 ++ movups [edi],xmm6 ++ jmp NEAR L$040ctr32_ret ++align 16 ++L$042ctr32_two: ++ call __aesni_encrypt2 ++ movups xmm5,[esi] ++ movups xmm6,[16+esi] ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ jmp NEAR L$040ctr32_ret ++align 16 ++L$043ctr32_three: ++ call __aesni_encrypt3 ++ movups xmm5,[esi] ++ movups xmm6,[16+esi] ++ xorps xmm2,xmm5 ++ movups xmm7,[32+esi] ++ xorps xmm3,xmm6 ++ movups [edi],xmm2 ++ xorps xmm4,xmm7 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ jmp NEAR L$040ctr32_ret ++align 16 ++L$044ctr32_four: ++ call __aesni_encrypt4 ++ movups xmm6,[esi] ++ movups xmm7,[16+esi] ++ movups xmm1,[32+esi] ++ xorps xmm2,xmm6 ++ movups xmm0,[48+esi] ++ xorps xmm3,xmm7 ++ movups [edi],xmm2 ++ xorps xmm4,xmm1 ++ movups [16+edi],xmm3 ++ xorps xmm5,xmm0 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++L$040ctr32_ret: ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ movdqa [32+esp],xmm0 ++ pxor xmm5,xmm5 ++ movdqa [48+esp],xmm0 ++ pxor xmm6,xmm6 ++ movdqa [64+esp],xmm0 ++ pxor xmm7,xmm7 ++ mov esp,DWORD [80+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_xts_encrypt ++align 16 ++_aesni_xts_encrypt: ++L$_aesni_xts_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edx,DWORD [36+esp] ++ mov esi,DWORD [40+esp] ++ mov ecx,DWORD [240+edx] ++ movups xmm2,[esi] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$046enc1_loop_8: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$046enc1_loop_8 ++db 102,15,56,221,209 ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ mov ebp,esp ++ sub esp,120 ++ mov ecx,DWORD [240+edx] ++ and esp,-16 ++ mov DWORD [96+esp],135 ++ mov DWORD [100+esp],0 ++ mov DWORD [104+esp],1 ++ mov DWORD [108+esp],0 ++ mov DWORD [112+esp],eax ++ mov DWORD [116+esp],ebp ++ movdqa xmm1,xmm2 ++ pxor xmm0,xmm0 ++ movdqa xmm3,[96+esp] ++ pcmpgtd xmm0,xmm1 ++ and eax,-16 ++ mov ebp,edx ++ mov ebx,ecx ++ sub eax,96 ++ jc NEAR L$047xts_enc_short ++ shl ecx,4 ++ mov ebx,16 ++ sub ebx,ecx ++ lea edx,[32+ecx*1+edx] ++ jmp NEAR L$048xts_enc_loop6 ++align 16 ++L$048xts_enc_loop6: ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [16+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [32+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [48+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm7,xmm0,19 ++ movdqa [64+esp],xmm1 ++ paddq xmm1,xmm1 ++ movups xmm0,[ebp] ++ pand xmm7,xmm3 ++ movups xmm2,[esi] ++ pxor xmm7,xmm1 ++ mov ecx,ebx ++ movdqu xmm3,[16+esi] ++ xorps xmm2,xmm0 ++ movdqu xmm4,[32+esi] ++ pxor xmm3,xmm0 ++ movdqu xmm5,[48+esi] ++ pxor xmm4,xmm0 ++ movdqu xmm6,[64+esi] ++ pxor xmm5,xmm0 ++ movdqu xmm1,[80+esi] ++ pxor xmm6,xmm0 ++ lea esi,[96+esi] ++ pxor xmm2,[esp] ++ movdqa [80+esp],xmm7 ++ pxor xmm7,xmm1 ++ movups xmm1,[16+ebp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++db 102,15,56,220,209 ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++db 102,15,56,220,217 ++ pxor xmm7,xmm0 ++ movups xmm0,[32+ebp] ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++db 102,15,56,220,241 ++db 102,15,56,220,249 ++ call L$_aesni_encrypt6_enter ++ movdqa xmm1,[80+esp] ++ pxor xmm0,xmm0 ++ xorps xmm2,[esp] ++ pcmpgtd xmm0,xmm1 ++ xorps xmm3,[16+esp] ++ movups [edi],xmm2 ++ xorps xmm4,[32+esp] ++ movups [16+edi],xmm3 ++ xorps xmm5,[48+esp] ++ movups [32+edi],xmm4 ++ xorps xmm6,[64+esp] ++ movups [48+edi],xmm5 ++ xorps xmm7,xmm1 ++ movups [64+edi],xmm6 ++ pshufd xmm2,xmm0,19 ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ movdqa xmm3,[96+esp] ++ pxor xmm0,xmm0 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ sub eax,96 ++ jnc NEAR L$048xts_enc_loop6 ++ mov ecx,DWORD [240+ebp] ++ mov edx,ebp ++ mov ebx,ecx ++L$047xts_enc_short: ++ add eax,96 ++ jz NEAR L$049xts_enc_done6x ++ movdqa xmm5,xmm1 ++ cmp eax,32 ++ jb NEAR L$050xts_enc_one ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ je NEAR L$051xts_enc_two ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa xmm6,xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ cmp eax,64 ++ jb NEAR L$052xts_enc_three ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa xmm7,xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ movdqa [esp],xmm5 ++ movdqa [16+esp],xmm6 ++ je NEAR L$053xts_enc_four ++ movdqa [32+esp],xmm7 ++ pshufd xmm7,xmm0,19 ++ movdqa [48+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm7,xmm3 ++ pxor xmm7,xmm1 ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ pxor xmm2,[esp] ++ movdqu xmm5,[48+esi] ++ pxor xmm3,[16+esp] ++ movdqu xmm6,[64+esi] ++ pxor xmm4,[32+esp] ++ lea esi,[80+esi] ++ pxor xmm5,[48+esp] ++ movdqa [64+esp],xmm7 ++ pxor xmm6,xmm7 ++ call __aesni_encrypt6 ++ movaps xmm1,[64+esp] ++ xorps xmm2,[esp] ++ xorps xmm3,[16+esp] ++ xorps xmm4,[32+esp] ++ movups [edi],xmm2 ++ xorps xmm5,[48+esp] ++ movups [16+edi],xmm3 ++ xorps xmm6,xmm1 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ lea edi,[80+edi] ++ jmp NEAR L$054xts_enc_done ++align 16 ++L$050xts_enc_one: ++ movups xmm2,[esi] ++ lea esi,[16+esi] ++ xorps xmm2,xmm5 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$055enc1_loop_9: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$055enc1_loop_9 ++db 102,15,56,221,209 ++ xorps xmm2,xmm5 ++ movups [edi],xmm2 ++ lea edi,[16+edi] ++ movdqa xmm1,xmm5 ++ jmp NEAR L$054xts_enc_done ++align 16 ++L$051xts_enc_two: ++ movaps xmm6,xmm1 ++ movups xmm2,[esi] ++ movups xmm3,[16+esi] ++ lea esi,[32+esi] ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ call __aesni_encrypt2 ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ lea edi,[32+edi] ++ movdqa xmm1,xmm6 ++ jmp NEAR L$054xts_enc_done ++align 16 ++L$052xts_enc_three: ++ movaps xmm7,xmm1 ++ movups xmm2,[esi] ++ movups xmm3,[16+esi] ++ movups xmm4,[32+esi] ++ lea esi,[48+esi] ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm7 ++ call __aesni_encrypt3 ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm7 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ lea edi,[48+edi] ++ movdqa xmm1,xmm7 ++ jmp NEAR L$054xts_enc_done ++align 16 ++L$053xts_enc_four: ++ movaps xmm6,xmm1 ++ movups xmm2,[esi] ++ movups xmm3,[16+esi] ++ movups xmm4,[32+esi] ++ xorps xmm2,[esp] ++ movups xmm5,[48+esi] ++ lea esi,[64+esi] ++ xorps xmm3,[16+esp] ++ xorps xmm4,xmm7 ++ xorps xmm5,xmm6 ++ call __aesni_encrypt4 ++ xorps xmm2,[esp] ++ xorps xmm3,[16+esp] ++ xorps xmm4,xmm7 ++ movups [edi],xmm2 ++ xorps xmm5,xmm6 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ lea edi,[64+edi] ++ movdqa xmm1,xmm6 ++ jmp NEAR L$054xts_enc_done ++align 16 ++L$049xts_enc_done6x: ++ mov eax,DWORD [112+esp] ++ and eax,15 ++ jz NEAR L$056xts_enc_ret ++ movdqa xmm5,xmm1 ++ mov DWORD [112+esp],eax ++ jmp NEAR L$057xts_enc_steal ++align 16 ++L$054xts_enc_done: ++ mov eax,DWORD [112+esp] ++ pxor xmm0,xmm0 ++ and eax,15 ++ jz NEAR L$056xts_enc_ret ++ pcmpgtd xmm0,xmm1 ++ mov DWORD [112+esp],eax ++ pshufd xmm5,xmm0,19 ++ paddq xmm1,xmm1 ++ pand xmm5,[96+esp] ++ pxor xmm5,xmm1 ++L$057xts_enc_steal: ++ movzx ecx,BYTE [esi] ++ movzx edx,BYTE [edi-16] ++ lea esi,[1+esi] ++ mov BYTE [edi-16],cl ++ mov BYTE [edi],dl ++ lea edi,[1+edi] ++ sub eax,1 ++ jnz NEAR L$057xts_enc_steal ++ sub edi,DWORD [112+esp] ++ mov edx,ebp ++ mov ecx,ebx ++ movups xmm2,[edi-16] ++ xorps xmm2,xmm5 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$058enc1_loop_10: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$058enc1_loop_10 ++db 102,15,56,221,209 ++ xorps xmm2,xmm5 ++ movups [edi-16],xmm2 ++L$056xts_enc_ret: ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ movdqa [esp],xmm0 ++ pxor xmm3,xmm3 ++ movdqa [16+esp],xmm0 ++ pxor xmm4,xmm4 ++ movdqa [32+esp],xmm0 ++ pxor xmm5,xmm5 ++ movdqa [48+esp],xmm0 ++ pxor xmm6,xmm6 ++ movdqa [64+esp],xmm0 ++ pxor xmm7,xmm7 ++ movdqa [80+esp],xmm0 ++ mov esp,DWORD [116+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_xts_decrypt ++align 16 ++_aesni_xts_decrypt: ++L$_aesni_xts_decrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edx,DWORD [36+esp] ++ mov esi,DWORD [40+esp] ++ mov ecx,DWORD [240+edx] ++ movups xmm2,[esi] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$059enc1_loop_11: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$059enc1_loop_11 ++db 102,15,56,221,209 ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ mov ebp,esp ++ sub esp,120 ++ and esp,-16 ++ xor ebx,ebx ++ test eax,15 ++ setnz bl ++ shl ebx,4 ++ sub eax,ebx ++ mov DWORD [96+esp],135 ++ mov DWORD [100+esp],0 ++ mov DWORD [104+esp],1 ++ mov DWORD [108+esp],0 ++ mov DWORD [112+esp],eax ++ mov DWORD [116+esp],ebp ++ mov ecx,DWORD [240+edx] ++ mov ebp,edx ++ mov ebx,ecx ++ movdqa xmm1,xmm2 ++ pxor xmm0,xmm0 ++ movdqa xmm3,[96+esp] ++ pcmpgtd xmm0,xmm1 ++ and eax,-16 ++ sub eax,96 ++ jc NEAR L$060xts_dec_short ++ shl ecx,4 ++ mov ebx,16 ++ sub ebx,ecx ++ lea edx,[32+ecx*1+edx] ++ jmp NEAR L$061xts_dec_loop6 ++align 16 ++L$061xts_dec_loop6: ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [16+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [32+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa [48+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ pshufd xmm7,xmm0,19 ++ movdqa [64+esp],xmm1 ++ paddq xmm1,xmm1 ++ movups xmm0,[ebp] ++ pand xmm7,xmm3 ++ movups xmm2,[esi] ++ pxor xmm7,xmm1 ++ mov ecx,ebx ++ movdqu xmm3,[16+esi] ++ xorps xmm2,xmm0 ++ movdqu xmm4,[32+esi] ++ pxor xmm3,xmm0 ++ movdqu xmm5,[48+esi] ++ pxor xmm4,xmm0 ++ movdqu xmm6,[64+esi] ++ pxor xmm5,xmm0 ++ movdqu xmm1,[80+esi] ++ pxor xmm6,xmm0 ++ lea esi,[96+esi] ++ pxor xmm2,[esp] ++ movdqa [80+esp],xmm7 ++ pxor xmm7,xmm1 ++ movups xmm1,[16+ebp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++db 102,15,56,222,209 ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++db 102,15,56,222,217 ++ pxor xmm7,xmm0 ++ movups xmm0,[32+ebp] ++db 102,15,56,222,225 ++db 102,15,56,222,233 ++db 102,15,56,222,241 ++db 102,15,56,222,249 ++ call L$_aesni_decrypt6_enter ++ movdqa xmm1,[80+esp] ++ pxor xmm0,xmm0 ++ xorps xmm2,[esp] ++ pcmpgtd xmm0,xmm1 ++ xorps xmm3,[16+esp] ++ movups [edi],xmm2 ++ xorps xmm4,[32+esp] ++ movups [16+edi],xmm3 ++ xorps xmm5,[48+esp] ++ movups [32+edi],xmm4 ++ xorps xmm6,[64+esp] ++ movups [48+edi],xmm5 ++ xorps xmm7,xmm1 ++ movups [64+edi],xmm6 ++ pshufd xmm2,xmm0,19 ++ movups [80+edi],xmm7 ++ lea edi,[96+edi] ++ movdqa xmm3,[96+esp] ++ pxor xmm0,xmm0 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ sub eax,96 ++ jnc NEAR L$061xts_dec_loop6 ++ mov ecx,DWORD [240+ebp] ++ mov edx,ebp ++ mov ebx,ecx ++L$060xts_dec_short: ++ add eax,96 ++ jz NEAR L$062xts_dec_done6x ++ movdqa xmm5,xmm1 ++ cmp eax,32 ++ jb NEAR L$063xts_dec_one ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ je NEAR L$064xts_dec_two ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa xmm6,xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ cmp eax,64 ++ jb NEAR L$065xts_dec_three ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa xmm7,xmm1 ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++ movdqa [esp],xmm5 ++ movdqa [16+esp],xmm6 ++ je NEAR L$066xts_dec_four ++ movdqa [32+esp],xmm7 ++ pshufd xmm7,xmm0,19 ++ movdqa [48+esp],xmm1 ++ paddq xmm1,xmm1 ++ pand xmm7,xmm3 ++ pxor xmm7,xmm1 ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ pxor xmm2,[esp] ++ movdqu xmm5,[48+esi] ++ pxor xmm3,[16+esp] ++ movdqu xmm6,[64+esi] ++ pxor xmm4,[32+esp] ++ lea esi,[80+esi] ++ pxor xmm5,[48+esp] ++ movdqa [64+esp],xmm7 ++ pxor xmm6,xmm7 ++ call __aesni_decrypt6 ++ movaps xmm1,[64+esp] ++ xorps xmm2,[esp] ++ xorps xmm3,[16+esp] ++ xorps xmm4,[32+esp] ++ movups [edi],xmm2 ++ xorps xmm5,[48+esp] ++ movups [16+edi],xmm3 ++ xorps xmm6,xmm1 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ movups [64+edi],xmm6 ++ lea edi,[80+edi] ++ jmp NEAR L$067xts_dec_done ++align 16 ++L$063xts_dec_one: ++ movups xmm2,[esi] ++ lea esi,[16+esi] ++ xorps xmm2,xmm5 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$068dec1_loop_12: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$068dec1_loop_12 ++db 102,15,56,223,209 ++ xorps xmm2,xmm5 ++ movups [edi],xmm2 ++ lea edi,[16+edi] ++ movdqa xmm1,xmm5 ++ jmp NEAR L$067xts_dec_done ++align 16 ++L$064xts_dec_two: ++ movaps xmm6,xmm1 ++ movups xmm2,[esi] ++ movups xmm3,[16+esi] ++ lea esi,[32+esi] ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ call __aesni_decrypt2 ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ lea edi,[32+edi] ++ movdqa xmm1,xmm6 ++ jmp NEAR L$067xts_dec_done ++align 16 ++L$065xts_dec_three: ++ movaps xmm7,xmm1 ++ movups xmm2,[esi] ++ movups xmm3,[16+esi] ++ movups xmm4,[32+esi] ++ lea esi,[48+esi] ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm7 ++ call __aesni_decrypt3 ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm7 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ lea edi,[48+edi] ++ movdqa xmm1,xmm7 ++ jmp NEAR L$067xts_dec_done ++align 16 ++L$066xts_dec_four: ++ movaps xmm6,xmm1 ++ movups xmm2,[esi] ++ movups xmm3,[16+esi] ++ movups xmm4,[32+esi] ++ xorps xmm2,[esp] ++ movups xmm5,[48+esi] ++ lea esi,[64+esi] ++ xorps xmm3,[16+esp] ++ xorps xmm4,xmm7 ++ xorps xmm5,xmm6 ++ call __aesni_decrypt4 ++ xorps xmm2,[esp] ++ xorps xmm3,[16+esp] ++ xorps xmm4,xmm7 ++ movups [edi],xmm2 ++ xorps xmm5,xmm6 ++ movups [16+edi],xmm3 ++ movups [32+edi],xmm4 ++ movups [48+edi],xmm5 ++ lea edi,[64+edi] ++ movdqa xmm1,xmm6 ++ jmp NEAR L$067xts_dec_done ++align 16 ++L$062xts_dec_done6x: ++ mov eax,DWORD [112+esp] ++ and eax,15 ++ jz NEAR L$069xts_dec_ret ++ mov DWORD [112+esp],eax ++ jmp NEAR L$070xts_dec_only_one_more ++align 16 ++L$067xts_dec_done: ++ mov eax,DWORD [112+esp] ++ pxor xmm0,xmm0 ++ and eax,15 ++ jz NEAR L$069xts_dec_ret ++ pcmpgtd xmm0,xmm1 ++ mov DWORD [112+esp],eax ++ pshufd xmm2,xmm0,19 ++ pxor xmm0,xmm0 ++ movdqa xmm3,[96+esp] ++ paddq xmm1,xmm1 ++ pand xmm2,xmm3 ++ pcmpgtd xmm0,xmm1 ++ pxor xmm1,xmm2 ++L$070xts_dec_only_one_more: ++ pshufd xmm5,xmm0,19 ++ movdqa xmm6,xmm1 ++ paddq xmm1,xmm1 ++ pand xmm5,xmm3 ++ pxor xmm5,xmm1 ++ mov edx,ebp ++ mov ecx,ebx ++ movups xmm2,[esi] ++ xorps xmm2,xmm5 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$071dec1_loop_13: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$071dec1_loop_13 ++db 102,15,56,223,209 ++ xorps xmm2,xmm5 ++ movups [edi],xmm2 ++L$072xts_dec_steal: ++ movzx ecx,BYTE [16+esi] ++ movzx edx,BYTE [edi] ++ lea esi,[1+esi] ++ mov BYTE [edi],cl ++ mov BYTE [16+edi],dl ++ lea edi,[1+edi] ++ sub eax,1 ++ jnz NEAR L$072xts_dec_steal ++ sub edi,DWORD [112+esp] ++ mov edx,ebp ++ mov ecx,ebx ++ movups xmm2,[edi] ++ xorps xmm2,xmm6 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$073dec1_loop_14: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$073dec1_loop_14 ++db 102,15,56,223,209 ++ xorps xmm2,xmm6 ++ movups [edi],xmm2 ++L$069xts_dec_ret: ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ movdqa [esp],xmm0 ++ pxor xmm3,xmm3 ++ movdqa [16+esp],xmm0 ++ pxor xmm4,xmm4 ++ movdqa [32+esp],xmm0 ++ pxor xmm5,xmm5 ++ movdqa [48+esp],xmm0 ++ pxor xmm6,xmm6 ++ movdqa [64+esp],xmm0 ++ pxor xmm7,xmm7 ++ movdqa [80+esp],xmm0 ++ mov esp,DWORD [116+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_ocb_encrypt ++align 16 ++_aesni_ocb_encrypt: ++L$_aesni_ocb_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov ecx,DWORD [40+esp] ++ mov ebx,DWORD [48+esp] ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ movdqu xmm0,[ecx] ++ mov ebp,DWORD [36+esp] ++ movdqu xmm1,[ebx] ++ mov ebx,DWORD [44+esp] ++ mov ecx,esp ++ sub esp,132 ++ and esp,-16 ++ sub edi,esi ++ shl eax,4 ++ lea eax,[eax*1+esi-96] ++ mov DWORD [120+esp],edi ++ mov DWORD [124+esp],eax ++ mov DWORD [128+esp],ecx ++ mov ecx,DWORD [240+edx] ++ test ebp,1 ++ jnz NEAR L$074odd ++ bsf eax,ebp ++ add ebp,1 ++ shl eax,4 ++ movdqu xmm7,[eax*1+ebx] ++ mov eax,edx ++ movdqu xmm2,[esi] ++ lea esi,[16+esi] ++ pxor xmm7,xmm0 ++ pxor xmm1,xmm2 ++ pxor xmm2,xmm7 ++ movdqa xmm6,xmm1 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$075enc1_loop_15: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$075enc1_loop_15 ++db 102,15,56,221,209 ++ xorps xmm2,xmm7 ++ movdqa xmm0,xmm7 ++ movdqa xmm1,xmm6 ++ movups [esi*1+edi-16],xmm2 ++ mov ecx,DWORD [240+eax] ++ mov edx,eax ++ mov eax,DWORD [124+esp] ++L$074odd: ++ shl ecx,4 ++ mov edi,16 ++ sub edi,ecx ++ mov DWORD [112+esp],edx ++ lea edx,[32+ecx*1+edx] ++ mov DWORD [116+esp],edi ++ cmp esi,eax ++ ja NEAR L$076short ++ jmp NEAR L$077grandloop ++align 32 ++L$077grandloop: ++ lea ecx,[1+ebp] ++ lea eax,[3+ebp] ++ lea edi,[5+ebp] ++ add ebp,6 ++ bsf ecx,ecx ++ bsf eax,eax ++ bsf edi,edi ++ shl ecx,4 ++ shl eax,4 ++ shl edi,4 ++ movdqu xmm2,[ebx] ++ movdqu xmm3,[ecx*1+ebx] ++ mov ecx,DWORD [116+esp] ++ movdqa xmm4,xmm2 ++ movdqu xmm5,[eax*1+ebx] ++ movdqa xmm6,xmm2 ++ movdqu xmm7,[edi*1+ebx] ++ pxor xmm2,xmm0 ++ pxor xmm3,xmm2 ++ movdqa [esp],xmm2 ++ pxor xmm4,xmm3 ++ movdqa [16+esp],xmm3 ++ pxor xmm5,xmm4 ++ movdqa [32+esp],xmm4 ++ pxor xmm6,xmm5 ++ movdqa [48+esp],xmm5 ++ pxor xmm7,xmm6 ++ movdqa [64+esp],xmm6 ++ movdqa [80+esp],xmm7 ++ movups xmm0,[ecx*1+edx-48] ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ movdqu xmm7,[80+esi] ++ lea esi,[96+esi] ++ pxor xmm1,xmm2 ++ pxor xmm2,xmm0 ++ pxor xmm1,xmm3 ++ pxor xmm3,xmm0 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ pxor xmm1,xmm5 ++ pxor xmm5,xmm0 ++ pxor xmm1,xmm6 ++ pxor xmm6,xmm0 ++ pxor xmm1,xmm7 ++ pxor xmm7,xmm0 ++ movdqa [96+esp],xmm1 ++ movups xmm1,[ecx*1+edx-32] ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++ pxor xmm7,[80+esp] ++ movups xmm0,[ecx*1+edx-16] ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++db 102,15,56,220,241 ++db 102,15,56,220,249 ++ mov edi,DWORD [120+esp] ++ mov eax,DWORD [124+esp] ++ call L$_aesni_encrypt6_enter ++ movdqa xmm0,[80+esp] ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++ pxor xmm7,xmm0 ++ movdqa xmm1,[96+esp] ++ movdqu [esi*1+edi-96],xmm2 ++ movdqu [esi*1+edi-80],xmm3 ++ movdqu [esi*1+edi-64],xmm4 ++ movdqu [esi*1+edi-48],xmm5 ++ movdqu [esi*1+edi-32],xmm6 ++ movdqu [esi*1+edi-16],xmm7 ++ cmp esi,eax ++ jb NEAR L$077grandloop ++L$076short: ++ add eax,96 ++ sub eax,esi ++ jz NEAR L$078done ++ cmp eax,32 ++ jb NEAR L$079one ++ je NEAR L$080two ++ cmp eax,64 ++ jb NEAR L$081three ++ je NEAR L$082four ++ lea ecx,[1+ebp] ++ lea eax,[3+ebp] ++ bsf ecx,ecx ++ bsf eax,eax ++ shl ecx,4 ++ shl eax,4 ++ movdqu xmm2,[ebx] ++ movdqu xmm3,[ecx*1+ebx] ++ mov ecx,DWORD [116+esp] ++ movdqa xmm4,xmm2 ++ movdqu xmm5,[eax*1+ebx] ++ movdqa xmm6,xmm2 ++ pxor xmm2,xmm0 ++ pxor xmm3,xmm2 ++ movdqa [esp],xmm2 ++ pxor xmm4,xmm3 ++ movdqa [16+esp],xmm3 ++ pxor xmm5,xmm4 ++ movdqa [32+esp],xmm4 ++ pxor xmm6,xmm5 ++ movdqa [48+esp],xmm5 ++ pxor xmm7,xmm6 ++ movdqa [64+esp],xmm6 ++ movups xmm0,[ecx*1+edx-48] ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ pxor xmm7,xmm7 ++ pxor xmm1,xmm2 ++ pxor xmm2,xmm0 ++ pxor xmm1,xmm3 ++ pxor xmm3,xmm0 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ pxor xmm1,xmm5 ++ pxor xmm5,xmm0 ++ pxor xmm1,xmm6 ++ pxor xmm6,xmm0 ++ movdqa [96+esp],xmm1 ++ movups xmm1,[ecx*1+edx-32] ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++ movups xmm0,[ecx*1+edx-16] ++db 102,15,56,220,209 ++db 102,15,56,220,217 ++db 102,15,56,220,225 ++db 102,15,56,220,233 ++db 102,15,56,220,241 ++db 102,15,56,220,249 ++ mov edi,DWORD [120+esp] ++ call L$_aesni_encrypt6_enter ++ movdqa xmm0,[64+esp] ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,xmm0 ++ movdqa xmm1,[96+esp] ++ movdqu [esi*1+edi],xmm2 ++ movdqu [16+esi*1+edi],xmm3 ++ movdqu [32+esi*1+edi],xmm4 ++ movdqu [48+esi*1+edi],xmm5 ++ movdqu [64+esi*1+edi],xmm6 ++ jmp NEAR L$078done ++align 16 ++L$079one: ++ movdqu xmm7,[ebx] ++ mov edx,DWORD [112+esp] ++ movdqu xmm2,[esi] ++ mov ecx,DWORD [240+edx] ++ pxor xmm7,xmm0 ++ pxor xmm1,xmm2 ++ pxor xmm2,xmm7 ++ movdqa xmm6,xmm1 ++ mov edi,DWORD [120+esp] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$083enc1_loop_16: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$083enc1_loop_16 ++db 102,15,56,221,209 ++ xorps xmm2,xmm7 ++ movdqa xmm0,xmm7 ++ movdqa xmm1,xmm6 ++ movups [esi*1+edi],xmm2 ++ jmp NEAR L$078done ++align 16 ++L$080two: ++ lea ecx,[1+ebp] ++ mov edx,DWORD [112+esp] ++ bsf ecx,ecx ++ shl ecx,4 ++ movdqu xmm6,[ebx] ++ movdqu xmm7,[ecx*1+ebx] ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ mov ecx,DWORD [240+edx] ++ pxor xmm6,xmm0 ++ pxor xmm7,xmm6 ++ pxor xmm1,xmm2 ++ pxor xmm2,xmm6 ++ pxor xmm1,xmm3 ++ pxor xmm3,xmm7 ++ movdqa xmm5,xmm1 ++ mov edi,DWORD [120+esp] ++ call __aesni_encrypt2 ++ xorps xmm2,xmm6 ++ xorps xmm3,xmm7 ++ movdqa xmm0,xmm7 ++ movdqa xmm1,xmm5 ++ movups [esi*1+edi],xmm2 ++ movups [16+esi*1+edi],xmm3 ++ jmp NEAR L$078done ++align 16 ++L$081three: ++ lea ecx,[1+ebp] ++ mov edx,DWORD [112+esp] ++ bsf ecx,ecx ++ shl ecx,4 ++ movdqu xmm5,[ebx] ++ movdqu xmm6,[ecx*1+ebx] ++ movdqa xmm7,xmm5 ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ mov ecx,DWORD [240+edx] ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm5 ++ pxor xmm7,xmm6 ++ pxor xmm1,xmm2 ++ pxor xmm2,xmm5 ++ pxor xmm1,xmm3 ++ pxor xmm3,xmm6 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm7 ++ movdqa [96+esp],xmm1 ++ mov edi,DWORD [120+esp] ++ call __aesni_encrypt3 ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm7 ++ movdqa xmm0,xmm7 ++ movdqa xmm1,[96+esp] ++ movups [esi*1+edi],xmm2 ++ movups [16+esi*1+edi],xmm3 ++ movups [32+esi*1+edi],xmm4 ++ jmp NEAR L$078done ++align 16 ++L$082four: ++ lea ecx,[1+ebp] ++ lea eax,[3+ebp] ++ bsf ecx,ecx ++ bsf eax,eax ++ mov edx,DWORD [112+esp] ++ shl ecx,4 ++ shl eax,4 ++ movdqu xmm4,[ebx] ++ movdqu xmm5,[ecx*1+ebx] ++ movdqa xmm6,xmm4 ++ movdqu xmm7,[eax*1+ebx] ++ pxor xmm4,xmm0 ++ movdqu xmm2,[esi] ++ pxor xmm5,xmm4 ++ movdqu xmm3,[16+esi] ++ pxor xmm6,xmm5 ++ movdqa [esp],xmm4 ++ pxor xmm7,xmm6 ++ movdqa [16+esp],xmm5 ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ mov ecx,DWORD [240+edx] ++ pxor xmm1,xmm2 ++ pxor xmm2,[esp] ++ pxor xmm1,xmm3 ++ pxor xmm3,[16+esp] ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm6 ++ pxor xmm1,xmm5 ++ pxor xmm5,xmm7 ++ movdqa [96+esp],xmm1 ++ mov edi,DWORD [120+esp] ++ call __aesni_encrypt4 ++ xorps xmm2,[esp] ++ xorps xmm3,[16+esp] ++ xorps xmm4,xmm6 ++ movups [esi*1+edi],xmm2 ++ xorps xmm5,xmm7 ++ movups [16+esi*1+edi],xmm3 ++ movdqa xmm0,xmm7 ++ movups [32+esi*1+edi],xmm4 ++ movdqa xmm1,[96+esp] ++ movups [48+esi*1+edi],xmm5 ++L$078done: ++ mov edx,DWORD [128+esp] ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ movdqa [esp],xmm2 ++ pxor xmm4,xmm4 ++ movdqa [16+esp],xmm2 ++ pxor xmm5,xmm5 ++ movdqa [32+esp],xmm2 ++ pxor xmm6,xmm6 ++ movdqa [48+esp],xmm2 ++ pxor xmm7,xmm7 ++ movdqa [64+esp],xmm2 ++ movdqa [80+esp],xmm2 ++ movdqa [96+esp],xmm2 ++ lea esp,[edx] ++ mov ecx,DWORD [40+esp] ++ mov ebx,DWORD [48+esp] ++ movdqu [ecx],xmm0 ++ pxor xmm0,xmm0 ++ movdqu [ebx],xmm1 ++ pxor xmm1,xmm1 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_ocb_decrypt ++align 16 ++_aesni_ocb_decrypt: ++L$_aesni_ocb_decrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov ecx,DWORD [40+esp] ++ mov ebx,DWORD [48+esp] ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov edx,DWORD [32+esp] ++ movdqu xmm0,[ecx] ++ mov ebp,DWORD [36+esp] ++ movdqu xmm1,[ebx] ++ mov ebx,DWORD [44+esp] ++ mov ecx,esp ++ sub esp,132 ++ and esp,-16 ++ sub edi,esi ++ shl eax,4 ++ lea eax,[eax*1+esi-96] ++ mov DWORD [120+esp],edi ++ mov DWORD [124+esp],eax ++ mov DWORD [128+esp],ecx ++ mov ecx,DWORD [240+edx] ++ test ebp,1 ++ jnz NEAR L$084odd ++ bsf eax,ebp ++ add ebp,1 ++ shl eax,4 ++ movdqu xmm7,[eax*1+ebx] ++ mov eax,edx ++ movdqu xmm2,[esi] ++ lea esi,[16+esi] ++ pxor xmm7,xmm0 ++ pxor xmm2,xmm7 ++ movdqa xmm6,xmm1 ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$085dec1_loop_17: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$085dec1_loop_17 ++db 102,15,56,223,209 ++ xorps xmm2,xmm7 ++ movaps xmm1,xmm6 ++ movdqa xmm0,xmm7 ++ xorps xmm1,xmm2 ++ movups [esi*1+edi-16],xmm2 ++ mov ecx,DWORD [240+eax] ++ mov edx,eax ++ mov eax,DWORD [124+esp] ++L$084odd: ++ shl ecx,4 ++ mov edi,16 ++ sub edi,ecx ++ mov DWORD [112+esp],edx ++ lea edx,[32+ecx*1+edx] ++ mov DWORD [116+esp],edi ++ cmp esi,eax ++ ja NEAR L$086short ++ jmp NEAR L$087grandloop ++align 32 ++L$087grandloop: ++ lea ecx,[1+ebp] ++ lea eax,[3+ebp] ++ lea edi,[5+ebp] ++ add ebp,6 ++ bsf ecx,ecx ++ bsf eax,eax ++ bsf edi,edi ++ shl ecx,4 ++ shl eax,4 ++ shl edi,4 ++ movdqu xmm2,[ebx] ++ movdqu xmm3,[ecx*1+ebx] ++ mov ecx,DWORD [116+esp] ++ movdqa xmm4,xmm2 ++ movdqu xmm5,[eax*1+ebx] ++ movdqa xmm6,xmm2 ++ movdqu xmm7,[edi*1+ebx] ++ pxor xmm2,xmm0 ++ pxor xmm3,xmm2 ++ movdqa [esp],xmm2 ++ pxor xmm4,xmm3 ++ movdqa [16+esp],xmm3 ++ pxor xmm5,xmm4 ++ movdqa [32+esp],xmm4 ++ pxor xmm6,xmm5 ++ movdqa [48+esp],xmm5 ++ pxor xmm7,xmm6 ++ movdqa [64+esp],xmm6 ++ movdqa [80+esp],xmm7 ++ movups xmm0,[ecx*1+edx-48] ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ movdqu xmm7,[80+esi] ++ lea esi,[96+esi] ++ movdqa [96+esp],xmm1 ++ pxor xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++ pxor xmm7,xmm0 ++ movups xmm1,[ecx*1+edx-32] ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++ pxor xmm7,[80+esp] ++ movups xmm0,[ecx*1+edx-16] ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++db 102,15,56,222,233 ++db 102,15,56,222,241 ++db 102,15,56,222,249 ++ mov edi,DWORD [120+esp] ++ mov eax,DWORD [124+esp] ++ call L$_aesni_decrypt6_enter ++ movdqa xmm0,[80+esp] ++ pxor xmm2,[esp] ++ movdqa xmm1,[96+esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++ pxor xmm7,xmm0 ++ pxor xmm1,xmm2 ++ movdqu [esi*1+edi-96],xmm2 ++ pxor xmm1,xmm3 ++ movdqu [esi*1+edi-80],xmm3 ++ pxor xmm1,xmm4 ++ movdqu [esi*1+edi-64],xmm4 ++ pxor xmm1,xmm5 ++ movdqu [esi*1+edi-48],xmm5 ++ pxor xmm1,xmm6 ++ movdqu [esi*1+edi-32],xmm6 ++ pxor xmm1,xmm7 ++ movdqu [esi*1+edi-16],xmm7 ++ cmp esi,eax ++ jb NEAR L$087grandloop ++L$086short: ++ add eax,96 ++ sub eax,esi ++ jz NEAR L$088done ++ cmp eax,32 ++ jb NEAR L$089one ++ je NEAR L$090two ++ cmp eax,64 ++ jb NEAR L$091three ++ je NEAR L$092four ++ lea ecx,[1+ebp] ++ lea eax,[3+ebp] ++ bsf ecx,ecx ++ bsf eax,eax ++ shl ecx,4 ++ shl eax,4 ++ movdqu xmm2,[ebx] ++ movdqu xmm3,[ecx*1+ebx] ++ mov ecx,DWORD [116+esp] ++ movdqa xmm4,xmm2 ++ movdqu xmm5,[eax*1+ebx] ++ movdqa xmm6,xmm2 ++ pxor xmm2,xmm0 ++ pxor xmm3,xmm2 ++ movdqa [esp],xmm2 ++ pxor xmm4,xmm3 ++ movdqa [16+esp],xmm3 ++ pxor xmm5,xmm4 ++ movdqa [32+esp],xmm4 ++ pxor xmm6,xmm5 ++ movdqa [48+esp],xmm5 ++ pxor xmm7,xmm6 ++ movdqa [64+esp],xmm6 ++ movups xmm0,[ecx*1+edx-48] ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ pxor xmm7,xmm7 ++ movdqa [96+esp],xmm1 ++ pxor xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++ movups xmm1,[ecx*1+edx-32] ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,[64+esp] ++ movups xmm0,[ecx*1+edx-16] ++db 102,15,56,222,209 ++db 102,15,56,222,217 ++db 102,15,56,222,225 ++db 102,15,56,222,233 ++db 102,15,56,222,241 ++db 102,15,56,222,249 ++ mov edi,DWORD [120+esp] ++ call L$_aesni_decrypt6_enter ++ movdqa xmm0,[64+esp] ++ pxor xmm2,[esp] ++ movdqa xmm1,[96+esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,[32+esp] ++ pxor xmm5,[48+esp] ++ pxor xmm6,xmm0 ++ pxor xmm1,xmm2 ++ movdqu [esi*1+edi],xmm2 ++ pxor xmm1,xmm3 ++ movdqu [16+esi*1+edi],xmm3 ++ pxor xmm1,xmm4 ++ movdqu [32+esi*1+edi],xmm4 ++ pxor xmm1,xmm5 ++ movdqu [48+esi*1+edi],xmm5 ++ pxor xmm1,xmm6 ++ movdqu [64+esi*1+edi],xmm6 ++ jmp NEAR L$088done ++align 16 ++L$089one: ++ movdqu xmm7,[ebx] ++ mov edx,DWORD [112+esp] ++ movdqu xmm2,[esi] ++ mov ecx,DWORD [240+edx] ++ pxor xmm7,xmm0 ++ pxor xmm2,xmm7 ++ movdqa xmm6,xmm1 ++ mov edi,DWORD [120+esp] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$093dec1_loop_18: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$093dec1_loop_18 ++db 102,15,56,223,209 ++ xorps xmm2,xmm7 ++ movaps xmm1,xmm6 ++ movdqa xmm0,xmm7 ++ xorps xmm1,xmm2 ++ movups [esi*1+edi],xmm2 ++ jmp NEAR L$088done ++align 16 ++L$090two: ++ lea ecx,[1+ebp] ++ mov edx,DWORD [112+esp] ++ bsf ecx,ecx ++ shl ecx,4 ++ movdqu xmm6,[ebx] ++ movdqu xmm7,[ecx*1+ebx] ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ mov ecx,DWORD [240+edx] ++ movdqa xmm5,xmm1 ++ pxor xmm6,xmm0 ++ pxor xmm7,xmm6 ++ pxor xmm2,xmm6 ++ pxor xmm3,xmm7 ++ mov edi,DWORD [120+esp] ++ call __aesni_decrypt2 ++ xorps xmm2,xmm6 ++ xorps xmm3,xmm7 ++ movdqa xmm0,xmm7 ++ xorps xmm5,xmm2 ++ movups [esi*1+edi],xmm2 ++ xorps xmm5,xmm3 ++ movups [16+esi*1+edi],xmm3 ++ movaps xmm1,xmm5 ++ jmp NEAR L$088done ++align 16 ++L$091three: ++ lea ecx,[1+ebp] ++ mov edx,DWORD [112+esp] ++ bsf ecx,ecx ++ shl ecx,4 ++ movdqu xmm5,[ebx] ++ movdqu xmm6,[ecx*1+ebx] ++ movdqa xmm7,xmm5 ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ mov ecx,DWORD [240+edx] ++ movdqa [96+esp],xmm1 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm5 ++ pxor xmm7,xmm6 ++ pxor xmm2,xmm5 ++ pxor xmm3,xmm6 ++ pxor xmm4,xmm7 ++ mov edi,DWORD [120+esp] ++ call __aesni_decrypt3 ++ movdqa xmm1,[96+esp] ++ xorps xmm2,xmm5 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm7 ++ movups [esi*1+edi],xmm2 ++ pxor xmm1,xmm2 ++ movdqa xmm0,xmm7 ++ movups [16+esi*1+edi],xmm3 ++ pxor xmm1,xmm3 ++ movups [32+esi*1+edi],xmm4 ++ pxor xmm1,xmm4 ++ jmp NEAR L$088done ++align 16 ++L$092four: ++ lea ecx,[1+ebp] ++ lea eax,[3+ebp] ++ bsf ecx,ecx ++ bsf eax,eax ++ mov edx,DWORD [112+esp] ++ shl ecx,4 ++ shl eax,4 ++ movdqu xmm4,[ebx] ++ movdqu xmm5,[ecx*1+ebx] ++ movdqa xmm6,xmm4 ++ movdqu xmm7,[eax*1+ebx] ++ pxor xmm4,xmm0 ++ movdqu xmm2,[esi] ++ pxor xmm5,xmm4 ++ movdqu xmm3,[16+esi] ++ pxor xmm6,xmm5 ++ movdqa [esp],xmm4 ++ pxor xmm7,xmm6 ++ movdqa [16+esp],xmm5 ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ mov ecx,DWORD [240+edx] ++ movdqa [96+esp],xmm1 ++ pxor xmm2,[esp] ++ pxor xmm3,[16+esp] ++ pxor xmm4,xmm6 ++ pxor xmm5,xmm7 ++ mov edi,DWORD [120+esp] ++ call __aesni_decrypt4 ++ movdqa xmm1,[96+esp] ++ xorps xmm2,[esp] ++ xorps xmm3,[16+esp] ++ xorps xmm4,xmm6 ++ movups [esi*1+edi],xmm2 ++ pxor xmm1,xmm2 ++ xorps xmm5,xmm7 ++ movups [16+esi*1+edi],xmm3 ++ pxor xmm1,xmm3 ++ movdqa xmm0,xmm7 ++ movups [32+esi*1+edi],xmm4 ++ pxor xmm1,xmm4 ++ movups [48+esi*1+edi],xmm5 ++ pxor xmm1,xmm5 ++L$088done: ++ mov edx,DWORD [128+esp] ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ movdqa [esp],xmm2 ++ pxor xmm4,xmm4 ++ movdqa [16+esp],xmm2 ++ pxor xmm5,xmm5 ++ movdqa [32+esp],xmm2 ++ pxor xmm6,xmm6 ++ movdqa [48+esp],xmm2 ++ pxor xmm7,xmm7 ++ movdqa [64+esp],xmm2 ++ movdqa [80+esp],xmm2 ++ movdqa [96+esp],xmm2 ++ lea esp,[edx] ++ mov ecx,DWORD [40+esp] ++ mov ebx,DWORD [48+esp] ++ movdqu [ecx],xmm0 ++ pxor xmm0,xmm0 ++ movdqu [ebx],xmm1 ++ pxor xmm1,xmm1 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _aesni_cbc_encrypt ++align 16 ++_aesni_cbc_encrypt: ++L$_aesni_cbc_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov ebx,esp ++ mov edi,DWORD [24+esp] ++ sub ebx,24 ++ mov eax,DWORD [28+esp] ++ and ebx,-16 ++ mov edx,DWORD [32+esp] ++ mov ebp,DWORD [36+esp] ++ test eax,eax ++ jz NEAR L$094cbc_abort ++ cmp DWORD [40+esp],0 ++ xchg ebx,esp ++ movups xmm7,[ebp] ++ mov ecx,DWORD [240+edx] ++ mov ebp,edx ++ mov DWORD [16+esp],ebx ++ mov ebx,ecx ++ je NEAR L$095cbc_decrypt ++ movaps xmm2,xmm7 ++ cmp eax,16 ++ jb NEAR L$096cbc_enc_tail ++ sub eax,16 ++ jmp NEAR L$097cbc_enc_loop ++align 16 ++L$097cbc_enc_loop: ++ movups xmm7,[esi] ++ lea esi,[16+esi] ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ xorps xmm7,xmm0 ++ lea edx,[32+edx] ++ xorps xmm2,xmm7 ++L$098enc1_loop_19: ++db 102,15,56,220,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$098enc1_loop_19 ++db 102,15,56,221,209 ++ mov ecx,ebx ++ mov edx,ebp ++ movups [edi],xmm2 ++ lea edi,[16+edi] ++ sub eax,16 ++ jnc NEAR L$097cbc_enc_loop ++ add eax,16 ++ jnz NEAR L$096cbc_enc_tail ++ movaps xmm7,xmm2 ++ pxor xmm2,xmm2 ++ jmp NEAR L$099cbc_ret ++L$096cbc_enc_tail: ++ mov ecx,eax ++dd 2767451785 ++ mov ecx,16 ++ sub ecx,eax ++ xor eax,eax ++dd 2868115081 ++ lea edi,[edi-16] ++ mov ecx,ebx ++ mov esi,edi ++ mov edx,ebp ++ jmp NEAR L$097cbc_enc_loop ++align 16 ++L$095cbc_decrypt: ++ cmp eax,80 ++ jbe NEAR L$100cbc_dec_tail ++ movaps [esp],xmm7 ++ sub eax,80 ++ jmp NEAR L$101cbc_dec_loop6_enter ++align 16 ++L$102cbc_dec_loop6: ++ movaps [esp],xmm0 ++ movups [edi],xmm7 ++ lea edi,[16+edi] ++L$101cbc_dec_loop6_enter: ++ movdqu xmm2,[esi] ++ movdqu xmm3,[16+esi] ++ movdqu xmm4,[32+esi] ++ movdqu xmm5,[48+esi] ++ movdqu xmm6,[64+esi] ++ movdqu xmm7,[80+esi] ++ call __aesni_decrypt6 ++ movups xmm1,[esi] ++ movups xmm0,[16+esi] ++ xorps xmm2,[esp] ++ xorps xmm3,xmm1 ++ movups xmm1,[32+esi] ++ xorps xmm4,xmm0 ++ movups xmm0,[48+esi] ++ xorps xmm5,xmm1 ++ movups xmm1,[64+esi] ++ xorps xmm6,xmm0 ++ movups xmm0,[80+esi] ++ xorps xmm7,xmm1 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ lea esi,[96+esi] ++ movups [32+edi],xmm4 ++ mov ecx,ebx ++ movups [48+edi],xmm5 ++ mov edx,ebp ++ movups [64+edi],xmm6 ++ lea edi,[80+edi] ++ sub eax,96 ++ ja NEAR L$102cbc_dec_loop6 ++ movaps xmm2,xmm7 ++ movaps xmm7,xmm0 ++ add eax,80 ++ jle NEAR L$103cbc_dec_clear_tail_collected ++ movups [edi],xmm2 ++ lea edi,[16+edi] ++L$100cbc_dec_tail: ++ movups xmm2,[esi] ++ movaps xmm6,xmm2 ++ cmp eax,16 ++ jbe NEAR L$104cbc_dec_one ++ movups xmm3,[16+esi] ++ movaps xmm5,xmm3 ++ cmp eax,32 ++ jbe NEAR L$105cbc_dec_two ++ movups xmm4,[32+esi] ++ cmp eax,48 ++ jbe NEAR L$106cbc_dec_three ++ movups xmm5,[48+esi] ++ cmp eax,64 ++ jbe NEAR L$107cbc_dec_four ++ movups xmm6,[64+esi] ++ movaps [esp],xmm7 ++ movups xmm2,[esi] ++ xorps xmm7,xmm7 ++ call __aesni_decrypt6 ++ movups xmm1,[esi] ++ movups xmm0,[16+esi] ++ xorps xmm2,[esp] ++ xorps xmm3,xmm1 ++ movups xmm1,[32+esi] ++ xorps xmm4,xmm0 ++ movups xmm0,[48+esi] ++ xorps xmm5,xmm1 ++ movups xmm7,[64+esi] ++ xorps xmm6,xmm0 ++ movups [edi],xmm2 ++ movups [16+edi],xmm3 ++ pxor xmm3,xmm3 ++ movups [32+edi],xmm4 ++ pxor xmm4,xmm4 ++ movups [48+edi],xmm5 ++ pxor xmm5,xmm5 ++ lea edi,[64+edi] ++ movaps xmm2,xmm6 ++ pxor xmm6,xmm6 ++ sub eax,80 ++ jmp NEAR L$108cbc_dec_tail_collected ++align 16 ++L$104cbc_dec_one: ++ movups xmm0,[edx] ++ movups xmm1,[16+edx] ++ lea edx,[32+edx] ++ xorps xmm2,xmm0 ++L$109dec1_loop_20: ++db 102,15,56,222,209 ++ dec ecx ++ movups xmm1,[edx] ++ lea edx,[16+edx] ++ jnz NEAR L$109dec1_loop_20 ++db 102,15,56,223,209 ++ xorps xmm2,xmm7 ++ movaps xmm7,xmm6 ++ sub eax,16 ++ jmp NEAR L$108cbc_dec_tail_collected ++align 16 ++L$105cbc_dec_two: ++ call __aesni_decrypt2 ++ xorps xmm2,xmm7 ++ xorps xmm3,xmm6 ++ movups [edi],xmm2 ++ movaps xmm2,xmm3 ++ pxor xmm3,xmm3 ++ lea edi,[16+edi] ++ movaps xmm7,xmm5 ++ sub eax,32 ++ jmp NEAR L$108cbc_dec_tail_collected ++align 16 ++L$106cbc_dec_three: ++ call __aesni_decrypt3 ++ xorps xmm2,xmm7 ++ xorps xmm3,xmm6 ++ xorps xmm4,xmm5 ++ movups [edi],xmm2 ++ movaps xmm2,xmm4 ++ pxor xmm4,xmm4 ++ movups [16+edi],xmm3 ++ pxor xmm3,xmm3 ++ lea edi,[32+edi] ++ movups xmm7,[32+esi] ++ sub eax,48 ++ jmp NEAR L$108cbc_dec_tail_collected ++align 16 ++L$107cbc_dec_four: ++ call __aesni_decrypt4 ++ movups xmm1,[16+esi] ++ movups xmm0,[32+esi] ++ xorps xmm2,xmm7 ++ movups xmm7,[48+esi] ++ xorps xmm3,xmm6 ++ movups [edi],xmm2 ++ xorps xmm4,xmm1 ++ movups [16+edi],xmm3 ++ pxor xmm3,xmm3 ++ xorps xmm5,xmm0 ++ movups [32+edi],xmm4 ++ pxor xmm4,xmm4 ++ lea edi,[48+edi] ++ movaps xmm2,xmm5 ++ pxor xmm5,xmm5 ++ sub eax,64 ++ jmp NEAR L$108cbc_dec_tail_collected ++align 16 ++L$103cbc_dec_clear_tail_collected: ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ pxor xmm6,xmm6 ++L$108cbc_dec_tail_collected: ++ and eax,15 ++ jnz NEAR L$110cbc_dec_tail_partial ++ movups [edi],xmm2 ++ pxor xmm0,xmm0 ++ jmp NEAR L$099cbc_ret ++align 16 ++L$110cbc_dec_tail_partial: ++ movaps [esp],xmm2 ++ pxor xmm0,xmm0 ++ mov ecx,16 ++ mov esi,esp ++ sub ecx,eax ++dd 2767451785 ++ movdqa [esp],xmm2 ++L$099cbc_ret: ++ mov esp,DWORD [16+esp] ++ mov ebp,DWORD [36+esp] ++ pxor xmm2,xmm2 ++ pxor xmm1,xmm1 ++ movups [ebp],xmm7 ++ pxor xmm7,xmm7 ++L$094cbc_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++align 16 ++__aesni_set_encrypt_key: ++ push ebp ++ push ebx ++ test eax,eax ++ jz NEAR L$111bad_pointer ++ test edx,edx ++ jz NEAR L$111bad_pointer ++ call L$112pic ++L$112pic: ++ pop ebx ++ lea ebx,[(L$key_const-L$112pic)+ebx] ++ lea ebp,[__gnutls_x86_cpuid_s] ++ movups xmm0,[eax] ++ xorps xmm4,xmm4 ++ mov ebp,DWORD [4+ebp] ++ lea edx,[16+edx] ++ and ebp,268437504 ++ cmp ecx,256 ++ je NEAR L$11314rounds ++ cmp ecx,192 ++ je NEAR L$11412rounds ++ cmp ecx,128 ++ jne NEAR L$115bad_keybits ++align 16 ++L$11610rounds: ++ cmp ebp,268435456 ++ je NEAR L$11710rounds_alt ++ mov ecx,9 ++ movups [edx-16],xmm0 ++db 102,15,58,223,200,1 ++ call L$118key_128_cold ++db 102,15,58,223,200,2 ++ call L$119key_128 ++db 102,15,58,223,200,4 ++ call L$119key_128 ++db 102,15,58,223,200,8 ++ call L$119key_128 ++db 102,15,58,223,200,16 ++ call L$119key_128 ++db 102,15,58,223,200,32 ++ call L$119key_128 ++db 102,15,58,223,200,64 ++ call L$119key_128 ++db 102,15,58,223,200,128 ++ call L$119key_128 ++db 102,15,58,223,200,27 ++ call L$119key_128 ++db 102,15,58,223,200,54 ++ call L$119key_128 ++ movups [edx],xmm0 ++ mov DWORD [80+edx],ecx ++ jmp NEAR L$120good_key ++align 16 ++L$119key_128: ++ movups [edx],xmm0 ++ lea edx,[16+edx] ++L$118key_128_cold: ++ shufps xmm4,xmm0,16 ++ xorps xmm0,xmm4 ++ shufps xmm4,xmm0,140 ++ xorps xmm0,xmm4 ++ shufps xmm1,xmm1,255 ++ xorps xmm0,xmm1 ++ ret ++align 16 ++L$11710rounds_alt: ++ movdqa xmm5,[ebx] ++ mov ecx,8 ++ movdqa xmm4,[32+ebx] ++ movdqa xmm2,xmm0 ++ movdqu [edx-16],xmm0 ++L$121loop_key128: ++db 102,15,56,0,197 ++db 102,15,56,221,196 ++ pslld xmm4,1 ++ lea edx,[16+edx] ++ movdqa xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm2,xmm3 ++ pxor xmm0,xmm2 ++ movdqu [edx-16],xmm0 ++ movdqa xmm2,xmm0 ++ dec ecx ++ jnz NEAR L$121loop_key128 ++ movdqa xmm4,[48+ebx] ++db 102,15,56,0,197 ++db 102,15,56,221,196 ++ pslld xmm4,1 ++ movdqa xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm2,xmm3 ++ pxor xmm0,xmm2 ++ movdqu [edx],xmm0 ++ movdqa xmm2,xmm0 ++db 102,15,56,0,197 ++db 102,15,56,221,196 ++ movdqa xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm2,xmm3 ++ pxor xmm0,xmm2 ++ movdqu [16+edx],xmm0 ++ mov ecx,9 ++ mov DWORD [96+edx],ecx ++ jmp NEAR L$120good_key ++align 16 ++L$11412rounds: ++ movq xmm2,[16+eax] ++ cmp ebp,268435456 ++ je NEAR L$12212rounds_alt ++ mov ecx,11 ++ movups [edx-16],xmm0 ++db 102,15,58,223,202,1 ++ call L$123key_192a_cold ++db 102,15,58,223,202,2 ++ call L$124key_192b ++db 102,15,58,223,202,4 ++ call L$125key_192a ++db 102,15,58,223,202,8 ++ call L$124key_192b ++db 102,15,58,223,202,16 ++ call L$125key_192a ++db 102,15,58,223,202,32 ++ call L$124key_192b ++db 102,15,58,223,202,64 ++ call L$125key_192a ++db 102,15,58,223,202,128 ++ call L$124key_192b ++ movups [edx],xmm0 ++ mov DWORD [48+edx],ecx ++ jmp NEAR L$120good_key ++align 16 ++L$125key_192a: ++ movups [edx],xmm0 ++ lea edx,[16+edx] ++align 16 ++L$123key_192a_cold: ++ movaps xmm5,xmm2 ++L$126key_192b_warm: ++ shufps xmm4,xmm0,16 ++ movdqa xmm3,xmm2 ++ xorps xmm0,xmm4 ++ shufps xmm4,xmm0,140 ++ pslldq xmm3,4 ++ xorps xmm0,xmm4 ++ pshufd xmm1,xmm1,85 ++ pxor xmm2,xmm3 ++ pxor xmm0,xmm1 ++ pshufd xmm3,xmm0,255 ++ pxor xmm2,xmm3 ++ ret ++align 16 ++L$124key_192b: ++ movaps xmm3,xmm0 ++ shufps xmm5,xmm0,68 ++ movups [edx],xmm5 ++ shufps xmm3,xmm2,78 ++ movups [16+edx],xmm3 ++ lea edx,[32+edx] ++ jmp NEAR L$126key_192b_warm ++align 16 ++L$12212rounds_alt: ++ movdqa xmm5,[16+ebx] ++ movdqa xmm4,[32+ebx] ++ mov ecx,8 ++ movdqu [edx-16],xmm0 ++L$127loop_key192: ++ movq [edx],xmm2 ++ movdqa xmm1,xmm2 ++db 102,15,56,0,213 ++db 102,15,56,221,212 ++ pslld xmm4,1 ++ lea edx,[24+edx] ++ movdqa xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm0,xmm3 ++ pshufd xmm3,xmm0,255 ++ pxor xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm3,xmm1 ++ pxor xmm0,xmm2 ++ pxor xmm2,xmm3 ++ movdqu [edx-16],xmm0 ++ dec ecx ++ jnz NEAR L$127loop_key192 ++ mov ecx,11 ++ mov DWORD [32+edx],ecx ++ jmp NEAR L$120good_key ++align 16 ++L$11314rounds: ++ movups xmm2,[16+eax] ++ lea edx,[16+edx] ++ cmp ebp,268435456 ++ je NEAR L$12814rounds_alt ++ mov ecx,13 ++ movups [edx-32],xmm0 ++ movups [edx-16],xmm2 ++db 102,15,58,223,202,1 ++ call L$129key_256a_cold ++db 102,15,58,223,200,1 ++ call L$130key_256b ++db 102,15,58,223,202,2 ++ call L$131key_256a ++db 102,15,58,223,200,2 ++ call L$130key_256b ++db 102,15,58,223,202,4 ++ call L$131key_256a ++db 102,15,58,223,200,4 ++ call L$130key_256b ++db 102,15,58,223,202,8 ++ call L$131key_256a ++db 102,15,58,223,200,8 ++ call L$130key_256b ++db 102,15,58,223,202,16 ++ call L$131key_256a ++db 102,15,58,223,200,16 ++ call L$130key_256b ++db 102,15,58,223,202,32 ++ call L$131key_256a ++db 102,15,58,223,200,32 ++ call L$130key_256b ++db 102,15,58,223,202,64 ++ call L$131key_256a ++ movups [edx],xmm0 ++ mov DWORD [16+edx],ecx ++ xor eax,eax ++ jmp NEAR L$120good_key ++align 16 ++L$131key_256a: ++ movups [edx],xmm2 ++ lea edx,[16+edx] ++L$129key_256a_cold: ++ shufps xmm4,xmm0,16 ++ xorps xmm0,xmm4 ++ shufps xmm4,xmm0,140 ++ xorps xmm0,xmm4 ++ shufps xmm1,xmm1,255 ++ xorps xmm0,xmm1 ++ ret ++align 16 ++L$130key_256b: ++ movups [edx],xmm0 ++ lea edx,[16+edx] ++ shufps xmm4,xmm2,16 ++ xorps xmm2,xmm4 ++ shufps xmm4,xmm2,140 ++ xorps xmm2,xmm4 ++ shufps xmm1,xmm1,170 ++ xorps xmm2,xmm1 ++ ret ++align 16 ++L$12814rounds_alt: ++ movdqa xmm5,[ebx] ++ movdqa xmm4,[32+ebx] ++ mov ecx,7 ++ movdqu [edx-32],xmm0 ++ movdqa xmm1,xmm2 ++ movdqu [edx-16],xmm2 ++L$132loop_key256: ++db 102,15,56,0,213 ++db 102,15,56,221,212 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm0,xmm3 ++ pslld xmm4,1 ++ pxor xmm0,xmm2 ++ movdqu [edx],xmm0 ++ dec ecx ++ jz NEAR L$133done_key256 ++ pshufd xmm2,xmm0,255 ++ pxor xmm3,xmm3 ++db 102,15,56,221,211 ++ movdqa xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm1,xmm3 ++ pxor xmm2,xmm1 ++ movdqu [16+edx],xmm2 ++ lea edx,[32+edx] ++ movdqa xmm1,xmm2 ++ jmp NEAR L$132loop_key256 ++L$133done_key256: ++ mov ecx,13 ++ mov DWORD [16+edx],ecx ++L$120good_key: ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ xor eax,eax ++ pop ebx ++ pop ebp ++ ret ++align 4 ++L$111bad_pointer: ++ mov eax,-1 ++ pop ebx ++ pop ebp ++ ret ++align 4 ++L$115bad_keybits: ++ pxor xmm0,xmm0 ++ mov eax,-2 ++ pop ebx ++ pop ebp ++ ret ++global _aesni_set_encrypt_key ++align 16 ++_aesni_set_encrypt_key: ++L$_aesni_set_encrypt_key_begin: ++ mov eax,DWORD [4+esp] ++ mov ecx,DWORD [8+esp] ++ mov edx,DWORD [12+esp] ++ call __aesni_set_encrypt_key ++ ret ++global _aesni_set_decrypt_key ++align 16 ++_aesni_set_decrypt_key: ++L$_aesni_set_decrypt_key_begin: ++ mov eax,DWORD [4+esp] ++ mov ecx,DWORD [8+esp] ++ mov edx,DWORD [12+esp] ++ call __aesni_set_encrypt_key ++ mov edx,DWORD [12+esp] ++ shl ecx,4 ++ test eax,eax ++ jnz NEAR L$134dec_key_ret ++ lea eax,[16+ecx*1+edx] ++ movups xmm0,[edx] ++ movups xmm1,[eax] ++ movups [eax],xmm0 ++ movups [edx],xmm1 ++ lea edx,[16+edx] ++ lea eax,[eax-16] ++L$135dec_key_inverse: ++ movups xmm0,[edx] ++ movups xmm1,[eax] ++db 102,15,56,219,192 ++db 102,15,56,219,201 ++ lea edx,[16+edx] ++ lea eax,[eax-16] ++ movups [16+eax],xmm0 ++ movups [edx-16],xmm1 ++ cmp eax,edx ++ ja NEAR L$135dec_key_inverse ++ movups xmm0,[edx] ++db 102,15,56,219,192 ++ movups [edx],xmm0 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ xor eax,eax ++L$134dec_key_ret: ++ ret ++align 64 ++L$key_const: ++dd 202313229,202313229,202313229,202313229 ++dd 67569157,67569157,67569157,67569157 ++dd 1,1,1,1 ++dd 27,27,27,27 ++db 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 ++db 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 ++db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 ++db 115,108,46,111,114,103,62,0 ++segment .bss ++common __gnutls_x86_cpuid_s 16 +diff --git a/SMP/lib/accelerated/x86/coff/aesni-x86_64.asm b/SMP/lib/accelerated/x86/coff/aesni-x86_64.asm +new file mode 100644 +index 0000000..021b735 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/aesni-x86_64.asm +@@ -0,0 +1,4994 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++EXTERN _gnutls_x86_cpuid_s ++global aesni_encrypt ++ ++ALIGN 16 ++aesni_encrypt: ++ movups xmm2,XMMWORD[rcx] ++ mov eax,DWORD[240+r8] ++ movups xmm0,XMMWORD[r8] ++ movups xmm1,XMMWORD[16+r8] ++ lea r8,[32+r8] ++ xorps xmm2,xmm0 ++$L$oop_enc1_1: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[r8] ++ lea r8,[16+r8] ++ jnz NEAR $L$oop_enc1_1 ++DB 102,15,56,221,209 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movups XMMWORD[rdx],xmm2 ++ pxor xmm2,xmm2 ++ DB 0F3h,0C3h ;repret ++ ++ ++global aesni_decrypt ++ ++ALIGN 16 ++aesni_decrypt: ++ movups xmm2,XMMWORD[rcx] ++ mov eax,DWORD[240+r8] ++ movups xmm0,XMMWORD[r8] ++ movups xmm1,XMMWORD[16+r8] ++ lea r8,[32+r8] ++ xorps xmm2,xmm0 ++$L$oop_dec1_2: ++DB 102,15,56,222,209 ++ dec eax ++ movups xmm1,XMMWORD[r8] ++ lea r8,[16+r8] ++ jnz NEAR $L$oop_dec1_2 ++DB 102,15,56,223,209 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movups XMMWORD[rdx],xmm2 ++ pxor xmm2,xmm2 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_encrypt2: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ movups xmm0,XMMWORD[32+rcx] ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++ add rax,16 ++ ++$L$enc_loop2: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$enc_loop2 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_decrypt2: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ movups xmm0,XMMWORD[32+rcx] ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++ add rax,16 ++ ++$L$dec_loop2: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$dec_loop2 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,223,208 ++DB 102,15,56,223,216 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_encrypt3: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ xorps xmm4,xmm0 ++ movups xmm0,XMMWORD[32+rcx] ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++ add rax,16 ++ ++$L$enc_loop3: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$enc_loop3 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++DB 102,15,56,221,224 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_decrypt3: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ xorps xmm4,xmm0 ++ movups xmm0,XMMWORD[32+rcx] ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++ add rax,16 ++ ++$L$dec_loop3: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$dec_loop3 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,223,208 ++DB 102,15,56,223,216 ++DB 102,15,56,223,224 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_encrypt4: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ xorps xmm4,xmm0 ++ xorps xmm5,xmm0 ++ movups xmm0,XMMWORD[32+rcx] ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++DB 0x0f,0x1f,0x00 ++ add rax,16 ++ ++$L$enc_loop4: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$enc_loop4 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++DB 102,15,56,221,224 ++DB 102,15,56,221,232 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_decrypt4: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ xorps xmm4,xmm0 ++ xorps xmm5,xmm0 ++ movups xmm0,XMMWORD[32+rcx] ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++DB 0x0f,0x1f,0x00 ++ add rax,16 ++ ++$L$dec_loop4: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$dec_loop4 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,223,208 ++DB 102,15,56,223,216 ++DB 102,15,56,223,224 ++DB 102,15,56,223,232 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_encrypt6: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++DB 102,15,56,220,209 ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++DB 102,15,56,220,217 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++DB 102,15,56,220,225 ++ pxor xmm7,xmm0 ++ movups xmm0,XMMWORD[rax*1+rcx] ++ add rax,16 ++ jmp NEAR $L$enc_loop6_enter ++ALIGN 16 ++$L$enc_loop6: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++$L$enc_loop6_enter: ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$enc_loop6 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++DB 102,15,56,221,224 ++DB 102,15,56,221,232 ++DB 102,15,56,221,240 ++DB 102,15,56,221,248 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_decrypt6: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ pxor xmm3,xmm0 ++ pxor xmm4,xmm0 ++DB 102,15,56,222,209 ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++DB 102,15,56,222,217 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++DB 102,15,56,222,225 ++ pxor xmm7,xmm0 ++ movups xmm0,XMMWORD[rax*1+rcx] ++ add rax,16 ++ jmp NEAR $L$dec_loop6_enter ++ALIGN 16 ++$L$dec_loop6: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++$L$dec_loop6_enter: ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$dec_loop6 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,15,56,223,208 ++DB 102,15,56,223,216 ++DB 102,15,56,223,224 ++DB 102,15,56,223,232 ++DB 102,15,56,223,240 ++DB 102,15,56,223,248 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_encrypt8: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++DB 102,15,56,220,209 ++ pxor xmm7,xmm0 ++ pxor xmm8,xmm0 ++DB 102,15,56,220,217 ++ pxor xmm9,xmm0 ++ movups xmm0,XMMWORD[rax*1+rcx] ++ add rax,16 ++ jmp NEAR $L$enc_loop8_inner ++ALIGN 16 ++$L$enc_loop8: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++$L$enc_loop8_inner: ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++$L$enc_loop8_enter: ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$enc_loop8 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++DB 102,15,56,221,224 ++DB 102,15,56,221,232 ++DB 102,15,56,221,240 ++DB 102,15,56,221,248 ++DB 102,68,15,56,221,192 ++DB 102,68,15,56,221,200 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++_aesni_decrypt8: ++ movups xmm0,XMMWORD[rcx] ++ shl eax,4 ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm0 ++ pxor xmm4,xmm0 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++ lea rcx,[32+rax*1+rcx] ++ neg rax ++DB 102,15,56,222,209 ++ pxor xmm7,xmm0 ++ pxor xmm8,xmm0 ++DB 102,15,56,222,217 ++ pxor xmm9,xmm0 ++ movups xmm0,XMMWORD[rax*1+rcx] ++ add rax,16 ++ jmp NEAR $L$dec_loop8_inner ++ALIGN 16 ++$L$dec_loop8: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++$L$dec_loop8_inner: ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++$L$dec_loop8_enter: ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$dec_loop8 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++DB 102,15,56,223,208 ++DB 102,15,56,223,216 ++DB 102,15,56,223,224 ++DB 102,15,56,223,232 ++DB 102,15,56,223,240 ++DB 102,15,56,223,248 ++DB 102,68,15,56,223,192 ++DB 102,68,15,56,223,200 ++ DB 0F3h,0C3h ;repret ++ ++global aesni_ecb_encrypt ++ ++ALIGN 16 ++aesni_ecb_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_ecb_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ ++ ++ lea rsp,[((-88))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++$L$ecb_enc_body: ++ and rdx,-16 ++ jz NEAR $L$ecb_ret ++ ++ mov eax,DWORD[240+rcx] ++ movups xmm0,XMMWORD[rcx] ++ mov r11,rcx ++ mov r10d,eax ++ test r8d,r8d ++ jz NEAR $L$ecb_decrypt ++ ++ cmp rdx,0x80 ++ jb NEAR $L$ecb_enc_tail ++ ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqu xmm4,XMMWORD[32+rdi] ++ movdqu xmm5,XMMWORD[48+rdi] ++ movdqu xmm6,XMMWORD[64+rdi] ++ movdqu xmm7,XMMWORD[80+rdi] ++ movdqu xmm8,XMMWORD[96+rdi] ++ movdqu xmm9,XMMWORD[112+rdi] ++ lea rdi,[128+rdi] ++ sub rdx,0x80 ++ jmp NEAR $L$ecb_enc_loop8_enter ++ALIGN 16 ++$L$ecb_enc_loop8: ++ movups XMMWORD[rsi],xmm2 ++ mov rcx,r11 ++ movdqu xmm2,XMMWORD[rdi] ++ mov eax,r10d ++ movups XMMWORD[16+rsi],xmm3 ++ movdqu xmm3,XMMWORD[16+rdi] ++ movups XMMWORD[32+rsi],xmm4 ++ movdqu xmm4,XMMWORD[32+rdi] ++ movups XMMWORD[48+rsi],xmm5 ++ movdqu xmm5,XMMWORD[48+rdi] ++ movups XMMWORD[64+rsi],xmm6 ++ movdqu xmm6,XMMWORD[64+rdi] ++ movups XMMWORD[80+rsi],xmm7 ++ movdqu xmm7,XMMWORD[80+rdi] ++ movups XMMWORD[96+rsi],xmm8 ++ movdqu xmm8,XMMWORD[96+rdi] ++ movups XMMWORD[112+rsi],xmm9 ++ lea rsi,[128+rsi] ++ movdqu xmm9,XMMWORD[112+rdi] ++ lea rdi,[128+rdi] ++$L$ecb_enc_loop8_enter: ++ ++ call _aesni_encrypt8 ++ ++ sub rdx,0x80 ++ jnc NEAR $L$ecb_enc_loop8 ++ ++ movups XMMWORD[rsi],xmm2 ++ mov rcx,r11 ++ movups XMMWORD[16+rsi],xmm3 ++ mov eax,r10d ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ movups XMMWORD[96+rsi],xmm8 ++ movups XMMWORD[112+rsi],xmm9 ++ lea rsi,[128+rsi] ++ add rdx,0x80 ++ jz NEAR $L$ecb_ret ++ ++$L$ecb_enc_tail: ++ movups xmm2,XMMWORD[rdi] ++ cmp rdx,0x20 ++ jb NEAR $L$ecb_enc_one ++ movups xmm3,XMMWORD[16+rdi] ++ je NEAR $L$ecb_enc_two ++ movups xmm4,XMMWORD[32+rdi] ++ cmp rdx,0x40 ++ jb NEAR $L$ecb_enc_three ++ movups xmm5,XMMWORD[48+rdi] ++ je NEAR $L$ecb_enc_four ++ movups xmm6,XMMWORD[64+rdi] ++ cmp rdx,0x60 ++ jb NEAR $L$ecb_enc_five ++ movups xmm7,XMMWORD[80+rdi] ++ je NEAR $L$ecb_enc_six ++ movdqu xmm8,XMMWORD[96+rdi] ++ xorps xmm9,xmm9 ++ call _aesni_encrypt8 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ movups XMMWORD[96+rsi],xmm8 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_enc_one: ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_enc1_3: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_enc1_3 ++DB 102,15,56,221,209 ++ movups XMMWORD[rsi],xmm2 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_enc_two: ++ call _aesni_encrypt2 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_enc_three: ++ call _aesni_encrypt3 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_enc_four: ++ call _aesni_encrypt4 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_enc_five: ++ xorps xmm7,xmm7 ++ call _aesni_encrypt6 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_enc_six: ++ call _aesni_encrypt6 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ jmp NEAR $L$ecb_ret ++ ++ALIGN 16 ++$L$ecb_decrypt: ++ cmp rdx,0x80 ++ jb NEAR $L$ecb_dec_tail ++ ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqu xmm4,XMMWORD[32+rdi] ++ movdqu xmm5,XMMWORD[48+rdi] ++ movdqu xmm6,XMMWORD[64+rdi] ++ movdqu xmm7,XMMWORD[80+rdi] ++ movdqu xmm8,XMMWORD[96+rdi] ++ movdqu xmm9,XMMWORD[112+rdi] ++ lea rdi,[128+rdi] ++ sub rdx,0x80 ++ jmp NEAR $L$ecb_dec_loop8_enter ++ALIGN 16 ++$L$ecb_dec_loop8: ++ movups XMMWORD[rsi],xmm2 ++ mov rcx,r11 ++ movdqu xmm2,XMMWORD[rdi] ++ mov eax,r10d ++ movups XMMWORD[16+rsi],xmm3 ++ movdqu xmm3,XMMWORD[16+rdi] ++ movups XMMWORD[32+rsi],xmm4 ++ movdqu xmm4,XMMWORD[32+rdi] ++ movups XMMWORD[48+rsi],xmm5 ++ movdqu xmm5,XMMWORD[48+rdi] ++ movups XMMWORD[64+rsi],xmm6 ++ movdqu xmm6,XMMWORD[64+rdi] ++ movups XMMWORD[80+rsi],xmm7 ++ movdqu xmm7,XMMWORD[80+rdi] ++ movups XMMWORD[96+rsi],xmm8 ++ movdqu xmm8,XMMWORD[96+rdi] ++ movups XMMWORD[112+rsi],xmm9 ++ lea rsi,[128+rsi] ++ movdqu xmm9,XMMWORD[112+rdi] ++ lea rdi,[128+rdi] ++$L$ecb_dec_loop8_enter: ++ ++ call _aesni_decrypt8 ++ ++ movups xmm0,XMMWORD[r11] ++ sub rdx,0x80 ++ jnc NEAR $L$ecb_dec_loop8 ++ ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ mov rcx,r11 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ mov eax,r10d ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ pxor xmm6,xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ pxor xmm7,xmm7 ++ movups XMMWORD[96+rsi],xmm8 ++ pxor xmm8,xmm8 ++ movups XMMWORD[112+rsi],xmm9 ++ pxor xmm9,xmm9 ++ lea rsi,[128+rsi] ++ add rdx,0x80 ++ jz NEAR $L$ecb_ret ++ ++$L$ecb_dec_tail: ++ movups xmm2,XMMWORD[rdi] ++ cmp rdx,0x20 ++ jb NEAR $L$ecb_dec_one ++ movups xmm3,XMMWORD[16+rdi] ++ je NEAR $L$ecb_dec_two ++ movups xmm4,XMMWORD[32+rdi] ++ cmp rdx,0x40 ++ jb NEAR $L$ecb_dec_three ++ movups xmm5,XMMWORD[48+rdi] ++ je NEAR $L$ecb_dec_four ++ movups xmm6,XMMWORD[64+rdi] ++ cmp rdx,0x60 ++ jb NEAR $L$ecb_dec_five ++ movups xmm7,XMMWORD[80+rdi] ++ je NEAR $L$ecb_dec_six ++ movups xmm8,XMMWORD[96+rdi] ++ movups xmm0,XMMWORD[rcx] ++ xorps xmm9,xmm9 ++ call _aesni_decrypt8 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ pxor xmm6,xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ pxor xmm7,xmm7 ++ movups XMMWORD[96+rsi],xmm8 ++ pxor xmm8,xmm8 ++ pxor xmm9,xmm9 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_dec_one: ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_dec1_4: ++DB 102,15,56,222,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_dec1_4 ++DB 102,15,56,223,209 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_dec_two: ++ call _aesni_decrypt2 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_dec_three: ++ call _aesni_decrypt3 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_dec_four: ++ call _aesni_decrypt4 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_dec_five: ++ xorps xmm7,xmm7 ++ call _aesni_decrypt6 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ jmp NEAR $L$ecb_ret ++ALIGN 16 ++$L$ecb_dec_six: ++ call _aesni_decrypt6 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ pxor xmm6,xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ pxor xmm7,xmm7 ++ ++$L$ecb_ret: ++ xorps xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movaps xmm6,XMMWORD[rsp] ++ movaps XMMWORD[rsp],xmm0 ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps XMMWORD[48+rsp],xmm0 ++ lea rsp,[88+rsp] ++$L$ecb_enc_ret: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_ecb_encrypt: ++global aesni_ccm64_encrypt_blocks ++ ++ALIGN 16 ++aesni_ccm64_encrypt_blocks: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_ccm64_encrypt_blocks: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ lea rsp,[((-88))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++$L$ccm64_enc_body: ++ mov eax,DWORD[240+rcx] ++ movdqu xmm6,XMMWORD[r8] ++ movdqa xmm9,XMMWORD[$L$increment64] ++ movdqa xmm7,XMMWORD[$L$bswap_mask] ++ ++ shl eax,4 ++ mov r10d,16 ++ lea r11,[rcx] ++ movdqu xmm3,XMMWORD[r9] ++ movdqa xmm2,xmm6 ++ lea rcx,[32+rax*1+rcx] ++DB 102,15,56,0,247 ++ sub r10,rax ++ jmp NEAR $L$ccm64_enc_outer ++ALIGN 16 ++$L$ccm64_enc_outer: ++ movups xmm0,XMMWORD[r11] ++ mov rax,r10 ++ movups xmm8,XMMWORD[rdi] ++ ++ xorps xmm2,xmm0 ++ movups xmm1,XMMWORD[16+r11] ++ xorps xmm0,xmm8 ++ xorps xmm3,xmm0 ++ movups xmm0,XMMWORD[32+r11] ++ ++$L$ccm64_enc2_loop: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ccm64_enc2_loop ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ paddq xmm6,xmm9 ++ dec rdx ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++ ++ lea rdi,[16+rdi] ++ xorps xmm8,xmm2 ++ movdqa xmm2,xmm6 ++ movups XMMWORD[rsi],xmm8 ++DB 102,15,56,0,215 ++ lea rsi,[16+rsi] ++ jnz NEAR $L$ccm64_enc_outer ++ ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ movups XMMWORD[r9],xmm3 ++ pxor xmm3,xmm3 ++ pxor xmm8,xmm8 ++ pxor xmm6,xmm6 ++ movaps xmm6,XMMWORD[rsp] ++ movaps XMMWORD[rsp],xmm0 ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps XMMWORD[48+rsp],xmm0 ++ lea rsp,[88+rsp] ++$L$ccm64_enc_ret: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_ccm64_encrypt_blocks: ++global aesni_ccm64_decrypt_blocks ++ ++ALIGN 16 ++aesni_ccm64_decrypt_blocks: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_ccm64_decrypt_blocks: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ lea rsp,[((-88))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++$L$ccm64_dec_body: ++ mov eax,DWORD[240+rcx] ++ movups xmm6,XMMWORD[r8] ++ movdqu xmm3,XMMWORD[r9] ++ movdqa xmm9,XMMWORD[$L$increment64] ++ movdqa xmm7,XMMWORD[$L$bswap_mask] ++ ++ movaps xmm2,xmm6 ++ mov r10d,eax ++ mov r11,rcx ++DB 102,15,56,0,247 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_enc1_5: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_enc1_5 ++DB 102,15,56,221,209 ++ shl r10d,4 ++ mov eax,16 ++ movups xmm8,XMMWORD[rdi] ++ paddq xmm6,xmm9 ++ lea rdi,[16+rdi] ++ sub rax,r10 ++ lea rcx,[32+r10*1+r11] ++ mov r10,rax ++ jmp NEAR $L$ccm64_dec_outer ++ALIGN 16 ++$L$ccm64_dec_outer: ++ xorps xmm8,xmm2 ++ movdqa xmm2,xmm6 ++ movups XMMWORD[rsi],xmm8 ++ lea rsi,[16+rsi] ++DB 102,15,56,0,215 ++ ++ sub rdx,1 ++ jz NEAR $L$ccm64_dec_break ++ ++ movups xmm0,XMMWORD[r11] ++ mov rax,r10 ++ movups xmm1,XMMWORD[16+r11] ++ xorps xmm8,xmm0 ++ xorps xmm2,xmm0 ++ xorps xmm3,xmm8 ++ movups xmm0,XMMWORD[32+r11] ++ jmp NEAR $L$ccm64_dec2_loop ++ALIGN 16 ++$L$ccm64_dec2_loop: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ccm64_dec2_loop ++ movups xmm8,XMMWORD[rdi] ++ paddq xmm6,xmm9 ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,221,208 ++DB 102,15,56,221,216 ++ lea rdi,[16+rdi] ++ jmp NEAR $L$ccm64_dec_outer ++ ++ALIGN 16 ++$L$ccm64_dec_break: ++ ++ mov eax,DWORD[240+r11] ++ movups xmm0,XMMWORD[r11] ++ movups xmm1,XMMWORD[16+r11] ++ xorps xmm8,xmm0 ++ lea r11,[32+r11] ++ xorps xmm3,xmm8 ++$L$oop_enc1_6: ++DB 102,15,56,220,217 ++ dec eax ++ movups xmm1,XMMWORD[r11] ++ lea r11,[16+r11] ++ jnz NEAR $L$oop_enc1_6 ++DB 102,15,56,221,217 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ movups XMMWORD[r9],xmm3 ++ pxor xmm3,xmm3 ++ pxor xmm8,xmm8 ++ pxor xmm6,xmm6 ++ movaps xmm6,XMMWORD[rsp] ++ movaps XMMWORD[rsp],xmm0 ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps XMMWORD[48+rsp],xmm0 ++ lea rsp,[88+rsp] ++$L$ccm64_dec_ret: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_ccm64_decrypt_blocks: ++global aesni_ctr32_encrypt_blocks ++ ++ALIGN 16 ++aesni_ctr32_encrypt_blocks: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_ctr32_encrypt_blocks: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ ++ ++ cmp rdx,1 ++ jne NEAR $L$ctr32_bulk ++ ++ ++ ++ movups xmm2,XMMWORD[r8] ++ movups xmm3,XMMWORD[rdi] ++ mov edx,DWORD[240+rcx] ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_enc1_7: ++DB 102,15,56,220,209 ++ dec edx ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_enc1_7 ++DB 102,15,56,221,209 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ xorps xmm2,xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[rsi],xmm2 ++ xorps xmm2,xmm2 ++ jmp NEAR $L$ctr32_epilogue ++ ++ALIGN 16 ++$L$ctr32_bulk: ++ lea rax,[rsp] ++ push rbp ++ sub rsp,288 ++ and rsp,-16 ++ movaps XMMWORD[(-168)+rax],xmm6 ++ movaps XMMWORD[(-152)+rax],xmm7 ++ movaps XMMWORD[(-136)+rax],xmm8 ++ movaps XMMWORD[(-120)+rax],xmm9 ++ movaps XMMWORD[(-104)+rax],xmm10 ++ movaps XMMWORD[(-88)+rax],xmm11 ++ movaps XMMWORD[(-72)+rax],xmm12 ++ movaps XMMWORD[(-56)+rax],xmm13 ++ movaps XMMWORD[(-40)+rax],xmm14 ++ movaps XMMWORD[(-24)+rax],xmm15 ++$L$ctr32_body: ++ lea rbp,[((-8))+rax] ++ ++ ++ ++ ++ movdqu xmm2,XMMWORD[r8] ++ movdqu xmm0,XMMWORD[rcx] ++ mov r8d,DWORD[12+r8] ++ pxor xmm2,xmm0 ++ mov r11d,DWORD[12+rcx] ++ movdqa XMMWORD[rsp],xmm2 ++ bswap r8d ++ movdqa xmm3,xmm2 ++ movdqa xmm4,xmm2 ++ movdqa xmm5,xmm2 ++ movdqa XMMWORD[64+rsp],xmm2 ++ movdqa XMMWORD[80+rsp],xmm2 ++ movdqa XMMWORD[96+rsp],xmm2 ++ mov r10,rdx ++ movdqa XMMWORD[112+rsp],xmm2 ++ ++ lea rax,[1+r8] ++ lea rdx,[2+r8] ++ bswap eax ++ bswap edx ++ xor eax,r11d ++ xor edx,r11d ++DB 102,15,58,34,216,3 ++ lea rax,[3+r8] ++ movdqa XMMWORD[16+rsp],xmm3 ++DB 102,15,58,34,226,3 ++ bswap eax ++ mov rdx,r10 ++ lea r10,[4+r8] ++ movdqa XMMWORD[32+rsp],xmm4 ++ xor eax,r11d ++ bswap r10d ++DB 102,15,58,34,232,3 ++ xor r10d,r11d ++ movdqa XMMWORD[48+rsp],xmm5 ++ lea r9,[5+r8] ++ mov DWORD[((64+12))+rsp],r10d ++ bswap r9d ++ lea r10,[6+r8] ++ mov eax,DWORD[240+rcx] ++ xor r9d,r11d ++ bswap r10d ++ mov DWORD[((80+12))+rsp],r9d ++ xor r10d,r11d ++ lea r9,[7+r8] ++ mov DWORD[((96+12))+rsp],r10d ++ bswap r9d ++ mov r10d,DWORD[((_gnutls_x86_cpuid_s+4))] ++ xor r9d,r11d ++ and r10d,71303168 ++ mov DWORD[((112+12))+rsp],r9d ++ ++ movups xmm1,XMMWORD[16+rcx] ++ ++ movdqa xmm6,XMMWORD[64+rsp] ++ movdqa xmm7,XMMWORD[80+rsp] ++ ++ cmp rdx,8 ++ jb NEAR $L$ctr32_tail ++ ++ sub rdx,6 ++ cmp r10d,4194304 ++ je NEAR $L$ctr32_6x ++ ++ lea rcx,[128+rcx] ++ sub rdx,2 ++ jmp NEAR $L$ctr32_loop8 ++ ++ALIGN 16 ++$L$ctr32_6x: ++ shl eax,4 ++ mov r10d,48 ++ bswap r11d ++ lea rcx,[32+rax*1+rcx] ++ sub r10,rax ++ jmp NEAR $L$ctr32_loop6 ++ ++ALIGN 16 ++$L$ctr32_loop6: ++ add r8d,6 ++ movups xmm0,XMMWORD[((-48))+r10*1+rcx] ++DB 102,15,56,220,209 ++ mov eax,r8d ++ xor eax,r11d ++DB 102,15,56,220,217 ++DB 0x0f,0x38,0xf1,0x44,0x24,12 ++ lea eax,[1+r8] ++DB 102,15,56,220,225 ++ xor eax,r11d ++DB 0x0f,0x38,0xf1,0x44,0x24,28 ++DB 102,15,56,220,233 ++ lea eax,[2+r8] ++ xor eax,r11d ++DB 102,15,56,220,241 ++DB 0x0f,0x38,0xf1,0x44,0x24,44 ++ lea eax,[3+r8] ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[((-32))+r10*1+rcx] ++ xor eax,r11d ++ ++DB 102,15,56,220,208 ++DB 0x0f,0x38,0xf1,0x44,0x24,60 ++ lea eax,[4+r8] ++DB 102,15,56,220,216 ++ xor eax,r11d ++DB 0x0f,0x38,0xf1,0x44,0x24,76 ++DB 102,15,56,220,224 ++ lea eax,[5+r8] ++ xor eax,r11d ++DB 102,15,56,220,232 ++DB 0x0f,0x38,0xf1,0x44,0x24,92 ++ mov rax,r10 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[((-16))+r10*1+rcx] ++ ++ call $L$enc_loop6 ++ ++ movdqu xmm8,XMMWORD[rdi] ++ movdqu xmm9,XMMWORD[16+rdi] ++ movdqu xmm10,XMMWORD[32+rdi] ++ movdqu xmm11,XMMWORD[48+rdi] ++ movdqu xmm12,XMMWORD[64+rdi] ++ movdqu xmm13,XMMWORD[80+rdi] ++ lea rdi,[96+rdi] ++ movups xmm1,XMMWORD[((-64))+r10*1+rcx] ++ pxor xmm8,xmm2 ++ movaps xmm2,XMMWORD[rsp] ++ pxor xmm9,xmm3 ++ movaps xmm3,XMMWORD[16+rsp] ++ pxor xmm10,xmm4 ++ movaps xmm4,XMMWORD[32+rsp] ++ pxor xmm11,xmm5 ++ movaps xmm5,XMMWORD[48+rsp] ++ pxor xmm12,xmm6 ++ movaps xmm6,XMMWORD[64+rsp] ++ pxor xmm13,xmm7 ++ movaps xmm7,XMMWORD[80+rsp] ++ movdqu XMMWORD[rsi],xmm8 ++ movdqu XMMWORD[16+rsi],xmm9 ++ movdqu XMMWORD[32+rsi],xmm10 ++ movdqu XMMWORD[48+rsi],xmm11 ++ movdqu XMMWORD[64+rsi],xmm12 ++ movdqu XMMWORD[80+rsi],xmm13 ++ lea rsi,[96+rsi] ++ ++ sub rdx,6 ++ jnc NEAR $L$ctr32_loop6 ++ ++ add rdx,6 ++ jz NEAR $L$ctr32_done ++ ++ lea eax,[((-48))+r10] ++ lea rcx,[((-80))+r10*1+rcx] ++ neg eax ++ shr eax,4 ++ jmp NEAR $L$ctr32_tail ++ ++ALIGN 32 ++$L$ctr32_loop8: ++ add r8d,8 ++ movdqa xmm8,XMMWORD[96+rsp] ++DB 102,15,56,220,209 ++ mov r9d,r8d ++ movdqa xmm9,XMMWORD[112+rsp] ++DB 102,15,56,220,217 ++ bswap r9d ++ movups xmm0,XMMWORD[((32-128))+rcx] ++DB 102,15,56,220,225 ++ xor r9d,r11d ++ nop ++DB 102,15,56,220,233 ++ mov DWORD[((0+12))+rsp],r9d ++ lea r9,[1+r8] ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movups xmm1,XMMWORD[((48-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++ xor r9d,r11d ++DB 0x66,0x90 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ mov DWORD[((16+12))+rsp],r9d ++ lea r9,[2+r8] ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((64-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ xor r9d,r11d ++DB 0x66,0x90 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ mov DWORD[((32+12))+rsp],r9d ++ lea r9,[3+r8] ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movups xmm1,XMMWORD[((80-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++ xor r9d,r11d ++DB 0x66,0x90 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ mov DWORD[((48+12))+rsp],r9d ++ lea r9,[4+r8] ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((96-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ xor r9d,r11d ++DB 0x66,0x90 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ mov DWORD[((64+12))+rsp],r9d ++ lea r9,[5+r8] ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movups xmm1,XMMWORD[((112-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++ xor r9d,r11d ++DB 0x66,0x90 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ mov DWORD[((80+12))+rsp],r9d ++ lea r9,[6+r8] ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((128-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ xor r9d,r11d ++DB 0x66,0x90 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ mov DWORD[((96+12))+rsp],r9d ++ lea r9,[7+r8] ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movups xmm1,XMMWORD[((144-128))+rcx] ++ bswap r9d ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++ xor r9d,r11d ++ movdqu xmm10,XMMWORD[rdi] ++DB 102,15,56,220,232 ++ mov DWORD[((112+12))+rsp],r9d ++ cmp eax,11 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((160-128))+rcx] ++ ++ jb NEAR $L$ctr32_enc_done ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movups xmm1,XMMWORD[((176-128))+rcx] ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((192-128))+rcx] ++ je NEAR $L$ctr32_enc_done ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movups xmm1,XMMWORD[((208-128))+rcx] ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++DB 102,68,15,56,220,192 ++DB 102,68,15,56,220,200 ++ movups xmm0,XMMWORD[((224-128))+rcx] ++ jmp NEAR $L$ctr32_enc_done ++ ++ALIGN 16 ++$L$ctr32_enc_done: ++ movdqu xmm11,XMMWORD[16+rdi] ++ pxor xmm10,xmm0 ++ movdqu xmm12,XMMWORD[32+rdi] ++ pxor xmm11,xmm0 ++ movdqu xmm13,XMMWORD[48+rdi] ++ pxor xmm12,xmm0 ++ movdqu xmm14,XMMWORD[64+rdi] ++ pxor xmm13,xmm0 ++ movdqu xmm15,XMMWORD[80+rdi] ++ pxor xmm14,xmm0 ++ pxor xmm15,xmm0 ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++DB 102,68,15,56,220,201 ++ movdqu xmm1,XMMWORD[96+rdi] ++ lea rdi,[128+rdi] ++ ++DB 102,65,15,56,221,210 ++ pxor xmm1,xmm0 ++ movdqu xmm10,XMMWORD[((112-128))+rdi] ++DB 102,65,15,56,221,219 ++ pxor xmm10,xmm0 ++ movdqa xmm11,XMMWORD[rsp] ++DB 102,65,15,56,221,228 ++DB 102,65,15,56,221,237 ++ movdqa xmm12,XMMWORD[16+rsp] ++ movdqa xmm13,XMMWORD[32+rsp] ++DB 102,65,15,56,221,246 ++DB 102,65,15,56,221,255 ++ movdqa xmm14,XMMWORD[48+rsp] ++ movdqa xmm15,XMMWORD[64+rsp] ++DB 102,68,15,56,221,193 ++ movdqa xmm0,XMMWORD[80+rsp] ++ movups xmm1,XMMWORD[((16-128))+rcx] ++DB 102,69,15,56,221,202 ++ ++ movups XMMWORD[rsi],xmm2 ++ movdqa xmm2,xmm11 ++ movups XMMWORD[16+rsi],xmm3 ++ movdqa xmm3,xmm12 ++ movups XMMWORD[32+rsi],xmm4 ++ movdqa xmm4,xmm13 ++ movups XMMWORD[48+rsi],xmm5 ++ movdqa xmm5,xmm14 ++ movups XMMWORD[64+rsi],xmm6 ++ movdqa xmm6,xmm15 ++ movups XMMWORD[80+rsi],xmm7 ++ movdqa xmm7,xmm0 ++ movups XMMWORD[96+rsi],xmm8 ++ movups XMMWORD[112+rsi],xmm9 ++ lea rsi,[128+rsi] ++ ++ sub rdx,8 ++ jnc NEAR $L$ctr32_loop8 ++ ++ add rdx,8 ++ jz NEAR $L$ctr32_done ++ lea rcx,[((-128))+rcx] ++ ++$L$ctr32_tail: ++ ++ ++ lea rcx,[16+rcx] ++ cmp rdx,4 ++ jb NEAR $L$ctr32_loop3 ++ je NEAR $L$ctr32_loop4 ++ ++ ++ shl eax,4 ++ movdqa xmm8,XMMWORD[96+rsp] ++ pxor xmm9,xmm9 ++ ++ movups xmm0,XMMWORD[16+rcx] ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++ lea rcx,[((32-16))+rax*1+rcx] ++ neg rax ++DB 102,15,56,220,225 ++ add rax,16 ++ movups xmm10,XMMWORD[rdi] ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++ movups xmm11,XMMWORD[16+rdi] ++ movups xmm12,XMMWORD[32+rdi] ++DB 102,15,56,220,249 ++DB 102,68,15,56,220,193 ++ ++ call $L$enc_loop8_enter ++ ++ movdqu xmm13,XMMWORD[48+rdi] ++ pxor xmm2,xmm10 ++ movdqu xmm10,XMMWORD[64+rdi] ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm6,xmm10 ++ movdqu XMMWORD[48+rsi],xmm5 ++ movdqu XMMWORD[64+rsi],xmm6 ++ cmp rdx,6 ++ jb NEAR $L$ctr32_done ++ ++ movups xmm11,XMMWORD[80+rdi] ++ xorps xmm7,xmm11 ++ movups XMMWORD[80+rsi],xmm7 ++ je NEAR $L$ctr32_done ++ ++ movups xmm12,XMMWORD[96+rdi] ++ xorps xmm8,xmm12 ++ movups XMMWORD[96+rsi],xmm8 ++ jmp NEAR $L$ctr32_done ++ ++ALIGN 32 ++$L$ctr32_loop4: ++DB 102,15,56,220,209 ++ lea rcx,[16+rcx] ++ dec eax ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ movups xmm1,XMMWORD[rcx] ++ jnz NEAR $L$ctr32_loop4 ++DB 102,15,56,221,209 ++DB 102,15,56,221,217 ++ movups xmm10,XMMWORD[rdi] ++ movups xmm11,XMMWORD[16+rdi] ++DB 102,15,56,221,225 ++DB 102,15,56,221,233 ++ movups xmm12,XMMWORD[32+rdi] ++ movups xmm13,XMMWORD[48+rdi] ++ ++ xorps xmm2,xmm10 ++ movups XMMWORD[rsi],xmm2 ++ xorps xmm3,xmm11 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[48+rsi],xmm5 ++ jmp NEAR $L$ctr32_done ++ ++ALIGN 32 ++$L$ctr32_loop3: ++DB 102,15,56,220,209 ++ lea rcx,[16+rcx] ++ dec eax ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++ movups xmm1,XMMWORD[rcx] ++ jnz NEAR $L$ctr32_loop3 ++DB 102,15,56,221,209 ++DB 102,15,56,221,217 ++DB 102,15,56,221,225 ++ ++ movups xmm10,XMMWORD[rdi] ++ xorps xmm2,xmm10 ++ movups XMMWORD[rsi],xmm2 ++ cmp rdx,2 ++ jb NEAR $L$ctr32_done ++ ++ movups xmm11,XMMWORD[16+rdi] ++ xorps xmm3,xmm11 ++ movups XMMWORD[16+rsi],xmm3 ++ je NEAR $L$ctr32_done ++ ++ movups xmm12,XMMWORD[32+rdi] ++ xorps xmm4,xmm12 ++ movups XMMWORD[32+rsi],xmm4 ++ ++$L$ctr32_done: ++ xorps xmm0,xmm0 ++ xor r11d,r11d ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ movaps xmm6,XMMWORD[((-160))+rbp] ++ movaps XMMWORD[(-160)+rbp],xmm0 ++ movaps xmm7,XMMWORD[((-144))+rbp] ++ movaps XMMWORD[(-144)+rbp],xmm0 ++ movaps xmm8,XMMWORD[((-128))+rbp] ++ movaps XMMWORD[(-128)+rbp],xmm0 ++ movaps xmm9,XMMWORD[((-112))+rbp] ++ movaps XMMWORD[(-112)+rbp],xmm0 ++ movaps xmm10,XMMWORD[((-96))+rbp] ++ movaps XMMWORD[(-96)+rbp],xmm0 ++ movaps xmm11,XMMWORD[((-80))+rbp] ++ movaps XMMWORD[(-80)+rbp],xmm0 ++ movaps xmm12,XMMWORD[((-64))+rbp] ++ movaps XMMWORD[(-64)+rbp],xmm0 ++ movaps xmm13,XMMWORD[((-48))+rbp] ++ movaps XMMWORD[(-48)+rbp],xmm0 ++ movaps xmm14,XMMWORD[((-32))+rbp] ++ movaps XMMWORD[(-32)+rbp],xmm0 ++ movaps xmm15,XMMWORD[((-16))+rbp] ++ movaps XMMWORD[(-16)+rbp],xmm0 ++ movaps XMMWORD[rsp],xmm0 ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps XMMWORD[48+rsp],xmm0 ++ movaps XMMWORD[64+rsp],xmm0 ++ movaps XMMWORD[80+rsp],xmm0 ++ movaps XMMWORD[96+rsp],xmm0 ++ movaps XMMWORD[112+rsp],xmm0 ++ lea rsp,[rbp] ++ pop rbp ++$L$ctr32_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_ctr32_encrypt_blocks: ++global aesni_xts_encrypt ++ ++ALIGN 16 ++aesni_xts_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_xts_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ lea rax,[rsp] ++ push rbp ++ sub rsp,272 ++ and rsp,-16 ++ movaps XMMWORD[(-168)+rax],xmm6 ++ movaps XMMWORD[(-152)+rax],xmm7 ++ movaps XMMWORD[(-136)+rax],xmm8 ++ movaps XMMWORD[(-120)+rax],xmm9 ++ movaps XMMWORD[(-104)+rax],xmm10 ++ movaps XMMWORD[(-88)+rax],xmm11 ++ movaps XMMWORD[(-72)+rax],xmm12 ++ movaps XMMWORD[(-56)+rax],xmm13 ++ movaps XMMWORD[(-40)+rax],xmm14 ++ movaps XMMWORD[(-24)+rax],xmm15 ++$L$xts_enc_body: ++ lea rbp,[((-8))+rax] ++ movups xmm2,XMMWORD[r9] ++ mov eax,DWORD[240+r8] ++ mov r10d,DWORD[240+rcx] ++ movups xmm0,XMMWORD[r8] ++ movups xmm1,XMMWORD[16+r8] ++ lea r8,[32+r8] ++ xorps xmm2,xmm0 ++$L$oop_enc1_8: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[r8] ++ lea r8,[16+r8] ++ jnz NEAR $L$oop_enc1_8 ++DB 102,15,56,221,209 ++ movups xmm0,XMMWORD[rcx] ++ mov r11,rcx ++ mov eax,r10d ++ shl r10d,4 ++ mov r9,rdx ++ and rdx,-16 ++ ++ movups xmm1,XMMWORD[16+r10*1+rcx] ++ ++ movdqa xmm8,XMMWORD[$L$xts_magic] ++ movdqa xmm15,xmm2 ++ pshufd xmm9,xmm2,0x5f ++ pxor xmm1,xmm0 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm10,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm10,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm11,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm11,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm12,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm12,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm13,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm13,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm15 ++ psrad xmm9,31 ++ paddq xmm15,xmm15 ++ pand xmm9,xmm8 ++ pxor xmm14,xmm0 ++ pxor xmm15,xmm9 ++ movaps XMMWORD[96+rsp],xmm1 ++ ++ sub rdx,16*6 ++ jc NEAR $L$xts_enc_short ++ ++ mov eax,16+96 ++ lea rcx,[32+r10*1+r11] ++ sub rax,r10 ++ movups xmm1,XMMWORD[16+r11] ++ mov r10,rax ++ lea r8,[$L$xts_magic] ++ jmp NEAR $L$xts_enc_grandloop ++ ++ALIGN 32 ++$L$xts_enc_grandloop: ++ movdqu xmm2,XMMWORD[rdi] ++ movdqa xmm8,xmm0 ++ movdqu xmm3,XMMWORD[16+rdi] ++ pxor xmm2,xmm10 ++ movdqu xmm4,XMMWORD[32+rdi] ++ pxor xmm3,xmm11 ++DB 102,15,56,220,209 ++ movdqu xmm5,XMMWORD[48+rdi] ++ pxor xmm4,xmm12 ++DB 102,15,56,220,217 ++ movdqu xmm6,XMMWORD[64+rdi] ++ pxor xmm5,xmm13 ++DB 102,15,56,220,225 ++ movdqu xmm7,XMMWORD[80+rdi] ++ pxor xmm8,xmm15 ++ movdqa xmm9,XMMWORD[96+rsp] ++ pxor xmm6,xmm14 ++DB 102,15,56,220,233 ++ movups xmm0,XMMWORD[32+r11] ++ lea rdi,[96+rdi] ++ pxor xmm7,xmm8 ++ ++ pxor xmm10,xmm9 ++DB 102,15,56,220,241 ++ pxor xmm11,xmm9 ++ movdqa XMMWORD[rsp],xmm10 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[48+r11] ++ pxor xmm12,xmm9 ++ ++DB 102,15,56,220,208 ++ pxor xmm13,xmm9 ++ movdqa XMMWORD[16+rsp],xmm11 ++DB 102,15,56,220,216 ++ pxor xmm14,xmm9 ++ movdqa XMMWORD[32+rsp],xmm12 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ pxor xmm8,xmm9 ++ movdqa XMMWORD[64+rsp],xmm14 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[64+r11] ++ movdqa XMMWORD[80+rsp],xmm8 ++ pshufd xmm9,xmm15,0x5f ++ jmp NEAR $L$xts_enc_loop6 ++ALIGN 32 ++$L$xts_enc_loop6: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[((-64))+rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[((-80))+rax*1+rcx] ++ jnz NEAR $L$xts_enc_loop6 ++ ++ movdqa xmm8,XMMWORD[r8] ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++DB 102,15,56,220,209 ++ paddq xmm15,xmm15 ++ psrad xmm14,31 ++DB 102,15,56,220,217 ++ pand xmm14,xmm8 ++ movups xmm10,XMMWORD[r11] ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++ pxor xmm15,xmm14 ++ movaps xmm11,xmm10 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[((-64))+rcx] ++ ++ movdqa xmm14,xmm9 ++DB 102,15,56,220,208 ++ paddd xmm9,xmm9 ++ pxor xmm10,xmm15 ++DB 102,15,56,220,216 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ pand xmm14,xmm8 ++ movaps xmm12,xmm11 ++DB 102,15,56,220,240 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[((-48))+rcx] ++ ++ paddd xmm9,xmm9 ++DB 102,15,56,220,209 ++ pxor xmm11,xmm15 ++ psrad xmm14,31 ++DB 102,15,56,220,217 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ movdqa XMMWORD[48+rsp],xmm13 ++ pxor xmm15,xmm14 ++DB 102,15,56,220,241 ++ movaps xmm13,xmm12 ++ movdqa xmm14,xmm9 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[((-32))+rcx] ++ ++ paddd xmm9,xmm9 ++DB 102,15,56,220,208 ++ pxor xmm12,xmm15 ++ psrad xmm14,31 ++DB 102,15,56,220,216 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++ pxor xmm15,xmm14 ++ movaps xmm14,xmm13 ++DB 102,15,56,220,248 ++ ++ movdqa xmm0,xmm9 ++ paddd xmm9,xmm9 ++DB 102,15,56,220,209 ++ pxor xmm13,xmm15 ++ psrad xmm0,31 ++DB 102,15,56,220,217 ++ paddq xmm15,xmm15 ++ pand xmm0,xmm8 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ pxor xmm15,xmm0 ++ movups xmm0,XMMWORD[r11] ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[16+r11] ++ ++ pxor xmm14,xmm15 ++DB 102,15,56,221,84,36,0 ++ psrad xmm9,31 ++ paddq xmm15,xmm15 ++DB 102,15,56,221,92,36,16 ++DB 102,15,56,221,100,36,32 ++ pand xmm9,xmm8 ++ mov rax,r10 ++DB 102,15,56,221,108,36,48 ++DB 102,15,56,221,116,36,64 ++DB 102,15,56,221,124,36,80 ++ pxor xmm15,xmm9 ++ ++ lea rsi,[96+rsi] ++ movups XMMWORD[(-96)+rsi],xmm2 ++ movups XMMWORD[(-80)+rsi],xmm3 ++ movups XMMWORD[(-64)+rsi],xmm4 ++ movups XMMWORD[(-48)+rsi],xmm5 ++ movups XMMWORD[(-32)+rsi],xmm6 ++ movups XMMWORD[(-16)+rsi],xmm7 ++ sub rdx,16*6 ++ jnc NEAR $L$xts_enc_grandloop ++ ++ mov eax,16+96 ++ sub eax,r10d ++ mov rcx,r11 ++ shr eax,4 ++ ++$L$xts_enc_short: ++ ++ mov r10d,eax ++ pxor xmm10,xmm0 ++ add rdx,16*6 ++ jz NEAR $L$xts_enc_done ++ ++ pxor xmm11,xmm0 ++ cmp rdx,0x20 ++ jb NEAR $L$xts_enc_one ++ pxor xmm12,xmm0 ++ je NEAR $L$xts_enc_two ++ ++ pxor xmm13,xmm0 ++ cmp rdx,0x40 ++ jb NEAR $L$xts_enc_three ++ pxor xmm14,xmm0 ++ je NEAR $L$xts_enc_four ++ ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqu xmm4,XMMWORD[32+rdi] ++ pxor xmm2,xmm10 ++ movdqu xmm5,XMMWORD[48+rdi] ++ pxor xmm3,xmm11 ++ movdqu xmm6,XMMWORD[64+rdi] ++ lea rdi,[80+rdi] ++ pxor xmm4,xmm12 ++ pxor xmm5,xmm13 ++ pxor xmm6,xmm14 ++ pxor xmm7,xmm7 ++ ++ call _aesni_encrypt6 ++ ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm15 ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ movdqu XMMWORD[rsi],xmm2 ++ xorps xmm5,xmm13 ++ movdqu XMMWORD[16+rsi],xmm3 ++ xorps xmm6,xmm14 ++ movdqu XMMWORD[32+rsi],xmm4 ++ movdqu XMMWORD[48+rsi],xmm5 ++ movdqu XMMWORD[64+rsi],xmm6 ++ lea rsi,[80+rsi] ++ jmp NEAR $L$xts_enc_done ++ ++ALIGN 16 ++$L$xts_enc_one: ++ movups xmm2,XMMWORD[rdi] ++ lea rdi,[16+rdi] ++ xorps xmm2,xmm10 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_enc1_9: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_enc1_9 ++DB 102,15,56,221,209 ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm11 ++ movups XMMWORD[rsi],xmm2 ++ lea rsi,[16+rsi] ++ jmp NEAR $L$xts_enc_done ++ ++ALIGN 16 ++$L$xts_enc_two: ++ movups xmm2,XMMWORD[rdi] ++ movups xmm3,XMMWORD[16+rdi] ++ lea rdi,[32+rdi] ++ xorps xmm2,xmm10 ++ xorps xmm3,xmm11 ++ ++ call _aesni_encrypt2 ++ ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm12 ++ xorps xmm3,xmm11 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ lea rsi,[32+rsi] ++ jmp NEAR $L$xts_enc_done ++ ++ALIGN 16 ++$L$xts_enc_three: ++ movups xmm2,XMMWORD[rdi] ++ movups xmm3,XMMWORD[16+rdi] ++ movups xmm4,XMMWORD[32+rdi] ++ lea rdi,[48+rdi] ++ xorps xmm2,xmm10 ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ ++ call _aesni_encrypt3 ++ ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm13 ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ lea rsi,[48+rsi] ++ jmp NEAR $L$xts_enc_done ++ ++ALIGN 16 ++$L$xts_enc_four: ++ movups xmm2,XMMWORD[rdi] ++ movups xmm3,XMMWORD[16+rdi] ++ movups xmm4,XMMWORD[32+rdi] ++ xorps xmm2,xmm10 ++ movups xmm5,XMMWORD[48+rdi] ++ lea rdi,[64+rdi] ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ xorps xmm5,xmm13 ++ ++ call _aesni_encrypt4 ++ ++ pxor xmm2,xmm10 ++ movdqa xmm10,xmm14 ++ pxor xmm3,xmm11 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[16+rsi],xmm3 ++ movdqu XMMWORD[32+rsi],xmm4 ++ movdqu XMMWORD[48+rsi],xmm5 ++ lea rsi,[64+rsi] ++ jmp NEAR $L$xts_enc_done ++ ++ALIGN 16 ++$L$xts_enc_done: ++ and r9,15 ++ jz NEAR $L$xts_enc_ret ++ mov rdx,r9 ++ ++$L$xts_enc_steal: ++ movzx eax,BYTE[rdi] ++ movzx ecx,BYTE[((-16))+rsi] ++ lea rdi,[1+rdi] ++ mov BYTE[((-16))+rsi],al ++ mov BYTE[rsi],cl ++ lea rsi,[1+rsi] ++ sub rdx,1 ++ jnz NEAR $L$xts_enc_steal ++ ++ sub rsi,r9 ++ mov rcx,r11 ++ mov eax,r10d ++ ++ movups xmm2,XMMWORD[((-16))+rsi] ++ xorps xmm2,xmm10 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_enc1_10: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_enc1_10 ++DB 102,15,56,221,209 ++ xorps xmm2,xmm10 ++ movups XMMWORD[(-16)+rsi],xmm2 ++ ++$L$xts_enc_ret: ++ xorps xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ movaps xmm6,XMMWORD[((-160))+rbp] ++ movaps XMMWORD[(-160)+rbp],xmm0 ++ movaps xmm7,XMMWORD[((-144))+rbp] ++ movaps XMMWORD[(-144)+rbp],xmm0 ++ movaps xmm8,XMMWORD[((-128))+rbp] ++ movaps XMMWORD[(-128)+rbp],xmm0 ++ movaps xmm9,XMMWORD[((-112))+rbp] ++ movaps XMMWORD[(-112)+rbp],xmm0 ++ movaps xmm10,XMMWORD[((-96))+rbp] ++ movaps XMMWORD[(-96)+rbp],xmm0 ++ movaps xmm11,XMMWORD[((-80))+rbp] ++ movaps XMMWORD[(-80)+rbp],xmm0 ++ movaps xmm12,XMMWORD[((-64))+rbp] ++ movaps XMMWORD[(-64)+rbp],xmm0 ++ movaps xmm13,XMMWORD[((-48))+rbp] ++ movaps XMMWORD[(-48)+rbp],xmm0 ++ movaps xmm14,XMMWORD[((-32))+rbp] ++ movaps XMMWORD[(-32)+rbp],xmm0 ++ movaps xmm15,XMMWORD[((-16))+rbp] ++ movaps XMMWORD[(-16)+rbp],xmm0 ++ movaps XMMWORD[rsp],xmm0 ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps XMMWORD[48+rsp],xmm0 ++ movaps XMMWORD[64+rsp],xmm0 ++ movaps XMMWORD[80+rsp],xmm0 ++ movaps XMMWORD[96+rsp],xmm0 ++ lea rsp,[rbp] ++ pop rbp ++$L$xts_enc_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_xts_encrypt: ++global aesni_xts_decrypt ++ ++ALIGN 16 ++aesni_xts_decrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_xts_decrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ lea rax,[rsp] ++ push rbp ++ sub rsp,272 ++ and rsp,-16 ++ movaps XMMWORD[(-168)+rax],xmm6 ++ movaps XMMWORD[(-152)+rax],xmm7 ++ movaps XMMWORD[(-136)+rax],xmm8 ++ movaps XMMWORD[(-120)+rax],xmm9 ++ movaps XMMWORD[(-104)+rax],xmm10 ++ movaps XMMWORD[(-88)+rax],xmm11 ++ movaps XMMWORD[(-72)+rax],xmm12 ++ movaps XMMWORD[(-56)+rax],xmm13 ++ movaps XMMWORD[(-40)+rax],xmm14 ++ movaps XMMWORD[(-24)+rax],xmm15 ++$L$xts_dec_body: ++ lea rbp,[((-8))+rax] ++ movups xmm2,XMMWORD[r9] ++ mov eax,DWORD[240+r8] ++ mov r10d,DWORD[240+rcx] ++ movups xmm0,XMMWORD[r8] ++ movups xmm1,XMMWORD[16+r8] ++ lea r8,[32+r8] ++ xorps xmm2,xmm0 ++$L$oop_enc1_11: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[r8] ++ lea r8,[16+r8] ++ jnz NEAR $L$oop_enc1_11 ++DB 102,15,56,221,209 ++ xor eax,eax ++ test rdx,15 ++ setnz al ++ shl rax,4 ++ sub rdx,rax ++ ++ movups xmm0,XMMWORD[rcx] ++ mov r11,rcx ++ mov eax,r10d ++ shl r10d,4 ++ mov r9,rdx ++ and rdx,-16 ++ ++ movups xmm1,XMMWORD[16+r10*1+rcx] ++ ++ movdqa xmm8,XMMWORD[$L$xts_magic] ++ movdqa xmm15,xmm2 ++ pshufd xmm9,xmm2,0x5f ++ pxor xmm1,xmm0 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm10,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm10,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm11,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm11,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm12,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm12,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++ movdqa xmm13,xmm15 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++ pxor xmm13,xmm0 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm15 ++ psrad xmm9,31 ++ paddq xmm15,xmm15 ++ pand xmm9,xmm8 ++ pxor xmm14,xmm0 ++ pxor xmm15,xmm9 ++ movaps XMMWORD[96+rsp],xmm1 ++ ++ sub rdx,16*6 ++ jc NEAR $L$xts_dec_short ++ ++ mov eax,16+96 ++ lea rcx,[32+r10*1+r11] ++ sub rax,r10 ++ movups xmm1,XMMWORD[16+r11] ++ mov r10,rax ++ lea r8,[$L$xts_magic] ++ jmp NEAR $L$xts_dec_grandloop ++ ++ALIGN 32 ++$L$xts_dec_grandloop: ++ movdqu xmm2,XMMWORD[rdi] ++ movdqa xmm8,xmm0 ++ movdqu xmm3,XMMWORD[16+rdi] ++ pxor xmm2,xmm10 ++ movdqu xmm4,XMMWORD[32+rdi] ++ pxor xmm3,xmm11 ++DB 102,15,56,222,209 ++ movdqu xmm5,XMMWORD[48+rdi] ++ pxor xmm4,xmm12 ++DB 102,15,56,222,217 ++ movdqu xmm6,XMMWORD[64+rdi] ++ pxor xmm5,xmm13 ++DB 102,15,56,222,225 ++ movdqu xmm7,XMMWORD[80+rdi] ++ pxor xmm8,xmm15 ++ movdqa xmm9,XMMWORD[96+rsp] ++ pxor xmm6,xmm14 ++DB 102,15,56,222,233 ++ movups xmm0,XMMWORD[32+r11] ++ lea rdi,[96+rdi] ++ pxor xmm7,xmm8 ++ ++ pxor xmm10,xmm9 ++DB 102,15,56,222,241 ++ pxor xmm11,xmm9 ++ movdqa XMMWORD[rsp],xmm10 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[48+r11] ++ pxor xmm12,xmm9 ++ ++DB 102,15,56,222,208 ++ pxor xmm13,xmm9 ++ movdqa XMMWORD[16+rsp],xmm11 ++DB 102,15,56,222,216 ++ pxor xmm14,xmm9 ++ movdqa XMMWORD[32+rsp],xmm12 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++ pxor xmm8,xmm9 ++ movdqa XMMWORD[64+rsp],xmm14 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++ movups xmm0,XMMWORD[64+r11] ++ movdqa XMMWORD[80+rsp],xmm8 ++ pshufd xmm9,xmm15,0x5f ++ jmp NEAR $L$xts_dec_loop6 ++ALIGN 32 ++$L$xts_dec_loop6: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[((-64))+rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++ movups xmm0,XMMWORD[((-80))+rax*1+rcx] ++ jnz NEAR $L$xts_dec_loop6 ++ ++ movdqa xmm8,XMMWORD[r8] ++ movdqa xmm14,xmm9 ++ paddd xmm9,xmm9 ++DB 102,15,56,222,209 ++ paddq xmm15,xmm15 ++ psrad xmm14,31 ++DB 102,15,56,222,217 ++ pand xmm14,xmm8 ++ movups xmm10,XMMWORD[r11] ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++ pxor xmm15,xmm14 ++ movaps xmm11,xmm10 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[((-64))+rcx] ++ ++ movdqa xmm14,xmm9 ++DB 102,15,56,222,208 ++ paddd xmm9,xmm9 ++ pxor xmm10,xmm15 ++DB 102,15,56,222,216 ++ psrad xmm14,31 ++ paddq xmm15,xmm15 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++ pand xmm14,xmm8 ++ movaps xmm12,xmm11 ++DB 102,15,56,222,240 ++ pxor xmm15,xmm14 ++ movdqa xmm14,xmm9 ++DB 102,15,56,222,248 ++ movups xmm0,XMMWORD[((-48))+rcx] ++ ++ paddd xmm9,xmm9 ++DB 102,15,56,222,209 ++ pxor xmm11,xmm15 ++ psrad xmm14,31 ++DB 102,15,56,222,217 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ movdqa XMMWORD[48+rsp],xmm13 ++ pxor xmm15,xmm14 ++DB 102,15,56,222,241 ++ movaps xmm13,xmm12 ++ movdqa xmm14,xmm9 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[((-32))+rcx] ++ ++ paddd xmm9,xmm9 ++DB 102,15,56,222,208 ++ pxor xmm12,xmm15 ++ psrad xmm14,31 ++DB 102,15,56,222,216 ++ paddq xmm15,xmm15 ++ pand xmm14,xmm8 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++ pxor xmm15,xmm14 ++ movaps xmm14,xmm13 ++DB 102,15,56,222,248 ++ ++ movdqa xmm0,xmm9 ++ paddd xmm9,xmm9 ++DB 102,15,56,222,209 ++ pxor xmm13,xmm15 ++ psrad xmm0,31 ++DB 102,15,56,222,217 ++ paddq xmm15,xmm15 ++ pand xmm0,xmm8 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ pxor xmm15,xmm0 ++ movups xmm0,XMMWORD[r11] ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[16+r11] ++ ++ pxor xmm14,xmm15 ++DB 102,15,56,223,84,36,0 ++ psrad xmm9,31 ++ paddq xmm15,xmm15 ++DB 102,15,56,223,92,36,16 ++DB 102,15,56,223,100,36,32 ++ pand xmm9,xmm8 ++ mov rax,r10 ++DB 102,15,56,223,108,36,48 ++DB 102,15,56,223,116,36,64 ++DB 102,15,56,223,124,36,80 ++ pxor xmm15,xmm9 ++ ++ lea rsi,[96+rsi] ++ movups XMMWORD[(-96)+rsi],xmm2 ++ movups XMMWORD[(-80)+rsi],xmm3 ++ movups XMMWORD[(-64)+rsi],xmm4 ++ movups XMMWORD[(-48)+rsi],xmm5 ++ movups XMMWORD[(-32)+rsi],xmm6 ++ movups XMMWORD[(-16)+rsi],xmm7 ++ sub rdx,16*6 ++ jnc NEAR $L$xts_dec_grandloop ++ ++ mov eax,16+96 ++ sub eax,r10d ++ mov rcx,r11 ++ shr eax,4 ++ ++$L$xts_dec_short: ++ ++ mov r10d,eax ++ pxor xmm10,xmm0 ++ pxor xmm11,xmm0 ++ add rdx,16*6 ++ jz NEAR $L$xts_dec_done ++ ++ pxor xmm12,xmm0 ++ cmp rdx,0x20 ++ jb NEAR $L$xts_dec_one ++ pxor xmm13,xmm0 ++ je NEAR $L$xts_dec_two ++ ++ pxor xmm14,xmm0 ++ cmp rdx,0x40 ++ jb NEAR $L$xts_dec_three ++ je NEAR $L$xts_dec_four ++ ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqu xmm4,XMMWORD[32+rdi] ++ pxor xmm2,xmm10 ++ movdqu xmm5,XMMWORD[48+rdi] ++ pxor xmm3,xmm11 ++ movdqu xmm6,XMMWORD[64+rdi] ++ lea rdi,[80+rdi] ++ pxor xmm4,xmm12 ++ pxor xmm5,xmm13 ++ pxor xmm6,xmm14 ++ ++ call _aesni_decrypt6 ++ ++ xorps xmm2,xmm10 ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ movdqu XMMWORD[rsi],xmm2 ++ xorps xmm5,xmm13 ++ movdqu XMMWORD[16+rsi],xmm3 ++ xorps xmm6,xmm14 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm14,xmm14 ++ movdqu XMMWORD[48+rsi],xmm5 ++ pcmpgtd xmm14,xmm15 ++ movdqu XMMWORD[64+rsi],xmm6 ++ lea rsi,[80+rsi] ++ pshufd xmm11,xmm14,0x13 ++ and r9,15 ++ jz NEAR $L$xts_dec_ret ++ ++ movdqa xmm10,xmm15 ++ paddq xmm15,xmm15 ++ pand xmm11,xmm8 ++ pxor xmm11,xmm15 ++ jmp NEAR $L$xts_dec_done2 ++ ++ALIGN 16 ++$L$xts_dec_one: ++ movups xmm2,XMMWORD[rdi] ++ lea rdi,[16+rdi] ++ xorps xmm2,xmm10 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_dec1_12: ++DB 102,15,56,222,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_dec1_12 ++DB 102,15,56,223,209 ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm11 ++ movups XMMWORD[rsi],xmm2 ++ movdqa xmm11,xmm12 ++ lea rsi,[16+rsi] ++ jmp NEAR $L$xts_dec_done ++ ++ALIGN 16 ++$L$xts_dec_two: ++ movups xmm2,XMMWORD[rdi] ++ movups xmm3,XMMWORD[16+rdi] ++ lea rdi,[32+rdi] ++ xorps xmm2,xmm10 ++ xorps xmm3,xmm11 ++ ++ call _aesni_decrypt2 ++ ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm12 ++ xorps xmm3,xmm11 ++ movdqa xmm11,xmm13 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ lea rsi,[32+rsi] ++ jmp NEAR $L$xts_dec_done ++ ++ALIGN 16 ++$L$xts_dec_three: ++ movups xmm2,XMMWORD[rdi] ++ movups xmm3,XMMWORD[16+rdi] ++ movups xmm4,XMMWORD[32+rdi] ++ lea rdi,[48+rdi] ++ xorps xmm2,xmm10 ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ ++ call _aesni_decrypt3 ++ ++ xorps xmm2,xmm10 ++ movdqa xmm10,xmm13 ++ xorps xmm3,xmm11 ++ movdqa xmm11,xmm14 ++ xorps xmm4,xmm12 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ lea rsi,[48+rsi] ++ jmp NEAR $L$xts_dec_done ++ ++ALIGN 16 ++$L$xts_dec_four: ++ movups xmm2,XMMWORD[rdi] ++ movups xmm3,XMMWORD[16+rdi] ++ movups xmm4,XMMWORD[32+rdi] ++ xorps xmm2,xmm10 ++ movups xmm5,XMMWORD[48+rdi] ++ lea rdi,[64+rdi] ++ xorps xmm3,xmm11 ++ xorps xmm4,xmm12 ++ xorps xmm5,xmm13 ++ ++ call _aesni_decrypt4 ++ ++ pxor xmm2,xmm10 ++ movdqa xmm10,xmm14 ++ pxor xmm3,xmm11 ++ movdqa xmm11,xmm15 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[16+rsi],xmm3 ++ movdqu XMMWORD[32+rsi],xmm4 ++ movdqu XMMWORD[48+rsi],xmm5 ++ lea rsi,[64+rsi] ++ jmp NEAR $L$xts_dec_done ++ ++ALIGN 16 ++$L$xts_dec_done: ++ and r9,15 ++ jz NEAR $L$xts_dec_ret ++$L$xts_dec_done2: ++ mov rdx,r9 ++ mov rcx,r11 ++ mov eax,r10d ++ ++ movups xmm2,XMMWORD[rdi] ++ xorps xmm2,xmm11 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_dec1_13: ++DB 102,15,56,222,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_dec1_13 ++DB 102,15,56,223,209 ++ xorps xmm2,xmm11 ++ movups XMMWORD[rsi],xmm2 ++ ++$L$xts_dec_steal: ++ movzx eax,BYTE[16+rdi] ++ movzx ecx,BYTE[rsi] ++ lea rdi,[1+rdi] ++ mov BYTE[rsi],al ++ mov BYTE[16+rsi],cl ++ lea rsi,[1+rsi] ++ sub rdx,1 ++ jnz NEAR $L$xts_dec_steal ++ ++ sub rsi,r9 ++ mov rcx,r11 ++ mov eax,r10d ++ ++ movups xmm2,XMMWORD[rsi] ++ xorps xmm2,xmm10 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_dec1_14: ++DB 102,15,56,222,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_dec1_14 ++DB 102,15,56,223,209 ++ xorps xmm2,xmm10 ++ movups XMMWORD[rsi],xmm2 ++ ++$L$xts_dec_ret: ++ xorps xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ movaps xmm6,XMMWORD[((-160))+rbp] ++ movaps XMMWORD[(-160)+rbp],xmm0 ++ movaps xmm7,XMMWORD[((-144))+rbp] ++ movaps XMMWORD[(-144)+rbp],xmm0 ++ movaps xmm8,XMMWORD[((-128))+rbp] ++ movaps XMMWORD[(-128)+rbp],xmm0 ++ movaps xmm9,XMMWORD[((-112))+rbp] ++ movaps XMMWORD[(-112)+rbp],xmm0 ++ movaps xmm10,XMMWORD[((-96))+rbp] ++ movaps XMMWORD[(-96)+rbp],xmm0 ++ movaps xmm11,XMMWORD[((-80))+rbp] ++ movaps XMMWORD[(-80)+rbp],xmm0 ++ movaps xmm12,XMMWORD[((-64))+rbp] ++ movaps XMMWORD[(-64)+rbp],xmm0 ++ movaps xmm13,XMMWORD[((-48))+rbp] ++ movaps XMMWORD[(-48)+rbp],xmm0 ++ movaps xmm14,XMMWORD[((-32))+rbp] ++ movaps XMMWORD[(-32)+rbp],xmm0 ++ movaps xmm15,XMMWORD[((-16))+rbp] ++ movaps XMMWORD[(-16)+rbp],xmm0 ++ movaps XMMWORD[rsp],xmm0 ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps XMMWORD[48+rsp],xmm0 ++ movaps XMMWORD[64+rsp],xmm0 ++ movaps XMMWORD[80+rsp],xmm0 ++ movaps XMMWORD[96+rsp],xmm0 ++ lea rsp,[rbp] ++ pop rbp ++$L$xts_dec_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_xts_decrypt: ++global aesni_ocb_encrypt ++ ++ALIGN 32 ++aesni_ocb_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_ocb_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ lea rax,[rsp] ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ lea rsp,[((-160))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++ movaps XMMWORD[64+rsp],xmm10 ++ movaps XMMWORD[80+rsp],xmm11 ++ movaps XMMWORD[96+rsp],xmm12 ++ movaps XMMWORD[112+rsp],xmm13 ++ movaps XMMWORD[128+rsp],xmm14 ++ movaps XMMWORD[144+rsp],xmm15 ++$L$ocb_enc_body: ++ mov rbx,QWORD[56+rax] ++ mov rbp,QWORD[((56+8))+rax] ++ ++ mov r10d,DWORD[240+rcx] ++ mov r11,rcx ++ shl r10d,4 ++ movups xmm9,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+r10*1+rcx] ++ ++ movdqu xmm15,XMMWORD[r9] ++ pxor xmm9,xmm1 ++ pxor xmm15,xmm1 ++ ++ mov eax,16+32 ++ lea rcx,[32+r10*1+r11] ++ movups xmm1,XMMWORD[16+r11] ++ sub rax,r10 ++ mov r10,rax ++ ++ movdqu xmm10,XMMWORD[rbx] ++ movdqu xmm8,XMMWORD[rbp] ++ ++ test r8,1 ++ jnz NEAR $L$ocb_enc_odd ++ ++ bsf r12,r8 ++ add r8,1 ++ shl r12,4 ++ movdqu xmm7,XMMWORD[r12*1+rbx] ++ movdqu xmm2,XMMWORD[rdi] ++ lea rdi,[16+rdi] ++ ++ call __ocb_encrypt1 ++ ++ movdqa xmm15,xmm7 ++ movups XMMWORD[rsi],xmm2 ++ lea rsi,[16+rsi] ++ sub rdx,1 ++ jz NEAR $L$ocb_enc_done ++ ++$L$ocb_enc_odd: ++ lea r12,[1+r8] ++ lea r13,[3+r8] ++ lea r14,[5+r8] ++ lea r8,[6+r8] ++ bsf r12,r12 ++ bsf r13,r13 ++ bsf r14,r14 ++ shl r12,4 ++ shl r13,4 ++ shl r14,4 ++ ++ sub rdx,6 ++ jc NEAR $L$ocb_enc_short ++ jmp NEAR $L$ocb_enc_grandloop ++ ++ALIGN 32 ++$L$ocb_enc_grandloop: ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqu xmm4,XMMWORD[32+rdi] ++ movdqu xmm5,XMMWORD[48+rdi] ++ movdqu xmm6,XMMWORD[64+rdi] ++ movdqu xmm7,XMMWORD[80+rdi] ++ lea rdi,[96+rdi] ++ ++ call __ocb_encrypt6 ++ ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ lea rsi,[96+rsi] ++ sub rdx,6 ++ jnc NEAR $L$ocb_enc_grandloop ++ ++$L$ocb_enc_short: ++ add rdx,6 ++ jz NEAR $L$ocb_enc_done ++ ++ movdqu xmm2,XMMWORD[rdi] ++ cmp rdx,2 ++ jb NEAR $L$ocb_enc_one ++ movdqu xmm3,XMMWORD[16+rdi] ++ je NEAR $L$ocb_enc_two ++ ++ movdqu xmm4,XMMWORD[32+rdi] ++ cmp rdx,4 ++ jb NEAR $L$ocb_enc_three ++ movdqu xmm5,XMMWORD[48+rdi] ++ je NEAR $L$ocb_enc_four ++ ++ movdqu xmm6,XMMWORD[64+rdi] ++ pxor xmm7,xmm7 ++ ++ call __ocb_encrypt6 ++ ++ movdqa xmm15,xmm14 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ ++ jmp NEAR $L$ocb_enc_done ++ ++ALIGN 16 ++$L$ocb_enc_one: ++ movdqa xmm7,xmm10 ++ ++ call __ocb_encrypt1 ++ ++ movdqa xmm15,xmm7 ++ movups XMMWORD[rsi],xmm2 ++ jmp NEAR $L$ocb_enc_done ++ ++ALIGN 16 ++$L$ocb_enc_two: ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ ++ call __ocb_encrypt4 ++ ++ movdqa xmm15,xmm11 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ ++ jmp NEAR $L$ocb_enc_done ++ ++ALIGN 16 ++$L$ocb_enc_three: ++ pxor xmm5,xmm5 ++ ++ call __ocb_encrypt4 ++ ++ movdqa xmm15,xmm12 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ ++ jmp NEAR $L$ocb_enc_done ++ ++ALIGN 16 ++$L$ocb_enc_four: ++ call __ocb_encrypt4 ++ ++ movdqa xmm15,xmm13 ++ movups XMMWORD[rsi],xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ ++$L$ocb_enc_done: ++ pxor xmm15,xmm0 ++ movdqu XMMWORD[rbp],xmm8 ++ movdqu XMMWORD[r9],xmm15 ++ ++ xorps xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ movaps xmm6,XMMWORD[rsp] ++ movaps XMMWORD[rsp],xmm0 ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps XMMWORD[48+rsp],xmm0 ++ movaps xmm10,XMMWORD[64+rsp] ++ movaps XMMWORD[64+rsp],xmm0 ++ movaps xmm11,XMMWORD[80+rsp] ++ movaps XMMWORD[80+rsp],xmm0 ++ movaps xmm12,XMMWORD[96+rsp] ++ movaps XMMWORD[96+rsp],xmm0 ++ movaps xmm13,XMMWORD[112+rsp] ++ movaps XMMWORD[112+rsp],xmm0 ++ movaps xmm14,XMMWORD[128+rsp] ++ movaps XMMWORD[128+rsp],xmm0 ++ movaps xmm15,XMMWORD[144+rsp] ++ movaps XMMWORD[144+rsp],xmm0 ++ lea rax,[((160+40))+rsp] ++$L$ocb_enc_pop: ++ lea rsp,[160+rsp] ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++$L$ocb_enc_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_ocb_encrypt: ++ ++ ++ALIGN 32 ++__ocb_encrypt6: ++ pxor xmm15,xmm9 ++ movdqu xmm11,XMMWORD[r12*1+rbx] ++ movdqa xmm12,xmm10 ++ movdqu xmm13,XMMWORD[r13*1+rbx] ++ movdqa xmm14,xmm10 ++ pxor xmm10,xmm15 ++ movdqu xmm15,XMMWORD[r14*1+rbx] ++ pxor xmm11,xmm10 ++ pxor xmm8,xmm2 ++ pxor xmm2,xmm10 ++ pxor xmm12,xmm11 ++ pxor xmm8,xmm3 ++ pxor xmm3,xmm11 ++ pxor xmm13,xmm12 ++ pxor xmm8,xmm4 ++ pxor xmm4,xmm12 ++ pxor xmm14,xmm13 ++ pxor xmm8,xmm5 ++ pxor xmm5,xmm13 ++ pxor xmm15,xmm14 ++ pxor xmm8,xmm6 ++ pxor xmm6,xmm14 ++ pxor xmm8,xmm7 ++ pxor xmm7,xmm15 ++ movups xmm0,XMMWORD[32+r11] ++ ++ lea r12,[1+r8] ++ lea r13,[3+r8] ++ lea r14,[5+r8] ++ add r8,6 ++ pxor xmm10,xmm9 ++ bsf r12,r12 ++ bsf r13,r13 ++ bsf r14,r14 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ pxor xmm11,xmm9 ++ pxor xmm12,xmm9 ++DB 102,15,56,220,241 ++ pxor xmm13,xmm9 ++ pxor xmm14,xmm9 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[48+r11] ++ pxor xmm15,xmm9 ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[64+r11] ++ shl r12,4 ++ shl r13,4 ++ jmp NEAR $L$ocb_enc_loop6 ++ ++ALIGN 32 ++$L$ocb_enc_loop6: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++DB 102,15,56,220,240 ++DB 102,15,56,220,248 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ocb_enc_loop6 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++DB 102,15,56,220,241 ++DB 102,15,56,220,249 ++ movups xmm1,XMMWORD[16+r11] ++ shl r14,4 ++ ++DB 102,65,15,56,221,210 ++ movdqu xmm10,XMMWORD[rbx] ++ mov rax,r10 ++DB 102,65,15,56,221,219 ++DB 102,65,15,56,221,228 ++DB 102,65,15,56,221,237 ++DB 102,65,15,56,221,246 ++DB 102,65,15,56,221,255 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ALIGN 32 ++__ocb_encrypt4: ++ pxor xmm15,xmm9 ++ movdqu xmm11,XMMWORD[r12*1+rbx] ++ movdqa xmm12,xmm10 ++ movdqu xmm13,XMMWORD[r13*1+rbx] ++ pxor xmm10,xmm15 ++ pxor xmm11,xmm10 ++ pxor xmm8,xmm2 ++ pxor xmm2,xmm10 ++ pxor xmm12,xmm11 ++ pxor xmm8,xmm3 ++ pxor xmm3,xmm11 ++ pxor xmm13,xmm12 ++ pxor xmm8,xmm4 ++ pxor xmm4,xmm12 ++ pxor xmm8,xmm5 ++ pxor xmm5,xmm13 ++ movups xmm0,XMMWORD[32+r11] ++ ++ pxor xmm10,xmm9 ++ pxor xmm11,xmm9 ++ pxor xmm12,xmm9 ++ pxor xmm13,xmm9 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ movups xmm1,XMMWORD[48+r11] ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ movups xmm0,XMMWORD[64+r11] ++ jmp NEAR $L$ocb_enc_loop4 ++ ++ALIGN 32 ++$L$ocb_enc_loop4: ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,220,208 ++DB 102,15,56,220,216 ++DB 102,15,56,220,224 ++DB 102,15,56,220,232 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ocb_enc_loop4 ++ ++DB 102,15,56,220,209 ++DB 102,15,56,220,217 ++DB 102,15,56,220,225 ++DB 102,15,56,220,233 ++ movups xmm1,XMMWORD[16+r11] ++ mov rax,r10 ++ ++DB 102,65,15,56,221,210 ++DB 102,65,15,56,221,219 ++DB 102,65,15,56,221,228 ++DB 102,65,15,56,221,237 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ALIGN 32 ++__ocb_encrypt1: ++ pxor xmm7,xmm15 ++ pxor xmm7,xmm9 ++ pxor xmm8,xmm2 ++ pxor xmm2,xmm7 ++ movups xmm0,XMMWORD[32+r11] ++ ++DB 102,15,56,220,209 ++ movups xmm1,XMMWORD[48+r11] ++ pxor xmm7,xmm9 ++ ++DB 102,15,56,220,208 ++ movups xmm0,XMMWORD[64+r11] ++ jmp NEAR $L$ocb_enc_loop1 ++ ++ALIGN 32 ++$L$ocb_enc_loop1: ++DB 102,15,56,220,209 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,220,208 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ocb_enc_loop1 ++ ++DB 102,15,56,220,209 ++ movups xmm1,XMMWORD[16+r11] ++ mov rax,r10 ++ ++DB 102,15,56,221,215 ++ DB 0F3h,0C3h ;repret ++ ++ ++global aesni_ocb_decrypt ++ ++ALIGN 32 ++aesni_ocb_decrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_ocb_decrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ lea rax,[rsp] ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ lea rsp,[((-160))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++ movaps XMMWORD[64+rsp],xmm10 ++ movaps XMMWORD[80+rsp],xmm11 ++ movaps XMMWORD[96+rsp],xmm12 ++ movaps XMMWORD[112+rsp],xmm13 ++ movaps XMMWORD[128+rsp],xmm14 ++ movaps XMMWORD[144+rsp],xmm15 ++$L$ocb_dec_body: ++ mov rbx,QWORD[56+rax] ++ mov rbp,QWORD[((56+8))+rax] ++ ++ mov r10d,DWORD[240+rcx] ++ mov r11,rcx ++ shl r10d,4 ++ movups xmm9,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+r10*1+rcx] ++ ++ movdqu xmm15,XMMWORD[r9] ++ pxor xmm9,xmm1 ++ pxor xmm15,xmm1 ++ ++ mov eax,16+32 ++ lea rcx,[32+r10*1+r11] ++ movups xmm1,XMMWORD[16+r11] ++ sub rax,r10 ++ mov r10,rax ++ ++ movdqu xmm10,XMMWORD[rbx] ++ movdqu xmm8,XMMWORD[rbp] ++ ++ test r8,1 ++ jnz NEAR $L$ocb_dec_odd ++ ++ bsf r12,r8 ++ add r8,1 ++ shl r12,4 ++ movdqu xmm7,XMMWORD[r12*1+rbx] ++ movdqu xmm2,XMMWORD[rdi] ++ lea rdi,[16+rdi] ++ ++ call __ocb_decrypt1 ++ ++ movdqa xmm15,xmm7 ++ movups XMMWORD[rsi],xmm2 ++ xorps xmm8,xmm2 ++ lea rsi,[16+rsi] ++ sub rdx,1 ++ jz NEAR $L$ocb_dec_done ++ ++$L$ocb_dec_odd: ++ lea r12,[1+r8] ++ lea r13,[3+r8] ++ lea r14,[5+r8] ++ lea r8,[6+r8] ++ bsf r12,r12 ++ bsf r13,r13 ++ bsf r14,r14 ++ shl r12,4 ++ shl r13,4 ++ shl r14,4 ++ ++ sub rdx,6 ++ jc NEAR $L$ocb_dec_short ++ jmp NEAR $L$ocb_dec_grandloop ++ ++ALIGN 32 ++$L$ocb_dec_grandloop: ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqu xmm4,XMMWORD[32+rdi] ++ movdqu xmm5,XMMWORD[48+rdi] ++ movdqu xmm6,XMMWORD[64+rdi] ++ movdqu xmm7,XMMWORD[80+rdi] ++ lea rdi,[96+rdi] ++ ++ call __ocb_decrypt6 ++ ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm8,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm8,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm8,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm8,xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ pxor xmm8,xmm6 ++ movups XMMWORD[80+rsi],xmm7 ++ pxor xmm8,xmm7 ++ lea rsi,[96+rsi] ++ sub rdx,6 ++ jnc NEAR $L$ocb_dec_grandloop ++ ++$L$ocb_dec_short: ++ add rdx,6 ++ jz NEAR $L$ocb_dec_done ++ ++ movdqu xmm2,XMMWORD[rdi] ++ cmp rdx,2 ++ jb NEAR $L$ocb_dec_one ++ movdqu xmm3,XMMWORD[16+rdi] ++ je NEAR $L$ocb_dec_two ++ ++ movdqu xmm4,XMMWORD[32+rdi] ++ cmp rdx,4 ++ jb NEAR $L$ocb_dec_three ++ movdqu xmm5,XMMWORD[48+rdi] ++ je NEAR $L$ocb_dec_four ++ ++ movdqu xmm6,XMMWORD[64+rdi] ++ pxor xmm7,xmm7 ++ ++ call __ocb_decrypt6 ++ ++ movdqa xmm15,xmm14 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm8,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm8,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm8,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm8,xmm5 ++ movups XMMWORD[64+rsi],xmm6 ++ pxor xmm8,xmm6 ++ ++ jmp NEAR $L$ocb_dec_done ++ ++ALIGN 16 ++$L$ocb_dec_one: ++ movdqa xmm7,xmm10 ++ ++ call __ocb_decrypt1 ++ ++ movdqa xmm15,xmm7 ++ movups XMMWORD[rsi],xmm2 ++ xorps xmm8,xmm2 ++ jmp NEAR $L$ocb_dec_done ++ ++ALIGN 16 ++$L$ocb_dec_two: ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ ++ call __ocb_decrypt4 ++ ++ movdqa xmm15,xmm11 ++ movups XMMWORD[rsi],xmm2 ++ xorps xmm8,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ xorps xmm8,xmm3 ++ ++ jmp NEAR $L$ocb_dec_done ++ ++ALIGN 16 ++$L$ocb_dec_three: ++ pxor xmm5,xmm5 ++ ++ call __ocb_decrypt4 ++ ++ movdqa xmm15,xmm12 ++ movups XMMWORD[rsi],xmm2 ++ xorps xmm8,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ xorps xmm8,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ xorps xmm8,xmm4 ++ ++ jmp NEAR $L$ocb_dec_done ++ ++ALIGN 16 ++$L$ocb_dec_four: ++ call __ocb_decrypt4 ++ ++ movdqa xmm15,xmm13 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm8,xmm2 ++ movups XMMWORD[16+rsi],xmm3 ++ pxor xmm8,xmm3 ++ movups XMMWORD[32+rsi],xmm4 ++ pxor xmm8,xmm4 ++ movups XMMWORD[48+rsi],xmm5 ++ pxor xmm8,xmm5 ++ ++$L$ocb_dec_done: ++ pxor xmm15,xmm0 ++ movdqu XMMWORD[rbp],xmm8 ++ movdqu XMMWORD[r9],xmm15 ++ ++ xorps xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ movaps xmm6,XMMWORD[rsp] ++ movaps XMMWORD[rsp],xmm0 ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps XMMWORD[48+rsp],xmm0 ++ movaps xmm10,XMMWORD[64+rsp] ++ movaps XMMWORD[64+rsp],xmm0 ++ movaps xmm11,XMMWORD[80+rsp] ++ movaps XMMWORD[80+rsp],xmm0 ++ movaps xmm12,XMMWORD[96+rsp] ++ movaps XMMWORD[96+rsp],xmm0 ++ movaps xmm13,XMMWORD[112+rsp] ++ movaps XMMWORD[112+rsp],xmm0 ++ movaps xmm14,XMMWORD[128+rsp] ++ movaps XMMWORD[128+rsp],xmm0 ++ movaps xmm15,XMMWORD[144+rsp] ++ movaps XMMWORD[144+rsp],xmm0 ++ lea rax,[((160+40))+rsp] ++$L$ocb_dec_pop: ++ lea rsp,[160+rsp] ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++$L$ocb_dec_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_ocb_decrypt: ++ ++ ++ALIGN 32 ++__ocb_decrypt6: ++ pxor xmm15,xmm9 ++ movdqu xmm11,XMMWORD[r12*1+rbx] ++ movdqa xmm12,xmm10 ++ movdqu xmm13,XMMWORD[r13*1+rbx] ++ movdqa xmm14,xmm10 ++ pxor xmm10,xmm15 ++ movdqu xmm15,XMMWORD[r14*1+rbx] ++ pxor xmm11,xmm10 ++ pxor xmm2,xmm10 ++ pxor xmm12,xmm11 ++ pxor xmm3,xmm11 ++ pxor xmm13,xmm12 ++ pxor xmm4,xmm12 ++ pxor xmm14,xmm13 ++ pxor xmm5,xmm13 ++ pxor xmm15,xmm14 ++ pxor xmm6,xmm14 ++ pxor xmm7,xmm15 ++ movups xmm0,XMMWORD[32+r11] ++ ++ lea r12,[1+r8] ++ lea r13,[3+r8] ++ lea r14,[5+r8] ++ add r8,6 ++ pxor xmm10,xmm9 ++ bsf r12,r12 ++ bsf r13,r13 ++ bsf r14,r14 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ pxor xmm11,xmm9 ++ pxor xmm12,xmm9 ++DB 102,15,56,222,241 ++ pxor xmm13,xmm9 ++ pxor xmm14,xmm9 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[48+r11] ++ pxor xmm15,xmm9 ++ ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++ movups xmm0,XMMWORD[64+r11] ++ shl r12,4 ++ shl r13,4 ++ jmp NEAR $L$ocb_dec_loop6 ++ ++ALIGN 32 ++$L$ocb_dec_loop6: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ocb_dec_loop6 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++ movups xmm1,XMMWORD[16+r11] ++ shl r14,4 ++ ++DB 102,65,15,56,223,210 ++ movdqu xmm10,XMMWORD[rbx] ++ mov rax,r10 ++DB 102,65,15,56,223,219 ++DB 102,65,15,56,223,228 ++DB 102,65,15,56,223,237 ++DB 102,65,15,56,223,246 ++DB 102,65,15,56,223,255 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ALIGN 32 ++__ocb_decrypt4: ++ pxor xmm15,xmm9 ++ movdqu xmm11,XMMWORD[r12*1+rbx] ++ movdqa xmm12,xmm10 ++ movdqu xmm13,XMMWORD[r13*1+rbx] ++ pxor xmm10,xmm15 ++ pxor xmm11,xmm10 ++ pxor xmm2,xmm10 ++ pxor xmm12,xmm11 ++ pxor xmm3,xmm11 ++ pxor xmm13,xmm12 ++ pxor xmm4,xmm12 ++ pxor xmm5,xmm13 ++ movups xmm0,XMMWORD[32+r11] ++ ++ pxor xmm10,xmm9 ++ pxor xmm11,xmm9 ++ pxor xmm12,xmm9 ++ pxor xmm13,xmm9 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ movups xmm1,XMMWORD[48+r11] ++ ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++ movups xmm0,XMMWORD[64+r11] ++ jmp NEAR $L$ocb_dec_loop4 ++ ++ALIGN 32 ++$L$ocb_dec_loop4: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ocb_dec_loop4 ++ ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ movups xmm1,XMMWORD[16+r11] ++ mov rax,r10 ++ ++DB 102,65,15,56,223,210 ++DB 102,65,15,56,223,219 ++DB 102,65,15,56,223,228 ++DB 102,65,15,56,223,237 ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ALIGN 32 ++__ocb_decrypt1: ++ pxor xmm7,xmm15 ++ pxor xmm7,xmm9 ++ pxor xmm2,xmm7 ++ movups xmm0,XMMWORD[32+r11] ++ ++DB 102,15,56,222,209 ++ movups xmm1,XMMWORD[48+r11] ++ pxor xmm7,xmm9 ++ ++DB 102,15,56,222,208 ++ movups xmm0,XMMWORD[64+r11] ++ jmp NEAR $L$ocb_dec_loop1 ++ ++ALIGN 32 ++$L$ocb_dec_loop1: ++DB 102,15,56,222,209 ++ movups xmm1,XMMWORD[rax*1+rcx] ++ add rax,32 ++ ++DB 102,15,56,222,208 ++ movups xmm0,XMMWORD[((-16))+rax*1+rcx] ++ jnz NEAR $L$ocb_dec_loop1 ++ ++DB 102,15,56,222,209 ++ movups xmm1,XMMWORD[16+r11] ++ mov rax,r10 ++ ++DB 102,15,56,223,215 ++ DB 0F3h,0C3h ;repret ++ ++global aesni_cbc_encrypt ++ ++ALIGN 16 ++aesni_cbc_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_aesni_cbc_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ test rdx,rdx ++ jz NEAR $L$cbc_ret ++ ++ mov r10d,DWORD[240+rcx] ++ mov r11,rcx ++ test r9d,r9d ++ jz NEAR $L$cbc_decrypt ++ ++ movups xmm2,XMMWORD[r8] ++ mov eax,r10d ++ cmp rdx,16 ++ jb NEAR $L$cbc_enc_tail ++ sub rdx,16 ++ jmp NEAR $L$cbc_enc_loop ++ALIGN 16 ++$L$cbc_enc_loop: ++ movups xmm3,XMMWORD[rdi] ++ lea rdi,[16+rdi] ++ ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ xorps xmm3,xmm0 ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm3 ++$L$oop_enc1_15: ++DB 102,15,56,220,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_enc1_15 ++DB 102,15,56,221,209 ++ mov eax,r10d ++ mov rcx,r11 ++ movups XMMWORD[rsi],xmm2 ++ lea rsi,[16+rsi] ++ sub rdx,16 ++ jnc NEAR $L$cbc_enc_loop ++ add rdx,16 ++ jnz NEAR $L$cbc_enc_tail ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movups XMMWORD[r8],xmm2 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ jmp NEAR $L$cbc_ret ++ ++$L$cbc_enc_tail: ++ mov rcx,rdx ++ xchg rsi,rdi ++ DD 0x9066A4F3 ++ mov ecx,16 ++ sub rcx,rdx ++ xor eax,eax ++ DD 0x9066AAF3 ++ lea rdi,[((-16))+rdi] ++ mov eax,r10d ++ mov rsi,rdi ++ mov rcx,r11 ++ xor rdx,rdx ++ jmp NEAR $L$cbc_enc_loop ++ ++ALIGN 16 ++$L$cbc_decrypt: ++ cmp rdx,16 ++ jne NEAR $L$cbc_decrypt_bulk ++ ++ ++ ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[r8] ++ movdqa xmm4,xmm2 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_dec1_16: ++DB 102,15,56,222,209 ++ dec r10d ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_dec1_16 ++DB 102,15,56,223,209 ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movdqu XMMWORD[r8],xmm4 ++ xorps xmm2,xmm3 ++ pxor xmm3,xmm3 ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ jmp NEAR $L$cbc_ret ++ALIGN 16 ++$L$cbc_decrypt_bulk: ++ lea rax,[rsp] ++ push rbp ++ sub rsp,176 ++ and rsp,-16 ++ movaps XMMWORD[16+rsp],xmm6 ++ movaps XMMWORD[32+rsp],xmm7 ++ movaps XMMWORD[48+rsp],xmm8 ++ movaps XMMWORD[64+rsp],xmm9 ++ movaps XMMWORD[80+rsp],xmm10 ++ movaps XMMWORD[96+rsp],xmm11 ++ movaps XMMWORD[112+rsp],xmm12 ++ movaps XMMWORD[128+rsp],xmm13 ++ movaps XMMWORD[144+rsp],xmm14 ++ movaps XMMWORD[160+rsp],xmm15 ++$L$cbc_decrypt_body: ++ lea rbp,[((-8))+rax] ++ movups xmm10,XMMWORD[r8] ++ mov eax,r10d ++ cmp rdx,0x50 ++ jbe NEAR $L$cbc_dec_tail ++ ++ movups xmm0,XMMWORD[rcx] ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqa xmm11,xmm2 ++ movdqu xmm4,XMMWORD[32+rdi] ++ movdqa xmm12,xmm3 ++ movdqu xmm5,XMMWORD[48+rdi] ++ movdqa xmm13,xmm4 ++ movdqu xmm6,XMMWORD[64+rdi] ++ movdqa xmm14,xmm5 ++ movdqu xmm7,XMMWORD[80+rdi] ++ movdqa xmm15,xmm6 ++ mov r9d,DWORD[((_gnutls_x86_cpuid_s+4))] ++ cmp rdx,0x70 ++ jbe NEAR $L$cbc_dec_six_or_seven ++ ++ and r9d,71303168 ++ sub rdx,0x50 ++ cmp r9d,4194304 ++ je NEAR $L$cbc_dec_loop6_enter ++ sub rdx,0x20 ++ lea rcx,[112+rcx] ++ jmp NEAR $L$cbc_dec_loop8_enter ++ALIGN 16 ++$L$cbc_dec_loop8: ++ movups XMMWORD[rsi],xmm9 ++ lea rsi,[16+rsi] ++$L$cbc_dec_loop8_enter: ++ movdqu xmm8,XMMWORD[96+rdi] ++ pxor xmm2,xmm0 ++ movdqu xmm9,XMMWORD[112+rdi] ++ pxor xmm3,xmm0 ++ movups xmm1,XMMWORD[((16-112))+rcx] ++ pxor xmm4,xmm0 ++ xor r11,r11 ++ cmp rdx,0x70 ++ pxor xmm5,xmm0 ++ pxor xmm6,xmm0 ++ pxor xmm7,xmm0 ++ pxor xmm8,xmm0 ++ ++DB 102,15,56,222,209 ++ pxor xmm9,xmm0 ++ movups xmm0,XMMWORD[((32-112))+rcx] ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++ setnc r11b ++ shl r11,7 ++DB 102,68,15,56,222,201 ++ add r11,rdi ++ movups xmm1,XMMWORD[((48-112))+rcx] ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((64-112))+rcx] ++ nop ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++ movups xmm1,XMMWORD[((80-112))+rcx] ++ nop ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((96-112))+rcx] ++ nop ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++ movups xmm1,XMMWORD[((112-112))+rcx] ++ nop ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((128-112))+rcx] ++ nop ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++ movups xmm1,XMMWORD[((144-112))+rcx] ++ cmp eax,11 ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((160-112))+rcx] ++ jb NEAR $L$cbc_dec_done ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++ movups xmm1,XMMWORD[((176-112))+rcx] ++ nop ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((192-112))+rcx] ++ je NEAR $L$cbc_dec_done ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++ movups xmm1,XMMWORD[((208-112))+rcx] ++ nop ++DB 102,15,56,222,208 ++DB 102,15,56,222,216 ++DB 102,15,56,222,224 ++DB 102,15,56,222,232 ++DB 102,15,56,222,240 ++DB 102,15,56,222,248 ++DB 102,68,15,56,222,192 ++DB 102,68,15,56,222,200 ++ movups xmm0,XMMWORD[((224-112))+rcx] ++ jmp NEAR $L$cbc_dec_done ++ALIGN 16 ++$L$cbc_dec_done: ++DB 102,15,56,222,209 ++DB 102,15,56,222,217 ++ pxor xmm10,xmm0 ++ pxor xmm11,xmm0 ++DB 102,15,56,222,225 ++DB 102,15,56,222,233 ++ pxor xmm12,xmm0 ++ pxor xmm13,xmm0 ++DB 102,15,56,222,241 ++DB 102,15,56,222,249 ++ pxor xmm14,xmm0 ++ pxor xmm15,xmm0 ++DB 102,68,15,56,222,193 ++DB 102,68,15,56,222,201 ++ movdqu xmm1,XMMWORD[80+rdi] ++ ++DB 102,65,15,56,223,210 ++ movdqu xmm10,XMMWORD[96+rdi] ++ pxor xmm1,xmm0 ++DB 102,65,15,56,223,219 ++ pxor xmm10,xmm0 ++ movdqu xmm0,XMMWORD[112+rdi] ++DB 102,65,15,56,223,228 ++ lea rdi,[128+rdi] ++ movdqu xmm11,XMMWORD[r11] ++DB 102,65,15,56,223,237 ++DB 102,65,15,56,223,246 ++ movdqu xmm12,XMMWORD[16+r11] ++ movdqu xmm13,XMMWORD[32+r11] ++DB 102,65,15,56,223,255 ++DB 102,68,15,56,223,193 ++ movdqu xmm14,XMMWORD[48+r11] ++ movdqu xmm15,XMMWORD[64+r11] ++DB 102,69,15,56,223,202 ++ movdqa xmm10,xmm0 ++ movdqu xmm1,XMMWORD[80+r11] ++ movups xmm0,XMMWORD[((-112))+rcx] ++ ++ movups XMMWORD[rsi],xmm2 ++ movdqa xmm2,xmm11 ++ movups XMMWORD[16+rsi],xmm3 ++ movdqa xmm3,xmm12 ++ movups XMMWORD[32+rsi],xmm4 ++ movdqa xmm4,xmm13 ++ movups XMMWORD[48+rsi],xmm5 ++ movdqa xmm5,xmm14 ++ movups XMMWORD[64+rsi],xmm6 ++ movdqa xmm6,xmm15 ++ movups XMMWORD[80+rsi],xmm7 ++ movdqa xmm7,xmm1 ++ movups XMMWORD[96+rsi],xmm8 ++ lea rsi,[112+rsi] ++ ++ sub rdx,0x80 ++ ja NEAR $L$cbc_dec_loop8 ++ ++ movaps xmm2,xmm9 ++ lea rcx,[((-112))+rcx] ++ add rdx,0x70 ++ jle NEAR $L$cbc_dec_clear_tail_collected ++ movups XMMWORD[rsi],xmm9 ++ lea rsi,[16+rsi] ++ cmp rdx,0x50 ++ jbe NEAR $L$cbc_dec_tail ++ ++ movaps xmm2,xmm11 ++$L$cbc_dec_six_or_seven: ++ cmp rdx,0x60 ++ ja NEAR $L$cbc_dec_seven ++ ++ movaps xmm8,xmm7 ++ call _aesni_decrypt6 ++ pxor xmm2,xmm10 ++ movaps xmm10,xmm8 ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ pxor xmm6,xmm14 ++ movdqu XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ pxor xmm7,xmm15 ++ movdqu XMMWORD[64+rsi],xmm6 ++ pxor xmm6,xmm6 ++ lea rsi,[80+rsi] ++ movdqa xmm2,xmm7 ++ pxor xmm7,xmm7 ++ jmp NEAR $L$cbc_dec_tail_collected ++ ++ALIGN 16 ++$L$cbc_dec_seven: ++ movups xmm8,XMMWORD[96+rdi] ++ xorps xmm9,xmm9 ++ call _aesni_decrypt8 ++ movups xmm9,XMMWORD[80+rdi] ++ pxor xmm2,xmm10 ++ movups xmm10,XMMWORD[96+rdi] ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ pxor xmm6,xmm14 ++ movdqu XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ pxor xmm7,xmm15 ++ movdqu XMMWORD[64+rsi],xmm6 ++ pxor xmm6,xmm6 ++ pxor xmm8,xmm9 ++ movdqu XMMWORD[80+rsi],xmm7 ++ pxor xmm7,xmm7 ++ lea rsi,[96+rsi] ++ movdqa xmm2,xmm8 ++ pxor xmm8,xmm8 ++ pxor xmm9,xmm9 ++ jmp NEAR $L$cbc_dec_tail_collected ++ ++ALIGN 16 ++$L$cbc_dec_loop6: ++ movups XMMWORD[rsi],xmm7 ++ lea rsi,[16+rsi] ++ movdqu xmm2,XMMWORD[rdi] ++ movdqu xmm3,XMMWORD[16+rdi] ++ movdqa xmm11,xmm2 ++ movdqu xmm4,XMMWORD[32+rdi] ++ movdqa xmm12,xmm3 ++ movdqu xmm5,XMMWORD[48+rdi] ++ movdqa xmm13,xmm4 ++ movdqu xmm6,XMMWORD[64+rdi] ++ movdqa xmm14,xmm5 ++ movdqu xmm7,XMMWORD[80+rdi] ++ movdqa xmm15,xmm6 ++$L$cbc_dec_loop6_enter: ++ lea rdi,[96+rdi] ++ movdqa xmm8,xmm7 ++ ++ call _aesni_decrypt6 ++ ++ pxor xmm2,xmm10 ++ movdqa xmm10,xmm8 ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm6,xmm14 ++ mov rcx,r11 ++ movdqu XMMWORD[48+rsi],xmm5 ++ pxor xmm7,xmm15 ++ mov eax,r10d ++ movdqu XMMWORD[64+rsi],xmm6 ++ lea rsi,[80+rsi] ++ sub rdx,0x60 ++ ja NEAR $L$cbc_dec_loop6 ++ ++ movdqa xmm2,xmm7 ++ add rdx,0x50 ++ jle NEAR $L$cbc_dec_clear_tail_collected ++ movups XMMWORD[rsi],xmm7 ++ lea rsi,[16+rsi] ++ ++$L$cbc_dec_tail: ++ movups xmm2,XMMWORD[rdi] ++ sub rdx,0x10 ++ jbe NEAR $L$cbc_dec_one ++ ++ movups xmm3,XMMWORD[16+rdi] ++ movaps xmm11,xmm2 ++ sub rdx,0x10 ++ jbe NEAR $L$cbc_dec_two ++ ++ movups xmm4,XMMWORD[32+rdi] ++ movaps xmm12,xmm3 ++ sub rdx,0x10 ++ jbe NEAR $L$cbc_dec_three ++ ++ movups xmm5,XMMWORD[48+rdi] ++ movaps xmm13,xmm4 ++ sub rdx,0x10 ++ jbe NEAR $L$cbc_dec_four ++ ++ movups xmm6,XMMWORD[64+rdi] ++ movaps xmm14,xmm5 ++ movaps xmm15,xmm6 ++ xorps xmm7,xmm7 ++ call _aesni_decrypt6 ++ pxor xmm2,xmm10 ++ movaps xmm10,xmm15 ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ pxor xmm6,xmm14 ++ movdqu XMMWORD[48+rsi],xmm5 ++ pxor xmm5,xmm5 ++ lea rsi,[64+rsi] ++ movdqa xmm2,xmm6 ++ pxor xmm6,xmm6 ++ pxor xmm7,xmm7 ++ sub rdx,0x10 ++ jmp NEAR $L$cbc_dec_tail_collected ++ ++ALIGN 16 ++$L$cbc_dec_one: ++ movaps xmm11,xmm2 ++ movups xmm0,XMMWORD[rcx] ++ movups xmm1,XMMWORD[16+rcx] ++ lea rcx,[32+rcx] ++ xorps xmm2,xmm0 ++$L$oop_dec1_17: ++DB 102,15,56,222,209 ++ dec eax ++ movups xmm1,XMMWORD[rcx] ++ lea rcx,[16+rcx] ++ jnz NEAR $L$oop_dec1_17 ++DB 102,15,56,223,209 ++ xorps xmm2,xmm10 ++ movaps xmm10,xmm11 ++ jmp NEAR $L$cbc_dec_tail_collected ++ALIGN 16 ++$L$cbc_dec_two: ++ movaps xmm12,xmm3 ++ call _aesni_decrypt2 ++ pxor xmm2,xmm10 ++ movaps xmm10,xmm12 ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ movdqa xmm2,xmm3 ++ pxor xmm3,xmm3 ++ lea rsi,[16+rsi] ++ jmp NEAR $L$cbc_dec_tail_collected ++ALIGN 16 ++$L$cbc_dec_three: ++ movaps xmm13,xmm4 ++ call _aesni_decrypt3 ++ pxor xmm2,xmm10 ++ movaps xmm10,xmm13 ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ movdqa xmm2,xmm4 ++ pxor xmm4,xmm4 ++ lea rsi,[32+rsi] ++ jmp NEAR $L$cbc_dec_tail_collected ++ALIGN 16 ++$L$cbc_dec_four: ++ movaps xmm14,xmm5 ++ call _aesni_decrypt4 ++ pxor xmm2,xmm10 ++ movaps xmm10,xmm14 ++ pxor xmm3,xmm11 ++ movdqu XMMWORD[rsi],xmm2 ++ pxor xmm4,xmm12 ++ movdqu XMMWORD[16+rsi],xmm3 ++ pxor xmm3,xmm3 ++ pxor xmm5,xmm13 ++ movdqu XMMWORD[32+rsi],xmm4 ++ pxor xmm4,xmm4 ++ movdqa xmm2,xmm5 ++ pxor xmm5,xmm5 ++ lea rsi,[48+rsi] ++ jmp NEAR $L$cbc_dec_tail_collected ++ ++ALIGN 16 ++$L$cbc_dec_clear_tail_collected: ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++$L$cbc_dec_tail_collected: ++ movups XMMWORD[r8],xmm10 ++ and rdx,15 ++ jnz NEAR $L$cbc_dec_tail_partial ++ movups XMMWORD[rsi],xmm2 ++ pxor xmm2,xmm2 ++ jmp NEAR $L$cbc_dec_ret ++ALIGN 16 ++$L$cbc_dec_tail_partial: ++ movaps XMMWORD[rsp],xmm2 ++ pxor xmm2,xmm2 ++ mov rcx,16 ++ mov rdi,rsi ++ sub rcx,rdx ++ lea rsi,[rsp] ++ DD 0x9066A4F3 ++ movdqa XMMWORD[rsp],xmm2 ++ ++$L$cbc_dec_ret: ++ xorps xmm0,xmm0 ++ pxor xmm1,xmm1 ++ movaps xmm6,XMMWORD[16+rsp] ++ movaps XMMWORD[16+rsp],xmm0 ++ movaps xmm7,XMMWORD[32+rsp] ++ movaps XMMWORD[32+rsp],xmm0 ++ movaps xmm8,XMMWORD[48+rsp] ++ movaps XMMWORD[48+rsp],xmm0 ++ movaps xmm9,XMMWORD[64+rsp] ++ movaps XMMWORD[64+rsp],xmm0 ++ movaps xmm10,XMMWORD[80+rsp] ++ movaps XMMWORD[80+rsp],xmm0 ++ movaps xmm11,XMMWORD[96+rsp] ++ movaps XMMWORD[96+rsp],xmm0 ++ movaps xmm12,XMMWORD[112+rsp] ++ movaps XMMWORD[112+rsp],xmm0 ++ movaps xmm13,XMMWORD[128+rsp] ++ movaps XMMWORD[128+rsp],xmm0 ++ movaps xmm14,XMMWORD[144+rsp] ++ movaps XMMWORD[144+rsp],xmm0 ++ movaps xmm15,XMMWORD[160+rsp] ++ movaps XMMWORD[160+rsp],xmm0 ++ lea rsp,[rbp] ++ pop rbp ++$L$cbc_ret: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_aesni_cbc_encrypt: ++global aesni_set_decrypt_key ++ ++ALIGN 16 ++aesni_set_decrypt_key: ++DB 0x48,0x83,0xEC,0x08 ++ call __aesni_set_encrypt_key ++ shl edx,4 ++ test eax,eax ++ jnz NEAR $L$dec_key_ret ++ lea rcx,[16+rdx*1+r8] ++ ++ movups xmm0,XMMWORD[r8] ++ movups xmm1,XMMWORD[rcx] ++ movups XMMWORD[rcx],xmm0 ++ movups XMMWORD[r8],xmm1 ++ lea r8,[16+r8] ++ lea rcx,[((-16))+rcx] ++ ++$L$dec_key_inverse: ++ movups xmm0,XMMWORD[r8] ++ movups xmm1,XMMWORD[rcx] ++DB 102,15,56,219,192 ++DB 102,15,56,219,201 ++ lea r8,[16+r8] ++ lea rcx,[((-16))+rcx] ++ movups XMMWORD[16+rcx],xmm0 ++ movups XMMWORD[(-16)+r8],xmm1 ++ cmp rcx,r8 ++ ja NEAR $L$dec_key_inverse ++ ++ movups xmm0,XMMWORD[r8] ++DB 102,15,56,219,192 ++ pxor xmm1,xmm1 ++ movups XMMWORD[rcx],xmm0 ++ pxor xmm0,xmm0 ++$L$dec_key_ret: ++ add rsp,8 ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_set_decrypt_key: ++ ++global aesni_set_encrypt_key ++ ++ALIGN 16 ++aesni_set_encrypt_key: ++__aesni_set_encrypt_key: ++DB 0x48,0x83,0xEC,0x08 ++ mov rax,-1 ++ test rcx,rcx ++ jz NEAR $L$enc_key_ret ++ test r8,r8 ++ jz NEAR $L$enc_key_ret ++ ++ mov r10d,268437504 ++ movups xmm0,XMMWORD[rcx] ++ xorps xmm4,xmm4 ++ and r10d,DWORD[((_gnutls_x86_cpuid_s+4))] ++ lea rax,[16+r8] ++ cmp edx,256 ++ je NEAR $L$14rounds ++ cmp edx,192 ++ je NEAR $L$12rounds ++ cmp edx,128 ++ jne NEAR $L$bad_keybits ++ ++$L$10rounds: ++ mov edx,9 ++ cmp r10d,268435456 ++ je NEAR $L$10rounds_alt ++ ++ movups XMMWORD[r8],xmm0 ++DB 102,15,58,223,200,1 ++ call $L$key_expansion_128_cold ++DB 102,15,58,223,200,2 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,4 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,8 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,16 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,32 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,64 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,128 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,27 ++ call $L$key_expansion_128 ++DB 102,15,58,223,200,54 ++ call $L$key_expansion_128 ++ movups XMMWORD[rax],xmm0 ++ mov DWORD[80+rax],edx ++ xor eax,eax ++ jmp NEAR $L$enc_key_ret ++ ++ALIGN 16 ++$L$10rounds_alt: ++ movdqa xmm5,XMMWORD[$L$key_rotate] ++ mov r10d,8 ++ movdqa xmm4,XMMWORD[$L$key_rcon1] ++ movdqa xmm2,xmm0 ++ movdqu XMMWORD[r8],xmm0 ++ jmp NEAR $L$oop_key128 ++ ++ALIGN 16 ++$L$oop_key128: ++DB 102,15,56,0,197 ++DB 102,15,56,221,196 ++ pslld xmm4,1 ++ lea rax,[16+rax] ++ ++ movdqa xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm2,xmm3 ++ ++ pxor xmm0,xmm2 ++ movdqu XMMWORD[(-16)+rax],xmm0 ++ movdqa xmm2,xmm0 ++ ++ dec r10d ++ jnz NEAR $L$oop_key128 ++ ++ movdqa xmm4,XMMWORD[$L$key_rcon1b] ++ ++DB 102,15,56,0,197 ++DB 102,15,56,221,196 ++ pslld xmm4,1 ++ ++ movdqa xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm2,xmm3 ++ ++ pxor xmm0,xmm2 ++ movdqu XMMWORD[rax],xmm0 ++ ++ movdqa xmm2,xmm0 ++DB 102,15,56,0,197 ++DB 102,15,56,221,196 ++ ++ movdqa xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm3,xmm2 ++ pslldq xmm2,4 ++ pxor xmm2,xmm3 ++ ++ pxor xmm0,xmm2 ++ movdqu XMMWORD[16+rax],xmm0 ++ ++ mov DWORD[96+rax],edx ++ xor eax,eax ++ jmp NEAR $L$enc_key_ret ++ ++ALIGN 16 ++$L$12rounds: ++ movq xmm2,QWORD[16+rcx] ++ mov edx,11 ++ cmp r10d,268435456 ++ je NEAR $L$12rounds_alt ++ ++ movups XMMWORD[r8],xmm0 ++DB 102,15,58,223,202,1 ++ call $L$key_expansion_192a_cold ++DB 102,15,58,223,202,2 ++ call $L$key_expansion_192b ++DB 102,15,58,223,202,4 ++ call $L$key_expansion_192a ++DB 102,15,58,223,202,8 ++ call $L$key_expansion_192b ++DB 102,15,58,223,202,16 ++ call $L$key_expansion_192a ++DB 102,15,58,223,202,32 ++ call $L$key_expansion_192b ++DB 102,15,58,223,202,64 ++ call $L$key_expansion_192a ++DB 102,15,58,223,202,128 ++ call $L$key_expansion_192b ++ movups XMMWORD[rax],xmm0 ++ mov DWORD[48+rax],edx ++ xor rax,rax ++ jmp NEAR $L$enc_key_ret ++ ++ALIGN 16 ++$L$12rounds_alt: ++ movdqa xmm5,XMMWORD[$L$key_rotate192] ++ movdqa xmm4,XMMWORD[$L$key_rcon1] ++ mov r10d,8 ++ movdqu XMMWORD[r8],xmm0 ++ jmp NEAR $L$oop_key192 ++ ++ALIGN 16 ++$L$oop_key192: ++ movq QWORD[rax],xmm2 ++ movdqa xmm1,xmm2 ++DB 102,15,56,0,213 ++DB 102,15,56,221,212 ++ pslld xmm4,1 ++ lea rax,[24+rax] ++ ++ movdqa xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm0,xmm3 ++ ++ pshufd xmm3,xmm0,0xff ++ pxor xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm3,xmm1 ++ ++ pxor xmm0,xmm2 ++ pxor xmm2,xmm3 ++ movdqu XMMWORD[(-16)+rax],xmm0 ++ ++ dec r10d ++ jnz NEAR $L$oop_key192 ++ ++ mov DWORD[32+rax],edx ++ xor eax,eax ++ jmp NEAR $L$enc_key_ret ++ ++ALIGN 16 ++$L$14rounds: ++ movups xmm2,XMMWORD[16+rcx] ++ mov edx,13 ++ lea rax,[16+rax] ++ cmp r10d,268435456 ++ je NEAR $L$14rounds_alt ++ ++ movups XMMWORD[r8],xmm0 ++ movups XMMWORD[16+r8],xmm2 ++DB 102,15,58,223,202,1 ++ call $L$key_expansion_256a_cold ++DB 102,15,58,223,200,1 ++ call $L$key_expansion_256b ++DB 102,15,58,223,202,2 ++ call $L$key_expansion_256a ++DB 102,15,58,223,200,2 ++ call $L$key_expansion_256b ++DB 102,15,58,223,202,4 ++ call $L$key_expansion_256a ++DB 102,15,58,223,200,4 ++ call $L$key_expansion_256b ++DB 102,15,58,223,202,8 ++ call $L$key_expansion_256a ++DB 102,15,58,223,200,8 ++ call $L$key_expansion_256b ++DB 102,15,58,223,202,16 ++ call $L$key_expansion_256a ++DB 102,15,58,223,200,16 ++ call $L$key_expansion_256b ++DB 102,15,58,223,202,32 ++ call $L$key_expansion_256a ++DB 102,15,58,223,200,32 ++ call $L$key_expansion_256b ++DB 102,15,58,223,202,64 ++ call $L$key_expansion_256a ++ movups XMMWORD[rax],xmm0 ++ mov DWORD[16+rax],edx ++ xor rax,rax ++ jmp NEAR $L$enc_key_ret ++ ++ALIGN 16 ++$L$14rounds_alt: ++ movdqa xmm5,XMMWORD[$L$key_rotate] ++ movdqa xmm4,XMMWORD[$L$key_rcon1] ++ mov r10d,7 ++ movdqu XMMWORD[r8],xmm0 ++ movdqa xmm1,xmm2 ++ movdqu XMMWORD[16+r8],xmm2 ++ jmp NEAR $L$oop_key256 ++ ++ALIGN 16 ++$L$oop_key256: ++DB 102,15,56,0,213 ++DB 102,15,56,221,212 ++ ++ movdqa xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm3,xmm0 ++ pslldq xmm0,4 ++ pxor xmm0,xmm3 ++ pslld xmm4,1 ++ ++ pxor xmm0,xmm2 ++ movdqu XMMWORD[rax],xmm0 ++ ++ dec r10d ++ jz NEAR $L$done_key256 ++ ++ pshufd xmm2,xmm0,0xff ++ pxor xmm3,xmm3 ++DB 102,15,56,221,211 ++ ++ movdqa xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm3,xmm1 ++ pslldq xmm1,4 ++ pxor xmm1,xmm3 ++ ++ pxor xmm2,xmm1 ++ movdqu XMMWORD[16+rax],xmm2 ++ lea rax,[32+rax] ++ movdqa xmm1,xmm2 ++ ++ jmp NEAR $L$oop_key256 ++ ++$L$done_key256: ++ mov DWORD[16+rax],edx ++ xor eax,eax ++ jmp NEAR $L$enc_key_ret ++ ++ALIGN 16 ++$L$bad_keybits: ++ mov rax,-2 ++$L$enc_key_ret: ++ pxor xmm0,xmm0 ++ pxor xmm1,xmm1 ++ pxor xmm2,xmm2 ++ pxor xmm3,xmm3 ++ pxor xmm4,xmm4 ++ pxor xmm5,xmm5 ++ add rsp,8 ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_set_encrypt_key: ++ ++ALIGN 16 ++$L$key_expansion_128: ++ movups XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++$L$key_expansion_128_cold: ++ shufps xmm4,xmm0,16 ++ xorps xmm0,xmm4 ++ shufps xmm4,xmm0,140 ++ xorps xmm0,xmm4 ++ shufps xmm1,xmm1,255 ++ xorps xmm0,xmm1 ++ DB 0F3h,0C3h ;repret ++ ++ALIGN 16 ++$L$key_expansion_192a: ++ movups XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++$L$key_expansion_192a_cold: ++ movaps xmm5,xmm2 ++$L$key_expansion_192b_warm: ++ shufps xmm4,xmm0,16 ++ movdqa xmm3,xmm2 ++ xorps xmm0,xmm4 ++ shufps xmm4,xmm0,140 ++ pslldq xmm3,4 ++ xorps xmm0,xmm4 ++ pshufd xmm1,xmm1,85 ++ pxor xmm2,xmm3 ++ pxor xmm0,xmm1 ++ pshufd xmm3,xmm0,255 ++ pxor xmm2,xmm3 ++ DB 0F3h,0C3h ;repret ++ ++ALIGN 16 ++$L$key_expansion_192b: ++ movaps xmm3,xmm0 ++ shufps xmm5,xmm0,68 ++ movups XMMWORD[rax],xmm5 ++ shufps xmm3,xmm2,78 ++ movups XMMWORD[16+rax],xmm3 ++ lea rax,[32+rax] ++ jmp NEAR $L$key_expansion_192b_warm ++ ++ALIGN 16 ++$L$key_expansion_256a: ++ movups XMMWORD[rax],xmm2 ++ lea rax,[16+rax] ++$L$key_expansion_256a_cold: ++ shufps xmm4,xmm0,16 ++ xorps xmm0,xmm4 ++ shufps xmm4,xmm0,140 ++ xorps xmm0,xmm4 ++ shufps xmm1,xmm1,255 ++ xorps xmm0,xmm1 ++ DB 0F3h,0C3h ;repret ++ ++ALIGN 16 ++$L$key_expansion_256b: ++ movups XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++ ++ shufps xmm4,xmm2,16 ++ xorps xmm2,xmm4 ++ shufps xmm4,xmm2,140 ++ xorps xmm2,xmm4 ++ shufps xmm1,xmm1,170 ++ xorps xmm2,xmm1 ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 64 ++$L$bswap_mask: ++DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 ++$L$increment32: ++ DD 6,6,6,0 ++$L$increment64: ++ DD 1,0,0,0 ++$L$xts_magic: ++ DD 0x87,0,1,0 ++$L$increment1: ++DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ++$L$key_rotate: ++ DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d ++$L$key_rotate192: ++ DD 0x04070605,0x04070605,0x04070605,0x04070605 ++$L$key_rcon1: ++ DD 1,1,1,1 ++$L$key_rcon1b: ++ DD 0x1b,0x1b,0x1b,0x1b ++ ++DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 ++DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 ++DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 ++DB 115,108,46,111,114,103,62,0 ++ALIGN 64 ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++ecb_ccm64_se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ lea rsi,[rax] ++ lea rdi,[512+r8] ++ mov ecx,8 ++ DD 0xa548f3fc ++ lea rax,[88+rax] ++ ++ jmp NEAR $L$common_seh_tail ++ ++ ++ ++ALIGN 16 ++ctr_xts_se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[160+r8] ++ lea rsi,[((-160))+rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ ++ jmp NEAR $L$common_rbp_tail ++ ++ ++ ++ALIGN 16 ++ocb_se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ mov r10d,DWORD[8+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$ocb_no_xmm ++ ++ mov rax,QWORD[152+r8] ++ ++ lea rsi,[rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ lea rax,[((160+40))+rax] ++ ++$L$ocb_no_xmm: ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r14,QWORD[((-40))+rax] ++ ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ mov QWORD[216+r8],r12 ++ mov QWORD[224+r8],r13 ++ mov QWORD[232+r8],r14 ++ ++ jmp NEAR $L$common_seh_tail ++ ++ ++ALIGN 16 ++cbc_se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[152+r8] ++ mov rbx,QWORD[248+r8] ++ ++ lea r10,[$L$cbc_decrypt_bulk] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ lea r10,[$L$cbc_decrypt_body] ++ cmp rbx,r10 ++ jb NEAR $L$restore_cbc_rax ++ ++ lea r10,[$L$cbc_ret] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ lea rsi,[16+rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ ++$L$common_rbp_tail: ++ mov rax,QWORD[160+r8] ++ mov rbp,QWORD[rax] ++ lea rax,[8+rax] ++ mov QWORD[160+r8],rbp ++ jmp NEAR $L$common_seh_tail ++ ++$L$restore_cbc_rax: ++ mov rax,QWORD[120+r8] ++ ++$L$common_seh_tail: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_aesni_ecb_encrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_ecb_encrypt wrt ..imagebase ++ DD $L$SEH_info_ecb wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_ccm64_encrypt_blocks wrt ..imagebase ++ DD $L$SEH_end_aesni_ccm64_encrypt_blocks wrt ..imagebase ++ DD $L$SEH_info_ccm64_enc wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_ccm64_decrypt_blocks wrt ..imagebase ++ DD $L$SEH_end_aesni_ccm64_decrypt_blocks wrt ..imagebase ++ DD $L$SEH_info_ccm64_dec wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_ctr32_encrypt_blocks wrt ..imagebase ++ DD $L$SEH_end_aesni_ctr32_encrypt_blocks wrt ..imagebase ++ DD $L$SEH_info_ctr32 wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_xts_encrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_xts_encrypt wrt ..imagebase ++ DD $L$SEH_info_xts_enc wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_xts_decrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_xts_decrypt wrt ..imagebase ++ DD $L$SEH_info_xts_dec wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_ocb_encrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_ocb_encrypt wrt ..imagebase ++ DD $L$SEH_info_ocb_enc wrt ..imagebase ++ ++ DD $L$SEH_begin_aesni_ocb_decrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_ocb_decrypt wrt ..imagebase ++ DD $L$SEH_info_ocb_dec wrt ..imagebase ++ DD $L$SEH_begin_aesni_cbc_encrypt wrt ..imagebase ++ DD $L$SEH_end_aesni_cbc_encrypt wrt ..imagebase ++ DD $L$SEH_info_cbc wrt ..imagebase ++ ++ DD aesni_set_decrypt_key wrt ..imagebase ++ DD $L$SEH_end_set_decrypt_key wrt ..imagebase ++ DD $L$SEH_info_key wrt ..imagebase ++ ++ DD aesni_set_encrypt_key wrt ..imagebase ++ DD $L$SEH_end_set_encrypt_key wrt ..imagebase ++ DD $L$SEH_info_key wrt ..imagebase ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_info_ecb: ++DB 9,0,0,0 ++ DD ecb_ccm64_se_handler wrt ..imagebase ++ DD $L$ecb_enc_body wrt ..imagebase,$L$ecb_enc_ret wrt ..imagebase ++$L$SEH_info_ccm64_enc: ++DB 9,0,0,0 ++ DD ecb_ccm64_se_handler wrt ..imagebase ++ DD $L$ccm64_enc_body wrt ..imagebase,$L$ccm64_enc_ret wrt ..imagebase ++$L$SEH_info_ccm64_dec: ++DB 9,0,0,0 ++ DD ecb_ccm64_se_handler wrt ..imagebase ++ DD $L$ccm64_dec_body wrt ..imagebase,$L$ccm64_dec_ret wrt ..imagebase ++$L$SEH_info_ctr32: ++DB 9,0,0,0 ++ DD ctr_xts_se_handler wrt ..imagebase ++ DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase ++$L$SEH_info_xts_enc: ++DB 9,0,0,0 ++ DD ctr_xts_se_handler wrt ..imagebase ++ DD $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue wrt ..imagebase ++$L$SEH_info_xts_dec: ++DB 9,0,0,0 ++ DD ctr_xts_se_handler wrt ..imagebase ++ DD $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue wrt ..imagebase ++$L$SEH_info_ocb_enc: ++DB 9,0,0,0 ++ DD ocb_se_handler wrt ..imagebase ++ DD $L$ocb_enc_body wrt ..imagebase,$L$ocb_enc_epilogue wrt ..imagebase ++ DD $L$ocb_enc_pop wrt ..imagebase ++ DD 0 ++$L$SEH_info_ocb_dec: ++DB 9,0,0,0 ++ DD ocb_se_handler wrt ..imagebase ++ DD $L$ocb_dec_body wrt ..imagebase,$L$ocb_dec_epilogue wrt ..imagebase ++ DD $L$ocb_dec_pop wrt ..imagebase ++ DD 0 ++$L$SEH_info_cbc: ++DB 9,0,0,0 ++ DD cbc_se_handler wrt ..imagebase ++$L$SEH_info_key: ++DB 0x01,0x04,0x01,0x00 ++DB 0x04,0x02,0x00,0x00 +diff --git a/SMP/lib/accelerated/x86/coff/cpuid-x86.asm b/SMP/lib/accelerated/x86/coff/cpuid-x86.asm +new file mode 100644 +index 0000000..beee69a +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/cpuid-x86.asm +@@ -0,0 +1,54 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++global _gnutls_cpuid ++align 16 ++_gnutls_cpuid: ++L$_gnutls_cpuid_begin: ++ push ebp ++ mov ebp,esp ++ sub esp,12 ++ mov DWORD [esp],ebx ++ mov eax,DWORD [8+ebp] ++ mov DWORD [4+esp],esi ++ mov DWORD [8+esp],edi ++ push ebx ++ cpuid ++ mov edi,ebx ++ pop ebx ++ mov esi,edx ++ mov edx,DWORD [12+ebp] ++ mov DWORD [edx],eax ++ mov eax,DWORD [16+ebp] ++ mov DWORD [eax],edi ++ mov eax,DWORD [20+ebp] ++ mov DWORD [eax],ecx ++ mov eax,DWORD [24+ebp] ++ mov DWORD [eax],esi ++ mov ebx,DWORD [esp] ++ mov esi,DWORD [4+esp] ++ mov edi,DWORD [8+esp] ++ mov esp,ebp ++ pop ebp ++ ret ++global _gnutls_have_cpuid ++align 16 ++_gnutls_have_cpuid: ++L$_gnutls_have_cpuid_begin: ++ pushfd ++ pop eax ++ or eax,2097152 ++ push eax ++ popfd ++ pushfd ++ pop eax ++ and eax,2097152 ++ ret ++db 67,80,85,73,68,32,102,111,114,32,120,56,54,0 +diff --git a/SMP/lib/accelerated/x86/coff/cpuid-x86_64.asm b/SMP/lib/accelerated/x86/coff/cpuid-x86_64.asm +new file mode 100644 +index 0000000..c1c9c77 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/cpuid-x86_64.asm +@@ -0,0 +1,53 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++global gnutls_cpuid ++ ++ALIGN 16 ++gnutls_cpuid: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_gnutls_cpuid: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ mov r8,QWORD[40+rsp] ++ mov r9,QWORD[48+rsp] ++ ++ ++ push rbp ++ mov rbp,rsp ++ push rbx ++ mov DWORD[((-12))+rbp],edi ++ mov QWORD[((-24))+rbp],rsi ++ mov QWORD[((-32))+rbp],rdx ++ mov QWORD[((-40))+rbp],rcx ++ mov QWORD[((-48))+rbp],r8 ++ mov eax,DWORD[((-12))+rbp] ++ mov DWORD[((-60))+rbp],eax ++ mov eax,DWORD[((-60))+rbp] ++ cpuid ++ mov DWORD[((-56))+rbp],edx ++ mov esi,ecx ++ mov DWORD[((-52))+rbp],eax ++ mov rax,QWORD[((-24))+rbp] ++ mov edx,DWORD[((-52))+rbp] ++ mov DWORD[rax],edx ++ mov rax,QWORD[((-32))+rbp] ++ mov DWORD[rax],ebx ++ mov rax,QWORD[((-40))+rbp] ++ mov DWORD[rax],esi ++ mov rax,QWORD[((-48))+rbp] ++ mov ecx,DWORD[((-56))+rbp] ++ mov DWORD[rax],ecx ++ pop rbx ++ leave ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_gnutls_cpuid: +diff --git a/SMP/lib/accelerated/x86/coff/e_padlock-x86.asm b/SMP/lib/accelerated/x86/coff/e_padlock-x86.asm +new file mode 100644 +index 0000000..3620a6d +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/e_padlock-x86.asm +@@ -0,0 +1,1015 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++global _padlock_capability ++align 16 ++_padlock_capability: ++L$_padlock_capability_begin: ++ push ebx ++ pushfd ++ pop eax ++ mov ecx,eax ++ xor eax,2097152 ++ push eax ++ popfd ++ pushfd ++ pop eax ++ xor ecx,eax ++ xor eax,eax ++ bt ecx,21 ++ jnc NEAR L$000noluck ++ cpuid ++ xor eax,eax ++ cmp ebx,0x746e6543 ++ jne NEAR L$000noluck ++ cmp edx,0x48727561 ++ jne NEAR L$000noluck ++ cmp ecx,0x736c7561 ++ jne NEAR L$000noluck ++ mov eax,3221225472 ++ cpuid ++ mov edx,eax ++ xor eax,eax ++ cmp edx,3221225473 ++ jb NEAR L$000noluck ++ mov eax,1 ++ cpuid ++ or eax,15 ++ xor ebx,ebx ++ and eax,4095 ++ cmp eax,1791 ++ sete bl ++ mov eax,3221225473 ++ push ebx ++ cpuid ++ pop ebx ++ mov eax,edx ++ shl ebx,4 ++ and eax,4294967279 ++ or eax,ebx ++L$000noluck: ++ pop ebx ++ ret ++global _padlock_key_bswap ++align 16 ++_padlock_key_bswap: ++L$_padlock_key_bswap_begin: ++ mov edx,DWORD [4+esp] ++ mov ecx,DWORD [240+edx] ++L$001bswap_loop: ++ mov eax,DWORD [edx] ++ bswap eax ++ mov DWORD [edx],eax ++ lea edx,[4+edx] ++ sub ecx,1 ++ jnz NEAR L$001bswap_loop ++ ret ++global _padlock_verify_context ++align 16 ++_padlock_verify_context: ++L$_padlock_verify_context_begin: ++ mov edx,DWORD [4+esp] ++ lea eax,[L$padlock_saved_context] ++ pushfd ++ call __padlock_verify_ctx ++L$002verify_pic_point: ++ lea esp,[4+esp] ++ ret ++align 16 ++__padlock_verify_ctx: ++ bt DWORD [4+esp],30 ++ jnc NEAR L$003verified ++ cmp edx,DWORD [eax] ++ je NEAR L$003verified ++ pushfd ++ popfd ++L$003verified: ++ mov DWORD [eax],edx ++ ret ++global _padlock_reload_key ++align 16 ++_padlock_reload_key: ++L$_padlock_reload_key_begin: ++ pushfd ++ popfd ++ ret ++global _padlock_aes_block ++align 16 ++_padlock_aes_block: ++L$_padlock_aes_block_begin: ++ push edi ++ push esi ++ push ebx ++ mov edi,DWORD [16+esp] ++ mov esi,DWORD [20+esp] ++ mov edx,DWORD [24+esp] ++ mov ecx,1 ++ lea ebx,[32+edx] ++ lea edx,[16+edx] ++db 243,15,167,200 ++ pop ebx ++ pop esi ++ pop edi ++ ret ++global _padlock_ecb_encrypt ++align 16 ++_padlock_ecb_encrypt: ++L$_padlock_ecb_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edi,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov edx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ test edx,15 ++ jnz NEAR L$004ecb_abort ++ test ecx,15 ++ jnz NEAR L$004ecb_abort ++ lea eax,[L$padlock_saved_context] ++ pushfd ++ cld ++ call __padlock_verify_ctx ++L$005ecb_pic_point: ++ lea edx,[16+edx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD [edx],32 ++ jnz NEAR L$006ecb_aligned ++ test edi,15 ++ setz al ++ test esi,15 ++ setz bl ++ test eax,ebx ++ jnz NEAR L$006ecb_aligned ++ neg eax ++ mov ebx,512 ++ not eax ++ lea ebp,[esp-24] ++ cmp ecx,ebx ++ cmovc ebx,ecx ++ and eax,ebx ++ mov ebx,ecx ++ neg eax ++ and ebx,511 ++ lea esp,[ebp*1+eax] ++ mov eax,512 ++ cmovz ebx,eax ++ mov eax,ebp ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ cmp ecx,ebx ++ ja NEAR L$007ecb_loop ++ mov eax,esi ++ cmp ebp,esp ++ cmove eax,edi ++ add eax,ecx ++ neg eax ++ and eax,4095 ++ cmp eax,128 ++ mov eax,-128 ++ cmovae eax,ebx ++ and ebx,eax ++ jz NEAR L$008ecb_unaligned_tail ++ jmp NEAR L$007ecb_loop ++align 16 ++L$007ecb_loop: ++ mov DWORD [ebp],edi ++ mov DWORD [4+ebp],esi ++ mov DWORD [8+ebp],ecx ++ mov ecx,ebx ++ mov DWORD [12+ebp],ebx ++ test edi,15 ++ cmovnz edi,esp ++ test esi,15 ++ jz NEAR L$009ecb_inp_aligned ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++ mov ecx,ebx ++ mov esi,edi ++L$009ecb_inp_aligned: ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,200 ++ mov edi,DWORD [ebp] ++ mov ebx,DWORD [12+ebp] ++ test edi,15 ++ jz NEAR L$010ecb_out_aligned ++ mov ecx,ebx ++ lea esi,[esp] ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++L$010ecb_out_aligned: ++ mov esi,DWORD [4+ebp] ++ mov ecx,DWORD [8+ebp] ++ add edi,ebx ++ add esi,ebx ++ sub ecx,ebx ++ mov ebx,512 ++ jz NEAR L$011ecb_break ++ cmp ecx,ebx ++ jae NEAR L$007ecb_loop ++L$008ecb_unaligned_tail: ++ xor eax,eax ++ cmp esp,ebp ++ cmove eax,ecx ++ sub esp,eax ++ mov eax,edi ++ mov ebx,ecx ++ shr ecx,2 ++ lea edi,[esp] ++db 243,165 ++ mov esi,esp ++ mov edi,eax ++ mov ecx,ebx ++ jmp NEAR L$007ecb_loop ++align 16 ++L$011ecb_break: ++ cmp esp,ebp ++ je NEAR L$012ecb_done ++ pxor xmm0,xmm0 ++ lea eax,[esp] ++L$013ecb_bzero: ++ movaps [eax],xmm0 ++ lea eax,[16+eax] ++ cmp ebp,eax ++ ja NEAR L$013ecb_bzero ++L$012ecb_done: ++ mov ebp,DWORD [16+ebp] ++ lea esp,[24+ebp] ++ jmp NEAR L$014ecb_exit ++align 16 ++L$006ecb_aligned: ++ lea ebp,[ecx*1+esi] ++ neg ebp ++ and ebp,4095 ++ xor eax,eax ++ cmp ebp,128 ++ mov ebp,127 ++ cmovae ebp,eax ++ and ebp,ecx ++ sub ecx,ebp ++ jz NEAR L$015ecb_aligned_tail ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,200 ++ test ebp,ebp ++ jz NEAR L$014ecb_exit ++L$015ecb_aligned_tail: ++ mov ecx,ebp ++ lea ebp,[esp-24] ++ mov esp,ebp ++ mov eax,ebp ++ sub esp,ecx ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ mov eax,edi ++ mov ebx,ecx ++ shr ecx,2 ++ lea edi,[esp] ++db 243,165 ++ mov esi,esp ++ mov edi,eax ++ mov ecx,ebx ++ jmp NEAR L$007ecb_loop ++L$014ecb_exit: ++ mov eax,1 ++ lea esp,[4+esp] ++L$004ecb_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _padlock_cbc_encrypt ++align 16 ++_padlock_cbc_encrypt: ++L$_padlock_cbc_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edi,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov edx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ test edx,15 ++ jnz NEAR L$016cbc_abort ++ test ecx,15 ++ jnz NEAR L$016cbc_abort ++ lea eax,[L$padlock_saved_context] ++ pushfd ++ cld ++ call __padlock_verify_ctx ++L$017cbc_pic_point: ++ lea edx,[16+edx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD [edx],32 ++ jnz NEAR L$018cbc_aligned ++ test edi,15 ++ setz al ++ test esi,15 ++ setz bl ++ test eax,ebx ++ jnz NEAR L$018cbc_aligned ++ neg eax ++ mov ebx,512 ++ not eax ++ lea ebp,[esp-24] ++ cmp ecx,ebx ++ cmovc ebx,ecx ++ and eax,ebx ++ mov ebx,ecx ++ neg eax ++ and ebx,511 ++ lea esp,[ebp*1+eax] ++ mov eax,512 ++ cmovz ebx,eax ++ mov eax,ebp ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ cmp ecx,ebx ++ ja NEAR L$019cbc_loop ++ mov eax,esi ++ cmp ebp,esp ++ cmove eax,edi ++ add eax,ecx ++ neg eax ++ and eax,4095 ++ cmp eax,64 ++ mov eax,-64 ++ cmovae eax,ebx ++ and ebx,eax ++ jz NEAR L$020cbc_unaligned_tail ++ jmp NEAR L$019cbc_loop ++align 16 ++L$019cbc_loop: ++ mov DWORD [ebp],edi ++ mov DWORD [4+ebp],esi ++ mov DWORD [8+ebp],ecx ++ mov ecx,ebx ++ mov DWORD [12+ebp],ebx ++ test edi,15 ++ cmovnz edi,esp ++ test esi,15 ++ jz NEAR L$021cbc_inp_aligned ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++ mov ecx,ebx ++ mov esi,edi ++L$021cbc_inp_aligned: ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,208 ++ movaps xmm0,[eax] ++ movaps [edx-16],xmm0 ++ mov edi,DWORD [ebp] ++ mov ebx,DWORD [12+ebp] ++ test edi,15 ++ jz NEAR L$022cbc_out_aligned ++ mov ecx,ebx ++ lea esi,[esp] ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++L$022cbc_out_aligned: ++ mov esi,DWORD [4+ebp] ++ mov ecx,DWORD [8+ebp] ++ add edi,ebx ++ add esi,ebx ++ sub ecx,ebx ++ mov ebx,512 ++ jz NEAR L$023cbc_break ++ cmp ecx,ebx ++ jae NEAR L$019cbc_loop ++L$020cbc_unaligned_tail: ++ xor eax,eax ++ cmp esp,ebp ++ cmove eax,ecx ++ sub esp,eax ++ mov eax,edi ++ mov ebx,ecx ++ shr ecx,2 ++ lea edi,[esp] ++db 243,165 ++ mov esi,esp ++ mov edi,eax ++ mov ecx,ebx ++ jmp NEAR L$019cbc_loop ++align 16 ++L$023cbc_break: ++ cmp esp,ebp ++ je NEAR L$024cbc_done ++ pxor xmm0,xmm0 ++ lea eax,[esp] ++L$025cbc_bzero: ++ movaps [eax],xmm0 ++ lea eax,[16+eax] ++ cmp ebp,eax ++ ja NEAR L$025cbc_bzero ++L$024cbc_done: ++ mov ebp,DWORD [16+ebp] ++ lea esp,[24+ebp] ++ jmp NEAR L$026cbc_exit ++align 16 ++L$018cbc_aligned: ++ lea ebp,[ecx*1+esi] ++ neg ebp ++ and ebp,4095 ++ xor eax,eax ++ cmp ebp,64 ++ mov ebp,63 ++ cmovae ebp,eax ++ and ebp,ecx ++ sub ecx,ebp ++ jz NEAR L$027cbc_aligned_tail ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,208 ++ movaps xmm0,[eax] ++ movaps [edx-16],xmm0 ++ test ebp,ebp ++ jz NEAR L$026cbc_exit ++L$027cbc_aligned_tail: ++ mov ecx,ebp ++ lea ebp,[esp-24] ++ mov esp,ebp ++ mov eax,ebp ++ sub esp,ecx ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ mov eax,edi ++ mov ebx,ecx ++ shr ecx,2 ++ lea edi,[esp] ++db 243,165 ++ mov esi,esp ++ mov edi,eax ++ mov ecx,ebx ++ jmp NEAR L$019cbc_loop ++L$026cbc_exit: ++ mov eax,1 ++ lea esp,[4+esp] ++L$016cbc_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _padlock_cfb_encrypt ++align 16 ++_padlock_cfb_encrypt: ++L$_padlock_cfb_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edi,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov edx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ test edx,15 ++ jnz NEAR L$028cfb_abort ++ test ecx,15 ++ jnz NEAR L$028cfb_abort ++ lea eax,[L$padlock_saved_context] ++ pushfd ++ cld ++ call __padlock_verify_ctx ++L$029cfb_pic_point: ++ lea edx,[16+edx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD [edx],32 ++ jnz NEAR L$030cfb_aligned ++ test edi,15 ++ setz al ++ test esi,15 ++ setz bl ++ test eax,ebx ++ jnz NEAR L$030cfb_aligned ++ neg eax ++ mov ebx,512 ++ not eax ++ lea ebp,[esp-24] ++ cmp ecx,ebx ++ cmovc ebx,ecx ++ and eax,ebx ++ mov ebx,ecx ++ neg eax ++ and ebx,511 ++ lea esp,[ebp*1+eax] ++ mov eax,512 ++ cmovz ebx,eax ++ mov eax,ebp ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ jmp NEAR L$031cfb_loop ++align 16 ++L$031cfb_loop: ++ mov DWORD [ebp],edi ++ mov DWORD [4+ebp],esi ++ mov DWORD [8+ebp],ecx ++ mov ecx,ebx ++ mov DWORD [12+ebp],ebx ++ test edi,15 ++ cmovnz edi,esp ++ test esi,15 ++ jz NEAR L$032cfb_inp_aligned ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++ mov ecx,ebx ++ mov esi,edi ++L$032cfb_inp_aligned: ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,224 ++ movaps xmm0,[eax] ++ movaps [edx-16],xmm0 ++ mov edi,DWORD [ebp] ++ mov ebx,DWORD [12+ebp] ++ test edi,15 ++ jz NEAR L$033cfb_out_aligned ++ mov ecx,ebx ++ lea esi,[esp] ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++L$033cfb_out_aligned: ++ mov esi,DWORD [4+ebp] ++ mov ecx,DWORD [8+ebp] ++ add edi,ebx ++ add esi,ebx ++ sub ecx,ebx ++ mov ebx,512 ++ jnz NEAR L$031cfb_loop ++ cmp esp,ebp ++ je NEAR L$034cfb_done ++ pxor xmm0,xmm0 ++ lea eax,[esp] ++L$035cfb_bzero: ++ movaps [eax],xmm0 ++ lea eax,[16+eax] ++ cmp ebp,eax ++ ja NEAR L$035cfb_bzero ++L$034cfb_done: ++ mov ebp,DWORD [16+ebp] ++ lea esp,[24+ebp] ++ jmp NEAR L$036cfb_exit ++align 16 ++L$030cfb_aligned: ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,224 ++ movaps xmm0,[eax] ++ movaps [edx-16],xmm0 ++L$036cfb_exit: ++ mov eax,1 ++ lea esp,[4+esp] ++L$028cfb_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _padlock_ofb_encrypt ++align 16 ++_padlock_ofb_encrypt: ++L$_padlock_ofb_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edi,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov edx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ test edx,15 ++ jnz NEAR L$037ofb_abort ++ test ecx,15 ++ jnz NEAR L$037ofb_abort ++ lea eax,[L$padlock_saved_context] ++ pushfd ++ cld ++ call __padlock_verify_ctx ++L$038ofb_pic_point: ++ lea edx,[16+edx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD [edx],32 ++ jnz NEAR L$039ofb_aligned ++ test edi,15 ++ setz al ++ test esi,15 ++ setz bl ++ test eax,ebx ++ jnz NEAR L$039ofb_aligned ++ neg eax ++ mov ebx,512 ++ not eax ++ lea ebp,[esp-24] ++ cmp ecx,ebx ++ cmovc ebx,ecx ++ and eax,ebx ++ mov ebx,ecx ++ neg eax ++ and ebx,511 ++ lea esp,[ebp*1+eax] ++ mov eax,512 ++ cmovz ebx,eax ++ mov eax,ebp ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ jmp NEAR L$040ofb_loop ++align 16 ++L$040ofb_loop: ++ mov DWORD [ebp],edi ++ mov DWORD [4+ebp],esi ++ mov DWORD [8+ebp],ecx ++ mov ecx,ebx ++ mov DWORD [12+ebp],ebx ++ test edi,15 ++ cmovnz edi,esp ++ test esi,15 ++ jz NEAR L$041ofb_inp_aligned ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++ mov ecx,ebx ++ mov esi,edi ++L$041ofb_inp_aligned: ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,232 ++ movaps xmm0,[eax] ++ movaps [edx-16],xmm0 ++ mov edi,DWORD [ebp] ++ mov ebx,DWORD [12+ebp] ++ test edi,15 ++ jz NEAR L$042ofb_out_aligned ++ mov ecx,ebx ++ lea esi,[esp] ++ shr ecx,2 ++db 243,165 ++ sub edi,ebx ++L$042ofb_out_aligned: ++ mov esi,DWORD [4+ebp] ++ mov ecx,DWORD [8+ebp] ++ add edi,ebx ++ add esi,ebx ++ sub ecx,ebx ++ mov ebx,512 ++ jnz NEAR L$040ofb_loop ++ cmp esp,ebp ++ je NEAR L$043ofb_done ++ pxor xmm0,xmm0 ++ lea eax,[esp] ++L$044ofb_bzero: ++ movaps [eax],xmm0 ++ lea eax,[16+eax] ++ cmp ebp,eax ++ ja NEAR L$044ofb_bzero ++L$043ofb_done: ++ mov ebp,DWORD [16+ebp] ++ lea esp,[24+ebp] ++ jmp NEAR L$045ofb_exit ++align 16 ++L$039ofb_aligned: ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,232 ++ movaps xmm0,[eax] ++ movaps [edx-16],xmm0 ++L$045ofb_exit: ++ mov eax,1 ++ lea esp,[4+esp] ++L$037ofb_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _padlock_ctr32_encrypt ++align 16 ++_padlock_ctr32_encrypt: ++L$_padlock_ctr32_encrypt_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edi,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov edx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ test edx,15 ++ jnz NEAR L$046ctr32_abort ++ test ecx,15 ++ jnz NEAR L$046ctr32_abort ++ lea eax,[L$padlock_saved_context] ++ pushfd ++ cld ++ call __padlock_verify_ctx ++L$047ctr32_pic_point: ++ lea edx,[16+edx] ++ xor eax,eax ++ movq mm0,[edx-16] ++ mov ebx,512 ++ not eax ++ lea ebp,[esp-24] ++ cmp ecx,ebx ++ cmovc ebx,ecx ++ and eax,ebx ++ mov ebx,ecx ++ neg eax ++ and ebx,511 ++ lea esp,[ebp*1+eax] ++ mov eax,512 ++ cmovz ebx,eax ++ mov eax,ebp ++ and ebp,-16 ++ and esp,-16 ++ mov DWORD [16+ebp],eax ++ jmp NEAR L$048ctr32_loop ++align 16 ++L$048ctr32_loop: ++ mov DWORD [ebp],edi ++ mov DWORD [4+ebp],esi ++ mov DWORD [8+ebp],ecx ++ mov ecx,ebx ++ mov DWORD [12+ebp],ebx ++ mov ecx,DWORD [edx-4] ++ xor edi,edi ++ mov eax,DWORD [edx-8] ++L$049ctr32_prepare: ++ mov DWORD [12+edi*1+esp],ecx ++ bswap ecx ++ movq [edi*1+esp],mm0 ++ inc ecx ++ mov DWORD [8+edi*1+esp],eax ++ bswap ecx ++ lea edi,[16+edi] ++ cmp edi,ebx ++ jb NEAR L$049ctr32_prepare ++ mov DWORD [edx-4],ecx ++ lea esi,[esp] ++ lea edi,[esp] ++ mov ecx,ebx ++ lea eax,[edx-16] ++ lea ebx,[16+edx] ++ shr ecx,4 ++db 243,15,167,200 ++ mov edi,DWORD [ebp] ++ mov ebx,DWORD [12+ebp] ++ mov esi,DWORD [4+ebp] ++ xor ecx,ecx ++L$050ctr32_xor: ++ movups xmm1,[ecx*1+esi] ++ lea ecx,[16+ecx] ++ pxor xmm1,[ecx*1+esp-16] ++ movups [ecx*1+edi-16],xmm1 ++ cmp ecx,ebx ++ jb NEAR L$050ctr32_xor ++ mov ecx,DWORD [8+ebp] ++ add edi,ebx ++ add esi,ebx ++ sub ecx,ebx ++ mov ebx,512 ++ jnz NEAR L$048ctr32_loop ++ pxor xmm0,xmm0 ++ lea eax,[esp] ++L$051ctr32_bzero: ++ movaps [eax],xmm0 ++ lea eax,[16+eax] ++ cmp ebp,eax ++ ja NEAR L$051ctr32_bzero ++L$052ctr32_done: ++ mov ebp,DWORD [16+ebp] ++ lea esp,[24+ebp] ++ mov eax,1 ++ lea esp,[4+esp] ++ emms ++L$046ctr32_abort: ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _padlock_xstore ++align 16 ++_padlock_xstore: ++L$_padlock_xstore_begin: ++ push edi ++ mov edi,DWORD [8+esp] ++ mov edx,DWORD [12+esp] ++db 15,167,192 ++ pop edi ++ ret ++align 16 ++__win32_segv_handler: ++ mov eax,1 ++ mov edx,DWORD [4+esp] ++ mov ecx,DWORD [12+esp] ++ cmp DWORD [edx],3221225477 ++ jne NEAR L$053ret ++ add DWORD [184+ecx],4 ++ mov eax,0 ++L$053ret: ++ ret ++%if __NASM_VERSION_ID__ >= 0x02030000 ++safeseh __win32_segv_handler ++%endif ++global _padlock_sha1_oneshot ++align 16 ++_padlock_sha1_oneshot: ++L$_padlock_sha1_oneshot_begin: ++ push edi ++ push esi ++ xor eax,eax ++ mov edi,DWORD [12+esp] ++ mov esi,DWORD [16+esp] ++ mov ecx,DWORD [20+esp] ++ push __win32_segv_handler ++db 100,255,48 ++db 100,137,32 ++ mov edx,esp ++ add esp,-128 ++ movups xmm0,[edi] ++ and esp,-16 ++ mov eax,DWORD [16+edi] ++ movaps [esp],xmm0 ++ mov edi,esp ++ mov DWORD [16+esp],eax ++ xor eax,eax ++db 243,15,166,200 ++ movaps xmm0,[esp] ++ mov eax,DWORD [16+esp] ++ mov esp,edx ++db 100,143,5,0,0,0,0 ++ lea esp,[4+esp] ++ mov edi,DWORD [16+esp] ++ movups [edi],xmm0 ++ mov DWORD [16+edi],eax ++ pop esi ++ pop edi ++ ret ++global _padlock_sha1_blocks ++align 16 ++_padlock_sha1_blocks: ++L$_padlock_sha1_blocks_begin: ++ push edi ++ push esi ++ mov edi,DWORD [12+esp] ++ mov esi,DWORD [16+esp] ++ mov edx,esp ++ mov ecx,DWORD [20+esp] ++ add esp,-128 ++ movups xmm0,[edi] ++ and esp,-16 ++ mov eax,DWORD [16+edi] ++ movaps [esp],xmm0 ++ mov edi,esp ++ mov DWORD [16+esp],eax ++ mov eax,-1 ++db 243,15,166,200 ++ movaps xmm0,[esp] ++ mov eax,DWORD [16+esp] ++ mov esp,edx ++ mov edi,DWORD [12+esp] ++ movups [edi],xmm0 ++ mov DWORD [16+edi],eax ++ pop esi ++ pop edi ++ ret ++global _padlock_sha256_oneshot ++align 16 ++_padlock_sha256_oneshot: ++L$_padlock_sha256_oneshot_begin: ++ push edi ++ push esi ++ xor eax,eax ++ mov edi,DWORD [12+esp] ++ mov esi,DWORD [16+esp] ++ mov ecx,DWORD [20+esp] ++ push __win32_segv_handler ++db 100,255,48 ++db 100,137,32 ++ mov edx,esp ++ add esp,-128 ++ movups xmm0,[edi] ++ and esp,-16 ++ movups xmm1,[16+edi] ++ movaps [esp],xmm0 ++ mov edi,esp ++ movaps [16+esp],xmm1 ++ xor eax,eax ++db 243,15,166,208 ++ movaps xmm0,[esp] ++ movaps xmm1,[16+esp] ++ mov esp,edx ++db 100,143,5,0,0,0,0 ++ lea esp,[4+esp] ++ mov edi,DWORD [16+esp] ++ movups [edi],xmm0 ++ movups [16+edi],xmm1 ++ pop esi ++ pop edi ++ ret ++global _padlock_sha256_blocks ++align 16 ++_padlock_sha256_blocks: ++L$_padlock_sha256_blocks_begin: ++ push edi ++ push esi ++ mov edi,DWORD [12+esp] ++ mov esi,DWORD [16+esp] ++ mov ecx,DWORD [20+esp] ++ mov edx,esp ++ add esp,-128 ++ movups xmm0,[edi] ++ and esp,-16 ++ movups xmm1,[16+edi] ++ movaps [esp],xmm0 ++ mov edi,esp ++ movaps [16+esp],xmm1 ++ mov eax,-1 ++db 243,15,166,208 ++ movaps xmm0,[esp] ++ movaps xmm1,[16+esp] ++ mov esp,edx ++ mov edi,DWORD [12+esp] ++ movups [edi],xmm0 ++ movups [16+edi],xmm1 ++ pop esi ++ pop edi ++ ret ++global _padlock_sha512_blocks ++align 16 ++_padlock_sha512_blocks: ++L$_padlock_sha512_blocks_begin: ++ push edi ++ push esi ++ mov edi,DWORD [12+esp] ++ mov esi,DWORD [16+esp] ++ mov ecx,DWORD [20+esp] ++ mov edx,esp ++ add esp,-128 ++ movups xmm0,[edi] ++ and esp,-16 ++ movups xmm1,[16+edi] ++ movups xmm2,[32+edi] ++ movups xmm3,[48+edi] ++ movaps [esp],xmm0 ++ mov edi,esp ++ movaps [16+esp],xmm1 ++ movaps [32+esp],xmm2 ++ movaps [48+esp],xmm3 ++db 243,15,166,224 ++ movaps xmm0,[esp] ++ movaps xmm1,[16+esp] ++ movaps xmm2,[32+esp] ++ movaps xmm3,[48+esp] ++ mov esp,edx ++ mov edi,DWORD [12+esp] ++ movups [edi],xmm0 ++ movups [16+edi],xmm1 ++ movups [32+edi],xmm2 ++ movups [48+edi],xmm3 ++ pop esi ++ pop edi ++ ret ++db 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32 ++db 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65 ++db 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101 ++db 110,115,115,108,46,111,114,103,62,0 ++align 16 ++section .data align=4 ++align 4 ++L$padlock_saved_context: ++dd 0 +diff --git a/SMP/lib/accelerated/x86/coff/e_padlock-x86_64.asm b/SMP/lib/accelerated/x86/coff/e_padlock-x86_64.asm +new file mode 100644 +index 0000000..1cb48ea +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/e_padlock-x86_64.asm +@@ -0,0 +1,1171 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++global padlock_capability ++ ++ALIGN 16 ++padlock_capability: ++ mov r8,rbx ++ xor eax,eax ++ cpuid ++ xor eax,eax ++ cmp ebx,0x746e6543 ++ jne NEAR $L$noluck ++ cmp edx,0x48727561 ++ jne NEAR $L$noluck ++ cmp ecx,0x736c7561 ++ jne NEAR $L$noluck ++ mov eax,0xC0000000 ++ cpuid ++ mov edx,eax ++ xor eax,eax ++ cmp edx,0xC0000001 ++ jb NEAR $L$noluck ++ mov eax,0xC0000001 ++ cpuid ++ mov eax,edx ++ and eax,0xffffffef ++ or eax,0x10 ++$L$noluck: ++ mov rbx,r8 ++ DB 0F3h,0C3h ;repret ++ ++ ++global padlock_key_bswap ++ ++ALIGN 16 ++padlock_key_bswap: ++ mov edx,DWORD[240+rcx] ++$L$bswap_loop: ++ mov eax,DWORD[rcx] ++ bswap eax ++ mov DWORD[rcx],eax ++ lea rcx,[4+rcx] ++ sub edx,1 ++ jnz NEAR $L$bswap_loop ++ DB 0F3h,0C3h ;repret ++ ++ ++global padlock_verify_context ++ ++ALIGN 16 ++padlock_verify_context: ++ mov rdx,rcx ++ pushf ++ lea rax,[$L$padlock_saved_context] ++ call _padlock_verify_ctx ++ lea rsp,[8+rsp] ++ DB 0F3h,0C3h ;repret ++ ++ ++ ++ALIGN 16 ++_padlock_verify_ctx: ++ mov r8,QWORD[8+rsp] ++ bt r8,30 ++ jnc NEAR $L$verified ++ cmp rdx,QWORD[rax] ++ je NEAR $L$verified ++ pushf ++ popf ++$L$verified: ++ mov QWORD[rax],rdx ++ DB 0F3h,0C3h ;repret ++ ++ ++global padlock_reload_key ++ ++ALIGN 16 ++padlock_reload_key: ++ pushf ++ popf ++ DB 0F3h,0C3h ;repret ++ ++ ++global padlock_aes_block ++ ++ALIGN 16 ++padlock_aes_block: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_aes_block: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov r8,rbx ++ mov rcx,1 ++ lea rbx,[32+rdx] ++ lea rdx,[16+rdx] ++DB 0xf3,0x0f,0xa7,0xc8 ++ mov rbx,r8 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_aes_block: ++ ++global padlock_xstore ++ ++ALIGN 16 ++padlock_xstore: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_xstore: ++ mov rdi,rcx ++ mov rsi,rdx ++ ++ ++ mov edx,esi ++DB 0x0f,0xa7,0xc0 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_xstore: ++ ++global padlock_sha1_oneshot ++ ++ALIGN 16 ++padlock_sha1_oneshot: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_sha1_oneshot: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov rcx,rdx ++ mov rdx,rdi ++ movups xmm0,XMMWORD[rdi] ++ sub rsp,128+8 ++ mov eax,DWORD[16+rdi] ++ movaps XMMWORD[rsp],xmm0 ++ mov rdi,rsp ++ mov DWORD[16+rsp],eax ++ xor rax,rax ++DB 0xf3,0x0f,0xa6,0xc8 ++ movaps xmm0,XMMWORD[rsp] ++ mov eax,DWORD[16+rsp] ++ add rsp,128+8 ++ movups XMMWORD[rdx],xmm0 ++ mov DWORD[16+rdx],eax ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_sha1_oneshot: ++ ++global padlock_sha1_blocks ++ ++ALIGN 16 ++padlock_sha1_blocks: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_sha1_blocks: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov rcx,rdx ++ mov rdx,rdi ++ movups xmm0,XMMWORD[rdi] ++ sub rsp,128+8 ++ mov eax,DWORD[16+rdi] ++ movaps XMMWORD[rsp],xmm0 ++ mov rdi,rsp ++ mov DWORD[16+rsp],eax ++ mov rax,-1 ++DB 0xf3,0x0f,0xa6,0xc8 ++ movaps xmm0,XMMWORD[rsp] ++ mov eax,DWORD[16+rsp] ++ add rsp,128+8 ++ movups XMMWORD[rdx],xmm0 ++ mov DWORD[16+rdx],eax ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_sha1_blocks: ++ ++global padlock_sha256_oneshot ++ ++ALIGN 16 ++padlock_sha256_oneshot: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_sha256_oneshot: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov rcx,rdx ++ mov rdx,rdi ++ movups xmm0,XMMWORD[rdi] ++ sub rsp,128+8 ++ movups xmm1,XMMWORD[16+rdi] ++ movaps XMMWORD[rsp],xmm0 ++ mov rdi,rsp ++ movaps XMMWORD[16+rsp],xmm1 ++ xor rax,rax ++DB 0xf3,0x0f,0xa6,0xd0 ++ movaps xmm0,XMMWORD[rsp] ++ movaps xmm1,XMMWORD[16+rsp] ++ add rsp,128+8 ++ movups XMMWORD[rdx],xmm0 ++ movups XMMWORD[16+rdx],xmm1 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_sha256_oneshot: ++ ++global padlock_sha256_blocks ++ ++ALIGN 16 ++padlock_sha256_blocks: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_sha256_blocks: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov rcx,rdx ++ mov rdx,rdi ++ movups xmm0,XMMWORD[rdi] ++ sub rsp,128+8 ++ movups xmm1,XMMWORD[16+rdi] ++ movaps XMMWORD[rsp],xmm0 ++ mov rdi,rsp ++ movaps XMMWORD[16+rsp],xmm1 ++ mov rax,-1 ++DB 0xf3,0x0f,0xa6,0xd0 ++ movaps xmm0,XMMWORD[rsp] ++ movaps xmm1,XMMWORD[16+rsp] ++ add rsp,128+8 ++ movups XMMWORD[rdx],xmm0 ++ movups XMMWORD[16+rdx],xmm1 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_sha256_blocks: ++ ++global padlock_sha512_blocks ++ ++ALIGN 16 ++padlock_sha512_blocks: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_sha512_blocks: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov rcx,rdx ++ mov rdx,rdi ++ movups xmm0,XMMWORD[rdi] ++ sub rsp,128+8 ++ movups xmm1,XMMWORD[16+rdi] ++ movups xmm2,XMMWORD[32+rdi] ++ movups xmm3,XMMWORD[48+rdi] ++ movaps XMMWORD[rsp],xmm0 ++ mov rdi,rsp ++ movaps XMMWORD[16+rsp],xmm1 ++ movaps XMMWORD[32+rsp],xmm2 ++ movaps XMMWORD[48+rsp],xmm3 ++DB 0xf3,0x0f,0xa6,0xe0 ++ movaps xmm0,XMMWORD[rsp] ++ movaps xmm1,XMMWORD[16+rsp] ++ movaps xmm2,XMMWORD[32+rsp] ++ movaps xmm3,XMMWORD[48+rsp] ++ add rsp,128+8 ++ movups XMMWORD[rdx],xmm0 ++ movups XMMWORD[16+rdx],xmm1 ++ movups XMMWORD[32+rdx],xmm2 ++ movups XMMWORD[48+rdx],xmm3 ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_sha512_blocks: ++global padlock_ecb_encrypt ++ ++ALIGN 16 ++padlock_ecb_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_ecb_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ ++ ++ push rbp ++ push rbx ++ ++ xor eax,eax ++ test rdx,15 ++ jnz NEAR $L$ecb_abort ++ test rcx,15 ++ jnz NEAR $L$ecb_abort ++ lea rax,[$L$padlock_saved_context] ++ pushf ++ cld ++ call _padlock_verify_ctx ++ lea rdx,[16+rdx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD[rdx],32 ++ jnz NEAR $L$ecb_aligned ++ test rdi,0x0f ++ setz al ++ test rsi,0x0f ++ setz bl ++ test eax,ebx ++ jnz NEAR $L$ecb_aligned ++ neg rax ++ mov rbx,512 ++ not rax ++ lea rbp,[rsp] ++ cmp rcx,rbx ++ cmovc rbx,rcx ++ and rax,rbx ++ mov rbx,rcx ++ neg rax ++ and rbx,512-1 ++ lea rsp,[rbp*1+rax] ++ mov rax,512 ++ cmovz rbx,rax ++ cmp rcx,rbx ++ ja NEAR $L$ecb_loop ++ mov rax,rsi ++ cmp rbp,rsp ++ cmove rax,rdi ++ add rax,rcx ++ neg rax ++ and rax,0xfff ++ cmp rax,128 ++ mov rax,-128 ++ cmovae rax,rbx ++ and rbx,rax ++ jz NEAR $L$ecb_unaligned_tail ++ jmp NEAR $L$ecb_loop ++ALIGN 16 ++$L$ecb_loop: ++ cmp rbx,rcx ++ cmova rbx,rcx ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rcx ++ mov rcx,rbx ++ mov r11,rbx ++ test rdi,0x0f ++ cmovnz rdi,rsp ++ test rsi,0x0f ++ jz NEAR $L$ecb_inp_aligned ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++ mov rcx,rbx ++ mov rsi,rdi ++$L$ecb_inp_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,200 ++ mov rdi,r8 ++ mov rbx,r11 ++ test rdi,0x0f ++ jz NEAR $L$ecb_out_aligned ++ mov rcx,rbx ++ lea rsi,[rsp] ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++$L$ecb_out_aligned: ++ mov rsi,r9 ++ mov rcx,r10 ++ add rdi,rbx ++ add rsi,rbx ++ sub rcx,rbx ++ mov rbx,512 ++ jz NEAR $L$ecb_break ++ cmp rcx,rbx ++ jae NEAR $L$ecb_loop ++$L$ecb_unaligned_tail: ++ xor eax,eax ++ cmp rbp,rsp ++ cmove rax,rcx ++ mov r8,rdi ++ mov rbx,rcx ++ sub rsp,rax ++ shr rcx,3 ++ lea rdi,[rsp] ++DB 0xf3,0x48,0xa5 ++ mov rsi,rsp ++ mov rdi,r8 ++ mov rcx,rbx ++ jmp NEAR $L$ecb_loop ++ALIGN 16 ++$L$ecb_break: ++ cmp rsp,rbp ++ je NEAR $L$ecb_done ++ ++ pxor xmm0,xmm0 ++ lea rax,[rsp] ++$L$ecb_bzero: ++ movaps XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++ cmp rbp,rax ++ ja NEAR $L$ecb_bzero ++ ++$L$ecb_done: ++ lea rsp,[rbp] ++ jmp NEAR $L$ecb_exit ++ ++ALIGN 16 ++$L$ecb_aligned: ++ lea rbp,[rcx*1+rsi] ++ neg rbp ++ and rbp,0xfff ++ xor eax,eax ++ cmp rbp,128 ++ mov rbp,128-1 ++ cmovae rbp,rax ++ and rbp,rcx ++ sub rcx,rbp ++ jz NEAR $L$ecb_aligned_tail ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,200 ++ test rbp,rbp ++ jz NEAR $L$ecb_exit ++ ++$L$ecb_aligned_tail: ++ mov r8,rdi ++ mov rbx,rbp ++ mov rcx,rbp ++ lea rbp,[rsp] ++ sub rsp,rcx ++ shr rcx,3 ++ lea rdi,[rsp] ++DB 0xf3,0x48,0xa5 ++ lea rdi,[r8] ++ lea rsi,[rsp] ++ mov rcx,rbx ++ jmp NEAR $L$ecb_loop ++$L$ecb_exit: ++ mov eax,1 ++ lea rsp,[8+rsp] ++$L$ecb_abort: ++ pop rbx ++ pop rbp ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_ecb_encrypt: ++global padlock_cbc_encrypt ++ ++ALIGN 16 ++padlock_cbc_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_cbc_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ ++ ++ push rbp ++ push rbx ++ ++ xor eax,eax ++ test rdx,15 ++ jnz NEAR $L$cbc_abort ++ test rcx,15 ++ jnz NEAR $L$cbc_abort ++ lea rax,[$L$padlock_saved_context] ++ pushf ++ cld ++ call _padlock_verify_ctx ++ lea rdx,[16+rdx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD[rdx],32 ++ jnz NEAR $L$cbc_aligned ++ test rdi,0x0f ++ setz al ++ test rsi,0x0f ++ setz bl ++ test eax,ebx ++ jnz NEAR $L$cbc_aligned ++ neg rax ++ mov rbx,512 ++ not rax ++ lea rbp,[rsp] ++ cmp rcx,rbx ++ cmovc rbx,rcx ++ and rax,rbx ++ mov rbx,rcx ++ neg rax ++ and rbx,512-1 ++ lea rsp,[rbp*1+rax] ++ mov rax,512 ++ cmovz rbx,rax ++ cmp rcx,rbx ++ ja NEAR $L$cbc_loop ++ mov rax,rsi ++ cmp rbp,rsp ++ cmove rax,rdi ++ add rax,rcx ++ neg rax ++ and rax,0xfff ++ cmp rax,64 ++ mov rax,-64 ++ cmovae rax,rbx ++ and rbx,rax ++ jz NEAR $L$cbc_unaligned_tail ++ jmp NEAR $L$cbc_loop ++ALIGN 16 ++$L$cbc_loop: ++ cmp rbx,rcx ++ cmova rbx,rcx ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rcx ++ mov rcx,rbx ++ mov r11,rbx ++ test rdi,0x0f ++ cmovnz rdi,rsp ++ test rsi,0x0f ++ jz NEAR $L$cbc_inp_aligned ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++ mov rcx,rbx ++ mov rsi,rdi ++$L$cbc_inp_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,208 ++ movdqa xmm0,XMMWORD[rax] ++ movdqa XMMWORD[(-16)+rdx],xmm0 ++ mov rdi,r8 ++ mov rbx,r11 ++ test rdi,0x0f ++ jz NEAR $L$cbc_out_aligned ++ mov rcx,rbx ++ lea rsi,[rsp] ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++$L$cbc_out_aligned: ++ mov rsi,r9 ++ mov rcx,r10 ++ add rdi,rbx ++ add rsi,rbx ++ sub rcx,rbx ++ mov rbx,512 ++ jz NEAR $L$cbc_break ++ cmp rcx,rbx ++ jae NEAR $L$cbc_loop ++$L$cbc_unaligned_tail: ++ xor eax,eax ++ cmp rbp,rsp ++ cmove rax,rcx ++ mov r8,rdi ++ mov rbx,rcx ++ sub rsp,rax ++ shr rcx,3 ++ lea rdi,[rsp] ++DB 0xf3,0x48,0xa5 ++ mov rsi,rsp ++ mov rdi,r8 ++ mov rcx,rbx ++ jmp NEAR $L$cbc_loop ++ALIGN 16 ++$L$cbc_break: ++ cmp rsp,rbp ++ je NEAR $L$cbc_done ++ ++ pxor xmm0,xmm0 ++ lea rax,[rsp] ++$L$cbc_bzero: ++ movaps XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++ cmp rbp,rax ++ ja NEAR $L$cbc_bzero ++ ++$L$cbc_done: ++ lea rsp,[rbp] ++ jmp NEAR $L$cbc_exit ++ ++ALIGN 16 ++$L$cbc_aligned: ++ lea rbp,[rcx*1+rsi] ++ neg rbp ++ and rbp,0xfff ++ xor eax,eax ++ cmp rbp,64 ++ mov rbp,64-1 ++ cmovae rbp,rax ++ and rbp,rcx ++ sub rcx,rbp ++ jz NEAR $L$cbc_aligned_tail ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,208 ++ movdqa xmm0,XMMWORD[rax] ++ movdqa XMMWORD[(-16)+rdx],xmm0 ++ test rbp,rbp ++ jz NEAR $L$cbc_exit ++ ++$L$cbc_aligned_tail: ++ mov r8,rdi ++ mov rbx,rbp ++ mov rcx,rbp ++ lea rbp,[rsp] ++ sub rsp,rcx ++ shr rcx,3 ++ lea rdi,[rsp] ++DB 0xf3,0x48,0xa5 ++ lea rdi,[r8] ++ lea rsi,[rsp] ++ mov rcx,rbx ++ jmp NEAR $L$cbc_loop ++$L$cbc_exit: ++ mov eax,1 ++ lea rsp,[8+rsp] ++$L$cbc_abort: ++ pop rbx ++ pop rbp ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_cbc_encrypt: ++global padlock_cfb_encrypt ++ ++ALIGN 16 ++padlock_cfb_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_cfb_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ ++ ++ push rbp ++ push rbx ++ ++ xor eax,eax ++ test rdx,15 ++ jnz NEAR $L$cfb_abort ++ test rcx,15 ++ jnz NEAR $L$cfb_abort ++ lea rax,[$L$padlock_saved_context] ++ pushf ++ cld ++ call _padlock_verify_ctx ++ lea rdx,[16+rdx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD[rdx],32 ++ jnz NEAR $L$cfb_aligned ++ test rdi,0x0f ++ setz al ++ test rsi,0x0f ++ setz bl ++ test eax,ebx ++ jnz NEAR $L$cfb_aligned ++ neg rax ++ mov rbx,512 ++ not rax ++ lea rbp,[rsp] ++ cmp rcx,rbx ++ cmovc rbx,rcx ++ and rax,rbx ++ mov rbx,rcx ++ neg rax ++ and rbx,512-1 ++ lea rsp,[rbp*1+rax] ++ mov rax,512 ++ cmovz rbx,rax ++ jmp NEAR $L$cfb_loop ++ALIGN 16 ++$L$cfb_loop: ++ cmp rbx,rcx ++ cmova rbx,rcx ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rcx ++ mov rcx,rbx ++ mov r11,rbx ++ test rdi,0x0f ++ cmovnz rdi,rsp ++ test rsi,0x0f ++ jz NEAR $L$cfb_inp_aligned ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++ mov rcx,rbx ++ mov rsi,rdi ++$L$cfb_inp_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,224 ++ movdqa xmm0,XMMWORD[rax] ++ movdqa XMMWORD[(-16)+rdx],xmm0 ++ mov rdi,r8 ++ mov rbx,r11 ++ test rdi,0x0f ++ jz NEAR $L$cfb_out_aligned ++ mov rcx,rbx ++ lea rsi,[rsp] ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++$L$cfb_out_aligned: ++ mov rsi,r9 ++ mov rcx,r10 ++ add rdi,rbx ++ add rsi,rbx ++ sub rcx,rbx ++ mov rbx,512 ++ jnz NEAR $L$cfb_loop ++ cmp rsp,rbp ++ je NEAR $L$cfb_done ++ ++ pxor xmm0,xmm0 ++ lea rax,[rsp] ++$L$cfb_bzero: ++ movaps XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++ cmp rbp,rax ++ ja NEAR $L$cfb_bzero ++ ++$L$cfb_done: ++ lea rsp,[rbp] ++ jmp NEAR $L$cfb_exit ++ ++ALIGN 16 ++$L$cfb_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,224 ++ movdqa xmm0,XMMWORD[rax] ++ movdqa XMMWORD[(-16)+rdx],xmm0 ++$L$cfb_exit: ++ mov eax,1 ++ lea rsp,[8+rsp] ++$L$cfb_abort: ++ pop rbx ++ pop rbp ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_cfb_encrypt: ++global padlock_ofb_encrypt ++ ++ALIGN 16 ++padlock_ofb_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_ofb_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ ++ ++ push rbp ++ push rbx ++ ++ xor eax,eax ++ test rdx,15 ++ jnz NEAR $L$ofb_abort ++ test rcx,15 ++ jnz NEAR $L$ofb_abort ++ lea rax,[$L$padlock_saved_context] ++ pushf ++ cld ++ call _padlock_verify_ctx ++ lea rdx,[16+rdx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD[rdx],32 ++ jnz NEAR $L$ofb_aligned ++ test rdi,0x0f ++ setz al ++ test rsi,0x0f ++ setz bl ++ test eax,ebx ++ jnz NEAR $L$ofb_aligned ++ neg rax ++ mov rbx,512 ++ not rax ++ lea rbp,[rsp] ++ cmp rcx,rbx ++ cmovc rbx,rcx ++ and rax,rbx ++ mov rbx,rcx ++ neg rax ++ and rbx,512-1 ++ lea rsp,[rbp*1+rax] ++ mov rax,512 ++ cmovz rbx,rax ++ jmp NEAR $L$ofb_loop ++ALIGN 16 ++$L$ofb_loop: ++ cmp rbx,rcx ++ cmova rbx,rcx ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rcx ++ mov rcx,rbx ++ mov r11,rbx ++ test rdi,0x0f ++ cmovnz rdi,rsp ++ test rsi,0x0f ++ jz NEAR $L$ofb_inp_aligned ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++ mov rcx,rbx ++ mov rsi,rdi ++$L$ofb_inp_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,232 ++ movdqa xmm0,XMMWORD[rax] ++ movdqa XMMWORD[(-16)+rdx],xmm0 ++ mov rdi,r8 ++ mov rbx,r11 ++ test rdi,0x0f ++ jz NEAR $L$ofb_out_aligned ++ mov rcx,rbx ++ lea rsi,[rsp] ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++$L$ofb_out_aligned: ++ mov rsi,r9 ++ mov rcx,r10 ++ add rdi,rbx ++ add rsi,rbx ++ sub rcx,rbx ++ mov rbx,512 ++ jnz NEAR $L$ofb_loop ++ cmp rsp,rbp ++ je NEAR $L$ofb_done ++ ++ pxor xmm0,xmm0 ++ lea rax,[rsp] ++$L$ofb_bzero: ++ movaps XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++ cmp rbp,rax ++ ja NEAR $L$ofb_bzero ++ ++$L$ofb_done: ++ lea rsp,[rbp] ++ jmp NEAR $L$ofb_exit ++ ++ALIGN 16 ++$L$ofb_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,232 ++ movdqa xmm0,XMMWORD[rax] ++ movdqa XMMWORD[(-16)+rdx],xmm0 ++$L$ofb_exit: ++ mov eax,1 ++ lea rsp,[8+rsp] ++$L$ofb_abort: ++ pop rbx ++ pop rbp ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_ofb_encrypt: ++global padlock_ctr32_encrypt ++ ++ALIGN 16 ++padlock_ctr32_encrypt: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_padlock_ctr32_encrypt: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ ++ ++ push rbp ++ push rbx ++ ++ xor eax,eax ++ test rdx,15 ++ jnz NEAR $L$ctr32_abort ++ test rcx,15 ++ jnz NEAR $L$ctr32_abort ++ lea rax,[$L$padlock_saved_context] ++ pushf ++ cld ++ call _padlock_verify_ctx ++ lea rdx,[16+rdx] ++ xor eax,eax ++ xor ebx,ebx ++ test DWORD[rdx],32 ++ jnz NEAR $L$ctr32_aligned ++ test rdi,0x0f ++ setz al ++ test rsi,0x0f ++ setz bl ++ test eax,ebx ++ jnz NEAR $L$ctr32_aligned ++ neg rax ++ mov rbx,512 ++ not rax ++ lea rbp,[rsp] ++ cmp rcx,rbx ++ cmovc rbx,rcx ++ and rax,rbx ++ mov rbx,rcx ++ neg rax ++ and rbx,512-1 ++ lea rsp,[rbp*1+rax] ++ mov rax,512 ++ cmovz rbx,rax ++$L$ctr32_reenter: ++ mov eax,DWORD[((-4))+rdx] ++ bswap eax ++ neg eax ++ and eax,31 ++ mov rbx,512 ++ shl eax,4 ++ cmovz rax,rbx ++ cmp rcx,rax ++ cmova rbx,rax ++ cmovbe rbx,rcx ++ cmp rcx,rbx ++ ja NEAR $L$ctr32_loop ++ mov rax,rsi ++ cmp rbp,rsp ++ cmove rax,rdi ++ add rax,rcx ++ neg rax ++ and rax,0xfff ++ cmp rax,32 ++ mov rax,-32 ++ cmovae rax,rbx ++ and rbx,rax ++ jz NEAR $L$ctr32_unaligned_tail ++ jmp NEAR $L$ctr32_loop ++ALIGN 16 ++$L$ctr32_loop: ++ cmp rbx,rcx ++ cmova rbx,rcx ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rcx ++ mov rcx,rbx ++ mov r11,rbx ++ test rdi,0x0f ++ cmovnz rdi,rsp ++ test rsi,0x0f ++ jz NEAR $L$ctr32_inp_aligned ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++ mov rcx,rbx ++ mov rsi,rdi ++$L$ctr32_inp_aligned: ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,216 ++ mov eax,DWORD[((-4))+rdx] ++ test eax,0xffff0000 ++ jnz NEAR $L$ctr32_no_carry ++ bswap eax ++ add eax,0x10000 ++ bswap eax ++ mov DWORD[((-4))+rdx],eax ++$L$ctr32_no_carry: ++ mov rdi,r8 ++ mov rbx,r11 ++ test rdi,0x0f ++ jz NEAR $L$ctr32_out_aligned ++ mov rcx,rbx ++ lea rsi,[rsp] ++ shr rcx,3 ++DB 0xf3,0x48,0xa5 ++ sub rdi,rbx ++$L$ctr32_out_aligned: ++ mov rsi,r9 ++ mov rcx,r10 ++ add rdi,rbx ++ add rsi,rbx ++ sub rcx,rbx ++ mov rbx,512 ++ jz NEAR $L$ctr32_break ++ cmp rcx,rbx ++ jae NEAR $L$ctr32_loop ++ mov rbx,rcx ++ mov rax,rsi ++ cmp rbp,rsp ++ cmove rax,rdi ++ add rax,rcx ++ neg rax ++ and rax,0xfff ++ cmp rax,32 ++ mov rax,-32 ++ cmovae rax,rbx ++ and rbx,rax ++ jnz NEAR $L$ctr32_loop ++$L$ctr32_unaligned_tail: ++ xor eax,eax ++ cmp rbp,rsp ++ cmove rax,rcx ++ mov r8,rdi ++ mov rbx,rcx ++ sub rsp,rax ++ shr rcx,3 ++ lea rdi,[rsp] ++DB 0xf3,0x48,0xa5 ++ mov rsi,rsp ++ mov rdi,r8 ++ mov rcx,rbx ++ jmp NEAR $L$ctr32_loop ++ALIGN 16 ++$L$ctr32_break: ++ cmp rsp,rbp ++ je NEAR $L$ctr32_done ++ ++ pxor xmm0,xmm0 ++ lea rax,[rsp] ++$L$ctr32_bzero: ++ movaps XMMWORD[rax],xmm0 ++ lea rax,[16+rax] ++ cmp rbp,rax ++ ja NEAR $L$ctr32_bzero ++ ++$L$ctr32_done: ++ lea rsp,[rbp] ++ jmp NEAR $L$ctr32_exit ++ ++ALIGN 16 ++$L$ctr32_aligned: ++ mov eax,DWORD[((-4))+rdx] ++ bswap eax ++ neg eax ++ and eax,0xffff ++ mov rbx,1048576 ++ shl eax,4 ++ cmovz rax,rbx ++ cmp rcx,rax ++ cmova rbx,rax ++ cmovbe rbx,rcx ++ jbe NEAR $L$ctr32_aligned_skip ++ ++$L$ctr32_aligned_loop: ++ mov r10,rcx ++ mov rcx,rbx ++ mov r11,rbx ++ ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,216 ++ ++ mov eax,DWORD[((-4))+rdx] ++ bswap eax ++ add eax,0x10000 ++ bswap eax ++ mov DWORD[((-4))+rdx],eax ++ ++ mov rcx,r10 ++ sub rcx,r11 ++ mov rbx,1048576 ++ jz NEAR $L$ctr32_exit ++ cmp rcx,rbx ++ jae NEAR $L$ctr32_aligned_loop ++ ++$L$ctr32_aligned_skip: ++ lea rbp,[rcx*1+rsi] ++ neg rbp ++ and rbp,0xfff ++ xor eax,eax ++ cmp rbp,32 ++ mov rbp,32-1 ++ cmovae rbp,rax ++ and rbp,rcx ++ sub rcx,rbp ++ jz NEAR $L$ctr32_aligned_tail ++ lea rax,[((-16))+rdx] ++ lea rbx,[16+rdx] ++ shr rcx,4 ++DB 0xf3,0x0f,0xa7,216 ++ test rbp,rbp ++ jz NEAR $L$ctr32_exit ++ ++$L$ctr32_aligned_tail: ++ mov r8,rdi ++ mov rbx,rbp ++ mov rcx,rbp ++ lea rbp,[rsp] ++ sub rsp,rcx ++ shr rcx,3 ++ lea rdi,[rsp] ++DB 0xf3,0x48,0xa5 ++ lea rdi,[r8] ++ lea rsi,[rsp] ++ mov rcx,rbx ++ jmp NEAR $L$ctr32_loop ++$L$ctr32_exit: ++ mov eax,1 ++ lea rsp,[8+rsp] ++$L$ctr32_abort: ++ pop rbx ++ pop rbp ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_padlock_ctr32_encrypt: ++DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95 ++DB 54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84 ++DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64 ++DB 111,112,101,110,115,115,108,46,111,114,103,62,0 ++ALIGN 16 ++section .data data align=8 ++ ++ALIGN 8 ++$L$padlock_saved_context: ++ DQ 0 +diff --git a/SMP/lib/accelerated/x86/coff/ghash-x86.asm b/SMP/lib/accelerated/x86/coff/ghash-x86.asm +new file mode 100644 +index 0000000..3dfb7d8 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/ghash-x86.asm +@@ -0,0 +1,692 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++global _gcm_gmult_4bit_x86 ++align 16 ++_gcm_gmult_4bit_x86: ++L$_gcm_gmult_4bit_x86_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ sub esp,84 ++ mov edi,DWORD [104+esp] ++ mov esi,DWORD [108+esp] ++ mov ebp,DWORD [edi] ++ mov edx,DWORD [4+edi] ++ mov ecx,DWORD [8+edi] ++ mov ebx,DWORD [12+edi] ++ mov DWORD [16+esp],0 ++ mov DWORD [20+esp],471859200 ++ mov DWORD [24+esp],943718400 ++ mov DWORD [28+esp],610271232 ++ mov DWORD [32+esp],1887436800 ++ mov DWORD [36+esp],1822425088 ++ mov DWORD [40+esp],1220542464 ++ mov DWORD [44+esp],1423966208 ++ mov DWORD [48+esp],3774873600 ++ mov DWORD [52+esp],4246732800 ++ mov DWORD [56+esp],3644850176 ++ mov DWORD [60+esp],3311403008 ++ mov DWORD [64+esp],2441084928 ++ mov DWORD [68+esp],2376073216 ++ mov DWORD [72+esp],2847932416 ++ mov DWORD [76+esp],3051356160 ++ mov DWORD [esp],ebp ++ mov DWORD [4+esp],edx ++ mov DWORD [8+esp],ecx ++ mov DWORD [12+esp],ebx ++ shr ebx,20 ++ and ebx,240 ++ mov ebp,DWORD [4+ebx*1+esi] ++ mov edx,DWORD [ebx*1+esi] ++ mov ecx,DWORD [12+ebx*1+esi] ++ mov ebx,DWORD [8+ebx*1+esi] ++ xor eax,eax ++ mov edi,15 ++ jmp NEAR L$000x86_loop ++align 16 ++L$000x86_loop: ++ mov al,bl ++ shrd ebx,ecx,4 ++ and al,15 ++ shrd ecx,edx,4 ++ shrd edx,ebp,4 ++ shr ebp,4 ++ xor ebp,DWORD [16+eax*4+esp] ++ mov al,BYTE [edi*1+esp] ++ and al,240 ++ xor ebx,DWORD [8+eax*1+esi] ++ xor ecx,DWORD [12+eax*1+esi] ++ xor edx,DWORD [eax*1+esi] ++ xor ebp,DWORD [4+eax*1+esi] ++ dec edi ++ js NEAR L$001x86_break ++ mov al,bl ++ shrd ebx,ecx,4 ++ and al,15 ++ shrd ecx,edx,4 ++ shrd edx,ebp,4 ++ shr ebp,4 ++ xor ebp,DWORD [16+eax*4+esp] ++ mov al,BYTE [edi*1+esp] ++ shl al,4 ++ xor ebx,DWORD [8+eax*1+esi] ++ xor ecx,DWORD [12+eax*1+esi] ++ xor edx,DWORD [eax*1+esi] ++ xor ebp,DWORD [4+eax*1+esi] ++ jmp NEAR L$000x86_loop ++align 16 ++L$001x86_break: ++ bswap ebx ++ bswap ecx ++ bswap edx ++ bswap ebp ++ mov edi,DWORD [104+esp] ++ mov DWORD [12+edi],ebx ++ mov DWORD [8+edi],ecx ++ mov DWORD [4+edi],edx ++ mov DWORD [edi],ebp ++ add esp,84 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _gcm_ghash_4bit_x86 ++align 16 ++_gcm_ghash_4bit_x86: ++L$_gcm_ghash_4bit_x86_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ sub esp,84 ++ mov ebx,DWORD [104+esp] ++ mov esi,DWORD [108+esp] ++ mov edi,DWORD [112+esp] ++ mov ecx,DWORD [116+esp] ++ add ecx,edi ++ mov DWORD [116+esp],ecx ++ mov ebp,DWORD [ebx] ++ mov edx,DWORD [4+ebx] ++ mov ecx,DWORD [8+ebx] ++ mov ebx,DWORD [12+ebx] ++ mov DWORD [16+esp],0 ++ mov DWORD [20+esp],471859200 ++ mov DWORD [24+esp],943718400 ++ mov DWORD [28+esp],610271232 ++ mov DWORD [32+esp],1887436800 ++ mov DWORD [36+esp],1822425088 ++ mov DWORD [40+esp],1220542464 ++ mov DWORD [44+esp],1423966208 ++ mov DWORD [48+esp],3774873600 ++ mov DWORD [52+esp],4246732800 ++ mov DWORD [56+esp],3644850176 ++ mov DWORD [60+esp],3311403008 ++ mov DWORD [64+esp],2441084928 ++ mov DWORD [68+esp],2376073216 ++ mov DWORD [72+esp],2847932416 ++ mov DWORD [76+esp],3051356160 ++align 16 ++L$002x86_outer_loop: ++ xor ebx,DWORD [12+edi] ++ xor ecx,DWORD [8+edi] ++ xor edx,DWORD [4+edi] ++ xor ebp,DWORD [edi] ++ mov DWORD [12+esp],ebx ++ mov DWORD [8+esp],ecx ++ mov DWORD [4+esp],edx ++ mov DWORD [esp],ebp ++ shr ebx,20 ++ and ebx,240 ++ mov ebp,DWORD [4+ebx*1+esi] ++ mov edx,DWORD [ebx*1+esi] ++ mov ecx,DWORD [12+ebx*1+esi] ++ mov ebx,DWORD [8+ebx*1+esi] ++ xor eax,eax ++ mov edi,15 ++ jmp NEAR L$003x86_loop ++align 16 ++L$003x86_loop: ++ mov al,bl ++ shrd ebx,ecx,4 ++ and al,15 ++ shrd ecx,edx,4 ++ shrd edx,ebp,4 ++ shr ebp,4 ++ xor ebp,DWORD [16+eax*4+esp] ++ mov al,BYTE [edi*1+esp] ++ and al,240 ++ xor ebx,DWORD [8+eax*1+esi] ++ xor ecx,DWORD [12+eax*1+esi] ++ xor edx,DWORD [eax*1+esi] ++ xor ebp,DWORD [4+eax*1+esi] ++ dec edi ++ js NEAR L$004x86_break ++ mov al,bl ++ shrd ebx,ecx,4 ++ and al,15 ++ shrd ecx,edx,4 ++ shrd edx,ebp,4 ++ shr ebp,4 ++ xor ebp,DWORD [16+eax*4+esp] ++ mov al,BYTE [edi*1+esp] ++ shl al,4 ++ xor ebx,DWORD [8+eax*1+esi] ++ xor ecx,DWORD [12+eax*1+esi] ++ xor edx,DWORD [eax*1+esi] ++ xor ebp,DWORD [4+eax*1+esi] ++ jmp NEAR L$003x86_loop ++align 16 ++L$004x86_break: ++ bswap ebx ++ bswap ecx ++ bswap edx ++ bswap ebp ++ mov edi,DWORD [112+esp] ++ lea edi,[16+edi] ++ cmp edi,DWORD [116+esp] ++ mov DWORD [112+esp],edi ++ jb NEAR L$002x86_outer_loop ++ mov edi,DWORD [104+esp] ++ mov DWORD [12+edi],ebx ++ mov DWORD [8+edi],ecx ++ mov DWORD [4+edi],edx ++ mov DWORD [edi],ebp ++ add esp,84 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++align 16 ++__mmx_gmult_4bit_inner: ++ xor ecx,ecx ++ mov edx,ebx ++ mov cl,dl ++ shl cl,4 ++ and edx,240 ++ movq mm0,[8+ecx*1+esi] ++ movq mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [14+edi] ++ psllq mm2,60 ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [13+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [12+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [11+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [10+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [9+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [8+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [7+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [6+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [5+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [4+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [3+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [2+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [1+edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ mov cl,BYTE [edi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ mov edx,ecx ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ shl cl,4 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+ecx*1+esi] ++ psllq mm2,60 ++ and edx,240 ++ pxor mm1,[ebp*8+eax] ++ and ebx,15 ++ pxor mm1,[ecx*1+esi] ++ movd ebp,mm0 ++ pxor mm0,mm2 ++ psrlq mm0,4 ++ movq mm2,mm1 ++ psrlq mm1,4 ++ pxor mm0,[8+edx*1+esi] ++ psllq mm2,60 ++ pxor mm1,[ebx*8+eax] ++ and ebp,15 ++ pxor mm1,[edx*1+esi] ++ movd ebx,mm0 ++ pxor mm0,mm2 ++ mov edi,DWORD [4+ebp*8+eax] ++ psrlq mm0,32 ++ movd edx,mm1 ++ psrlq mm1,32 ++ movd ecx,mm0 ++ movd ebp,mm1 ++ shl edi,4 ++ bswap ebx ++ bswap edx ++ bswap ecx ++ xor ebp,edi ++ bswap ebp ++ ret ++global _gcm_gmult_4bit_mmx ++align 16 ++_gcm_gmult_4bit_mmx: ++L$_gcm_gmult_4bit_mmx_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov edi,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ call L$005pic_point ++L$005pic_point: ++ pop eax ++ lea eax,[(L$rem_4bit-L$005pic_point)+eax] ++ movzx ebx,BYTE [15+edi] ++ call __mmx_gmult_4bit_inner ++ mov edi,DWORD [20+esp] ++ emms ++ mov DWORD [12+edi],ebx ++ mov DWORD [4+edi],edx ++ mov DWORD [8+edi],ecx ++ mov DWORD [edi],ebp ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++global _gcm_ghash_4bit_mmx ++align 16 ++_gcm_ghash_4bit_mmx: ++L$_gcm_ghash_4bit_mmx_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov ebp,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov edi,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ call L$006pic_point ++L$006pic_point: ++ pop eax ++ lea eax,[(L$rem_4bit-L$006pic_point)+eax] ++ add ecx,edi ++ mov DWORD [32+esp],ecx ++ sub esp,20 ++ mov ebx,DWORD [12+ebp] ++ mov edx,DWORD [4+ebp] ++ mov ecx,DWORD [8+ebp] ++ mov ebp,DWORD [ebp] ++ jmp NEAR L$007mmx_outer_loop ++align 16 ++L$007mmx_outer_loop: ++ xor ebx,DWORD [12+edi] ++ xor edx,DWORD [4+edi] ++ xor ecx,DWORD [8+edi] ++ xor ebp,DWORD [edi] ++ mov DWORD [48+esp],edi ++ mov DWORD [12+esp],ebx ++ mov DWORD [4+esp],edx ++ mov DWORD [8+esp],ecx ++ mov DWORD [esp],ebp ++ mov edi,esp ++ shr ebx,24 ++ call __mmx_gmult_4bit_inner ++ mov edi,DWORD [48+esp] ++ lea edi,[16+edi] ++ cmp edi,DWORD [52+esp] ++ jb NEAR L$007mmx_outer_loop ++ mov edi,DWORD [40+esp] ++ emms ++ mov DWORD [12+edi],ebx ++ mov DWORD [4+edi],edx ++ mov DWORD [8+edi],ecx ++ mov DWORD [edi],ebp ++ add esp,20 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++align 64 ++L$rem_4bit: ++dd 0,0,0,29491200,0,58982400,0,38141952 ++dd 0,117964800,0,113901568,0,76283904,0,88997888 ++dd 0,235929600,0,265420800,0,227803136,0,206962688 ++dd 0,152567808,0,148504576,0,177995776,0,190709760 ++db 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67 ++db 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112 ++db 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62 ++db 0 +diff --git a/SMP/lib/accelerated/x86/coff/ghash-x86_64.asm b/SMP/lib/accelerated/x86/coff/ghash-x86_64.asm +new file mode 100644 +index 0000000..adedc83 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/ghash-x86_64.asm +@@ -0,0 +1,2018 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++EXTERN _gnutls_x86_cpuid_s ++ ++global gcm_gmult_4bit ++ ++ALIGN 16 ++gcm_gmult_4bit: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_gcm_gmult_4bit: ++ mov rdi,rcx ++ mov rsi,rdx ++ ++ ++ push rbx ++ push rbp ++ push r12 ++$L$gmult_prologue: ++ ++ movzx r8,BYTE[15+rdi] ++ lea r11,[$L$rem_4bit] ++ xor rax,rax ++ xor rbx,rbx ++ mov al,r8b ++ mov bl,r8b ++ shl al,4 ++ mov rcx,14 ++ mov r8,QWORD[8+rax*1+rsi] ++ mov r9,QWORD[rax*1+rsi] ++ and bl,0xf0 ++ mov rdx,r8 ++ jmp NEAR $L$oop1 ++ ++ALIGN 16 ++$L$oop1: ++ shr r8,4 ++ and rdx,0xf ++ mov r10,r9 ++ mov al,BYTE[rcx*1+rdi] ++ shr r9,4 ++ xor r8,QWORD[8+rbx*1+rsi] ++ shl r10,60 ++ xor r9,QWORD[rbx*1+rsi] ++ mov bl,al ++ xor r9,QWORD[rdx*8+r11] ++ mov rdx,r8 ++ shl al,4 ++ xor r8,r10 ++ dec rcx ++ js NEAR $L$break1 ++ ++ shr r8,4 ++ and rdx,0xf ++ mov r10,r9 ++ shr r9,4 ++ xor r8,QWORD[8+rax*1+rsi] ++ shl r10,60 ++ xor r9,QWORD[rax*1+rsi] ++ and bl,0xf0 ++ xor r9,QWORD[rdx*8+r11] ++ mov rdx,r8 ++ xor r8,r10 ++ jmp NEAR $L$oop1 ++ ++ALIGN 16 ++$L$break1: ++ shr r8,4 ++ and rdx,0xf ++ mov r10,r9 ++ shr r9,4 ++ xor r8,QWORD[8+rax*1+rsi] ++ shl r10,60 ++ xor r9,QWORD[rax*1+rsi] ++ and bl,0xf0 ++ xor r9,QWORD[rdx*8+r11] ++ mov rdx,r8 ++ xor r8,r10 ++ ++ shr r8,4 ++ and rdx,0xf ++ mov r10,r9 ++ shr r9,4 ++ xor r8,QWORD[8+rbx*1+rsi] ++ shl r10,60 ++ xor r9,QWORD[rbx*1+rsi] ++ xor r8,r10 ++ xor r9,QWORD[rdx*8+r11] ++ ++ bswap r8 ++ bswap r9 ++ mov QWORD[8+rdi],r8 ++ mov QWORD[rdi],r9 ++ ++ mov rbx,QWORD[16+rsp] ++ lea rsp,[24+rsp] ++$L$gmult_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_gcm_gmult_4bit: ++global gcm_ghash_4bit ++ ++ALIGN 16 ++gcm_ghash_4bit: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_gcm_ghash_4bit: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ mov rcx,r9 ++ ++ ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ sub rsp,280 ++$L$ghash_prologue: ++ mov r14,rdx ++ mov r15,rcx ++ sub rsi,-128 ++ lea rbp,[((16+128))+rsp] ++ xor edx,edx ++ mov r8,QWORD[((0+0-128))+rsi] ++ mov rax,QWORD[((0+8-128))+rsi] ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov r9,QWORD[((16+0-128))+rsi] ++ shl dl,4 ++ mov rbx,QWORD[((16+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[rbp],r8 ++ mov r8,QWORD[((32+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((0-128))+rbp],rax ++ mov rax,QWORD[((32+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[1+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[8+rbp],r9 ++ mov r9,QWORD[((48+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((8-128))+rbp],rbx ++ mov rbx,QWORD[((48+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[2+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[16+rbp],r8 ++ mov r8,QWORD[((64+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((16-128))+rbp],rax ++ mov rax,QWORD[((64+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[3+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[24+rbp],r9 ++ mov r9,QWORD[((80+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((24-128))+rbp],rbx ++ mov rbx,QWORD[((80+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[4+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[32+rbp],r8 ++ mov r8,QWORD[((96+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((32-128))+rbp],rax ++ mov rax,QWORD[((96+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[5+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[40+rbp],r9 ++ mov r9,QWORD[((112+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((40-128))+rbp],rbx ++ mov rbx,QWORD[((112+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[6+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[48+rbp],r8 ++ mov r8,QWORD[((128+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((48-128))+rbp],rax ++ mov rax,QWORD[((128+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[7+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[56+rbp],r9 ++ mov r9,QWORD[((144+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((56-128))+rbp],rbx ++ mov rbx,QWORD[((144+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[8+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[64+rbp],r8 ++ mov r8,QWORD[((160+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((64-128))+rbp],rax ++ mov rax,QWORD[((160+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[9+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[72+rbp],r9 ++ mov r9,QWORD[((176+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((72-128))+rbp],rbx ++ mov rbx,QWORD[((176+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[10+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[80+rbp],r8 ++ mov r8,QWORD[((192+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((80-128))+rbp],rax ++ mov rax,QWORD[((192+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[11+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[88+rbp],r9 ++ mov r9,QWORD[((208+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((88-128))+rbp],rbx ++ mov rbx,QWORD[((208+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[12+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[96+rbp],r8 ++ mov r8,QWORD[((224+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((96-128))+rbp],rax ++ mov rax,QWORD[((224+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[13+rsp],dl ++ or rbx,r10 ++ mov dl,al ++ shr rax,4 ++ mov r10,r8 ++ shr r8,4 ++ mov QWORD[104+rbp],r9 ++ mov r9,QWORD[((240+0-128))+rsi] ++ shl dl,4 ++ mov QWORD[((104-128))+rbp],rbx ++ mov rbx,QWORD[((240+8-128))+rsi] ++ shl r10,60 ++ mov BYTE[14+rsp],dl ++ or rax,r10 ++ mov dl,bl ++ shr rbx,4 ++ mov r10,r9 ++ shr r9,4 ++ mov QWORD[112+rbp],r8 ++ shl dl,4 ++ mov QWORD[((112-128))+rbp],rax ++ shl r10,60 ++ mov BYTE[15+rsp],dl ++ or rbx,r10 ++ mov QWORD[120+rbp],r9 ++ mov QWORD[((120-128))+rbp],rbx ++ add rsi,-128 ++ mov r8,QWORD[8+rdi] ++ mov r9,QWORD[rdi] ++ add r15,r14 ++ lea r11,[$L$rem_8bit] ++ jmp NEAR $L$outer_loop ++ALIGN 16 ++$L$outer_loop: ++ xor r9,QWORD[r14] ++ mov rdx,QWORD[8+r14] ++ lea r14,[16+r14] ++ xor rdx,r8 ++ mov QWORD[rdi],r9 ++ mov QWORD[8+rdi],rdx ++ shr rdx,32 ++ xor rax,rax ++ rol edx,8 ++ mov al,dl ++ movzx ebx,dl ++ shl al,4 ++ shr ebx,4 ++ rol edx,8 ++ mov r8,QWORD[8+rax*1+rsi] ++ mov r9,QWORD[rax*1+rsi] ++ mov al,dl ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ xor r12,r8 ++ mov r10,r9 ++ shr r8,8 ++ movzx r12,r12b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ mov edx,DWORD[8+rdi] ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ mov edx,DWORD[4+rdi] ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ mov edx,DWORD[rdi] ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ shr ecx,4 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r12,WORD[r12*2+r11] ++ movzx ebx,dl ++ shl al,4 ++ movzx r13,BYTE[rcx*1+rsp] ++ shr ebx,4 ++ shl r12,48 ++ xor r13,r8 ++ mov r10,r9 ++ xor r9,r12 ++ shr r8,8 ++ movzx r13,r13b ++ shr r9,8 ++ xor r8,QWORD[((-128))+rcx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rcx*8+rbp] ++ rol edx,8 ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ mov al,dl ++ xor r8,r10 ++ movzx r13,WORD[r13*2+r11] ++ movzx ecx,dl ++ shl al,4 ++ movzx r12,BYTE[rbx*1+rsp] ++ and ecx,240 ++ shl r13,48 ++ xor r12,r8 ++ mov r10,r9 ++ xor r9,r13 ++ shr r8,8 ++ movzx r12,r12b ++ mov edx,DWORD[((-4))+rdi] ++ shr r9,8 ++ xor r8,QWORD[((-128))+rbx*8+rbp] ++ shl r10,56 ++ xor r9,QWORD[rbx*8+rbp] ++ movzx r12,WORD[r12*2+r11] ++ xor r8,QWORD[8+rax*1+rsi] ++ xor r9,QWORD[rax*1+rsi] ++ shl r12,48 ++ xor r8,r10 ++ xor r9,r12 ++ movzx r13,r8b ++ shr r8,4 ++ mov r10,r9 ++ shl r13b,4 ++ shr r9,4 ++ xor r8,QWORD[8+rcx*1+rsi] ++ movzx r13,WORD[r13*2+r11] ++ shl r10,60 ++ xor r9,QWORD[rcx*1+rsi] ++ xor r8,r10 ++ shl r13,48 ++ bswap r8 ++ xor r9,r13 ++ bswap r9 ++ cmp r14,r15 ++ jb NEAR $L$outer_loop ++ mov QWORD[8+rdi],r8 ++ mov QWORD[rdi],r9 ++ ++ lea rsi,[280+rsp] ++ mov r15,QWORD[rsi] ++ mov r14,QWORD[8+rsi] ++ mov r13,QWORD[16+rsi] ++ mov r12,QWORD[24+rsi] ++ mov rbp,QWORD[32+rsi] ++ mov rbx,QWORD[40+rsi] ++ lea rsp,[48+rsi] ++$L$ghash_epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_gcm_ghash_4bit: ++global gcm_init_clmul ++ ++ALIGN 16 ++gcm_init_clmul: ++$L$_init_clmul: ++$L$SEH_begin_gcm_init_clmul: ++ ++DB 0x48,0x83,0xec,0x18 ++DB 0x0f,0x29,0x34,0x24 ++ movdqu xmm2,XMMWORD[rdx] ++ pshufd xmm2,xmm2,78 ++ ++ ++ pshufd xmm4,xmm2,255 ++ movdqa xmm3,xmm2 ++ psllq xmm2,1 ++ pxor xmm5,xmm5 ++ psrlq xmm3,63 ++ pcmpgtd xmm5,xmm4 ++ pslldq xmm3,8 ++ por xmm2,xmm3 ++ ++ ++ pand xmm5,XMMWORD[$L$0x1c2_polynomial] ++ pxor xmm2,xmm5 ++ ++ ++ pshufd xmm6,xmm2,78 ++ movdqa xmm0,xmm2 ++ pxor xmm6,xmm2 ++ movdqa xmm1,xmm0 ++ pshufd xmm3,xmm0,78 ++ pxor xmm3,xmm0 ++DB 102,15,58,68,194,0 ++DB 102,15,58,68,202,17 ++DB 102,15,58,68,222,0 ++ pxor xmm3,xmm0 ++ pxor xmm3,xmm1 ++ ++ movdqa xmm4,xmm3 ++ psrldq xmm3,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm3 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++ pshufd xmm3,xmm2,78 ++ pshufd xmm4,xmm0,78 ++ pxor xmm3,xmm2 ++ movdqu XMMWORD[rcx],xmm2 ++ pxor xmm4,xmm0 ++ movdqu XMMWORD[16+rcx],xmm0 ++DB 102,15,58,15,227,8 ++ movdqu XMMWORD[32+rcx],xmm4 ++ movdqa xmm1,xmm0 ++ pshufd xmm3,xmm0,78 ++ pxor xmm3,xmm0 ++DB 102,15,58,68,194,0 ++DB 102,15,58,68,202,17 ++DB 102,15,58,68,222,0 ++ pxor xmm3,xmm0 ++ pxor xmm3,xmm1 ++ ++ movdqa xmm4,xmm3 ++ psrldq xmm3,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm3 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++ movdqa xmm5,xmm0 ++ movdqa xmm1,xmm0 ++ pshufd xmm3,xmm0,78 ++ pxor xmm3,xmm0 ++DB 102,15,58,68,194,0 ++DB 102,15,58,68,202,17 ++DB 102,15,58,68,222,0 ++ pxor xmm3,xmm0 ++ pxor xmm3,xmm1 ++ ++ movdqa xmm4,xmm3 ++ psrldq xmm3,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm3 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++ pshufd xmm3,xmm5,78 ++ pshufd xmm4,xmm0,78 ++ pxor xmm3,xmm5 ++ movdqu XMMWORD[48+rcx],xmm5 ++ pxor xmm4,xmm0 ++ movdqu XMMWORD[64+rcx],xmm0 ++DB 102,15,58,15,227,8 ++ movdqu XMMWORD[80+rcx],xmm4 ++ movaps xmm6,XMMWORD[rsp] ++ lea rsp,[24+rsp] ++$L$SEH_end_gcm_init_clmul: ++ DB 0F3h,0C3h ;repret ++ ++global gcm_gmult_clmul ++ ++ALIGN 16 ++gcm_gmult_clmul: ++$L$_gmult_clmul: ++ movdqu xmm0,XMMWORD[rcx] ++ movdqa xmm5,XMMWORD[$L$bswap_mask] ++ movdqu xmm2,XMMWORD[rdx] ++ movdqu xmm4,XMMWORD[32+rdx] ++DB 102,15,56,0,197 ++ movdqa xmm1,xmm0 ++ pshufd xmm3,xmm0,78 ++ pxor xmm3,xmm0 ++DB 102,15,58,68,194,0 ++DB 102,15,58,68,202,17 ++DB 102,15,58,68,220,0 ++ pxor xmm3,xmm0 ++ pxor xmm3,xmm1 ++ ++ movdqa xmm4,xmm3 ++ psrldq xmm3,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm3 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++DB 102,15,56,0,197 ++ movdqu XMMWORD[rcx],xmm0 ++ DB 0F3h,0C3h ;repret ++ ++global gcm_ghash_clmul ++ ++ALIGN 32 ++gcm_ghash_clmul: ++$L$_ghash_clmul: ++ lea rax,[((-136))+rsp] ++$L$SEH_begin_gcm_ghash_clmul: ++ ++DB 0x48,0x8d,0x60,0xe0 ++DB 0x0f,0x29,0x70,0xe0 ++DB 0x0f,0x29,0x78,0xf0 ++DB 0x44,0x0f,0x29,0x00 ++DB 0x44,0x0f,0x29,0x48,0x10 ++DB 0x44,0x0f,0x29,0x50,0x20 ++DB 0x44,0x0f,0x29,0x58,0x30 ++DB 0x44,0x0f,0x29,0x60,0x40 ++DB 0x44,0x0f,0x29,0x68,0x50 ++DB 0x44,0x0f,0x29,0x70,0x60 ++DB 0x44,0x0f,0x29,0x78,0x70 ++ movdqa xmm10,XMMWORD[$L$bswap_mask] ++ ++ movdqu xmm0,XMMWORD[rcx] ++ movdqu xmm2,XMMWORD[rdx] ++ movdqu xmm7,XMMWORD[32+rdx] ++DB 102,65,15,56,0,194 ++ ++ sub r9,0x10 ++ jz NEAR $L$odd_tail ++ ++ movdqu xmm6,XMMWORD[16+rdx] ++ mov eax,DWORD[((_gnutls_x86_cpuid_s+4))] ++ cmp r9,0x30 ++ jb NEAR $L$skip4x ++ ++ and eax,71303168 ++ cmp eax,4194304 ++ je NEAR $L$skip4x ++ ++ sub r9,0x30 ++ mov rax,0xA040608020C0E000 ++ movdqu xmm14,XMMWORD[48+rdx] ++ movdqu xmm15,XMMWORD[64+rdx] ++ ++ ++ ++ ++ movdqu xmm3,XMMWORD[48+r8] ++ movdqu xmm11,XMMWORD[32+r8] ++DB 102,65,15,56,0,218 ++DB 102,69,15,56,0,218 ++ movdqa xmm5,xmm3 ++ pshufd xmm4,xmm3,78 ++ pxor xmm4,xmm3 ++DB 102,15,58,68,218,0 ++DB 102,15,58,68,234,17 ++DB 102,15,58,68,231,0 ++ ++ movdqa xmm13,xmm11 ++ pshufd xmm12,xmm11,78 ++ pxor xmm12,xmm11 ++DB 102,68,15,58,68,222,0 ++DB 102,68,15,58,68,238,17 ++DB 102,68,15,58,68,231,16 ++ xorps xmm3,xmm11 ++ xorps xmm5,xmm13 ++ movups xmm7,XMMWORD[80+rdx] ++ xorps xmm4,xmm12 ++ ++ movdqu xmm11,XMMWORD[16+r8] ++ movdqu xmm8,XMMWORD[r8] ++DB 102,69,15,56,0,218 ++DB 102,69,15,56,0,194 ++ movdqa xmm13,xmm11 ++ pshufd xmm12,xmm11,78 ++ pxor xmm0,xmm8 ++ pxor xmm12,xmm11 ++DB 102,69,15,58,68,222,0 ++ movdqa xmm1,xmm0 ++ pshufd xmm8,xmm0,78 ++ pxor xmm8,xmm0 ++DB 102,69,15,58,68,238,17 ++DB 102,68,15,58,68,231,0 ++ xorps xmm3,xmm11 ++ xorps xmm5,xmm13 ++ ++ lea r8,[64+r8] ++ sub r9,0x40 ++ jc NEAR $L$tail4x ++ ++ jmp NEAR $L$mod4_loop ++ALIGN 32 ++$L$mod4_loop: ++DB 102,65,15,58,68,199,0 ++ xorps xmm4,xmm12 ++ movdqu xmm11,XMMWORD[48+r8] ++DB 102,69,15,56,0,218 ++DB 102,65,15,58,68,207,17 ++ xorps xmm0,xmm3 ++ movdqu xmm3,XMMWORD[32+r8] ++ movdqa xmm13,xmm11 ++DB 102,68,15,58,68,199,16 ++ pshufd xmm12,xmm11,78 ++ xorps xmm1,xmm5 ++ pxor xmm12,xmm11 ++DB 102,65,15,56,0,218 ++ movups xmm7,XMMWORD[32+rdx] ++ xorps xmm8,xmm4 ++DB 102,68,15,58,68,218,0 ++ pshufd xmm4,xmm3,78 ++ ++ pxor xmm8,xmm0 ++ movdqa xmm5,xmm3 ++ pxor xmm8,xmm1 ++ pxor xmm4,xmm3 ++ movdqa xmm9,xmm8 ++DB 102,68,15,58,68,234,17 ++ pslldq xmm8,8 ++ psrldq xmm9,8 ++ pxor xmm0,xmm8 ++ movdqa xmm8,XMMWORD[$L$7_mask] ++ pxor xmm1,xmm9 ++DB 102,76,15,110,200 ++ ++ pand xmm8,xmm0 ++DB 102,69,15,56,0,200 ++ pxor xmm9,xmm0 ++DB 102,68,15,58,68,231,0 ++ psllq xmm9,57 ++ movdqa xmm8,xmm9 ++ pslldq xmm9,8 ++DB 102,15,58,68,222,0 ++ psrldq xmm8,8 ++ pxor xmm0,xmm9 ++ pxor xmm1,xmm8 ++ movdqu xmm8,XMMWORD[r8] ++ ++ movdqa xmm9,xmm0 ++ psrlq xmm0,1 ++DB 102,15,58,68,238,17 ++ xorps xmm3,xmm11 ++ movdqu xmm11,XMMWORD[16+r8] ++DB 102,69,15,56,0,218 ++DB 102,15,58,68,231,16 ++ xorps xmm5,xmm13 ++ movups xmm7,XMMWORD[80+rdx] ++DB 102,69,15,56,0,194 ++ pxor xmm1,xmm9 ++ pxor xmm9,xmm0 ++ psrlq xmm0,5 ++ ++ movdqa xmm13,xmm11 ++ pxor xmm4,xmm12 ++ pshufd xmm12,xmm11,78 ++ pxor xmm0,xmm9 ++ pxor xmm1,xmm8 ++ pxor xmm12,xmm11 ++DB 102,69,15,58,68,222,0 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++ movdqa xmm1,xmm0 ++DB 102,69,15,58,68,238,17 ++ xorps xmm3,xmm11 ++ pshufd xmm8,xmm0,78 ++ pxor xmm8,xmm0 ++ ++DB 102,68,15,58,68,231,0 ++ xorps xmm5,xmm13 ++ ++ lea r8,[64+r8] ++ sub r9,0x40 ++ jnc NEAR $L$mod4_loop ++ ++$L$tail4x: ++DB 102,65,15,58,68,199,0 ++DB 102,65,15,58,68,207,17 ++DB 102,68,15,58,68,199,16 ++ xorps xmm4,xmm12 ++ xorps xmm0,xmm3 ++ xorps xmm1,xmm5 ++ pxor xmm1,xmm0 ++ pxor xmm8,xmm4 ++ ++ pxor xmm8,xmm1 ++ pxor xmm1,xmm0 ++ ++ movdqa xmm9,xmm8 ++ psrldq xmm8,8 ++ pslldq xmm9,8 ++ pxor xmm1,xmm8 ++ pxor xmm0,xmm9 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++ add r9,0x40 ++ jz NEAR $L$done ++ movdqu xmm7,XMMWORD[32+rdx] ++ sub r9,0x10 ++ jz NEAR $L$odd_tail ++$L$skip4x: ++ ++ ++ ++ ++ ++ movdqu xmm8,XMMWORD[r8] ++ movdqu xmm3,XMMWORD[16+r8] ++DB 102,69,15,56,0,194 ++DB 102,65,15,56,0,218 ++ pxor xmm0,xmm8 ++ ++ movdqa xmm5,xmm3 ++ pshufd xmm4,xmm3,78 ++ pxor xmm4,xmm3 ++DB 102,15,58,68,218,0 ++DB 102,15,58,68,234,17 ++DB 102,15,58,68,231,0 ++ ++ lea r8,[32+r8] ++ nop ++ sub r9,0x20 ++ jbe NEAR $L$even_tail ++ nop ++ jmp NEAR $L$mod_loop ++ ++ALIGN 32 ++$L$mod_loop: ++ movdqa xmm1,xmm0 ++ movdqa xmm8,xmm4 ++ pshufd xmm4,xmm0,78 ++ pxor xmm4,xmm0 ++ ++DB 102,15,58,68,198,0 ++DB 102,15,58,68,206,17 ++DB 102,15,58,68,231,16 ++ ++ pxor xmm0,xmm3 ++ pxor xmm1,xmm5 ++ movdqu xmm9,XMMWORD[r8] ++ pxor xmm8,xmm0 ++DB 102,69,15,56,0,202 ++ movdqu xmm3,XMMWORD[16+r8] ++ ++ pxor xmm8,xmm1 ++ pxor xmm1,xmm9 ++ pxor xmm4,xmm8 ++DB 102,65,15,56,0,218 ++ movdqa xmm8,xmm4 ++ psrldq xmm8,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm8 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm5,xmm3 ++ ++ movdqa xmm9,xmm0 ++ movdqa xmm8,xmm0 ++ psllq xmm0,5 ++ pxor xmm8,xmm0 ++DB 102,15,58,68,218,0 ++ psllq xmm0,1 ++ pxor xmm0,xmm8 ++ psllq xmm0,57 ++ movdqa xmm8,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm8,8 ++ pxor xmm0,xmm9 ++ pshufd xmm4,xmm5,78 ++ pxor xmm1,xmm8 ++ pxor xmm4,xmm5 ++ ++ movdqa xmm9,xmm0 ++ psrlq xmm0,1 ++DB 102,15,58,68,234,17 ++ pxor xmm1,xmm9 ++ pxor xmm9,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm9 ++ lea r8,[32+r8] ++ psrlq xmm0,1 ++DB 102,15,58,68,231,0 ++ pxor xmm0,xmm1 ++ ++ sub r9,0x20 ++ ja NEAR $L$mod_loop ++ ++$L$even_tail: ++ movdqa xmm1,xmm0 ++ movdqa xmm8,xmm4 ++ pshufd xmm4,xmm0,78 ++ pxor xmm4,xmm0 ++ ++DB 102,15,58,68,198,0 ++DB 102,15,58,68,206,17 ++DB 102,15,58,68,231,16 ++ ++ pxor xmm0,xmm3 ++ pxor xmm1,xmm5 ++ pxor xmm8,xmm0 ++ pxor xmm8,xmm1 ++ pxor xmm4,xmm8 ++ movdqa xmm8,xmm4 ++ psrldq xmm8,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm8 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++ test r9,r9 ++ jnz NEAR $L$done ++ ++$L$odd_tail: ++ movdqu xmm8,XMMWORD[r8] ++DB 102,69,15,56,0,194 ++ pxor xmm0,xmm8 ++ movdqa xmm1,xmm0 ++ pshufd xmm3,xmm0,78 ++ pxor xmm3,xmm0 ++DB 102,15,58,68,194,0 ++DB 102,15,58,68,202,17 ++DB 102,15,58,68,223,0 ++ pxor xmm3,xmm0 ++ pxor xmm3,xmm1 ++ ++ movdqa xmm4,xmm3 ++ psrldq xmm3,8 ++ pslldq xmm4,8 ++ pxor xmm1,xmm3 ++ pxor xmm0,xmm4 ++ ++ movdqa xmm4,xmm0 ++ movdqa xmm3,xmm0 ++ psllq xmm0,5 ++ pxor xmm3,xmm0 ++ psllq xmm0,1 ++ pxor xmm0,xmm3 ++ psllq xmm0,57 ++ movdqa xmm3,xmm0 ++ pslldq xmm0,8 ++ psrldq xmm3,8 ++ pxor xmm0,xmm4 ++ pxor xmm1,xmm3 ++ ++ ++ movdqa xmm4,xmm0 ++ psrlq xmm0,1 ++ pxor xmm1,xmm4 ++ pxor xmm4,xmm0 ++ psrlq xmm0,5 ++ pxor xmm0,xmm4 ++ psrlq xmm0,1 ++ pxor xmm0,xmm1 ++$L$done: ++DB 102,65,15,56,0,194 ++ movdqu XMMWORD[rcx],xmm0 ++ movaps xmm6,XMMWORD[rsp] ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps xmm10,XMMWORD[64+rsp] ++ movaps xmm11,XMMWORD[80+rsp] ++ movaps xmm12,XMMWORD[96+rsp] ++ movaps xmm13,XMMWORD[112+rsp] ++ movaps xmm14,XMMWORD[128+rsp] ++ movaps xmm15,XMMWORD[144+rsp] ++ lea rsp,[168+rsp] ++$L$SEH_end_gcm_ghash_clmul: ++ DB 0F3h,0C3h ;repret ++ ++global gcm_init_avx ++ ++ALIGN 32 ++gcm_init_avx: ++$L$SEH_begin_gcm_init_avx: ++ ++DB 0x48,0x83,0xec,0x18 ++DB 0x0f,0x29,0x34,0x24 ++ vzeroupper ++ ++ vmovdqu xmm2,XMMWORD[rdx] ++ vpshufd xmm2,xmm2,78 ++ ++ ++ vpshufd xmm4,xmm2,255 ++ vpsrlq xmm3,xmm2,63 ++ vpsllq xmm2,xmm2,1 ++ vpxor xmm5,xmm5,xmm5 ++ vpcmpgtd xmm5,xmm5,xmm4 ++ vpslldq xmm3,xmm3,8 ++ vpor xmm2,xmm2,xmm3 ++ ++ ++ vpand xmm5,xmm5,XMMWORD[$L$0x1c2_polynomial] ++ vpxor xmm2,xmm2,xmm5 ++ ++ vpunpckhqdq xmm6,xmm2,xmm2 ++ vmovdqa xmm0,xmm2 ++ vpxor xmm6,xmm6,xmm2 ++ mov r10,4 ++ jmp NEAR $L$init_start_avx ++ALIGN 32 ++$L$init_loop_avx: ++ vpalignr xmm5,xmm4,xmm3,8 ++ vmovdqu XMMWORD[(-16)+rcx],xmm5 ++ vpunpckhqdq xmm3,xmm0,xmm0 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm1,xmm0,xmm2,0x11 ++ vpclmulqdq xmm0,xmm0,xmm2,0x00 ++ vpclmulqdq xmm3,xmm3,xmm6,0x00 ++ vpxor xmm4,xmm1,xmm0 ++ vpxor xmm3,xmm3,xmm4 ++ ++ vpslldq xmm4,xmm3,8 ++ vpsrldq xmm3,xmm3,8 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm1,xmm1,xmm3 ++ vpsllq xmm3,xmm0,57 ++ vpsllq xmm4,xmm0,62 ++ vpxor xmm4,xmm4,xmm3 ++ vpsllq xmm3,xmm0,63 ++ vpxor xmm4,xmm4,xmm3 ++ vpslldq xmm3,xmm4,8 ++ vpsrldq xmm4,xmm4,8 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm1,xmm1,xmm4 ++ ++ vpsrlq xmm4,xmm0,1 ++ vpxor xmm1,xmm1,xmm0 ++ vpxor xmm0,xmm0,xmm4 ++ vpsrlq xmm4,xmm4,5 ++ vpxor xmm0,xmm0,xmm4 ++ vpsrlq xmm0,xmm0,1 ++ vpxor xmm0,xmm0,xmm1 ++$L$init_start_avx: ++ vmovdqa xmm5,xmm0 ++ vpunpckhqdq xmm3,xmm0,xmm0 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm1,xmm0,xmm2,0x11 ++ vpclmulqdq xmm0,xmm0,xmm2,0x00 ++ vpclmulqdq xmm3,xmm3,xmm6,0x00 ++ vpxor xmm4,xmm1,xmm0 ++ vpxor xmm3,xmm3,xmm4 ++ ++ vpslldq xmm4,xmm3,8 ++ vpsrldq xmm3,xmm3,8 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm1,xmm1,xmm3 ++ vpsllq xmm3,xmm0,57 ++ vpsllq xmm4,xmm0,62 ++ vpxor xmm4,xmm4,xmm3 ++ vpsllq xmm3,xmm0,63 ++ vpxor xmm4,xmm4,xmm3 ++ vpslldq xmm3,xmm4,8 ++ vpsrldq xmm4,xmm4,8 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm1,xmm1,xmm4 ++ ++ vpsrlq xmm4,xmm0,1 ++ vpxor xmm1,xmm1,xmm0 ++ vpxor xmm0,xmm0,xmm4 ++ vpsrlq xmm4,xmm4,5 ++ vpxor xmm0,xmm0,xmm4 ++ vpsrlq xmm0,xmm0,1 ++ vpxor xmm0,xmm0,xmm1 ++ vpshufd xmm3,xmm5,78 ++ vpshufd xmm4,xmm0,78 ++ vpxor xmm3,xmm3,xmm5 ++ vmovdqu XMMWORD[rcx],xmm5 ++ vpxor xmm4,xmm4,xmm0 ++ vmovdqu XMMWORD[16+rcx],xmm0 ++ lea rcx,[48+rcx] ++ sub r10,1 ++ jnz NEAR $L$init_loop_avx ++ ++ vpalignr xmm5,xmm3,xmm4,8 ++ vmovdqu XMMWORD[(-16)+rcx],xmm5 ++ ++ vzeroupper ++ movaps xmm6,XMMWORD[rsp] ++ lea rsp,[24+rsp] ++$L$SEH_end_gcm_init_avx: ++ DB 0F3h,0C3h ;repret ++ ++global gcm_gmult_avx ++ ++ALIGN 32 ++gcm_gmult_avx: ++ jmp NEAR $L$_gmult_clmul ++ ++global gcm_ghash_avx ++ ++ALIGN 32 ++gcm_ghash_avx: ++ lea rax,[((-136))+rsp] ++$L$SEH_begin_gcm_ghash_avx: ++ ++DB 0x48,0x8d,0x60,0xe0 ++DB 0x0f,0x29,0x70,0xe0 ++DB 0x0f,0x29,0x78,0xf0 ++DB 0x44,0x0f,0x29,0x00 ++DB 0x44,0x0f,0x29,0x48,0x10 ++DB 0x44,0x0f,0x29,0x50,0x20 ++DB 0x44,0x0f,0x29,0x58,0x30 ++DB 0x44,0x0f,0x29,0x60,0x40 ++DB 0x44,0x0f,0x29,0x68,0x50 ++DB 0x44,0x0f,0x29,0x70,0x60 ++DB 0x44,0x0f,0x29,0x78,0x70 ++ vzeroupper ++ ++ vmovdqu xmm10,XMMWORD[rcx] ++ lea r10,[$L$0x1c2_polynomial] ++ lea rdx,[64+rdx] ++ vmovdqu xmm13,XMMWORD[$L$bswap_mask] ++ vpshufb xmm10,xmm10,xmm13 ++ cmp r9,0x80 ++ jb NEAR $L$short_avx ++ sub r9,0x80 ++ ++ vmovdqu xmm14,XMMWORD[112+r8] ++ vmovdqu xmm6,XMMWORD[((0-64))+rdx] ++ vpshufb xmm14,xmm14,xmm13 ++ vmovdqu xmm7,XMMWORD[((32-64))+rdx] ++ ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vmovdqu xmm15,XMMWORD[96+r8] ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpxor xmm9,xmm9,xmm14 ++ vpshufb xmm15,xmm15,xmm13 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((16-64))+rdx] ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vmovdqu xmm14,XMMWORD[80+r8] ++ vpclmulqdq xmm2,xmm9,xmm7,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ ++ vpshufb xmm14,xmm14,xmm13 ++ vpclmulqdq xmm3,xmm15,xmm6,0x00 ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpclmulqdq xmm4,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((48-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ vmovdqu xmm15,XMMWORD[64+r8] ++ vpclmulqdq xmm5,xmm8,xmm7,0x10 ++ vmovdqu xmm7,XMMWORD[((80-64))+rdx] ++ ++ vpshufb xmm15,xmm15,xmm13 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpxor xmm4,xmm4,xmm1 ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((64-64))+rdx] ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm9,xmm7,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ ++ vmovdqu xmm14,XMMWORD[48+r8] ++ vpxor xmm0,xmm0,xmm3 ++ vpclmulqdq xmm3,xmm15,xmm6,0x00 ++ vpxor xmm1,xmm1,xmm4 ++ vpshufb xmm14,xmm14,xmm13 ++ vpclmulqdq xmm4,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((96-64))+rdx] ++ vpxor xmm2,xmm2,xmm5 ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpclmulqdq xmm5,xmm8,xmm7,0x10 ++ vmovdqu xmm7,XMMWORD[((128-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ ++ vmovdqu xmm15,XMMWORD[32+r8] ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpxor xmm4,xmm4,xmm1 ++ vpshufb xmm15,xmm15,xmm13 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((112-64))+rdx] ++ vpxor xmm5,xmm5,xmm2 ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpclmulqdq xmm2,xmm9,xmm7,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ ++ vmovdqu xmm14,XMMWORD[16+r8] ++ vpxor xmm0,xmm0,xmm3 ++ vpclmulqdq xmm3,xmm15,xmm6,0x00 ++ vpxor xmm1,xmm1,xmm4 ++ vpshufb xmm14,xmm14,xmm13 ++ vpclmulqdq xmm4,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((144-64))+rdx] ++ vpxor xmm2,xmm2,xmm5 ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpclmulqdq xmm5,xmm8,xmm7,0x10 ++ vmovdqu xmm7,XMMWORD[((176-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ ++ vmovdqu xmm15,XMMWORD[r8] ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpxor xmm4,xmm4,xmm1 ++ vpshufb xmm15,xmm15,xmm13 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((160-64))+rdx] ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm9,xmm7,0x10 ++ ++ lea r8,[128+r8] ++ cmp r9,0x80 ++ jb NEAR $L$tail_avx ++ ++ vpxor xmm15,xmm15,xmm10 ++ sub r9,0x80 ++ jmp NEAR $L$oop8x_avx ++ ++ALIGN 32 ++$L$oop8x_avx: ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vmovdqu xmm14,XMMWORD[112+r8] ++ vpxor xmm3,xmm3,xmm0 ++ vpxor xmm8,xmm8,xmm15 ++ vpclmulqdq xmm10,xmm15,xmm6,0x00 ++ vpshufb xmm14,xmm14,xmm13 ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm11,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((0-64))+rdx] ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm12,xmm8,xmm7,0x00 ++ vmovdqu xmm7,XMMWORD[((32-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ ++ vmovdqu xmm15,XMMWORD[96+r8] ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpxor xmm10,xmm10,xmm3 ++ vpshufb xmm15,xmm15,xmm13 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vxorps xmm11,xmm11,xmm4 ++ vmovdqu xmm6,XMMWORD[((16-64))+rdx] ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpclmulqdq xmm2,xmm9,xmm7,0x00 ++ vpxor xmm12,xmm12,xmm5 ++ vxorps xmm8,xmm8,xmm15 ++ ++ vmovdqu xmm14,XMMWORD[80+r8] ++ vpxor xmm12,xmm12,xmm10 ++ vpclmulqdq xmm3,xmm15,xmm6,0x00 ++ vpxor xmm12,xmm12,xmm11 ++ vpslldq xmm9,xmm12,8 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm4,xmm15,xmm6,0x11 ++ vpsrldq xmm12,xmm12,8 ++ vpxor xmm10,xmm10,xmm9 ++ vmovdqu xmm6,XMMWORD[((48-64))+rdx] ++ vpshufb xmm14,xmm14,xmm13 ++ vxorps xmm11,xmm11,xmm12 ++ vpxor xmm4,xmm4,xmm1 ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpclmulqdq xmm5,xmm8,xmm7,0x10 ++ vmovdqu xmm7,XMMWORD[((80-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ vpxor xmm5,xmm5,xmm2 ++ ++ vmovdqu xmm15,XMMWORD[64+r8] ++ vpalignr xmm12,xmm10,xmm10,8 ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpshufb xmm15,xmm15,xmm13 ++ vpxor xmm0,xmm0,xmm3 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((64-64))+rdx] ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm1,xmm1,xmm4 ++ vpclmulqdq xmm2,xmm9,xmm7,0x00 ++ vxorps xmm8,xmm8,xmm15 ++ vpxor xmm2,xmm2,xmm5 ++ ++ vmovdqu xmm14,XMMWORD[48+r8] ++ vpclmulqdq xmm10,xmm10,XMMWORD[r10],0x10 ++ vpclmulqdq xmm3,xmm15,xmm6,0x00 ++ vpshufb xmm14,xmm14,xmm13 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm4,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((96-64))+rdx] ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm5,xmm8,xmm7,0x10 ++ vmovdqu xmm7,XMMWORD[((128-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ vpxor xmm5,xmm5,xmm2 ++ ++ vmovdqu xmm15,XMMWORD[32+r8] ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpshufb xmm15,xmm15,xmm13 ++ vpxor xmm0,xmm0,xmm3 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((112-64))+rdx] ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm1,xmm1,xmm4 ++ vpclmulqdq xmm2,xmm9,xmm7,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vpxor xmm2,xmm2,xmm5 ++ vxorps xmm10,xmm10,xmm12 ++ ++ vmovdqu xmm14,XMMWORD[16+r8] ++ vpalignr xmm12,xmm10,xmm10,8 ++ vpclmulqdq xmm3,xmm15,xmm6,0x00 ++ vpshufb xmm14,xmm14,xmm13 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm4,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((144-64))+rdx] ++ vpclmulqdq xmm10,xmm10,XMMWORD[r10],0x10 ++ vxorps xmm12,xmm12,xmm11 ++ vpunpckhqdq xmm9,xmm14,xmm14 ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm5,xmm8,xmm7,0x10 ++ vmovdqu xmm7,XMMWORD[((176-64))+rdx] ++ vpxor xmm9,xmm9,xmm14 ++ vpxor xmm5,xmm5,xmm2 ++ ++ vmovdqu xmm15,XMMWORD[r8] ++ vpclmulqdq xmm0,xmm14,xmm6,0x00 ++ vpshufb xmm15,xmm15,xmm13 ++ vpclmulqdq xmm1,xmm14,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((160-64))+rdx] ++ vpxor xmm15,xmm15,xmm12 ++ vpclmulqdq xmm2,xmm9,xmm7,0x10 ++ vpxor xmm15,xmm15,xmm10 ++ ++ lea r8,[128+r8] ++ sub r9,0x80 ++ jnc NEAR $L$oop8x_avx ++ ++ add r9,0x80 ++ jmp NEAR $L$tail_no_xor_avx ++ ++ALIGN 32 ++$L$short_avx: ++ vmovdqu xmm14,XMMWORD[((-16))+r9*1+r8] ++ lea r8,[r9*1+r8] ++ vmovdqu xmm6,XMMWORD[((0-64))+rdx] ++ vmovdqu xmm7,XMMWORD[((32-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ ++ vmovdqa xmm3,xmm0 ++ vmovdqa xmm4,xmm1 ++ vmovdqa xmm5,xmm2 ++ sub r9,0x10 ++ jz NEAR $L$tail_avx ++ ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vmovdqu xmm14,XMMWORD[((-32))+r8] ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((16-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ vpsrldq xmm7,xmm7,8 ++ sub r9,0x10 ++ jz NEAR $L$tail_avx ++ ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vmovdqu xmm14,XMMWORD[((-48))+r8] ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((48-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ vmovdqu xmm7,XMMWORD[((80-64))+rdx] ++ sub r9,0x10 ++ jz NEAR $L$tail_avx ++ ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vmovdqu xmm14,XMMWORD[((-64))+r8] ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((64-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ vpsrldq xmm7,xmm7,8 ++ sub r9,0x10 ++ jz NEAR $L$tail_avx ++ ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vmovdqu xmm14,XMMWORD[((-80))+r8] ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((96-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ vmovdqu xmm7,XMMWORD[((128-64))+rdx] ++ sub r9,0x10 ++ jz NEAR $L$tail_avx ++ ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vmovdqu xmm14,XMMWORD[((-96))+r8] ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((112-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ vpsrldq xmm7,xmm7,8 ++ sub r9,0x10 ++ jz NEAR $L$tail_avx ++ ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vmovdqu xmm14,XMMWORD[((-112))+r8] ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vmovdqu xmm6,XMMWORD[((144-64))+rdx] ++ vpshufb xmm15,xmm14,xmm13 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ vmovq xmm7,QWORD[((184-64))+rdx] ++ sub r9,0x10 ++ jmp NEAR $L$tail_avx ++ ++ALIGN 32 ++$L$tail_avx: ++ vpxor xmm15,xmm15,xmm10 ++$L$tail_no_xor_avx: ++ vpunpckhqdq xmm8,xmm15,xmm15 ++ vpxor xmm3,xmm3,xmm0 ++ vpclmulqdq xmm0,xmm15,xmm6,0x00 ++ vpxor xmm8,xmm8,xmm15 ++ vpxor xmm4,xmm4,xmm1 ++ vpclmulqdq xmm1,xmm15,xmm6,0x11 ++ vpxor xmm5,xmm5,xmm2 ++ vpclmulqdq xmm2,xmm8,xmm7,0x00 ++ ++ vmovdqu xmm12,XMMWORD[r10] ++ ++ vpxor xmm10,xmm3,xmm0 ++ vpxor xmm11,xmm4,xmm1 ++ vpxor xmm5,xmm5,xmm2 ++ ++ vpxor xmm5,xmm5,xmm10 ++ vpxor xmm5,xmm5,xmm11 ++ vpslldq xmm9,xmm5,8 ++ vpsrldq xmm5,xmm5,8 ++ vpxor xmm10,xmm10,xmm9 ++ vpxor xmm11,xmm11,xmm5 ++ ++ vpclmulqdq xmm9,xmm10,xmm12,0x10 ++ vpalignr xmm10,xmm10,xmm10,8 ++ vpxor xmm10,xmm10,xmm9 ++ ++ vpclmulqdq xmm9,xmm10,xmm12,0x10 ++ vpalignr xmm10,xmm10,xmm10,8 ++ vpxor xmm10,xmm10,xmm11 ++ vpxor xmm10,xmm10,xmm9 ++ ++ cmp r9,0 ++ jne NEAR $L$short_avx ++ ++ vpshufb xmm10,xmm10,xmm13 ++ vmovdqu XMMWORD[rcx],xmm10 ++ vzeroupper ++ movaps xmm6,XMMWORD[rsp] ++ movaps xmm7,XMMWORD[16+rsp] ++ movaps xmm8,XMMWORD[32+rsp] ++ movaps xmm9,XMMWORD[48+rsp] ++ movaps xmm10,XMMWORD[64+rsp] ++ movaps xmm11,XMMWORD[80+rsp] ++ movaps xmm12,XMMWORD[96+rsp] ++ movaps xmm13,XMMWORD[112+rsp] ++ movaps xmm14,XMMWORD[128+rsp] ++ movaps xmm15,XMMWORD[144+rsp] ++ lea rsp,[168+rsp] ++$L$SEH_end_gcm_ghash_avx: ++ DB 0F3h,0C3h ;repret ++ ++ALIGN 64 ++$L$bswap_mask: ++DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 ++$L$0x1c2_polynomial: ++DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2 ++$L$7_mask: ++ DD 7,0,7,0 ++$L$7_mask_poly: ++ DD 7,0,450,0 ++ALIGN 64 ++ ++$L$rem_4bit: ++ DD 0,0,0,471859200,0,943718400,0,610271232 ++ DD 0,1887436800,0,1822425088,0,1220542464,0,1423966208 ++ DD 0,3774873600,0,4246732800,0,3644850176,0,3311403008 ++ DD 0,2441084928,0,2376073216,0,2847932416,0,3051356160 ++ ++$L$rem_8bit: ++ DW 0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E ++ DW 0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E ++ DW 0x1C20,0x1DE2,0x1FA4,0x1E66,0x1B28,0x1AEA,0x18AC,0x196E ++ DW 0x1230,0x13F2,0x11B4,0x1076,0x1538,0x14FA,0x16BC,0x177E ++ DW 0x3840,0x3982,0x3BC4,0x3A06,0x3F48,0x3E8A,0x3CCC,0x3D0E ++ DW 0x3650,0x3792,0x35D4,0x3416,0x3158,0x309A,0x32DC,0x331E ++ DW 0x2460,0x25A2,0x27E4,0x2626,0x2368,0x22AA,0x20EC,0x212E ++ DW 0x2A70,0x2BB2,0x29F4,0x2836,0x2D78,0x2CBA,0x2EFC,0x2F3E ++ DW 0x7080,0x7142,0x7304,0x72C6,0x7788,0x764A,0x740C,0x75CE ++ DW 0x7E90,0x7F52,0x7D14,0x7CD6,0x7998,0x785A,0x7A1C,0x7BDE ++ DW 0x6CA0,0x6D62,0x6F24,0x6EE6,0x6BA8,0x6A6A,0x682C,0x69EE ++ DW 0x62B0,0x6372,0x6134,0x60F6,0x65B8,0x647A,0x663C,0x67FE ++ DW 0x48C0,0x4902,0x4B44,0x4A86,0x4FC8,0x4E0A,0x4C4C,0x4D8E ++ DW 0x46D0,0x4712,0x4554,0x4496,0x41D8,0x401A,0x425C,0x439E ++ DW 0x54E0,0x5522,0x5764,0x56A6,0x53E8,0x522A,0x506C,0x51AE ++ DW 0x5AF0,0x5B32,0x5974,0x58B6,0x5DF8,0x5C3A,0x5E7C,0x5FBE ++ DW 0xE100,0xE0C2,0xE284,0xE346,0xE608,0xE7CA,0xE58C,0xE44E ++ DW 0xEF10,0xEED2,0xEC94,0xED56,0xE818,0xE9DA,0xEB9C,0xEA5E ++ DW 0xFD20,0xFCE2,0xFEA4,0xFF66,0xFA28,0xFBEA,0xF9AC,0xF86E ++ DW 0xF330,0xF2F2,0xF0B4,0xF176,0xF438,0xF5FA,0xF7BC,0xF67E ++ DW 0xD940,0xD882,0xDAC4,0xDB06,0xDE48,0xDF8A,0xDDCC,0xDC0E ++ DW 0xD750,0xD692,0xD4D4,0xD516,0xD058,0xD19A,0xD3DC,0xD21E ++ DW 0xC560,0xC4A2,0xC6E4,0xC726,0xC268,0xC3AA,0xC1EC,0xC02E ++ DW 0xCB70,0xCAB2,0xC8F4,0xC936,0xCC78,0xCDBA,0xCFFC,0xCE3E ++ DW 0x9180,0x9042,0x9204,0x93C6,0x9688,0x974A,0x950C,0x94CE ++ DW 0x9F90,0x9E52,0x9C14,0x9DD6,0x9898,0x995A,0x9B1C,0x9ADE ++ DW 0x8DA0,0x8C62,0x8E24,0x8FE6,0x8AA8,0x8B6A,0x892C,0x88EE ++ DW 0x83B0,0x8272,0x8034,0x81F6,0x84B8,0x857A,0x873C,0x86FE ++ DW 0xA9C0,0xA802,0xAA44,0xAB86,0xAEC8,0xAF0A,0xAD4C,0xAC8E ++ DW 0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E ++ DW 0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE ++ DW 0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE ++ ++DB 71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52 ++DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32 ++DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111 ++DB 114,103,62,0 ++ALIGN 64 ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$in_prologue ++ ++ lea rax,[24+rax] ++ ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ mov QWORD[216+r8],r12 ++ ++$L$in_prologue: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_gcm_gmult_4bit wrt ..imagebase ++ DD $L$SEH_end_gcm_gmult_4bit wrt ..imagebase ++ DD $L$SEH_info_gcm_gmult_4bit wrt ..imagebase ++ ++ DD $L$SEH_begin_gcm_ghash_4bit wrt ..imagebase ++ DD $L$SEH_end_gcm_ghash_4bit wrt ..imagebase ++ DD $L$SEH_info_gcm_ghash_4bit wrt ..imagebase ++ ++ DD $L$SEH_begin_gcm_init_clmul wrt ..imagebase ++ DD $L$SEH_end_gcm_init_clmul wrt ..imagebase ++ DD $L$SEH_info_gcm_init_clmul wrt ..imagebase ++ ++ DD $L$SEH_begin_gcm_ghash_clmul wrt ..imagebase ++ DD $L$SEH_end_gcm_ghash_clmul wrt ..imagebase ++ DD $L$SEH_info_gcm_ghash_clmul wrt ..imagebase ++ DD $L$SEH_begin_gcm_init_avx wrt ..imagebase ++ DD $L$SEH_end_gcm_init_avx wrt ..imagebase ++ DD $L$SEH_info_gcm_init_clmul wrt ..imagebase ++ ++ DD $L$SEH_begin_gcm_ghash_avx wrt ..imagebase ++ DD $L$SEH_end_gcm_ghash_avx wrt ..imagebase ++ DD $L$SEH_info_gcm_ghash_clmul wrt ..imagebase ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_info_gcm_gmult_4bit: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$gmult_prologue wrt ..imagebase,$L$gmult_epilogue wrt ..imagebase ++$L$SEH_info_gcm_ghash_4bit: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$ghash_prologue wrt ..imagebase,$L$ghash_epilogue wrt ..imagebase ++$L$SEH_info_gcm_init_clmul: ++DB 0x01,0x08,0x03,0x00 ++DB 0x08,0x68,0x00,0x00 ++DB 0x04,0x22,0x00,0x00 ++$L$SEH_info_gcm_ghash_clmul: ++DB 0x01,0x33,0x16,0x00 ++DB 0x33,0xf8,0x09,0x00 ++DB 0x2e,0xe8,0x08,0x00 ++DB 0x29,0xd8,0x07,0x00 ++DB 0x24,0xc8,0x06,0x00 ++DB 0x1f,0xb8,0x05,0x00 ++DB 0x1a,0xa8,0x04,0x00 ++DB 0x15,0x98,0x03,0x00 ++DB 0x10,0x88,0x02,0x00 ++DB 0x0c,0x78,0x01,0x00 ++DB 0x08,0x68,0x00,0x00 ++DB 0x04,0x01,0x15,0x00 +diff --git a/SMP/lib/accelerated/x86/coff/sha1-ssse3-x86.asm b/SMP/lib/accelerated/x86/coff/sha1-ssse3-x86.asm +new file mode 100644 +index 0000000..0dfcc2e +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/sha1-ssse3-x86.asm +@@ -0,0 +1,1386 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++global _sha1_block_data_order ++align 16 ++_sha1_block_data_order: ++L$_sha1_block_data_order_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov ebp,DWORD [20+esp] ++ mov esi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ sub esp,76 ++ shl eax,6 ++ add eax,esi ++ mov DWORD [104+esp],eax ++ mov edi,DWORD [16+ebp] ++ jmp NEAR L$000loop ++align 16 ++L$000loop: ++ mov eax,DWORD [esi] ++ mov ebx,DWORD [4+esi] ++ mov ecx,DWORD [8+esi] ++ mov edx,DWORD [12+esi] ++ bswap eax ++ bswap ebx ++ bswap ecx ++ bswap edx ++ mov DWORD [esp],eax ++ mov DWORD [4+esp],ebx ++ mov DWORD [8+esp],ecx ++ mov DWORD [12+esp],edx ++ mov eax,DWORD [16+esi] ++ mov ebx,DWORD [20+esi] ++ mov ecx,DWORD [24+esi] ++ mov edx,DWORD [28+esi] ++ bswap eax ++ bswap ebx ++ bswap ecx ++ bswap edx ++ mov DWORD [16+esp],eax ++ mov DWORD [20+esp],ebx ++ mov DWORD [24+esp],ecx ++ mov DWORD [28+esp],edx ++ mov eax,DWORD [32+esi] ++ mov ebx,DWORD [36+esi] ++ mov ecx,DWORD [40+esi] ++ mov edx,DWORD [44+esi] ++ bswap eax ++ bswap ebx ++ bswap ecx ++ bswap edx ++ mov DWORD [32+esp],eax ++ mov DWORD [36+esp],ebx ++ mov DWORD [40+esp],ecx ++ mov DWORD [44+esp],edx ++ mov eax,DWORD [48+esi] ++ mov ebx,DWORD [52+esi] ++ mov ecx,DWORD [56+esi] ++ mov edx,DWORD [60+esi] ++ bswap eax ++ bswap ebx ++ bswap ecx ++ bswap edx ++ mov DWORD [48+esp],eax ++ mov DWORD [52+esp],ebx ++ mov DWORD [56+esp],ecx ++ mov DWORD [60+esp],edx ++ mov DWORD [100+esp],esi ++ mov eax,DWORD [ebp] ++ mov ebx,DWORD [4+ebp] ++ mov ecx,DWORD [8+ebp] ++ mov edx,DWORD [12+ebp] ++ ; 00_15 0 ++ mov esi,ecx ++ mov ebp,eax ++ rol ebp,5 ++ xor esi,edx ++ add ebp,edi ++ mov edi,DWORD [esp] ++ and esi,ebx ++ ror ebx,2 ++ xor esi,edx ++ lea ebp,[1518500249+edi*1+ebp] ++ add ebp,esi ++ ; 00_15 1 ++ mov edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ xor edi,ecx ++ add ebp,edx ++ mov edx,DWORD [4+esp] ++ and edi,eax ++ ror eax,2 ++ xor edi,ecx ++ lea ebp,[1518500249+edx*1+ebp] ++ add ebp,edi ++ ; 00_15 2 ++ mov edx,eax ++ mov edi,ebp ++ rol ebp,5 ++ xor edx,ebx ++ add ebp,ecx ++ mov ecx,DWORD [8+esp] ++ and edx,esi ++ ror esi,2 ++ xor edx,ebx ++ lea ebp,[1518500249+ecx*1+ebp] ++ add ebp,edx ++ ; 00_15 3 ++ mov ecx,esi ++ mov edx,ebp ++ rol ebp,5 ++ xor ecx,eax ++ add ebp,ebx ++ mov ebx,DWORD [12+esp] ++ and ecx,edi ++ ror edi,2 ++ xor ecx,eax ++ lea ebp,[1518500249+ebx*1+ebp] ++ add ebp,ecx ++ ; 00_15 4 ++ mov ebx,edi ++ mov ecx,ebp ++ rol ebp,5 ++ xor ebx,esi ++ add ebp,eax ++ mov eax,DWORD [16+esp] ++ and ebx,edx ++ ror edx,2 ++ xor ebx,esi ++ lea ebp,[1518500249+eax*1+ebp] ++ add ebp,ebx ++ ; 00_15 5 ++ mov eax,edx ++ mov ebx,ebp ++ rol ebp,5 ++ xor eax,edi ++ add ebp,esi ++ mov esi,DWORD [20+esp] ++ and eax,ecx ++ ror ecx,2 ++ xor eax,edi ++ lea ebp,[1518500249+esi*1+ebp] ++ add ebp,eax ++ ; 00_15 6 ++ mov esi,ecx ++ mov eax,ebp ++ rol ebp,5 ++ xor esi,edx ++ add ebp,edi ++ mov edi,DWORD [24+esp] ++ and esi,ebx ++ ror ebx,2 ++ xor esi,edx ++ lea ebp,[1518500249+edi*1+ebp] ++ add ebp,esi ++ ; 00_15 7 ++ mov edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ xor edi,ecx ++ add ebp,edx ++ mov edx,DWORD [28+esp] ++ and edi,eax ++ ror eax,2 ++ xor edi,ecx ++ lea ebp,[1518500249+edx*1+ebp] ++ add ebp,edi ++ ; 00_15 8 ++ mov edx,eax ++ mov edi,ebp ++ rol ebp,5 ++ xor edx,ebx ++ add ebp,ecx ++ mov ecx,DWORD [32+esp] ++ and edx,esi ++ ror esi,2 ++ xor edx,ebx ++ lea ebp,[1518500249+ecx*1+ebp] ++ add ebp,edx ++ ; 00_15 9 ++ mov ecx,esi ++ mov edx,ebp ++ rol ebp,5 ++ xor ecx,eax ++ add ebp,ebx ++ mov ebx,DWORD [36+esp] ++ and ecx,edi ++ ror edi,2 ++ xor ecx,eax ++ lea ebp,[1518500249+ebx*1+ebp] ++ add ebp,ecx ++ ; 00_15 10 ++ mov ebx,edi ++ mov ecx,ebp ++ rol ebp,5 ++ xor ebx,esi ++ add ebp,eax ++ mov eax,DWORD [40+esp] ++ and ebx,edx ++ ror edx,2 ++ xor ebx,esi ++ lea ebp,[1518500249+eax*1+ebp] ++ add ebp,ebx ++ ; 00_15 11 ++ mov eax,edx ++ mov ebx,ebp ++ rol ebp,5 ++ xor eax,edi ++ add ebp,esi ++ mov esi,DWORD [44+esp] ++ and eax,ecx ++ ror ecx,2 ++ xor eax,edi ++ lea ebp,[1518500249+esi*1+ebp] ++ add ebp,eax ++ ; 00_15 12 ++ mov esi,ecx ++ mov eax,ebp ++ rol ebp,5 ++ xor esi,edx ++ add ebp,edi ++ mov edi,DWORD [48+esp] ++ and esi,ebx ++ ror ebx,2 ++ xor esi,edx ++ lea ebp,[1518500249+edi*1+ebp] ++ add ebp,esi ++ ; 00_15 13 ++ mov edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ xor edi,ecx ++ add ebp,edx ++ mov edx,DWORD [52+esp] ++ and edi,eax ++ ror eax,2 ++ xor edi,ecx ++ lea ebp,[1518500249+edx*1+ebp] ++ add ebp,edi ++ ; 00_15 14 ++ mov edx,eax ++ mov edi,ebp ++ rol ebp,5 ++ xor edx,ebx ++ add ebp,ecx ++ mov ecx,DWORD [56+esp] ++ and edx,esi ++ ror esi,2 ++ xor edx,ebx ++ lea ebp,[1518500249+ecx*1+ebp] ++ add ebp,edx ++ ; 00_15 15 ++ mov ecx,esi ++ mov edx,ebp ++ rol ebp,5 ++ xor ecx,eax ++ add ebp,ebx ++ mov ebx,DWORD [60+esp] ++ and ecx,edi ++ ror edi,2 ++ xor ecx,eax ++ lea ebp,[1518500249+ebx*1+ebp] ++ mov ebx,DWORD [esp] ++ add ecx,ebp ++ ; 16_19 16 ++ mov ebp,edi ++ xor ebx,DWORD [8+esp] ++ xor ebp,esi ++ xor ebx,DWORD [32+esp] ++ and ebp,edx ++ xor ebx,DWORD [52+esp] ++ rol ebx,1 ++ xor ebp,esi ++ add eax,ebp ++ mov ebp,ecx ++ ror edx,2 ++ mov DWORD [esp],ebx ++ rol ebp,5 ++ lea ebx,[1518500249+eax*1+ebx] ++ mov eax,DWORD [4+esp] ++ add ebx,ebp ++ ; 16_19 17 ++ mov ebp,edx ++ xor eax,DWORD [12+esp] ++ xor ebp,edi ++ xor eax,DWORD [36+esp] ++ and ebp,ecx ++ xor eax,DWORD [56+esp] ++ rol eax,1 ++ xor ebp,edi ++ add esi,ebp ++ mov ebp,ebx ++ ror ecx,2 ++ mov DWORD [4+esp],eax ++ rol ebp,5 ++ lea eax,[1518500249+esi*1+eax] ++ mov esi,DWORD [8+esp] ++ add eax,ebp ++ ; 16_19 18 ++ mov ebp,ecx ++ xor esi,DWORD [16+esp] ++ xor ebp,edx ++ xor esi,DWORD [40+esp] ++ and ebp,ebx ++ xor esi,DWORD [60+esp] ++ rol esi,1 ++ xor ebp,edx ++ add edi,ebp ++ mov ebp,eax ++ ror ebx,2 ++ mov DWORD [8+esp],esi ++ rol ebp,5 ++ lea esi,[1518500249+edi*1+esi] ++ mov edi,DWORD [12+esp] ++ add esi,ebp ++ ; 16_19 19 ++ mov ebp,ebx ++ xor edi,DWORD [20+esp] ++ xor ebp,ecx ++ xor edi,DWORD [44+esp] ++ and ebp,eax ++ xor edi,DWORD [esp] ++ rol edi,1 ++ xor ebp,ecx ++ add edx,ebp ++ mov ebp,esi ++ ror eax,2 ++ mov DWORD [12+esp],edi ++ rol ebp,5 ++ lea edi,[1518500249+edx*1+edi] ++ mov edx,DWORD [16+esp] ++ add edi,ebp ++ ; 20_39 20 ++ mov ebp,esi ++ xor edx,DWORD [24+esp] ++ xor ebp,eax ++ xor edx,DWORD [48+esp] ++ xor ebp,ebx ++ xor edx,DWORD [4+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [16+esp],edx ++ lea edx,[1859775393+ecx*1+edx] ++ mov ecx,DWORD [20+esp] ++ add edx,ebp ++ ; 20_39 21 ++ mov ebp,edi ++ xor ecx,DWORD [28+esp] ++ xor ebp,esi ++ xor ecx,DWORD [52+esp] ++ xor ebp,eax ++ xor ecx,DWORD [8+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [20+esp],ecx ++ lea ecx,[1859775393+ebx*1+ecx] ++ mov ebx,DWORD [24+esp] ++ add ecx,ebp ++ ; 20_39 22 ++ mov ebp,edx ++ xor ebx,DWORD [32+esp] ++ xor ebp,edi ++ xor ebx,DWORD [56+esp] ++ xor ebp,esi ++ xor ebx,DWORD [12+esp] ++ rol ebx,1 ++ add eax,ebp ++ ror edx,2 ++ mov ebp,ecx ++ rol ebp,5 ++ mov DWORD [24+esp],ebx ++ lea ebx,[1859775393+eax*1+ebx] ++ mov eax,DWORD [28+esp] ++ add ebx,ebp ++ ; 20_39 23 ++ mov ebp,ecx ++ xor eax,DWORD [36+esp] ++ xor ebp,edx ++ xor eax,DWORD [60+esp] ++ xor ebp,edi ++ xor eax,DWORD [16+esp] ++ rol eax,1 ++ add esi,ebp ++ ror ecx,2 ++ mov ebp,ebx ++ rol ebp,5 ++ mov DWORD [28+esp],eax ++ lea eax,[1859775393+esi*1+eax] ++ mov esi,DWORD [32+esp] ++ add eax,ebp ++ ; 20_39 24 ++ mov ebp,ebx ++ xor esi,DWORD [40+esp] ++ xor ebp,ecx ++ xor esi,DWORD [esp] ++ xor ebp,edx ++ xor esi,DWORD [20+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ mov DWORD [32+esp],esi ++ lea esi,[1859775393+edi*1+esi] ++ mov edi,DWORD [36+esp] ++ add esi,ebp ++ ; 20_39 25 ++ mov ebp,eax ++ xor edi,DWORD [44+esp] ++ xor ebp,ebx ++ xor edi,DWORD [4+esp] ++ xor ebp,ecx ++ xor edi,DWORD [24+esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ mov DWORD [36+esp],edi ++ lea edi,[1859775393+edx*1+edi] ++ mov edx,DWORD [40+esp] ++ add edi,ebp ++ ; 20_39 26 ++ mov ebp,esi ++ xor edx,DWORD [48+esp] ++ xor ebp,eax ++ xor edx,DWORD [8+esp] ++ xor ebp,ebx ++ xor edx,DWORD [28+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [40+esp],edx ++ lea edx,[1859775393+ecx*1+edx] ++ mov ecx,DWORD [44+esp] ++ add edx,ebp ++ ; 20_39 27 ++ mov ebp,edi ++ xor ecx,DWORD [52+esp] ++ xor ebp,esi ++ xor ecx,DWORD [12+esp] ++ xor ebp,eax ++ xor ecx,DWORD [32+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [44+esp],ecx ++ lea ecx,[1859775393+ebx*1+ecx] ++ mov ebx,DWORD [48+esp] ++ add ecx,ebp ++ ; 20_39 28 ++ mov ebp,edx ++ xor ebx,DWORD [56+esp] ++ xor ebp,edi ++ xor ebx,DWORD [16+esp] ++ xor ebp,esi ++ xor ebx,DWORD [36+esp] ++ rol ebx,1 ++ add eax,ebp ++ ror edx,2 ++ mov ebp,ecx ++ rol ebp,5 ++ mov DWORD [48+esp],ebx ++ lea ebx,[1859775393+eax*1+ebx] ++ mov eax,DWORD [52+esp] ++ add ebx,ebp ++ ; 20_39 29 ++ mov ebp,ecx ++ xor eax,DWORD [60+esp] ++ xor ebp,edx ++ xor eax,DWORD [20+esp] ++ xor ebp,edi ++ xor eax,DWORD [40+esp] ++ rol eax,1 ++ add esi,ebp ++ ror ecx,2 ++ mov ebp,ebx ++ rol ebp,5 ++ mov DWORD [52+esp],eax ++ lea eax,[1859775393+esi*1+eax] ++ mov esi,DWORD [56+esp] ++ add eax,ebp ++ ; 20_39 30 ++ mov ebp,ebx ++ xor esi,DWORD [esp] ++ xor ebp,ecx ++ xor esi,DWORD [24+esp] ++ xor ebp,edx ++ xor esi,DWORD [44+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ mov DWORD [56+esp],esi ++ lea esi,[1859775393+edi*1+esi] ++ mov edi,DWORD [60+esp] ++ add esi,ebp ++ ; 20_39 31 ++ mov ebp,eax ++ xor edi,DWORD [4+esp] ++ xor ebp,ebx ++ xor edi,DWORD [28+esp] ++ xor ebp,ecx ++ xor edi,DWORD [48+esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ mov DWORD [60+esp],edi ++ lea edi,[1859775393+edx*1+edi] ++ mov edx,DWORD [esp] ++ add edi,ebp ++ ; 20_39 32 ++ mov ebp,esi ++ xor edx,DWORD [8+esp] ++ xor ebp,eax ++ xor edx,DWORD [32+esp] ++ xor ebp,ebx ++ xor edx,DWORD [52+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [esp],edx ++ lea edx,[1859775393+ecx*1+edx] ++ mov ecx,DWORD [4+esp] ++ add edx,ebp ++ ; 20_39 33 ++ mov ebp,edi ++ xor ecx,DWORD [12+esp] ++ xor ebp,esi ++ xor ecx,DWORD [36+esp] ++ xor ebp,eax ++ xor ecx,DWORD [56+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [4+esp],ecx ++ lea ecx,[1859775393+ebx*1+ecx] ++ mov ebx,DWORD [8+esp] ++ add ecx,ebp ++ ; 20_39 34 ++ mov ebp,edx ++ xor ebx,DWORD [16+esp] ++ xor ebp,edi ++ xor ebx,DWORD [40+esp] ++ xor ebp,esi ++ xor ebx,DWORD [60+esp] ++ rol ebx,1 ++ add eax,ebp ++ ror edx,2 ++ mov ebp,ecx ++ rol ebp,5 ++ mov DWORD [8+esp],ebx ++ lea ebx,[1859775393+eax*1+ebx] ++ mov eax,DWORD [12+esp] ++ add ebx,ebp ++ ; 20_39 35 ++ mov ebp,ecx ++ xor eax,DWORD [20+esp] ++ xor ebp,edx ++ xor eax,DWORD [44+esp] ++ xor ebp,edi ++ xor eax,DWORD [esp] ++ rol eax,1 ++ add esi,ebp ++ ror ecx,2 ++ mov ebp,ebx ++ rol ebp,5 ++ mov DWORD [12+esp],eax ++ lea eax,[1859775393+esi*1+eax] ++ mov esi,DWORD [16+esp] ++ add eax,ebp ++ ; 20_39 36 ++ mov ebp,ebx ++ xor esi,DWORD [24+esp] ++ xor ebp,ecx ++ xor esi,DWORD [48+esp] ++ xor ebp,edx ++ xor esi,DWORD [4+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ mov DWORD [16+esp],esi ++ lea esi,[1859775393+edi*1+esi] ++ mov edi,DWORD [20+esp] ++ add esi,ebp ++ ; 20_39 37 ++ mov ebp,eax ++ xor edi,DWORD [28+esp] ++ xor ebp,ebx ++ xor edi,DWORD [52+esp] ++ xor ebp,ecx ++ xor edi,DWORD [8+esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ mov DWORD [20+esp],edi ++ lea edi,[1859775393+edx*1+edi] ++ mov edx,DWORD [24+esp] ++ add edi,ebp ++ ; 20_39 38 ++ mov ebp,esi ++ xor edx,DWORD [32+esp] ++ xor ebp,eax ++ xor edx,DWORD [56+esp] ++ xor ebp,ebx ++ xor edx,DWORD [12+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [24+esp],edx ++ lea edx,[1859775393+ecx*1+edx] ++ mov ecx,DWORD [28+esp] ++ add edx,ebp ++ ; 20_39 39 ++ mov ebp,edi ++ xor ecx,DWORD [36+esp] ++ xor ebp,esi ++ xor ecx,DWORD [60+esp] ++ xor ebp,eax ++ xor ecx,DWORD [16+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [28+esp],ecx ++ lea ecx,[1859775393+ebx*1+ecx] ++ mov ebx,DWORD [32+esp] ++ add ecx,ebp ++ ; 40_59 40 ++ mov ebp,edi ++ xor ebx,DWORD [40+esp] ++ xor ebp,esi ++ xor ebx,DWORD [esp] ++ and ebp,edx ++ xor ebx,DWORD [20+esp] ++ rol ebx,1 ++ add ebp,eax ++ ror edx,2 ++ mov eax,ecx ++ rol eax,5 ++ mov DWORD [32+esp],ebx ++ lea ebx,[2400959708+ebp*1+ebx] ++ mov ebp,edi ++ add ebx,eax ++ and ebp,esi ++ mov eax,DWORD [36+esp] ++ add ebx,ebp ++ ; 40_59 41 ++ mov ebp,edx ++ xor eax,DWORD [44+esp] ++ xor ebp,edi ++ xor eax,DWORD [4+esp] ++ and ebp,ecx ++ xor eax,DWORD [24+esp] ++ rol eax,1 ++ add ebp,esi ++ ror ecx,2 ++ mov esi,ebx ++ rol esi,5 ++ mov DWORD [36+esp],eax ++ lea eax,[2400959708+ebp*1+eax] ++ mov ebp,edx ++ add eax,esi ++ and ebp,edi ++ mov esi,DWORD [40+esp] ++ add eax,ebp ++ ; 40_59 42 ++ mov ebp,ecx ++ xor esi,DWORD [48+esp] ++ xor ebp,edx ++ xor esi,DWORD [8+esp] ++ and ebp,ebx ++ xor esi,DWORD [28+esp] ++ rol esi,1 ++ add ebp,edi ++ ror ebx,2 ++ mov edi,eax ++ rol edi,5 ++ mov DWORD [40+esp],esi ++ lea esi,[2400959708+ebp*1+esi] ++ mov ebp,ecx ++ add esi,edi ++ and ebp,edx ++ mov edi,DWORD [44+esp] ++ add esi,ebp ++ ; 40_59 43 ++ mov ebp,ebx ++ xor edi,DWORD [52+esp] ++ xor ebp,ecx ++ xor edi,DWORD [12+esp] ++ and ebp,eax ++ xor edi,DWORD [32+esp] ++ rol edi,1 ++ add ebp,edx ++ ror eax,2 ++ mov edx,esi ++ rol edx,5 ++ mov DWORD [44+esp],edi ++ lea edi,[2400959708+ebp*1+edi] ++ mov ebp,ebx ++ add edi,edx ++ and ebp,ecx ++ mov edx,DWORD [48+esp] ++ add edi,ebp ++ ; 40_59 44 ++ mov ebp,eax ++ xor edx,DWORD [56+esp] ++ xor ebp,ebx ++ xor edx,DWORD [16+esp] ++ and ebp,esi ++ xor edx,DWORD [36+esp] ++ rol edx,1 ++ add ebp,ecx ++ ror esi,2 ++ mov ecx,edi ++ rol ecx,5 ++ mov DWORD [48+esp],edx ++ lea edx,[2400959708+ebp*1+edx] ++ mov ebp,eax ++ add edx,ecx ++ and ebp,ebx ++ mov ecx,DWORD [52+esp] ++ add edx,ebp ++ ; 40_59 45 ++ mov ebp,esi ++ xor ecx,DWORD [60+esp] ++ xor ebp,eax ++ xor ecx,DWORD [20+esp] ++ and ebp,edi ++ xor ecx,DWORD [40+esp] ++ rol ecx,1 ++ add ebp,ebx ++ ror edi,2 ++ mov ebx,edx ++ rol ebx,5 ++ mov DWORD [52+esp],ecx ++ lea ecx,[2400959708+ebp*1+ecx] ++ mov ebp,esi ++ add ecx,ebx ++ and ebp,eax ++ mov ebx,DWORD [56+esp] ++ add ecx,ebp ++ ; 40_59 46 ++ mov ebp,edi ++ xor ebx,DWORD [esp] ++ xor ebp,esi ++ xor ebx,DWORD [24+esp] ++ and ebp,edx ++ xor ebx,DWORD [44+esp] ++ rol ebx,1 ++ add ebp,eax ++ ror edx,2 ++ mov eax,ecx ++ rol eax,5 ++ mov DWORD [56+esp],ebx ++ lea ebx,[2400959708+ebp*1+ebx] ++ mov ebp,edi ++ add ebx,eax ++ and ebp,esi ++ mov eax,DWORD [60+esp] ++ add ebx,ebp ++ ; 40_59 47 ++ mov ebp,edx ++ xor eax,DWORD [4+esp] ++ xor ebp,edi ++ xor eax,DWORD [28+esp] ++ and ebp,ecx ++ xor eax,DWORD [48+esp] ++ rol eax,1 ++ add ebp,esi ++ ror ecx,2 ++ mov esi,ebx ++ rol esi,5 ++ mov DWORD [60+esp],eax ++ lea eax,[2400959708+ebp*1+eax] ++ mov ebp,edx ++ add eax,esi ++ and ebp,edi ++ mov esi,DWORD [esp] ++ add eax,ebp ++ ; 40_59 48 ++ mov ebp,ecx ++ xor esi,DWORD [8+esp] ++ xor ebp,edx ++ xor esi,DWORD [32+esp] ++ and ebp,ebx ++ xor esi,DWORD [52+esp] ++ rol esi,1 ++ add ebp,edi ++ ror ebx,2 ++ mov edi,eax ++ rol edi,5 ++ mov DWORD [esp],esi ++ lea esi,[2400959708+ebp*1+esi] ++ mov ebp,ecx ++ add esi,edi ++ and ebp,edx ++ mov edi,DWORD [4+esp] ++ add esi,ebp ++ ; 40_59 49 ++ mov ebp,ebx ++ xor edi,DWORD [12+esp] ++ xor ebp,ecx ++ xor edi,DWORD [36+esp] ++ and ebp,eax ++ xor edi,DWORD [56+esp] ++ rol edi,1 ++ add ebp,edx ++ ror eax,2 ++ mov edx,esi ++ rol edx,5 ++ mov DWORD [4+esp],edi ++ lea edi,[2400959708+ebp*1+edi] ++ mov ebp,ebx ++ add edi,edx ++ and ebp,ecx ++ mov edx,DWORD [8+esp] ++ add edi,ebp ++ ; 40_59 50 ++ mov ebp,eax ++ xor edx,DWORD [16+esp] ++ xor ebp,ebx ++ xor edx,DWORD [40+esp] ++ and ebp,esi ++ xor edx,DWORD [60+esp] ++ rol edx,1 ++ add ebp,ecx ++ ror esi,2 ++ mov ecx,edi ++ rol ecx,5 ++ mov DWORD [8+esp],edx ++ lea edx,[2400959708+ebp*1+edx] ++ mov ebp,eax ++ add edx,ecx ++ and ebp,ebx ++ mov ecx,DWORD [12+esp] ++ add edx,ebp ++ ; 40_59 51 ++ mov ebp,esi ++ xor ecx,DWORD [20+esp] ++ xor ebp,eax ++ xor ecx,DWORD [44+esp] ++ and ebp,edi ++ xor ecx,DWORD [esp] ++ rol ecx,1 ++ add ebp,ebx ++ ror edi,2 ++ mov ebx,edx ++ rol ebx,5 ++ mov DWORD [12+esp],ecx ++ lea ecx,[2400959708+ebp*1+ecx] ++ mov ebp,esi ++ add ecx,ebx ++ and ebp,eax ++ mov ebx,DWORD [16+esp] ++ add ecx,ebp ++ ; 40_59 52 ++ mov ebp,edi ++ xor ebx,DWORD [24+esp] ++ xor ebp,esi ++ xor ebx,DWORD [48+esp] ++ and ebp,edx ++ xor ebx,DWORD [4+esp] ++ rol ebx,1 ++ add ebp,eax ++ ror edx,2 ++ mov eax,ecx ++ rol eax,5 ++ mov DWORD [16+esp],ebx ++ lea ebx,[2400959708+ebp*1+ebx] ++ mov ebp,edi ++ add ebx,eax ++ and ebp,esi ++ mov eax,DWORD [20+esp] ++ add ebx,ebp ++ ; 40_59 53 ++ mov ebp,edx ++ xor eax,DWORD [28+esp] ++ xor ebp,edi ++ xor eax,DWORD [52+esp] ++ and ebp,ecx ++ xor eax,DWORD [8+esp] ++ rol eax,1 ++ add ebp,esi ++ ror ecx,2 ++ mov esi,ebx ++ rol esi,5 ++ mov DWORD [20+esp],eax ++ lea eax,[2400959708+ebp*1+eax] ++ mov ebp,edx ++ add eax,esi ++ and ebp,edi ++ mov esi,DWORD [24+esp] ++ add eax,ebp ++ ; 40_59 54 ++ mov ebp,ecx ++ xor esi,DWORD [32+esp] ++ xor ebp,edx ++ xor esi,DWORD [56+esp] ++ and ebp,ebx ++ xor esi,DWORD [12+esp] ++ rol esi,1 ++ add ebp,edi ++ ror ebx,2 ++ mov edi,eax ++ rol edi,5 ++ mov DWORD [24+esp],esi ++ lea esi,[2400959708+ebp*1+esi] ++ mov ebp,ecx ++ add esi,edi ++ and ebp,edx ++ mov edi,DWORD [28+esp] ++ add esi,ebp ++ ; 40_59 55 ++ mov ebp,ebx ++ xor edi,DWORD [36+esp] ++ xor ebp,ecx ++ xor edi,DWORD [60+esp] ++ and ebp,eax ++ xor edi,DWORD [16+esp] ++ rol edi,1 ++ add ebp,edx ++ ror eax,2 ++ mov edx,esi ++ rol edx,5 ++ mov DWORD [28+esp],edi ++ lea edi,[2400959708+ebp*1+edi] ++ mov ebp,ebx ++ add edi,edx ++ and ebp,ecx ++ mov edx,DWORD [32+esp] ++ add edi,ebp ++ ; 40_59 56 ++ mov ebp,eax ++ xor edx,DWORD [40+esp] ++ xor ebp,ebx ++ xor edx,DWORD [esp] ++ and ebp,esi ++ xor edx,DWORD [20+esp] ++ rol edx,1 ++ add ebp,ecx ++ ror esi,2 ++ mov ecx,edi ++ rol ecx,5 ++ mov DWORD [32+esp],edx ++ lea edx,[2400959708+ebp*1+edx] ++ mov ebp,eax ++ add edx,ecx ++ and ebp,ebx ++ mov ecx,DWORD [36+esp] ++ add edx,ebp ++ ; 40_59 57 ++ mov ebp,esi ++ xor ecx,DWORD [44+esp] ++ xor ebp,eax ++ xor ecx,DWORD [4+esp] ++ and ebp,edi ++ xor ecx,DWORD [24+esp] ++ rol ecx,1 ++ add ebp,ebx ++ ror edi,2 ++ mov ebx,edx ++ rol ebx,5 ++ mov DWORD [36+esp],ecx ++ lea ecx,[2400959708+ebp*1+ecx] ++ mov ebp,esi ++ add ecx,ebx ++ and ebp,eax ++ mov ebx,DWORD [40+esp] ++ add ecx,ebp ++ ; 40_59 58 ++ mov ebp,edi ++ xor ebx,DWORD [48+esp] ++ xor ebp,esi ++ xor ebx,DWORD [8+esp] ++ and ebp,edx ++ xor ebx,DWORD [28+esp] ++ rol ebx,1 ++ add ebp,eax ++ ror edx,2 ++ mov eax,ecx ++ rol eax,5 ++ mov DWORD [40+esp],ebx ++ lea ebx,[2400959708+ebp*1+ebx] ++ mov ebp,edi ++ add ebx,eax ++ and ebp,esi ++ mov eax,DWORD [44+esp] ++ add ebx,ebp ++ ; 40_59 59 ++ mov ebp,edx ++ xor eax,DWORD [52+esp] ++ xor ebp,edi ++ xor eax,DWORD [12+esp] ++ and ebp,ecx ++ xor eax,DWORD [32+esp] ++ rol eax,1 ++ add ebp,esi ++ ror ecx,2 ++ mov esi,ebx ++ rol esi,5 ++ mov DWORD [44+esp],eax ++ lea eax,[2400959708+ebp*1+eax] ++ mov ebp,edx ++ add eax,esi ++ and ebp,edi ++ mov esi,DWORD [48+esp] ++ add eax,ebp ++ ; 20_39 60 ++ mov ebp,ebx ++ xor esi,DWORD [56+esp] ++ xor ebp,ecx ++ xor esi,DWORD [16+esp] ++ xor ebp,edx ++ xor esi,DWORD [36+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ mov DWORD [48+esp],esi ++ lea esi,[3395469782+edi*1+esi] ++ mov edi,DWORD [52+esp] ++ add esi,ebp ++ ; 20_39 61 ++ mov ebp,eax ++ xor edi,DWORD [60+esp] ++ xor ebp,ebx ++ xor edi,DWORD [20+esp] ++ xor ebp,ecx ++ xor edi,DWORD [40+esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ mov DWORD [52+esp],edi ++ lea edi,[3395469782+edx*1+edi] ++ mov edx,DWORD [56+esp] ++ add edi,ebp ++ ; 20_39 62 ++ mov ebp,esi ++ xor edx,DWORD [esp] ++ xor ebp,eax ++ xor edx,DWORD [24+esp] ++ xor ebp,ebx ++ xor edx,DWORD [44+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [56+esp],edx ++ lea edx,[3395469782+ecx*1+edx] ++ mov ecx,DWORD [60+esp] ++ add edx,ebp ++ ; 20_39 63 ++ mov ebp,edi ++ xor ecx,DWORD [4+esp] ++ xor ebp,esi ++ xor ecx,DWORD [28+esp] ++ xor ebp,eax ++ xor ecx,DWORD [48+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [60+esp],ecx ++ lea ecx,[3395469782+ebx*1+ecx] ++ mov ebx,DWORD [esp] ++ add ecx,ebp ++ ; 20_39 64 ++ mov ebp,edx ++ xor ebx,DWORD [8+esp] ++ xor ebp,edi ++ xor ebx,DWORD [32+esp] ++ xor ebp,esi ++ xor ebx,DWORD [52+esp] ++ rol ebx,1 ++ add eax,ebp ++ ror edx,2 ++ mov ebp,ecx ++ rol ebp,5 ++ mov DWORD [esp],ebx ++ lea ebx,[3395469782+eax*1+ebx] ++ mov eax,DWORD [4+esp] ++ add ebx,ebp ++ ; 20_39 65 ++ mov ebp,ecx ++ xor eax,DWORD [12+esp] ++ xor ebp,edx ++ xor eax,DWORD [36+esp] ++ xor ebp,edi ++ xor eax,DWORD [56+esp] ++ rol eax,1 ++ add esi,ebp ++ ror ecx,2 ++ mov ebp,ebx ++ rol ebp,5 ++ mov DWORD [4+esp],eax ++ lea eax,[3395469782+esi*1+eax] ++ mov esi,DWORD [8+esp] ++ add eax,ebp ++ ; 20_39 66 ++ mov ebp,ebx ++ xor esi,DWORD [16+esp] ++ xor ebp,ecx ++ xor esi,DWORD [40+esp] ++ xor ebp,edx ++ xor esi,DWORD [60+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ mov DWORD [8+esp],esi ++ lea esi,[3395469782+edi*1+esi] ++ mov edi,DWORD [12+esp] ++ add esi,ebp ++ ; 20_39 67 ++ mov ebp,eax ++ xor edi,DWORD [20+esp] ++ xor ebp,ebx ++ xor edi,DWORD [44+esp] ++ xor ebp,ecx ++ xor edi,DWORD [esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ mov DWORD [12+esp],edi ++ lea edi,[3395469782+edx*1+edi] ++ mov edx,DWORD [16+esp] ++ add edi,ebp ++ ; 20_39 68 ++ mov ebp,esi ++ xor edx,DWORD [24+esp] ++ xor ebp,eax ++ xor edx,DWORD [48+esp] ++ xor ebp,ebx ++ xor edx,DWORD [4+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [16+esp],edx ++ lea edx,[3395469782+ecx*1+edx] ++ mov ecx,DWORD [20+esp] ++ add edx,ebp ++ ; 20_39 69 ++ mov ebp,edi ++ xor ecx,DWORD [28+esp] ++ xor ebp,esi ++ xor ecx,DWORD [52+esp] ++ xor ebp,eax ++ xor ecx,DWORD [8+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [20+esp],ecx ++ lea ecx,[3395469782+ebx*1+ecx] ++ mov ebx,DWORD [24+esp] ++ add ecx,ebp ++ ; 20_39 70 ++ mov ebp,edx ++ xor ebx,DWORD [32+esp] ++ xor ebp,edi ++ xor ebx,DWORD [56+esp] ++ xor ebp,esi ++ xor ebx,DWORD [12+esp] ++ rol ebx,1 ++ add eax,ebp ++ ror edx,2 ++ mov ebp,ecx ++ rol ebp,5 ++ mov DWORD [24+esp],ebx ++ lea ebx,[3395469782+eax*1+ebx] ++ mov eax,DWORD [28+esp] ++ add ebx,ebp ++ ; 20_39 71 ++ mov ebp,ecx ++ xor eax,DWORD [36+esp] ++ xor ebp,edx ++ xor eax,DWORD [60+esp] ++ xor ebp,edi ++ xor eax,DWORD [16+esp] ++ rol eax,1 ++ add esi,ebp ++ ror ecx,2 ++ mov ebp,ebx ++ rol ebp,5 ++ mov DWORD [28+esp],eax ++ lea eax,[3395469782+esi*1+eax] ++ mov esi,DWORD [32+esp] ++ add eax,ebp ++ ; 20_39 72 ++ mov ebp,ebx ++ xor esi,DWORD [40+esp] ++ xor ebp,ecx ++ xor esi,DWORD [esp] ++ xor ebp,edx ++ xor esi,DWORD [20+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ mov DWORD [32+esp],esi ++ lea esi,[3395469782+edi*1+esi] ++ mov edi,DWORD [36+esp] ++ add esi,ebp ++ ; 20_39 73 ++ mov ebp,eax ++ xor edi,DWORD [44+esp] ++ xor ebp,ebx ++ xor edi,DWORD [4+esp] ++ xor ebp,ecx ++ xor edi,DWORD [24+esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ mov DWORD [36+esp],edi ++ lea edi,[3395469782+edx*1+edi] ++ mov edx,DWORD [40+esp] ++ add edi,ebp ++ ; 20_39 74 ++ mov ebp,esi ++ xor edx,DWORD [48+esp] ++ xor ebp,eax ++ xor edx,DWORD [8+esp] ++ xor ebp,ebx ++ xor edx,DWORD [28+esp] ++ rol edx,1 ++ add ecx,ebp ++ ror esi,2 ++ mov ebp,edi ++ rol ebp,5 ++ mov DWORD [40+esp],edx ++ lea edx,[3395469782+ecx*1+edx] ++ mov ecx,DWORD [44+esp] ++ add edx,ebp ++ ; 20_39 75 ++ mov ebp,edi ++ xor ecx,DWORD [52+esp] ++ xor ebp,esi ++ xor ecx,DWORD [12+esp] ++ xor ebp,eax ++ xor ecx,DWORD [32+esp] ++ rol ecx,1 ++ add ebx,ebp ++ ror edi,2 ++ mov ebp,edx ++ rol ebp,5 ++ mov DWORD [44+esp],ecx ++ lea ecx,[3395469782+ebx*1+ecx] ++ mov ebx,DWORD [48+esp] ++ add ecx,ebp ++ ; 20_39 76 ++ mov ebp,edx ++ xor ebx,DWORD [56+esp] ++ xor ebp,edi ++ xor ebx,DWORD [16+esp] ++ xor ebp,esi ++ xor ebx,DWORD [36+esp] ++ rol ebx,1 ++ add eax,ebp ++ ror edx,2 ++ mov ebp,ecx ++ rol ebp,5 ++ mov DWORD [48+esp],ebx ++ lea ebx,[3395469782+eax*1+ebx] ++ mov eax,DWORD [52+esp] ++ add ebx,ebp ++ ; 20_39 77 ++ mov ebp,ecx ++ xor eax,DWORD [60+esp] ++ xor ebp,edx ++ xor eax,DWORD [20+esp] ++ xor ebp,edi ++ xor eax,DWORD [40+esp] ++ rol eax,1 ++ add esi,ebp ++ ror ecx,2 ++ mov ebp,ebx ++ rol ebp,5 ++ lea eax,[3395469782+esi*1+eax] ++ mov esi,DWORD [56+esp] ++ add eax,ebp ++ ; 20_39 78 ++ mov ebp,ebx ++ xor esi,DWORD [esp] ++ xor ebp,ecx ++ xor esi,DWORD [24+esp] ++ xor ebp,edx ++ xor esi,DWORD [44+esp] ++ rol esi,1 ++ add edi,ebp ++ ror ebx,2 ++ mov ebp,eax ++ rol ebp,5 ++ lea esi,[3395469782+edi*1+esi] ++ mov edi,DWORD [60+esp] ++ add esi,ebp ++ ; 20_39 79 ++ mov ebp,eax ++ xor edi,DWORD [4+esp] ++ xor ebp,ebx ++ xor edi,DWORD [28+esp] ++ xor ebp,ecx ++ xor edi,DWORD [48+esp] ++ rol edi,1 ++ add edx,ebp ++ ror eax,2 ++ mov ebp,esi ++ rol ebp,5 ++ lea edi,[3395469782+edx*1+edi] ++ add edi,ebp ++ mov ebp,DWORD [96+esp] ++ mov edx,DWORD [100+esp] ++ add edi,DWORD [ebp] ++ add esi,DWORD [4+ebp] ++ add eax,DWORD [8+ebp] ++ add ebx,DWORD [12+ebp] ++ add ecx,DWORD [16+ebp] ++ mov DWORD [ebp],edi ++ add edx,64 ++ mov DWORD [4+ebp],esi ++ cmp edx,DWORD [104+esp] ++ mov DWORD [8+ebp],eax ++ mov edi,ecx ++ mov DWORD [12+ebp],ebx ++ mov esi,edx ++ mov DWORD [16+ebp],ecx ++ jb NEAR L$000loop ++ add esp,76 ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++db 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 ++db 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82 ++db 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 ++db 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +diff --git a/SMP/lib/accelerated/x86/coff/sha1-ssse3-x86_64.asm b/SMP/lib/accelerated/x86/coff/sha1-ssse3-x86_64.asm +new file mode 100644 +index 0000000..98d9dcb +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/sha1-ssse3-x86_64.asm +@@ -0,0 +1,5714 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++EXTERN _gnutls_x86_cpuid_s ++ ++global sha1_block_data_order ++ ++ALIGN 16 ++sha1_block_data_order: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha1_block_data_order: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov r9d,DWORD[((_gnutls_x86_cpuid_s+0))] ++ mov r8d,DWORD[((_gnutls_x86_cpuid_s+4))] ++ mov r10d,DWORD[((_gnutls_x86_cpuid_s+8))] ++ test r8d,512 ++ jz NEAR $L$ialu ++ test r10d,536870912 ++ jnz NEAR _shaext_shortcut ++ and r10d,296 ++ cmp r10d,296 ++ je NEAR _avx2_shortcut ++ and r8d,268435456 ++ and r9d,1073741824 ++ or r8d,r9d ++ cmp r8d,1342177280 ++ je NEAR _avx_shortcut ++ jmp NEAR _ssse3_shortcut ++ ++ALIGN 16 ++$L$ialu: ++ mov rax,rsp ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ mov r8,rdi ++ sub rsp,72 ++ mov r9,rsi ++ and rsp,-64 ++ mov r10,rdx ++ mov QWORD[64+rsp],rax ++$L$prologue: ++ ++ mov esi,DWORD[r8] ++ mov edi,DWORD[4+r8] ++ mov r11d,DWORD[8+r8] ++ mov r12d,DWORD[12+r8] ++ mov r13d,DWORD[16+r8] ++ jmp NEAR $L$loop ++ ++ALIGN 16 ++$L$loop: ++ mov edx,DWORD[r9] ++ bswap edx ++ mov ebp,DWORD[4+r9] ++ mov eax,r12d ++ mov DWORD[rsp],edx ++ mov ecx,esi ++ bswap ebp ++ xor eax,r11d ++ rol ecx,5 ++ and eax,edi ++ lea r13d,[1518500249+r13*1+rdx] ++ add r13d,ecx ++ xor eax,r12d ++ rol edi,30 ++ add r13d,eax ++ mov r14d,DWORD[8+r9] ++ mov eax,r11d ++ mov DWORD[4+rsp],ebp ++ mov ecx,r13d ++ bswap r14d ++ xor eax,edi ++ rol ecx,5 ++ and eax,esi ++ lea r12d,[1518500249+r12*1+rbp] ++ add r12d,ecx ++ xor eax,r11d ++ rol esi,30 ++ add r12d,eax ++ mov edx,DWORD[12+r9] ++ mov eax,edi ++ mov DWORD[8+rsp],r14d ++ mov ecx,r12d ++ bswap edx ++ xor eax,esi ++ rol ecx,5 ++ and eax,r13d ++ lea r11d,[1518500249+r11*1+r14] ++ add r11d,ecx ++ xor eax,edi ++ rol r13d,30 ++ add r11d,eax ++ mov ebp,DWORD[16+r9] ++ mov eax,esi ++ mov DWORD[12+rsp],edx ++ mov ecx,r11d ++ bswap ebp ++ xor eax,r13d ++ rol ecx,5 ++ and eax,r12d ++ lea edi,[1518500249+rdi*1+rdx] ++ add edi,ecx ++ xor eax,esi ++ rol r12d,30 ++ add edi,eax ++ mov r14d,DWORD[20+r9] ++ mov eax,r13d ++ mov DWORD[16+rsp],ebp ++ mov ecx,edi ++ bswap r14d ++ xor eax,r12d ++ rol ecx,5 ++ and eax,r11d ++ lea esi,[1518500249+rsi*1+rbp] ++ add esi,ecx ++ xor eax,r13d ++ rol r11d,30 ++ add esi,eax ++ mov edx,DWORD[24+r9] ++ mov eax,r12d ++ mov DWORD[20+rsp],r14d ++ mov ecx,esi ++ bswap edx ++ xor eax,r11d ++ rol ecx,5 ++ and eax,edi ++ lea r13d,[1518500249+r13*1+r14] ++ add r13d,ecx ++ xor eax,r12d ++ rol edi,30 ++ add r13d,eax ++ mov ebp,DWORD[28+r9] ++ mov eax,r11d ++ mov DWORD[24+rsp],edx ++ mov ecx,r13d ++ bswap ebp ++ xor eax,edi ++ rol ecx,5 ++ and eax,esi ++ lea r12d,[1518500249+r12*1+rdx] ++ add r12d,ecx ++ xor eax,r11d ++ rol esi,30 ++ add r12d,eax ++ mov r14d,DWORD[32+r9] ++ mov eax,edi ++ mov DWORD[28+rsp],ebp ++ mov ecx,r12d ++ bswap r14d ++ xor eax,esi ++ rol ecx,5 ++ and eax,r13d ++ lea r11d,[1518500249+r11*1+rbp] ++ add r11d,ecx ++ xor eax,edi ++ rol r13d,30 ++ add r11d,eax ++ mov edx,DWORD[36+r9] ++ mov eax,esi ++ mov DWORD[32+rsp],r14d ++ mov ecx,r11d ++ bswap edx ++ xor eax,r13d ++ rol ecx,5 ++ and eax,r12d ++ lea edi,[1518500249+rdi*1+r14] ++ add edi,ecx ++ xor eax,esi ++ rol r12d,30 ++ add edi,eax ++ mov ebp,DWORD[40+r9] ++ mov eax,r13d ++ mov DWORD[36+rsp],edx ++ mov ecx,edi ++ bswap ebp ++ xor eax,r12d ++ rol ecx,5 ++ and eax,r11d ++ lea esi,[1518500249+rsi*1+rdx] ++ add esi,ecx ++ xor eax,r13d ++ rol r11d,30 ++ add esi,eax ++ mov r14d,DWORD[44+r9] ++ mov eax,r12d ++ mov DWORD[40+rsp],ebp ++ mov ecx,esi ++ bswap r14d ++ xor eax,r11d ++ rol ecx,5 ++ and eax,edi ++ lea r13d,[1518500249+r13*1+rbp] ++ add r13d,ecx ++ xor eax,r12d ++ rol edi,30 ++ add r13d,eax ++ mov edx,DWORD[48+r9] ++ mov eax,r11d ++ mov DWORD[44+rsp],r14d ++ mov ecx,r13d ++ bswap edx ++ xor eax,edi ++ rol ecx,5 ++ and eax,esi ++ lea r12d,[1518500249+r12*1+r14] ++ add r12d,ecx ++ xor eax,r11d ++ rol esi,30 ++ add r12d,eax ++ mov ebp,DWORD[52+r9] ++ mov eax,edi ++ mov DWORD[48+rsp],edx ++ mov ecx,r12d ++ bswap ebp ++ xor eax,esi ++ rol ecx,5 ++ and eax,r13d ++ lea r11d,[1518500249+r11*1+rdx] ++ add r11d,ecx ++ xor eax,edi ++ rol r13d,30 ++ add r11d,eax ++ mov r14d,DWORD[56+r9] ++ mov eax,esi ++ mov DWORD[52+rsp],ebp ++ mov ecx,r11d ++ bswap r14d ++ xor eax,r13d ++ rol ecx,5 ++ and eax,r12d ++ lea edi,[1518500249+rdi*1+rbp] ++ add edi,ecx ++ xor eax,esi ++ rol r12d,30 ++ add edi,eax ++ mov edx,DWORD[60+r9] ++ mov eax,r13d ++ mov DWORD[56+rsp],r14d ++ mov ecx,edi ++ bswap edx ++ xor eax,r12d ++ rol ecx,5 ++ and eax,r11d ++ lea esi,[1518500249+rsi*1+r14] ++ add esi,ecx ++ xor eax,r13d ++ rol r11d,30 ++ add esi,eax ++ xor ebp,DWORD[rsp] ++ mov eax,r12d ++ mov DWORD[60+rsp],edx ++ mov ecx,esi ++ xor ebp,DWORD[8+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor ebp,DWORD[32+rsp] ++ and eax,edi ++ lea r13d,[1518500249+r13*1+rdx] ++ rol edi,30 ++ xor eax,r12d ++ add r13d,ecx ++ rol ebp,1 ++ add r13d,eax ++ xor r14d,DWORD[4+rsp] ++ mov eax,r11d ++ mov DWORD[rsp],ebp ++ mov ecx,r13d ++ xor r14d,DWORD[12+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor r14d,DWORD[36+rsp] ++ and eax,esi ++ lea r12d,[1518500249+r12*1+rbp] ++ rol esi,30 ++ xor eax,r11d ++ add r12d,ecx ++ rol r14d,1 ++ add r12d,eax ++ xor edx,DWORD[8+rsp] ++ mov eax,edi ++ mov DWORD[4+rsp],r14d ++ mov ecx,r12d ++ xor edx,DWORD[16+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor edx,DWORD[40+rsp] ++ and eax,r13d ++ lea r11d,[1518500249+r11*1+r14] ++ rol r13d,30 ++ xor eax,edi ++ add r11d,ecx ++ rol edx,1 ++ add r11d,eax ++ xor ebp,DWORD[12+rsp] ++ mov eax,esi ++ mov DWORD[8+rsp],edx ++ mov ecx,r11d ++ xor ebp,DWORD[20+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor ebp,DWORD[44+rsp] ++ and eax,r12d ++ lea edi,[1518500249+rdi*1+rdx] ++ rol r12d,30 ++ xor eax,esi ++ add edi,ecx ++ rol ebp,1 ++ add edi,eax ++ xor r14d,DWORD[16+rsp] ++ mov eax,r13d ++ mov DWORD[12+rsp],ebp ++ mov ecx,edi ++ xor r14d,DWORD[24+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor r14d,DWORD[48+rsp] ++ and eax,r11d ++ lea esi,[1518500249+rsi*1+rbp] ++ rol r11d,30 ++ xor eax,r13d ++ add esi,ecx ++ rol r14d,1 ++ add esi,eax ++ xor edx,DWORD[20+rsp] ++ mov eax,edi ++ mov DWORD[16+rsp],r14d ++ mov ecx,esi ++ xor edx,DWORD[28+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor edx,DWORD[52+rsp] ++ lea r13d,[1859775393+r13*1+r14] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol edx,1 ++ xor ebp,DWORD[24+rsp] ++ mov eax,esi ++ mov DWORD[20+rsp],edx ++ mov ecx,r13d ++ xor ebp,DWORD[32+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor ebp,DWORD[56+rsp] ++ lea r12d,[1859775393+r12*1+rdx] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol ebp,1 ++ xor r14d,DWORD[28+rsp] ++ mov eax,r13d ++ mov DWORD[24+rsp],ebp ++ mov ecx,r12d ++ xor r14d,DWORD[36+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor r14d,DWORD[60+rsp] ++ lea r11d,[1859775393+r11*1+rbp] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol r14d,1 ++ xor edx,DWORD[32+rsp] ++ mov eax,r12d ++ mov DWORD[28+rsp],r14d ++ mov ecx,r11d ++ xor edx,DWORD[40+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor edx,DWORD[rsp] ++ lea edi,[1859775393+rdi*1+r14] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol edx,1 ++ xor ebp,DWORD[36+rsp] ++ mov eax,r11d ++ mov DWORD[32+rsp],edx ++ mov ecx,edi ++ xor ebp,DWORD[44+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor ebp,DWORD[4+rsp] ++ lea esi,[1859775393+rsi*1+rdx] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol ebp,1 ++ xor r14d,DWORD[40+rsp] ++ mov eax,edi ++ mov DWORD[36+rsp],ebp ++ mov ecx,esi ++ xor r14d,DWORD[48+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor r14d,DWORD[8+rsp] ++ lea r13d,[1859775393+r13*1+rbp] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol r14d,1 ++ xor edx,DWORD[44+rsp] ++ mov eax,esi ++ mov DWORD[40+rsp],r14d ++ mov ecx,r13d ++ xor edx,DWORD[52+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor edx,DWORD[12+rsp] ++ lea r12d,[1859775393+r12*1+r14] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol edx,1 ++ xor ebp,DWORD[48+rsp] ++ mov eax,r13d ++ mov DWORD[44+rsp],edx ++ mov ecx,r12d ++ xor ebp,DWORD[56+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor ebp,DWORD[16+rsp] ++ lea r11d,[1859775393+r11*1+rdx] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol ebp,1 ++ xor r14d,DWORD[52+rsp] ++ mov eax,r12d ++ mov DWORD[48+rsp],ebp ++ mov ecx,r11d ++ xor r14d,DWORD[60+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor r14d,DWORD[20+rsp] ++ lea edi,[1859775393+rdi*1+rbp] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol r14d,1 ++ xor edx,DWORD[56+rsp] ++ mov eax,r11d ++ mov DWORD[52+rsp],r14d ++ mov ecx,edi ++ xor edx,DWORD[rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor edx,DWORD[24+rsp] ++ lea esi,[1859775393+rsi*1+r14] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol edx,1 ++ xor ebp,DWORD[60+rsp] ++ mov eax,edi ++ mov DWORD[56+rsp],edx ++ mov ecx,esi ++ xor ebp,DWORD[4+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor ebp,DWORD[28+rsp] ++ lea r13d,[1859775393+r13*1+rdx] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol ebp,1 ++ xor r14d,DWORD[rsp] ++ mov eax,esi ++ mov DWORD[60+rsp],ebp ++ mov ecx,r13d ++ xor r14d,DWORD[8+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor r14d,DWORD[32+rsp] ++ lea r12d,[1859775393+r12*1+rbp] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol r14d,1 ++ xor edx,DWORD[4+rsp] ++ mov eax,r13d ++ mov DWORD[rsp],r14d ++ mov ecx,r12d ++ xor edx,DWORD[12+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor edx,DWORD[36+rsp] ++ lea r11d,[1859775393+r11*1+r14] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol edx,1 ++ xor ebp,DWORD[8+rsp] ++ mov eax,r12d ++ mov DWORD[4+rsp],edx ++ mov ecx,r11d ++ xor ebp,DWORD[16+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor ebp,DWORD[40+rsp] ++ lea edi,[1859775393+rdi*1+rdx] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol ebp,1 ++ xor r14d,DWORD[12+rsp] ++ mov eax,r11d ++ mov DWORD[8+rsp],ebp ++ mov ecx,edi ++ xor r14d,DWORD[20+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor r14d,DWORD[44+rsp] ++ lea esi,[1859775393+rsi*1+rbp] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol r14d,1 ++ xor edx,DWORD[16+rsp] ++ mov eax,edi ++ mov DWORD[12+rsp],r14d ++ mov ecx,esi ++ xor edx,DWORD[24+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor edx,DWORD[48+rsp] ++ lea r13d,[1859775393+r13*1+r14] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol edx,1 ++ xor ebp,DWORD[20+rsp] ++ mov eax,esi ++ mov DWORD[16+rsp],edx ++ mov ecx,r13d ++ xor ebp,DWORD[28+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor ebp,DWORD[52+rsp] ++ lea r12d,[1859775393+r12*1+rdx] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol ebp,1 ++ xor r14d,DWORD[24+rsp] ++ mov eax,r13d ++ mov DWORD[20+rsp],ebp ++ mov ecx,r12d ++ xor r14d,DWORD[32+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor r14d,DWORD[56+rsp] ++ lea r11d,[1859775393+r11*1+rbp] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol r14d,1 ++ xor edx,DWORD[28+rsp] ++ mov eax,r12d ++ mov DWORD[24+rsp],r14d ++ mov ecx,r11d ++ xor edx,DWORD[36+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor edx,DWORD[60+rsp] ++ lea edi,[1859775393+rdi*1+r14] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol edx,1 ++ xor ebp,DWORD[32+rsp] ++ mov eax,r11d ++ mov DWORD[28+rsp],edx ++ mov ecx,edi ++ xor ebp,DWORD[40+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor ebp,DWORD[rsp] ++ lea esi,[1859775393+rsi*1+rdx] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol ebp,1 ++ xor r14d,DWORD[36+rsp] ++ mov eax,r12d ++ mov DWORD[32+rsp],ebp ++ mov ebx,r12d ++ xor r14d,DWORD[44+rsp] ++ and eax,r11d ++ mov ecx,esi ++ xor r14d,DWORD[4+rsp] ++ lea r13d,[((-1894007588))+r13*1+rbp] ++ xor ebx,r11d ++ rol ecx,5 ++ add r13d,eax ++ rol r14d,1 ++ and ebx,edi ++ add r13d,ecx ++ rol edi,30 ++ add r13d,ebx ++ xor edx,DWORD[40+rsp] ++ mov eax,r11d ++ mov DWORD[36+rsp],r14d ++ mov ebx,r11d ++ xor edx,DWORD[48+rsp] ++ and eax,edi ++ mov ecx,r13d ++ xor edx,DWORD[8+rsp] ++ lea r12d,[((-1894007588))+r12*1+r14] ++ xor ebx,edi ++ rol ecx,5 ++ add r12d,eax ++ rol edx,1 ++ and ebx,esi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,ebx ++ xor ebp,DWORD[44+rsp] ++ mov eax,edi ++ mov DWORD[40+rsp],edx ++ mov ebx,edi ++ xor ebp,DWORD[52+rsp] ++ and eax,esi ++ mov ecx,r12d ++ xor ebp,DWORD[12+rsp] ++ lea r11d,[((-1894007588))+r11*1+rdx] ++ xor ebx,esi ++ rol ecx,5 ++ add r11d,eax ++ rol ebp,1 ++ and ebx,r13d ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,ebx ++ xor r14d,DWORD[48+rsp] ++ mov eax,esi ++ mov DWORD[44+rsp],ebp ++ mov ebx,esi ++ xor r14d,DWORD[56+rsp] ++ and eax,r13d ++ mov ecx,r11d ++ xor r14d,DWORD[16+rsp] ++ lea edi,[((-1894007588))+rdi*1+rbp] ++ xor ebx,r13d ++ rol ecx,5 ++ add edi,eax ++ rol r14d,1 ++ and ebx,r12d ++ add edi,ecx ++ rol r12d,30 ++ add edi,ebx ++ xor edx,DWORD[52+rsp] ++ mov eax,r13d ++ mov DWORD[48+rsp],r14d ++ mov ebx,r13d ++ xor edx,DWORD[60+rsp] ++ and eax,r12d ++ mov ecx,edi ++ xor edx,DWORD[20+rsp] ++ lea esi,[((-1894007588))+rsi*1+r14] ++ xor ebx,r12d ++ rol ecx,5 ++ add esi,eax ++ rol edx,1 ++ and ebx,r11d ++ add esi,ecx ++ rol r11d,30 ++ add esi,ebx ++ xor ebp,DWORD[56+rsp] ++ mov eax,r12d ++ mov DWORD[52+rsp],edx ++ mov ebx,r12d ++ xor ebp,DWORD[rsp] ++ and eax,r11d ++ mov ecx,esi ++ xor ebp,DWORD[24+rsp] ++ lea r13d,[((-1894007588))+r13*1+rdx] ++ xor ebx,r11d ++ rol ecx,5 ++ add r13d,eax ++ rol ebp,1 ++ and ebx,edi ++ add r13d,ecx ++ rol edi,30 ++ add r13d,ebx ++ xor r14d,DWORD[60+rsp] ++ mov eax,r11d ++ mov DWORD[56+rsp],ebp ++ mov ebx,r11d ++ xor r14d,DWORD[4+rsp] ++ and eax,edi ++ mov ecx,r13d ++ xor r14d,DWORD[28+rsp] ++ lea r12d,[((-1894007588))+r12*1+rbp] ++ xor ebx,edi ++ rol ecx,5 ++ add r12d,eax ++ rol r14d,1 ++ and ebx,esi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,ebx ++ xor edx,DWORD[rsp] ++ mov eax,edi ++ mov DWORD[60+rsp],r14d ++ mov ebx,edi ++ xor edx,DWORD[8+rsp] ++ and eax,esi ++ mov ecx,r12d ++ xor edx,DWORD[32+rsp] ++ lea r11d,[((-1894007588))+r11*1+r14] ++ xor ebx,esi ++ rol ecx,5 ++ add r11d,eax ++ rol edx,1 ++ and ebx,r13d ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,ebx ++ xor ebp,DWORD[4+rsp] ++ mov eax,esi ++ mov DWORD[rsp],edx ++ mov ebx,esi ++ xor ebp,DWORD[12+rsp] ++ and eax,r13d ++ mov ecx,r11d ++ xor ebp,DWORD[36+rsp] ++ lea edi,[((-1894007588))+rdi*1+rdx] ++ xor ebx,r13d ++ rol ecx,5 ++ add edi,eax ++ rol ebp,1 ++ and ebx,r12d ++ add edi,ecx ++ rol r12d,30 ++ add edi,ebx ++ xor r14d,DWORD[8+rsp] ++ mov eax,r13d ++ mov DWORD[4+rsp],ebp ++ mov ebx,r13d ++ xor r14d,DWORD[16+rsp] ++ and eax,r12d ++ mov ecx,edi ++ xor r14d,DWORD[40+rsp] ++ lea esi,[((-1894007588))+rsi*1+rbp] ++ xor ebx,r12d ++ rol ecx,5 ++ add esi,eax ++ rol r14d,1 ++ and ebx,r11d ++ add esi,ecx ++ rol r11d,30 ++ add esi,ebx ++ xor edx,DWORD[12+rsp] ++ mov eax,r12d ++ mov DWORD[8+rsp],r14d ++ mov ebx,r12d ++ xor edx,DWORD[20+rsp] ++ and eax,r11d ++ mov ecx,esi ++ xor edx,DWORD[44+rsp] ++ lea r13d,[((-1894007588))+r13*1+r14] ++ xor ebx,r11d ++ rol ecx,5 ++ add r13d,eax ++ rol edx,1 ++ and ebx,edi ++ add r13d,ecx ++ rol edi,30 ++ add r13d,ebx ++ xor ebp,DWORD[16+rsp] ++ mov eax,r11d ++ mov DWORD[12+rsp],edx ++ mov ebx,r11d ++ xor ebp,DWORD[24+rsp] ++ and eax,edi ++ mov ecx,r13d ++ xor ebp,DWORD[48+rsp] ++ lea r12d,[((-1894007588))+r12*1+rdx] ++ xor ebx,edi ++ rol ecx,5 ++ add r12d,eax ++ rol ebp,1 ++ and ebx,esi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,ebx ++ xor r14d,DWORD[20+rsp] ++ mov eax,edi ++ mov DWORD[16+rsp],ebp ++ mov ebx,edi ++ xor r14d,DWORD[28+rsp] ++ and eax,esi ++ mov ecx,r12d ++ xor r14d,DWORD[52+rsp] ++ lea r11d,[((-1894007588))+r11*1+rbp] ++ xor ebx,esi ++ rol ecx,5 ++ add r11d,eax ++ rol r14d,1 ++ and ebx,r13d ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,ebx ++ xor edx,DWORD[24+rsp] ++ mov eax,esi ++ mov DWORD[20+rsp],r14d ++ mov ebx,esi ++ xor edx,DWORD[32+rsp] ++ and eax,r13d ++ mov ecx,r11d ++ xor edx,DWORD[56+rsp] ++ lea edi,[((-1894007588))+rdi*1+r14] ++ xor ebx,r13d ++ rol ecx,5 ++ add edi,eax ++ rol edx,1 ++ and ebx,r12d ++ add edi,ecx ++ rol r12d,30 ++ add edi,ebx ++ xor ebp,DWORD[28+rsp] ++ mov eax,r13d ++ mov DWORD[24+rsp],edx ++ mov ebx,r13d ++ xor ebp,DWORD[36+rsp] ++ and eax,r12d ++ mov ecx,edi ++ xor ebp,DWORD[60+rsp] ++ lea esi,[((-1894007588))+rsi*1+rdx] ++ xor ebx,r12d ++ rol ecx,5 ++ add esi,eax ++ rol ebp,1 ++ and ebx,r11d ++ add esi,ecx ++ rol r11d,30 ++ add esi,ebx ++ xor r14d,DWORD[32+rsp] ++ mov eax,r12d ++ mov DWORD[28+rsp],ebp ++ mov ebx,r12d ++ xor r14d,DWORD[40+rsp] ++ and eax,r11d ++ mov ecx,esi ++ xor r14d,DWORD[rsp] ++ lea r13d,[((-1894007588))+r13*1+rbp] ++ xor ebx,r11d ++ rol ecx,5 ++ add r13d,eax ++ rol r14d,1 ++ and ebx,edi ++ add r13d,ecx ++ rol edi,30 ++ add r13d,ebx ++ xor edx,DWORD[36+rsp] ++ mov eax,r11d ++ mov DWORD[32+rsp],r14d ++ mov ebx,r11d ++ xor edx,DWORD[44+rsp] ++ and eax,edi ++ mov ecx,r13d ++ xor edx,DWORD[4+rsp] ++ lea r12d,[((-1894007588))+r12*1+r14] ++ xor ebx,edi ++ rol ecx,5 ++ add r12d,eax ++ rol edx,1 ++ and ebx,esi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,ebx ++ xor ebp,DWORD[40+rsp] ++ mov eax,edi ++ mov DWORD[36+rsp],edx ++ mov ebx,edi ++ xor ebp,DWORD[48+rsp] ++ and eax,esi ++ mov ecx,r12d ++ xor ebp,DWORD[8+rsp] ++ lea r11d,[((-1894007588))+r11*1+rdx] ++ xor ebx,esi ++ rol ecx,5 ++ add r11d,eax ++ rol ebp,1 ++ and ebx,r13d ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,ebx ++ xor r14d,DWORD[44+rsp] ++ mov eax,esi ++ mov DWORD[40+rsp],ebp ++ mov ebx,esi ++ xor r14d,DWORD[52+rsp] ++ and eax,r13d ++ mov ecx,r11d ++ xor r14d,DWORD[12+rsp] ++ lea edi,[((-1894007588))+rdi*1+rbp] ++ xor ebx,r13d ++ rol ecx,5 ++ add edi,eax ++ rol r14d,1 ++ and ebx,r12d ++ add edi,ecx ++ rol r12d,30 ++ add edi,ebx ++ xor edx,DWORD[48+rsp] ++ mov eax,r13d ++ mov DWORD[44+rsp],r14d ++ mov ebx,r13d ++ xor edx,DWORD[56+rsp] ++ and eax,r12d ++ mov ecx,edi ++ xor edx,DWORD[16+rsp] ++ lea esi,[((-1894007588))+rsi*1+r14] ++ xor ebx,r12d ++ rol ecx,5 ++ add esi,eax ++ rol edx,1 ++ and ebx,r11d ++ add esi,ecx ++ rol r11d,30 ++ add esi,ebx ++ xor ebp,DWORD[52+rsp] ++ mov eax,edi ++ mov DWORD[48+rsp],edx ++ mov ecx,esi ++ xor ebp,DWORD[60+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor ebp,DWORD[20+rsp] ++ lea r13d,[((-899497514))+r13*1+rdx] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol ebp,1 ++ xor r14d,DWORD[56+rsp] ++ mov eax,esi ++ mov DWORD[52+rsp],ebp ++ mov ecx,r13d ++ xor r14d,DWORD[rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor r14d,DWORD[24+rsp] ++ lea r12d,[((-899497514))+r12*1+rbp] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol r14d,1 ++ xor edx,DWORD[60+rsp] ++ mov eax,r13d ++ mov DWORD[56+rsp],r14d ++ mov ecx,r12d ++ xor edx,DWORD[4+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor edx,DWORD[28+rsp] ++ lea r11d,[((-899497514))+r11*1+r14] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol edx,1 ++ xor ebp,DWORD[rsp] ++ mov eax,r12d ++ mov DWORD[60+rsp],edx ++ mov ecx,r11d ++ xor ebp,DWORD[8+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor ebp,DWORD[32+rsp] ++ lea edi,[((-899497514))+rdi*1+rdx] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol ebp,1 ++ xor r14d,DWORD[4+rsp] ++ mov eax,r11d ++ mov DWORD[rsp],ebp ++ mov ecx,edi ++ xor r14d,DWORD[12+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor r14d,DWORD[36+rsp] ++ lea esi,[((-899497514))+rsi*1+rbp] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol r14d,1 ++ xor edx,DWORD[8+rsp] ++ mov eax,edi ++ mov DWORD[4+rsp],r14d ++ mov ecx,esi ++ xor edx,DWORD[16+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor edx,DWORD[40+rsp] ++ lea r13d,[((-899497514))+r13*1+r14] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol edx,1 ++ xor ebp,DWORD[12+rsp] ++ mov eax,esi ++ mov DWORD[8+rsp],edx ++ mov ecx,r13d ++ xor ebp,DWORD[20+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor ebp,DWORD[44+rsp] ++ lea r12d,[((-899497514))+r12*1+rdx] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol ebp,1 ++ xor r14d,DWORD[16+rsp] ++ mov eax,r13d ++ mov DWORD[12+rsp],ebp ++ mov ecx,r12d ++ xor r14d,DWORD[24+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor r14d,DWORD[48+rsp] ++ lea r11d,[((-899497514))+r11*1+rbp] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol r14d,1 ++ xor edx,DWORD[20+rsp] ++ mov eax,r12d ++ mov DWORD[16+rsp],r14d ++ mov ecx,r11d ++ xor edx,DWORD[28+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor edx,DWORD[52+rsp] ++ lea edi,[((-899497514))+rdi*1+r14] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol edx,1 ++ xor ebp,DWORD[24+rsp] ++ mov eax,r11d ++ mov DWORD[20+rsp],edx ++ mov ecx,edi ++ xor ebp,DWORD[32+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor ebp,DWORD[56+rsp] ++ lea esi,[((-899497514))+rsi*1+rdx] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol ebp,1 ++ xor r14d,DWORD[28+rsp] ++ mov eax,edi ++ mov DWORD[24+rsp],ebp ++ mov ecx,esi ++ xor r14d,DWORD[36+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor r14d,DWORD[60+rsp] ++ lea r13d,[((-899497514))+r13*1+rbp] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol r14d,1 ++ xor edx,DWORD[32+rsp] ++ mov eax,esi ++ mov DWORD[28+rsp],r14d ++ mov ecx,r13d ++ xor edx,DWORD[40+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor edx,DWORD[rsp] ++ lea r12d,[((-899497514))+r12*1+r14] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol edx,1 ++ xor ebp,DWORD[36+rsp] ++ mov eax,r13d ++ ++ mov ecx,r12d ++ xor ebp,DWORD[44+rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor ebp,DWORD[4+rsp] ++ lea r11d,[((-899497514))+r11*1+rdx] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol ebp,1 ++ xor r14d,DWORD[40+rsp] ++ mov eax,r12d ++ ++ mov ecx,r11d ++ xor r14d,DWORD[48+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor r14d,DWORD[8+rsp] ++ lea edi,[((-899497514))+rdi*1+rbp] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol r14d,1 ++ xor edx,DWORD[44+rsp] ++ mov eax,r11d ++ ++ mov ecx,edi ++ xor edx,DWORD[52+rsp] ++ xor eax,r13d ++ rol ecx,5 ++ xor edx,DWORD[12+rsp] ++ lea esi,[((-899497514))+rsi*1+r14] ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ rol edx,1 ++ xor ebp,DWORD[48+rsp] ++ mov eax,edi ++ ++ mov ecx,esi ++ xor ebp,DWORD[56+rsp] ++ xor eax,r12d ++ rol ecx,5 ++ xor ebp,DWORD[16+rsp] ++ lea r13d,[((-899497514))+r13*1+rdx] ++ xor eax,r11d ++ add r13d,ecx ++ rol edi,30 ++ add r13d,eax ++ rol ebp,1 ++ xor r14d,DWORD[52+rsp] ++ mov eax,esi ++ ++ mov ecx,r13d ++ xor r14d,DWORD[60+rsp] ++ xor eax,r11d ++ rol ecx,5 ++ xor r14d,DWORD[20+rsp] ++ lea r12d,[((-899497514))+r12*1+rbp] ++ xor eax,edi ++ add r12d,ecx ++ rol esi,30 ++ add r12d,eax ++ rol r14d,1 ++ xor edx,DWORD[56+rsp] ++ mov eax,r13d ++ ++ mov ecx,r12d ++ xor edx,DWORD[rsp] ++ xor eax,edi ++ rol ecx,5 ++ xor edx,DWORD[24+rsp] ++ lea r11d,[((-899497514))+r11*1+r14] ++ xor eax,esi ++ add r11d,ecx ++ rol r13d,30 ++ add r11d,eax ++ rol edx,1 ++ xor ebp,DWORD[60+rsp] ++ mov eax,r12d ++ ++ mov ecx,r11d ++ xor ebp,DWORD[4+rsp] ++ xor eax,esi ++ rol ecx,5 ++ xor ebp,DWORD[28+rsp] ++ lea edi,[((-899497514))+rdi*1+rdx] ++ xor eax,r13d ++ add edi,ecx ++ rol r12d,30 ++ add edi,eax ++ rol ebp,1 ++ mov eax,r11d ++ mov ecx,edi ++ xor eax,r13d ++ lea esi,[((-899497514))+rsi*1+rbp] ++ rol ecx,5 ++ xor eax,r12d ++ add esi,ecx ++ rol r11d,30 ++ add esi,eax ++ add esi,DWORD[r8] ++ add edi,DWORD[4+r8] ++ add r11d,DWORD[8+r8] ++ add r12d,DWORD[12+r8] ++ add r13d,DWORD[16+r8] ++ mov DWORD[r8],esi ++ mov DWORD[4+r8],edi ++ mov DWORD[8+r8],r11d ++ mov DWORD[12+r8],r12d ++ mov DWORD[16+r8],r13d ++ ++ sub r10,1 ++ lea r9,[64+r9] ++ jnz NEAR $L$loop ++ ++ mov rsi,QWORD[64+rsp] ++ mov r14,QWORD[((-40))+rsi] ++ mov r13,QWORD[((-32))+rsi] ++ mov r12,QWORD[((-24))+rsi] ++ mov rbp,QWORD[((-16))+rsi] ++ mov rbx,QWORD[((-8))+rsi] ++ lea rsp,[rsi] ++$L$epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha1_block_data_order: ++ ++ALIGN 32 ++sha1_block_data_order_shaext: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha1_block_data_order_shaext: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_shaext_shortcut: ++ lea rsp,[((-72))+rsp] ++ movaps XMMWORD[(-8-64)+rax],xmm6 ++ movaps XMMWORD[(-8-48)+rax],xmm7 ++ movaps XMMWORD[(-8-32)+rax],xmm8 ++ movaps XMMWORD[(-8-16)+rax],xmm9 ++$L$prologue_shaext: ++ movdqu xmm0,XMMWORD[rdi] ++ movd xmm1,DWORD[16+rdi] ++ movdqa xmm3,XMMWORD[((K_XX_XX+160))] ++ ++ movdqu xmm4,XMMWORD[rsi] ++ pshufd xmm0,xmm0,27 ++ movdqu xmm5,XMMWORD[16+rsi] ++ pshufd xmm1,xmm1,27 ++ movdqu xmm6,XMMWORD[32+rsi] ++DB 102,15,56,0,227 ++ movdqu xmm7,XMMWORD[48+rsi] ++DB 102,15,56,0,235 ++DB 102,15,56,0,243 ++ movdqa xmm9,xmm1 ++DB 102,15,56,0,251 ++ jmp NEAR $L$oop_shaext ++ ++ALIGN 16 ++$L$oop_shaext: ++ dec rdx ++ lea r8,[64+rsi] ++ paddd xmm1,xmm4 ++ cmovne rsi,r8 ++ movdqa xmm8,xmm0 ++DB 15,56,201,229 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,0 ++DB 15,56,200,213 ++ pxor xmm4,xmm6 ++DB 15,56,201,238 ++DB 15,56,202,231 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,0 ++DB 15,56,200,206 ++ pxor xmm5,xmm7 ++DB 15,56,202,236 ++DB 15,56,201,247 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,0 ++DB 15,56,200,215 ++ pxor xmm6,xmm4 ++DB 15,56,201,252 ++DB 15,56,202,245 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,0 ++DB 15,56,200,204 ++ pxor xmm7,xmm5 ++DB 15,56,202,254 ++DB 15,56,201,229 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,0 ++DB 15,56,200,213 ++ pxor xmm4,xmm6 ++DB 15,56,201,238 ++DB 15,56,202,231 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,1 ++DB 15,56,200,206 ++ pxor xmm5,xmm7 ++DB 15,56,202,236 ++DB 15,56,201,247 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,1 ++DB 15,56,200,215 ++ pxor xmm6,xmm4 ++DB 15,56,201,252 ++DB 15,56,202,245 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,1 ++DB 15,56,200,204 ++ pxor xmm7,xmm5 ++DB 15,56,202,254 ++DB 15,56,201,229 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,1 ++DB 15,56,200,213 ++ pxor xmm4,xmm6 ++DB 15,56,201,238 ++DB 15,56,202,231 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,1 ++DB 15,56,200,206 ++ pxor xmm5,xmm7 ++DB 15,56,202,236 ++DB 15,56,201,247 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,2 ++DB 15,56,200,215 ++ pxor xmm6,xmm4 ++DB 15,56,201,252 ++DB 15,56,202,245 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,2 ++DB 15,56,200,204 ++ pxor xmm7,xmm5 ++DB 15,56,202,254 ++DB 15,56,201,229 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,2 ++DB 15,56,200,213 ++ pxor xmm4,xmm6 ++DB 15,56,201,238 ++DB 15,56,202,231 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,2 ++DB 15,56,200,206 ++ pxor xmm5,xmm7 ++DB 15,56,202,236 ++DB 15,56,201,247 ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,2 ++DB 15,56,200,215 ++ pxor xmm6,xmm4 ++DB 15,56,201,252 ++DB 15,56,202,245 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,3 ++DB 15,56,200,204 ++ pxor xmm7,xmm5 ++DB 15,56,202,254 ++ movdqu xmm4,XMMWORD[rsi] ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,3 ++DB 15,56,200,213 ++ movdqu xmm5,XMMWORD[16+rsi] ++DB 102,15,56,0,227 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,3 ++DB 15,56,200,206 ++ movdqu xmm6,XMMWORD[32+rsi] ++DB 102,15,56,0,235 ++ ++ movdqa xmm2,xmm0 ++DB 15,58,204,193,3 ++DB 15,56,200,215 ++ movdqu xmm7,XMMWORD[48+rsi] ++DB 102,15,56,0,243 ++ ++ movdqa xmm1,xmm0 ++DB 15,58,204,194,3 ++DB 65,15,56,200,201 ++DB 102,15,56,0,251 ++ ++ paddd xmm0,xmm8 ++ movdqa xmm9,xmm1 ++ ++ jnz NEAR $L$oop_shaext ++ ++ pshufd xmm0,xmm0,27 ++ pshufd xmm1,xmm1,27 ++ movdqu XMMWORD[rdi],xmm0 ++ movd DWORD[16+rdi],xmm1 ++ movaps xmm6,XMMWORD[((-8-64))+rax] ++ movaps xmm7,XMMWORD[((-8-48))+rax] ++ movaps xmm8,XMMWORD[((-8-32))+rax] ++ movaps xmm9,XMMWORD[((-8-16))+rax] ++ mov rsp,rax ++$L$epilogue_shaext: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha1_block_data_order_shaext: ++ ++ALIGN 16 ++sha1_block_data_order_ssse3: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha1_block_data_order_ssse3: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_ssse3_shortcut: ++ mov rax,rsp ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ lea rsp,[((-160))+rsp] ++ movaps XMMWORD[(-40-96)+rax],xmm6 ++ movaps XMMWORD[(-40-80)+rax],xmm7 ++ movaps XMMWORD[(-40-64)+rax],xmm8 ++ movaps XMMWORD[(-40-48)+rax],xmm9 ++ movaps XMMWORD[(-40-32)+rax],xmm10 ++ movaps XMMWORD[(-40-16)+rax],xmm11 ++$L$prologue_ssse3: ++ mov r14,rax ++ and rsp,-64 ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rdx ++ ++ shl r10,6 ++ add r10,r9 ++ lea r11,[((K_XX_XX+64))] ++ ++ mov eax,DWORD[r8] ++ mov ebx,DWORD[4+r8] ++ mov ecx,DWORD[8+r8] ++ mov edx,DWORD[12+r8] ++ mov esi,ebx ++ mov ebp,DWORD[16+r8] ++ mov edi,ecx ++ xor edi,edx ++ and esi,edi ++ ++ movdqa xmm6,XMMWORD[64+r11] ++ movdqa xmm9,XMMWORD[((-64))+r11] ++ movdqu xmm0,XMMWORD[r9] ++ movdqu xmm1,XMMWORD[16+r9] ++ movdqu xmm2,XMMWORD[32+r9] ++ movdqu xmm3,XMMWORD[48+r9] ++DB 102,15,56,0,198 ++DB 102,15,56,0,206 ++DB 102,15,56,0,214 ++ add r9,64 ++ paddd xmm0,xmm9 ++DB 102,15,56,0,222 ++ paddd xmm1,xmm9 ++ paddd xmm2,xmm9 ++ movdqa XMMWORD[rsp],xmm0 ++ psubd xmm0,xmm9 ++ movdqa XMMWORD[16+rsp],xmm1 ++ psubd xmm1,xmm9 ++ movdqa XMMWORD[32+rsp],xmm2 ++ psubd xmm2,xmm9 ++ jmp NEAR $L$oop_ssse3 ++ALIGN 16 ++$L$oop_ssse3: ++ ror ebx,2 ++ pshufd xmm4,xmm0,238 ++ xor esi,edx ++ movdqa xmm8,xmm3 ++ paddd xmm9,xmm3 ++ mov edi,eax ++ add ebp,DWORD[rsp] ++ punpcklqdq xmm4,xmm1 ++ xor ebx,ecx ++ rol eax,5 ++ add ebp,esi ++ psrldq xmm8,4 ++ and edi,ebx ++ xor ebx,ecx ++ pxor xmm4,xmm0 ++ add ebp,eax ++ ror eax,7 ++ pxor xmm8,xmm2 ++ xor edi,ecx ++ mov esi,ebp ++ add edx,DWORD[4+rsp] ++ pxor xmm4,xmm8 ++ xor eax,ebx ++ rol ebp,5 ++ movdqa XMMWORD[48+rsp],xmm9 ++ add edx,edi ++ and esi,eax ++ movdqa xmm10,xmm4 ++ xor eax,ebx ++ add edx,ebp ++ ror ebp,7 ++ movdqa xmm8,xmm4 ++ xor esi,ebx ++ pslldq xmm10,12 ++ paddd xmm4,xmm4 ++ mov edi,edx ++ add ecx,DWORD[8+rsp] ++ psrld xmm8,31 ++ xor ebp,eax ++ rol edx,5 ++ add ecx,esi ++ movdqa xmm9,xmm10 ++ and edi,ebp ++ xor ebp,eax ++ psrld xmm10,30 ++ add ecx,edx ++ ror edx,7 ++ por xmm4,xmm8 ++ xor edi,eax ++ mov esi,ecx ++ add ebx,DWORD[12+rsp] ++ pslld xmm9,2 ++ pxor xmm4,xmm10 ++ xor edx,ebp ++ movdqa xmm10,XMMWORD[((-64))+r11] ++ rol ecx,5 ++ add ebx,edi ++ and esi,edx ++ pxor xmm4,xmm9 ++ xor edx,ebp ++ add ebx,ecx ++ ror ecx,7 ++ pshufd xmm5,xmm1,238 ++ xor esi,ebp ++ movdqa xmm9,xmm4 ++ paddd xmm10,xmm4 ++ mov edi,ebx ++ add eax,DWORD[16+rsp] ++ punpcklqdq xmm5,xmm2 ++ xor ecx,edx ++ rol ebx,5 ++ add eax,esi ++ psrldq xmm9,4 ++ and edi,ecx ++ xor ecx,edx ++ pxor xmm5,xmm1 ++ add eax,ebx ++ ror ebx,7 ++ pxor xmm9,xmm3 ++ xor edi,edx ++ mov esi,eax ++ add ebp,DWORD[20+rsp] ++ pxor xmm5,xmm9 ++ xor ebx,ecx ++ rol eax,5 ++ movdqa XMMWORD[rsp],xmm10 ++ add ebp,edi ++ and esi,ebx ++ movdqa xmm8,xmm5 ++ xor ebx,ecx ++ add ebp,eax ++ ror eax,7 ++ movdqa xmm9,xmm5 ++ xor esi,ecx ++ pslldq xmm8,12 ++ paddd xmm5,xmm5 ++ mov edi,ebp ++ add edx,DWORD[24+rsp] ++ psrld xmm9,31 ++ xor eax,ebx ++ rol ebp,5 ++ add edx,esi ++ movdqa xmm10,xmm8 ++ and edi,eax ++ xor eax,ebx ++ psrld xmm8,30 ++ add edx,ebp ++ ror ebp,7 ++ por xmm5,xmm9 ++ xor edi,ebx ++ mov esi,edx ++ add ecx,DWORD[28+rsp] ++ pslld xmm10,2 ++ pxor xmm5,xmm8 ++ xor ebp,eax ++ movdqa xmm8,XMMWORD[((-32))+r11] ++ rol edx,5 ++ add ecx,edi ++ and esi,ebp ++ pxor xmm5,xmm10 ++ xor ebp,eax ++ add ecx,edx ++ ror edx,7 ++ pshufd xmm6,xmm2,238 ++ xor esi,eax ++ movdqa xmm10,xmm5 ++ paddd xmm8,xmm5 ++ mov edi,ecx ++ add ebx,DWORD[32+rsp] ++ punpcklqdq xmm6,xmm3 ++ xor edx,ebp ++ rol ecx,5 ++ add ebx,esi ++ psrldq xmm10,4 ++ and edi,edx ++ xor edx,ebp ++ pxor xmm6,xmm2 ++ add ebx,ecx ++ ror ecx,7 ++ pxor xmm10,xmm4 ++ xor edi,ebp ++ mov esi,ebx ++ add eax,DWORD[36+rsp] ++ pxor xmm6,xmm10 ++ xor ecx,edx ++ rol ebx,5 ++ movdqa XMMWORD[16+rsp],xmm8 ++ add eax,edi ++ and esi,ecx ++ movdqa xmm9,xmm6 ++ xor ecx,edx ++ add eax,ebx ++ ror ebx,7 ++ movdqa xmm10,xmm6 ++ xor esi,edx ++ pslldq xmm9,12 ++ paddd xmm6,xmm6 ++ mov edi,eax ++ add ebp,DWORD[40+rsp] ++ psrld xmm10,31 ++ xor ebx,ecx ++ rol eax,5 ++ add ebp,esi ++ movdqa xmm8,xmm9 ++ and edi,ebx ++ xor ebx,ecx ++ psrld xmm9,30 ++ add ebp,eax ++ ror eax,7 ++ por xmm6,xmm10 ++ xor edi,ecx ++ mov esi,ebp ++ add edx,DWORD[44+rsp] ++ pslld xmm8,2 ++ pxor xmm6,xmm9 ++ xor eax,ebx ++ movdqa xmm9,XMMWORD[((-32))+r11] ++ rol ebp,5 ++ add edx,edi ++ and esi,eax ++ pxor xmm6,xmm8 ++ xor eax,ebx ++ add edx,ebp ++ ror ebp,7 ++ pshufd xmm7,xmm3,238 ++ xor esi,ebx ++ movdqa xmm8,xmm6 ++ paddd xmm9,xmm6 ++ mov edi,edx ++ add ecx,DWORD[48+rsp] ++ punpcklqdq xmm7,xmm4 ++ xor ebp,eax ++ rol edx,5 ++ add ecx,esi ++ psrldq xmm8,4 ++ and edi,ebp ++ xor ebp,eax ++ pxor xmm7,xmm3 ++ add ecx,edx ++ ror edx,7 ++ pxor xmm8,xmm5 ++ xor edi,eax ++ mov esi,ecx ++ add ebx,DWORD[52+rsp] ++ pxor xmm7,xmm8 ++ xor edx,ebp ++ rol ecx,5 ++ movdqa XMMWORD[32+rsp],xmm9 ++ add ebx,edi ++ and esi,edx ++ movdqa xmm10,xmm7 ++ xor edx,ebp ++ add ebx,ecx ++ ror ecx,7 ++ movdqa xmm8,xmm7 ++ xor esi,ebp ++ pslldq xmm10,12 ++ paddd xmm7,xmm7 ++ mov edi,ebx ++ add eax,DWORD[56+rsp] ++ psrld xmm8,31 ++ xor ecx,edx ++ rol ebx,5 ++ add eax,esi ++ movdqa xmm9,xmm10 ++ and edi,ecx ++ xor ecx,edx ++ psrld xmm10,30 ++ add eax,ebx ++ ror ebx,7 ++ por xmm7,xmm8 ++ xor edi,edx ++ mov esi,eax ++ add ebp,DWORD[60+rsp] ++ pslld xmm9,2 ++ pxor xmm7,xmm10 ++ xor ebx,ecx ++ movdqa xmm10,XMMWORD[((-32))+r11] ++ rol eax,5 ++ add ebp,edi ++ and esi,ebx ++ pxor xmm7,xmm9 ++ pshufd xmm9,xmm6,238 ++ xor ebx,ecx ++ add ebp,eax ++ ror eax,7 ++ pxor xmm0,xmm4 ++ xor esi,ecx ++ mov edi,ebp ++ add edx,DWORD[rsp] ++ punpcklqdq xmm9,xmm7 ++ xor eax,ebx ++ rol ebp,5 ++ pxor xmm0,xmm1 ++ add edx,esi ++ and edi,eax ++ movdqa xmm8,xmm10 ++ xor eax,ebx ++ paddd xmm10,xmm7 ++ add edx,ebp ++ pxor xmm0,xmm9 ++ ror ebp,7 ++ xor edi,ebx ++ mov esi,edx ++ add ecx,DWORD[4+rsp] ++ movdqa xmm9,xmm0 ++ xor ebp,eax ++ rol edx,5 ++ movdqa XMMWORD[48+rsp],xmm10 ++ add ecx,edi ++ and esi,ebp ++ xor ebp,eax ++ pslld xmm0,2 ++ add ecx,edx ++ ror edx,7 ++ psrld xmm9,30 ++ xor esi,eax ++ mov edi,ecx ++ add ebx,DWORD[8+rsp] ++ por xmm0,xmm9 ++ xor edx,ebp ++ rol ecx,5 ++ pshufd xmm10,xmm7,238 ++ add ebx,esi ++ and edi,edx ++ xor edx,ebp ++ add ebx,ecx ++ add eax,DWORD[12+rsp] ++ xor edi,ebp ++ mov esi,ebx ++ rol ebx,5 ++ add eax,edi ++ xor esi,edx ++ ror ecx,7 ++ add eax,ebx ++ pxor xmm1,xmm5 ++ add ebp,DWORD[16+rsp] ++ xor esi,ecx ++ punpcklqdq xmm10,xmm0 ++ mov edi,eax ++ rol eax,5 ++ pxor xmm1,xmm2 ++ add ebp,esi ++ xor edi,ecx ++ movdqa xmm9,xmm8 ++ ror ebx,7 ++ paddd xmm8,xmm0 ++ add ebp,eax ++ pxor xmm1,xmm10 ++ add edx,DWORD[20+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ movdqa xmm10,xmm1 ++ add edx,edi ++ xor esi,ebx ++ movdqa XMMWORD[rsp],xmm8 ++ ror eax,7 ++ add edx,ebp ++ add ecx,DWORD[24+rsp] ++ pslld xmm1,2 ++ xor esi,eax ++ mov edi,edx ++ psrld xmm10,30 ++ rol edx,5 ++ add ecx,esi ++ xor edi,eax ++ ror ebp,7 ++ por xmm1,xmm10 ++ add ecx,edx ++ add ebx,DWORD[28+rsp] ++ pshufd xmm8,xmm0,238 ++ xor edi,ebp ++ mov esi,ecx ++ rol ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ ror edx,7 ++ add ebx,ecx ++ pxor xmm2,xmm6 ++ add eax,DWORD[32+rsp] ++ xor esi,edx ++ punpcklqdq xmm8,xmm1 ++ mov edi,ebx ++ rol ebx,5 ++ pxor xmm2,xmm3 ++ add eax,esi ++ xor edi,edx ++ movdqa xmm10,XMMWORD[r11] ++ ror ecx,7 ++ paddd xmm9,xmm1 ++ add eax,ebx ++ pxor xmm2,xmm8 ++ add ebp,DWORD[36+rsp] ++ xor edi,ecx ++ mov esi,eax ++ rol eax,5 ++ movdqa xmm8,xmm2 ++ add ebp,edi ++ xor esi,ecx ++ movdqa XMMWORD[16+rsp],xmm9 ++ ror ebx,7 ++ add ebp,eax ++ add edx,DWORD[40+rsp] ++ pslld xmm2,2 ++ xor esi,ebx ++ mov edi,ebp ++ psrld xmm8,30 ++ rol ebp,5 ++ add edx,esi ++ xor edi,ebx ++ ror eax,7 ++ por xmm2,xmm8 ++ add edx,ebp ++ add ecx,DWORD[44+rsp] ++ pshufd xmm9,xmm1,238 ++ xor edi,eax ++ mov esi,edx ++ rol edx,5 ++ add ecx,edi ++ xor esi,eax ++ ror ebp,7 ++ add ecx,edx ++ pxor xmm3,xmm7 ++ add ebx,DWORD[48+rsp] ++ xor esi,ebp ++ punpcklqdq xmm9,xmm2 ++ mov edi,ecx ++ rol ecx,5 ++ pxor xmm3,xmm4 ++ add ebx,esi ++ xor edi,ebp ++ movdqa xmm8,xmm10 ++ ror edx,7 ++ paddd xmm10,xmm2 ++ add ebx,ecx ++ pxor xmm3,xmm9 ++ add eax,DWORD[52+rsp] ++ xor edi,edx ++ mov esi,ebx ++ rol ebx,5 ++ movdqa xmm9,xmm3 ++ add eax,edi ++ xor esi,edx ++ movdqa XMMWORD[32+rsp],xmm10 ++ ror ecx,7 ++ add eax,ebx ++ add ebp,DWORD[56+rsp] ++ pslld xmm3,2 ++ xor esi,ecx ++ mov edi,eax ++ psrld xmm9,30 ++ rol eax,5 ++ add ebp,esi ++ xor edi,ecx ++ ror ebx,7 ++ por xmm3,xmm9 ++ add ebp,eax ++ add edx,DWORD[60+rsp] ++ pshufd xmm10,xmm2,238 ++ xor edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ add edx,edi ++ xor esi,ebx ++ ror eax,7 ++ add edx,ebp ++ pxor xmm4,xmm0 ++ add ecx,DWORD[rsp] ++ xor esi,eax ++ punpcklqdq xmm10,xmm3 ++ mov edi,edx ++ rol edx,5 ++ pxor xmm4,xmm5 ++ add ecx,esi ++ xor edi,eax ++ movdqa xmm9,xmm8 ++ ror ebp,7 ++ paddd xmm8,xmm3 ++ add ecx,edx ++ pxor xmm4,xmm10 ++ add ebx,DWORD[4+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ rol ecx,5 ++ movdqa xmm10,xmm4 ++ add ebx,edi ++ xor esi,ebp ++ movdqa XMMWORD[48+rsp],xmm8 ++ ror edx,7 ++ add ebx,ecx ++ add eax,DWORD[8+rsp] ++ pslld xmm4,2 ++ xor esi,edx ++ mov edi,ebx ++ psrld xmm10,30 ++ rol ebx,5 ++ add eax,esi ++ xor edi,edx ++ ror ecx,7 ++ por xmm4,xmm10 ++ add eax,ebx ++ add ebp,DWORD[12+rsp] ++ pshufd xmm8,xmm3,238 ++ xor edi,ecx ++ mov esi,eax ++ rol eax,5 ++ add ebp,edi ++ xor esi,ecx ++ ror ebx,7 ++ add ebp,eax ++ pxor xmm5,xmm1 ++ add edx,DWORD[16+rsp] ++ xor esi,ebx ++ punpcklqdq xmm8,xmm4 ++ mov edi,ebp ++ rol ebp,5 ++ pxor xmm5,xmm6 ++ add edx,esi ++ xor edi,ebx ++ movdqa xmm10,xmm9 ++ ror eax,7 ++ paddd xmm9,xmm4 ++ add edx,ebp ++ pxor xmm5,xmm8 ++ add ecx,DWORD[20+rsp] ++ xor edi,eax ++ mov esi,edx ++ rol edx,5 ++ movdqa xmm8,xmm5 ++ add ecx,edi ++ xor esi,eax ++ movdqa XMMWORD[rsp],xmm9 ++ ror ebp,7 ++ add ecx,edx ++ add ebx,DWORD[24+rsp] ++ pslld xmm5,2 ++ xor esi,ebp ++ mov edi,ecx ++ psrld xmm8,30 ++ rol ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ ror edx,7 ++ por xmm5,xmm8 ++ add ebx,ecx ++ add eax,DWORD[28+rsp] ++ pshufd xmm9,xmm4,238 ++ ror ecx,7 ++ mov esi,ebx ++ xor edi,edx ++ rol ebx,5 ++ add eax,edi ++ xor esi,ecx ++ xor ecx,edx ++ add eax,ebx ++ pxor xmm6,xmm2 ++ add ebp,DWORD[32+rsp] ++ and esi,ecx ++ xor ecx,edx ++ ror ebx,7 ++ punpcklqdq xmm9,xmm5 ++ mov edi,eax ++ xor esi,ecx ++ pxor xmm6,xmm7 ++ rol eax,5 ++ add ebp,esi ++ movdqa xmm8,xmm10 ++ xor edi,ebx ++ paddd xmm10,xmm5 ++ xor ebx,ecx ++ pxor xmm6,xmm9 ++ add ebp,eax ++ add edx,DWORD[36+rsp] ++ and edi,ebx ++ xor ebx,ecx ++ ror eax,7 ++ movdqa xmm9,xmm6 ++ mov esi,ebp ++ xor edi,ebx ++ movdqa XMMWORD[16+rsp],xmm10 ++ rol ebp,5 ++ add edx,edi ++ xor esi,eax ++ pslld xmm6,2 ++ xor eax,ebx ++ add edx,ebp ++ psrld xmm9,30 ++ add ecx,DWORD[40+rsp] ++ and esi,eax ++ xor eax,ebx ++ por xmm6,xmm9 ++ ror ebp,7 ++ mov edi,edx ++ xor esi,eax ++ rol edx,5 ++ pshufd xmm10,xmm5,238 ++ add ecx,esi ++ xor edi,ebp ++ xor ebp,eax ++ add ecx,edx ++ add ebx,DWORD[44+rsp] ++ and edi,ebp ++ xor ebp,eax ++ ror edx,7 ++ mov esi,ecx ++ xor edi,ebp ++ rol ecx,5 ++ add ebx,edi ++ xor esi,edx ++ xor edx,ebp ++ add ebx,ecx ++ pxor xmm7,xmm3 ++ add eax,DWORD[48+rsp] ++ and esi,edx ++ xor edx,ebp ++ ror ecx,7 ++ punpcklqdq xmm10,xmm6 ++ mov edi,ebx ++ xor esi,edx ++ pxor xmm7,xmm0 ++ rol ebx,5 ++ add eax,esi ++ movdqa xmm9,XMMWORD[32+r11] ++ xor edi,ecx ++ paddd xmm8,xmm6 ++ xor ecx,edx ++ pxor xmm7,xmm10 ++ add eax,ebx ++ add ebp,DWORD[52+rsp] ++ and edi,ecx ++ xor ecx,edx ++ ror ebx,7 ++ movdqa xmm10,xmm7 ++ mov esi,eax ++ xor edi,ecx ++ movdqa XMMWORD[32+rsp],xmm8 ++ rol eax,5 ++ add ebp,edi ++ xor esi,ebx ++ pslld xmm7,2 ++ xor ebx,ecx ++ add ebp,eax ++ psrld xmm10,30 ++ add edx,DWORD[56+rsp] ++ and esi,ebx ++ xor ebx,ecx ++ por xmm7,xmm10 ++ ror eax,7 ++ mov edi,ebp ++ xor esi,ebx ++ rol ebp,5 ++ pshufd xmm8,xmm6,238 ++ add edx,esi ++ xor edi,eax ++ xor eax,ebx ++ add edx,ebp ++ add ecx,DWORD[60+rsp] ++ and edi,eax ++ xor eax,ebx ++ ror ebp,7 ++ mov esi,edx ++ xor edi,eax ++ rol edx,5 ++ add ecx,edi ++ xor esi,ebp ++ xor ebp,eax ++ add ecx,edx ++ pxor xmm0,xmm4 ++ add ebx,DWORD[rsp] ++ and esi,ebp ++ xor ebp,eax ++ ror edx,7 ++ punpcklqdq xmm8,xmm7 ++ mov edi,ecx ++ xor esi,ebp ++ pxor xmm0,xmm1 ++ rol ecx,5 ++ add ebx,esi ++ movdqa xmm10,xmm9 ++ xor edi,edx ++ paddd xmm9,xmm7 ++ xor edx,ebp ++ pxor xmm0,xmm8 ++ add ebx,ecx ++ add eax,DWORD[4+rsp] ++ and edi,edx ++ xor edx,ebp ++ ror ecx,7 ++ movdqa xmm8,xmm0 ++ mov esi,ebx ++ xor edi,edx ++ movdqa XMMWORD[48+rsp],xmm9 ++ rol ebx,5 ++ add eax,edi ++ xor esi,ecx ++ pslld xmm0,2 ++ xor ecx,edx ++ add eax,ebx ++ psrld xmm8,30 ++ add ebp,DWORD[8+rsp] ++ and esi,ecx ++ xor ecx,edx ++ por xmm0,xmm8 ++ ror ebx,7 ++ mov edi,eax ++ xor esi,ecx ++ rol eax,5 ++ pshufd xmm9,xmm7,238 ++ add ebp,esi ++ xor edi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ add edx,DWORD[12+rsp] ++ and edi,ebx ++ xor ebx,ecx ++ ror eax,7 ++ mov esi,ebp ++ xor edi,ebx ++ rol ebp,5 ++ add edx,edi ++ xor esi,eax ++ xor eax,ebx ++ add edx,ebp ++ pxor xmm1,xmm5 ++ add ecx,DWORD[16+rsp] ++ and esi,eax ++ xor eax,ebx ++ ror ebp,7 ++ punpcklqdq xmm9,xmm0 ++ mov edi,edx ++ xor esi,eax ++ pxor xmm1,xmm2 ++ rol edx,5 ++ add ecx,esi ++ movdqa xmm8,xmm10 ++ xor edi,ebp ++ paddd xmm10,xmm0 ++ xor ebp,eax ++ pxor xmm1,xmm9 ++ add ecx,edx ++ add ebx,DWORD[20+rsp] ++ and edi,ebp ++ xor ebp,eax ++ ror edx,7 ++ movdqa xmm9,xmm1 ++ mov esi,ecx ++ xor edi,ebp ++ movdqa XMMWORD[rsp],xmm10 ++ rol ecx,5 ++ add ebx,edi ++ xor esi,edx ++ pslld xmm1,2 ++ xor edx,ebp ++ add ebx,ecx ++ psrld xmm9,30 ++ add eax,DWORD[24+rsp] ++ and esi,edx ++ xor edx,ebp ++ por xmm1,xmm9 ++ ror ecx,7 ++ mov edi,ebx ++ xor esi,edx ++ rol ebx,5 ++ pshufd xmm10,xmm0,238 ++ add eax,esi ++ xor edi,ecx ++ xor ecx,edx ++ add eax,ebx ++ add ebp,DWORD[28+rsp] ++ and edi,ecx ++ xor ecx,edx ++ ror ebx,7 ++ mov esi,eax ++ xor edi,ecx ++ rol eax,5 ++ add ebp,edi ++ xor esi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ pxor xmm2,xmm6 ++ add edx,DWORD[32+rsp] ++ and esi,ebx ++ xor ebx,ecx ++ ror eax,7 ++ punpcklqdq xmm10,xmm1 ++ mov edi,ebp ++ xor esi,ebx ++ pxor xmm2,xmm3 ++ rol ebp,5 ++ add edx,esi ++ movdqa xmm9,xmm8 ++ xor edi,eax ++ paddd xmm8,xmm1 ++ xor eax,ebx ++ pxor xmm2,xmm10 ++ add edx,ebp ++ add ecx,DWORD[36+rsp] ++ and edi,eax ++ xor eax,ebx ++ ror ebp,7 ++ movdqa xmm10,xmm2 ++ mov esi,edx ++ xor edi,eax ++ movdqa XMMWORD[16+rsp],xmm8 ++ rol edx,5 ++ add ecx,edi ++ xor esi,ebp ++ pslld xmm2,2 ++ xor ebp,eax ++ add ecx,edx ++ psrld xmm10,30 ++ add ebx,DWORD[40+rsp] ++ and esi,ebp ++ xor ebp,eax ++ por xmm2,xmm10 ++ ror edx,7 ++ mov edi,ecx ++ xor esi,ebp ++ rol ecx,5 ++ pshufd xmm8,xmm1,238 ++ add ebx,esi ++ xor edi,edx ++ xor edx,ebp ++ add ebx,ecx ++ add eax,DWORD[44+rsp] ++ and edi,edx ++ xor edx,ebp ++ ror ecx,7 ++ mov esi,ebx ++ xor edi,edx ++ rol ebx,5 ++ add eax,edi ++ xor esi,edx ++ add eax,ebx ++ pxor xmm3,xmm7 ++ add ebp,DWORD[48+rsp] ++ xor esi,ecx ++ punpcklqdq xmm8,xmm2 ++ mov edi,eax ++ rol eax,5 ++ pxor xmm3,xmm4 ++ add ebp,esi ++ xor edi,ecx ++ movdqa xmm10,xmm9 ++ ror ebx,7 ++ paddd xmm9,xmm2 ++ add ebp,eax ++ pxor xmm3,xmm8 ++ add edx,DWORD[52+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ movdqa xmm8,xmm3 ++ add edx,edi ++ xor esi,ebx ++ movdqa XMMWORD[32+rsp],xmm9 ++ ror eax,7 ++ add edx,ebp ++ add ecx,DWORD[56+rsp] ++ pslld xmm3,2 ++ xor esi,eax ++ mov edi,edx ++ psrld xmm8,30 ++ rol edx,5 ++ add ecx,esi ++ xor edi,eax ++ ror ebp,7 ++ por xmm3,xmm8 ++ add ecx,edx ++ add ebx,DWORD[60+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ rol ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ ror edx,7 ++ add ebx,ecx ++ add eax,DWORD[rsp] ++ xor esi,edx ++ mov edi,ebx ++ rol ebx,5 ++ paddd xmm10,xmm3 ++ add eax,esi ++ xor edi,edx ++ movdqa XMMWORD[48+rsp],xmm10 ++ ror ecx,7 ++ add eax,ebx ++ add ebp,DWORD[4+rsp] ++ xor edi,ecx ++ mov esi,eax ++ rol eax,5 ++ add ebp,edi ++ xor esi,ecx ++ ror ebx,7 ++ add ebp,eax ++ add edx,DWORD[8+rsp] ++ xor esi,ebx ++ mov edi,ebp ++ rol ebp,5 ++ add edx,esi ++ xor edi,ebx ++ ror eax,7 ++ add edx,ebp ++ add ecx,DWORD[12+rsp] ++ xor edi,eax ++ mov esi,edx ++ rol edx,5 ++ add ecx,edi ++ xor esi,eax ++ ror ebp,7 ++ add ecx,edx ++ cmp r9,r10 ++ je NEAR $L$done_ssse3 ++ movdqa xmm6,XMMWORD[64+r11] ++ movdqa xmm9,XMMWORD[((-64))+r11] ++ movdqu xmm0,XMMWORD[r9] ++ movdqu xmm1,XMMWORD[16+r9] ++ movdqu xmm2,XMMWORD[32+r9] ++ movdqu xmm3,XMMWORD[48+r9] ++DB 102,15,56,0,198 ++ add r9,64 ++ add ebx,DWORD[16+rsp] ++ xor esi,ebp ++ mov edi,ecx ++DB 102,15,56,0,206 ++ rol ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ ror edx,7 ++ paddd xmm0,xmm9 ++ add ebx,ecx ++ add eax,DWORD[20+rsp] ++ xor edi,edx ++ mov esi,ebx ++ movdqa XMMWORD[rsp],xmm0 ++ rol ebx,5 ++ add eax,edi ++ xor esi,edx ++ ror ecx,7 ++ psubd xmm0,xmm9 ++ add eax,ebx ++ add ebp,DWORD[24+rsp] ++ xor esi,ecx ++ mov edi,eax ++ rol eax,5 ++ add ebp,esi ++ xor edi,ecx ++ ror ebx,7 ++ add ebp,eax ++ add edx,DWORD[28+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ add edx,edi ++ xor esi,ebx ++ ror eax,7 ++ add edx,ebp ++ add ecx,DWORD[32+rsp] ++ xor esi,eax ++ mov edi,edx ++DB 102,15,56,0,214 ++ rol edx,5 ++ add ecx,esi ++ xor edi,eax ++ ror ebp,7 ++ paddd xmm1,xmm9 ++ add ecx,edx ++ add ebx,DWORD[36+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ movdqa XMMWORD[16+rsp],xmm1 ++ rol ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ ror edx,7 ++ psubd xmm1,xmm9 ++ add ebx,ecx ++ add eax,DWORD[40+rsp] ++ xor esi,edx ++ mov edi,ebx ++ rol ebx,5 ++ add eax,esi ++ xor edi,edx ++ ror ecx,7 ++ add eax,ebx ++ add ebp,DWORD[44+rsp] ++ xor edi,ecx ++ mov esi,eax ++ rol eax,5 ++ add ebp,edi ++ xor esi,ecx ++ ror ebx,7 ++ add ebp,eax ++ add edx,DWORD[48+rsp] ++ xor esi,ebx ++ mov edi,ebp ++DB 102,15,56,0,222 ++ rol ebp,5 ++ add edx,esi ++ xor edi,ebx ++ ror eax,7 ++ paddd xmm2,xmm9 ++ add edx,ebp ++ add ecx,DWORD[52+rsp] ++ xor edi,eax ++ mov esi,edx ++ movdqa XMMWORD[32+rsp],xmm2 ++ rol edx,5 ++ add ecx,edi ++ xor esi,eax ++ ror ebp,7 ++ psubd xmm2,xmm9 ++ add ecx,edx ++ add ebx,DWORD[56+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ rol ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ ror edx,7 ++ add ebx,ecx ++ add eax,DWORD[60+rsp] ++ xor edi,edx ++ mov esi,ebx ++ rol ebx,5 ++ add eax,edi ++ ror ecx,7 ++ add eax,ebx ++ add eax,DWORD[r8] ++ add esi,DWORD[4+r8] ++ add ecx,DWORD[8+r8] ++ add edx,DWORD[12+r8] ++ mov DWORD[r8],eax ++ add ebp,DWORD[16+r8] ++ mov DWORD[4+r8],esi ++ mov ebx,esi ++ mov DWORD[8+r8],ecx ++ mov edi,ecx ++ mov DWORD[12+r8],edx ++ xor edi,edx ++ mov DWORD[16+r8],ebp ++ and esi,edi ++ jmp NEAR $L$oop_ssse3 ++ ++ALIGN 16 ++$L$done_ssse3: ++ add ebx,DWORD[16+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ rol ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ ror edx,7 ++ add ebx,ecx ++ add eax,DWORD[20+rsp] ++ xor edi,edx ++ mov esi,ebx ++ rol ebx,5 ++ add eax,edi ++ xor esi,edx ++ ror ecx,7 ++ add eax,ebx ++ add ebp,DWORD[24+rsp] ++ xor esi,ecx ++ mov edi,eax ++ rol eax,5 ++ add ebp,esi ++ xor edi,ecx ++ ror ebx,7 ++ add ebp,eax ++ add edx,DWORD[28+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ rol ebp,5 ++ add edx,edi ++ xor esi,ebx ++ ror eax,7 ++ add edx,ebp ++ add ecx,DWORD[32+rsp] ++ xor esi,eax ++ mov edi,edx ++ rol edx,5 ++ add ecx,esi ++ xor edi,eax ++ ror ebp,7 ++ add ecx,edx ++ add ebx,DWORD[36+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ rol ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ ror edx,7 ++ add ebx,ecx ++ add eax,DWORD[40+rsp] ++ xor esi,edx ++ mov edi,ebx ++ rol ebx,5 ++ add eax,esi ++ xor edi,edx ++ ror ecx,7 ++ add eax,ebx ++ add ebp,DWORD[44+rsp] ++ xor edi,ecx ++ mov esi,eax ++ rol eax,5 ++ add ebp,edi ++ xor esi,ecx ++ ror ebx,7 ++ add ebp,eax ++ add edx,DWORD[48+rsp] ++ xor esi,ebx ++ mov edi,ebp ++ rol ebp,5 ++ add edx,esi ++ xor edi,ebx ++ ror eax,7 ++ add edx,ebp ++ add ecx,DWORD[52+rsp] ++ xor edi,eax ++ mov esi,edx ++ rol edx,5 ++ add ecx,edi ++ xor esi,eax ++ ror ebp,7 ++ add ecx,edx ++ add ebx,DWORD[56+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ rol ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ ror edx,7 ++ add ebx,ecx ++ add eax,DWORD[60+rsp] ++ xor edi,edx ++ mov esi,ebx ++ rol ebx,5 ++ add eax,edi ++ ror ecx,7 ++ add eax,ebx ++ add eax,DWORD[r8] ++ add esi,DWORD[4+r8] ++ add ecx,DWORD[8+r8] ++ mov DWORD[r8],eax ++ add edx,DWORD[12+r8] ++ mov DWORD[4+r8],esi ++ add ebp,DWORD[16+r8] ++ mov DWORD[8+r8],ecx ++ mov DWORD[12+r8],edx ++ mov DWORD[16+r8],ebp ++ movaps xmm6,XMMWORD[((-40-96))+r14] ++ movaps xmm7,XMMWORD[((-40-80))+r14] ++ movaps xmm8,XMMWORD[((-40-64))+r14] ++ movaps xmm9,XMMWORD[((-40-48))+r14] ++ movaps xmm10,XMMWORD[((-40-32))+r14] ++ movaps xmm11,XMMWORD[((-40-16))+r14] ++ lea rsi,[r14] ++ mov r14,QWORD[((-40))+rsi] ++ mov r13,QWORD[((-32))+rsi] ++ mov r12,QWORD[((-24))+rsi] ++ mov rbp,QWORD[((-16))+rsi] ++ mov rbx,QWORD[((-8))+rsi] ++ lea rsp,[rsi] ++$L$epilogue_ssse3: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha1_block_data_order_ssse3: ++ ++ALIGN 16 ++sha1_block_data_order_avx: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha1_block_data_order_avx: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_avx_shortcut: ++ mov rax,rsp ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ lea rsp,[((-160))+rsp] ++ vzeroupper ++ vmovaps XMMWORD[(-40-96)+rax],xmm6 ++ vmovaps XMMWORD[(-40-80)+rax],xmm7 ++ vmovaps XMMWORD[(-40-64)+rax],xmm8 ++ vmovaps XMMWORD[(-40-48)+rax],xmm9 ++ vmovaps XMMWORD[(-40-32)+rax],xmm10 ++ vmovaps XMMWORD[(-40-16)+rax],xmm11 ++$L$prologue_avx: ++ mov r14,rax ++ and rsp,-64 ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rdx ++ ++ shl r10,6 ++ add r10,r9 ++ lea r11,[((K_XX_XX+64))] ++ ++ mov eax,DWORD[r8] ++ mov ebx,DWORD[4+r8] ++ mov ecx,DWORD[8+r8] ++ mov edx,DWORD[12+r8] ++ mov esi,ebx ++ mov ebp,DWORD[16+r8] ++ mov edi,ecx ++ xor edi,edx ++ and esi,edi ++ ++ vmovdqa xmm6,XMMWORD[64+r11] ++ vmovdqa xmm11,XMMWORD[((-64))+r11] ++ vmovdqu xmm0,XMMWORD[r9] ++ vmovdqu xmm1,XMMWORD[16+r9] ++ vmovdqu xmm2,XMMWORD[32+r9] ++ vmovdqu xmm3,XMMWORD[48+r9] ++ vpshufb xmm0,xmm0,xmm6 ++ add r9,64 ++ vpshufb xmm1,xmm1,xmm6 ++ vpshufb xmm2,xmm2,xmm6 ++ vpshufb xmm3,xmm3,xmm6 ++ vpaddd xmm4,xmm0,xmm11 ++ vpaddd xmm5,xmm1,xmm11 ++ vpaddd xmm6,xmm2,xmm11 ++ vmovdqa XMMWORD[rsp],xmm4 ++ vmovdqa XMMWORD[16+rsp],xmm5 ++ vmovdqa XMMWORD[32+rsp],xmm6 ++ jmp NEAR $L$oop_avx ++ALIGN 16 ++$L$oop_avx: ++ shrd ebx,ebx,2 ++ xor esi,edx ++ vpalignr xmm4,xmm1,xmm0,8 ++ mov edi,eax ++ add ebp,DWORD[rsp] ++ vpaddd xmm9,xmm11,xmm3 ++ xor ebx,ecx ++ shld eax,eax,5 ++ vpsrldq xmm8,xmm3,4 ++ add ebp,esi ++ and edi,ebx ++ vpxor xmm4,xmm4,xmm0 ++ xor ebx,ecx ++ add ebp,eax ++ vpxor xmm8,xmm8,xmm2 ++ shrd eax,eax,7 ++ xor edi,ecx ++ mov esi,ebp ++ add edx,DWORD[4+rsp] ++ vpxor xmm4,xmm4,xmm8 ++ xor eax,ebx ++ shld ebp,ebp,5 ++ vmovdqa XMMWORD[48+rsp],xmm9 ++ add edx,edi ++ and esi,eax ++ vpsrld xmm8,xmm4,31 ++ xor eax,ebx ++ add edx,ebp ++ shrd ebp,ebp,7 ++ xor esi,ebx ++ vpslldq xmm10,xmm4,12 ++ vpaddd xmm4,xmm4,xmm4 ++ mov edi,edx ++ add ecx,DWORD[8+rsp] ++ xor ebp,eax ++ shld edx,edx,5 ++ vpsrld xmm9,xmm10,30 ++ vpor xmm4,xmm4,xmm8 ++ add ecx,esi ++ and edi,ebp ++ xor ebp,eax ++ add ecx,edx ++ vpslld xmm10,xmm10,2 ++ vpxor xmm4,xmm4,xmm9 ++ shrd edx,edx,7 ++ xor edi,eax ++ mov esi,ecx ++ add ebx,DWORD[12+rsp] ++ vpxor xmm4,xmm4,xmm10 ++ xor edx,ebp ++ shld ecx,ecx,5 ++ add ebx,edi ++ and esi,edx ++ xor edx,ebp ++ add ebx,ecx ++ shrd ecx,ecx,7 ++ xor esi,ebp ++ vpalignr xmm5,xmm2,xmm1,8 ++ mov edi,ebx ++ add eax,DWORD[16+rsp] ++ vpaddd xmm9,xmm11,xmm4 ++ xor ecx,edx ++ shld ebx,ebx,5 ++ vpsrldq xmm8,xmm4,4 ++ add eax,esi ++ and edi,ecx ++ vpxor xmm5,xmm5,xmm1 ++ xor ecx,edx ++ add eax,ebx ++ vpxor xmm8,xmm8,xmm3 ++ shrd ebx,ebx,7 ++ xor edi,edx ++ mov esi,eax ++ add ebp,DWORD[20+rsp] ++ vpxor xmm5,xmm5,xmm8 ++ xor ebx,ecx ++ shld eax,eax,5 ++ vmovdqa XMMWORD[rsp],xmm9 ++ add ebp,edi ++ and esi,ebx ++ vpsrld xmm8,xmm5,31 ++ xor ebx,ecx ++ add ebp,eax ++ shrd eax,eax,7 ++ xor esi,ecx ++ vpslldq xmm10,xmm5,12 ++ vpaddd xmm5,xmm5,xmm5 ++ mov edi,ebp ++ add edx,DWORD[24+rsp] ++ xor eax,ebx ++ shld ebp,ebp,5 ++ vpsrld xmm9,xmm10,30 ++ vpor xmm5,xmm5,xmm8 ++ add edx,esi ++ and edi,eax ++ xor eax,ebx ++ add edx,ebp ++ vpslld xmm10,xmm10,2 ++ vpxor xmm5,xmm5,xmm9 ++ shrd ebp,ebp,7 ++ xor edi,ebx ++ mov esi,edx ++ add ecx,DWORD[28+rsp] ++ vpxor xmm5,xmm5,xmm10 ++ xor ebp,eax ++ shld edx,edx,5 ++ vmovdqa xmm11,XMMWORD[((-32))+r11] ++ add ecx,edi ++ and esi,ebp ++ xor ebp,eax ++ add ecx,edx ++ shrd edx,edx,7 ++ xor esi,eax ++ vpalignr xmm6,xmm3,xmm2,8 ++ mov edi,ecx ++ add ebx,DWORD[32+rsp] ++ vpaddd xmm9,xmm11,xmm5 ++ xor edx,ebp ++ shld ecx,ecx,5 ++ vpsrldq xmm8,xmm5,4 ++ add ebx,esi ++ and edi,edx ++ vpxor xmm6,xmm6,xmm2 ++ xor edx,ebp ++ add ebx,ecx ++ vpxor xmm8,xmm8,xmm4 ++ shrd ecx,ecx,7 ++ xor edi,ebp ++ mov esi,ebx ++ add eax,DWORD[36+rsp] ++ vpxor xmm6,xmm6,xmm8 ++ xor ecx,edx ++ shld ebx,ebx,5 ++ vmovdqa XMMWORD[16+rsp],xmm9 ++ add eax,edi ++ and esi,ecx ++ vpsrld xmm8,xmm6,31 ++ xor ecx,edx ++ add eax,ebx ++ shrd ebx,ebx,7 ++ xor esi,edx ++ vpslldq xmm10,xmm6,12 ++ vpaddd xmm6,xmm6,xmm6 ++ mov edi,eax ++ add ebp,DWORD[40+rsp] ++ xor ebx,ecx ++ shld eax,eax,5 ++ vpsrld xmm9,xmm10,30 ++ vpor xmm6,xmm6,xmm8 ++ add ebp,esi ++ and edi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ vpslld xmm10,xmm10,2 ++ vpxor xmm6,xmm6,xmm9 ++ shrd eax,eax,7 ++ xor edi,ecx ++ mov esi,ebp ++ add edx,DWORD[44+rsp] ++ vpxor xmm6,xmm6,xmm10 ++ xor eax,ebx ++ shld ebp,ebp,5 ++ add edx,edi ++ and esi,eax ++ xor eax,ebx ++ add edx,ebp ++ shrd ebp,ebp,7 ++ xor esi,ebx ++ vpalignr xmm7,xmm4,xmm3,8 ++ mov edi,edx ++ add ecx,DWORD[48+rsp] ++ vpaddd xmm9,xmm11,xmm6 ++ xor ebp,eax ++ shld edx,edx,5 ++ vpsrldq xmm8,xmm6,4 ++ add ecx,esi ++ and edi,ebp ++ vpxor xmm7,xmm7,xmm3 ++ xor ebp,eax ++ add ecx,edx ++ vpxor xmm8,xmm8,xmm5 ++ shrd edx,edx,7 ++ xor edi,eax ++ mov esi,ecx ++ add ebx,DWORD[52+rsp] ++ vpxor xmm7,xmm7,xmm8 ++ xor edx,ebp ++ shld ecx,ecx,5 ++ vmovdqa XMMWORD[32+rsp],xmm9 ++ add ebx,edi ++ and esi,edx ++ vpsrld xmm8,xmm7,31 ++ xor edx,ebp ++ add ebx,ecx ++ shrd ecx,ecx,7 ++ xor esi,ebp ++ vpslldq xmm10,xmm7,12 ++ vpaddd xmm7,xmm7,xmm7 ++ mov edi,ebx ++ add eax,DWORD[56+rsp] ++ xor ecx,edx ++ shld ebx,ebx,5 ++ vpsrld xmm9,xmm10,30 ++ vpor xmm7,xmm7,xmm8 ++ add eax,esi ++ and edi,ecx ++ xor ecx,edx ++ add eax,ebx ++ vpslld xmm10,xmm10,2 ++ vpxor xmm7,xmm7,xmm9 ++ shrd ebx,ebx,7 ++ xor edi,edx ++ mov esi,eax ++ add ebp,DWORD[60+rsp] ++ vpxor xmm7,xmm7,xmm10 ++ xor ebx,ecx ++ shld eax,eax,5 ++ add ebp,edi ++ and esi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ vpalignr xmm8,xmm7,xmm6,8 ++ vpxor xmm0,xmm0,xmm4 ++ shrd eax,eax,7 ++ xor esi,ecx ++ mov edi,ebp ++ add edx,DWORD[rsp] ++ vpxor xmm0,xmm0,xmm1 ++ xor eax,ebx ++ shld ebp,ebp,5 ++ vpaddd xmm9,xmm11,xmm7 ++ add edx,esi ++ and edi,eax ++ vpxor xmm0,xmm0,xmm8 ++ xor eax,ebx ++ add edx,ebp ++ shrd ebp,ebp,7 ++ xor edi,ebx ++ vpsrld xmm8,xmm0,30 ++ vmovdqa XMMWORD[48+rsp],xmm9 ++ mov esi,edx ++ add ecx,DWORD[4+rsp] ++ xor ebp,eax ++ shld edx,edx,5 ++ vpslld xmm0,xmm0,2 ++ add ecx,edi ++ and esi,ebp ++ xor ebp,eax ++ add ecx,edx ++ shrd edx,edx,7 ++ xor esi,eax ++ mov edi,ecx ++ add ebx,DWORD[8+rsp] ++ vpor xmm0,xmm0,xmm8 ++ xor edx,ebp ++ shld ecx,ecx,5 ++ add ebx,esi ++ and edi,edx ++ xor edx,ebp ++ add ebx,ecx ++ add eax,DWORD[12+rsp] ++ xor edi,ebp ++ mov esi,ebx ++ shld ebx,ebx,5 ++ add eax,edi ++ xor esi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ vpalignr xmm8,xmm0,xmm7,8 ++ vpxor xmm1,xmm1,xmm5 ++ add ebp,DWORD[16+rsp] ++ xor esi,ecx ++ mov edi,eax ++ shld eax,eax,5 ++ vpxor xmm1,xmm1,xmm2 ++ add ebp,esi ++ xor edi,ecx ++ vpaddd xmm9,xmm11,xmm0 ++ shrd ebx,ebx,7 ++ add ebp,eax ++ vpxor xmm1,xmm1,xmm8 ++ add edx,DWORD[20+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ shld ebp,ebp,5 ++ vpsrld xmm8,xmm1,30 ++ vmovdqa XMMWORD[rsp],xmm9 ++ add edx,edi ++ xor esi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ vpslld xmm1,xmm1,2 ++ add ecx,DWORD[24+rsp] ++ xor esi,eax ++ mov edi,edx ++ shld edx,edx,5 ++ add ecx,esi ++ xor edi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ vpor xmm1,xmm1,xmm8 ++ add ebx,DWORD[28+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ shld ecx,ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ vpalignr xmm8,xmm1,xmm0,8 ++ vpxor xmm2,xmm2,xmm6 ++ add eax,DWORD[32+rsp] ++ xor esi,edx ++ mov edi,ebx ++ shld ebx,ebx,5 ++ vpxor xmm2,xmm2,xmm3 ++ add eax,esi ++ xor edi,edx ++ vpaddd xmm9,xmm11,xmm1 ++ vmovdqa xmm11,XMMWORD[r11] ++ shrd ecx,ecx,7 ++ add eax,ebx ++ vpxor xmm2,xmm2,xmm8 ++ add ebp,DWORD[36+rsp] ++ xor edi,ecx ++ mov esi,eax ++ shld eax,eax,5 ++ vpsrld xmm8,xmm2,30 ++ vmovdqa XMMWORD[16+rsp],xmm9 ++ add ebp,edi ++ xor esi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ vpslld xmm2,xmm2,2 ++ add edx,DWORD[40+rsp] ++ xor esi,ebx ++ mov edi,ebp ++ shld ebp,ebp,5 ++ add edx,esi ++ xor edi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ vpor xmm2,xmm2,xmm8 ++ add ecx,DWORD[44+rsp] ++ xor edi,eax ++ mov esi,edx ++ shld edx,edx,5 ++ add ecx,edi ++ xor esi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ vpalignr xmm8,xmm2,xmm1,8 ++ vpxor xmm3,xmm3,xmm7 ++ add ebx,DWORD[48+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ shld ecx,ecx,5 ++ vpxor xmm3,xmm3,xmm4 ++ add ebx,esi ++ xor edi,ebp ++ vpaddd xmm9,xmm11,xmm2 ++ shrd edx,edx,7 ++ add ebx,ecx ++ vpxor xmm3,xmm3,xmm8 ++ add eax,DWORD[52+rsp] ++ xor edi,edx ++ mov esi,ebx ++ shld ebx,ebx,5 ++ vpsrld xmm8,xmm3,30 ++ vmovdqa XMMWORD[32+rsp],xmm9 ++ add eax,edi ++ xor esi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ vpslld xmm3,xmm3,2 ++ add ebp,DWORD[56+rsp] ++ xor esi,ecx ++ mov edi,eax ++ shld eax,eax,5 ++ add ebp,esi ++ xor edi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ vpor xmm3,xmm3,xmm8 ++ add edx,DWORD[60+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ shld ebp,ebp,5 ++ add edx,edi ++ xor esi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ vpalignr xmm8,xmm3,xmm2,8 ++ vpxor xmm4,xmm4,xmm0 ++ add ecx,DWORD[rsp] ++ xor esi,eax ++ mov edi,edx ++ shld edx,edx,5 ++ vpxor xmm4,xmm4,xmm5 ++ add ecx,esi ++ xor edi,eax ++ vpaddd xmm9,xmm11,xmm3 ++ shrd ebp,ebp,7 ++ add ecx,edx ++ vpxor xmm4,xmm4,xmm8 ++ add ebx,DWORD[4+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ shld ecx,ecx,5 ++ vpsrld xmm8,xmm4,30 ++ vmovdqa XMMWORD[48+rsp],xmm9 ++ add ebx,edi ++ xor esi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ vpslld xmm4,xmm4,2 ++ add eax,DWORD[8+rsp] ++ xor esi,edx ++ mov edi,ebx ++ shld ebx,ebx,5 ++ add eax,esi ++ xor edi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ vpor xmm4,xmm4,xmm8 ++ add ebp,DWORD[12+rsp] ++ xor edi,ecx ++ mov esi,eax ++ shld eax,eax,5 ++ add ebp,edi ++ xor esi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ vpalignr xmm8,xmm4,xmm3,8 ++ vpxor xmm5,xmm5,xmm1 ++ add edx,DWORD[16+rsp] ++ xor esi,ebx ++ mov edi,ebp ++ shld ebp,ebp,5 ++ vpxor xmm5,xmm5,xmm6 ++ add edx,esi ++ xor edi,ebx ++ vpaddd xmm9,xmm11,xmm4 ++ shrd eax,eax,7 ++ add edx,ebp ++ vpxor xmm5,xmm5,xmm8 ++ add ecx,DWORD[20+rsp] ++ xor edi,eax ++ mov esi,edx ++ shld edx,edx,5 ++ vpsrld xmm8,xmm5,30 ++ vmovdqa XMMWORD[rsp],xmm9 ++ add ecx,edi ++ xor esi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ vpslld xmm5,xmm5,2 ++ add ebx,DWORD[24+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ shld ecx,ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ vpor xmm5,xmm5,xmm8 ++ add eax,DWORD[28+rsp] ++ shrd ecx,ecx,7 ++ mov esi,ebx ++ xor edi,edx ++ shld ebx,ebx,5 ++ add eax,edi ++ xor esi,ecx ++ xor ecx,edx ++ add eax,ebx ++ vpalignr xmm8,xmm5,xmm4,8 ++ vpxor xmm6,xmm6,xmm2 ++ add ebp,DWORD[32+rsp] ++ and esi,ecx ++ xor ecx,edx ++ shrd ebx,ebx,7 ++ vpxor xmm6,xmm6,xmm7 ++ mov edi,eax ++ xor esi,ecx ++ vpaddd xmm9,xmm11,xmm5 ++ shld eax,eax,5 ++ add ebp,esi ++ vpxor xmm6,xmm6,xmm8 ++ xor edi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ add edx,DWORD[36+rsp] ++ vpsrld xmm8,xmm6,30 ++ vmovdqa XMMWORD[16+rsp],xmm9 ++ and edi,ebx ++ xor ebx,ecx ++ shrd eax,eax,7 ++ mov esi,ebp ++ vpslld xmm6,xmm6,2 ++ xor edi,ebx ++ shld ebp,ebp,5 ++ add edx,edi ++ xor esi,eax ++ xor eax,ebx ++ add edx,ebp ++ add ecx,DWORD[40+rsp] ++ and esi,eax ++ vpor xmm6,xmm6,xmm8 ++ xor eax,ebx ++ shrd ebp,ebp,7 ++ mov edi,edx ++ xor esi,eax ++ shld edx,edx,5 ++ add ecx,esi ++ xor edi,ebp ++ xor ebp,eax ++ add ecx,edx ++ add ebx,DWORD[44+rsp] ++ and edi,ebp ++ xor ebp,eax ++ shrd edx,edx,7 ++ mov esi,ecx ++ xor edi,ebp ++ shld ecx,ecx,5 ++ add ebx,edi ++ xor esi,edx ++ xor edx,ebp ++ add ebx,ecx ++ vpalignr xmm8,xmm6,xmm5,8 ++ vpxor xmm7,xmm7,xmm3 ++ add eax,DWORD[48+rsp] ++ and esi,edx ++ xor edx,ebp ++ shrd ecx,ecx,7 ++ vpxor xmm7,xmm7,xmm0 ++ mov edi,ebx ++ xor esi,edx ++ vpaddd xmm9,xmm11,xmm6 ++ vmovdqa xmm11,XMMWORD[32+r11] ++ shld ebx,ebx,5 ++ add eax,esi ++ vpxor xmm7,xmm7,xmm8 ++ xor edi,ecx ++ xor ecx,edx ++ add eax,ebx ++ add ebp,DWORD[52+rsp] ++ vpsrld xmm8,xmm7,30 ++ vmovdqa XMMWORD[32+rsp],xmm9 ++ and edi,ecx ++ xor ecx,edx ++ shrd ebx,ebx,7 ++ mov esi,eax ++ vpslld xmm7,xmm7,2 ++ xor edi,ecx ++ shld eax,eax,5 ++ add ebp,edi ++ xor esi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ add edx,DWORD[56+rsp] ++ and esi,ebx ++ vpor xmm7,xmm7,xmm8 ++ xor ebx,ecx ++ shrd eax,eax,7 ++ mov edi,ebp ++ xor esi,ebx ++ shld ebp,ebp,5 ++ add edx,esi ++ xor edi,eax ++ xor eax,ebx ++ add edx,ebp ++ add ecx,DWORD[60+rsp] ++ and edi,eax ++ xor eax,ebx ++ shrd ebp,ebp,7 ++ mov esi,edx ++ xor edi,eax ++ shld edx,edx,5 ++ add ecx,edi ++ xor esi,ebp ++ xor ebp,eax ++ add ecx,edx ++ vpalignr xmm8,xmm7,xmm6,8 ++ vpxor xmm0,xmm0,xmm4 ++ add ebx,DWORD[rsp] ++ and esi,ebp ++ xor ebp,eax ++ shrd edx,edx,7 ++ vpxor xmm0,xmm0,xmm1 ++ mov edi,ecx ++ xor esi,ebp ++ vpaddd xmm9,xmm11,xmm7 ++ shld ecx,ecx,5 ++ add ebx,esi ++ vpxor xmm0,xmm0,xmm8 ++ xor edi,edx ++ xor edx,ebp ++ add ebx,ecx ++ add eax,DWORD[4+rsp] ++ vpsrld xmm8,xmm0,30 ++ vmovdqa XMMWORD[48+rsp],xmm9 ++ and edi,edx ++ xor edx,ebp ++ shrd ecx,ecx,7 ++ mov esi,ebx ++ vpslld xmm0,xmm0,2 ++ xor edi,edx ++ shld ebx,ebx,5 ++ add eax,edi ++ xor esi,ecx ++ xor ecx,edx ++ add eax,ebx ++ add ebp,DWORD[8+rsp] ++ and esi,ecx ++ vpor xmm0,xmm0,xmm8 ++ xor ecx,edx ++ shrd ebx,ebx,7 ++ mov edi,eax ++ xor esi,ecx ++ shld eax,eax,5 ++ add ebp,esi ++ xor edi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ add edx,DWORD[12+rsp] ++ and edi,ebx ++ xor ebx,ecx ++ shrd eax,eax,7 ++ mov esi,ebp ++ xor edi,ebx ++ shld ebp,ebp,5 ++ add edx,edi ++ xor esi,eax ++ xor eax,ebx ++ add edx,ebp ++ vpalignr xmm8,xmm0,xmm7,8 ++ vpxor xmm1,xmm1,xmm5 ++ add ecx,DWORD[16+rsp] ++ and esi,eax ++ xor eax,ebx ++ shrd ebp,ebp,7 ++ vpxor xmm1,xmm1,xmm2 ++ mov edi,edx ++ xor esi,eax ++ vpaddd xmm9,xmm11,xmm0 ++ shld edx,edx,5 ++ add ecx,esi ++ vpxor xmm1,xmm1,xmm8 ++ xor edi,ebp ++ xor ebp,eax ++ add ecx,edx ++ add ebx,DWORD[20+rsp] ++ vpsrld xmm8,xmm1,30 ++ vmovdqa XMMWORD[rsp],xmm9 ++ and edi,ebp ++ xor ebp,eax ++ shrd edx,edx,7 ++ mov esi,ecx ++ vpslld xmm1,xmm1,2 ++ xor edi,ebp ++ shld ecx,ecx,5 ++ add ebx,edi ++ xor esi,edx ++ xor edx,ebp ++ add ebx,ecx ++ add eax,DWORD[24+rsp] ++ and esi,edx ++ vpor xmm1,xmm1,xmm8 ++ xor edx,ebp ++ shrd ecx,ecx,7 ++ mov edi,ebx ++ xor esi,edx ++ shld ebx,ebx,5 ++ add eax,esi ++ xor edi,ecx ++ xor ecx,edx ++ add eax,ebx ++ add ebp,DWORD[28+rsp] ++ and edi,ecx ++ xor ecx,edx ++ shrd ebx,ebx,7 ++ mov esi,eax ++ xor edi,ecx ++ shld eax,eax,5 ++ add ebp,edi ++ xor esi,ebx ++ xor ebx,ecx ++ add ebp,eax ++ vpalignr xmm8,xmm1,xmm0,8 ++ vpxor xmm2,xmm2,xmm6 ++ add edx,DWORD[32+rsp] ++ and esi,ebx ++ xor ebx,ecx ++ shrd eax,eax,7 ++ vpxor xmm2,xmm2,xmm3 ++ mov edi,ebp ++ xor esi,ebx ++ vpaddd xmm9,xmm11,xmm1 ++ shld ebp,ebp,5 ++ add edx,esi ++ vpxor xmm2,xmm2,xmm8 ++ xor edi,eax ++ xor eax,ebx ++ add edx,ebp ++ add ecx,DWORD[36+rsp] ++ vpsrld xmm8,xmm2,30 ++ vmovdqa XMMWORD[16+rsp],xmm9 ++ and edi,eax ++ xor eax,ebx ++ shrd ebp,ebp,7 ++ mov esi,edx ++ vpslld xmm2,xmm2,2 ++ xor edi,eax ++ shld edx,edx,5 ++ add ecx,edi ++ xor esi,ebp ++ xor ebp,eax ++ add ecx,edx ++ add ebx,DWORD[40+rsp] ++ and esi,ebp ++ vpor xmm2,xmm2,xmm8 ++ xor ebp,eax ++ shrd edx,edx,7 ++ mov edi,ecx ++ xor esi,ebp ++ shld ecx,ecx,5 ++ add ebx,esi ++ xor edi,edx ++ xor edx,ebp ++ add ebx,ecx ++ add eax,DWORD[44+rsp] ++ and edi,edx ++ xor edx,ebp ++ shrd ecx,ecx,7 ++ mov esi,ebx ++ xor edi,edx ++ shld ebx,ebx,5 ++ add eax,edi ++ xor esi,edx ++ add eax,ebx ++ vpalignr xmm8,xmm2,xmm1,8 ++ vpxor xmm3,xmm3,xmm7 ++ add ebp,DWORD[48+rsp] ++ xor esi,ecx ++ mov edi,eax ++ shld eax,eax,5 ++ vpxor xmm3,xmm3,xmm4 ++ add ebp,esi ++ xor edi,ecx ++ vpaddd xmm9,xmm11,xmm2 ++ shrd ebx,ebx,7 ++ add ebp,eax ++ vpxor xmm3,xmm3,xmm8 ++ add edx,DWORD[52+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ shld ebp,ebp,5 ++ vpsrld xmm8,xmm3,30 ++ vmovdqa XMMWORD[32+rsp],xmm9 ++ add edx,edi ++ xor esi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ vpslld xmm3,xmm3,2 ++ add ecx,DWORD[56+rsp] ++ xor esi,eax ++ mov edi,edx ++ shld edx,edx,5 ++ add ecx,esi ++ xor edi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ vpor xmm3,xmm3,xmm8 ++ add ebx,DWORD[60+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ shld ecx,ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ add eax,DWORD[rsp] ++ vpaddd xmm9,xmm11,xmm3 ++ xor esi,edx ++ mov edi,ebx ++ shld ebx,ebx,5 ++ add eax,esi ++ vmovdqa XMMWORD[48+rsp],xmm9 ++ xor edi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ add ebp,DWORD[4+rsp] ++ xor edi,ecx ++ mov esi,eax ++ shld eax,eax,5 ++ add ebp,edi ++ xor esi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ add edx,DWORD[8+rsp] ++ xor esi,ebx ++ mov edi,ebp ++ shld ebp,ebp,5 ++ add edx,esi ++ xor edi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ add ecx,DWORD[12+rsp] ++ xor edi,eax ++ mov esi,edx ++ shld edx,edx,5 ++ add ecx,edi ++ xor esi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ cmp r9,r10 ++ je NEAR $L$done_avx ++ vmovdqa xmm6,XMMWORD[64+r11] ++ vmovdqa xmm11,XMMWORD[((-64))+r11] ++ vmovdqu xmm0,XMMWORD[r9] ++ vmovdqu xmm1,XMMWORD[16+r9] ++ vmovdqu xmm2,XMMWORD[32+r9] ++ vmovdqu xmm3,XMMWORD[48+r9] ++ vpshufb xmm0,xmm0,xmm6 ++ add r9,64 ++ add ebx,DWORD[16+rsp] ++ xor esi,ebp ++ vpshufb xmm1,xmm1,xmm6 ++ mov edi,ecx ++ shld ecx,ecx,5 ++ vpaddd xmm4,xmm0,xmm11 ++ add ebx,esi ++ xor edi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ vmovdqa XMMWORD[rsp],xmm4 ++ add eax,DWORD[20+rsp] ++ xor edi,edx ++ mov esi,ebx ++ shld ebx,ebx,5 ++ add eax,edi ++ xor esi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ add ebp,DWORD[24+rsp] ++ xor esi,ecx ++ mov edi,eax ++ shld eax,eax,5 ++ add ebp,esi ++ xor edi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ add edx,DWORD[28+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ shld ebp,ebp,5 ++ add edx,edi ++ xor esi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ add ecx,DWORD[32+rsp] ++ xor esi,eax ++ vpshufb xmm2,xmm2,xmm6 ++ mov edi,edx ++ shld edx,edx,5 ++ vpaddd xmm5,xmm1,xmm11 ++ add ecx,esi ++ xor edi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ vmovdqa XMMWORD[16+rsp],xmm5 ++ add ebx,DWORD[36+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ shld ecx,ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ add eax,DWORD[40+rsp] ++ xor esi,edx ++ mov edi,ebx ++ shld ebx,ebx,5 ++ add eax,esi ++ xor edi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ add ebp,DWORD[44+rsp] ++ xor edi,ecx ++ mov esi,eax ++ shld eax,eax,5 ++ add ebp,edi ++ xor esi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ add edx,DWORD[48+rsp] ++ xor esi,ebx ++ vpshufb xmm3,xmm3,xmm6 ++ mov edi,ebp ++ shld ebp,ebp,5 ++ vpaddd xmm6,xmm2,xmm11 ++ add edx,esi ++ xor edi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ vmovdqa XMMWORD[32+rsp],xmm6 ++ add ecx,DWORD[52+rsp] ++ xor edi,eax ++ mov esi,edx ++ shld edx,edx,5 ++ add ecx,edi ++ xor esi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ add ebx,DWORD[56+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ shld ecx,ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ add eax,DWORD[60+rsp] ++ xor edi,edx ++ mov esi,ebx ++ shld ebx,ebx,5 ++ add eax,edi ++ shrd ecx,ecx,7 ++ add eax,ebx ++ add eax,DWORD[r8] ++ add esi,DWORD[4+r8] ++ add ecx,DWORD[8+r8] ++ add edx,DWORD[12+r8] ++ mov DWORD[r8],eax ++ add ebp,DWORD[16+r8] ++ mov DWORD[4+r8],esi ++ mov ebx,esi ++ mov DWORD[8+r8],ecx ++ mov edi,ecx ++ mov DWORD[12+r8],edx ++ xor edi,edx ++ mov DWORD[16+r8],ebp ++ and esi,edi ++ jmp NEAR $L$oop_avx ++ ++ALIGN 16 ++$L$done_avx: ++ add ebx,DWORD[16+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ shld ecx,ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ add eax,DWORD[20+rsp] ++ xor edi,edx ++ mov esi,ebx ++ shld ebx,ebx,5 ++ add eax,edi ++ xor esi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ add ebp,DWORD[24+rsp] ++ xor esi,ecx ++ mov edi,eax ++ shld eax,eax,5 ++ add ebp,esi ++ xor edi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ add edx,DWORD[28+rsp] ++ xor edi,ebx ++ mov esi,ebp ++ shld ebp,ebp,5 ++ add edx,edi ++ xor esi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ add ecx,DWORD[32+rsp] ++ xor esi,eax ++ mov edi,edx ++ shld edx,edx,5 ++ add ecx,esi ++ xor edi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ add ebx,DWORD[36+rsp] ++ xor edi,ebp ++ mov esi,ecx ++ shld ecx,ecx,5 ++ add ebx,edi ++ xor esi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ add eax,DWORD[40+rsp] ++ xor esi,edx ++ mov edi,ebx ++ shld ebx,ebx,5 ++ add eax,esi ++ xor edi,edx ++ shrd ecx,ecx,7 ++ add eax,ebx ++ add ebp,DWORD[44+rsp] ++ xor edi,ecx ++ mov esi,eax ++ shld eax,eax,5 ++ add ebp,edi ++ xor esi,ecx ++ shrd ebx,ebx,7 ++ add ebp,eax ++ add edx,DWORD[48+rsp] ++ xor esi,ebx ++ mov edi,ebp ++ shld ebp,ebp,5 ++ add edx,esi ++ xor edi,ebx ++ shrd eax,eax,7 ++ add edx,ebp ++ add ecx,DWORD[52+rsp] ++ xor edi,eax ++ mov esi,edx ++ shld edx,edx,5 ++ add ecx,edi ++ xor esi,eax ++ shrd ebp,ebp,7 ++ add ecx,edx ++ add ebx,DWORD[56+rsp] ++ xor esi,ebp ++ mov edi,ecx ++ shld ecx,ecx,5 ++ add ebx,esi ++ xor edi,ebp ++ shrd edx,edx,7 ++ add ebx,ecx ++ add eax,DWORD[60+rsp] ++ xor edi,edx ++ mov esi,ebx ++ shld ebx,ebx,5 ++ add eax,edi ++ shrd ecx,ecx,7 ++ add eax,ebx ++ vzeroupper ++ ++ add eax,DWORD[r8] ++ add esi,DWORD[4+r8] ++ add ecx,DWORD[8+r8] ++ mov DWORD[r8],eax ++ add edx,DWORD[12+r8] ++ mov DWORD[4+r8],esi ++ add ebp,DWORD[16+r8] ++ mov DWORD[8+r8],ecx ++ mov DWORD[12+r8],edx ++ mov DWORD[16+r8],ebp ++ movaps xmm6,XMMWORD[((-40-96))+r14] ++ movaps xmm7,XMMWORD[((-40-80))+r14] ++ movaps xmm8,XMMWORD[((-40-64))+r14] ++ movaps xmm9,XMMWORD[((-40-48))+r14] ++ movaps xmm10,XMMWORD[((-40-32))+r14] ++ movaps xmm11,XMMWORD[((-40-16))+r14] ++ lea rsi,[r14] ++ mov r14,QWORD[((-40))+rsi] ++ mov r13,QWORD[((-32))+rsi] ++ mov r12,QWORD[((-24))+rsi] ++ mov rbp,QWORD[((-16))+rsi] ++ mov rbx,QWORD[((-8))+rsi] ++ lea rsp,[rsi] ++$L$epilogue_avx: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha1_block_data_order_avx: ++ ++ALIGN 16 ++sha1_block_data_order_avx2: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha1_block_data_order_avx2: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_avx2_shortcut: ++ mov rax,rsp ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ vzeroupper ++ lea rsp,[((-96))+rsp] ++ vmovaps XMMWORD[(-40-96)+rax],xmm6 ++ vmovaps XMMWORD[(-40-80)+rax],xmm7 ++ vmovaps XMMWORD[(-40-64)+rax],xmm8 ++ vmovaps XMMWORD[(-40-48)+rax],xmm9 ++ vmovaps XMMWORD[(-40-32)+rax],xmm10 ++ vmovaps XMMWORD[(-40-16)+rax],xmm11 ++$L$prologue_avx2: ++ mov r14,rax ++ mov r8,rdi ++ mov r9,rsi ++ mov r10,rdx ++ ++ lea rsp,[((-640))+rsp] ++ shl r10,6 ++ lea r13,[64+r9] ++ and rsp,-128 ++ add r10,r9 ++ lea r11,[((K_XX_XX+64))] ++ ++ mov eax,DWORD[r8] ++ cmp r13,r10 ++ cmovae r13,r9 ++ mov ebp,DWORD[4+r8] ++ mov ecx,DWORD[8+r8] ++ mov edx,DWORD[12+r8] ++ mov esi,DWORD[16+r8] ++ vmovdqu ymm6,YMMWORD[64+r11] ++ ++ vmovdqu xmm0,XMMWORD[r9] ++ vmovdqu xmm1,XMMWORD[16+r9] ++ vmovdqu xmm2,XMMWORD[32+r9] ++ vmovdqu xmm3,XMMWORD[48+r9] ++ lea r9,[64+r9] ++ vinserti128 ymm0,ymm0,XMMWORD[r13],1 ++ vinserti128 ymm1,ymm1,XMMWORD[16+r13],1 ++ vpshufb ymm0,ymm0,ymm6 ++ vinserti128 ymm2,ymm2,XMMWORD[32+r13],1 ++ vpshufb ymm1,ymm1,ymm6 ++ vinserti128 ymm3,ymm3,XMMWORD[48+r13],1 ++ vpshufb ymm2,ymm2,ymm6 ++ vmovdqu ymm11,YMMWORD[((-64))+r11] ++ vpshufb ymm3,ymm3,ymm6 ++ ++ vpaddd ymm4,ymm0,ymm11 ++ vpaddd ymm5,ymm1,ymm11 ++ vmovdqu YMMWORD[rsp],ymm4 ++ vpaddd ymm6,ymm2,ymm11 ++ vmovdqu YMMWORD[32+rsp],ymm5 ++ vpaddd ymm7,ymm3,ymm11 ++ vmovdqu YMMWORD[64+rsp],ymm6 ++ vmovdqu YMMWORD[96+rsp],ymm7 ++ vpalignr ymm4,ymm1,ymm0,8 ++ vpsrldq ymm8,ymm3,4 ++ vpxor ymm4,ymm4,ymm0 ++ vpxor ymm8,ymm8,ymm2 ++ vpxor ymm4,ymm4,ymm8 ++ vpsrld ymm8,ymm4,31 ++ vpslldq ymm10,ymm4,12 ++ vpaddd ymm4,ymm4,ymm4 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm4,ymm4,ymm8 ++ vpslld ymm10,ymm10,2 ++ vpxor ymm4,ymm4,ymm9 ++ vpxor ymm4,ymm4,ymm10 ++ vpaddd ymm9,ymm4,ymm11 ++ vmovdqu YMMWORD[128+rsp],ymm9 ++ vpalignr ymm5,ymm2,ymm1,8 ++ vpsrldq ymm8,ymm4,4 ++ vpxor ymm5,ymm5,ymm1 ++ vpxor ymm8,ymm8,ymm3 ++ vpxor ymm5,ymm5,ymm8 ++ vpsrld ymm8,ymm5,31 ++ vmovdqu ymm11,YMMWORD[((-32))+r11] ++ vpslldq ymm10,ymm5,12 ++ vpaddd ymm5,ymm5,ymm5 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm5,ymm5,ymm8 ++ vpslld ymm10,ymm10,2 ++ vpxor ymm5,ymm5,ymm9 ++ vpxor ymm5,ymm5,ymm10 ++ vpaddd ymm9,ymm5,ymm11 ++ vmovdqu YMMWORD[160+rsp],ymm9 ++ vpalignr ymm6,ymm3,ymm2,8 ++ vpsrldq ymm8,ymm5,4 ++ vpxor ymm6,ymm6,ymm2 ++ vpxor ymm8,ymm8,ymm4 ++ vpxor ymm6,ymm6,ymm8 ++ vpsrld ymm8,ymm6,31 ++ vpslldq ymm10,ymm6,12 ++ vpaddd ymm6,ymm6,ymm6 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm6,ymm6,ymm8 ++ vpslld ymm10,ymm10,2 ++ vpxor ymm6,ymm6,ymm9 ++ vpxor ymm6,ymm6,ymm10 ++ vpaddd ymm9,ymm6,ymm11 ++ vmovdqu YMMWORD[192+rsp],ymm9 ++ vpalignr ymm7,ymm4,ymm3,8 ++ vpsrldq ymm8,ymm6,4 ++ vpxor ymm7,ymm7,ymm3 ++ vpxor ymm8,ymm8,ymm5 ++ vpxor ymm7,ymm7,ymm8 ++ vpsrld ymm8,ymm7,31 ++ vpslldq ymm10,ymm7,12 ++ vpaddd ymm7,ymm7,ymm7 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm7,ymm7,ymm8 ++ vpslld ymm10,ymm10,2 ++ vpxor ymm7,ymm7,ymm9 ++ vpxor ymm7,ymm7,ymm10 ++ vpaddd ymm9,ymm7,ymm11 ++ vmovdqu YMMWORD[224+rsp],ymm9 ++ lea r13,[128+rsp] ++ jmp NEAR $L$oop_avx2 ++ALIGN 32 ++$L$oop_avx2: ++ rorx ebx,ebp,2 ++ andn edi,ebp,edx ++ and ebp,ecx ++ xor ebp,edi ++ jmp NEAR $L$align32_1 ++ALIGN 32 ++$L$align32_1: ++ vpalignr ymm8,ymm7,ymm6,8 ++ vpxor ymm0,ymm0,ymm4 ++ add esi,DWORD[((-128))+r13] ++ andn edi,eax,ecx ++ vpxor ymm0,ymm0,ymm1 ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ vpxor ymm0,ymm0,ymm8 ++ and eax,ebx ++ add esi,r12d ++ xor eax,edi ++ vpsrld ymm8,ymm0,30 ++ vpslld ymm0,ymm0,2 ++ add edx,DWORD[((-124))+r13] ++ andn edi,esi,ebx ++ add edx,eax ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ and esi,ebp ++ vpor ymm0,ymm0,ymm8 ++ add edx,r12d ++ xor esi,edi ++ add ecx,DWORD[((-120))+r13] ++ andn edi,edx,ebp ++ vpaddd ymm9,ymm0,ymm11 ++ add ecx,esi ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ and edx,eax ++ vmovdqu YMMWORD[256+rsp],ymm9 ++ add ecx,r12d ++ xor edx,edi ++ add ebx,DWORD[((-116))+r13] ++ andn edi,ecx,eax ++ add ebx,edx ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ and ecx,esi ++ add ebx,r12d ++ xor ecx,edi ++ add ebp,DWORD[((-96))+r13] ++ andn edi,ebx,esi ++ add ebp,ecx ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ and ebx,edx ++ add ebp,r12d ++ xor ebx,edi ++ vpalignr ymm8,ymm0,ymm7,8 ++ vpxor ymm1,ymm1,ymm5 ++ add eax,DWORD[((-92))+r13] ++ andn edi,ebp,edx ++ vpxor ymm1,ymm1,ymm2 ++ add eax,ebx ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ vpxor ymm1,ymm1,ymm8 ++ and ebp,ecx ++ add eax,r12d ++ xor ebp,edi ++ vpsrld ymm8,ymm1,30 ++ vpslld ymm1,ymm1,2 ++ add esi,DWORD[((-88))+r13] ++ andn edi,eax,ecx ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ vpor ymm1,ymm1,ymm8 ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[((-84))+r13] ++ andn edi,esi,ebx ++ vpaddd ymm9,ymm1,ymm11 ++ add edx,eax ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ and esi,ebp ++ vmovdqu YMMWORD[288+rsp],ymm9 ++ add edx,r12d ++ xor esi,edi ++ add ecx,DWORD[((-64))+r13] ++ andn edi,edx,ebp ++ add ecx,esi ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ and edx,eax ++ add ecx,r12d ++ xor edx,edi ++ add ebx,DWORD[((-60))+r13] ++ andn edi,ecx,eax ++ add ebx,edx ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ and ecx,esi ++ add ebx,r12d ++ xor ecx,edi ++ vpalignr ymm8,ymm1,ymm0,8 ++ vpxor ymm2,ymm2,ymm6 ++ add ebp,DWORD[((-56))+r13] ++ andn edi,ebx,esi ++ vpxor ymm2,ymm2,ymm3 ++ vmovdqu ymm11,YMMWORD[r11] ++ add ebp,ecx ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ vpxor ymm2,ymm2,ymm8 ++ and ebx,edx ++ add ebp,r12d ++ xor ebx,edi ++ vpsrld ymm8,ymm2,30 ++ vpslld ymm2,ymm2,2 ++ add eax,DWORD[((-52))+r13] ++ andn edi,ebp,edx ++ add eax,ebx ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ and ebp,ecx ++ vpor ymm2,ymm2,ymm8 ++ add eax,r12d ++ xor ebp,edi ++ add esi,DWORD[((-32))+r13] ++ andn edi,eax,ecx ++ vpaddd ymm9,ymm2,ymm11 ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ vmovdqu YMMWORD[320+rsp],ymm9 ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[((-28))+r13] ++ andn edi,esi,ebx ++ add edx,eax ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ and esi,ebp ++ add edx,r12d ++ xor esi,edi ++ add ecx,DWORD[((-24))+r13] ++ andn edi,edx,ebp ++ add ecx,esi ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ and edx,eax ++ add ecx,r12d ++ xor edx,edi ++ vpalignr ymm8,ymm2,ymm1,8 ++ vpxor ymm3,ymm3,ymm7 ++ add ebx,DWORD[((-20))+r13] ++ andn edi,ecx,eax ++ vpxor ymm3,ymm3,ymm4 ++ add ebx,edx ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ vpxor ymm3,ymm3,ymm8 ++ and ecx,esi ++ add ebx,r12d ++ xor ecx,edi ++ vpsrld ymm8,ymm3,30 ++ vpslld ymm3,ymm3,2 ++ add ebp,DWORD[r13] ++ andn edi,ebx,esi ++ add ebp,ecx ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ and ebx,edx ++ vpor ymm3,ymm3,ymm8 ++ add ebp,r12d ++ xor ebx,edi ++ add eax,DWORD[4+r13] ++ andn edi,ebp,edx ++ vpaddd ymm9,ymm3,ymm11 ++ add eax,ebx ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ and ebp,ecx ++ vmovdqu YMMWORD[352+rsp],ymm9 ++ add eax,r12d ++ xor ebp,edi ++ add esi,DWORD[8+r13] ++ andn edi,eax,ecx ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[12+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ vpalignr ymm8,ymm3,ymm2,8 ++ vpxor ymm4,ymm4,ymm0 ++ add ecx,DWORD[32+r13] ++ lea ecx,[rsi*1+rcx] ++ vpxor ymm4,ymm4,ymm5 ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ vpxor ymm4,ymm4,ymm8 ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[36+r13] ++ vpsrld ymm8,ymm4,30 ++ vpslld ymm4,ymm4,2 ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ vpor ymm4,ymm4,ymm8 ++ add ebp,DWORD[40+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ vpaddd ymm9,ymm4,ymm11 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[44+r13] ++ vmovdqu YMMWORD[384+rsp],ymm9 ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[64+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ vpalignr ymm8,ymm4,ymm3,8 ++ vpxor ymm5,ymm5,ymm1 ++ add edx,DWORD[68+r13] ++ lea edx,[rax*1+rdx] ++ vpxor ymm5,ymm5,ymm6 ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ vpxor ymm5,ymm5,ymm8 ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[72+r13] ++ vpsrld ymm8,ymm5,30 ++ vpslld ymm5,ymm5,2 ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ vpor ymm5,ymm5,ymm8 ++ add ebx,DWORD[76+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ vpaddd ymm9,ymm5,ymm11 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[96+r13] ++ vmovdqu YMMWORD[416+rsp],ymm9 ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[100+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ vpalignr ymm8,ymm5,ymm4,8 ++ vpxor ymm6,ymm6,ymm2 ++ add esi,DWORD[104+r13] ++ lea esi,[rbp*1+rsi] ++ vpxor ymm6,ymm6,ymm7 ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ vpxor ymm6,ymm6,ymm8 ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[108+r13] ++ lea r13,[256+r13] ++ vpsrld ymm8,ymm6,30 ++ vpslld ymm6,ymm6,2 ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ vpor ymm6,ymm6,ymm8 ++ add ecx,DWORD[((-128))+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ vpaddd ymm9,ymm6,ymm11 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-124))+r13] ++ vmovdqu YMMWORD[448+rsp],ymm9 ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[((-120))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ vpalignr ymm8,ymm6,ymm5,8 ++ vpxor ymm7,ymm7,ymm3 ++ add eax,DWORD[((-116))+r13] ++ lea eax,[rbx*1+rax] ++ vpxor ymm7,ymm7,ymm0 ++ vmovdqu ymm11,YMMWORD[32+r11] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ vpxor ymm7,ymm7,ymm8 ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[((-96))+r13] ++ vpsrld ymm8,ymm7,30 ++ vpslld ymm7,ymm7,2 ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ vpor ymm7,ymm7,ymm8 ++ add edx,DWORD[((-92))+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ vpaddd ymm9,ymm7,ymm11 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[((-88))+r13] ++ vmovdqu YMMWORD[480+rsp],ymm9 ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-84))+r13] ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ and ecx,edi ++ jmp NEAR $L$align32_2 ++ALIGN 32 ++$L$align32_2: ++ vpalignr ymm8,ymm7,ymm6,8 ++ vpxor ymm0,ymm0,ymm4 ++ add ebp,DWORD[((-64))+r13] ++ xor ecx,esi ++ vpxor ymm0,ymm0,ymm1 ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ vpxor ymm0,ymm0,ymm8 ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ vpsrld ymm8,ymm0,30 ++ vpslld ymm0,ymm0,2 ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[((-60))+r13] ++ xor ebx,edx ++ mov edi,ecx ++ xor edi,edx ++ vpor ymm0,ymm0,ymm8 ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ vpaddd ymm9,ymm0,ymm11 ++ add eax,r12d ++ and ebp,edi ++ add esi,DWORD[((-56))+r13] ++ xor ebp,ecx ++ vmovdqu YMMWORD[512+rsp],ymm9 ++ mov edi,ebx ++ xor edi,ecx ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ and eax,edi ++ add edx,DWORD[((-52))+r13] ++ xor eax,ebx ++ mov edi,ebp ++ xor edi,ebx ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ and esi,edi ++ add ecx,DWORD[((-32))+r13] ++ xor esi,ebp ++ mov edi,eax ++ xor edi,ebp ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ and edx,edi ++ vpalignr ymm8,ymm0,ymm7,8 ++ vpxor ymm1,ymm1,ymm5 ++ add ebx,DWORD[((-28))+r13] ++ xor edx,eax ++ vpxor ymm1,ymm1,ymm2 ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ vpxor ymm1,ymm1,ymm8 ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ vpsrld ymm8,ymm1,30 ++ vpslld ymm1,ymm1,2 ++ add ebx,r12d ++ and ecx,edi ++ add ebp,DWORD[((-24))+r13] ++ xor ecx,esi ++ mov edi,edx ++ xor edi,esi ++ vpor ymm1,ymm1,ymm8 ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ vpaddd ymm9,ymm1,ymm11 ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[((-20))+r13] ++ xor ebx,edx ++ vmovdqu YMMWORD[544+rsp],ymm9 ++ mov edi,ecx ++ xor edi,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ and ebp,edi ++ add esi,DWORD[r13] ++ xor ebp,ecx ++ mov edi,ebx ++ xor edi,ecx ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ and eax,edi ++ add edx,DWORD[4+r13] ++ xor eax,ebx ++ mov edi,ebp ++ xor edi,ebx ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ and esi,edi ++ vpalignr ymm8,ymm1,ymm0,8 ++ vpxor ymm2,ymm2,ymm6 ++ add ecx,DWORD[8+r13] ++ xor esi,ebp ++ vpxor ymm2,ymm2,ymm3 ++ mov edi,eax ++ xor edi,ebp ++ lea ecx,[rsi*1+rcx] ++ vpxor ymm2,ymm2,ymm8 ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ vpsrld ymm8,ymm2,30 ++ vpslld ymm2,ymm2,2 ++ add ecx,r12d ++ and edx,edi ++ add ebx,DWORD[12+r13] ++ xor edx,eax ++ mov edi,esi ++ xor edi,eax ++ vpor ymm2,ymm2,ymm8 ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ vpaddd ymm9,ymm2,ymm11 ++ add ebx,r12d ++ and ecx,edi ++ add ebp,DWORD[32+r13] ++ xor ecx,esi ++ vmovdqu YMMWORD[576+rsp],ymm9 ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[36+r13] ++ xor ebx,edx ++ mov edi,ecx ++ xor edi,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ and ebp,edi ++ add esi,DWORD[40+r13] ++ xor ebp,ecx ++ mov edi,ebx ++ xor edi,ecx ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ and eax,edi ++ vpalignr ymm8,ymm2,ymm1,8 ++ vpxor ymm3,ymm3,ymm7 ++ add edx,DWORD[44+r13] ++ xor eax,ebx ++ vpxor ymm3,ymm3,ymm4 ++ mov edi,ebp ++ xor edi,ebx ++ lea edx,[rax*1+rdx] ++ vpxor ymm3,ymm3,ymm8 ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ vpsrld ymm8,ymm3,30 ++ vpslld ymm3,ymm3,2 ++ add edx,r12d ++ and esi,edi ++ add ecx,DWORD[64+r13] ++ xor esi,ebp ++ mov edi,eax ++ xor edi,ebp ++ vpor ymm3,ymm3,ymm8 ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ vpaddd ymm9,ymm3,ymm11 ++ add ecx,r12d ++ and edx,edi ++ add ebx,DWORD[68+r13] ++ xor edx,eax ++ vmovdqu YMMWORD[608+rsp],ymm9 ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ and ecx,edi ++ add ebp,DWORD[72+r13] ++ xor ecx,esi ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[76+r13] ++ xor ebx,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[96+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[100+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[104+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[108+r13] ++ lea r13,[256+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[((-128))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[((-124))+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[((-120))+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[((-116))+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[((-96))+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-92))+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[((-88))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[((-84))+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[((-64))+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[((-60))+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[((-56))+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-52))+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[((-32))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[((-28))+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[((-24))+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[((-20))+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ add edx,r12d ++ lea r13,[128+r9] ++ lea rdi,[128+r9] ++ cmp r13,r10 ++ cmovae r13,r9 ++ ++ ++ add edx,DWORD[r8] ++ add esi,DWORD[4+r8] ++ add ebp,DWORD[8+r8] ++ mov DWORD[r8],edx ++ add ebx,DWORD[12+r8] ++ mov DWORD[4+r8],esi ++ mov eax,edx ++ add ecx,DWORD[16+r8] ++ mov r12d,ebp ++ mov DWORD[8+r8],ebp ++ mov edx,ebx ++ ++ mov DWORD[12+r8],ebx ++ mov ebp,esi ++ mov DWORD[16+r8],ecx ++ ++ mov esi,ecx ++ mov ecx,r12d ++ ++ ++ cmp r9,r10 ++ je NEAR $L$done_avx2 ++ vmovdqu ymm6,YMMWORD[64+r11] ++ cmp rdi,r10 ++ ja NEAR $L$ast_avx2 ++ ++ vmovdqu xmm0,XMMWORD[((-64))+rdi] ++ vmovdqu xmm1,XMMWORD[((-48))+rdi] ++ vmovdqu xmm2,XMMWORD[((-32))+rdi] ++ vmovdqu xmm3,XMMWORD[((-16))+rdi] ++ vinserti128 ymm0,ymm0,XMMWORD[r13],1 ++ vinserti128 ymm1,ymm1,XMMWORD[16+r13],1 ++ vinserti128 ymm2,ymm2,XMMWORD[32+r13],1 ++ vinserti128 ymm3,ymm3,XMMWORD[48+r13],1 ++ jmp NEAR $L$ast_avx2 ++ ++ALIGN 32 ++$L$ast_avx2: ++ lea r13,[((128+16))+rsp] ++ rorx ebx,ebp,2 ++ andn edi,ebp,edx ++ and ebp,ecx ++ xor ebp,edi ++ sub r9,-128 ++ add esi,DWORD[((-128))+r13] ++ andn edi,eax,ecx ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[((-124))+r13] ++ andn edi,esi,ebx ++ add edx,eax ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ and esi,ebp ++ add edx,r12d ++ xor esi,edi ++ add ecx,DWORD[((-120))+r13] ++ andn edi,edx,ebp ++ add ecx,esi ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ and edx,eax ++ add ecx,r12d ++ xor edx,edi ++ add ebx,DWORD[((-116))+r13] ++ andn edi,ecx,eax ++ add ebx,edx ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ and ecx,esi ++ add ebx,r12d ++ xor ecx,edi ++ add ebp,DWORD[((-96))+r13] ++ andn edi,ebx,esi ++ add ebp,ecx ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ and ebx,edx ++ add ebp,r12d ++ xor ebx,edi ++ add eax,DWORD[((-92))+r13] ++ andn edi,ebp,edx ++ add eax,ebx ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ and ebp,ecx ++ add eax,r12d ++ xor ebp,edi ++ add esi,DWORD[((-88))+r13] ++ andn edi,eax,ecx ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[((-84))+r13] ++ andn edi,esi,ebx ++ add edx,eax ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ and esi,ebp ++ add edx,r12d ++ xor esi,edi ++ add ecx,DWORD[((-64))+r13] ++ andn edi,edx,ebp ++ add ecx,esi ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ and edx,eax ++ add ecx,r12d ++ xor edx,edi ++ add ebx,DWORD[((-60))+r13] ++ andn edi,ecx,eax ++ add ebx,edx ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ and ecx,esi ++ add ebx,r12d ++ xor ecx,edi ++ add ebp,DWORD[((-56))+r13] ++ andn edi,ebx,esi ++ add ebp,ecx ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ and ebx,edx ++ add ebp,r12d ++ xor ebx,edi ++ add eax,DWORD[((-52))+r13] ++ andn edi,ebp,edx ++ add eax,ebx ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ and ebp,ecx ++ add eax,r12d ++ xor ebp,edi ++ add esi,DWORD[((-32))+r13] ++ andn edi,eax,ecx ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[((-28))+r13] ++ andn edi,esi,ebx ++ add edx,eax ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ and esi,ebp ++ add edx,r12d ++ xor esi,edi ++ add ecx,DWORD[((-24))+r13] ++ andn edi,edx,ebp ++ add ecx,esi ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ and edx,eax ++ add ecx,r12d ++ xor edx,edi ++ add ebx,DWORD[((-20))+r13] ++ andn edi,ecx,eax ++ add ebx,edx ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ and ecx,esi ++ add ebx,r12d ++ xor ecx,edi ++ add ebp,DWORD[r13] ++ andn edi,ebx,esi ++ add ebp,ecx ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ and ebx,edx ++ add ebp,r12d ++ xor ebx,edi ++ add eax,DWORD[4+r13] ++ andn edi,ebp,edx ++ add eax,ebx ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ and ebp,ecx ++ add eax,r12d ++ xor ebp,edi ++ add esi,DWORD[8+r13] ++ andn edi,eax,ecx ++ add esi,ebp ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ and eax,ebx ++ add esi,r12d ++ xor eax,edi ++ add edx,DWORD[12+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[32+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[36+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[40+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[44+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[64+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ vmovdqu ymm11,YMMWORD[((-64))+r11] ++ vpshufb ymm0,ymm0,ymm6 ++ add edx,DWORD[68+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[72+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[76+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[96+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[100+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ vpshufb ymm1,ymm1,ymm6 ++ vpaddd ymm8,ymm0,ymm11 ++ add esi,DWORD[104+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[108+r13] ++ lea r13,[256+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[((-128))+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-124))+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[((-120))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ vmovdqu YMMWORD[rsp],ymm8 ++ vpshufb ymm2,ymm2,ymm6 ++ vpaddd ymm9,ymm1,ymm11 ++ add eax,DWORD[((-116))+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[((-96))+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[((-92))+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ add ecx,DWORD[((-88))+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-84))+r13] ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ and ecx,edi ++ vmovdqu YMMWORD[32+rsp],ymm9 ++ vpshufb ymm3,ymm3,ymm6 ++ vpaddd ymm6,ymm2,ymm11 ++ add ebp,DWORD[((-64))+r13] ++ xor ecx,esi ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[((-60))+r13] ++ xor ebx,edx ++ mov edi,ecx ++ xor edi,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ and ebp,edi ++ add esi,DWORD[((-56))+r13] ++ xor ebp,ecx ++ mov edi,ebx ++ xor edi,ecx ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ and eax,edi ++ add edx,DWORD[((-52))+r13] ++ xor eax,ebx ++ mov edi,ebp ++ xor edi,ebx ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ and esi,edi ++ add ecx,DWORD[((-32))+r13] ++ xor esi,ebp ++ mov edi,eax ++ xor edi,ebp ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ and edx,edi ++ jmp NEAR $L$align32_3 ++ALIGN 32 ++$L$align32_3: ++ vmovdqu YMMWORD[64+rsp],ymm6 ++ vpaddd ymm7,ymm3,ymm11 ++ add ebx,DWORD[((-28))+r13] ++ xor edx,eax ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ and ecx,edi ++ add ebp,DWORD[((-24))+r13] ++ xor ecx,esi ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[((-20))+r13] ++ xor ebx,edx ++ mov edi,ecx ++ xor edi,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ and ebp,edi ++ add esi,DWORD[r13] ++ xor ebp,ecx ++ mov edi,ebx ++ xor edi,ecx ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ and eax,edi ++ add edx,DWORD[4+r13] ++ xor eax,ebx ++ mov edi,ebp ++ xor edi,ebx ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ and esi,edi ++ vmovdqu YMMWORD[96+rsp],ymm7 ++ add ecx,DWORD[8+r13] ++ xor esi,ebp ++ mov edi,eax ++ xor edi,ebp ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ and edx,edi ++ add ebx,DWORD[12+r13] ++ xor edx,eax ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ and ecx,edi ++ add ebp,DWORD[32+r13] ++ xor ecx,esi ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[36+r13] ++ xor ebx,edx ++ mov edi,ecx ++ xor edi,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ and ebp,edi ++ add esi,DWORD[40+r13] ++ xor ebp,ecx ++ mov edi,ebx ++ xor edi,ecx ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ and eax,edi ++ vpalignr ymm4,ymm1,ymm0,8 ++ add edx,DWORD[44+r13] ++ xor eax,ebx ++ mov edi,ebp ++ xor edi,ebx ++ vpsrldq ymm8,ymm3,4 ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ vpxor ymm4,ymm4,ymm0 ++ vpxor ymm8,ymm8,ymm2 ++ xor esi,ebp ++ add edx,r12d ++ vpxor ymm4,ymm4,ymm8 ++ and esi,edi ++ add ecx,DWORD[64+r13] ++ xor esi,ebp ++ mov edi,eax ++ vpsrld ymm8,ymm4,31 ++ xor edi,ebp ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ vpslldq ymm10,ymm4,12 ++ vpaddd ymm4,ymm4,ymm4 ++ rorx esi,edx,2 ++ xor edx,eax ++ vpsrld ymm9,ymm10,30 ++ vpor ymm4,ymm4,ymm8 ++ add ecx,r12d ++ and edx,edi ++ vpslld ymm10,ymm10,2 ++ vpxor ymm4,ymm4,ymm9 ++ add ebx,DWORD[68+r13] ++ xor edx,eax ++ vpxor ymm4,ymm4,ymm10 ++ mov edi,esi ++ xor edi,eax ++ lea ebx,[rdx*1+rbx] ++ vpaddd ymm9,ymm4,ymm11 ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ vmovdqu YMMWORD[128+rsp],ymm9 ++ add ebx,r12d ++ and ecx,edi ++ add ebp,DWORD[72+r13] ++ xor ecx,esi ++ mov edi,edx ++ xor edi,esi ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ and ebx,edi ++ add eax,DWORD[76+r13] ++ xor ebx,edx ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ vpalignr ymm5,ymm2,ymm1,8 ++ add esi,DWORD[96+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ vpsrldq ymm8,ymm4,4 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ vpxor ymm5,ymm5,ymm1 ++ vpxor ymm8,ymm8,ymm3 ++ add edx,DWORD[100+r13] ++ lea edx,[rax*1+rdx] ++ vpxor ymm5,ymm5,ymm8 ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ xor esi,ebp ++ add edx,r12d ++ vpsrld ymm8,ymm5,31 ++ vmovdqu ymm11,YMMWORD[((-32))+r11] ++ xor esi,ebx ++ add ecx,DWORD[104+r13] ++ lea ecx,[rsi*1+rcx] ++ vpslldq ymm10,ymm5,12 ++ vpaddd ymm5,ymm5,ymm5 ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm5,ymm5,ymm8 ++ xor edx,eax ++ add ecx,r12d ++ vpslld ymm10,ymm10,2 ++ vpxor ymm5,ymm5,ymm9 ++ xor edx,ebp ++ add ebx,DWORD[108+r13] ++ lea r13,[256+r13] ++ vpxor ymm5,ymm5,ymm10 ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ vpaddd ymm9,ymm5,ymm11 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ vmovdqu YMMWORD[160+rsp],ymm9 ++ add ebp,DWORD[((-128))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ vpalignr ymm6,ymm3,ymm2,8 ++ add eax,DWORD[((-124))+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ vpsrldq ymm8,ymm5,4 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ vpxor ymm6,ymm6,ymm2 ++ vpxor ymm8,ymm8,ymm4 ++ add esi,DWORD[((-120))+r13] ++ lea esi,[rbp*1+rsi] ++ vpxor ymm6,ymm6,ymm8 ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ vpsrld ymm8,ymm6,31 ++ xor eax,ecx ++ add edx,DWORD[((-116))+r13] ++ lea edx,[rax*1+rdx] ++ vpslldq ymm10,ymm6,12 ++ vpaddd ymm6,ymm6,ymm6 ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm6,ymm6,ymm8 ++ xor esi,ebp ++ add edx,r12d ++ vpslld ymm10,ymm10,2 ++ vpxor ymm6,ymm6,ymm9 ++ xor esi,ebx ++ add ecx,DWORD[((-96))+r13] ++ vpxor ymm6,ymm6,ymm10 ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ vpaddd ymm9,ymm6,ymm11 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ vmovdqu YMMWORD[192+rsp],ymm9 ++ add ebx,DWORD[((-92))+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ vpalignr ymm7,ymm4,ymm3,8 ++ add ebp,DWORD[((-88))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ vpsrldq ymm8,ymm6,4 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ vpxor ymm7,ymm7,ymm3 ++ vpxor ymm8,ymm8,ymm5 ++ add eax,DWORD[((-84))+r13] ++ lea eax,[rbx*1+rax] ++ vpxor ymm7,ymm7,ymm8 ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ vpsrld ymm8,ymm7,31 ++ xor ebp,edx ++ add esi,DWORD[((-64))+r13] ++ lea esi,[rbp*1+rsi] ++ vpslldq ymm10,ymm7,12 ++ vpaddd ymm7,ymm7,ymm7 ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ vpsrld ymm9,ymm10,30 ++ vpor ymm7,ymm7,ymm8 ++ xor eax,ebx ++ add esi,r12d ++ vpslld ymm10,ymm10,2 ++ vpxor ymm7,ymm7,ymm9 ++ xor eax,ecx ++ add edx,DWORD[((-60))+r13] ++ vpxor ymm7,ymm7,ymm10 ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ rorx eax,esi,2 ++ vpaddd ymm9,ymm7,ymm11 ++ xor esi,ebp ++ add edx,r12d ++ xor esi,ebx ++ vmovdqu YMMWORD[224+rsp],ymm9 ++ add ecx,DWORD[((-56))+r13] ++ lea ecx,[rsi*1+rcx] ++ rorx r12d,edx,27 ++ rorx esi,edx,2 ++ xor edx,eax ++ add ecx,r12d ++ xor edx,ebp ++ add ebx,DWORD[((-52))+r13] ++ lea ebx,[rdx*1+rbx] ++ rorx r12d,ecx,27 ++ rorx edx,ecx,2 ++ xor ecx,esi ++ add ebx,r12d ++ xor ecx,eax ++ add ebp,DWORD[((-32))+r13] ++ lea ebp,[rbp*1+rcx] ++ rorx r12d,ebx,27 ++ rorx ecx,ebx,2 ++ xor ebx,edx ++ add ebp,r12d ++ xor ebx,esi ++ add eax,DWORD[((-28))+r13] ++ lea eax,[rbx*1+rax] ++ rorx r12d,ebp,27 ++ rorx ebx,ebp,2 ++ xor ebp,ecx ++ add eax,r12d ++ xor ebp,edx ++ add esi,DWORD[((-24))+r13] ++ lea esi,[rbp*1+rsi] ++ rorx r12d,eax,27 ++ rorx ebp,eax,2 ++ xor eax,ebx ++ add esi,r12d ++ xor eax,ecx ++ add edx,DWORD[((-20))+r13] ++ lea edx,[rax*1+rdx] ++ rorx r12d,esi,27 ++ add edx,r12d ++ lea r13,[128+rsp] ++ ++ ++ add edx,DWORD[r8] ++ add esi,DWORD[4+r8] ++ add ebp,DWORD[8+r8] ++ mov DWORD[r8],edx ++ add ebx,DWORD[12+r8] ++ mov DWORD[4+r8],esi ++ mov eax,edx ++ add ecx,DWORD[16+r8] ++ mov r12d,ebp ++ mov DWORD[8+r8],ebp ++ mov edx,ebx ++ ++ mov DWORD[12+r8],ebx ++ mov ebp,esi ++ mov DWORD[16+r8],ecx ++ ++ mov esi,ecx ++ mov ecx,r12d ++ ++ ++ cmp r9,r10 ++ jbe NEAR $L$oop_avx2 ++ ++$L$done_avx2: ++ vzeroupper ++ movaps xmm6,XMMWORD[((-40-96))+r14] ++ movaps xmm7,XMMWORD[((-40-80))+r14] ++ movaps xmm8,XMMWORD[((-40-64))+r14] ++ movaps xmm9,XMMWORD[((-40-48))+r14] ++ movaps xmm10,XMMWORD[((-40-32))+r14] ++ movaps xmm11,XMMWORD[((-40-16))+r14] ++ lea rsi,[r14] ++ mov r14,QWORD[((-40))+rsi] ++ mov r13,QWORD[((-32))+rsi] ++ mov r12,QWORD[((-24))+rsi] ++ mov rbp,QWORD[((-16))+rsi] ++ mov rbx,QWORD[((-8))+rsi] ++ lea rsp,[rsi] ++$L$epilogue_avx2: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha1_block_data_order_avx2: ++ALIGN 64 ++K_XX_XX: ++ DD 0x5a827999,0x5a827999,0x5a827999,0x5a827999 ++ DD 0x5a827999,0x5a827999,0x5a827999,0x5a827999 ++ DD 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 ++ DD 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 ++ DD 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc ++ DD 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc ++ DD 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 ++ DD 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 ++ DD 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f ++ DD 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f ++DB 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 ++DB 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115 ++DB 102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44 ++DB 32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60 ++DB 97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114 ++DB 103,62,0 ++ALIGN 64 ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ lea r10,[$L$prologue] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[152+r8] ++ ++ lea r10,[$L$epilogue] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[64+rax] ++ ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ mov QWORD[216+r8],r12 ++ mov QWORD[224+r8],r13 ++ mov QWORD[232+r8],r14 ++ ++ jmp NEAR $L$common_seh_tail ++ ++ ++ALIGN 16 ++shaext_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ lea r10,[$L$prologue_shaext] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ lea r10,[$L$epilogue_shaext] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ lea rsi,[((-8-64))+rax] ++ lea rdi,[512+r8] ++ mov ecx,8 ++ DD 0xa548f3fc ++ ++ jmp NEAR $L$common_seh_tail ++ ++ ++ALIGN 16 ++ssse3_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$common_seh_tail ++ ++ mov rax,QWORD[232+r8] ++ ++ lea rsi,[((-40-96))+rax] ++ lea rdi,[512+r8] ++ mov ecx,12 ++ DD 0xa548f3fc ++ ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ mov QWORD[216+r8],r12 ++ mov QWORD[224+r8],r13 ++ mov QWORD[232+r8],r14 ++ ++$L$common_seh_tail: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_sha1_block_data_order wrt ..imagebase ++ DD $L$SEH_end_sha1_block_data_order wrt ..imagebase ++ DD $L$SEH_info_sha1_block_data_order wrt ..imagebase ++ DD $L$SEH_begin_sha1_block_data_order_shaext wrt ..imagebase ++ DD $L$SEH_end_sha1_block_data_order_shaext wrt ..imagebase ++ DD $L$SEH_info_sha1_block_data_order_shaext wrt ..imagebase ++ DD $L$SEH_begin_sha1_block_data_order_ssse3 wrt ..imagebase ++ DD $L$SEH_end_sha1_block_data_order_ssse3 wrt ..imagebase ++ DD $L$SEH_info_sha1_block_data_order_ssse3 wrt ..imagebase ++ DD $L$SEH_begin_sha1_block_data_order_avx wrt ..imagebase ++ DD $L$SEH_end_sha1_block_data_order_avx wrt ..imagebase ++ DD $L$SEH_info_sha1_block_data_order_avx wrt ..imagebase ++ DD $L$SEH_begin_sha1_block_data_order_avx2 wrt ..imagebase ++ DD $L$SEH_end_sha1_block_data_order_avx2 wrt ..imagebase ++ DD $L$SEH_info_sha1_block_data_order_avx2 wrt ..imagebase ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_info_sha1_block_data_order: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++$L$SEH_info_sha1_block_data_order_shaext: ++DB 9,0,0,0 ++ DD shaext_handler wrt ..imagebase ++$L$SEH_info_sha1_block_data_order_ssse3: ++DB 9,0,0,0 ++ DD ssse3_handler wrt ..imagebase ++ DD $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3 wrt ..imagebase ++$L$SEH_info_sha1_block_data_order_avx: ++DB 9,0,0,0 ++ DD ssse3_handler wrt ..imagebase ++ DD $L$prologue_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase ++$L$SEH_info_sha1_block_data_order_avx2: ++DB 9,0,0,0 ++ DD ssse3_handler wrt ..imagebase ++ DD $L$prologue_avx2 wrt ..imagebase,$L$epilogue_avx2 wrt ..imagebase +diff --git a/SMP/lib/accelerated/x86/coff/sha256-avx-x86_64.asm b/SMP/lib/accelerated/x86/coff/sha256-avx-x86_64.asm +new file mode 100644 +index 0000000..217199a +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/sha256-avx-x86_64.asm +@@ -0,0 +1,8209 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++ ++EXTERN _gnutls_x86_cpuid_s ++ ++global sha256_multi_block ++ ++ALIGN 32 ++sha256_multi_block: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_multi_block: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ mov rcx,QWORD[((_gnutls_x86_cpuid_s+4))] ++ bt rcx,61 ++ jc NEAR _shaext_shortcut ++ test ecx,268435456 ++ jnz NEAR _avx_shortcut ++ mov rax,rsp ++ push rbx ++ push rbp ++ lea rsp,[((-168))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++ movaps XMMWORD[(-120)+rax],xmm10 ++ movaps XMMWORD[(-104)+rax],xmm11 ++ movaps XMMWORD[(-88)+rax],xmm12 ++ movaps XMMWORD[(-72)+rax],xmm13 ++ movaps XMMWORD[(-56)+rax],xmm14 ++ movaps XMMWORD[(-40)+rax],xmm15 ++ sub rsp,288 ++ and rsp,-256 ++ mov QWORD[272+rsp],rax ++$L$body: ++ lea rbp,[((K256+128))] ++ lea rbx,[256+rsp] ++ lea rdi,[128+rdi] ++ ++$L$oop_grande: ++ mov DWORD[280+rsp],edx ++ xor edx,edx ++ mov r8,QWORD[rsi] ++ mov ecx,DWORD[8+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[rbx],ecx ++ cmovle r8,rbp ++ mov r9,QWORD[16+rsi] ++ mov ecx,DWORD[24+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[4+rbx],ecx ++ cmovle r9,rbp ++ mov r10,QWORD[32+rsi] ++ mov ecx,DWORD[40+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[8+rbx],ecx ++ cmovle r10,rbp ++ mov r11,QWORD[48+rsi] ++ mov ecx,DWORD[56+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[12+rbx],ecx ++ cmovle r11,rbp ++ test edx,edx ++ jz NEAR $L$done ++ ++ movdqu xmm8,XMMWORD[((0-128))+rdi] ++ lea rax,[128+rsp] ++ movdqu xmm9,XMMWORD[((32-128))+rdi] ++ movdqu xmm10,XMMWORD[((64-128))+rdi] ++ movdqu xmm11,XMMWORD[((96-128))+rdi] ++ movdqu xmm12,XMMWORD[((128-128))+rdi] ++ movdqu xmm13,XMMWORD[((160-128))+rdi] ++ movdqu xmm14,XMMWORD[((192-128))+rdi] ++ movdqu xmm15,XMMWORD[((224-128))+rdi] ++ movdqu xmm6,XMMWORD[$L$pbswap] ++ jmp NEAR $L$oop ++ ++ALIGN 32 ++$L$oop: ++ movdqa xmm4,xmm10 ++ pxor xmm4,xmm9 ++ movd xmm5,DWORD[r8] ++ movd xmm0,DWORD[r9] ++ movd xmm1,DWORD[r10] ++ movd xmm2,DWORD[r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm12 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm12 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm12 ++ pslld xmm2,7 ++ movdqa XMMWORD[(0-128)+rax],xmm5 ++ paddd xmm5,xmm15 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-128))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm12 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm12 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm14 ++ pand xmm3,xmm13 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm8 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm8 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm9 ++ movdqa xmm7,xmm8 ++ pslld xmm2,10 ++ pxor xmm3,xmm8 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm15,xmm9 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm15,xmm4 ++ paddd xmm11,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm15,xmm5 ++ paddd xmm15,xmm7 ++ movd xmm5,DWORD[4+r8] ++ movd xmm0,DWORD[4+r9] ++ movd xmm1,DWORD[4+r10] ++ movd xmm2,DWORD[4+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm11 ++ ++ movdqa xmm2,xmm11 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm11 ++ pslld xmm2,7 ++ movdqa XMMWORD[(16-128)+rax],xmm5 ++ paddd xmm5,xmm14 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-96))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm11 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm11 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm13 ++ pand xmm4,xmm12 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm15 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm15 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm8 ++ movdqa xmm7,xmm15 ++ pslld xmm2,10 ++ pxor xmm4,xmm15 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm14,xmm8 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm14,xmm3 ++ paddd xmm10,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm14,xmm5 ++ paddd xmm14,xmm7 ++ movd xmm5,DWORD[8+r8] ++ movd xmm0,DWORD[8+r9] ++ movd xmm1,DWORD[8+r10] ++ movd xmm2,DWORD[8+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm10 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm10 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm10 ++ pslld xmm2,7 ++ movdqa XMMWORD[(32-128)+rax],xmm5 ++ paddd xmm5,xmm13 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-64))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm10 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm10 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm12 ++ pand xmm3,xmm11 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm14 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm14 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm15 ++ movdqa xmm7,xmm14 ++ pslld xmm2,10 ++ pxor xmm3,xmm14 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm13,xmm15 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm13,xmm4 ++ paddd xmm9,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm13,xmm5 ++ paddd xmm13,xmm7 ++ movd xmm5,DWORD[12+r8] ++ movd xmm0,DWORD[12+r9] ++ movd xmm1,DWORD[12+r10] ++ movd xmm2,DWORD[12+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm9 ++ ++ movdqa xmm2,xmm9 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm9 ++ pslld xmm2,7 ++ movdqa XMMWORD[(48-128)+rax],xmm5 ++ paddd xmm5,xmm12 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-32))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm9 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm9 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm11 ++ pand xmm4,xmm10 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm13 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm13 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm14 ++ movdqa xmm7,xmm13 ++ pslld xmm2,10 ++ pxor xmm4,xmm13 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm12,xmm14 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm12,xmm3 ++ paddd xmm8,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm12,xmm5 ++ paddd xmm12,xmm7 ++ movd xmm5,DWORD[16+r8] ++ movd xmm0,DWORD[16+r9] ++ movd xmm1,DWORD[16+r10] ++ movd xmm2,DWORD[16+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm8 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm8 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm8 ++ pslld xmm2,7 ++ movdqa XMMWORD[(64-128)+rax],xmm5 ++ paddd xmm5,xmm11 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm8 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm8 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm10 ++ pand xmm3,xmm9 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm12 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm12 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm13 ++ movdqa xmm7,xmm12 ++ pslld xmm2,10 ++ pxor xmm3,xmm12 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm11,xmm13 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm11,xmm4 ++ paddd xmm15,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm11,xmm5 ++ paddd xmm11,xmm7 ++ movd xmm5,DWORD[20+r8] ++ movd xmm0,DWORD[20+r9] ++ movd xmm1,DWORD[20+r10] ++ movd xmm2,DWORD[20+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm15 ++ ++ movdqa xmm2,xmm15 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm15 ++ pslld xmm2,7 ++ movdqa XMMWORD[(80-128)+rax],xmm5 ++ paddd xmm5,xmm10 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[32+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm15 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm15 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm9 ++ pand xmm4,xmm8 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm11 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm11 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm12 ++ movdqa xmm7,xmm11 ++ pslld xmm2,10 ++ pxor xmm4,xmm11 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm10,xmm12 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm10,xmm3 ++ paddd xmm14,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm10,xmm5 ++ paddd xmm10,xmm7 ++ movd xmm5,DWORD[24+r8] ++ movd xmm0,DWORD[24+r9] ++ movd xmm1,DWORD[24+r10] ++ movd xmm2,DWORD[24+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm14 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm14 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm14 ++ pslld xmm2,7 ++ movdqa XMMWORD[(96-128)+rax],xmm5 ++ paddd xmm5,xmm9 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[64+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm14 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm14 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm8 ++ pand xmm3,xmm15 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm10 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm10 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm11 ++ movdqa xmm7,xmm10 ++ pslld xmm2,10 ++ pxor xmm3,xmm10 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm9,xmm11 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm9,xmm4 ++ paddd xmm13,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm9,xmm5 ++ paddd xmm9,xmm7 ++ movd xmm5,DWORD[28+r8] ++ movd xmm0,DWORD[28+r9] ++ movd xmm1,DWORD[28+r10] ++ movd xmm2,DWORD[28+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm13 ++ ++ movdqa xmm2,xmm13 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm13 ++ pslld xmm2,7 ++ movdqa XMMWORD[(112-128)+rax],xmm5 ++ paddd xmm5,xmm8 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[96+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm13 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm13 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm15 ++ pand xmm4,xmm14 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm9 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm9 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm10 ++ movdqa xmm7,xmm9 ++ pslld xmm2,10 ++ pxor xmm4,xmm9 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm8,xmm10 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm8,xmm3 ++ paddd xmm12,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm8,xmm5 ++ paddd xmm8,xmm7 ++ lea rbp,[256+rbp] ++ movd xmm5,DWORD[32+r8] ++ movd xmm0,DWORD[32+r9] ++ movd xmm1,DWORD[32+r10] ++ movd xmm2,DWORD[32+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm12 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm12 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm12 ++ pslld xmm2,7 ++ movdqa XMMWORD[(128-128)+rax],xmm5 ++ paddd xmm5,xmm15 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-128))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm12 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm12 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm14 ++ pand xmm3,xmm13 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm8 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm8 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm9 ++ movdqa xmm7,xmm8 ++ pslld xmm2,10 ++ pxor xmm3,xmm8 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm15,xmm9 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm15,xmm4 ++ paddd xmm11,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm15,xmm5 ++ paddd xmm15,xmm7 ++ movd xmm5,DWORD[36+r8] ++ movd xmm0,DWORD[36+r9] ++ movd xmm1,DWORD[36+r10] ++ movd xmm2,DWORD[36+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm11 ++ ++ movdqa xmm2,xmm11 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm11 ++ pslld xmm2,7 ++ movdqa XMMWORD[(144-128)+rax],xmm5 ++ paddd xmm5,xmm14 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-96))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm11 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm11 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm13 ++ pand xmm4,xmm12 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm15 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm15 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm8 ++ movdqa xmm7,xmm15 ++ pslld xmm2,10 ++ pxor xmm4,xmm15 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm14,xmm8 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm14,xmm3 ++ paddd xmm10,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm14,xmm5 ++ paddd xmm14,xmm7 ++ movd xmm5,DWORD[40+r8] ++ movd xmm0,DWORD[40+r9] ++ movd xmm1,DWORD[40+r10] ++ movd xmm2,DWORD[40+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm10 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm10 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm10 ++ pslld xmm2,7 ++ movdqa XMMWORD[(160-128)+rax],xmm5 ++ paddd xmm5,xmm13 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-64))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm10 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm10 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm12 ++ pand xmm3,xmm11 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm14 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm14 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm15 ++ movdqa xmm7,xmm14 ++ pslld xmm2,10 ++ pxor xmm3,xmm14 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm13,xmm15 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm13,xmm4 ++ paddd xmm9,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm13,xmm5 ++ paddd xmm13,xmm7 ++ movd xmm5,DWORD[44+r8] ++ movd xmm0,DWORD[44+r9] ++ movd xmm1,DWORD[44+r10] ++ movd xmm2,DWORD[44+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm9 ++ ++ movdqa xmm2,xmm9 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm9 ++ pslld xmm2,7 ++ movdqa XMMWORD[(176-128)+rax],xmm5 ++ paddd xmm5,xmm12 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-32))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm9 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm9 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm11 ++ pand xmm4,xmm10 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm13 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm13 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm14 ++ movdqa xmm7,xmm13 ++ pslld xmm2,10 ++ pxor xmm4,xmm13 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm12,xmm14 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm12,xmm3 ++ paddd xmm8,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm12,xmm5 ++ paddd xmm12,xmm7 ++ movd xmm5,DWORD[48+r8] ++ movd xmm0,DWORD[48+r9] ++ movd xmm1,DWORD[48+r10] ++ movd xmm2,DWORD[48+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm8 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm8 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm8 ++ pslld xmm2,7 ++ movdqa XMMWORD[(192-128)+rax],xmm5 ++ paddd xmm5,xmm11 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm8 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm8 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm10 ++ pand xmm3,xmm9 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm12 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm12 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm13 ++ movdqa xmm7,xmm12 ++ pslld xmm2,10 ++ pxor xmm3,xmm12 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm11,xmm13 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm11,xmm4 ++ paddd xmm15,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm11,xmm5 ++ paddd xmm11,xmm7 ++ movd xmm5,DWORD[52+r8] ++ movd xmm0,DWORD[52+r9] ++ movd xmm1,DWORD[52+r10] ++ movd xmm2,DWORD[52+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm15 ++ ++ movdqa xmm2,xmm15 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm15 ++ pslld xmm2,7 ++ movdqa XMMWORD[(208-128)+rax],xmm5 ++ paddd xmm5,xmm10 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[32+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm15 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm15 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm9 ++ pand xmm4,xmm8 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm11 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm11 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm12 ++ movdqa xmm7,xmm11 ++ pslld xmm2,10 ++ pxor xmm4,xmm11 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm10,xmm12 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm10,xmm3 ++ paddd xmm14,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm10,xmm5 ++ paddd xmm10,xmm7 ++ movd xmm5,DWORD[56+r8] ++ movd xmm0,DWORD[56+r9] ++ movd xmm1,DWORD[56+r10] ++ movd xmm2,DWORD[56+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm14 ++DB 102,15,56,0,238 ++ movdqa xmm2,xmm14 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm14 ++ pslld xmm2,7 ++ movdqa XMMWORD[(224-128)+rax],xmm5 ++ paddd xmm5,xmm9 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[64+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm14 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm14 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm8 ++ pand xmm3,xmm15 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm10 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm10 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm11 ++ movdqa xmm7,xmm10 ++ pslld xmm2,10 ++ pxor xmm3,xmm10 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm9,xmm11 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm9,xmm4 ++ paddd xmm13,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm9,xmm5 ++ paddd xmm9,xmm7 ++ movd xmm5,DWORD[60+r8] ++ lea r8,[64+r8] ++ movd xmm0,DWORD[60+r9] ++ lea r9,[64+r9] ++ movd xmm1,DWORD[60+r10] ++ lea r10,[64+r10] ++ movd xmm2,DWORD[60+r11] ++ lea r11,[64+r11] ++ punpckldq xmm5,xmm1 ++ punpckldq xmm0,xmm2 ++ punpckldq xmm5,xmm0 ++ movdqa xmm7,xmm13 ++ ++ movdqa xmm2,xmm13 ++DB 102,15,56,0,238 ++ psrld xmm7,6 ++ movdqa xmm1,xmm13 ++ pslld xmm2,7 ++ movdqa XMMWORD[(240-128)+rax],xmm5 ++ paddd xmm5,xmm8 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[96+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm13 ++ prefetcht0 [63+r8] ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm13 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm15 ++ pand xmm4,xmm14 ++ pxor xmm7,xmm1 ++ ++ prefetcht0 [63+r9] ++ movdqa xmm1,xmm9 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm9 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm10 ++ movdqa xmm7,xmm9 ++ pslld xmm2,10 ++ pxor xmm4,xmm9 ++ ++ prefetcht0 [63+r10] ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ prefetcht0 [63+r11] ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm8,xmm10 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm8,xmm3 ++ paddd xmm12,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm8,xmm5 ++ paddd xmm8,xmm7 ++ lea rbp,[256+rbp] ++ movdqu xmm5,XMMWORD[((0-128))+rax] ++ mov ecx,3 ++ jmp NEAR $L$oop_16_xx ++ALIGN 32 ++$L$oop_16_xx: ++ movdqa xmm6,XMMWORD[((16-128))+rax] ++ paddd xmm5,XMMWORD[((144-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((224-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm12 ++ ++ movdqa xmm2,xmm12 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm12 ++ pslld xmm2,7 ++ movdqa XMMWORD[(0-128)+rax],xmm5 ++ paddd xmm5,xmm15 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-128))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm12 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm12 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm14 ++ pand xmm3,xmm13 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm8 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm8 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm9 ++ movdqa xmm7,xmm8 ++ pslld xmm2,10 ++ pxor xmm3,xmm8 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm15,xmm9 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm15,xmm4 ++ paddd xmm11,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm15,xmm5 ++ paddd xmm15,xmm7 ++ movdqa xmm5,XMMWORD[((32-128))+rax] ++ paddd xmm6,XMMWORD[((160-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((240-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm11 ++ ++ movdqa xmm2,xmm11 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm11 ++ pslld xmm2,7 ++ movdqa XMMWORD[(16-128)+rax],xmm6 ++ paddd xmm6,xmm14 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[((-96))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm11 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm11 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm13 ++ pand xmm4,xmm12 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm15 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm15 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm8 ++ movdqa xmm7,xmm15 ++ pslld xmm2,10 ++ pxor xmm4,xmm15 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm14,xmm8 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm14,xmm3 ++ paddd xmm10,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm14,xmm6 ++ paddd xmm14,xmm7 ++ movdqa xmm6,XMMWORD[((48-128))+rax] ++ paddd xmm5,XMMWORD[((176-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((0-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm10 ++ ++ movdqa xmm2,xmm10 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm10 ++ pslld xmm2,7 ++ movdqa XMMWORD[(32-128)+rax],xmm5 ++ paddd xmm5,xmm13 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-64))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm10 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm10 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm12 ++ pand xmm3,xmm11 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm14 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm14 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm15 ++ movdqa xmm7,xmm14 ++ pslld xmm2,10 ++ pxor xmm3,xmm14 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm13,xmm15 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm13,xmm4 ++ paddd xmm9,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm13,xmm5 ++ paddd xmm13,xmm7 ++ movdqa xmm5,XMMWORD[((64-128))+rax] ++ paddd xmm6,XMMWORD[((192-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((16-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm9 ++ ++ movdqa xmm2,xmm9 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm9 ++ pslld xmm2,7 ++ movdqa XMMWORD[(48-128)+rax],xmm6 ++ paddd xmm6,xmm12 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[((-32))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm9 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm9 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm11 ++ pand xmm4,xmm10 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm13 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm13 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm14 ++ movdqa xmm7,xmm13 ++ pslld xmm2,10 ++ pxor xmm4,xmm13 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm12,xmm14 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm12,xmm3 ++ paddd xmm8,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm12,xmm6 ++ paddd xmm12,xmm7 ++ movdqa xmm6,XMMWORD[((80-128))+rax] ++ paddd xmm5,XMMWORD[((208-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((32-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm8 ++ ++ movdqa xmm2,xmm8 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm8 ++ pslld xmm2,7 ++ movdqa XMMWORD[(64-128)+rax],xmm5 ++ paddd xmm5,xmm11 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm8 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm8 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm10 ++ pand xmm3,xmm9 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm12 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm12 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm13 ++ movdqa xmm7,xmm12 ++ pslld xmm2,10 ++ pxor xmm3,xmm12 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm11,xmm13 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm11,xmm4 ++ paddd xmm15,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm11,xmm5 ++ paddd xmm11,xmm7 ++ movdqa xmm5,XMMWORD[((96-128))+rax] ++ paddd xmm6,XMMWORD[((224-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((48-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm15 ++ ++ movdqa xmm2,xmm15 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm15 ++ pslld xmm2,7 ++ movdqa XMMWORD[(80-128)+rax],xmm6 ++ paddd xmm6,xmm10 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[32+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm15 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm15 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm9 ++ pand xmm4,xmm8 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm11 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm11 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm12 ++ movdqa xmm7,xmm11 ++ pslld xmm2,10 ++ pxor xmm4,xmm11 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm10,xmm12 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm10,xmm3 ++ paddd xmm14,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm10,xmm6 ++ paddd xmm10,xmm7 ++ movdqa xmm6,XMMWORD[((112-128))+rax] ++ paddd xmm5,XMMWORD[((240-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((64-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm14 ++ ++ movdqa xmm2,xmm14 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm14 ++ pslld xmm2,7 ++ movdqa XMMWORD[(96-128)+rax],xmm5 ++ paddd xmm5,xmm9 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[64+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm14 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm14 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm8 ++ pand xmm3,xmm15 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm10 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm10 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm11 ++ movdqa xmm7,xmm10 ++ pslld xmm2,10 ++ pxor xmm3,xmm10 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm9,xmm11 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm9,xmm4 ++ paddd xmm13,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm9,xmm5 ++ paddd xmm9,xmm7 ++ movdqa xmm5,XMMWORD[((128-128))+rax] ++ paddd xmm6,XMMWORD[((0-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((80-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm13 ++ ++ movdqa xmm2,xmm13 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm13 ++ pslld xmm2,7 ++ movdqa XMMWORD[(112-128)+rax],xmm6 ++ paddd xmm6,xmm8 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[96+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm13 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm13 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm15 ++ pand xmm4,xmm14 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm9 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm9 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm10 ++ movdqa xmm7,xmm9 ++ pslld xmm2,10 ++ pxor xmm4,xmm9 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm8,xmm10 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm8,xmm3 ++ paddd xmm12,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm8,xmm6 ++ paddd xmm8,xmm7 ++ lea rbp,[256+rbp] ++ movdqa xmm6,XMMWORD[((144-128))+rax] ++ paddd xmm5,XMMWORD[((16-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((96-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm12 ++ ++ movdqa xmm2,xmm12 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm12 ++ pslld xmm2,7 ++ movdqa XMMWORD[(128-128)+rax],xmm5 ++ paddd xmm5,xmm15 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-128))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm12 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm12 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm14 ++ pand xmm3,xmm13 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm8 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm8 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm9 ++ movdqa xmm7,xmm8 ++ pslld xmm2,10 ++ pxor xmm3,xmm8 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm15,xmm9 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm15,xmm4 ++ paddd xmm11,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm15,xmm5 ++ paddd xmm15,xmm7 ++ movdqa xmm5,XMMWORD[((160-128))+rax] ++ paddd xmm6,XMMWORD[((32-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((112-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm11 ++ ++ movdqa xmm2,xmm11 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm11 ++ pslld xmm2,7 ++ movdqa XMMWORD[(144-128)+rax],xmm6 ++ paddd xmm6,xmm14 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[((-96))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm11 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm11 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm13 ++ pand xmm4,xmm12 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm15 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm15 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm8 ++ movdqa xmm7,xmm15 ++ pslld xmm2,10 ++ pxor xmm4,xmm15 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm14,xmm8 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm14,xmm3 ++ paddd xmm10,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm14,xmm6 ++ paddd xmm14,xmm7 ++ movdqa xmm6,XMMWORD[((176-128))+rax] ++ paddd xmm5,XMMWORD[((48-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((128-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm10 ++ ++ movdqa xmm2,xmm10 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm10 ++ pslld xmm2,7 ++ movdqa XMMWORD[(160-128)+rax],xmm5 ++ paddd xmm5,xmm13 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[((-64))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm10 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm10 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm12 ++ pand xmm3,xmm11 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm14 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm14 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm15 ++ movdqa xmm7,xmm14 ++ pslld xmm2,10 ++ pxor xmm3,xmm14 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm13,xmm15 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm13,xmm4 ++ paddd xmm9,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm13,xmm5 ++ paddd xmm13,xmm7 ++ movdqa xmm5,XMMWORD[((192-128))+rax] ++ paddd xmm6,XMMWORD[((64-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((144-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm9 ++ ++ movdqa xmm2,xmm9 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm9 ++ pslld xmm2,7 ++ movdqa XMMWORD[(176-128)+rax],xmm6 ++ paddd xmm6,xmm12 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[((-32))+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm9 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm9 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm11 ++ pand xmm4,xmm10 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm13 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm13 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm14 ++ movdqa xmm7,xmm13 ++ pslld xmm2,10 ++ pxor xmm4,xmm13 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm12,xmm14 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm12,xmm3 ++ paddd xmm8,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm12,xmm6 ++ paddd xmm12,xmm7 ++ movdqa xmm6,XMMWORD[((208-128))+rax] ++ paddd xmm5,XMMWORD[((80-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((160-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm8 ++ ++ movdqa xmm2,xmm8 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm8 ++ pslld xmm2,7 ++ movdqa XMMWORD[(192-128)+rax],xmm5 ++ paddd xmm5,xmm11 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm8 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm8 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm10 ++ pand xmm3,xmm9 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm12 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm12 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm13 ++ movdqa xmm7,xmm12 ++ pslld xmm2,10 ++ pxor xmm3,xmm12 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm11,xmm13 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm11,xmm4 ++ paddd xmm15,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm11,xmm5 ++ paddd xmm11,xmm7 ++ movdqa xmm5,XMMWORD[((224-128))+rax] ++ paddd xmm6,XMMWORD[((96-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((176-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm15 ++ ++ movdqa xmm2,xmm15 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm15 ++ pslld xmm2,7 ++ movdqa XMMWORD[(208-128)+rax],xmm6 ++ paddd xmm6,xmm10 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[32+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm15 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm15 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm9 ++ pand xmm4,xmm8 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm11 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm11 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm12 ++ movdqa xmm7,xmm11 ++ pslld xmm2,10 ++ pxor xmm4,xmm11 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm10,xmm12 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm10,xmm3 ++ paddd xmm14,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm10,xmm6 ++ paddd xmm10,xmm7 ++ movdqa xmm6,XMMWORD[((240-128))+rax] ++ paddd xmm5,XMMWORD[((112-128))+rax] ++ ++ movdqa xmm7,xmm6 ++ movdqa xmm1,xmm6 ++ psrld xmm7,3 ++ movdqa xmm2,xmm6 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((192-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm3,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm3 ++ ++ psrld xmm3,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ psrld xmm3,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm3 ++ pxor xmm0,xmm1 ++ paddd xmm5,xmm0 ++ movdqa xmm7,xmm14 ++ ++ movdqa xmm2,xmm14 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm14 ++ pslld xmm2,7 ++ movdqa XMMWORD[(224-128)+rax],xmm5 ++ paddd xmm5,xmm9 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm5,XMMWORD[64+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm14 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm3,xmm14 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm8 ++ pand xmm3,xmm15 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm10 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm10 ++ psrld xmm1,2 ++ paddd xmm5,xmm7 ++ pxor xmm0,xmm3 ++ movdqa xmm3,xmm11 ++ movdqa xmm7,xmm10 ++ pslld xmm2,10 ++ pxor xmm3,xmm10 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm5,xmm0 ++ pslld xmm2,19-10 ++ pand xmm4,xmm3 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm9,xmm11 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm9,xmm4 ++ paddd xmm13,xmm5 ++ pxor xmm7,xmm2 ++ ++ paddd xmm9,xmm5 ++ paddd xmm9,xmm7 ++ movdqa xmm5,XMMWORD[((0-128))+rax] ++ paddd xmm6,XMMWORD[((128-128))+rax] ++ ++ movdqa xmm7,xmm5 ++ movdqa xmm1,xmm5 ++ psrld xmm7,3 ++ movdqa xmm2,xmm5 ++ ++ psrld xmm1,7 ++ movdqa xmm0,XMMWORD[((208-128))+rax] ++ pslld xmm2,14 ++ pxor xmm7,xmm1 ++ psrld xmm1,18-7 ++ movdqa xmm4,xmm0 ++ pxor xmm7,xmm2 ++ pslld xmm2,25-14 ++ pxor xmm7,xmm1 ++ psrld xmm0,10 ++ movdqa xmm1,xmm4 ++ ++ psrld xmm4,17 ++ pxor xmm7,xmm2 ++ pslld xmm1,13 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ psrld xmm4,19-17 ++ pxor xmm0,xmm1 ++ pslld xmm1,15-13 ++ pxor xmm0,xmm4 ++ pxor xmm0,xmm1 ++ paddd xmm6,xmm0 ++ movdqa xmm7,xmm13 ++ ++ movdqa xmm2,xmm13 ++ ++ psrld xmm7,6 ++ movdqa xmm1,xmm13 ++ pslld xmm2,7 ++ movdqa XMMWORD[(240-128)+rax],xmm6 ++ paddd xmm6,xmm8 ++ ++ psrld xmm1,11 ++ pxor xmm7,xmm2 ++ pslld xmm2,21-7 ++ paddd xmm6,XMMWORD[96+rbp] ++ pxor xmm7,xmm1 ++ ++ psrld xmm1,25-11 ++ movdqa xmm0,xmm13 ++ ++ pxor xmm7,xmm2 ++ movdqa xmm4,xmm13 ++ pslld xmm2,26-21 ++ pandn xmm0,xmm15 ++ pand xmm4,xmm14 ++ pxor xmm7,xmm1 ++ ++ ++ movdqa xmm1,xmm9 ++ pxor xmm7,xmm2 ++ movdqa xmm2,xmm9 ++ psrld xmm1,2 ++ paddd xmm6,xmm7 ++ pxor xmm0,xmm4 ++ movdqa xmm4,xmm10 ++ movdqa xmm7,xmm9 ++ pslld xmm2,10 ++ pxor xmm4,xmm9 ++ ++ ++ psrld xmm7,13 ++ pxor xmm1,xmm2 ++ paddd xmm6,xmm0 ++ pslld xmm2,19-10 ++ pand xmm3,xmm4 ++ pxor xmm1,xmm7 ++ ++ ++ psrld xmm7,22-13 ++ pxor xmm1,xmm2 ++ movdqa xmm8,xmm10 ++ pslld xmm2,30-19 ++ pxor xmm7,xmm1 ++ pxor xmm8,xmm3 ++ paddd xmm12,xmm6 ++ pxor xmm7,xmm2 ++ ++ paddd xmm8,xmm6 ++ paddd xmm8,xmm7 ++ lea rbp,[256+rbp] ++ dec ecx ++ jnz NEAR $L$oop_16_xx ++ ++ mov ecx,1 ++ lea rbp,[((K256+128))] ++ ++ movdqa xmm7,XMMWORD[rbx] ++ cmp ecx,DWORD[rbx] ++ pxor xmm0,xmm0 ++ cmovge r8,rbp ++ cmp ecx,DWORD[4+rbx] ++ movdqa xmm6,xmm7 ++ cmovge r9,rbp ++ cmp ecx,DWORD[8+rbx] ++ pcmpgtd xmm6,xmm0 ++ cmovge r10,rbp ++ cmp ecx,DWORD[12+rbx] ++ paddd xmm7,xmm6 ++ cmovge r11,rbp ++ ++ movdqu xmm0,XMMWORD[((0-128))+rdi] ++ pand xmm8,xmm6 ++ movdqu xmm1,XMMWORD[((32-128))+rdi] ++ pand xmm9,xmm6 ++ movdqu xmm2,XMMWORD[((64-128))+rdi] ++ pand xmm10,xmm6 ++ movdqu xmm5,XMMWORD[((96-128))+rdi] ++ pand xmm11,xmm6 ++ paddd xmm8,xmm0 ++ movdqu xmm0,XMMWORD[((128-128))+rdi] ++ pand xmm12,xmm6 ++ paddd xmm9,xmm1 ++ movdqu xmm1,XMMWORD[((160-128))+rdi] ++ pand xmm13,xmm6 ++ paddd xmm10,xmm2 ++ movdqu xmm2,XMMWORD[((192-128))+rdi] ++ pand xmm14,xmm6 ++ paddd xmm11,xmm5 ++ movdqu xmm5,XMMWORD[((224-128))+rdi] ++ pand xmm15,xmm6 ++ paddd xmm12,xmm0 ++ paddd xmm13,xmm1 ++ movdqu XMMWORD[(0-128)+rdi],xmm8 ++ paddd xmm14,xmm2 ++ movdqu XMMWORD[(32-128)+rdi],xmm9 ++ paddd xmm15,xmm5 ++ movdqu XMMWORD[(64-128)+rdi],xmm10 ++ movdqu XMMWORD[(96-128)+rdi],xmm11 ++ movdqu XMMWORD[(128-128)+rdi],xmm12 ++ movdqu XMMWORD[(160-128)+rdi],xmm13 ++ movdqu XMMWORD[(192-128)+rdi],xmm14 ++ movdqu XMMWORD[(224-128)+rdi],xmm15 ++ ++ movdqa XMMWORD[rbx],xmm7 ++ movdqa xmm6,XMMWORD[$L$pbswap] ++ dec edx ++ jnz NEAR $L$oop ++ ++ mov edx,DWORD[280+rsp] ++ lea rdi,[16+rdi] ++ lea rsi,[64+rsi] ++ dec edx ++ jnz NEAR $L$oop_grande ++ ++$L$done: ++ mov rax,QWORD[272+rsp] ++ movaps xmm6,XMMWORD[((-184))+rax] ++ movaps xmm7,XMMWORD[((-168))+rax] ++ movaps xmm8,XMMWORD[((-152))+rax] ++ movaps xmm9,XMMWORD[((-136))+rax] ++ movaps xmm10,XMMWORD[((-120))+rax] ++ movaps xmm11,XMMWORD[((-104))+rax] ++ movaps xmm12,XMMWORD[((-88))+rax] ++ movaps xmm13,XMMWORD[((-72))+rax] ++ movaps xmm14,XMMWORD[((-56))+rax] ++ movaps xmm15,XMMWORD[((-40))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ lea rsp,[rax] ++$L$epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_multi_block: ++ ++ALIGN 32 ++sha256_multi_block_shaext: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_multi_block_shaext: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_shaext_shortcut: ++ mov rax,rsp ++ push rbx ++ push rbp ++ lea rsp,[((-168))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++ movaps XMMWORD[(-120)+rax],xmm10 ++ movaps XMMWORD[(-104)+rax],xmm11 ++ movaps XMMWORD[(-88)+rax],xmm12 ++ movaps XMMWORD[(-72)+rax],xmm13 ++ movaps XMMWORD[(-56)+rax],xmm14 ++ movaps XMMWORD[(-40)+rax],xmm15 ++ sub rsp,288 ++ shl edx,1 ++ and rsp,-256 ++ lea rdi,[128+rdi] ++ mov QWORD[272+rsp],rax ++$L$body_shaext: ++ lea rbx,[256+rsp] ++ lea rbp,[((K256_shaext+128))] ++ ++$L$oop_grande_shaext: ++ mov DWORD[280+rsp],edx ++ xor edx,edx ++ mov r8,QWORD[rsi] ++ mov ecx,DWORD[8+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[rbx],ecx ++ cmovle r8,rsp ++ mov r9,QWORD[16+rsi] ++ mov ecx,DWORD[24+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[4+rbx],ecx ++ cmovle r9,rsp ++ test edx,edx ++ jz NEAR $L$done_shaext ++ ++ movq xmm12,QWORD[((0-128))+rdi] ++ movq xmm4,QWORD[((32-128))+rdi] ++ movq xmm13,QWORD[((64-128))+rdi] ++ movq xmm5,QWORD[((96-128))+rdi] ++ movq xmm8,QWORD[((128-128))+rdi] ++ movq xmm9,QWORD[((160-128))+rdi] ++ movq xmm10,QWORD[((192-128))+rdi] ++ movq xmm11,QWORD[((224-128))+rdi] ++ ++ punpckldq xmm12,xmm4 ++ punpckldq xmm13,xmm5 ++ punpckldq xmm8,xmm9 ++ punpckldq xmm10,xmm11 ++ movdqa xmm3,XMMWORD[((K256_shaext-16))] ++ ++ movdqa xmm14,xmm12 ++ movdqa xmm15,xmm13 ++ punpcklqdq xmm12,xmm8 ++ punpcklqdq xmm13,xmm10 ++ punpckhqdq xmm14,xmm8 ++ punpckhqdq xmm15,xmm10 ++ ++ pshufd xmm12,xmm12,27 ++ pshufd xmm13,xmm13,27 ++ pshufd xmm14,xmm14,27 ++ pshufd xmm15,xmm15,27 ++ jmp NEAR $L$oop_shaext ++ ++ALIGN 32 ++$L$oop_shaext: ++ movdqu xmm4,XMMWORD[r8] ++ movdqu xmm8,XMMWORD[r9] ++ movdqu xmm5,XMMWORD[16+r8] ++ movdqu xmm9,XMMWORD[16+r9] ++ movdqu xmm6,XMMWORD[32+r8] ++DB 102,15,56,0,227 ++ movdqu xmm10,XMMWORD[32+r9] ++DB 102,68,15,56,0,195 ++ movdqu xmm7,XMMWORD[48+r8] ++ lea r8,[64+r8] ++ movdqu xmm11,XMMWORD[48+r9] ++ lea r9,[64+r9] ++ ++ movdqa xmm0,XMMWORD[((0-128))+rbp] ++DB 102,15,56,0,235 ++ paddd xmm0,xmm4 ++ pxor xmm4,xmm12 ++ movdqa xmm1,xmm0 ++ movdqa xmm2,XMMWORD[((0-128))+rbp] ++DB 102,68,15,56,0,203 ++ paddd xmm2,xmm8 ++ movdqa XMMWORD[80+rsp],xmm13 ++DB 69,15,56,203,236 ++ pxor xmm8,xmm14 ++ movdqa xmm0,xmm2 ++ movdqa XMMWORD[112+rsp],xmm15 ++DB 69,15,56,203,254 ++ pshufd xmm0,xmm1,0x0e ++ pxor xmm4,xmm12 ++ movdqa XMMWORD[64+rsp],xmm12 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ pxor xmm8,xmm14 ++ movdqa XMMWORD[96+rsp],xmm14 ++ movdqa xmm1,XMMWORD[((16-128))+rbp] ++ paddd xmm1,xmm5 ++DB 102,15,56,0,243 ++DB 69,15,56,203,247 ++ ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((16-128))+rbp] ++ paddd xmm2,xmm9 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ prefetcht0 [127+r8] ++DB 102,15,56,0,251 ++DB 102,68,15,56,0,211 ++ prefetcht0 [127+r9] ++DB 69,15,56,203,254 ++ pshufd xmm0,xmm1,0x0e ++DB 102,68,15,56,0,219 ++DB 15,56,204,229 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((32-128))+rbp] ++ paddd xmm1,xmm6 ++DB 69,15,56,203,247 ++ ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((32-128))+rbp] ++ paddd xmm2,xmm10 ++DB 69,15,56,203,236 ++DB 69,15,56,204,193 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm7 ++DB 69,15,56,203,254 ++ pshufd xmm0,xmm1,0x0e ++DB 102,15,58,15,222,4 ++ paddd xmm4,xmm3 ++ movdqa xmm3,xmm11 ++DB 102,65,15,58,15,218,4 ++DB 15,56,204,238 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((48-128))+rbp] ++ paddd xmm1,xmm7 ++DB 69,15,56,203,247 ++DB 69,15,56,204,202 ++ ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((48-128))+rbp] ++ paddd xmm8,xmm3 ++ paddd xmm2,xmm11 ++DB 15,56,205,231 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm4 ++DB 102,15,58,15,223,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,195 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm5,xmm3 ++ movdqa xmm3,xmm8 ++DB 102,65,15,58,15,219,4 ++DB 15,56,204,247 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((64-128))+rbp] ++ paddd xmm1,xmm4 ++DB 69,15,56,203,247 ++DB 69,15,56,204,211 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((64-128))+rbp] ++ paddd xmm9,xmm3 ++ paddd xmm2,xmm8 ++DB 15,56,205,236 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm5 ++DB 102,15,58,15,220,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,200 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm6,xmm3 ++ movdqa xmm3,xmm9 ++DB 102,65,15,58,15,216,4 ++DB 15,56,204,252 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((80-128))+rbp] ++ paddd xmm1,xmm5 ++DB 69,15,56,203,247 ++DB 69,15,56,204,216 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((80-128))+rbp] ++ paddd xmm10,xmm3 ++ paddd xmm2,xmm9 ++DB 15,56,205,245 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm6 ++DB 102,15,58,15,221,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,209 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm7,xmm3 ++ movdqa xmm3,xmm10 ++DB 102,65,15,58,15,217,4 ++DB 15,56,204,229 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((96-128))+rbp] ++ paddd xmm1,xmm6 ++DB 69,15,56,203,247 ++DB 69,15,56,204,193 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((96-128))+rbp] ++ paddd xmm11,xmm3 ++ paddd xmm2,xmm10 ++DB 15,56,205,254 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm7 ++DB 102,15,58,15,222,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,218 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm4,xmm3 ++ movdqa xmm3,xmm11 ++DB 102,65,15,58,15,218,4 ++DB 15,56,204,238 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((112-128))+rbp] ++ paddd xmm1,xmm7 ++DB 69,15,56,203,247 ++DB 69,15,56,204,202 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((112-128))+rbp] ++ paddd xmm8,xmm3 ++ paddd xmm2,xmm11 ++DB 15,56,205,231 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm4 ++DB 102,15,58,15,223,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,195 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm5,xmm3 ++ movdqa xmm3,xmm8 ++DB 102,65,15,58,15,219,4 ++DB 15,56,204,247 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((128-128))+rbp] ++ paddd xmm1,xmm4 ++DB 69,15,56,203,247 ++DB 69,15,56,204,211 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((128-128))+rbp] ++ paddd xmm9,xmm3 ++ paddd xmm2,xmm8 ++DB 15,56,205,236 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm5 ++DB 102,15,58,15,220,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,200 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm6,xmm3 ++ movdqa xmm3,xmm9 ++DB 102,65,15,58,15,216,4 ++DB 15,56,204,252 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((144-128))+rbp] ++ paddd xmm1,xmm5 ++DB 69,15,56,203,247 ++DB 69,15,56,204,216 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((144-128))+rbp] ++ paddd xmm10,xmm3 ++ paddd xmm2,xmm9 ++DB 15,56,205,245 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm6 ++DB 102,15,58,15,221,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,209 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm7,xmm3 ++ movdqa xmm3,xmm10 ++DB 102,65,15,58,15,217,4 ++DB 15,56,204,229 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((160-128))+rbp] ++ paddd xmm1,xmm6 ++DB 69,15,56,203,247 ++DB 69,15,56,204,193 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((160-128))+rbp] ++ paddd xmm11,xmm3 ++ paddd xmm2,xmm10 ++DB 15,56,205,254 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm7 ++DB 102,15,58,15,222,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,218 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm4,xmm3 ++ movdqa xmm3,xmm11 ++DB 102,65,15,58,15,218,4 ++DB 15,56,204,238 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((176-128))+rbp] ++ paddd xmm1,xmm7 ++DB 69,15,56,203,247 ++DB 69,15,56,204,202 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((176-128))+rbp] ++ paddd xmm8,xmm3 ++ paddd xmm2,xmm11 ++DB 15,56,205,231 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm4 ++DB 102,15,58,15,223,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,195 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm5,xmm3 ++ movdqa xmm3,xmm8 ++DB 102,65,15,58,15,219,4 ++DB 15,56,204,247 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((192-128))+rbp] ++ paddd xmm1,xmm4 ++DB 69,15,56,203,247 ++DB 69,15,56,204,211 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((192-128))+rbp] ++ paddd xmm9,xmm3 ++ paddd xmm2,xmm8 ++DB 15,56,205,236 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm5 ++DB 102,15,58,15,220,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,200 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm6,xmm3 ++ movdqa xmm3,xmm9 ++DB 102,65,15,58,15,216,4 ++DB 15,56,204,252 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((208-128))+rbp] ++ paddd xmm1,xmm5 ++DB 69,15,56,203,247 ++DB 69,15,56,204,216 ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((208-128))+rbp] ++ paddd xmm10,xmm3 ++ paddd xmm2,xmm9 ++DB 15,56,205,245 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ movdqa xmm3,xmm6 ++DB 102,15,58,15,221,4 ++DB 69,15,56,203,254 ++DB 69,15,56,205,209 ++ pshufd xmm0,xmm1,0x0e ++ paddd xmm7,xmm3 ++ movdqa xmm3,xmm10 ++DB 102,65,15,58,15,217,4 ++ nop ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm1,XMMWORD[((224-128))+rbp] ++ paddd xmm1,xmm6 ++DB 69,15,56,203,247 ++ ++ movdqa xmm0,xmm1 ++ movdqa xmm2,XMMWORD[((224-128))+rbp] ++ paddd xmm11,xmm3 ++ paddd xmm2,xmm10 ++DB 15,56,205,254 ++ nop ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ mov ecx,1 ++ pxor xmm6,xmm6 ++DB 69,15,56,203,254 ++DB 69,15,56,205,218 ++ pshufd xmm0,xmm1,0x0e ++ movdqa xmm1,XMMWORD[((240-128))+rbp] ++ paddd xmm1,xmm7 ++ movq xmm7,QWORD[rbx] ++ nop ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ movdqa xmm2,XMMWORD[((240-128))+rbp] ++ paddd xmm2,xmm11 ++DB 69,15,56,203,247 ++ ++ movdqa xmm0,xmm1 ++ cmp ecx,DWORD[rbx] ++ cmovge r8,rsp ++ cmp ecx,DWORD[4+rbx] ++ cmovge r9,rsp ++ pshufd xmm9,xmm7,0x00 ++DB 69,15,56,203,236 ++ movdqa xmm0,xmm2 ++ pshufd xmm10,xmm7,0x55 ++ movdqa xmm11,xmm7 ++DB 69,15,56,203,254 ++ pshufd xmm0,xmm1,0x0e ++ pcmpgtd xmm9,xmm6 ++ pcmpgtd xmm10,xmm6 ++DB 69,15,56,203,229 ++ pshufd xmm0,xmm2,0x0e ++ pcmpgtd xmm11,xmm6 ++ movdqa xmm3,XMMWORD[((K256_shaext-16))] ++DB 69,15,56,203,247 ++ ++ pand xmm13,xmm9 ++ pand xmm15,xmm10 ++ pand xmm12,xmm9 ++ pand xmm14,xmm10 ++ paddd xmm11,xmm7 ++ ++ paddd xmm13,XMMWORD[80+rsp] ++ paddd xmm15,XMMWORD[112+rsp] ++ paddd xmm12,XMMWORD[64+rsp] ++ paddd xmm14,XMMWORD[96+rsp] ++ ++ movq QWORD[rbx],xmm11 ++ dec edx ++ jnz NEAR $L$oop_shaext ++ ++ mov edx,DWORD[280+rsp] ++ ++ pshufd xmm12,xmm12,27 ++ pshufd xmm13,xmm13,27 ++ pshufd xmm14,xmm14,27 ++ pshufd xmm15,xmm15,27 ++ ++ movdqa xmm5,xmm12 ++ movdqa xmm6,xmm13 ++ punpckldq xmm12,xmm14 ++ punpckhdq xmm5,xmm14 ++ punpckldq xmm13,xmm15 ++ punpckhdq xmm6,xmm15 ++ ++ movq QWORD[(0-128)+rdi],xmm12 ++ psrldq xmm12,8 ++ movq QWORD[(128-128)+rdi],xmm5 ++ psrldq xmm5,8 ++ movq QWORD[(32-128)+rdi],xmm12 ++ movq QWORD[(160-128)+rdi],xmm5 ++ ++ movq QWORD[(64-128)+rdi],xmm13 ++ psrldq xmm13,8 ++ movq QWORD[(192-128)+rdi],xmm6 ++ psrldq xmm6,8 ++ movq QWORD[(96-128)+rdi],xmm13 ++ movq QWORD[(224-128)+rdi],xmm6 ++ ++ lea rdi,[8+rdi] ++ lea rsi,[32+rsi] ++ dec edx ++ jnz NEAR $L$oop_grande_shaext ++ ++$L$done_shaext: ++ ++ movaps xmm6,XMMWORD[((-184))+rax] ++ movaps xmm7,XMMWORD[((-168))+rax] ++ movaps xmm8,XMMWORD[((-152))+rax] ++ movaps xmm9,XMMWORD[((-136))+rax] ++ movaps xmm10,XMMWORD[((-120))+rax] ++ movaps xmm11,XMMWORD[((-104))+rax] ++ movaps xmm12,XMMWORD[((-88))+rax] ++ movaps xmm13,XMMWORD[((-72))+rax] ++ movaps xmm14,XMMWORD[((-56))+rax] ++ movaps xmm15,XMMWORD[((-40))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ lea rsp,[rax] ++$L$epilogue_shaext: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_multi_block_shaext: ++ ++ALIGN 32 ++sha256_multi_block_avx: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_multi_block_avx: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_avx_shortcut: ++ shr rcx,32 ++ cmp edx,2 ++ jb NEAR $L$avx ++ test ecx,32 ++ jnz NEAR _avx2_shortcut ++ jmp NEAR $L$avx ++ALIGN 32 ++$L$avx: ++ mov rax,rsp ++ push rbx ++ push rbp ++ lea rsp,[((-168))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++ movaps XMMWORD[(-120)+rax],xmm10 ++ movaps XMMWORD[(-104)+rax],xmm11 ++ movaps XMMWORD[(-88)+rax],xmm12 ++ movaps XMMWORD[(-72)+rax],xmm13 ++ movaps XMMWORD[(-56)+rax],xmm14 ++ movaps XMMWORD[(-40)+rax],xmm15 ++ sub rsp,288 ++ and rsp,-256 ++ mov QWORD[272+rsp],rax ++$L$body_avx: ++ lea rbp,[((K256+128))] ++ lea rbx,[256+rsp] ++ lea rdi,[128+rdi] ++ ++$L$oop_grande_avx: ++ mov DWORD[280+rsp],edx ++ xor edx,edx ++ mov r8,QWORD[rsi] ++ mov ecx,DWORD[8+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[rbx],ecx ++ cmovle r8,rbp ++ mov r9,QWORD[16+rsi] ++ mov ecx,DWORD[24+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[4+rbx],ecx ++ cmovle r9,rbp ++ mov r10,QWORD[32+rsi] ++ mov ecx,DWORD[40+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[8+rbx],ecx ++ cmovle r10,rbp ++ mov r11,QWORD[48+rsi] ++ mov ecx,DWORD[56+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[12+rbx],ecx ++ cmovle r11,rbp ++ test edx,edx ++ jz NEAR $L$done_avx ++ ++ vmovdqu xmm8,XMMWORD[((0-128))+rdi] ++ lea rax,[128+rsp] ++ vmovdqu xmm9,XMMWORD[((32-128))+rdi] ++ vmovdqu xmm10,XMMWORD[((64-128))+rdi] ++ vmovdqu xmm11,XMMWORD[((96-128))+rdi] ++ vmovdqu xmm12,XMMWORD[((128-128))+rdi] ++ vmovdqu xmm13,XMMWORD[((160-128))+rdi] ++ vmovdqu xmm14,XMMWORD[((192-128))+rdi] ++ vmovdqu xmm15,XMMWORD[((224-128))+rdi] ++ vmovdqu xmm6,XMMWORD[$L$pbswap] ++ jmp NEAR $L$oop_avx ++ ++ALIGN 32 ++$L$oop_avx: ++ vpxor xmm4,xmm10,xmm9 ++ vmovd xmm5,DWORD[r8] ++ vmovd xmm0,DWORD[r9] ++ vpinsrd xmm5,xmm5,DWORD[r10],1 ++ vpinsrd xmm0,xmm0,DWORD[r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm12,6 ++ vpslld xmm2,xmm12,26 ++ vmovdqu XMMWORD[(0-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm15 ++ ++ vpsrld xmm1,xmm12,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm12,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-128))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm12,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,7 ++ vpandn xmm0,xmm12,xmm14 ++ vpand xmm3,xmm12,xmm13 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm15,xmm8,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm8,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm9,xmm8 ++ ++ vpxor xmm15,xmm15,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm8,13 ++ ++ vpslld xmm2,xmm8,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm15,xmm1 ++ ++ vpsrld xmm1,xmm8,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,10 ++ vpxor xmm15,xmm9,xmm4 ++ vpaddd xmm11,xmm11,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm15,xmm15,xmm5 ++ vpaddd xmm15,xmm15,xmm7 ++ vmovd xmm5,DWORD[4+r8] ++ vmovd xmm0,DWORD[4+r9] ++ vpinsrd xmm5,xmm5,DWORD[4+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[4+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm11,6 ++ vpslld xmm2,xmm11,26 ++ vmovdqu XMMWORD[(16-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm14 ++ ++ vpsrld xmm1,xmm11,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm11,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-96))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm11,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,7 ++ vpandn xmm0,xmm11,xmm13 ++ vpand xmm4,xmm11,xmm12 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm14,xmm15,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm15,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm8,xmm15 ++ ++ vpxor xmm14,xmm14,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm15,13 ++ ++ vpslld xmm2,xmm15,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm14,xmm1 ++ ++ vpsrld xmm1,xmm15,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,10 ++ vpxor xmm14,xmm8,xmm3 ++ vpaddd xmm10,xmm10,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm14,xmm14,xmm5 ++ vpaddd xmm14,xmm14,xmm7 ++ vmovd xmm5,DWORD[8+r8] ++ vmovd xmm0,DWORD[8+r9] ++ vpinsrd xmm5,xmm5,DWORD[8+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[8+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm10,6 ++ vpslld xmm2,xmm10,26 ++ vmovdqu XMMWORD[(32-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm13 ++ ++ vpsrld xmm1,xmm10,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm10,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-64))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm10,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,7 ++ vpandn xmm0,xmm10,xmm12 ++ vpand xmm3,xmm10,xmm11 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm13,xmm14,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm14,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm15,xmm14 ++ ++ vpxor xmm13,xmm13,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm14,13 ++ ++ vpslld xmm2,xmm14,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm13,xmm1 ++ ++ vpsrld xmm1,xmm14,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,10 ++ vpxor xmm13,xmm15,xmm4 ++ vpaddd xmm9,xmm9,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm13,xmm13,xmm5 ++ vpaddd xmm13,xmm13,xmm7 ++ vmovd xmm5,DWORD[12+r8] ++ vmovd xmm0,DWORD[12+r9] ++ vpinsrd xmm5,xmm5,DWORD[12+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[12+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm9,6 ++ vpslld xmm2,xmm9,26 ++ vmovdqu XMMWORD[(48-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm12 ++ ++ vpsrld xmm1,xmm9,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm9,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-32))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm9,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,7 ++ vpandn xmm0,xmm9,xmm11 ++ vpand xmm4,xmm9,xmm10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm12,xmm13,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm13,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm14,xmm13 ++ ++ vpxor xmm12,xmm12,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm13,13 ++ ++ vpslld xmm2,xmm13,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm12,xmm1 ++ ++ vpsrld xmm1,xmm13,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,10 ++ vpxor xmm12,xmm14,xmm3 ++ vpaddd xmm8,xmm8,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm12,xmm12,xmm5 ++ vpaddd xmm12,xmm12,xmm7 ++ vmovd xmm5,DWORD[16+r8] ++ vmovd xmm0,DWORD[16+r9] ++ vpinsrd xmm5,xmm5,DWORD[16+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[16+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm8,6 ++ vpslld xmm2,xmm8,26 ++ vmovdqu XMMWORD[(64-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm11 ++ ++ vpsrld xmm1,xmm8,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm8,21 ++ vpaddd xmm5,xmm5,XMMWORD[rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm8,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,7 ++ vpandn xmm0,xmm8,xmm10 ++ vpand xmm3,xmm8,xmm9 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm11,xmm12,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm12,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm13,xmm12 ++ ++ vpxor xmm11,xmm11,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm12,13 ++ ++ vpslld xmm2,xmm12,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm11,xmm1 ++ ++ vpsrld xmm1,xmm12,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,10 ++ vpxor xmm11,xmm13,xmm4 ++ vpaddd xmm15,xmm15,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm11,xmm11,xmm5 ++ vpaddd xmm11,xmm11,xmm7 ++ vmovd xmm5,DWORD[20+r8] ++ vmovd xmm0,DWORD[20+r9] ++ vpinsrd xmm5,xmm5,DWORD[20+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[20+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm15,6 ++ vpslld xmm2,xmm15,26 ++ vmovdqu XMMWORD[(80-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm10 ++ ++ vpsrld xmm1,xmm15,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm15,21 ++ vpaddd xmm5,xmm5,XMMWORD[32+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm15,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,7 ++ vpandn xmm0,xmm15,xmm9 ++ vpand xmm4,xmm15,xmm8 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm10,xmm11,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm11,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm12,xmm11 ++ ++ vpxor xmm10,xmm10,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm11,13 ++ ++ vpslld xmm2,xmm11,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm10,xmm1 ++ ++ vpsrld xmm1,xmm11,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,10 ++ vpxor xmm10,xmm12,xmm3 ++ vpaddd xmm14,xmm14,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm10,xmm10,xmm5 ++ vpaddd xmm10,xmm10,xmm7 ++ vmovd xmm5,DWORD[24+r8] ++ vmovd xmm0,DWORD[24+r9] ++ vpinsrd xmm5,xmm5,DWORD[24+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[24+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm14,6 ++ vpslld xmm2,xmm14,26 ++ vmovdqu XMMWORD[(96-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm9 ++ ++ vpsrld xmm1,xmm14,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm14,21 ++ vpaddd xmm5,xmm5,XMMWORD[64+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm14,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,7 ++ vpandn xmm0,xmm14,xmm8 ++ vpand xmm3,xmm14,xmm15 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm9,xmm10,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm10,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm11,xmm10 ++ ++ vpxor xmm9,xmm9,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm10,13 ++ ++ vpslld xmm2,xmm10,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm9,xmm1 ++ ++ vpsrld xmm1,xmm10,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,10 ++ vpxor xmm9,xmm11,xmm4 ++ vpaddd xmm13,xmm13,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm9,xmm9,xmm5 ++ vpaddd xmm9,xmm9,xmm7 ++ vmovd xmm5,DWORD[28+r8] ++ vmovd xmm0,DWORD[28+r9] ++ vpinsrd xmm5,xmm5,DWORD[28+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[28+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm13,6 ++ vpslld xmm2,xmm13,26 ++ vmovdqu XMMWORD[(112-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm8 ++ ++ vpsrld xmm1,xmm13,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm13,21 ++ vpaddd xmm5,xmm5,XMMWORD[96+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm13,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,7 ++ vpandn xmm0,xmm13,xmm15 ++ vpand xmm4,xmm13,xmm14 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm8,xmm9,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm9,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm10,xmm9 ++ ++ vpxor xmm8,xmm8,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm9,13 ++ ++ vpslld xmm2,xmm9,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm8,xmm1 ++ ++ vpsrld xmm1,xmm9,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,10 ++ vpxor xmm8,xmm10,xmm3 ++ vpaddd xmm12,xmm12,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm8,xmm8,xmm5 ++ vpaddd xmm8,xmm8,xmm7 ++ add rbp,256 ++ vmovd xmm5,DWORD[32+r8] ++ vmovd xmm0,DWORD[32+r9] ++ vpinsrd xmm5,xmm5,DWORD[32+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[32+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm12,6 ++ vpslld xmm2,xmm12,26 ++ vmovdqu XMMWORD[(128-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm15 ++ ++ vpsrld xmm1,xmm12,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm12,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-128))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm12,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,7 ++ vpandn xmm0,xmm12,xmm14 ++ vpand xmm3,xmm12,xmm13 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm15,xmm8,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm8,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm9,xmm8 ++ ++ vpxor xmm15,xmm15,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm8,13 ++ ++ vpslld xmm2,xmm8,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm15,xmm1 ++ ++ vpsrld xmm1,xmm8,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,10 ++ vpxor xmm15,xmm9,xmm4 ++ vpaddd xmm11,xmm11,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm15,xmm15,xmm5 ++ vpaddd xmm15,xmm15,xmm7 ++ vmovd xmm5,DWORD[36+r8] ++ vmovd xmm0,DWORD[36+r9] ++ vpinsrd xmm5,xmm5,DWORD[36+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[36+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm11,6 ++ vpslld xmm2,xmm11,26 ++ vmovdqu XMMWORD[(144-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm14 ++ ++ vpsrld xmm1,xmm11,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm11,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-96))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm11,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,7 ++ vpandn xmm0,xmm11,xmm13 ++ vpand xmm4,xmm11,xmm12 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm14,xmm15,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm15,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm8,xmm15 ++ ++ vpxor xmm14,xmm14,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm15,13 ++ ++ vpslld xmm2,xmm15,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm14,xmm1 ++ ++ vpsrld xmm1,xmm15,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,10 ++ vpxor xmm14,xmm8,xmm3 ++ vpaddd xmm10,xmm10,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm14,xmm14,xmm5 ++ vpaddd xmm14,xmm14,xmm7 ++ vmovd xmm5,DWORD[40+r8] ++ vmovd xmm0,DWORD[40+r9] ++ vpinsrd xmm5,xmm5,DWORD[40+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[40+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm10,6 ++ vpslld xmm2,xmm10,26 ++ vmovdqu XMMWORD[(160-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm13 ++ ++ vpsrld xmm1,xmm10,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm10,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-64))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm10,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,7 ++ vpandn xmm0,xmm10,xmm12 ++ vpand xmm3,xmm10,xmm11 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm13,xmm14,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm14,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm15,xmm14 ++ ++ vpxor xmm13,xmm13,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm14,13 ++ ++ vpslld xmm2,xmm14,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm13,xmm1 ++ ++ vpsrld xmm1,xmm14,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,10 ++ vpxor xmm13,xmm15,xmm4 ++ vpaddd xmm9,xmm9,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm13,xmm13,xmm5 ++ vpaddd xmm13,xmm13,xmm7 ++ vmovd xmm5,DWORD[44+r8] ++ vmovd xmm0,DWORD[44+r9] ++ vpinsrd xmm5,xmm5,DWORD[44+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[44+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm9,6 ++ vpslld xmm2,xmm9,26 ++ vmovdqu XMMWORD[(176-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm12 ++ ++ vpsrld xmm1,xmm9,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm9,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-32))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm9,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,7 ++ vpandn xmm0,xmm9,xmm11 ++ vpand xmm4,xmm9,xmm10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm12,xmm13,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm13,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm14,xmm13 ++ ++ vpxor xmm12,xmm12,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm13,13 ++ ++ vpslld xmm2,xmm13,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm12,xmm1 ++ ++ vpsrld xmm1,xmm13,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,10 ++ vpxor xmm12,xmm14,xmm3 ++ vpaddd xmm8,xmm8,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm12,xmm12,xmm5 ++ vpaddd xmm12,xmm12,xmm7 ++ vmovd xmm5,DWORD[48+r8] ++ vmovd xmm0,DWORD[48+r9] ++ vpinsrd xmm5,xmm5,DWORD[48+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[48+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm8,6 ++ vpslld xmm2,xmm8,26 ++ vmovdqu XMMWORD[(192-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm11 ++ ++ vpsrld xmm1,xmm8,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm8,21 ++ vpaddd xmm5,xmm5,XMMWORD[rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm8,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,7 ++ vpandn xmm0,xmm8,xmm10 ++ vpand xmm3,xmm8,xmm9 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm11,xmm12,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm12,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm13,xmm12 ++ ++ vpxor xmm11,xmm11,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm12,13 ++ ++ vpslld xmm2,xmm12,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm11,xmm1 ++ ++ vpsrld xmm1,xmm12,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,10 ++ vpxor xmm11,xmm13,xmm4 ++ vpaddd xmm15,xmm15,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm11,xmm11,xmm5 ++ vpaddd xmm11,xmm11,xmm7 ++ vmovd xmm5,DWORD[52+r8] ++ vmovd xmm0,DWORD[52+r9] ++ vpinsrd xmm5,xmm5,DWORD[52+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[52+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm15,6 ++ vpslld xmm2,xmm15,26 ++ vmovdqu XMMWORD[(208-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm10 ++ ++ vpsrld xmm1,xmm15,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm15,21 ++ vpaddd xmm5,xmm5,XMMWORD[32+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm15,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,7 ++ vpandn xmm0,xmm15,xmm9 ++ vpand xmm4,xmm15,xmm8 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm10,xmm11,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm11,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm12,xmm11 ++ ++ vpxor xmm10,xmm10,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm11,13 ++ ++ vpslld xmm2,xmm11,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm10,xmm1 ++ ++ vpsrld xmm1,xmm11,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,10 ++ vpxor xmm10,xmm12,xmm3 ++ vpaddd xmm14,xmm14,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm10,xmm10,xmm5 ++ vpaddd xmm10,xmm10,xmm7 ++ vmovd xmm5,DWORD[56+r8] ++ vmovd xmm0,DWORD[56+r9] ++ vpinsrd xmm5,xmm5,DWORD[56+r10],1 ++ vpinsrd xmm0,xmm0,DWORD[56+r11],1 ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm14,6 ++ vpslld xmm2,xmm14,26 ++ vmovdqu XMMWORD[(224-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm9 ++ ++ vpsrld xmm1,xmm14,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm14,21 ++ vpaddd xmm5,xmm5,XMMWORD[64+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm14,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,7 ++ vpandn xmm0,xmm14,xmm8 ++ vpand xmm3,xmm14,xmm15 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm9,xmm10,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm10,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm11,xmm10 ++ ++ vpxor xmm9,xmm9,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm10,13 ++ ++ vpslld xmm2,xmm10,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm9,xmm1 ++ ++ vpsrld xmm1,xmm10,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,10 ++ vpxor xmm9,xmm11,xmm4 ++ vpaddd xmm13,xmm13,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm9,xmm9,xmm5 ++ vpaddd xmm9,xmm9,xmm7 ++ vmovd xmm5,DWORD[60+r8] ++ lea r8,[64+r8] ++ vmovd xmm0,DWORD[60+r9] ++ lea r9,[64+r9] ++ vpinsrd xmm5,xmm5,DWORD[60+r10],1 ++ lea r10,[64+r10] ++ vpinsrd xmm0,xmm0,DWORD[60+r11],1 ++ lea r11,[64+r11] ++ vpunpckldq xmm5,xmm5,xmm0 ++ vpshufb xmm5,xmm5,xmm6 ++ vpsrld xmm7,xmm13,6 ++ vpslld xmm2,xmm13,26 ++ vmovdqu XMMWORD[(240-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm8 ++ ++ vpsrld xmm1,xmm13,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm13,21 ++ vpaddd xmm5,xmm5,XMMWORD[96+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm13,25 ++ vpxor xmm7,xmm7,xmm2 ++ prefetcht0 [63+r8] ++ vpslld xmm2,xmm13,7 ++ vpandn xmm0,xmm13,xmm15 ++ vpand xmm4,xmm13,xmm14 ++ prefetcht0 [63+r9] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm8,xmm9,2 ++ vpxor xmm7,xmm7,xmm2 ++ prefetcht0 [63+r10] ++ vpslld xmm1,xmm9,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm10,xmm9 ++ prefetcht0 [63+r11] ++ vpxor xmm8,xmm8,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm9,13 ++ ++ vpslld xmm2,xmm9,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm8,xmm1 ++ ++ vpsrld xmm1,xmm9,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,10 ++ vpxor xmm8,xmm10,xmm3 ++ vpaddd xmm12,xmm12,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm8,xmm8,xmm5 ++ vpaddd xmm8,xmm8,xmm7 ++ add rbp,256 ++ vmovdqu xmm5,XMMWORD[((0-128))+rax] ++ mov ecx,3 ++ jmp NEAR $L$oop_16_xx_avx ++ALIGN 32 ++$L$oop_16_xx_avx: ++ vmovdqu xmm6,XMMWORD[((16-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((144-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((224-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm12,6 ++ vpslld xmm2,xmm12,26 ++ vmovdqu XMMWORD[(0-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm15 ++ ++ vpsrld xmm1,xmm12,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm12,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-128))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm12,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,7 ++ vpandn xmm0,xmm12,xmm14 ++ vpand xmm3,xmm12,xmm13 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm15,xmm8,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm8,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm9,xmm8 ++ ++ vpxor xmm15,xmm15,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm8,13 ++ ++ vpslld xmm2,xmm8,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm15,xmm1 ++ ++ vpsrld xmm1,xmm8,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,10 ++ vpxor xmm15,xmm9,xmm4 ++ vpaddd xmm11,xmm11,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm15,xmm15,xmm5 ++ vpaddd xmm15,xmm15,xmm7 ++ vmovdqu xmm5,XMMWORD[((32-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((160-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((240-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm11,6 ++ vpslld xmm2,xmm11,26 ++ vmovdqu XMMWORD[(16-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm14 ++ ++ vpsrld xmm1,xmm11,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm11,21 ++ vpaddd xmm6,xmm6,XMMWORD[((-96))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm11,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,7 ++ vpandn xmm0,xmm11,xmm13 ++ vpand xmm4,xmm11,xmm12 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm14,xmm15,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm15,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm8,xmm15 ++ ++ vpxor xmm14,xmm14,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm15,13 ++ ++ vpslld xmm2,xmm15,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm14,xmm1 ++ ++ vpsrld xmm1,xmm15,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,10 ++ vpxor xmm14,xmm8,xmm3 ++ vpaddd xmm10,xmm10,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm14,xmm14,xmm6 ++ vpaddd xmm14,xmm14,xmm7 ++ vmovdqu xmm6,XMMWORD[((48-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((176-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((0-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm10,6 ++ vpslld xmm2,xmm10,26 ++ vmovdqu XMMWORD[(32-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm13 ++ ++ vpsrld xmm1,xmm10,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm10,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-64))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm10,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,7 ++ vpandn xmm0,xmm10,xmm12 ++ vpand xmm3,xmm10,xmm11 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm13,xmm14,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm14,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm15,xmm14 ++ ++ vpxor xmm13,xmm13,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm14,13 ++ ++ vpslld xmm2,xmm14,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm13,xmm1 ++ ++ vpsrld xmm1,xmm14,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,10 ++ vpxor xmm13,xmm15,xmm4 ++ vpaddd xmm9,xmm9,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm13,xmm13,xmm5 ++ vpaddd xmm13,xmm13,xmm7 ++ vmovdqu xmm5,XMMWORD[((64-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((192-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((16-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm9,6 ++ vpslld xmm2,xmm9,26 ++ vmovdqu XMMWORD[(48-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm12 ++ ++ vpsrld xmm1,xmm9,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm9,21 ++ vpaddd xmm6,xmm6,XMMWORD[((-32))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm9,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,7 ++ vpandn xmm0,xmm9,xmm11 ++ vpand xmm4,xmm9,xmm10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm12,xmm13,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm13,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm14,xmm13 ++ ++ vpxor xmm12,xmm12,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm13,13 ++ ++ vpslld xmm2,xmm13,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm12,xmm1 ++ ++ vpsrld xmm1,xmm13,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,10 ++ vpxor xmm12,xmm14,xmm3 ++ vpaddd xmm8,xmm8,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm12,xmm12,xmm6 ++ vpaddd xmm12,xmm12,xmm7 ++ vmovdqu xmm6,XMMWORD[((80-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((208-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((32-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm8,6 ++ vpslld xmm2,xmm8,26 ++ vmovdqu XMMWORD[(64-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm11 ++ ++ vpsrld xmm1,xmm8,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm8,21 ++ vpaddd xmm5,xmm5,XMMWORD[rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm8,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,7 ++ vpandn xmm0,xmm8,xmm10 ++ vpand xmm3,xmm8,xmm9 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm11,xmm12,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm12,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm13,xmm12 ++ ++ vpxor xmm11,xmm11,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm12,13 ++ ++ vpslld xmm2,xmm12,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm11,xmm1 ++ ++ vpsrld xmm1,xmm12,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,10 ++ vpxor xmm11,xmm13,xmm4 ++ vpaddd xmm15,xmm15,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm11,xmm11,xmm5 ++ vpaddd xmm11,xmm11,xmm7 ++ vmovdqu xmm5,XMMWORD[((96-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((224-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((48-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm15,6 ++ vpslld xmm2,xmm15,26 ++ vmovdqu XMMWORD[(80-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm10 ++ ++ vpsrld xmm1,xmm15,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm15,21 ++ vpaddd xmm6,xmm6,XMMWORD[32+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm15,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,7 ++ vpandn xmm0,xmm15,xmm9 ++ vpand xmm4,xmm15,xmm8 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm10,xmm11,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm11,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm12,xmm11 ++ ++ vpxor xmm10,xmm10,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm11,13 ++ ++ vpslld xmm2,xmm11,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm10,xmm1 ++ ++ vpsrld xmm1,xmm11,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,10 ++ vpxor xmm10,xmm12,xmm3 ++ vpaddd xmm14,xmm14,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm10,xmm10,xmm6 ++ vpaddd xmm10,xmm10,xmm7 ++ vmovdqu xmm6,XMMWORD[((112-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((240-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((64-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm14,6 ++ vpslld xmm2,xmm14,26 ++ vmovdqu XMMWORD[(96-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm9 ++ ++ vpsrld xmm1,xmm14,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm14,21 ++ vpaddd xmm5,xmm5,XMMWORD[64+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm14,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,7 ++ vpandn xmm0,xmm14,xmm8 ++ vpand xmm3,xmm14,xmm15 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm9,xmm10,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm10,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm11,xmm10 ++ ++ vpxor xmm9,xmm9,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm10,13 ++ ++ vpslld xmm2,xmm10,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm9,xmm1 ++ ++ vpsrld xmm1,xmm10,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,10 ++ vpxor xmm9,xmm11,xmm4 ++ vpaddd xmm13,xmm13,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm9,xmm9,xmm5 ++ vpaddd xmm9,xmm9,xmm7 ++ vmovdqu xmm5,XMMWORD[((128-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((0-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((80-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm13,6 ++ vpslld xmm2,xmm13,26 ++ vmovdqu XMMWORD[(112-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm8 ++ ++ vpsrld xmm1,xmm13,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm13,21 ++ vpaddd xmm6,xmm6,XMMWORD[96+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm13,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,7 ++ vpandn xmm0,xmm13,xmm15 ++ vpand xmm4,xmm13,xmm14 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm8,xmm9,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm9,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm10,xmm9 ++ ++ vpxor xmm8,xmm8,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm9,13 ++ ++ vpslld xmm2,xmm9,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm8,xmm1 ++ ++ vpsrld xmm1,xmm9,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,10 ++ vpxor xmm8,xmm10,xmm3 ++ vpaddd xmm12,xmm12,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm8,xmm8,xmm6 ++ vpaddd xmm8,xmm8,xmm7 ++ add rbp,256 ++ vmovdqu xmm6,XMMWORD[((144-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((16-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((96-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm12,6 ++ vpslld xmm2,xmm12,26 ++ vmovdqu XMMWORD[(128-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm15 ++ ++ vpsrld xmm1,xmm12,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm12,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-128))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm12,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,7 ++ vpandn xmm0,xmm12,xmm14 ++ vpand xmm3,xmm12,xmm13 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm15,xmm8,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm8,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm9,xmm8 ++ ++ vpxor xmm15,xmm15,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm8,13 ++ ++ vpslld xmm2,xmm8,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm15,xmm1 ++ ++ vpsrld xmm1,xmm8,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,10 ++ vpxor xmm15,xmm9,xmm4 ++ vpaddd xmm11,xmm11,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm15,xmm15,xmm5 ++ vpaddd xmm15,xmm15,xmm7 ++ vmovdqu xmm5,XMMWORD[((160-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((32-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((112-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm11,6 ++ vpslld xmm2,xmm11,26 ++ vmovdqu XMMWORD[(144-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm14 ++ ++ vpsrld xmm1,xmm11,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm11,21 ++ vpaddd xmm6,xmm6,XMMWORD[((-96))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm11,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,7 ++ vpandn xmm0,xmm11,xmm13 ++ vpand xmm4,xmm11,xmm12 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm14,xmm15,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm15,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm8,xmm15 ++ ++ vpxor xmm14,xmm14,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm15,13 ++ ++ vpslld xmm2,xmm15,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm14,xmm1 ++ ++ vpsrld xmm1,xmm15,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,10 ++ vpxor xmm14,xmm8,xmm3 ++ vpaddd xmm10,xmm10,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm14,xmm14,xmm6 ++ vpaddd xmm14,xmm14,xmm7 ++ vmovdqu xmm6,XMMWORD[((176-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((48-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((128-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm10,6 ++ vpslld xmm2,xmm10,26 ++ vmovdqu XMMWORD[(160-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm13 ++ ++ vpsrld xmm1,xmm10,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm10,21 ++ vpaddd xmm5,xmm5,XMMWORD[((-64))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm10,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,7 ++ vpandn xmm0,xmm10,xmm12 ++ vpand xmm3,xmm10,xmm11 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm13,xmm14,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm14,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm15,xmm14 ++ ++ vpxor xmm13,xmm13,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm14,13 ++ ++ vpslld xmm2,xmm14,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm13,xmm1 ++ ++ vpsrld xmm1,xmm14,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,10 ++ vpxor xmm13,xmm15,xmm4 ++ vpaddd xmm9,xmm9,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm13,xmm13,xmm5 ++ vpaddd xmm13,xmm13,xmm7 ++ vmovdqu xmm5,XMMWORD[((192-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((64-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((144-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm9,6 ++ vpslld xmm2,xmm9,26 ++ vmovdqu XMMWORD[(176-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm12 ++ ++ vpsrld xmm1,xmm9,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm9,21 ++ vpaddd xmm6,xmm6,XMMWORD[((-32))+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm9,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,7 ++ vpandn xmm0,xmm9,xmm11 ++ vpand xmm4,xmm9,xmm10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm12,xmm13,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm13,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm14,xmm13 ++ ++ vpxor xmm12,xmm12,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm13,13 ++ ++ vpslld xmm2,xmm13,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm12,xmm1 ++ ++ vpsrld xmm1,xmm13,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,10 ++ vpxor xmm12,xmm14,xmm3 ++ vpaddd xmm8,xmm8,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm12,xmm12,xmm6 ++ vpaddd xmm12,xmm12,xmm7 ++ vmovdqu xmm6,XMMWORD[((208-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((80-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((160-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm8,6 ++ vpslld xmm2,xmm8,26 ++ vmovdqu XMMWORD[(192-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm11 ++ ++ vpsrld xmm1,xmm8,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm8,21 ++ vpaddd xmm5,xmm5,XMMWORD[rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm8,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm8,7 ++ vpandn xmm0,xmm8,xmm10 ++ vpand xmm3,xmm8,xmm9 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm11,xmm12,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm12,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm13,xmm12 ++ ++ vpxor xmm11,xmm11,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm12,13 ++ ++ vpslld xmm2,xmm12,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm11,xmm1 ++ ++ vpsrld xmm1,xmm12,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm12,10 ++ vpxor xmm11,xmm13,xmm4 ++ vpaddd xmm15,xmm15,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm11,xmm11,xmm5 ++ vpaddd xmm11,xmm11,xmm7 ++ vmovdqu xmm5,XMMWORD[((224-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((96-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((176-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm15,6 ++ vpslld xmm2,xmm15,26 ++ vmovdqu XMMWORD[(208-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm10 ++ ++ vpsrld xmm1,xmm15,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm15,21 ++ vpaddd xmm6,xmm6,XMMWORD[32+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm15,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm15,7 ++ vpandn xmm0,xmm15,xmm9 ++ vpand xmm4,xmm15,xmm8 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm10,xmm11,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm11,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm12,xmm11 ++ ++ vpxor xmm10,xmm10,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm11,13 ++ ++ vpslld xmm2,xmm11,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm10,xmm1 ++ ++ vpsrld xmm1,xmm11,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm11,10 ++ vpxor xmm10,xmm12,xmm3 ++ vpaddd xmm14,xmm14,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm10,xmm10,xmm6 ++ vpaddd xmm10,xmm10,xmm7 ++ vmovdqu xmm6,XMMWORD[((240-128))+rax] ++ vpaddd xmm5,xmm5,XMMWORD[((112-128))+rax] ++ ++ vpsrld xmm7,xmm6,3 ++ vpsrld xmm1,xmm6,7 ++ vpslld xmm2,xmm6,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm6,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm6,14 ++ vmovdqu xmm0,XMMWORD[((192-128))+rax] ++ vpsrld xmm3,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm5,xmm5,xmm7 ++ vpxor xmm7,xmm3,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm5,xmm5,xmm7 ++ vpsrld xmm7,xmm14,6 ++ vpslld xmm2,xmm14,26 ++ vmovdqu XMMWORD[(224-128)+rax],xmm5 ++ vpaddd xmm5,xmm5,xmm9 ++ ++ vpsrld xmm1,xmm14,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm14,21 ++ vpaddd xmm5,xmm5,XMMWORD[64+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm14,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm14,7 ++ vpandn xmm0,xmm14,xmm8 ++ vpand xmm3,xmm14,xmm15 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm9,xmm10,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm10,30 ++ vpxor xmm0,xmm0,xmm3 ++ vpxor xmm3,xmm11,xmm10 ++ ++ vpxor xmm9,xmm9,xmm1 ++ vpaddd xmm5,xmm5,xmm7 ++ ++ vpsrld xmm1,xmm10,13 ++ ++ vpslld xmm2,xmm10,19 ++ vpaddd xmm5,xmm5,xmm0 ++ vpand xmm4,xmm4,xmm3 ++ ++ vpxor xmm7,xmm9,xmm1 ++ ++ vpsrld xmm1,xmm10,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm10,10 ++ vpxor xmm9,xmm11,xmm4 ++ vpaddd xmm13,xmm13,xmm5 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm9,xmm9,xmm5 ++ vpaddd xmm9,xmm9,xmm7 ++ vmovdqu xmm5,XMMWORD[((0-128))+rax] ++ vpaddd xmm6,xmm6,XMMWORD[((128-128))+rax] ++ ++ vpsrld xmm7,xmm5,3 ++ vpsrld xmm1,xmm5,7 ++ vpslld xmm2,xmm5,25 ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm5,18 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm5,14 ++ vmovdqu xmm0,XMMWORD[((208-128))+rax] ++ vpsrld xmm4,xmm0,10 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpsrld xmm1,xmm0,17 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,15 ++ vpaddd xmm6,xmm6,xmm7 ++ vpxor xmm7,xmm4,xmm1 ++ vpsrld xmm1,xmm0,19 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm0,13 ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ vpaddd xmm6,xmm6,xmm7 ++ vpsrld xmm7,xmm13,6 ++ vpslld xmm2,xmm13,26 ++ vmovdqu XMMWORD[(240-128)+rax],xmm6 ++ vpaddd xmm6,xmm6,xmm8 ++ ++ vpsrld xmm1,xmm13,11 ++ vpxor xmm7,xmm7,xmm2 ++ vpslld xmm2,xmm13,21 ++ vpaddd xmm6,xmm6,XMMWORD[96+rbp] ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm1,xmm13,25 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm13,7 ++ vpandn xmm0,xmm13,xmm15 ++ vpand xmm4,xmm13,xmm14 ++ ++ vpxor xmm7,xmm7,xmm1 ++ ++ vpsrld xmm8,xmm9,2 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm1,xmm9,30 ++ vpxor xmm0,xmm0,xmm4 ++ vpxor xmm4,xmm10,xmm9 ++ ++ vpxor xmm8,xmm8,xmm1 ++ vpaddd xmm6,xmm6,xmm7 ++ ++ vpsrld xmm1,xmm9,13 ++ ++ vpslld xmm2,xmm9,19 ++ vpaddd xmm6,xmm6,xmm0 ++ vpand xmm3,xmm3,xmm4 ++ ++ vpxor xmm7,xmm8,xmm1 ++ ++ vpsrld xmm1,xmm9,22 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpslld xmm2,xmm9,10 ++ vpxor xmm8,xmm10,xmm3 ++ vpaddd xmm12,xmm12,xmm6 ++ ++ vpxor xmm7,xmm7,xmm1 ++ vpxor xmm7,xmm7,xmm2 ++ ++ vpaddd xmm8,xmm8,xmm6 ++ vpaddd xmm8,xmm8,xmm7 ++ add rbp,256 ++ dec ecx ++ jnz NEAR $L$oop_16_xx_avx ++ ++ mov ecx,1 ++ lea rbp,[((K256+128))] ++ cmp ecx,DWORD[rbx] ++ cmovge r8,rbp ++ cmp ecx,DWORD[4+rbx] ++ cmovge r9,rbp ++ cmp ecx,DWORD[8+rbx] ++ cmovge r10,rbp ++ cmp ecx,DWORD[12+rbx] ++ cmovge r11,rbp ++ vmovdqa xmm7,XMMWORD[rbx] ++ vpxor xmm0,xmm0,xmm0 ++ vmovdqa xmm6,xmm7 ++ vpcmpgtd xmm6,xmm6,xmm0 ++ vpaddd xmm7,xmm7,xmm6 ++ ++ vmovdqu xmm0,XMMWORD[((0-128))+rdi] ++ vpand xmm8,xmm8,xmm6 ++ vmovdqu xmm1,XMMWORD[((32-128))+rdi] ++ vpand xmm9,xmm9,xmm6 ++ vmovdqu xmm2,XMMWORD[((64-128))+rdi] ++ vpand xmm10,xmm10,xmm6 ++ vmovdqu xmm5,XMMWORD[((96-128))+rdi] ++ vpand xmm11,xmm11,xmm6 ++ vpaddd xmm8,xmm8,xmm0 ++ vmovdqu xmm0,XMMWORD[((128-128))+rdi] ++ vpand xmm12,xmm12,xmm6 ++ vpaddd xmm9,xmm9,xmm1 ++ vmovdqu xmm1,XMMWORD[((160-128))+rdi] ++ vpand xmm13,xmm13,xmm6 ++ vpaddd xmm10,xmm10,xmm2 ++ vmovdqu xmm2,XMMWORD[((192-128))+rdi] ++ vpand xmm14,xmm14,xmm6 ++ vpaddd xmm11,xmm11,xmm5 ++ vmovdqu xmm5,XMMWORD[((224-128))+rdi] ++ vpand xmm15,xmm15,xmm6 ++ vpaddd xmm12,xmm12,xmm0 ++ vpaddd xmm13,xmm13,xmm1 ++ vmovdqu XMMWORD[(0-128)+rdi],xmm8 ++ vpaddd xmm14,xmm14,xmm2 ++ vmovdqu XMMWORD[(32-128)+rdi],xmm9 ++ vpaddd xmm15,xmm15,xmm5 ++ vmovdqu XMMWORD[(64-128)+rdi],xmm10 ++ vmovdqu XMMWORD[(96-128)+rdi],xmm11 ++ vmovdqu XMMWORD[(128-128)+rdi],xmm12 ++ vmovdqu XMMWORD[(160-128)+rdi],xmm13 ++ vmovdqu XMMWORD[(192-128)+rdi],xmm14 ++ vmovdqu XMMWORD[(224-128)+rdi],xmm15 ++ ++ vmovdqu XMMWORD[rbx],xmm7 ++ vmovdqu xmm6,XMMWORD[$L$pbswap] ++ dec edx ++ jnz NEAR $L$oop_avx ++ ++ mov edx,DWORD[280+rsp] ++ lea rdi,[16+rdi] ++ lea rsi,[64+rsi] ++ dec edx ++ jnz NEAR $L$oop_grande_avx ++ ++$L$done_avx: ++ mov rax,QWORD[272+rsp] ++ vzeroupper ++ movaps xmm6,XMMWORD[((-184))+rax] ++ movaps xmm7,XMMWORD[((-168))+rax] ++ movaps xmm8,XMMWORD[((-152))+rax] ++ movaps xmm9,XMMWORD[((-136))+rax] ++ movaps xmm10,XMMWORD[((-120))+rax] ++ movaps xmm11,XMMWORD[((-104))+rax] ++ movaps xmm12,XMMWORD[((-88))+rax] ++ movaps xmm13,XMMWORD[((-72))+rax] ++ movaps xmm14,XMMWORD[((-56))+rax] ++ movaps xmm15,XMMWORD[((-40))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ lea rsp,[rax] ++$L$epilogue_avx: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_multi_block_avx: ++ ++ALIGN 32 ++sha256_multi_block_avx2: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_multi_block_avx2: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_avx2_shortcut: ++ mov rax,rsp ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ lea rsp,[((-168))+rsp] ++ movaps XMMWORD[rsp],xmm6 ++ movaps XMMWORD[16+rsp],xmm7 ++ movaps XMMWORD[32+rsp],xmm8 ++ movaps XMMWORD[48+rsp],xmm9 ++ movaps XMMWORD[64+rsp],xmm10 ++ movaps XMMWORD[80+rsp],xmm11 ++ movaps XMMWORD[(-120)+rax],xmm12 ++ movaps XMMWORD[(-104)+rax],xmm13 ++ movaps XMMWORD[(-88)+rax],xmm14 ++ movaps XMMWORD[(-72)+rax],xmm15 ++ sub rsp,576 ++ and rsp,-256 ++ mov QWORD[544+rsp],rax ++$L$body_avx2: ++ lea rbp,[((K256+128))] ++ lea rdi,[128+rdi] ++ ++$L$oop_grande_avx2: ++ mov DWORD[552+rsp],edx ++ xor edx,edx ++ lea rbx,[512+rsp] ++ mov r12,QWORD[rsi] ++ mov ecx,DWORD[8+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[rbx],ecx ++ cmovle r12,rbp ++ mov r13,QWORD[16+rsi] ++ mov ecx,DWORD[24+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[4+rbx],ecx ++ cmovle r13,rbp ++ mov r14,QWORD[32+rsi] ++ mov ecx,DWORD[40+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[8+rbx],ecx ++ cmovle r14,rbp ++ mov r15,QWORD[48+rsi] ++ mov ecx,DWORD[56+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[12+rbx],ecx ++ cmovle r15,rbp ++ mov r8,QWORD[64+rsi] ++ mov ecx,DWORD[72+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[16+rbx],ecx ++ cmovle r8,rbp ++ mov r9,QWORD[80+rsi] ++ mov ecx,DWORD[88+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[20+rbx],ecx ++ cmovle r9,rbp ++ mov r10,QWORD[96+rsi] ++ mov ecx,DWORD[104+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[24+rbx],ecx ++ cmovle r10,rbp ++ mov r11,QWORD[112+rsi] ++ mov ecx,DWORD[120+rsi] ++ cmp ecx,edx ++ cmovg edx,ecx ++ test ecx,ecx ++ mov DWORD[28+rbx],ecx ++ cmovle r11,rbp ++ vmovdqu ymm8,YMMWORD[((0-128))+rdi] ++ lea rax,[128+rsp] ++ vmovdqu ymm9,YMMWORD[((32-128))+rdi] ++ lea rbx,[((256+128))+rsp] ++ vmovdqu ymm10,YMMWORD[((64-128))+rdi] ++ vmovdqu ymm11,YMMWORD[((96-128))+rdi] ++ vmovdqu ymm12,YMMWORD[((128-128))+rdi] ++ vmovdqu ymm13,YMMWORD[((160-128))+rdi] ++ vmovdqu ymm14,YMMWORD[((192-128))+rdi] ++ vmovdqu ymm15,YMMWORD[((224-128))+rdi] ++ vmovdqu ymm6,YMMWORD[$L$pbswap] ++ jmp NEAR $L$oop_avx2 ++ ++ALIGN 32 ++$L$oop_avx2: ++ vpxor ymm4,ymm10,ymm9 ++ vmovd xmm5,DWORD[r12] ++ vmovd xmm0,DWORD[r8] ++ vmovd xmm1,DWORD[r13] ++ vmovd xmm2,DWORD[r9] ++ vpinsrd xmm5,xmm5,DWORD[r14],1 ++ vpinsrd xmm0,xmm0,DWORD[r10],1 ++ vpinsrd xmm1,xmm1,DWORD[r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm12,6 ++ vpslld ymm2,ymm12,26 ++ vmovdqu YMMWORD[(0-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm15 ++ ++ vpsrld ymm1,ymm12,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm12,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-128))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm12,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,7 ++ vpandn ymm0,ymm12,ymm14 ++ vpand ymm3,ymm12,ymm13 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm15,ymm8,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm8,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm9,ymm8 ++ ++ vpxor ymm15,ymm15,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm8,13 ++ ++ vpslld ymm2,ymm8,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm15,ymm1 ++ ++ vpsrld ymm1,ymm8,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,10 ++ vpxor ymm15,ymm9,ymm4 ++ vpaddd ymm11,ymm11,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm15,ymm15,ymm5 ++ vpaddd ymm15,ymm15,ymm7 ++ vmovd xmm5,DWORD[4+r12] ++ vmovd xmm0,DWORD[4+r8] ++ vmovd xmm1,DWORD[4+r13] ++ vmovd xmm2,DWORD[4+r9] ++ vpinsrd xmm5,xmm5,DWORD[4+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[4+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[4+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[4+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm11,6 ++ vpslld ymm2,ymm11,26 ++ vmovdqu YMMWORD[(32-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm14 ++ ++ vpsrld ymm1,ymm11,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm11,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-96))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm11,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,7 ++ vpandn ymm0,ymm11,ymm13 ++ vpand ymm4,ymm11,ymm12 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm14,ymm15,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm15,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm8,ymm15 ++ ++ vpxor ymm14,ymm14,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm15,13 ++ ++ vpslld ymm2,ymm15,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm14,ymm1 ++ ++ vpsrld ymm1,ymm15,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,10 ++ vpxor ymm14,ymm8,ymm3 ++ vpaddd ymm10,ymm10,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm14,ymm14,ymm5 ++ vpaddd ymm14,ymm14,ymm7 ++ vmovd xmm5,DWORD[8+r12] ++ vmovd xmm0,DWORD[8+r8] ++ vmovd xmm1,DWORD[8+r13] ++ vmovd xmm2,DWORD[8+r9] ++ vpinsrd xmm5,xmm5,DWORD[8+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[8+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[8+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[8+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm10,6 ++ vpslld ymm2,ymm10,26 ++ vmovdqu YMMWORD[(64-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm13 ++ ++ vpsrld ymm1,ymm10,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm10,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-64))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm10,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,7 ++ vpandn ymm0,ymm10,ymm12 ++ vpand ymm3,ymm10,ymm11 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm13,ymm14,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm14,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm15,ymm14 ++ ++ vpxor ymm13,ymm13,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm14,13 ++ ++ vpslld ymm2,ymm14,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm13,ymm1 ++ ++ vpsrld ymm1,ymm14,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,10 ++ vpxor ymm13,ymm15,ymm4 ++ vpaddd ymm9,ymm9,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm13,ymm13,ymm5 ++ vpaddd ymm13,ymm13,ymm7 ++ vmovd xmm5,DWORD[12+r12] ++ vmovd xmm0,DWORD[12+r8] ++ vmovd xmm1,DWORD[12+r13] ++ vmovd xmm2,DWORD[12+r9] ++ vpinsrd xmm5,xmm5,DWORD[12+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[12+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[12+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[12+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm9,6 ++ vpslld ymm2,ymm9,26 ++ vmovdqu YMMWORD[(96-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm12 ++ ++ vpsrld ymm1,ymm9,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm9,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-32))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm9,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,7 ++ vpandn ymm0,ymm9,ymm11 ++ vpand ymm4,ymm9,ymm10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm12,ymm13,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm13,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm14,ymm13 ++ ++ vpxor ymm12,ymm12,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm13,13 ++ ++ vpslld ymm2,ymm13,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm12,ymm1 ++ ++ vpsrld ymm1,ymm13,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,10 ++ vpxor ymm12,ymm14,ymm3 ++ vpaddd ymm8,ymm8,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm12,ymm12,ymm5 ++ vpaddd ymm12,ymm12,ymm7 ++ vmovd xmm5,DWORD[16+r12] ++ vmovd xmm0,DWORD[16+r8] ++ vmovd xmm1,DWORD[16+r13] ++ vmovd xmm2,DWORD[16+r9] ++ vpinsrd xmm5,xmm5,DWORD[16+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[16+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[16+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[16+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm8,6 ++ vpslld ymm2,ymm8,26 ++ vmovdqu YMMWORD[(128-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm11 ++ ++ vpsrld ymm1,ymm8,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm8,21 ++ vpaddd ymm5,ymm5,YMMWORD[rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm8,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,7 ++ vpandn ymm0,ymm8,ymm10 ++ vpand ymm3,ymm8,ymm9 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm11,ymm12,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm12,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm13,ymm12 ++ ++ vpxor ymm11,ymm11,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm12,13 ++ ++ vpslld ymm2,ymm12,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm11,ymm1 ++ ++ vpsrld ymm1,ymm12,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,10 ++ vpxor ymm11,ymm13,ymm4 ++ vpaddd ymm15,ymm15,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm11,ymm11,ymm5 ++ vpaddd ymm11,ymm11,ymm7 ++ vmovd xmm5,DWORD[20+r12] ++ vmovd xmm0,DWORD[20+r8] ++ vmovd xmm1,DWORD[20+r13] ++ vmovd xmm2,DWORD[20+r9] ++ vpinsrd xmm5,xmm5,DWORD[20+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[20+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[20+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[20+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm15,6 ++ vpslld ymm2,ymm15,26 ++ vmovdqu YMMWORD[(160-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm10 ++ ++ vpsrld ymm1,ymm15,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm15,21 ++ vpaddd ymm5,ymm5,YMMWORD[32+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm15,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,7 ++ vpandn ymm0,ymm15,ymm9 ++ vpand ymm4,ymm15,ymm8 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm10,ymm11,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm11,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm12,ymm11 ++ ++ vpxor ymm10,ymm10,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm11,13 ++ ++ vpslld ymm2,ymm11,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm10,ymm1 ++ ++ vpsrld ymm1,ymm11,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,10 ++ vpxor ymm10,ymm12,ymm3 ++ vpaddd ymm14,ymm14,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm10,ymm10,ymm5 ++ vpaddd ymm10,ymm10,ymm7 ++ vmovd xmm5,DWORD[24+r12] ++ vmovd xmm0,DWORD[24+r8] ++ vmovd xmm1,DWORD[24+r13] ++ vmovd xmm2,DWORD[24+r9] ++ vpinsrd xmm5,xmm5,DWORD[24+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[24+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[24+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[24+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm14,6 ++ vpslld ymm2,ymm14,26 ++ vmovdqu YMMWORD[(192-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm9 ++ ++ vpsrld ymm1,ymm14,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm14,21 ++ vpaddd ymm5,ymm5,YMMWORD[64+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm14,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,7 ++ vpandn ymm0,ymm14,ymm8 ++ vpand ymm3,ymm14,ymm15 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm9,ymm10,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm10,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm11,ymm10 ++ ++ vpxor ymm9,ymm9,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm10,13 ++ ++ vpslld ymm2,ymm10,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm9,ymm1 ++ ++ vpsrld ymm1,ymm10,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,10 ++ vpxor ymm9,ymm11,ymm4 ++ vpaddd ymm13,ymm13,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm9,ymm9,ymm5 ++ vpaddd ymm9,ymm9,ymm7 ++ vmovd xmm5,DWORD[28+r12] ++ vmovd xmm0,DWORD[28+r8] ++ vmovd xmm1,DWORD[28+r13] ++ vmovd xmm2,DWORD[28+r9] ++ vpinsrd xmm5,xmm5,DWORD[28+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[28+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[28+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[28+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm13,6 ++ vpslld ymm2,ymm13,26 ++ vmovdqu YMMWORD[(224-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm8 ++ ++ vpsrld ymm1,ymm13,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm13,21 ++ vpaddd ymm5,ymm5,YMMWORD[96+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm13,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,7 ++ vpandn ymm0,ymm13,ymm15 ++ vpand ymm4,ymm13,ymm14 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm8,ymm9,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm9,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm10,ymm9 ++ ++ vpxor ymm8,ymm8,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm9,13 ++ ++ vpslld ymm2,ymm9,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm8,ymm1 ++ ++ vpsrld ymm1,ymm9,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,10 ++ vpxor ymm8,ymm10,ymm3 ++ vpaddd ymm12,ymm12,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm8,ymm8,ymm5 ++ vpaddd ymm8,ymm8,ymm7 ++ add rbp,256 ++ vmovd xmm5,DWORD[32+r12] ++ vmovd xmm0,DWORD[32+r8] ++ vmovd xmm1,DWORD[32+r13] ++ vmovd xmm2,DWORD[32+r9] ++ vpinsrd xmm5,xmm5,DWORD[32+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[32+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[32+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[32+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm12,6 ++ vpslld ymm2,ymm12,26 ++ vmovdqu YMMWORD[(256-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm15 ++ ++ vpsrld ymm1,ymm12,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm12,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-128))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm12,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,7 ++ vpandn ymm0,ymm12,ymm14 ++ vpand ymm3,ymm12,ymm13 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm15,ymm8,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm8,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm9,ymm8 ++ ++ vpxor ymm15,ymm15,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm8,13 ++ ++ vpslld ymm2,ymm8,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm15,ymm1 ++ ++ vpsrld ymm1,ymm8,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,10 ++ vpxor ymm15,ymm9,ymm4 ++ vpaddd ymm11,ymm11,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm15,ymm15,ymm5 ++ vpaddd ymm15,ymm15,ymm7 ++ vmovd xmm5,DWORD[36+r12] ++ vmovd xmm0,DWORD[36+r8] ++ vmovd xmm1,DWORD[36+r13] ++ vmovd xmm2,DWORD[36+r9] ++ vpinsrd xmm5,xmm5,DWORD[36+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[36+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[36+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[36+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm11,6 ++ vpslld ymm2,ymm11,26 ++ vmovdqu YMMWORD[(288-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm14 ++ ++ vpsrld ymm1,ymm11,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm11,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-96))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm11,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,7 ++ vpandn ymm0,ymm11,ymm13 ++ vpand ymm4,ymm11,ymm12 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm14,ymm15,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm15,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm8,ymm15 ++ ++ vpxor ymm14,ymm14,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm15,13 ++ ++ vpslld ymm2,ymm15,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm14,ymm1 ++ ++ vpsrld ymm1,ymm15,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,10 ++ vpxor ymm14,ymm8,ymm3 ++ vpaddd ymm10,ymm10,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm14,ymm14,ymm5 ++ vpaddd ymm14,ymm14,ymm7 ++ vmovd xmm5,DWORD[40+r12] ++ vmovd xmm0,DWORD[40+r8] ++ vmovd xmm1,DWORD[40+r13] ++ vmovd xmm2,DWORD[40+r9] ++ vpinsrd xmm5,xmm5,DWORD[40+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[40+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[40+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[40+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm10,6 ++ vpslld ymm2,ymm10,26 ++ vmovdqu YMMWORD[(320-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm13 ++ ++ vpsrld ymm1,ymm10,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm10,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-64))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm10,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,7 ++ vpandn ymm0,ymm10,ymm12 ++ vpand ymm3,ymm10,ymm11 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm13,ymm14,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm14,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm15,ymm14 ++ ++ vpxor ymm13,ymm13,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm14,13 ++ ++ vpslld ymm2,ymm14,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm13,ymm1 ++ ++ vpsrld ymm1,ymm14,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,10 ++ vpxor ymm13,ymm15,ymm4 ++ vpaddd ymm9,ymm9,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm13,ymm13,ymm5 ++ vpaddd ymm13,ymm13,ymm7 ++ vmovd xmm5,DWORD[44+r12] ++ vmovd xmm0,DWORD[44+r8] ++ vmovd xmm1,DWORD[44+r13] ++ vmovd xmm2,DWORD[44+r9] ++ vpinsrd xmm5,xmm5,DWORD[44+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[44+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[44+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[44+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm9,6 ++ vpslld ymm2,ymm9,26 ++ vmovdqu YMMWORD[(352-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm12 ++ ++ vpsrld ymm1,ymm9,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm9,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-32))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm9,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,7 ++ vpandn ymm0,ymm9,ymm11 ++ vpand ymm4,ymm9,ymm10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm12,ymm13,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm13,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm14,ymm13 ++ ++ vpxor ymm12,ymm12,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm13,13 ++ ++ vpslld ymm2,ymm13,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm12,ymm1 ++ ++ vpsrld ymm1,ymm13,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,10 ++ vpxor ymm12,ymm14,ymm3 ++ vpaddd ymm8,ymm8,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm12,ymm12,ymm5 ++ vpaddd ymm12,ymm12,ymm7 ++ vmovd xmm5,DWORD[48+r12] ++ vmovd xmm0,DWORD[48+r8] ++ vmovd xmm1,DWORD[48+r13] ++ vmovd xmm2,DWORD[48+r9] ++ vpinsrd xmm5,xmm5,DWORD[48+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[48+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[48+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[48+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm8,6 ++ vpslld ymm2,ymm8,26 ++ vmovdqu YMMWORD[(384-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm11 ++ ++ vpsrld ymm1,ymm8,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm8,21 ++ vpaddd ymm5,ymm5,YMMWORD[rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm8,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,7 ++ vpandn ymm0,ymm8,ymm10 ++ vpand ymm3,ymm8,ymm9 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm11,ymm12,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm12,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm13,ymm12 ++ ++ vpxor ymm11,ymm11,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm12,13 ++ ++ vpslld ymm2,ymm12,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm11,ymm1 ++ ++ vpsrld ymm1,ymm12,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,10 ++ vpxor ymm11,ymm13,ymm4 ++ vpaddd ymm15,ymm15,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm11,ymm11,ymm5 ++ vpaddd ymm11,ymm11,ymm7 ++ vmovd xmm5,DWORD[52+r12] ++ vmovd xmm0,DWORD[52+r8] ++ vmovd xmm1,DWORD[52+r13] ++ vmovd xmm2,DWORD[52+r9] ++ vpinsrd xmm5,xmm5,DWORD[52+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[52+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[52+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[52+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm15,6 ++ vpslld ymm2,ymm15,26 ++ vmovdqu YMMWORD[(416-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm10 ++ ++ vpsrld ymm1,ymm15,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm15,21 ++ vpaddd ymm5,ymm5,YMMWORD[32+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm15,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,7 ++ vpandn ymm0,ymm15,ymm9 ++ vpand ymm4,ymm15,ymm8 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm10,ymm11,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm11,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm12,ymm11 ++ ++ vpxor ymm10,ymm10,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm11,13 ++ ++ vpslld ymm2,ymm11,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm10,ymm1 ++ ++ vpsrld ymm1,ymm11,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,10 ++ vpxor ymm10,ymm12,ymm3 ++ vpaddd ymm14,ymm14,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm10,ymm10,ymm5 ++ vpaddd ymm10,ymm10,ymm7 ++ vmovd xmm5,DWORD[56+r12] ++ vmovd xmm0,DWORD[56+r8] ++ vmovd xmm1,DWORD[56+r13] ++ vmovd xmm2,DWORD[56+r9] ++ vpinsrd xmm5,xmm5,DWORD[56+r14],1 ++ vpinsrd xmm0,xmm0,DWORD[56+r10],1 ++ vpinsrd xmm1,xmm1,DWORD[56+r15],1 ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[56+r11],1 ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm14,6 ++ vpslld ymm2,ymm14,26 ++ vmovdqu YMMWORD[(448-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm9 ++ ++ vpsrld ymm1,ymm14,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm14,21 ++ vpaddd ymm5,ymm5,YMMWORD[64+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm14,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,7 ++ vpandn ymm0,ymm14,ymm8 ++ vpand ymm3,ymm14,ymm15 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm9,ymm10,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm10,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm11,ymm10 ++ ++ vpxor ymm9,ymm9,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm10,13 ++ ++ vpslld ymm2,ymm10,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm9,ymm1 ++ ++ vpsrld ymm1,ymm10,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,10 ++ vpxor ymm9,ymm11,ymm4 ++ vpaddd ymm13,ymm13,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm9,ymm9,ymm5 ++ vpaddd ymm9,ymm9,ymm7 ++ vmovd xmm5,DWORD[60+r12] ++ lea r12,[64+r12] ++ vmovd xmm0,DWORD[60+r8] ++ lea r8,[64+r8] ++ vmovd xmm1,DWORD[60+r13] ++ lea r13,[64+r13] ++ vmovd xmm2,DWORD[60+r9] ++ lea r9,[64+r9] ++ vpinsrd xmm5,xmm5,DWORD[60+r14],1 ++ lea r14,[64+r14] ++ vpinsrd xmm0,xmm0,DWORD[60+r10],1 ++ lea r10,[64+r10] ++ vpinsrd xmm1,xmm1,DWORD[60+r15],1 ++ lea r15,[64+r15] ++ vpunpckldq ymm5,ymm5,ymm1 ++ vpinsrd xmm2,xmm2,DWORD[60+r11],1 ++ lea r11,[64+r11] ++ vpunpckldq ymm0,ymm0,ymm2 ++ vinserti128 ymm5,ymm5,xmm0,1 ++ vpshufb ymm5,ymm5,ymm6 ++ vpsrld ymm7,ymm13,6 ++ vpslld ymm2,ymm13,26 ++ vmovdqu YMMWORD[(480-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm8 ++ ++ vpsrld ymm1,ymm13,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm13,21 ++ vpaddd ymm5,ymm5,YMMWORD[96+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm13,25 ++ vpxor ymm7,ymm7,ymm2 ++ prefetcht0 [63+r12] ++ vpslld ymm2,ymm13,7 ++ vpandn ymm0,ymm13,ymm15 ++ vpand ymm4,ymm13,ymm14 ++ prefetcht0 [63+r13] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm8,ymm9,2 ++ vpxor ymm7,ymm7,ymm2 ++ prefetcht0 [63+r14] ++ vpslld ymm1,ymm9,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm10,ymm9 ++ prefetcht0 [63+r15] ++ vpxor ymm8,ymm8,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm9,13 ++ prefetcht0 [63+r8] ++ vpslld ymm2,ymm9,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ prefetcht0 [63+r9] ++ vpxor ymm7,ymm8,ymm1 ++ ++ vpsrld ymm1,ymm9,22 ++ vpxor ymm7,ymm7,ymm2 ++ prefetcht0 [63+r10] ++ vpslld ymm2,ymm9,10 ++ vpxor ymm8,ymm10,ymm3 ++ vpaddd ymm12,ymm12,ymm5 ++ prefetcht0 [63+r11] ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm8,ymm8,ymm5 ++ vpaddd ymm8,ymm8,ymm7 ++ add rbp,256 ++ vmovdqu ymm5,YMMWORD[((0-128))+rax] ++ mov ecx,3 ++ jmp NEAR $L$oop_16_xx_avx2 ++ALIGN 32 ++$L$oop_16_xx_avx2: ++ vmovdqu ymm6,YMMWORD[((32-128))+rax] ++ vpaddd ymm5,ymm5,YMMWORD[((288-256-128))+rbx] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((448-256-128))+rbx] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm12,6 ++ vpslld ymm2,ymm12,26 ++ vmovdqu YMMWORD[(0-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm15 ++ ++ vpsrld ymm1,ymm12,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm12,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-128))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm12,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,7 ++ vpandn ymm0,ymm12,ymm14 ++ vpand ymm3,ymm12,ymm13 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm15,ymm8,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm8,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm9,ymm8 ++ ++ vpxor ymm15,ymm15,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm8,13 ++ ++ vpslld ymm2,ymm8,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm15,ymm1 ++ ++ vpsrld ymm1,ymm8,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,10 ++ vpxor ymm15,ymm9,ymm4 ++ vpaddd ymm11,ymm11,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm15,ymm15,ymm5 ++ vpaddd ymm15,ymm15,ymm7 ++ vmovdqu ymm5,YMMWORD[((64-128))+rax] ++ vpaddd ymm6,ymm6,YMMWORD[((320-256-128))+rbx] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((480-256-128))+rbx] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm11,6 ++ vpslld ymm2,ymm11,26 ++ vmovdqu YMMWORD[(32-128)+rax],ymm6 ++ vpaddd ymm6,ymm6,ymm14 ++ ++ vpsrld ymm1,ymm11,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm11,21 ++ vpaddd ymm6,ymm6,YMMWORD[((-96))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm11,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,7 ++ vpandn ymm0,ymm11,ymm13 ++ vpand ymm4,ymm11,ymm12 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm14,ymm15,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm15,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm8,ymm15 ++ ++ vpxor ymm14,ymm14,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm15,13 ++ ++ vpslld ymm2,ymm15,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm14,ymm1 ++ ++ vpsrld ymm1,ymm15,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,10 ++ vpxor ymm14,ymm8,ymm3 ++ vpaddd ymm10,ymm10,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm14,ymm14,ymm6 ++ vpaddd ymm14,ymm14,ymm7 ++ vmovdqu ymm6,YMMWORD[((96-128))+rax] ++ vpaddd ymm5,ymm5,YMMWORD[((352-256-128))+rbx] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((0-128))+rax] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm10,6 ++ vpslld ymm2,ymm10,26 ++ vmovdqu YMMWORD[(64-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm13 ++ ++ vpsrld ymm1,ymm10,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm10,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-64))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm10,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,7 ++ vpandn ymm0,ymm10,ymm12 ++ vpand ymm3,ymm10,ymm11 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm13,ymm14,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm14,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm15,ymm14 ++ ++ vpxor ymm13,ymm13,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm14,13 ++ ++ vpslld ymm2,ymm14,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm13,ymm1 ++ ++ vpsrld ymm1,ymm14,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,10 ++ vpxor ymm13,ymm15,ymm4 ++ vpaddd ymm9,ymm9,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm13,ymm13,ymm5 ++ vpaddd ymm13,ymm13,ymm7 ++ vmovdqu ymm5,YMMWORD[((128-128))+rax] ++ vpaddd ymm6,ymm6,YMMWORD[((384-256-128))+rbx] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((32-128))+rax] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm9,6 ++ vpslld ymm2,ymm9,26 ++ vmovdqu YMMWORD[(96-128)+rax],ymm6 ++ vpaddd ymm6,ymm6,ymm12 ++ ++ vpsrld ymm1,ymm9,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm9,21 ++ vpaddd ymm6,ymm6,YMMWORD[((-32))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm9,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,7 ++ vpandn ymm0,ymm9,ymm11 ++ vpand ymm4,ymm9,ymm10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm12,ymm13,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm13,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm14,ymm13 ++ ++ vpxor ymm12,ymm12,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm13,13 ++ ++ vpslld ymm2,ymm13,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm12,ymm1 ++ ++ vpsrld ymm1,ymm13,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,10 ++ vpxor ymm12,ymm14,ymm3 ++ vpaddd ymm8,ymm8,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm12,ymm12,ymm6 ++ vpaddd ymm12,ymm12,ymm7 ++ vmovdqu ymm6,YMMWORD[((160-128))+rax] ++ vpaddd ymm5,ymm5,YMMWORD[((416-256-128))+rbx] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((64-128))+rax] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm8,6 ++ vpslld ymm2,ymm8,26 ++ vmovdqu YMMWORD[(128-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm11 ++ ++ vpsrld ymm1,ymm8,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm8,21 ++ vpaddd ymm5,ymm5,YMMWORD[rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm8,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,7 ++ vpandn ymm0,ymm8,ymm10 ++ vpand ymm3,ymm8,ymm9 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm11,ymm12,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm12,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm13,ymm12 ++ ++ vpxor ymm11,ymm11,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm12,13 ++ ++ vpslld ymm2,ymm12,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm11,ymm1 ++ ++ vpsrld ymm1,ymm12,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,10 ++ vpxor ymm11,ymm13,ymm4 ++ vpaddd ymm15,ymm15,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm11,ymm11,ymm5 ++ vpaddd ymm11,ymm11,ymm7 ++ vmovdqu ymm5,YMMWORD[((192-128))+rax] ++ vpaddd ymm6,ymm6,YMMWORD[((448-256-128))+rbx] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((96-128))+rax] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm15,6 ++ vpslld ymm2,ymm15,26 ++ vmovdqu YMMWORD[(160-128)+rax],ymm6 ++ vpaddd ymm6,ymm6,ymm10 ++ ++ vpsrld ymm1,ymm15,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm15,21 ++ vpaddd ymm6,ymm6,YMMWORD[32+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm15,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,7 ++ vpandn ymm0,ymm15,ymm9 ++ vpand ymm4,ymm15,ymm8 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm10,ymm11,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm11,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm12,ymm11 ++ ++ vpxor ymm10,ymm10,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm11,13 ++ ++ vpslld ymm2,ymm11,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm10,ymm1 ++ ++ vpsrld ymm1,ymm11,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,10 ++ vpxor ymm10,ymm12,ymm3 ++ vpaddd ymm14,ymm14,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm10,ymm10,ymm6 ++ vpaddd ymm10,ymm10,ymm7 ++ vmovdqu ymm6,YMMWORD[((224-128))+rax] ++ vpaddd ymm5,ymm5,YMMWORD[((480-256-128))+rbx] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((128-128))+rax] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm14,6 ++ vpslld ymm2,ymm14,26 ++ vmovdqu YMMWORD[(192-128)+rax],ymm5 ++ vpaddd ymm5,ymm5,ymm9 ++ ++ vpsrld ymm1,ymm14,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm14,21 ++ vpaddd ymm5,ymm5,YMMWORD[64+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm14,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,7 ++ vpandn ymm0,ymm14,ymm8 ++ vpand ymm3,ymm14,ymm15 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm9,ymm10,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm10,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm11,ymm10 ++ ++ vpxor ymm9,ymm9,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm10,13 ++ ++ vpslld ymm2,ymm10,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm9,ymm1 ++ ++ vpsrld ymm1,ymm10,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,10 ++ vpxor ymm9,ymm11,ymm4 ++ vpaddd ymm13,ymm13,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm9,ymm9,ymm5 ++ vpaddd ymm9,ymm9,ymm7 ++ vmovdqu ymm5,YMMWORD[((256-256-128))+rbx] ++ vpaddd ymm6,ymm6,YMMWORD[((0-128))+rax] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((160-128))+rax] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm13,6 ++ vpslld ymm2,ymm13,26 ++ vmovdqu YMMWORD[(224-128)+rax],ymm6 ++ vpaddd ymm6,ymm6,ymm8 ++ ++ vpsrld ymm1,ymm13,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm13,21 ++ vpaddd ymm6,ymm6,YMMWORD[96+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm13,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,7 ++ vpandn ymm0,ymm13,ymm15 ++ vpand ymm4,ymm13,ymm14 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm8,ymm9,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm9,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm10,ymm9 ++ ++ vpxor ymm8,ymm8,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm9,13 ++ ++ vpslld ymm2,ymm9,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm8,ymm1 ++ ++ vpsrld ymm1,ymm9,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,10 ++ vpxor ymm8,ymm10,ymm3 ++ vpaddd ymm12,ymm12,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm8,ymm8,ymm6 ++ vpaddd ymm8,ymm8,ymm7 ++ add rbp,256 ++ vmovdqu ymm6,YMMWORD[((288-256-128))+rbx] ++ vpaddd ymm5,ymm5,YMMWORD[((32-128))+rax] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((192-128))+rax] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm12,6 ++ vpslld ymm2,ymm12,26 ++ vmovdqu YMMWORD[(256-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm15 ++ ++ vpsrld ymm1,ymm12,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm12,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-128))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm12,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,7 ++ vpandn ymm0,ymm12,ymm14 ++ vpand ymm3,ymm12,ymm13 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm15,ymm8,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm8,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm9,ymm8 ++ ++ vpxor ymm15,ymm15,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm8,13 ++ ++ vpslld ymm2,ymm8,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm15,ymm1 ++ ++ vpsrld ymm1,ymm8,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,10 ++ vpxor ymm15,ymm9,ymm4 ++ vpaddd ymm11,ymm11,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm15,ymm15,ymm5 ++ vpaddd ymm15,ymm15,ymm7 ++ vmovdqu ymm5,YMMWORD[((320-256-128))+rbx] ++ vpaddd ymm6,ymm6,YMMWORD[((64-128))+rax] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((224-128))+rax] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm11,6 ++ vpslld ymm2,ymm11,26 ++ vmovdqu YMMWORD[(288-256-128)+rbx],ymm6 ++ vpaddd ymm6,ymm6,ymm14 ++ ++ vpsrld ymm1,ymm11,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm11,21 ++ vpaddd ymm6,ymm6,YMMWORD[((-96))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm11,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,7 ++ vpandn ymm0,ymm11,ymm13 ++ vpand ymm4,ymm11,ymm12 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm14,ymm15,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm15,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm8,ymm15 ++ ++ vpxor ymm14,ymm14,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm15,13 ++ ++ vpslld ymm2,ymm15,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm14,ymm1 ++ ++ vpsrld ymm1,ymm15,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,10 ++ vpxor ymm14,ymm8,ymm3 ++ vpaddd ymm10,ymm10,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm14,ymm14,ymm6 ++ vpaddd ymm14,ymm14,ymm7 ++ vmovdqu ymm6,YMMWORD[((352-256-128))+rbx] ++ vpaddd ymm5,ymm5,YMMWORD[((96-128))+rax] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((256-256-128))+rbx] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm10,6 ++ vpslld ymm2,ymm10,26 ++ vmovdqu YMMWORD[(320-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm13 ++ ++ vpsrld ymm1,ymm10,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm10,21 ++ vpaddd ymm5,ymm5,YMMWORD[((-64))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm10,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,7 ++ vpandn ymm0,ymm10,ymm12 ++ vpand ymm3,ymm10,ymm11 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm13,ymm14,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm14,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm15,ymm14 ++ ++ vpxor ymm13,ymm13,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm14,13 ++ ++ vpslld ymm2,ymm14,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm13,ymm1 ++ ++ vpsrld ymm1,ymm14,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,10 ++ vpxor ymm13,ymm15,ymm4 ++ vpaddd ymm9,ymm9,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm13,ymm13,ymm5 ++ vpaddd ymm13,ymm13,ymm7 ++ vmovdqu ymm5,YMMWORD[((384-256-128))+rbx] ++ vpaddd ymm6,ymm6,YMMWORD[((128-128))+rax] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((288-256-128))+rbx] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm9,6 ++ vpslld ymm2,ymm9,26 ++ vmovdqu YMMWORD[(352-256-128)+rbx],ymm6 ++ vpaddd ymm6,ymm6,ymm12 ++ ++ vpsrld ymm1,ymm9,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm9,21 ++ vpaddd ymm6,ymm6,YMMWORD[((-32))+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm9,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,7 ++ vpandn ymm0,ymm9,ymm11 ++ vpand ymm4,ymm9,ymm10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm12,ymm13,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm13,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm14,ymm13 ++ ++ vpxor ymm12,ymm12,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm13,13 ++ ++ vpslld ymm2,ymm13,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm12,ymm1 ++ ++ vpsrld ymm1,ymm13,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,10 ++ vpxor ymm12,ymm14,ymm3 ++ vpaddd ymm8,ymm8,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm12,ymm12,ymm6 ++ vpaddd ymm12,ymm12,ymm7 ++ vmovdqu ymm6,YMMWORD[((416-256-128))+rbx] ++ vpaddd ymm5,ymm5,YMMWORD[((160-128))+rax] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((320-256-128))+rbx] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm8,6 ++ vpslld ymm2,ymm8,26 ++ vmovdqu YMMWORD[(384-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm11 ++ ++ vpsrld ymm1,ymm8,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm8,21 ++ vpaddd ymm5,ymm5,YMMWORD[rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm8,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm8,7 ++ vpandn ymm0,ymm8,ymm10 ++ vpand ymm3,ymm8,ymm9 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm11,ymm12,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm12,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm13,ymm12 ++ ++ vpxor ymm11,ymm11,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm12,13 ++ ++ vpslld ymm2,ymm12,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm11,ymm1 ++ ++ vpsrld ymm1,ymm12,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm12,10 ++ vpxor ymm11,ymm13,ymm4 ++ vpaddd ymm15,ymm15,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm11,ymm11,ymm5 ++ vpaddd ymm11,ymm11,ymm7 ++ vmovdqu ymm5,YMMWORD[((448-256-128))+rbx] ++ vpaddd ymm6,ymm6,YMMWORD[((192-128))+rax] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((352-256-128))+rbx] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm15,6 ++ vpslld ymm2,ymm15,26 ++ vmovdqu YMMWORD[(416-256-128)+rbx],ymm6 ++ vpaddd ymm6,ymm6,ymm10 ++ ++ vpsrld ymm1,ymm15,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm15,21 ++ vpaddd ymm6,ymm6,YMMWORD[32+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm15,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm15,7 ++ vpandn ymm0,ymm15,ymm9 ++ vpand ymm4,ymm15,ymm8 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm10,ymm11,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm11,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm12,ymm11 ++ ++ vpxor ymm10,ymm10,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm11,13 ++ ++ vpslld ymm2,ymm11,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm10,ymm1 ++ ++ vpsrld ymm1,ymm11,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm11,10 ++ vpxor ymm10,ymm12,ymm3 ++ vpaddd ymm14,ymm14,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm10,ymm10,ymm6 ++ vpaddd ymm10,ymm10,ymm7 ++ vmovdqu ymm6,YMMWORD[((480-256-128))+rbx] ++ vpaddd ymm5,ymm5,YMMWORD[((224-128))+rax] ++ ++ vpsrld ymm7,ymm6,3 ++ vpsrld ymm1,ymm6,7 ++ vpslld ymm2,ymm6,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm6,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm6,14 ++ vmovdqu ymm0,YMMWORD[((384-256-128))+rbx] ++ vpsrld ymm3,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm5,ymm5,ymm7 ++ vpxor ymm7,ymm3,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm5,ymm5,ymm7 ++ vpsrld ymm7,ymm14,6 ++ vpslld ymm2,ymm14,26 ++ vmovdqu YMMWORD[(448-256-128)+rbx],ymm5 ++ vpaddd ymm5,ymm5,ymm9 ++ ++ vpsrld ymm1,ymm14,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm14,21 ++ vpaddd ymm5,ymm5,YMMWORD[64+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm14,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm14,7 ++ vpandn ymm0,ymm14,ymm8 ++ vpand ymm3,ymm14,ymm15 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm9,ymm10,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm10,30 ++ vpxor ymm0,ymm0,ymm3 ++ vpxor ymm3,ymm11,ymm10 ++ ++ vpxor ymm9,ymm9,ymm1 ++ vpaddd ymm5,ymm5,ymm7 ++ ++ vpsrld ymm1,ymm10,13 ++ ++ vpslld ymm2,ymm10,19 ++ vpaddd ymm5,ymm5,ymm0 ++ vpand ymm4,ymm4,ymm3 ++ ++ vpxor ymm7,ymm9,ymm1 ++ ++ vpsrld ymm1,ymm10,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm10,10 ++ vpxor ymm9,ymm11,ymm4 ++ vpaddd ymm13,ymm13,ymm5 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm9,ymm9,ymm5 ++ vpaddd ymm9,ymm9,ymm7 ++ vmovdqu ymm5,YMMWORD[((0-128))+rax] ++ vpaddd ymm6,ymm6,YMMWORD[((256-256-128))+rbx] ++ ++ vpsrld ymm7,ymm5,3 ++ vpsrld ymm1,ymm5,7 ++ vpslld ymm2,ymm5,25 ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm5,18 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm5,14 ++ vmovdqu ymm0,YMMWORD[((416-256-128))+rbx] ++ vpsrld ymm4,ymm0,10 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpsrld ymm1,ymm0,17 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,15 ++ vpaddd ymm6,ymm6,ymm7 ++ vpxor ymm7,ymm4,ymm1 ++ vpsrld ymm1,ymm0,19 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm0,13 ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ vpaddd ymm6,ymm6,ymm7 ++ vpsrld ymm7,ymm13,6 ++ vpslld ymm2,ymm13,26 ++ vmovdqu YMMWORD[(480-256-128)+rbx],ymm6 ++ vpaddd ymm6,ymm6,ymm8 ++ ++ vpsrld ymm1,ymm13,11 ++ vpxor ymm7,ymm7,ymm2 ++ vpslld ymm2,ymm13,21 ++ vpaddd ymm6,ymm6,YMMWORD[96+rbp] ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm1,ymm13,25 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm13,7 ++ vpandn ymm0,ymm13,ymm15 ++ vpand ymm4,ymm13,ymm14 ++ ++ vpxor ymm7,ymm7,ymm1 ++ ++ vpsrld ymm8,ymm9,2 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm1,ymm9,30 ++ vpxor ymm0,ymm0,ymm4 ++ vpxor ymm4,ymm10,ymm9 ++ ++ vpxor ymm8,ymm8,ymm1 ++ vpaddd ymm6,ymm6,ymm7 ++ ++ vpsrld ymm1,ymm9,13 ++ ++ vpslld ymm2,ymm9,19 ++ vpaddd ymm6,ymm6,ymm0 ++ vpand ymm3,ymm3,ymm4 ++ ++ vpxor ymm7,ymm8,ymm1 ++ ++ vpsrld ymm1,ymm9,22 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpslld ymm2,ymm9,10 ++ vpxor ymm8,ymm10,ymm3 ++ vpaddd ymm12,ymm12,ymm6 ++ ++ vpxor ymm7,ymm7,ymm1 ++ vpxor ymm7,ymm7,ymm2 ++ ++ vpaddd ymm8,ymm8,ymm6 ++ vpaddd ymm8,ymm8,ymm7 ++ add rbp,256 ++ dec ecx ++ jnz NEAR $L$oop_16_xx_avx2 ++ ++ mov ecx,1 ++ lea rbx,[512+rsp] ++ lea rbp,[((K256+128))] ++ cmp ecx,DWORD[rbx] ++ cmovge r12,rbp ++ cmp ecx,DWORD[4+rbx] ++ cmovge r13,rbp ++ cmp ecx,DWORD[8+rbx] ++ cmovge r14,rbp ++ cmp ecx,DWORD[12+rbx] ++ cmovge r15,rbp ++ cmp ecx,DWORD[16+rbx] ++ cmovge r8,rbp ++ cmp ecx,DWORD[20+rbx] ++ cmovge r9,rbp ++ cmp ecx,DWORD[24+rbx] ++ cmovge r10,rbp ++ cmp ecx,DWORD[28+rbx] ++ cmovge r11,rbp ++ vmovdqa ymm7,YMMWORD[rbx] ++ vpxor ymm0,ymm0,ymm0 ++ vmovdqa ymm6,ymm7 ++ vpcmpgtd ymm6,ymm6,ymm0 ++ vpaddd ymm7,ymm7,ymm6 ++ ++ vmovdqu ymm0,YMMWORD[((0-128))+rdi] ++ vpand ymm8,ymm8,ymm6 ++ vmovdqu ymm1,YMMWORD[((32-128))+rdi] ++ vpand ymm9,ymm9,ymm6 ++ vmovdqu ymm2,YMMWORD[((64-128))+rdi] ++ vpand ymm10,ymm10,ymm6 ++ vmovdqu ymm5,YMMWORD[((96-128))+rdi] ++ vpand ymm11,ymm11,ymm6 ++ vpaddd ymm8,ymm8,ymm0 ++ vmovdqu ymm0,YMMWORD[((128-128))+rdi] ++ vpand ymm12,ymm12,ymm6 ++ vpaddd ymm9,ymm9,ymm1 ++ vmovdqu ymm1,YMMWORD[((160-128))+rdi] ++ vpand ymm13,ymm13,ymm6 ++ vpaddd ymm10,ymm10,ymm2 ++ vmovdqu ymm2,YMMWORD[((192-128))+rdi] ++ vpand ymm14,ymm14,ymm6 ++ vpaddd ymm11,ymm11,ymm5 ++ vmovdqu ymm5,YMMWORD[((224-128))+rdi] ++ vpand ymm15,ymm15,ymm6 ++ vpaddd ymm12,ymm12,ymm0 ++ vpaddd ymm13,ymm13,ymm1 ++ vmovdqu YMMWORD[(0-128)+rdi],ymm8 ++ vpaddd ymm14,ymm14,ymm2 ++ vmovdqu YMMWORD[(32-128)+rdi],ymm9 ++ vpaddd ymm15,ymm15,ymm5 ++ vmovdqu YMMWORD[(64-128)+rdi],ymm10 ++ vmovdqu YMMWORD[(96-128)+rdi],ymm11 ++ vmovdqu YMMWORD[(128-128)+rdi],ymm12 ++ vmovdqu YMMWORD[(160-128)+rdi],ymm13 ++ vmovdqu YMMWORD[(192-128)+rdi],ymm14 ++ vmovdqu YMMWORD[(224-128)+rdi],ymm15 ++ ++ vmovdqu YMMWORD[rbx],ymm7 ++ lea rbx,[((256+128))+rsp] ++ vmovdqu ymm6,YMMWORD[$L$pbswap] ++ dec edx ++ jnz NEAR $L$oop_avx2 ++ ++ ++ ++ ++ ++ ++ ++$L$done_avx2: ++ mov rax,QWORD[544+rsp] ++ vzeroupper ++ movaps xmm6,XMMWORD[((-216))+rax] ++ movaps xmm7,XMMWORD[((-200))+rax] ++ movaps xmm8,XMMWORD[((-184))+rax] ++ movaps xmm9,XMMWORD[((-168))+rax] ++ movaps xmm10,XMMWORD[((-152))+rax] ++ movaps xmm11,XMMWORD[((-136))+rax] ++ movaps xmm12,XMMWORD[((-120))+rax] ++ movaps xmm13,XMMWORD[((-104))+rax] ++ movaps xmm14,XMMWORD[((-88))+rax] ++ movaps xmm15,XMMWORD[((-72))+rax] ++ mov r15,QWORD[((-48))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov rbx,QWORD[((-8))+rax] ++ lea rsp,[rax] ++$L$epilogue_avx2: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_multi_block_avx2: ++ALIGN 256 ++K256: ++ DD 1116352408,1116352408,1116352408,1116352408 ++ DD 1116352408,1116352408,1116352408,1116352408 ++ DD 1899447441,1899447441,1899447441,1899447441 ++ DD 1899447441,1899447441,1899447441,1899447441 ++ DD 3049323471,3049323471,3049323471,3049323471 ++ DD 3049323471,3049323471,3049323471,3049323471 ++ DD 3921009573,3921009573,3921009573,3921009573 ++ DD 3921009573,3921009573,3921009573,3921009573 ++ DD 961987163,961987163,961987163,961987163 ++ DD 961987163,961987163,961987163,961987163 ++ DD 1508970993,1508970993,1508970993,1508970993 ++ DD 1508970993,1508970993,1508970993,1508970993 ++ DD 2453635748,2453635748,2453635748,2453635748 ++ DD 2453635748,2453635748,2453635748,2453635748 ++ DD 2870763221,2870763221,2870763221,2870763221 ++ DD 2870763221,2870763221,2870763221,2870763221 ++ DD 3624381080,3624381080,3624381080,3624381080 ++ DD 3624381080,3624381080,3624381080,3624381080 ++ DD 310598401,310598401,310598401,310598401 ++ DD 310598401,310598401,310598401,310598401 ++ DD 607225278,607225278,607225278,607225278 ++ DD 607225278,607225278,607225278,607225278 ++ DD 1426881987,1426881987,1426881987,1426881987 ++ DD 1426881987,1426881987,1426881987,1426881987 ++ DD 1925078388,1925078388,1925078388,1925078388 ++ DD 1925078388,1925078388,1925078388,1925078388 ++ DD 2162078206,2162078206,2162078206,2162078206 ++ DD 2162078206,2162078206,2162078206,2162078206 ++ DD 2614888103,2614888103,2614888103,2614888103 ++ DD 2614888103,2614888103,2614888103,2614888103 ++ DD 3248222580,3248222580,3248222580,3248222580 ++ DD 3248222580,3248222580,3248222580,3248222580 ++ DD 3835390401,3835390401,3835390401,3835390401 ++ DD 3835390401,3835390401,3835390401,3835390401 ++ DD 4022224774,4022224774,4022224774,4022224774 ++ DD 4022224774,4022224774,4022224774,4022224774 ++ DD 264347078,264347078,264347078,264347078 ++ DD 264347078,264347078,264347078,264347078 ++ DD 604807628,604807628,604807628,604807628 ++ DD 604807628,604807628,604807628,604807628 ++ DD 770255983,770255983,770255983,770255983 ++ DD 770255983,770255983,770255983,770255983 ++ DD 1249150122,1249150122,1249150122,1249150122 ++ DD 1249150122,1249150122,1249150122,1249150122 ++ DD 1555081692,1555081692,1555081692,1555081692 ++ DD 1555081692,1555081692,1555081692,1555081692 ++ DD 1996064986,1996064986,1996064986,1996064986 ++ DD 1996064986,1996064986,1996064986,1996064986 ++ DD 2554220882,2554220882,2554220882,2554220882 ++ DD 2554220882,2554220882,2554220882,2554220882 ++ DD 2821834349,2821834349,2821834349,2821834349 ++ DD 2821834349,2821834349,2821834349,2821834349 ++ DD 2952996808,2952996808,2952996808,2952996808 ++ DD 2952996808,2952996808,2952996808,2952996808 ++ DD 3210313671,3210313671,3210313671,3210313671 ++ DD 3210313671,3210313671,3210313671,3210313671 ++ DD 3336571891,3336571891,3336571891,3336571891 ++ DD 3336571891,3336571891,3336571891,3336571891 ++ DD 3584528711,3584528711,3584528711,3584528711 ++ DD 3584528711,3584528711,3584528711,3584528711 ++ DD 113926993,113926993,113926993,113926993 ++ DD 113926993,113926993,113926993,113926993 ++ DD 338241895,338241895,338241895,338241895 ++ DD 338241895,338241895,338241895,338241895 ++ DD 666307205,666307205,666307205,666307205 ++ DD 666307205,666307205,666307205,666307205 ++ DD 773529912,773529912,773529912,773529912 ++ DD 773529912,773529912,773529912,773529912 ++ DD 1294757372,1294757372,1294757372,1294757372 ++ DD 1294757372,1294757372,1294757372,1294757372 ++ DD 1396182291,1396182291,1396182291,1396182291 ++ DD 1396182291,1396182291,1396182291,1396182291 ++ DD 1695183700,1695183700,1695183700,1695183700 ++ DD 1695183700,1695183700,1695183700,1695183700 ++ DD 1986661051,1986661051,1986661051,1986661051 ++ DD 1986661051,1986661051,1986661051,1986661051 ++ DD 2177026350,2177026350,2177026350,2177026350 ++ DD 2177026350,2177026350,2177026350,2177026350 ++ DD 2456956037,2456956037,2456956037,2456956037 ++ DD 2456956037,2456956037,2456956037,2456956037 ++ DD 2730485921,2730485921,2730485921,2730485921 ++ DD 2730485921,2730485921,2730485921,2730485921 ++ DD 2820302411,2820302411,2820302411,2820302411 ++ DD 2820302411,2820302411,2820302411,2820302411 ++ DD 3259730800,3259730800,3259730800,3259730800 ++ DD 3259730800,3259730800,3259730800,3259730800 ++ DD 3345764771,3345764771,3345764771,3345764771 ++ DD 3345764771,3345764771,3345764771,3345764771 ++ DD 3516065817,3516065817,3516065817,3516065817 ++ DD 3516065817,3516065817,3516065817,3516065817 ++ DD 3600352804,3600352804,3600352804,3600352804 ++ DD 3600352804,3600352804,3600352804,3600352804 ++ DD 4094571909,4094571909,4094571909,4094571909 ++ DD 4094571909,4094571909,4094571909,4094571909 ++ DD 275423344,275423344,275423344,275423344 ++ DD 275423344,275423344,275423344,275423344 ++ DD 430227734,430227734,430227734,430227734 ++ DD 430227734,430227734,430227734,430227734 ++ DD 506948616,506948616,506948616,506948616 ++ DD 506948616,506948616,506948616,506948616 ++ DD 659060556,659060556,659060556,659060556 ++ DD 659060556,659060556,659060556,659060556 ++ DD 883997877,883997877,883997877,883997877 ++ DD 883997877,883997877,883997877,883997877 ++ DD 958139571,958139571,958139571,958139571 ++ DD 958139571,958139571,958139571,958139571 ++ DD 1322822218,1322822218,1322822218,1322822218 ++ DD 1322822218,1322822218,1322822218,1322822218 ++ DD 1537002063,1537002063,1537002063,1537002063 ++ DD 1537002063,1537002063,1537002063,1537002063 ++ DD 1747873779,1747873779,1747873779,1747873779 ++ DD 1747873779,1747873779,1747873779,1747873779 ++ DD 1955562222,1955562222,1955562222,1955562222 ++ DD 1955562222,1955562222,1955562222,1955562222 ++ DD 2024104815,2024104815,2024104815,2024104815 ++ DD 2024104815,2024104815,2024104815,2024104815 ++ DD 2227730452,2227730452,2227730452,2227730452 ++ DD 2227730452,2227730452,2227730452,2227730452 ++ DD 2361852424,2361852424,2361852424,2361852424 ++ DD 2361852424,2361852424,2361852424,2361852424 ++ DD 2428436474,2428436474,2428436474,2428436474 ++ DD 2428436474,2428436474,2428436474,2428436474 ++ DD 2756734187,2756734187,2756734187,2756734187 ++ DD 2756734187,2756734187,2756734187,2756734187 ++ DD 3204031479,3204031479,3204031479,3204031479 ++ DD 3204031479,3204031479,3204031479,3204031479 ++ DD 3329325298,3329325298,3329325298,3329325298 ++ DD 3329325298,3329325298,3329325298,3329325298 ++$L$pbswap: ++ DD 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f ++ DD 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f ++K256_shaext: ++ DD 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 ++ DD 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 ++ DD 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 ++ DD 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 ++ DD 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc ++ DD 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da ++ DD 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 ++ DD 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 ++ DD 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 ++ DD 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 ++ DD 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 ++ DD 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 ++ DD 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 ++ DD 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 ++ DD 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 ++ DD 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 ++DB 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111 ++DB 99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114 ++DB 32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71 ++DB 65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112 ++DB 101,110,115,115,108,46,111,114,103,62,0 ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$in_prologue ++ ++ mov rax,QWORD[272+rax] ++ ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ ++ lea rsi,[((-24-160))+rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ ++$L$in_prologue: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++avx2_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$in_prologue ++ ++ mov rax,QWORD[544+r8] ++ ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov r15,QWORD[((-48))+rax] ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ mov QWORD[216+r8],r12 ++ mov QWORD[224+r8],r13 ++ mov QWORD[232+r8],r14 ++ mov QWORD[240+r8],r15 ++ ++ lea rsi,[((-56-160))+rax] ++ lea rdi,[512+r8] ++ mov ecx,20 ++ DD 0xa548f3fc ++ ++ jmp NEAR $L$in_prologue ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_sha256_multi_block wrt ..imagebase ++ DD $L$SEH_end_sha256_multi_block wrt ..imagebase ++ DD $L$SEH_info_sha256_multi_block wrt ..imagebase ++ DD $L$SEH_begin_sha256_multi_block_shaext wrt ..imagebase ++ DD $L$SEH_end_sha256_multi_block_shaext wrt ..imagebase ++ DD $L$SEH_info_sha256_multi_block_shaext wrt ..imagebase ++ DD $L$SEH_begin_sha256_multi_block_avx wrt ..imagebase ++ DD $L$SEH_end_sha256_multi_block_avx wrt ..imagebase ++ DD $L$SEH_info_sha256_multi_block_avx wrt ..imagebase ++ DD $L$SEH_begin_sha256_multi_block_avx2 wrt ..imagebase ++ DD $L$SEH_end_sha256_multi_block_avx2 wrt ..imagebase ++ DD $L$SEH_info_sha256_multi_block_avx2 wrt ..imagebase ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_info_sha256_multi_block: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$body wrt ..imagebase,$L$epilogue wrt ..imagebase ++$L$SEH_info_sha256_multi_block_shaext: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$body_shaext wrt ..imagebase,$L$epilogue_shaext wrt ..imagebase ++$L$SEH_info_sha256_multi_block_avx: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$body_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase ++$L$SEH_info_sha256_multi_block_avx2: ++DB 9,0,0,0 ++ DD avx2_handler wrt ..imagebase ++ DD $L$body_avx2 wrt ..imagebase,$L$epilogue_avx2 wrt ..imagebase +diff --git a/SMP/lib/accelerated/x86/coff/sha256-ssse3-x86.asm b/SMP/lib/accelerated/x86/coff/sha256-ssse3-x86.asm +new file mode 100644 +index 0000000..0db7ba8 +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/sha256-ssse3-x86.asm +@@ -0,0 +1,3356 @@ ++%ifidn __OUTPUT_FORMAT__,obj ++section code use32 class=code align=64 ++%elifidn __OUTPUT_FORMAT__,win32 ++%ifndef __YASM_VER__ ++$@feat.00 equ 1 ++%endif ++section .text code align=64 ++%else ++section .text code ++%endif ++;extern __gnutls_x86_cpuid_s ++global _sha256_block_data_order ++align 16 ++_sha256_block_data_order: ++L$_sha256_block_data_order_begin: ++ push ebp ++ push ebx ++ push esi ++ push edi ++ mov esi,DWORD [20+esp] ++ mov edi,DWORD [24+esp] ++ mov eax,DWORD [28+esp] ++ mov ebx,esp ++ call L$000pic_point ++L$000pic_point: ++ pop ebp ++ lea ebp,[(L$001K256-L$000pic_point)+ebp] ++ sub esp,16 ++ and esp,-64 ++ shl eax,6 ++ add eax,edi ++ mov DWORD [esp],esi ++ mov DWORD [4+esp],edi ++ mov DWORD [8+esp],eax ++ mov DWORD [12+esp],ebx ++ jmp NEAR L$002loop ++align 16 ++L$002loop: ++ mov eax,DWORD [edi] ++ mov ebx,DWORD [4+edi] ++ mov ecx,DWORD [8+edi] ++ bswap eax ++ mov edx,DWORD [12+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ mov eax,DWORD [16+edi] ++ mov ebx,DWORD [20+edi] ++ mov ecx,DWORD [24+edi] ++ bswap eax ++ mov edx,DWORD [28+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ mov eax,DWORD [32+edi] ++ mov ebx,DWORD [36+edi] ++ mov ecx,DWORD [40+edi] ++ bswap eax ++ mov edx,DWORD [44+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ mov eax,DWORD [48+edi] ++ mov ebx,DWORD [52+edi] ++ mov ecx,DWORD [56+edi] ++ bswap eax ++ mov edx,DWORD [60+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ add edi,64 ++ lea esp,[esp-36] ++ mov DWORD [104+esp],edi ++ mov eax,DWORD [esi] ++ mov ebx,DWORD [4+esi] ++ mov ecx,DWORD [8+esi] ++ mov edi,DWORD [12+esi] ++ mov DWORD [8+esp],ebx ++ xor ebx,ecx ++ mov DWORD [12+esp],ecx ++ mov DWORD [16+esp],edi ++ mov DWORD [esp],ebx ++ mov edx,DWORD [16+esi] ++ mov ebx,DWORD [20+esi] ++ mov ecx,DWORD [24+esi] ++ mov edi,DWORD [28+esi] ++ mov DWORD [24+esp],ebx ++ mov DWORD [28+esp],ecx ++ mov DWORD [32+esp],edi ++align 16 ++L$00300_15: ++ mov ecx,edx ++ mov esi,DWORD [24+esp] ++ ror ecx,14 ++ mov edi,DWORD [28+esp] ++ xor ecx,edx ++ xor esi,edi ++ mov ebx,DWORD [96+esp] ++ ror ecx,5 ++ and esi,edx ++ mov DWORD [20+esp],edx ++ xor edx,ecx ++ add ebx,DWORD [32+esp] ++ xor esi,edi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,esi ++ ror ecx,9 ++ add ebx,edx ++ mov edi,DWORD [8+esp] ++ xor ecx,eax ++ mov DWORD [4+esp],eax ++ lea esp,[esp-4] ++ ror ecx,11 ++ mov esi,DWORD [ebp] ++ xor ecx,eax ++ mov edx,DWORD [20+esp] ++ xor eax,edi ++ ror ecx,2 ++ add ebx,esi ++ mov DWORD [esp],eax ++ add edx,ebx ++ and eax,DWORD [4+esp] ++ add ebx,ecx ++ xor eax,edi ++ add ebp,4 ++ add eax,ebx ++ cmp esi,3248222580 ++ jne NEAR L$00300_15 ++ mov ecx,DWORD [156+esp] ++ jmp NEAR L$00416_63 ++align 16 ++L$00416_63: ++ mov ebx,ecx ++ mov esi,DWORD [104+esp] ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [160+esp] ++ shr edi,10 ++ add ebx,DWORD [124+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [24+esp] ++ ror ecx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor ecx,edx ++ xor esi,edi ++ mov DWORD [96+esp],ebx ++ ror ecx,5 ++ and esi,edx ++ mov DWORD [20+esp],edx ++ xor edx,ecx ++ add ebx,DWORD [32+esp] ++ xor esi,edi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,esi ++ ror ecx,9 ++ add ebx,edx ++ mov edi,DWORD [8+esp] ++ xor ecx,eax ++ mov DWORD [4+esp],eax ++ lea esp,[esp-4] ++ ror ecx,11 ++ mov esi,DWORD [ebp] ++ xor ecx,eax ++ mov edx,DWORD [20+esp] ++ xor eax,edi ++ ror ecx,2 ++ add ebx,esi ++ mov DWORD [esp],eax ++ add edx,ebx ++ and eax,DWORD [4+esp] ++ add ebx,ecx ++ xor eax,edi ++ mov ecx,DWORD [156+esp] ++ add ebp,4 ++ add eax,ebx ++ cmp esi,3329325298 ++ jne NEAR L$00416_63 ++ mov esi,DWORD [356+esp] ++ mov ebx,DWORD [8+esp] ++ mov ecx,DWORD [16+esp] ++ add eax,DWORD [esi] ++ add ebx,DWORD [4+esi] ++ add edi,DWORD [8+esi] ++ add ecx,DWORD [12+esi] ++ mov DWORD [esi],eax ++ mov DWORD [4+esi],ebx ++ mov DWORD [8+esi],edi ++ mov DWORD [12+esi],ecx ++ mov eax,DWORD [24+esp] ++ mov ebx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ mov edi,DWORD [360+esp] ++ add edx,DWORD [16+esi] ++ add eax,DWORD [20+esi] ++ add ebx,DWORD [24+esi] ++ add ecx,DWORD [28+esi] ++ mov DWORD [16+esi],edx ++ mov DWORD [20+esi],eax ++ mov DWORD [24+esi],ebx ++ mov DWORD [28+esi],ecx ++ lea esp,[356+esp] ++ sub ebp,256 ++ cmp edi,DWORD [8+esp] ++ jb NEAR L$002loop ++ mov esp,DWORD [12+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++align 32 ++L$005loop_shrd: ++ mov eax,DWORD [edi] ++ mov ebx,DWORD [4+edi] ++ mov ecx,DWORD [8+edi] ++ bswap eax ++ mov edx,DWORD [12+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ mov eax,DWORD [16+edi] ++ mov ebx,DWORD [20+edi] ++ mov ecx,DWORD [24+edi] ++ bswap eax ++ mov edx,DWORD [28+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ mov eax,DWORD [32+edi] ++ mov ebx,DWORD [36+edi] ++ mov ecx,DWORD [40+edi] ++ bswap eax ++ mov edx,DWORD [44+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ mov eax,DWORD [48+edi] ++ mov ebx,DWORD [52+edi] ++ mov ecx,DWORD [56+edi] ++ bswap eax ++ mov edx,DWORD [60+edi] ++ bswap ebx ++ push eax ++ bswap ecx ++ push ebx ++ bswap edx ++ push ecx ++ push edx ++ add edi,64 ++ lea esp,[esp-36] ++ mov DWORD [104+esp],edi ++ mov eax,DWORD [esi] ++ mov ebx,DWORD [4+esi] ++ mov ecx,DWORD [8+esi] ++ mov edi,DWORD [12+esi] ++ mov DWORD [8+esp],ebx ++ xor ebx,ecx ++ mov DWORD [12+esp],ecx ++ mov DWORD [16+esp],edi ++ mov DWORD [esp],ebx ++ mov edx,DWORD [16+esi] ++ mov ebx,DWORD [20+esi] ++ mov ecx,DWORD [24+esi] ++ mov edi,DWORD [28+esi] ++ mov DWORD [24+esp],ebx ++ mov DWORD [28+esp],ecx ++ mov DWORD [32+esp],edi ++align 16 ++L$00600_15_shrd: ++ mov ecx,edx ++ mov esi,DWORD [24+esp] ++ shrd ecx,ecx,14 ++ mov edi,DWORD [28+esp] ++ xor ecx,edx ++ xor esi,edi ++ mov ebx,DWORD [96+esp] ++ shrd ecx,ecx,5 ++ and esi,edx ++ mov DWORD [20+esp],edx ++ xor edx,ecx ++ add ebx,DWORD [32+esp] ++ xor esi,edi ++ shrd edx,edx,6 ++ mov ecx,eax ++ add ebx,esi ++ shrd ecx,ecx,9 ++ add ebx,edx ++ mov edi,DWORD [8+esp] ++ xor ecx,eax ++ mov DWORD [4+esp],eax ++ lea esp,[esp-4] ++ shrd ecx,ecx,11 ++ mov esi,DWORD [ebp] ++ xor ecx,eax ++ mov edx,DWORD [20+esp] ++ xor eax,edi ++ shrd ecx,ecx,2 ++ add ebx,esi ++ mov DWORD [esp],eax ++ add edx,ebx ++ and eax,DWORD [4+esp] ++ add ebx,ecx ++ xor eax,edi ++ add ebp,4 ++ add eax,ebx ++ cmp esi,3248222580 ++ jne NEAR L$00600_15_shrd ++ mov ecx,DWORD [156+esp] ++ jmp NEAR L$00716_63_shrd ++align 16 ++L$00716_63_shrd: ++ mov ebx,ecx ++ mov esi,DWORD [104+esp] ++ shrd ecx,ecx,11 ++ mov edi,esi ++ shrd esi,esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ shrd ecx,ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ shrd esi,esi,17 ++ add ebx,DWORD [160+esp] ++ shr edi,10 ++ add ebx,DWORD [124+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [24+esp] ++ shrd ecx,ecx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor ecx,edx ++ xor esi,edi ++ mov DWORD [96+esp],ebx ++ shrd ecx,ecx,5 ++ and esi,edx ++ mov DWORD [20+esp],edx ++ xor edx,ecx ++ add ebx,DWORD [32+esp] ++ xor esi,edi ++ shrd edx,edx,6 ++ mov ecx,eax ++ add ebx,esi ++ shrd ecx,ecx,9 ++ add ebx,edx ++ mov edi,DWORD [8+esp] ++ xor ecx,eax ++ mov DWORD [4+esp],eax ++ lea esp,[esp-4] ++ shrd ecx,ecx,11 ++ mov esi,DWORD [ebp] ++ xor ecx,eax ++ mov edx,DWORD [20+esp] ++ xor eax,edi ++ shrd ecx,ecx,2 ++ add ebx,esi ++ mov DWORD [esp],eax ++ add edx,ebx ++ and eax,DWORD [4+esp] ++ add ebx,ecx ++ xor eax,edi ++ mov ecx,DWORD [156+esp] ++ add ebp,4 ++ add eax,ebx ++ cmp esi,3329325298 ++ jne NEAR L$00716_63_shrd ++ mov esi,DWORD [356+esp] ++ mov ebx,DWORD [8+esp] ++ mov ecx,DWORD [16+esp] ++ add eax,DWORD [esi] ++ add ebx,DWORD [4+esi] ++ add edi,DWORD [8+esi] ++ add ecx,DWORD [12+esi] ++ mov DWORD [esi],eax ++ mov DWORD [4+esi],ebx ++ mov DWORD [8+esi],edi ++ mov DWORD [12+esi],ecx ++ mov eax,DWORD [24+esp] ++ mov ebx,DWORD [28+esp] ++ mov ecx,DWORD [32+esp] ++ mov edi,DWORD [360+esp] ++ add edx,DWORD [16+esi] ++ add eax,DWORD [20+esi] ++ add ebx,DWORD [24+esi] ++ add ecx,DWORD [28+esi] ++ mov DWORD [16+esi],edx ++ mov DWORD [20+esi],eax ++ mov DWORD [24+esi],ebx ++ mov DWORD [28+esi],ecx ++ lea esp,[356+esp] ++ sub ebp,256 ++ cmp edi,DWORD [8+esp] ++ jb NEAR L$005loop_shrd ++ mov esp,DWORD [12+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++align 64 ++L$001K256: ++dd 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298 ++dd 66051,67438087,134810123,202182159 ++db 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 ++db 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 ++db 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 ++db 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 ++db 62,0 ++align 16 ++L$008unrolled: ++ lea esp,[esp-96] ++ mov eax,DWORD [esi] ++ mov ebp,DWORD [4+esi] ++ mov ecx,DWORD [8+esi] ++ mov ebx,DWORD [12+esi] ++ mov DWORD [4+esp],ebp ++ xor ebp,ecx ++ mov DWORD [8+esp],ecx ++ mov DWORD [12+esp],ebx ++ mov edx,DWORD [16+esi] ++ mov ebx,DWORD [20+esi] ++ mov ecx,DWORD [24+esi] ++ mov esi,DWORD [28+esi] ++ mov DWORD [20+esp],ebx ++ mov DWORD [24+esp],ecx ++ mov DWORD [28+esp],esi ++ jmp NEAR L$009grand_loop ++align 16 ++L$009grand_loop: ++ mov ebx,DWORD [edi] ++ mov ecx,DWORD [4+edi] ++ bswap ebx ++ mov esi,DWORD [8+edi] ++ bswap ecx ++ mov DWORD [32+esp],ebx ++ bswap esi ++ mov DWORD [36+esp],ecx ++ mov DWORD [40+esp],esi ++ mov ebx,DWORD [12+edi] ++ mov ecx,DWORD [16+edi] ++ bswap ebx ++ mov esi,DWORD [20+edi] ++ bswap ecx ++ mov DWORD [44+esp],ebx ++ bswap esi ++ mov DWORD [48+esp],ecx ++ mov DWORD [52+esp],esi ++ mov ebx,DWORD [24+edi] ++ mov ecx,DWORD [28+edi] ++ bswap ebx ++ mov esi,DWORD [32+edi] ++ bswap ecx ++ mov DWORD [56+esp],ebx ++ bswap esi ++ mov DWORD [60+esp],ecx ++ mov DWORD [64+esp],esi ++ mov ebx,DWORD [36+edi] ++ mov ecx,DWORD [40+edi] ++ bswap ebx ++ mov esi,DWORD [44+edi] ++ bswap ecx ++ mov DWORD [68+esp],ebx ++ bswap esi ++ mov DWORD [72+esp],ecx ++ mov DWORD [76+esp],esi ++ mov ebx,DWORD [48+edi] ++ mov ecx,DWORD [52+edi] ++ bswap ebx ++ mov esi,DWORD [56+edi] ++ bswap ecx ++ mov DWORD [80+esp],ebx ++ bswap esi ++ mov DWORD [84+esp],ecx ++ mov DWORD [88+esp],esi ++ mov ebx,DWORD [60+edi] ++ add edi,64 ++ bswap ebx ++ mov DWORD [100+esp],edi ++ mov DWORD [92+esp],ebx ++ mov ecx,edx ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov ebx,DWORD [32+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1116352408+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov ebx,DWORD [36+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1899447441+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov ebx,DWORD [40+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3049323471+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov ebx,DWORD [44+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3921009573+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov ebx,DWORD [48+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[961987163+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov ebx,DWORD [52+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1508970993+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov ebx,DWORD [56+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2453635748+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov ebx,DWORD [60+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2870763221+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov ebx,DWORD [64+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3624381080+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov ebx,DWORD [68+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[310598401+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov ebx,DWORD [72+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[607225278+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov ebx,DWORD [76+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1426881987+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov ebx,DWORD [80+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1925078388+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov ebx,DWORD [84+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2162078206+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov ecx,edx ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov ebx,DWORD [88+esp] ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2614888103+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov esi,edx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov ebx,DWORD [92+esp] ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3248222580+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [36+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [88+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [32+esp] ++ shr edi,10 ++ add ebx,DWORD [68+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov DWORD [32+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3835390401+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [40+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov ecx,DWORD [92+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [36+esp] ++ shr edi,10 ++ add ebx,DWORD [72+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov DWORD [36+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[4022224774+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [44+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov esi,DWORD [32+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [40+esp] ++ shr edi,10 ++ add ebx,DWORD [76+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov DWORD [40+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[264347078+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [48+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov ecx,DWORD [36+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [44+esp] ++ shr edi,10 ++ add ebx,DWORD [80+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov DWORD [44+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[604807628+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [52+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov esi,DWORD [40+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [48+esp] ++ shr edi,10 ++ add ebx,DWORD [84+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov DWORD [48+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[770255983+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [56+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov ecx,DWORD [44+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [52+esp] ++ shr edi,10 ++ add ebx,DWORD [88+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov DWORD [52+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1249150122+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [60+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov esi,DWORD [48+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [56+esp] ++ shr edi,10 ++ add ebx,DWORD [92+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov DWORD [56+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1555081692+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [64+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov ecx,DWORD [52+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [60+esp] ++ shr edi,10 ++ add ebx,DWORD [32+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov DWORD [60+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1996064986+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [68+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [56+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [64+esp] ++ shr edi,10 ++ add ebx,DWORD [36+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov DWORD [64+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2554220882+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [72+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov ecx,DWORD [60+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [68+esp] ++ shr edi,10 ++ add ebx,DWORD [40+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov DWORD [68+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2821834349+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [76+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov esi,DWORD [64+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [72+esp] ++ shr edi,10 ++ add ebx,DWORD [44+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov DWORD [72+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2952996808+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [80+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov ecx,DWORD [68+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [76+esp] ++ shr edi,10 ++ add ebx,DWORD [48+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov DWORD [76+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3210313671+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [84+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov esi,DWORD [72+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [80+esp] ++ shr edi,10 ++ add ebx,DWORD [52+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov DWORD [80+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3336571891+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [88+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov ecx,DWORD [76+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [84+esp] ++ shr edi,10 ++ add ebx,DWORD [56+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov DWORD [84+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3584528711+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [92+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov esi,DWORD [80+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [88+esp] ++ shr edi,10 ++ add ebx,DWORD [60+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov DWORD [88+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[113926993+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [32+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov ecx,DWORD [84+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [92+esp] ++ shr edi,10 ++ add ebx,DWORD [64+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov DWORD [92+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[338241895+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [36+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [88+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [32+esp] ++ shr edi,10 ++ add ebx,DWORD [68+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov DWORD [32+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[666307205+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [40+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov ecx,DWORD [92+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [36+esp] ++ shr edi,10 ++ add ebx,DWORD [72+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov DWORD [36+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[773529912+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [44+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov esi,DWORD [32+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [40+esp] ++ shr edi,10 ++ add ebx,DWORD [76+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov DWORD [40+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1294757372+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [48+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov ecx,DWORD [36+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [44+esp] ++ shr edi,10 ++ add ebx,DWORD [80+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov DWORD [44+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1396182291+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [52+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov esi,DWORD [40+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [48+esp] ++ shr edi,10 ++ add ebx,DWORD [84+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov DWORD [48+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1695183700+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [56+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov ecx,DWORD [44+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [52+esp] ++ shr edi,10 ++ add ebx,DWORD [88+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov DWORD [52+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1986661051+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [60+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov esi,DWORD [48+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [56+esp] ++ shr edi,10 ++ add ebx,DWORD [92+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov DWORD [56+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2177026350+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [64+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov ecx,DWORD [52+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [60+esp] ++ shr edi,10 ++ add ebx,DWORD [32+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov DWORD [60+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2456956037+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [68+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [56+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [64+esp] ++ shr edi,10 ++ add ebx,DWORD [36+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov DWORD [64+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2730485921+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [72+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov ecx,DWORD [60+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [68+esp] ++ shr edi,10 ++ add ebx,DWORD [40+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov DWORD [68+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2820302411+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [76+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov esi,DWORD [64+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [72+esp] ++ shr edi,10 ++ add ebx,DWORD [44+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov DWORD [72+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3259730800+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [80+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov ecx,DWORD [68+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [76+esp] ++ shr edi,10 ++ add ebx,DWORD [48+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov DWORD [76+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3345764771+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [84+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov esi,DWORD [72+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [80+esp] ++ shr edi,10 ++ add ebx,DWORD [52+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov DWORD [80+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3516065817+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [88+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov ecx,DWORD [76+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [84+esp] ++ shr edi,10 ++ add ebx,DWORD [56+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov DWORD [84+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3600352804+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [92+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov esi,DWORD [80+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [88+esp] ++ shr edi,10 ++ add ebx,DWORD [60+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov DWORD [88+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[4094571909+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [32+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov ecx,DWORD [84+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [92+esp] ++ shr edi,10 ++ add ebx,DWORD [64+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov DWORD [92+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[275423344+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [36+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [88+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [32+esp] ++ shr edi,10 ++ add ebx,DWORD [68+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov DWORD [32+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[430227734+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [40+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov ecx,DWORD [92+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [36+esp] ++ shr edi,10 ++ add ebx,DWORD [72+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov DWORD [36+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[506948616+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [44+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov esi,DWORD [32+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [40+esp] ++ shr edi,10 ++ add ebx,DWORD [76+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov DWORD [40+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[659060556+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [48+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov ecx,DWORD [36+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [44+esp] ++ shr edi,10 ++ add ebx,DWORD [80+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov DWORD [44+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[883997877+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [52+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov esi,DWORD [40+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [48+esp] ++ shr edi,10 ++ add ebx,DWORD [84+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov DWORD [48+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[958139571+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [56+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov ecx,DWORD [44+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [52+esp] ++ shr edi,10 ++ add ebx,DWORD [88+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov DWORD [52+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1322822218+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [60+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov esi,DWORD [48+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [56+esp] ++ shr edi,10 ++ add ebx,DWORD [92+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ mov DWORD [56+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1537002063+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [64+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov ecx,DWORD [52+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [60+esp] ++ shr edi,10 ++ add ebx,DWORD [32+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ mov DWORD [60+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[1747873779+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [68+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [56+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [64+esp] ++ shr edi,10 ++ add ebx,DWORD [36+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [20+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [24+esp] ++ xor edx,ecx ++ mov DWORD [64+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [16+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [28+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [4+esp] ++ xor ecx,eax ++ mov DWORD [esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[1955562222+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [72+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [12+esp] ++ add ebp,ecx ++ mov ecx,DWORD [60+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [68+esp] ++ shr edi,10 ++ add ebx,DWORD [40+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [16+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [20+esp] ++ xor edx,esi ++ mov DWORD [68+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [12+esp],esi ++ xor edx,esi ++ add ebx,DWORD [24+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [esp] ++ xor esi,ebp ++ mov DWORD [28+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2024104815+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [76+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [8+esp] ++ add eax,esi ++ mov esi,DWORD [64+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [72+esp] ++ shr edi,10 ++ add ebx,DWORD [44+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [12+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [16+esp] ++ xor edx,ecx ++ mov DWORD [72+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [8+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [20+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [28+esp] ++ xor ecx,eax ++ mov DWORD [24+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2227730452+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [80+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [4+esp] ++ add ebp,ecx ++ mov ecx,DWORD [68+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [76+esp] ++ shr edi,10 ++ add ebx,DWORD [48+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [8+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [12+esp] ++ xor edx,esi ++ mov DWORD [76+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [4+esp],esi ++ xor edx,esi ++ add ebx,DWORD [16+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [24+esp] ++ xor esi,ebp ++ mov DWORD [20+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2361852424+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [84+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [esp] ++ add eax,esi ++ mov esi,DWORD [72+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [80+esp] ++ shr edi,10 ++ add ebx,DWORD [52+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [4+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [8+esp] ++ xor edx,ecx ++ mov DWORD [80+esp],ebx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [12+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [20+esp] ++ xor ecx,eax ++ mov DWORD [16+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[2428436474+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [88+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [28+esp] ++ add ebp,ecx ++ mov ecx,DWORD [76+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [84+esp] ++ shr edi,10 ++ add ebx,DWORD [56+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [4+esp] ++ xor edx,esi ++ mov DWORD [84+esp],ebx ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [28+esp],esi ++ xor edx,esi ++ add ebx,DWORD [8+esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [16+esp] ++ xor esi,ebp ++ mov DWORD [12+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[2756734187+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ mov ecx,DWORD [92+esp] ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [24+esp] ++ add eax,esi ++ mov esi,DWORD [80+esp] ++ mov ebx,ecx ++ ror ecx,11 ++ mov edi,esi ++ ror esi,2 ++ xor ecx,ebx ++ shr ebx,3 ++ ror ecx,7 ++ xor esi,edi ++ xor ebx,ecx ++ ror esi,17 ++ add ebx,DWORD [88+esp] ++ shr edi,10 ++ add ebx,DWORD [60+esp] ++ mov ecx,edx ++ xor edi,esi ++ mov esi,DWORD [28+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [esp] ++ xor edx,ecx ++ xor esi,edi ++ ror edx,5 ++ and esi,ecx ++ mov DWORD [24+esp],ecx ++ xor edx,ecx ++ add ebx,DWORD [4+esp] ++ xor edi,esi ++ ror edx,6 ++ mov ecx,eax ++ add ebx,edi ++ ror ecx,9 ++ mov esi,eax ++ mov edi,DWORD [12+esp] ++ xor ecx,eax ++ mov DWORD [8+esp],eax ++ xor eax,edi ++ ror ecx,11 ++ and ebp,eax ++ lea edx,[3204031479+edx*1+ebx] ++ xor ecx,esi ++ xor ebp,edi ++ mov esi,DWORD [32+esp] ++ ror ecx,2 ++ add ebp,edx ++ add edx,DWORD [20+esp] ++ add ebp,ecx ++ mov ecx,DWORD [84+esp] ++ mov ebx,esi ++ ror esi,11 ++ mov edi,ecx ++ ror ecx,2 ++ xor esi,ebx ++ shr ebx,3 ++ ror esi,7 ++ xor ecx,edi ++ xor ebx,esi ++ ror ecx,17 ++ add ebx,DWORD [92+esp] ++ shr edi,10 ++ add ebx,DWORD [64+esp] ++ mov esi,edx ++ xor edi,ecx ++ mov ecx,DWORD [24+esp] ++ ror edx,14 ++ add ebx,edi ++ mov edi,DWORD [28+esp] ++ xor edx,esi ++ xor ecx,edi ++ ror edx,5 ++ and ecx,esi ++ mov DWORD [20+esp],esi ++ xor edx,esi ++ add ebx,DWORD [esp] ++ xor edi,ecx ++ ror edx,6 ++ mov esi,ebp ++ add ebx,edi ++ ror esi,9 ++ mov ecx,ebp ++ mov edi,DWORD [8+esp] ++ xor esi,ebp ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ ror esi,11 ++ and eax,ebp ++ lea edx,[3329325298+edx*1+ebx] ++ xor esi,ecx ++ xor eax,edi ++ ror esi,2 ++ add eax,edx ++ add edx,DWORD [16+esp] ++ add eax,esi ++ mov esi,DWORD [96+esp] ++ xor ebp,edi ++ mov ecx,DWORD [12+esp] ++ add eax,DWORD [esi] ++ add ebp,DWORD [4+esi] ++ add edi,DWORD [8+esi] ++ add ecx,DWORD [12+esi] ++ mov DWORD [esi],eax ++ mov DWORD [4+esi],ebp ++ mov DWORD [8+esi],edi ++ mov DWORD [12+esi],ecx ++ mov DWORD [4+esp],ebp ++ xor ebp,edi ++ mov DWORD [8+esp],edi ++ mov DWORD [12+esp],ecx ++ mov edi,DWORD [20+esp] ++ mov ebx,DWORD [24+esp] ++ mov ecx,DWORD [28+esp] ++ add edx,DWORD [16+esi] ++ add edi,DWORD [20+esi] ++ add ebx,DWORD [24+esi] ++ add ecx,DWORD [28+esi] ++ mov DWORD [16+esi],edx ++ mov DWORD [20+esi],edi ++ mov DWORD [24+esi],ebx ++ mov DWORD [28+esi],ecx ++ mov DWORD [20+esp],edi ++ mov edi,DWORD [100+esp] ++ mov DWORD [24+esp],ebx ++ mov DWORD [28+esp],ecx ++ cmp edi,DWORD [104+esp] ++ jb NEAR L$009grand_loop ++ mov esp,DWORD [108+esp] ++ pop edi ++ pop esi ++ pop ebx ++ pop ebp ++ ret ++segment .bss ++common __gnutls_x86_cpuid_s 16 +diff --git a/SMP/lib/accelerated/x86/coff/sha256-ssse3-x86_64.asm b/SMP/lib/accelerated/x86/coff/sha256-ssse3-x86_64.asm +new file mode 100644 +index 0000000..ce1656d +--- /dev/null ++++ b/SMP/lib/accelerated/x86/coff/sha256-ssse3-x86_64.asm +@@ -0,0 +1,5634 @@ ++default rel ++%define XMMWORD ++%define YMMWORD ++%define ZMMWORD ++section .text code align=64 ++ ++ ++EXTERN _gnutls_x86_cpuid_s ++global sha256_block_data_order ++ ++ALIGN 16 ++sha256_block_data_order: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_block_data_order: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++ lea r11,[_gnutls_x86_cpuid_s] ++ mov r9d,DWORD[r11] ++ mov r10d,DWORD[4+r11] ++ mov r11d,DWORD[8+r11] ++ test r11d,536870912 ++ jnz NEAR _shaext_shortcut ++ and r11d,296 ++ cmp r11d,296 ++ je NEAR $L$avx2_shortcut ++ and r9d,1073741824 ++ and r10d,268435968 ++ or r10d,r9d ++ cmp r10d,1342177792 ++ je NEAR $L$avx_shortcut ++ test r10d,512 ++ jnz NEAR $L$ssse3_shortcut ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ mov r11,rsp ++ shl rdx,4 ++ sub rsp,16*4+4*8 ++ lea rdx,[rdx*4+rsi] ++ and rsp,-64 ++ mov QWORD[((64+0))+rsp],rdi ++ mov QWORD[((64+8))+rsp],rsi ++ mov QWORD[((64+16))+rsp],rdx ++ mov QWORD[((64+24))+rsp],r11 ++$L$prologue: ++ ++ mov eax,DWORD[rdi] ++ mov ebx,DWORD[4+rdi] ++ mov ecx,DWORD[8+rdi] ++ mov edx,DWORD[12+rdi] ++ mov r8d,DWORD[16+rdi] ++ mov r9d,DWORD[20+rdi] ++ mov r10d,DWORD[24+rdi] ++ mov r11d,DWORD[28+rdi] ++ jmp NEAR $L$loop ++ ++ALIGN 16 ++$L$loop: ++ mov edi,ebx ++ lea rbp,[K256] ++ xor edi,ecx ++ mov r12d,DWORD[rsi] ++ mov r13d,r8d ++ mov r14d,eax ++ bswap r12d ++ ror r13d,14 ++ mov r15d,r9d ++ ++ xor r13d,r8d ++ ror r14d,9 ++ xor r15d,r10d ++ ++ mov DWORD[rsp],r12d ++ xor r14d,eax ++ and r15d,r8d ++ ++ ror r13d,5 ++ add r12d,r11d ++ xor r15d,r10d ++ ++ ror r14d,11 ++ xor r13d,r8d ++ add r12d,r15d ++ ++ mov r15d,eax ++ add r12d,DWORD[rbp] ++ xor r14d,eax ++ ++ xor r15d,ebx ++ ror r13d,6 ++ mov r11d,ebx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r11d,edi ++ add edx,r12d ++ add r11d,r12d ++ ++ lea rbp,[4+rbp] ++ add r11d,r14d ++ mov r12d,DWORD[4+rsi] ++ mov r13d,edx ++ mov r14d,r11d ++ bswap r12d ++ ror r13d,14 ++ mov edi,r8d ++ ++ xor r13d,edx ++ ror r14d,9 ++ xor edi,r9d ++ ++ mov DWORD[4+rsp],r12d ++ xor r14d,r11d ++ and edi,edx ++ ++ ror r13d,5 ++ add r12d,r10d ++ xor edi,r9d ++ ++ ror r14d,11 ++ xor r13d,edx ++ add r12d,edi ++ ++ mov edi,r11d ++ add r12d,DWORD[rbp] ++ xor r14d,r11d ++ ++ xor edi,eax ++ ror r13d,6 ++ mov r10d,eax ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r10d,r15d ++ add ecx,r12d ++ add r10d,r12d ++ ++ lea rbp,[4+rbp] ++ add r10d,r14d ++ mov r12d,DWORD[8+rsi] ++ mov r13d,ecx ++ mov r14d,r10d ++ bswap r12d ++ ror r13d,14 ++ mov r15d,edx ++ ++ xor r13d,ecx ++ ror r14d,9 ++ xor r15d,r8d ++ ++ mov DWORD[8+rsp],r12d ++ xor r14d,r10d ++ and r15d,ecx ++ ++ ror r13d,5 ++ add r12d,r9d ++ xor r15d,r8d ++ ++ ror r14d,11 ++ xor r13d,ecx ++ add r12d,r15d ++ ++ mov r15d,r10d ++ add r12d,DWORD[rbp] ++ xor r14d,r10d ++ ++ xor r15d,r11d ++ ror r13d,6 ++ mov r9d,r11d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r9d,edi ++ add ebx,r12d ++ add r9d,r12d ++ ++ lea rbp,[4+rbp] ++ add r9d,r14d ++ mov r12d,DWORD[12+rsi] ++ mov r13d,ebx ++ mov r14d,r9d ++ bswap r12d ++ ror r13d,14 ++ mov edi,ecx ++ ++ xor r13d,ebx ++ ror r14d,9 ++ xor edi,edx ++ ++ mov DWORD[12+rsp],r12d ++ xor r14d,r9d ++ and edi,ebx ++ ++ ror r13d,5 ++ add r12d,r8d ++ xor edi,edx ++ ++ ror r14d,11 ++ xor r13d,ebx ++ add r12d,edi ++ ++ mov edi,r9d ++ add r12d,DWORD[rbp] ++ xor r14d,r9d ++ ++ xor edi,r10d ++ ror r13d,6 ++ mov r8d,r10d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r8d,r15d ++ add eax,r12d ++ add r8d,r12d ++ ++ lea rbp,[20+rbp] ++ add r8d,r14d ++ mov r12d,DWORD[16+rsi] ++ mov r13d,eax ++ mov r14d,r8d ++ bswap r12d ++ ror r13d,14 ++ mov r15d,ebx ++ ++ xor r13d,eax ++ ror r14d,9 ++ xor r15d,ecx ++ ++ mov DWORD[16+rsp],r12d ++ xor r14d,r8d ++ and r15d,eax ++ ++ ror r13d,5 ++ add r12d,edx ++ xor r15d,ecx ++ ++ ror r14d,11 ++ xor r13d,eax ++ add r12d,r15d ++ ++ mov r15d,r8d ++ add r12d,DWORD[rbp] ++ xor r14d,r8d ++ ++ xor r15d,r9d ++ ror r13d,6 ++ mov edx,r9d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor edx,edi ++ add r11d,r12d ++ add edx,r12d ++ ++ lea rbp,[4+rbp] ++ add edx,r14d ++ mov r12d,DWORD[20+rsi] ++ mov r13d,r11d ++ mov r14d,edx ++ bswap r12d ++ ror r13d,14 ++ mov edi,eax ++ ++ xor r13d,r11d ++ ror r14d,9 ++ xor edi,ebx ++ ++ mov DWORD[20+rsp],r12d ++ xor r14d,edx ++ and edi,r11d ++ ++ ror r13d,5 ++ add r12d,ecx ++ xor edi,ebx ++ ++ ror r14d,11 ++ xor r13d,r11d ++ add r12d,edi ++ ++ mov edi,edx ++ add r12d,DWORD[rbp] ++ xor r14d,edx ++ ++ xor edi,r8d ++ ror r13d,6 ++ mov ecx,r8d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ecx,r15d ++ add r10d,r12d ++ add ecx,r12d ++ ++ lea rbp,[4+rbp] ++ add ecx,r14d ++ mov r12d,DWORD[24+rsi] ++ mov r13d,r10d ++ mov r14d,ecx ++ bswap r12d ++ ror r13d,14 ++ mov r15d,r11d ++ ++ xor r13d,r10d ++ ror r14d,9 ++ xor r15d,eax ++ ++ mov DWORD[24+rsp],r12d ++ xor r14d,ecx ++ and r15d,r10d ++ ++ ror r13d,5 ++ add r12d,ebx ++ xor r15d,eax ++ ++ ror r14d,11 ++ xor r13d,r10d ++ add r12d,r15d ++ ++ mov r15d,ecx ++ add r12d,DWORD[rbp] ++ xor r14d,ecx ++ ++ xor r15d,edx ++ ror r13d,6 ++ mov ebx,edx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ebx,edi ++ add r9d,r12d ++ add ebx,r12d ++ ++ lea rbp,[4+rbp] ++ add ebx,r14d ++ mov r12d,DWORD[28+rsi] ++ mov r13d,r9d ++ mov r14d,ebx ++ bswap r12d ++ ror r13d,14 ++ mov edi,r10d ++ ++ xor r13d,r9d ++ ror r14d,9 ++ xor edi,r11d ++ ++ mov DWORD[28+rsp],r12d ++ xor r14d,ebx ++ and edi,r9d ++ ++ ror r13d,5 ++ add r12d,eax ++ xor edi,r11d ++ ++ ror r14d,11 ++ xor r13d,r9d ++ add r12d,edi ++ ++ mov edi,ebx ++ add r12d,DWORD[rbp] ++ xor r14d,ebx ++ ++ xor edi,ecx ++ ror r13d,6 ++ mov eax,ecx ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor eax,r15d ++ add r8d,r12d ++ add eax,r12d ++ ++ lea rbp,[20+rbp] ++ add eax,r14d ++ mov r12d,DWORD[32+rsi] ++ mov r13d,r8d ++ mov r14d,eax ++ bswap r12d ++ ror r13d,14 ++ mov r15d,r9d ++ ++ xor r13d,r8d ++ ror r14d,9 ++ xor r15d,r10d ++ ++ mov DWORD[32+rsp],r12d ++ xor r14d,eax ++ and r15d,r8d ++ ++ ror r13d,5 ++ add r12d,r11d ++ xor r15d,r10d ++ ++ ror r14d,11 ++ xor r13d,r8d ++ add r12d,r15d ++ ++ mov r15d,eax ++ add r12d,DWORD[rbp] ++ xor r14d,eax ++ ++ xor r15d,ebx ++ ror r13d,6 ++ mov r11d,ebx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r11d,edi ++ add edx,r12d ++ add r11d,r12d ++ ++ lea rbp,[4+rbp] ++ add r11d,r14d ++ mov r12d,DWORD[36+rsi] ++ mov r13d,edx ++ mov r14d,r11d ++ bswap r12d ++ ror r13d,14 ++ mov edi,r8d ++ ++ xor r13d,edx ++ ror r14d,9 ++ xor edi,r9d ++ ++ mov DWORD[36+rsp],r12d ++ xor r14d,r11d ++ and edi,edx ++ ++ ror r13d,5 ++ add r12d,r10d ++ xor edi,r9d ++ ++ ror r14d,11 ++ xor r13d,edx ++ add r12d,edi ++ ++ mov edi,r11d ++ add r12d,DWORD[rbp] ++ xor r14d,r11d ++ ++ xor edi,eax ++ ror r13d,6 ++ mov r10d,eax ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r10d,r15d ++ add ecx,r12d ++ add r10d,r12d ++ ++ lea rbp,[4+rbp] ++ add r10d,r14d ++ mov r12d,DWORD[40+rsi] ++ mov r13d,ecx ++ mov r14d,r10d ++ bswap r12d ++ ror r13d,14 ++ mov r15d,edx ++ ++ xor r13d,ecx ++ ror r14d,9 ++ xor r15d,r8d ++ ++ mov DWORD[40+rsp],r12d ++ xor r14d,r10d ++ and r15d,ecx ++ ++ ror r13d,5 ++ add r12d,r9d ++ xor r15d,r8d ++ ++ ror r14d,11 ++ xor r13d,ecx ++ add r12d,r15d ++ ++ mov r15d,r10d ++ add r12d,DWORD[rbp] ++ xor r14d,r10d ++ ++ xor r15d,r11d ++ ror r13d,6 ++ mov r9d,r11d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r9d,edi ++ add ebx,r12d ++ add r9d,r12d ++ ++ lea rbp,[4+rbp] ++ add r9d,r14d ++ mov r12d,DWORD[44+rsi] ++ mov r13d,ebx ++ mov r14d,r9d ++ bswap r12d ++ ror r13d,14 ++ mov edi,ecx ++ ++ xor r13d,ebx ++ ror r14d,9 ++ xor edi,edx ++ ++ mov DWORD[44+rsp],r12d ++ xor r14d,r9d ++ and edi,ebx ++ ++ ror r13d,5 ++ add r12d,r8d ++ xor edi,edx ++ ++ ror r14d,11 ++ xor r13d,ebx ++ add r12d,edi ++ ++ mov edi,r9d ++ add r12d,DWORD[rbp] ++ xor r14d,r9d ++ ++ xor edi,r10d ++ ror r13d,6 ++ mov r8d,r10d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r8d,r15d ++ add eax,r12d ++ add r8d,r12d ++ ++ lea rbp,[20+rbp] ++ add r8d,r14d ++ mov r12d,DWORD[48+rsi] ++ mov r13d,eax ++ mov r14d,r8d ++ bswap r12d ++ ror r13d,14 ++ mov r15d,ebx ++ ++ xor r13d,eax ++ ror r14d,9 ++ xor r15d,ecx ++ ++ mov DWORD[48+rsp],r12d ++ xor r14d,r8d ++ and r15d,eax ++ ++ ror r13d,5 ++ add r12d,edx ++ xor r15d,ecx ++ ++ ror r14d,11 ++ xor r13d,eax ++ add r12d,r15d ++ ++ mov r15d,r8d ++ add r12d,DWORD[rbp] ++ xor r14d,r8d ++ ++ xor r15d,r9d ++ ror r13d,6 ++ mov edx,r9d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor edx,edi ++ add r11d,r12d ++ add edx,r12d ++ ++ lea rbp,[4+rbp] ++ add edx,r14d ++ mov r12d,DWORD[52+rsi] ++ mov r13d,r11d ++ mov r14d,edx ++ bswap r12d ++ ror r13d,14 ++ mov edi,eax ++ ++ xor r13d,r11d ++ ror r14d,9 ++ xor edi,ebx ++ ++ mov DWORD[52+rsp],r12d ++ xor r14d,edx ++ and edi,r11d ++ ++ ror r13d,5 ++ add r12d,ecx ++ xor edi,ebx ++ ++ ror r14d,11 ++ xor r13d,r11d ++ add r12d,edi ++ ++ mov edi,edx ++ add r12d,DWORD[rbp] ++ xor r14d,edx ++ ++ xor edi,r8d ++ ror r13d,6 ++ mov ecx,r8d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ecx,r15d ++ add r10d,r12d ++ add ecx,r12d ++ ++ lea rbp,[4+rbp] ++ add ecx,r14d ++ mov r12d,DWORD[56+rsi] ++ mov r13d,r10d ++ mov r14d,ecx ++ bswap r12d ++ ror r13d,14 ++ mov r15d,r11d ++ ++ xor r13d,r10d ++ ror r14d,9 ++ xor r15d,eax ++ ++ mov DWORD[56+rsp],r12d ++ xor r14d,ecx ++ and r15d,r10d ++ ++ ror r13d,5 ++ add r12d,ebx ++ xor r15d,eax ++ ++ ror r14d,11 ++ xor r13d,r10d ++ add r12d,r15d ++ ++ mov r15d,ecx ++ add r12d,DWORD[rbp] ++ xor r14d,ecx ++ ++ xor r15d,edx ++ ror r13d,6 ++ mov ebx,edx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ebx,edi ++ add r9d,r12d ++ add ebx,r12d ++ ++ lea rbp,[4+rbp] ++ add ebx,r14d ++ mov r12d,DWORD[60+rsi] ++ mov r13d,r9d ++ mov r14d,ebx ++ bswap r12d ++ ror r13d,14 ++ mov edi,r10d ++ ++ xor r13d,r9d ++ ror r14d,9 ++ xor edi,r11d ++ ++ mov DWORD[60+rsp],r12d ++ xor r14d,ebx ++ and edi,r9d ++ ++ ror r13d,5 ++ add r12d,eax ++ xor edi,r11d ++ ++ ror r14d,11 ++ xor r13d,r9d ++ add r12d,edi ++ ++ mov edi,ebx ++ add r12d,DWORD[rbp] ++ xor r14d,ebx ++ ++ xor edi,ecx ++ ror r13d,6 ++ mov eax,ecx ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor eax,r15d ++ add r8d,r12d ++ add eax,r12d ++ ++ lea rbp,[20+rbp] ++ jmp NEAR $L$rounds_16_xx ++ALIGN 16 ++$L$rounds_16_xx: ++ mov r13d,DWORD[4+rsp] ++ mov r15d,DWORD[56+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add eax,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[36+rsp] ++ ++ add r12d,DWORD[rsp] ++ mov r13d,r8d ++ add r12d,r15d ++ mov r14d,eax ++ ror r13d,14 ++ mov r15d,r9d ++ ++ xor r13d,r8d ++ ror r14d,9 ++ xor r15d,r10d ++ ++ mov DWORD[rsp],r12d ++ xor r14d,eax ++ and r15d,r8d ++ ++ ror r13d,5 ++ add r12d,r11d ++ xor r15d,r10d ++ ++ ror r14d,11 ++ xor r13d,r8d ++ add r12d,r15d ++ ++ mov r15d,eax ++ add r12d,DWORD[rbp] ++ xor r14d,eax ++ ++ xor r15d,ebx ++ ror r13d,6 ++ mov r11d,ebx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r11d,edi ++ add edx,r12d ++ add r11d,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[8+rsp] ++ mov edi,DWORD[60+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r11d,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[40+rsp] ++ ++ add r12d,DWORD[4+rsp] ++ mov r13d,edx ++ add r12d,edi ++ mov r14d,r11d ++ ror r13d,14 ++ mov edi,r8d ++ ++ xor r13d,edx ++ ror r14d,9 ++ xor edi,r9d ++ ++ mov DWORD[4+rsp],r12d ++ xor r14d,r11d ++ and edi,edx ++ ++ ror r13d,5 ++ add r12d,r10d ++ xor edi,r9d ++ ++ ror r14d,11 ++ xor r13d,edx ++ add r12d,edi ++ ++ mov edi,r11d ++ add r12d,DWORD[rbp] ++ xor r14d,r11d ++ ++ xor edi,eax ++ ror r13d,6 ++ mov r10d,eax ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r10d,r15d ++ add ecx,r12d ++ add r10d,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[12+rsp] ++ mov r15d,DWORD[rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r10d,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[44+rsp] ++ ++ add r12d,DWORD[8+rsp] ++ mov r13d,ecx ++ add r12d,r15d ++ mov r14d,r10d ++ ror r13d,14 ++ mov r15d,edx ++ ++ xor r13d,ecx ++ ror r14d,9 ++ xor r15d,r8d ++ ++ mov DWORD[8+rsp],r12d ++ xor r14d,r10d ++ and r15d,ecx ++ ++ ror r13d,5 ++ add r12d,r9d ++ xor r15d,r8d ++ ++ ror r14d,11 ++ xor r13d,ecx ++ add r12d,r15d ++ ++ mov r15d,r10d ++ add r12d,DWORD[rbp] ++ xor r14d,r10d ++ ++ xor r15d,r11d ++ ror r13d,6 ++ mov r9d,r11d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r9d,edi ++ add ebx,r12d ++ add r9d,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[16+rsp] ++ mov edi,DWORD[4+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r9d,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[48+rsp] ++ ++ add r12d,DWORD[12+rsp] ++ mov r13d,ebx ++ add r12d,edi ++ mov r14d,r9d ++ ror r13d,14 ++ mov edi,ecx ++ ++ xor r13d,ebx ++ ror r14d,9 ++ xor edi,edx ++ ++ mov DWORD[12+rsp],r12d ++ xor r14d,r9d ++ and edi,ebx ++ ++ ror r13d,5 ++ add r12d,r8d ++ xor edi,edx ++ ++ ror r14d,11 ++ xor r13d,ebx ++ add r12d,edi ++ ++ mov edi,r9d ++ add r12d,DWORD[rbp] ++ xor r14d,r9d ++ ++ xor edi,r10d ++ ror r13d,6 ++ mov r8d,r10d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r8d,r15d ++ add eax,r12d ++ add r8d,r12d ++ ++ lea rbp,[20+rbp] ++ mov r13d,DWORD[20+rsp] ++ mov r15d,DWORD[8+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r8d,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[52+rsp] ++ ++ add r12d,DWORD[16+rsp] ++ mov r13d,eax ++ add r12d,r15d ++ mov r14d,r8d ++ ror r13d,14 ++ mov r15d,ebx ++ ++ xor r13d,eax ++ ror r14d,9 ++ xor r15d,ecx ++ ++ mov DWORD[16+rsp],r12d ++ xor r14d,r8d ++ and r15d,eax ++ ++ ror r13d,5 ++ add r12d,edx ++ xor r15d,ecx ++ ++ ror r14d,11 ++ xor r13d,eax ++ add r12d,r15d ++ ++ mov r15d,r8d ++ add r12d,DWORD[rbp] ++ xor r14d,r8d ++ ++ xor r15d,r9d ++ ror r13d,6 ++ mov edx,r9d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor edx,edi ++ add r11d,r12d ++ add edx,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[24+rsp] ++ mov edi,DWORD[12+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add edx,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[56+rsp] ++ ++ add r12d,DWORD[20+rsp] ++ mov r13d,r11d ++ add r12d,edi ++ mov r14d,edx ++ ror r13d,14 ++ mov edi,eax ++ ++ xor r13d,r11d ++ ror r14d,9 ++ xor edi,ebx ++ ++ mov DWORD[20+rsp],r12d ++ xor r14d,edx ++ and edi,r11d ++ ++ ror r13d,5 ++ add r12d,ecx ++ xor edi,ebx ++ ++ ror r14d,11 ++ xor r13d,r11d ++ add r12d,edi ++ ++ mov edi,edx ++ add r12d,DWORD[rbp] ++ xor r14d,edx ++ ++ xor edi,r8d ++ ror r13d,6 ++ mov ecx,r8d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ecx,r15d ++ add r10d,r12d ++ add ecx,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[28+rsp] ++ mov r15d,DWORD[16+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add ecx,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[60+rsp] ++ ++ add r12d,DWORD[24+rsp] ++ mov r13d,r10d ++ add r12d,r15d ++ mov r14d,ecx ++ ror r13d,14 ++ mov r15d,r11d ++ ++ xor r13d,r10d ++ ror r14d,9 ++ xor r15d,eax ++ ++ mov DWORD[24+rsp],r12d ++ xor r14d,ecx ++ and r15d,r10d ++ ++ ror r13d,5 ++ add r12d,ebx ++ xor r15d,eax ++ ++ ror r14d,11 ++ xor r13d,r10d ++ add r12d,r15d ++ ++ mov r15d,ecx ++ add r12d,DWORD[rbp] ++ xor r14d,ecx ++ ++ xor r15d,edx ++ ror r13d,6 ++ mov ebx,edx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ebx,edi ++ add r9d,r12d ++ add ebx,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[32+rsp] ++ mov edi,DWORD[20+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add ebx,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[rsp] ++ ++ add r12d,DWORD[28+rsp] ++ mov r13d,r9d ++ add r12d,edi ++ mov r14d,ebx ++ ror r13d,14 ++ mov edi,r10d ++ ++ xor r13d,r9d ++ ror r14d,9 ++ xor edi,r11d ++ ++ mov DWORD[28+rsp],r12d ++ xor r14d,ebx ++ and edi,r9d ++ ++ ror r13d,5 ++ add r12d,eax ++ xor edi,r11d ++ ++ ror r14d,11 ++ xor r13d,r9d ++ add r12d,edi ++ ++ mov edi,ebx ++ add r12d,DWORD[rbp] ++ xor r14d,ebx ++ ++ xor edi,ecx ++ ror r13d,6 ++ mov eax,ecx ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor eax,r15d ++ add r8d,r12d ++ add eax,r12d ++ ++ lea rbp,[20+rbp] ++ mov r13d,DWORD[36+rsp] ++ mov r15d,DWORD[24+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add eax,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[4+rsp] ++ ++ add r12d,DWORD[32+rsp] ++ mov r13d,r8d ++ add r12d,r15d ++ mov r14d,eax ++ ror r13d,14 ++ mov r15d,r9d ++ ++ xor r13d,r8d ++ ror r14d,9 ++ xor r15d,r10d ++ ++ mov DWORD[32+rsp],r12d ++ xor r14d,eax ++ and r15d,r8d ++ ++ ror r13d,5 ++ add r12d,r11d ++ xor r15d,r10d ++ ++ ror r14d,11 ++ xor r13d,r8d ++ add r12d,r15d ++ ++ mov r15d,eax ++ add r12d,DWORD[rbp] ++ xor r14d,eax ++ ++ xor r15d,ebx ++ ror r13d,6 ++ mov r11d,ebx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r11d,edi ++ add edx,r12d ++ add r11d,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[40+rsp] ++ mov edi,DWORD[28+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r11d,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[8+rsp] ++ ++ add r12d,DWORD[36+rsp] ++ mov r13d,edx ++ add r12d,edi ++ mov r14d,r11d ++ ror r13d,14 ++ mov edi,r8d ++ ++ xor r13d,edx ++ ror r14d,9 ++ xor edi,r9d ++ ++ mov DWORD[36+rsp],r12d ++ xor r14d,r11d ++ and edi,edx ++ ++ ror r13d,5 ++ add r12d,r10d ++ xor edi,r9d ++ ++ ror r14d,11 ++ xor r13d,edx ++ add r12d,edi ++ ++ mov edi,r11d ++ add r12d,DWORD[rbp] ++ xor r14d,r11d ++ ++ xor edi,eax ++ ror r13d,6 ++ mov r10d,eax ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r10d,r15d ++ add ecx,r12d ++ add r10d,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[44+rsp] ++ mov r15d,DWORD[32+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r10d,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[12+rsp] ++ ++ add r12d,DWORD[40+rsp] ++ mov r13d,ecx ++ add r12d,r15d ++ mov r14d,r10d ++ ror r13d,14 ++ mov r15d,edx ++ ++ xor r13d,ecx ++ ror r14d,9 ++ xor r15d,r8d ++ ++ mov DWORD[40+rsp],r12d ++ xor r14d,r10d ++ and r15d,ecx ++ ++ ror r13d,5 ++ add r12d,r9d ++ xor r15d,r8d ++ ++ ror r14d,11 ++ xor r13d,ecx ++ add r12d,r15d ++ ++ mov r15d,r10d ++ add r12d,DWORD[rbp] ++ xor r14d,r10d ++ ++ xor r15d,r11d ++ ror r13d,6 ++ mov r9d,r11d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r9d,edi ++ add ebx,r12d ++ add r9d,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[48+rsp] ++ mov edi,DWORD[36+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r9d,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[16+rsp] ++ ++ add r12d,DWORD[44+rsp] ++ mov r13d,ebx ++ add r12d,edi ++ mov r14d,r9d ++ ror r13d,14 ++ mov edi,ecx ++ ++ xor r13d,ebx ++ ror r14d,9 ++ xor edi,edx ++ ++ mov DWORD[44+rsp],r12d ++ xor r14d,r9d ++ and edi,ebx ++ ++ ror r13d,5 ++ add r12d,r8d ++ xor edi,edx ++ ++ ror r14d,11 ++ xor r13d,ebx ++ add r12d,edi ++ ++ mov edi,r9d ++ add r12d,DWORD[rbp] ++ xor r14d,r9d ++ ++ xor edi,r10d ++ ror r13d,6 ++ mov r8d,r10d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor r8d,r15d ++ add eax,r12d ++ add r8d,r12d ++ ++ lea rbp,[20+rbp] ++ mov r13d,DWORD[52+rsp] ++ mov r15d,DWORD[40+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add r8d,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[20+rsp] ++ ++ add r12d,DWORD[48+rsp] ++ mov r13d,eax ++ add r12d,r15d ++ mov r14d,r8d ++ ror r13d,14 ++ mov r15d,ebx ++ ++ xor r13d,eax ++ ror r14d,9 ++ xor r15d,ecx ++ ++ mov DWORD[48+rsp],r12d ++ xor r14d,r8d ++ and r15d,eax ++ ++ ror r13d,5 ++ add r12d,edx ++ xor r15d,ecx ++ ++ ror r14d,11 ++ xor r13d,eax ++ add r12d,r15d ++ ++ mov r15d,r8d ++ add r12d,DWORD[rbp] ++ xor r14d,r8d ++ ++ xor r15d,r9d ++ ror r13d,6 ++ mov edx,r9d ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor edx,edi ++ add r11d,r12d ++ add edx,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[56+rsp] ++ mov edi,DWORD[44+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add edx,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[24+rsp] ++ ++ add r12d,DWORD[52+rsp] ++ mov r13d,r11d ++ add r12d,edi ++ mov r14d,edx ++ ror r13d,14 ++ mov edi,eax ++ ++ xor r13d,r11d ++ ror r14d,9 ++ xor edi,ebx ++ ++ mov DWORD[52+rsp],r12d ++ xor r14d,edx ++ and edi,r11d ++ ++ ror r13d,5 ++ add r12d,ecx ++ xor edi,ebx ++ ++ ror r14d,11 ++ xor r13d,r11d ++ add r12d,edi ++ ++ mov edi,edx ++ add r12d,DWORD[rbp] ++ xor r14d,edx ++ ++ xor edi,r8d ++ ror r13d,6 ++ mov ecx,r8d ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ecx,r15d ++ add r10d,r12d ++ add ecx,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[60+rsp] ++ mov r15d,DWORD[48+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add ecx,r14d ++ mov r14d,r15d ++ ror r15d,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor r15d,r14d ++ shr r14d,10 ++ ++ ror r15d,17 ++ xor r12d,r13d ++ xor r15d,r14d ++ add r12d,DWORD[28+rsp] ++ ++ add r12d,DWORD[56+rsp] ++ mov r13d,r10d ++ add r12d,r15d ++ mov r14d,ecx ++ ror r13d,14 ++ mov r15d,r11d ++ ++ xor r13d,r10d ++ ror r14d,9 ++ xor r15d,eax ++ ++ mov DWORD[56+rsp],r12d ++ xor r14d,ecx ++ and r15d,r10d ++ ++ ror r13d,5 ++ add r12d,ebx ++ xor r15d,eax ++ ++ ror r14d,11 ++ xor r13d,r10d ++ add r12d,r15d ++ ++ mov r15d,ecx ++ add r12d,DWORD[rbp] ++ xor r14d,ecx ++ ++ xor r15d,edx ++ ror r13d,6 ++ mov ebx,edx ++ ++ and edi,r15d ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor ebx,edi ++ add r9d,r12d ++ add ebx,r12d ++ ++ lea rbp,[4+rbp] ++ mov r13d,DWORD[rsp] ++ mov edi,DWORD[52+rsp] ++ ++ mov r12d,r13d ++ ror r13d,11 ++ add ebx,r14d ++ mov r14d,edi ++ ror edi,2 ++ ++ xor r13d,r12d ++ shr r12d,3 ++ ror r13d,7 ++ xor edi,r14d ++ shr r14d,10 ++ ++ ror edi,17 ++ xor r12d,r13d ++ xor edi,r14d ++ add r12d,DWORD[32+rsp] ++ ++ add r12d,DWORD[60+rsp] ++ mov r13d,r9d ++ add r12d,edi ++ mov r14d,ebx ++ ror r13d,14 ++ mov edi,r10d ++ ++ xor r13d,r9d ++ ror r14d,9 ++ xor edi,r11d ++ ++ mov DWORD[60+rsp],r12d ++ xor r14d,ebx ++ and edi,r9d ++ ++ ror r13d,5 ++ add r12d,eax ++ xor edi,r11d ++ ++ ror r14d,11 ++ xor r13d,r9d ++ add r12d,edi ++ ++ mov edi,ebx ++ add r12d,DWORD[rbp] ++ xor r14d,ebx ++ ++ xor edi,ecx ++ ror r13d,6 ++ mov eax,ecx ++ ++ and r15d,edi ++ ror r14d,2 ++ add r12d,r13d ++ ++ xor eax,r15d ++ add r8d,r12d ++ add eax,r12d ++ ++ lea rbp,[20+rbp] ++ cmp BYTE[3+rbp],0 ++ jnz NEAR $L$rounds_16_xx ++ ++ mov rdi,QWORD[((64+0))+rsp] ++ add eax,r14d ++ lea rsi,[64+rsi] ++ ++ add eax,DWORD[rdi] ++ add ebx,DWORD[4+rdi] ++ add ecx,DWORD[8+rdi] ++ add edx,DWORD[12+rdi] ++ add r8d,DWORD[16+rdi] ++ add r9d,DWORD[20+rdi] ++ add r10d,DWORD[24+rdi] ++ add r11d,DWORD[28+rdi] ++ ++ cmp rsi,QWORD[((64+16))+rsp] ++ ++ mov DWORD[rdi],eax ++ mov DWORD[4+rdi],ebx ++ mov DWORD[8+rdi],ecx ++ mov DWORD[12+rdi],edx ++ mov DWORD[16+rdi],r8d ++ mov DWORD[20+rdi],r9d ++ mov DWORD[24+rdi],r10d ++ mov DWORD[28+rdi],r11d ++ jb NEAR $L$loop ++ ++ mov rsi,QWORD[((64+24))+rsp] ++ mov r15,QWORD[rsi] ++ mov r14,QWORD[8+rsi] ++ mov r13,QWORD[16+rsi] ++ mov r12,QWORD[24+rsi] ++ mov rbp,QWORD[32+rsi] ++ mov rbx,QWORD[40+rsi] ++ lea rsp,[48+rsi] ++$L$epilogue: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_block_data_order: ++ALIGN 64 ++ ++K256: ++ DD 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 ++ DD 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 ++ DD 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 ++ DD 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 ++ DD 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 ++ DD 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 ++ DD 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 ++ DD 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 ++ DD 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc ++ DD 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc ++ DD 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da ++ DD 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da ++ DD 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 ++ DD 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 ++ DD 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 ++ DD 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 ++ DD 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 ++ DD 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 ++ DD 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 ++ DD 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 ++ DD 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 ++ DD 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 ++ DD 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 ++ DD 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 ++ DD 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 ++ DD 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 ++ DD 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 ++ DD 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 ++ DD 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 ++ DD 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 ++ DD 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 ++ DD 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 ++ ++ DD 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f ++ DD 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f ++ DD 0x03020100,0x0b0a0908,0xffffffff,0xffffffff ++ DD 0x03020100,0x0b0a0908,0xffffffff,0xffffffff ++ DD 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 ++ DD 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 ++DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 ++DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54 ++DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 ++DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 ++DB 111,114,103,62,0 ++ ++ALIGN 64 ++sha256_block_data_order_shaext: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_block_data_order_shaext: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++_shaext_shortcut: ++ lea rsp,[((-88))+rsp] ++ movaps XMMWORD[(-8-80)+rax],xmm6 ++ movaps XMMWORD[(-8-64)+rax],xmm7 ++ movaps XMMWORD[(-8-48)+rax],xmm8 ++ movaps XMMWORD[(-8-32)+rax],xmm9 ++ movaps XMMWORD[(-8-16)+rax],xmm10 ++$L$prologue_shaext: ++ lea rcx,[((K256+128))] ++ movdqu xmm1,XMMWORD[rdi] ++ movdqu xmm2,XMMWORD[16+rdi] ++ movdqa xmm7,XMMWORD[((512-128))+rcx] ++ ++ pshufd xmm0,xmm1,0x1b ++ pshufd xmm1,xmm1,0xb1 ++ pshufd xmm2,xmm2,0x1b ++ movdqa xmm8,xmm7 ++DB 102,15,58,15,202,8 ++ punpcklqdq xmm2,xmm0 ++ jmp NEAR $L$oop_shaext ++ ++ALIGN 16 ++$L$oop_shaext: ++ movdqu xmm3,XMMWORD[rsi] ++ movdqu xmm4,XMMWORD[16+rsi] ++ movdqu xmm5,XMMWORD[32+rsi] ++DB 102,15,56,0,223 ++ movdqu xmm6,XMMWORD[48+rsi] ++ ++ movdqa xmm0,XMMWORD[((0-128))+rcx] ++ paddd xmm0,xmm3 ++DB 102,15,56,0,231 ++ movdqa xmm10,xmm2 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ nop ++ movdqa xmm9,xmm1 ++DB 15,56,203,202 ++ ++ movdqa xmm0,XMMWORD[((32-128))+rcx] ++ paddd xmm0,xmm4 ++DB 102,15,56,0,239 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ lea rsi,[64+rsi] ++DB 15,56,204,220 ++DB 15,56,203,202 ++ ++ movdqa xmm0,XMMWORD[((64-128))+rcx] ++ paddd xmm0,xmm5 ++DB 102,15,56,0,247 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm6 ++DB 102,15,58,15,253,4 ++ nop ++ paddd xmm3,xmm7 ++DB 15,56,204,229 ++DB 15,56,203,202 ++ ++ movdqa xmm0,XMMWORD[((96-128))+rcx] ++ paddd xmm0,xmm6 ++DB 15,56,205,222 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm3 ++DB 102,15,58,15,254,4 ++ nop ++ paddd xmm4,xmm7 ++DB 15,56,204,238 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((128-128))+rcx] ++ paddd xmm0,xmm3 ++DB 15,56,205,227 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm4 ++DB 102,15,58,15,251,4 ++ nop ++ paddd xmm5,xmm7 ++DB 15,56,204,243 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((160-128))+rcx] ++ paddd xmm0,xmm4 ++DB 15,56,205,236 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm5 ++DB 102,15,58,15,252,4 ++ nop ++ paddd xmm6,xmm7 ++DB 15,56,204,220 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((192-128))+rcx] ++ paddd xmm0,xmm5 ++DB 15,56,205,245 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm6 ++DB 102,15,58,15,253,4 ++ nop ++ paddd xmm3,xmm7 ++DB 15,56,204,229 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((224-128))+rcx] ++ paddd xmm0,xmm6 ++DB 15,56,205,222 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm3 ++DB 102,15,58,15,254,4 ++ nop ++ paddd xmm4,xmm7 ++DB 15,56,204,238 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((256-128))+rcx] ++ paddd xmm0,xmm3 ++DB 15,56,205,227 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm4 ++DB 102,15,58,15,251,4 ++ nop ++ paddd xmm5,xmm7 ++DB 15,56,204,243 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((288-128))+rcx] ++ paddd xmm0,xmm4 ++DB 15,56,205,236 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm5 ++DB 102,15,58,15,252,4 ++ nop ++ paddd xmm6,xmm7 ++DB 15,56,204,220 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((320-128))+rcx] ++ paddd xmm0,xmm5 ++DB 15,56,205,245 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm6 ++DB 102,15,58,15,253,4 ++ nop ++ paddd xmm3,xmm7 ++DB 15,56,204,229 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((352-128))+rcx] ++ paddd xmm0,xmm6 ++DB 15,56,205,222 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm3 ++DB 102,15,58,15,254,4 ++ nop ++ paddd xmm4,xmm7 ++DB 15,56,204,238 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((384-128))+rcx] ++ paddd xmm0,xmm3 ++DB 15,56,205,227 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm4 ++DB 102,15,58,15,251,4 ++ nop ++ paddd xmm5,xmm7 ++DB 15,56,204,243 ++DB 15,56,203,202 ++ movdqa xmm0,XMMWORD[((416-128))+rcx] ++ paddd xmm0,xmm4 ++DB 15,56,205,236 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ movdqa xmm7,xmm5 ++DB 102,15,58,15,252,4 ++DB 15,56,203,202 ++ paddd xmm6,xmm7 ++ ++ movdqa xmm0,XMMWORD[((448-128))+rcx] ++ paddd xmm0,xmm5 ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++DB 15,56,205,245 ++ movdqa xmm7,xmm8 ++DB 15,56,203,202 ++ ++ movdqa xmm0,XMMWORD[((480-128))+rcx] ++ paddd xmm0,xmm6 ++ nop ++DB 15,56,203,209 ++ pshufd xmm0,xmm0,0x0e ++ dec rdx ++ nop ++DB 15,56,203,202 ++ ++ paddd xmm2,xmm10 ++ paddd xmm1,xmm9 ++ jnz NEAR $L$oop_shaext ++ ++ pshufd xmm2,xmm2,0xb1 ++ pshufd xmm7,xmm1,0x1b ++ pshufd xmm1,xmm1,0xb1 ++ punpckhqdq xmm1,xmm2 ++DB 102,15,58,15,215,8 ++ ++ movdqu XMMWORD[rdi],xmm1 ++ movdqu XMMWORD[16+rdi],xmm2 ++ movaps xmm6,XMMWORD[((-8-80))+rax] ++ movaps xmm7,XMMWORD[((-8-64))+rax] ++ movaps xmm8,XMMWORD[((-8-48))+rax] ++ movaps xmm9,XMMWORD[((-8-32))+rax] ++ movaps xmm10,XMMWORD[((-8-16))+rax] ++ mov rsp,rax ++$L$epilogue_shaext: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_block_data_order_shaext: ++ ++ALIGN 64 ++sha256_block_data_order_ssse3: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_block_data_order_ssse3: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++$L$ssse3_shortcut: ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ mov r11,rsp ++ shl rdx,4 ++ sub rsp,160 ++ lea rdx,[rdx*4+rsi] ++ and rsp,-64 ++ mov QWORD[((64+0))+rsp],rdi ++ mov QWORD[((64+8))+rsp],rsi ++ mov QWORD[((64+16))+rsp],rdx ++ mov QWORD[((64+24))+rsp],r11 ++ movaps XMMWORD[(64+32)+rsp],xmm6 ++ movaps XMMWORD[(64+48)+rsp],xmm7 ++ movaps XMMWORD[(64+64)+rsp],xmm8 ++ movaps XMMWORD[(64+80)+rsp],xmm9 ++$L$prologue_ssse3: ++ ++ mov eax,DWORD[rdi] ++ mov ebx,DWORD[4+rdi] ++ mov ecx,DWORD[8+rdi] ++ mov edx,DWORD[12+rdi] ++ mov r8d,DWORD[16+rdi] ++ mov r9d,DWORD[20+rdi] ++ mov r10d,DWORD[24+rdi] ++ mov r11d,DWORD[28+rdi] ++ ++ ++ jmp NEAR $L$loop_ssse3 ++ALIGN 16 ++$L$loop_ssse3: ++ movdqa xmm7,XMMWORD[((K256+512))] ++ movdqu xmm0,XMMWORD[rsi] ++ movdqu xmm1,XMMWORD[16+rsi] ++ movdqu xmm2,XMMWORD[32+rsi] ++DB 102,15,56,0,199 ++ movdqu xmm3,XMMWORD[48+rsi] ++ lea rbp,[K256] ++DB 102,15,56,0,207 ++ movdqa xmm4,XMMWORD[rbp] ++ movdqa xmm5,XMMWORD[32+rbp] ++DB 102,15,56,0,215 ++ paddd xmm4,xmm0 ++ movdqa xmm6,XMMWORD[64+rbp] ++DB 102,15,56,0,223 ++ movdqa xmm7,XMMWORD[96+rbp] ++ paddd xmm5,xmm1 ++ paddd xmm6,xmm2 ++ paddd xmm7,xmm3 ++ movdqa XMMWORD[rsp],xmm4 ++ mov r14d,eax ++ movdqa XMMWORD[16+rsp],xmm5 ++ mov edi,ebx ++ movdqa XMMWORD[32+rsp],xmm6 ++ xor edi,ecx ++ movdqa XMMWORD[48+rsp],xmm7 ++ mov r13d,r8d ++ jmp NEAR $L$ssse3_00_47 ++ ++ALIGN 16 ++$L$ssse3_00_47: ++ sub rbp,-128 ++ ror r13d,14 ++ movdqa xmm4,xmm1 ++ mov eax,r14d ++ mov r12d,r9d ++ movdqa xmm7,xmm3 ++ ror r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ ror r13d,5 ++ xor r14d,eax ++DB 102,15,58,15,224,4 ++ and r12d,r8d ++ xor r13d,r8d ++DB 102,15,58,15,250,4 ++ add r11d,DWORD[rsp] ++ mov r15d,eax ++ xor r12d,r10d ++ ror r14d,11 ++ movdqa xmm5,xmm4 ++ xor r15d,ebx ++ add r11d,r12d ++ movdqa xmm6,xmm4 ++ ror r13d,6 ++ and edi,r15d ++ psrld xmm4,3 ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ paddd xmm0,xmm7 ++ ror r14d,2 ++ add edx,r11d ++ psrld xmm6,7 ++ add r11d,edi ++ mov r13d,edx ++ pshufd xmm7,xmm3,250 ++ add r14d,r11d ++ ror r13d,14 ++ pslld xmm5,14 ++ mov r11d,r14d ++ mov r12d,r8d ++ pxor xmm4,xmm6 ++ ror r14d,9 ++ xor r13d,edx ++ xor r12d,r9d ++ ror r13d,5 ++ psrld xmm6,11 ++ xor r14d,r11d ++ pxor xmm4,xmm5 ++ and r12d,edx ++ xor r13d,edx ++ pslld xmm5,11 ++ add r10d,DWORD[4+rsp] ++ mov edi,r11d ++ pxor xmm4,xmm6 ++ xor r12d,r9d ++ ror r14d,11 ++ movdqa xmm6,xmm7 ++ xor edi,eax ++ add r10d,r12d ++ pxor xmm4,xmm5 ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ psrld xmm7,10 ++ add r10d,r13d ++ xor r15d,eax ++ paddd xmm0,xmm4 ++ ror r14d,2 ++ add ecx,r10d ++ psrlq xmm6,17 ++ add r10d,r15d ++ mov r13d,ecx ++ add r14d,r10d ++ pxor xmm7,xmm6 ++ ror r13d,14 ++ mov r10d,r14d ++ mov r12d,edx ++ ror r14d,9 ++ psrlq xmm6,2 ++ xor r13d,ecx ++ xor r12d,r8d ++ pxor xmm7,xmm6 ++ ror r13d,5 ++ xor r14d,r10d ++ and r12d,ecx ++ pshufd xmm7,xmm7,128 ++ xor r13d,ecx ++ add r9d,DWORD[8+rsp] ++ mov r15d,r10d ++ psrldq xmm7,8 ++ xor r12d,r8d ++ ror r14d,11 ++ xor r15d,r11d ++ add r9d,r12d ++ ror r13d,6 ++ paddd xmm0,xmm7 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ pshufd xmm7,xmm0,80 ++ xor edi,r11d ++ ror r14d,2 ++ add ebx,r9d ++ movdqa xmm6,xmm7 ++ add r9d,edi ++ mov r13d,ebx ++ psrld xmm7,10 ++ add r14d,r9d ++ ror r13d,14 ++ psrlq xmm6,17 ++ mov r9d,r14d ++ mov r12d,ecx ++ pxor xmm7,xmm6 ++ ror r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ ror r13d,5 ++ xor r14d,r9d ++ psrlq xmm6,2 ++ and r12d,ebx ++ xor r13d,ebx ++ add r8d,DWORD[12+rsp] ++ pxor xmm7,xmm6 ++ mov edi,r9d ++ xor r12d,edx ++ ror r14d,11 ++ pshufd xmm7,xmm7,8 ++ xor edi,r10d ++ add r8d,r12d ++ movdqa xmm6,XMMWORD[rbp] ++ ror r13d,6 ++ and r15d,edi ++ pslldq xmm7,8 ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ paddd xmm0,xmm7 ++ ror r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ paddd xmm6,xmm0 ++ mov r13d,eax ++ add r14d,r8d ++ movdqa XMMWORD[rsp],xmm6 ++ ror r13d,14 ++ movdqa xmm4,xmm2 ++ mov r8d,r14d ++ mov r12d,ebx ++ movdqa xmm7,xmm0 ++ ror r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ ror r13d,5 ++ xor r14d,r8d ++DB 102,15,58,15,225,4 ++ and r12d,eax ++ xor r13d,eax ++DB 102,15,58,15,251,4 ++ add edx,DWORD[16+rsp] ++ mov r15d,r8d ++ xor r12d,ecx ++ ror r14d,11 ++ movdqa xmm5,xmm4 ++ xor r15d,r9d ++ add edx,r12d ++ movdqa xmm6,xmm4 ++ ror r13d,6 ++ and edi,r15d ++ psrld xmm4,3 ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ paddd xmm1,xmm7 ++ ror r14d,2 ++ add r11d,edx ++ psrld xmm6,7 ++ add edx,edi ++ mov r13d,r11d ++ pshufd xmm7,xmm0,250 ++ add r14d,edx ++ ror r13d,14 ++ pslld xmm5,14 ++ mov edx,r14d ++ mov r12d,eax ++ pxor xmm4,xmm6 ++ ror r14d,9 ++ xor r13d,r11d ++ xor r12d,ebx ++ ror r13d,5 ++ psrld xmm6,11 ++ xor r14d,edx ++ pxor xmm4,xmm5 ++ and r12d,r11d ++ xor r13d,r11d ++ pslld xmm5,11 ++ add ecx,DWORD[20+rsp] ++ mov edi,edx ++ pxor xmm4,xmm6 ++ xor r12d,ebx ++ ror r14d,11 ++ movdqa xmm6,xmm7 ++ xor edi,r8d ++ add ecx,r12d ++ pxor xmm4,xmm5 ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ psrld xmm7,10 ++ add ecx,r13d ++ xor r15d,r8d ++ paddd xmm1,xmm4 ++ ror r14d,2 ++ add r10d,ecx ++ psrlq xmm6,17 ++ add ecx,r15d ++ mov r13d,r10d ++ add r14d,ecx ++ pxor xmm7,xmm6 ++ ror r13d,14 ++ mov ecx,r14d ++ mov r12d,r11d ++ ror r14d,9 ++ psrlq xmm6,2 ++ xor r13d,r10d ++ xor r12d,eax ++ pxor xmm7,xmm6 ++ ror r13d,5 ++ xor r14d,ecx ++ and r12d,r10d ++ pshufd xmm7,xmm7,128 ++ xor r13d,r10d ++ add ebx,DWORD[24+rsp] ++ mov r15d,ecx ++ psrldq xmm7,8 ++ xor r12d,eax ++ ror r14d,11 ++ xor r15d,edx ++ add ebx,r12d ++ ror r13d,6 ++ paddd xmm1,xmm7 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ pshufd xmm7,xmm1,80 ++ xor edi,edx ++ ror r14d,2 ++ add r9d,ebx ++ movdqa xmm6,xmm7 ++ add ebx,edi ++ mov r13d,r9d ++ psrld xmm7,10 ++ add r14d,ebx ++ ror r13d,14 ++ psrlq xmm6,17 ++ mov ebx,r14d ++ mov r12d,r10d ++ pxor xmm7,xmm6 ++ ror r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ ror r13d,5 ++ xor r14d,ebx ++ psrlq xmm6,2 ++ and r12d,r9d ++ xor r13d,r9d ++ add eax,DWORD[28+rsp] ++ pxor xmm7,xmm6 ++ mov edi,ebx ++ xor r12d,r11d ++ ror r14d,11 ++ pshufd xmm7,xmm7,8 ++ xor edi,ecx ++ add eax,r12d ++ movdqa xmm6,XMMWORD[32+rbp] ++ ror r13d,6 ++ and r15d,edi ++ pslldq xmm7,8 ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ paddd xmm1,xmm7 ++ ror r14d,2 ++ add r8d,eax ++ add eax,r15d ++ paddd xmm6,xmm1 ++ mov r13d,r8d ++ add r14d,eax ++ movdqa XMMWORD[16+rsp],xmm6 ++ ror r13d,14 ++ movdqa xmm4,xmm3 ++ mov eax,r14d ++ mov r12d,r9d ++ movdqa xmm7,xmm1 ++ ror r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ ror r13d,5 ++ xor r14d,eax ++DB 102,15,58,15,226,4 ++ and r12d,r8d ++ xor r13d,r8d ++DB 102,15,58,15,248,4 ++ add r11d,DWORD[32+rsp] ++ mov r15d,eax ++ xor r12d,r10d ++ ror r14d,11 ++ movdqa xmm5,xmm4 ++ xor r15d,ebx ++ add r11d,r12d ++ movdqa xmm6,xmm4 ++ ror r13d,6 ++ and edi,r15d ++ psrld xmm4,3 ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ paddd xmm2,xmm7 ++ ror r14d,2 ++ add edx,r11d ++ psrld xmm6,7 ++ add r11d,edi ++ mov r13d,edx ++ pshufd xmm7,xmm1,250 ++ add r14d,r11d ++ ror r13d,14 ++ pslld xmm5,14 ++ mov r11d,r14d ++ mov r12d,r8d ++ pxor xmm4,xmm6 ++ ror r14d,9 ++ xor r13d,edx ++ xor r12d,r9d ++ ror r13d,5 ++ psrld xmm6,11 ++ xor r14d,r11d ++ pxor xmm4,xmm5 ++ and r12d,edx ++ xor r13d,edx ++ pslld xmm5,11 ++ add r10d,DWORD[36+rsp] ++ mov edi,r11d ++ pxor xmm4,xmm6 ++ xor r12d,r9d ++ ror r14d,11 ++ movdqa xmm6,xmm7 ++ xor edi,eax ++ add r10d,r12d ++ pxor xmm4,xmm5 ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ psrld xmm7,10 ++ add r10d,r13d ++ xor r15d,eax ++ paddd xmm2,xmm4 ++ ror r14d,2 ++ add ecx,r10d ++ psrlq xmm6,17 ++ add r10d,r15d ++ mov r13d,ecx ++ add r14d,r10d ++ pxor xmm7,xmm6 ++ ror r13d,14 ++ mov r10d,r14d ++ mov r12d,edx ++ ror r14d,9 ++ psrlq xmm6,2 ++ xor r13d,ecx ++ xor r12d,r8d ++ pxor xmm7,xmm6 ++ ror r13d,5 ++ xor r14d,r10d ++ and r12d,ecx ++ pshufd xmm7,xmm7,128 ++ xor r13d,ecx ++ add r9d,DWORD[40+rsp] ++ mov r15d,r10d ++ psrldq xmm7,8 ++ xor r12d,r8d ++ ror r14d,11 ++ xor r15d,r11d ++ add r9d,r12d ++ ror r13d,6 ++ paddd xmm2,xmm7 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ pshufd xmm7,xmm2,80 ++ xor edi,r11d ++ ror r14d,2 ++ add ebx,r9d ++ movdqa xmm6,xmm7 ++ add r9d,edi ++ mov r13d,ebx ++ psrld xmm7,10 ++ add r14d,r9d ++ ror r13d,14 ++ psrlq xmm6,17 ++ mov r9d,r14d ++ mov r12d,ecx ++ pxor xmm7,xmm6 ++ ror r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ ror r13d,5 ++ xor r14d,r9d ++ psrlq xmm6,2 ++ and r12d,ebx ++ xor r13d,ebx ++ add r8d,DWORD[44+rsp] ++ pxor xmm7,xmm6 ++ mov edi,r9d ++ xor r12d,edx ++ ror r14d,11 ++ pshufd xmm7,xmm7,8 ++ xor edi,r10d ++ add r8d,r12d ++ movdqa xmm6,XMMWORD[64+rbp] ++ ror r13d,6 ++ and r15d,edi ++ pslldq xmm7,8 ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ paddd xmm2,xmm7 ++ ror r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ paddd xmm6,xmm2 ++ mov r13d,eax ++ add r14d,r8d ++ movdqa XMMWORD[32+rsp],xmm6 ++ ror r13d,14 ++ movdqa xmm4,xmm0 ++ mov r8d,r14d ++ mov r12d,ebx ++ movdqa xmm7,xmm2 ++ ror r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ ror r13d,5 ++ xor r14d,r8d ++DB 102,15,58,15,227,4 ++ and r12d,eax ++ xor r13d,eax ++DB 102,15,58,15,249,4 ++ add edx,DWORD[48+rsp] ++ mov r15d,r8d ++ xor r12d,ecx ++ ror r14d,11 ++ movdqa xmm5,xmm4 ++ xor r15d,r9d ++ add edx,r12d ++ movdqa xmm6,xmm4 ++ ror r13d,6 ++ and edi,r15d ++ psrld xmm4,3 ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ paddd xmm3,xmm7 ++ ror r14d,2 ++ add r11d,edx ++ psrld xmm6,7 ++ add edx,edi ++ mov r13d,r11d ++ pshufd xmm7,xmm2,250 ++ add r14d,edx ++ ror r13d,14 ++ pslld xmm5,14 ++ mov edx,r14d ++ mov r12d,eax ++ pxor xmm4,xmm6 ++ ror r14d,9 ++ xor r13d,r11d ++ xor r12d,ebx ++ ror r13d,5 ++ psrld xmm6,11 ++ xor r14d,edx ++ pxor xmm4,xmm5 ++ and r12d,r11d ++ xor r13d,r11d ++ pslld xmm5,11 ++ add ecx,DWORD[52+rsp] ++ mov edi,edx ++ pxor xmm4,xmm6 ++ xor r12d,ebx ++ ror r14d,11 ++ movdqa xmm6,xmm7 ++ xor edi,r8d ++ add ecx,r12d ++ pxor xmm4,xmm5 ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ psrld xmm7,10 ++ add ecx,r13d ++ xor r15d,r8d ++ paddd xmm3,xmm4 ++ ror r14d,2 ++ add r10d,ecx ++ psrlq xmm6,17 ++ add ecx,r15d ++ mov r13d,r10d ++ add r14d,ecx ++ pxor xmm7,xmm6 ++ ror r13d,14 ++ mov ecx,r14d ++ mov r12d,r11d ++ ror r14d,9 ++ psrlq xmm6,2 ++ xor r13d,r10d ++ xor r12d,eax ++ pxor xmm7,xmm6 ++ ror r13d,5 ++ xor r14d,ecx ++ and r12d,r10d ++ pshufd xmm7,xmm7,128 ++ xor r13d,r10d ++ add ebx,DWORD[56+rsp] ++ mov r15d,ecx ++ psrldq xmm7,8 ++ xor r12d,eax ++ ror r14d,11 ++ xor r15d,edx ++ add ebx,r12d ++ ror r13d,6 ++ paddd xmm3,xmm7 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ pshufd xmm7,xmm3,80 ++ xor edi,edx ++ ror r14d,2 ++ add r9d,ebx ++ movdqa xmm6,xmm7 ++ add ebx,edi ++ mov r13d,r9d ++ psrld xmm7,10 ++ add r14d,ebx ++ ror r13d,14 ++ psrlq xmm6,17 ++ mov ebx,r14d ++ mov r12d,r10d ++ pxor xmm7,xmm6 ++ ror r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ ror r13d,5 ++ xor r14d,ebx ++ psrlq xmm6,2 ++ and r12d,r9d ++ xor r13d,r9d ++ add eax,DWORD[60+rsp] ++ pxor xmm7,xmm6 ++ mov edi,ebx ++ xor r12d,r11d ++ ror r14d,11 ++ pshufd xmm7,xmm7,8 ++ xor edi,ecx ++ add eax,r12d ++ movdqa xmm6,XMMWORD[96+rbp] ++ ror r13d,6 ++ and r15d,edi ++ pslldq xmm7,8 ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ paddd xmm3,xmm7 ++ ror r14d,2 ++ add r8d,eax ++ add eax,r15d ++ paddd xmm6,xmm3 ++ mov r13d,r8d ++ add r14d,eax ++ movdqa XMMWORD[48+rsp],xmm6 ++ cmp BYTE[131+rbp],0 ++ jne NEAR $L$ssse3_00_47 ++ ror r13d,14 ++ mov eax,r14d ++ mov r12d,r9d ++ ror r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ ror r13d,5 ++ xor r14d,eax ++ and r12d,r8d ++ xor r13d,r8d ++ add r11d,DWORD[rsp] ++ mov r15d,eax ++ xor r12d,r10d ++ ror r14d,11 ++ xor r15d,ebx ++ add r11d,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ ror r14d,2 ++ add edx,r11d ++ add r11d,edi ++ mov r13d,edx ++ add r14d,r11d ++ ror r13d,14 ++ mov r11d,r14d ++ mov r12d,r8d ++ ror r14d,9 ++ xor r13d,edx ++ xor r12d,r9d ++ ror r13d,5 ++ xor r14d,r11d ++ and r12d,edx ++ xor r13d,edx ++ add r10d,DWORD[4+rsp] ++ mov edi,r11d ++ xor r12d,r9d ++ ror r14d,11 ++ xor edi,eax ++ add r10d,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ add r10d,r13d ++ xor r15d,eax ++ ror r14d,2 ++ add ecx,r10d ++ add r10d,r15d ++ mov r13d,ecx ++ add r14d,r10d ++ ror r13d,14 ++ mov r10d,r14d ++ mov r12d,edx ++ ror r14d,9 ++ xor r13d,ecx ++ xor r12d,r8d ++ ror r13d,5 ++ xor r14d,r10d ++ and r12d,ecx ++ xor r13d,ecx ++ add r9d,DWORD[8+rsp] ++ mov r15d,r10d ++ xor r12d,r8d ++ ror r14d,11 ++ xor r15d,r11d ++ add r9d,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ xor edi,r11d ++ ror r14d,2 ++ add ebx,r9d ++ add r9d,edi ++ mov r13d,ebx ++ add r14d,r9d ++ ror r13d,14 ++ mov r9d,r14d ++ mov r12d,ecx ++ ror r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ ror r13d,5 ++ xor r14d,r9d ++ and r12d,ebx ++ xor r13d,ebx ++ add r8d,DWORD[12+rsp] ++ mov edi,r9d ++ xor r12d,edx ++ ror r14d,11 ++ xor edi,r10d ++ add r8d,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ ror r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ mov r13d,eax ++ add r14d,r8d ++ ror r13d,14 ++ mov r8d,r14d ++ mov r12d,ebx ++ ror r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ ror r13d,5 ++ xor r14d,r8d ++ and r12d,eax ++ xor r13d,eax ++ add edx,DWORD[16+rsp] ++ mov r15d,r8d ++ xor r12d,ecx ++ ror r14d,11 ++ xor r15d,r9d ++ add edx,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ ror r14d,2 ++ add r11d,edx ++ add edx,edi ++ mov r13d,r11d ++ add r14d,edx ++ ror r13d,14 ++ mov edx,r14d ++ mov r12d,eax ++ ror r14d,9 ++ xor r13d,r11d ++ xor r12d,ebx ++ ror r13d,5 ++ xor r14d,edx ++ and r12d,r11d ++ xor r13d,r11d ++ add ecx,DWORD[20+rsp] ++ mov edi,edx ++ xor r12d,ebx ++ ror r14d,11 ++ xor edi,r8d ++ add ecx,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ add ecx,r13d ++ xor r15d,r8d ++ ror r14d,2 ++ add r10d,ecx ++ add ecx,r15d ++ mov r13d,r10d ++ add r14d,ecx ++ ror r13d,14 ++ mov ecx,r14d ++ mov r12d,r11d ++ ror r14d,9 ++ xor r13d,r10d ++ xor r12d,eax ++ ror r13d,5 ++ xor r14d,ecx ++ and r12d,r10d ++ xor r13d,r10d ++ add ebx,DWORD[24+rsp] ++ mov r15d,ecx ++ xor r12d,eax ++ ror r14d,11 ++ xor r15d,edx ++ add ebx,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ xor edi,edx ++ ror r14d,2 ++ add r9d,ebx ++ add ebx,edi ++ mov r13d,r9d ++ add r14d,ebx ++ ror r13d,14 ++ mov ebx,r14d ++ mov r12d,r10d ++ ror r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ ror r13d,5 ++ xor r14d,ebx ++ and r12d,r9d ++ xor r13d,r9d ++ add eax,DWORD[28+rsp] ++ mov edi,ebx ++ xor r12d,r11d ++ ror r14d,11 ++ xor edi,ecx ++ add eax,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ ror r14d,2 ++ add r8d,eax ++ add eax,r15d ++ mov r13d,r8d ++ add r14d,eax ++ ror r13d,14 ++ mov eax,r14d ++ mov r12d,r9d ++ ror r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ ror r13d,5 ++ xor r14d,eax ++ and r12d,r8d ++ xor r13d,r8d ++ add r11d,DWORD[32+rsp] ++ mov r15d,eax ++ xor r12d,r10d ++ ror r14d,11 ++ xor r15d,ebx ++ add r11d,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ ror r14d,2 ++ add edx,r11d ++ add r11d,edi ++ mov r13d,edx ++ add r14d,r11d ++ ror r13d,14 ++ mov r11d,r14d ++ mov r12d,r8d ++ ror r14d,9 ++ xor r13d,edx ++ xor r12d,r9d ++ ror r13d,5 ++ xor r14d,r11d ++ and r12d,edx ++ xor r13d,edx ++ add r10d,DWORD[36+rsp] ++ mov edi,r11d ++ xor r12d,r9d ++ ror r14d,11 ++ xor edi,eax ++ add r10d,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ add r10d,r13d ++ xor r15d,eax ++ ror r14d,2 ++ add ecx,r10d ++ add r10d,r15d ++ mov r13d,ecx ++ add r14d,r10d ++ ror r13d,14 ++ mov r10d,r14d ++ mov r12d,edx ++ ror r14d,9 ++ xor r13d,ecx ++ xor r12d,r8d ++ ror r13d,5 ++ xor r14d,r10d ++ and r12d,ecx ++ xor r13d,ecx ++ add r9d,DWORD[40+rsp] ++ mov r15d,r10d ++ xor r12d,r8d ++ ror r14d,11 ++ xor r15d,r11d ++ add r9d,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ xor edi,r11d ++ ror r14d,2 ++ add ebx,r9d ++ add r9d,edi ++ mov r13d,ebx ++ add r14d,r9d ++ ror r13d,14 ++ mov r9d,r14d ++ mov r12d,ecx ++ ror r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ ror r13d,5 ++ xor r14d,r9d ++ and r12d,ebx ++ xor r13d,ebx ++ add r8d,DWORD[44+rsp] ++ mov edi,r9d ++ xor r12d,edx ++ ror r14d,11 ++ xor edi,r10d ++ add r8d,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ ror r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ mov r13d,eax ++ add r14d,r8d ++ ror r13d,14 ++ mov r8d,r14d ++ mov r12d,ebx ++ ror r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ ror r13d,5 ++ xor r14d,r8d ++ and r12d,eax ++ xor r13d,eax ++ add edx,DWORD[48+rsp] ++ mov r15d,r8d ++ xor r12d,ecx ++ ror r14d,11 ++ xor r15d,r9d ++ add edx,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ ror r14d,2 ++ add r11d,edx ++ add edx,edi ++ mov r13d,r11d ++ add r14d,edx ++ ror r13d,14 ++ mov edx,r14d ++ mov r12d,eax ++ ror r14d,9 ++ xor r13d,r11d ++ xor r12d,ebx ++ ror r13d,5 ++ xor r14d,edx ++ and r12d,r11d ++ xor r13d,r11d ++ add ecx,DWORD[52+rsp] ++ mov edi,edx ++ xor r12d,ebx ++ ror r14d,11 ++ xor edi,r8d ++ add ecx,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ add ecx,r13d ++ xor r15d,r8d ++ ror r14d,2 ++ add r10d,ecx ++ add ecx,r15d ++ mov r13d,r10d ++ add r14d,ecx ++ ror r13d,14 ++ mov ecx,r14d ++ mov r12d,r11d ++ ror r14d,9 ++ xor r13d,r10d ++ xor r12d,eax ++ ror r13d,5 ++ xor r14d,ecx ++ and r12d,r10d ++ xor r13d,r10d ++ add ebx,DWORD[56+rsp] ++ mov r15d,ecx ++ xor r12d,eax ++ ror r14d,11 ++ xor r15d,edx ++ add ebx,r12d ++ ror r13d,6 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ xor edi,edx ++ ror r14d,2 ++ add r9d,ebx ++ add ebx,edi ++ mov r13d,r9d ++ add r14d,ebx ++ ror r13d,14 ++ mov ebx,r14d ++ mov r12d,r10d ++ ror r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ ror r13d,5 ++ xor r14d,ebx ++ and r12d,r9d ++ xor r13d,r9d ++ add eax,DWORD[60+rsp] ++ mov edi,ebx ++ xor r12d,r11d ++ ror r14d,11 ++ xor edi,ecx ++ add eax,r12d ++ ror r13d,6 ++ and r15d,edi ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ ror r14d,2 ++ add r8d,eax ++ add eax,r15d ++ mov r13d,r8d ++ add r14d,eax ++ mov rdi,QWORD[((64+0))+rsp] ++ mov eax,r14d ++ ++ add eax,DWORD[rdi] ++ lea rsi,[64+rsi] ++ add ebx,DWORD[4+rdi] ++ add ecx,DWORD[8+rdi] ++ add edx,DWORD[12+rdi] ++ add r8d,DWORD[16+rdi] ++ add r9d,DWORD[20+rdi] ++ add r10d,DWORD[24+rdi] ++ add r11d,DWORD[28+rdi] ++ ++ cmp rsi,QWORD[((64+16))+rsp] ++ ++ mov DWORD[rdi],eax ++ mov DWORD[4+rdi],ebx ++ mov DWORD[8+rdi],ecx ++ mov DWORD[12+rdi],edx ++ mov DWORD[16+rdi],r8d ++ mov DWORD[20+rdi],r9d ++ mov DWORD[24+rdi],r10d ++ mov DWORD[28+rdi],r11d ++ jb NEAR $L$loop_ssse3 ++ ++ mov rsi,QWORD[((64+24))+rsp] ++ movaps xmm6,XMMWORD[((64+32))+rsp] ++ movaps xmm7,XMMWORD[((64+48))+rsp] ++ movaps xmm8,XMMWORD[((64+64))+rsp] ++ movaps xmm9,XMMWORD[((64+80))+rsp] ++ mov r15,QWORD[rsi] ++ mov r14,QWORD[8+rsi] ++ mov r13,QWORD[16+rsi] ++ mov r12,QWORD[24+rsi] ++ mov rbp,QWORD[32+rsi] ++ mov rbx,QWORD[40+rsi] ++ lea rsp,[48+rsi] ++$L$epilogue_ssse3: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_block_data_order_ssse3: ++ ++ALIGN 64 ++sha256_block_data_order_avx: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_block_data_order_avx: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++$L$avx_shortcut: ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ mov r11,rsp ++ shl rdx,4 ++ sub rsp,160 ++ lea rdx,[rdx*4+rsi] ++ and rsp,-64 ++ mov QWORD[((64+0))+rsp],rdi ++ mov QWORD[((64+8))+rsp],rsi ++ mov QWORD[((64+16))+rsp],rdx ++ mov QWORD[((64+24))+rsp],r11 ++ movaps XMMWORD[(64+32)+rsp],xmm6 ++ movaps XMMWORD[(64+48)+rsp],xmm7 ++ movaps XMMWORD[(64+64)+rsp],xmm8 ++ movaps XMMWORD[(64+80)+rsp],xmm9 ++$L$prologue_avx: ++ ++ vzeroupper ++ mov eax,DWORD[rdi] ++ mov ebx,DWORD[4+rdi] ++ mov ecx,DWORD[8+rdi] ++ mov edx,DWORD[12+rdi] ++ mov r8d,DWORD[16+rdi] ++ mov r9d,DWORD[20+rdi] ++ mov r10d,DWORD[24+rdi] ++ mov r11d,DWORD[28+rdi] ++ vmovdqa xmm8,XMMWORD[((K256+512+32))] ++ vmovdqa xmm9,XMMWORD[((K256+512+64))] ++ jmp NEAR $L$loop_avx ++ALIGN 16 ++$L$loop_avx: ++ vmovdqa xmm7,XMMWORD[((K256+512))] ++ vmovdqu xmm0,XMMWORD[rsi] ++ vmovdqu xmm1,XMMWORD[16+rsi] ++ vmovdqu xmm2,XMMWORD[32+rsi] ++ vmovdqu xmm3,XMMWORD[48+rsi] ++ vpshufb xmm0,xmm0,xmm7 ++ lea rbp,[K256] ++ vpshufb xmm1,xmm1,xmm7 ++ vpshufb xmm2,xmm2,xmm7 ++ vpaddd xmm4,xmm0,XMMWORD[rbp] ++ vpshufb xmm3,xmm3,xmm7 ++ vpaddd xmm5,xmm1,XMMWORD[32+rbp] ++ vpaddd xmm6,xmm2,XMMWORD[64+rbp] ++ vpaddd xmm7,xmm3,XMMWORD[96+rbp] ++ vmovdqa XMMWORD[rsp],xmm4 ++ mov r14d,eax ++ vmovdqa XMMWORD[16+rsp],xmm5 ++ mov edi,ebx ++ vmovdqa XMMWORD[32+rsp],xmm6 ++ xor edi,ecx ++ vmovdqa XMMWORD[48+rsp],xmm7 ++ mov r13d,r8d ++ jmp NEAR $L$avx_00_47 ++ ++ALIGN 16 ++$L$avx_00_47: ++ sub rbp,-128 ++ vpalignr xmm4,xmm1,xmm0,4 ++ shrd r13d,r13d,14 ++ mov eax,r14d ++ mov r12d,r9d ++ vpalignr xmm7,xmm3,xmm2,4 ++ shrd r14d,r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ vpsrld xmm6,xmm4,7 ++ shrd r13d,r13d,5 ++ xor r14d,eax ++ and r12d,r8d ++ vpaddd xmm0,xmm0,xmm7 ++ xor r13d,r8d ++ add r11d,DWORD[rsp] ++ mov r15d,eax ++ vpsrld xmm7,xmm4,3 ++ xor r12d,r10d ++ shrd r14d,r14d,11 ++ xor r15d,ebx ++ vpslld xmm5,xmm4,14 ++ add r11d,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ vpxor xmm4,xmm7,xmm6 ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ vpshufd xmm7,xmm3,250 ++ shrd r14d,r14d,2 ++ add edx,r11d ++ add r11d,edi ++ vpsrld xmm6,xmm6,11 ++ mov r13d,edx ++ add r14d,r11d ++ shrd r13d,r13d,14 ++ vpxor xmm4,xmm4,xmm5 ++ mov r11d,r14d ++ mov r12d,r8d ++ shrd r14d,r14d,9 ++ vpslld xmm5,xmm5,11 ++ xor r13d,edx ++ xor r12d,r9d ++ shrd r13d,r13d,5 ++ vpxor xmm4,xmm4,xmm6 ++ xor r14d,r11d ++ and r12d,edx ++ xor r13d,edx ++ vpsrld xmm6,xmm7,10 ++ add r10d,DWORD[4+rsp] ++ mov edi,r11d ++ xor r12d,r9d ++ vpxor xmm4,xmm4,xmm5 ++ shrd r14d,r14d,11 ++ xor edi,eax ++ add r10d,r12d ++ vpsrlq xmm7,xmm7,17 ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ vpaddd xmm0,xmm0,xmm4 ++ add r10d,r13d ++ xor r15d,eax ++ shrd r14d,r14d,2 ++ vpxor xmm6,xmm6,xmm7 ++ add ecx,r10d ++ add r10d,r15d ++ mov r13d,ecx ++ vpsrlq xmm7,xmm7,2 ++ add r14d,r10d ++ shrd r13d,r13d,14 ++ mov r10d,r14d ++ vpxor xmm6,xmm6,xmm7 ++ mov r12d,edx ++ shrd r14d,r14d,9 ++ xor r13d,ecx ++ vpshufb xmm6,xmm6,xmm8 ++ xor r12d,r8d ++ shrd r13d,r13d,5 ++ xor r14d,r10d ++ vpaddd xmm0,xmm0,xmm6 ++ and r12d,ecx ++ xor r13d,ecx ++ add r9d,DWORD[8+rsp] ++ vpshufd xmm7,xmm0,80 ++ mov r15d,r10d ++ xor r12d,r8d ++ shrd r14d,r14d,11 ++ vpsrld xmm6,xmm7,10 ++ xor r15d,r11d ++ add r9d,r12d ++ shrd r13d,r13d,6 ++ vpsrlq xmm7,xmm7,17 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ vpxor xmm6,xmm6,xmm7 ++ xor edi,r11d ++ shrd r14d,r14d,2 ++ add ebx,r9d ++ vpsrlq xmm7,xmm7,2 ++ add r9d,edi ++ mov r13d,ebx ++ add r14d,r9d ++ vpxor xmm6,xmm6,xmm7 ++ shrd r13d,r13d,14 ++ mov r9d,r14d ++ mov r12d,ecx ++ vpshufb xmm6,xmm6,xmm9 ++ shrd r14d,r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ vpaddd xmm0,xmm0,xmm6 ++ shrd r13d,r13d,5 ++ xor r14d,r9d ++ and r12d,ebx ++ vpaddd xmm6,xmm0,XMMWORD[rbp] ++ xor r13d,ebx ++ add r8d,DWORD[12+rsp] ++ mov edi,r9d ++ xor r12d,edx ++ shrd r14d,r14d,11 ++ xor edi,r10d ++ add r8d,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ shrd r14d,r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ mov r13d,eax ++ add r14d,r8d ++ vmovdqa XMMWORD[rsp],xmm6 ++ vpalignr xmm4,xmm2,xmm1,4 ++ shrd r13d,r13d,14 ++ mov r8d,r14d ++ mov r12d,ebx ++ vpalignr xmm7,xmm0,xmm3,4 ++ shrd r14d,r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ vpsrld xmm6,xmm4,7 ++ shrd r13d,r13d,5 ++ xor r14d,r8d ++ and r12d,eax ++ vpaddd xmm1,xmm1,xmm7 ++ xor r13d,eax ++ add edx,DWORD[16+rsp] ++ mov r15d,r8d ++ vpsrld xmm7,xmm4,3 ++ xor r12d,ecx ++ shrd r14d,r14d,11 ++ xor r15d,r9d ++ vpslld xmm5,xmm4,14 ++ add edx,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ vpxor xmm4,xmm7,xmm6 ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ vpshufd xmm7,xmm0,250 ++ shrd r14d,r14d,2 ++ add r11d,edx ++ add edx,edi ++ vpsrld xmm6,xmm6,11 ++ mov r13d,r11d ++ add r14d,edx ++ shrd r13d,r13d,14 ++ vpxor xmm4,xmm4,xmm5 ++ mov edx,r14d ++ mov r12d,eax ++ shrd r14d,r14d,9 ++ vpslld xmm5,xmm5,11 ++ xor r13d,r11d ++ xor r12d,ebx ++ shrd r13d,r13d,5 ++ vpxor xmm4,xmm4,xmm6 ++ xor r14d,edx ++ and r12d,r11d ++ xor r13d,r11d ++ vpsrld xmm6,xmm7,10 ++ add ecx,DWORD[20+rsp] ++ mov edi,edx ++ xor r12d,ebx ++ vpxor xmm4,xmm4,xmm5 ++ shrd r14d,r14d,11 ++ xor edi,r8d ++ add ecx,r12d ++ vpsrlq xmm7,xmm7,17 ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ vpaddd xmm1,xmm1,xmm4 ++ add ecx,r13d ++ xor r15d,r8d ++ shrd r14d,r14d,2 ++ vpxor xmm6,xmm6,xmm7 ++ add r10d,ecx ++ add ecx,r15d ++ mov r13d,r10d ++ vpsrlq xmm7,xmm7,2 ++ add r14d,ecx ++ shrd r13d,r13d,14 ++ mov ecx,r14d ++ vpxor xmm6,xmm6,xmm7 ++ mov r12d,r11d ++ shrd r14d,r14d,9 ++ xor r13d,r10d ++ vpshufb xmm6,xmm6,xmm8 ++ xor r12d,eax ++ shrd r13d,r13d,5 ++ xor r14d,ecx ++ vpaddd xmm1,xmm1,xmm6 ++ and r12d,r10d ++ xor r13d,r10d ++ add ebx,DWORD[24+rsp] ++ vpshufd xmm7,xmm1,80 ++ mov r15d,ecx ++ xor r12d,eax ++ shrd r14d,r14d,11 ++ vpsrld xmm6,xmm7,10 ++ xor r15d,edx ++ add ebx,r12d ++ shrd r13d,r13d,6 ++ vpsrlq xmm7,xmm7,17 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ vpxor xmm6,xmm6,xmm7 ++ xor edi,edx ++ shrd r14d,r14d,2 ++ add r9d,ebx ++ vpsrlq xmm7,xmm7,2 ++ add ebx,edi ++ mov r13d,r9d ++ add r14d,ebx ++ vpxor xmm6,xmm6,xmm7 ++ shrd r13d,r13d,14 ++ mov ebx,r14d ++ mov r12d,r10d ++ vpshufb xmm6,xmm6,xmm9 ++ shrd r14d,r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ vpaddd xmm1,xmm1,xmm6 ++ shrd r13d,r13d,5 ++ xor r14d,ebx ++ and r12d,r9d ++ vpaddd xmm6,xmm1,XMMWORD[32+rbp] ++ xor r13d,r9d ++ add eax,DWORD[28+rsp] ++ mov edi,ebx ++ xor r12d,r11d ++ shrd r14d,r14d,11 ++ xor edi,ecx ++ add eax,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ shrd r14d,r14d,2 ++ add r8d,eax ++ add eax,r15d ++ mov r13d,r8d ++ add r14d,eax ++ vmovdqa XMMWORD[16+rsp],xmm6 ++ vpalignr xmm4,xmm3,xmm2,4 ++ shrd r13d,r13d,14 ++ mov eax,r14d ++ mov r12d,r9d ++ vpalignr xmm7,xmm1,xmm0,4 ++ shrd r14d,r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ vpsrld xmm6,xmm4,7 ++ shrd r13d,r13d,5 ++ xor r14d,eax ++ and r12d,r8d ++ vpaddd xmm2,xmm2,xmm7 ++ xor r13d,r8d ++ add r11d,DWORD[32+rsp] ++ mov r15d,eax ++ vpsrld xmm7,xmm4,3 ++ xor r12d,r10d ++ shrd r14d,r14d,11 ++ xor r15d,ebx ++ vpslld xmm5,xmm4,14 ++ add r11d,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ vpxor xmm4,xmm7,xmm6 ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ vpshufd xmm7,xmm1,250 ++ shrd r14d,r14d,2 ++ add edx,r11d ++ add r11d,edi ++ vpsrld xmm6,xmm6,11 ++ mov r13d,edx ++ add r14d,r11d ++ shrd r13d,r13d,14 ++ vpxor xmm4,xmm4,xmm5 ++ mov r11d,r14d ++ mov r12d,r8d ++ shrd r14d,r14d,9 ++ vpslld xmm5,xmm5,11 ++ xor r13d,edx ++ xor r12d,r9d ++ shrd r13d,r13d,5 ++ vpxor xmm4,xmm4,xmm6 ++ xor r14d,r11d ++ and r12d,edx ++ xor r13d,edx ++ vpsrld xmm6,xmm7,10 ++ add r10d,DWORD[36+rsp] ++ mov edi,r11d ++ xor r12d,r9d ++ vpxor xmm4,xmm4,xmm5 ++ shrd r14d,r14d,11 ++ xor edi,eax ++ add r10d,r12d ++ vpsrlq xmm7,xmm7,17 ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ vpaddd xmm2,xmm2,xmm4 ++ add r10d,r13d ++ xor r15d,eax ++ shrd r14d,r14d,2 ++ vpxor xmm6,xmm6,xmm7 ++ add ecx,r10d ++ add r10d,r15d ++ mov r13d,ecx ++ vpsrlq xmm7,xmm7,2 ++ add r14d,r10d ++ shrd r13d,r13d,14 ++ mov r10d,r14d ++ vpxor xmm6,xmm6,xmm7 ++ mov r12d,edx ++ shrd r14d,r14d,9 ++ xor r13d,ecx ++ vpshufb xmm6,xmm6,xmm8 ++ xor r12d,r8d ++ shrd r13d,r13d,5 ++ xor r14d,r10d ++ vpaddd xmm2,xmm2,xmm6 ++ and r12d,ecx ++ xor r13d,ecx ++ add r9d,DWORD[40+rsp] ++ vpshufd xmm7,xmm2,80 ++ mov r15d,r10d ++ xor r12d,r8d ++ shrd r14d,r14d,11 ++ vpsrld xmm6,xmm7,10 ++ xor r15d,r11d ++ add r9d,r12d ++ shrd r13d,r13d,6 ++ vpsrlq xmm7,xmm7,17 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ vpxor xmm6,xmm6,xmm7 ++ xor edi,r11d ++ shrd r14d,r14d,2 ++ add ebx,r9d ++ vpsrlq xmm7,xmm7,2 ++ add r9d,edi ++ mov r13d,ebx ++ add r14d,r9d ++ vpxor xmm6,xmm6,xmm7 ++ shrd r13d,r13d,14 ++ mov r9d,r14d ++ mov r12d,ecx ++ vpshufb xmm6,xmm6,xmm9 ++ shrd r14d,r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ vpaddd xmm2,xmm2,xmm6 ++ shrd r13d,r13d,5 ++ xor r14d,r9d ++ and r12d,ebx ++ vpaddd xmm6,xmm2,XMMWORD[64+rbp] ++ xor r13d,ebx ++ add r8d,DWORD[44+rsp] ++ mov edi,r9d ++ xor r12d,edx ++ shrd r14d,r14d,11 ++ xor edi,r10d ++ add r8d,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ shrd r14d,r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ mov r13d,eax ++ add r14d,r8d ++ vmovdqa XMMWORD[32+rsp],xmm6 ++ vpalignr xmm4,xmm0,xmm3,4 ++ shrd r13d,r13d,14 ++ mov r8d,r14d ++ mov r12d,ebx ++ vpalignr xmm7,xmm2,xmm1,4 ++ shrd r14d,r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ vpsrld xmm6,xmm4,7 ++ shrd r13d,r13d,5 ++ xor r14d,r8d ++ and r12d,eax ++ vpaddd xmm3,xmm3,xmm7 ++ xor r13d,eax ++ add edx,DWORD[48+rsp] ++ mov r15d,r8d ++ vpsrld xmm7,xmm4,3 ++ xor r12d,ecx ++ shrd r14d,r14d,11 ++ xor r15d,r9d ++ vpslld xmm5,xmm4,14 ++ add edx,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ vpxor xmm4,xmm7,xmm6 ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ vpshufd xmm7,xmm2,250 ++ shrd r14d,r14d,2 ++ add r11d,edx ++ add edx,edi ++ vpsrld xmm6,xmm6,11 ++ mov r13d,r11d ++ add r14d,edx ++ shrd r13d,r13d,14 ++ vpxor xmm4,xmm4,xmm5 ++ mov edx,r14d ++ mov r12d,eax ++ shrd r14d,r14d,9 ++ vpslld xmm5,xmm5,11 ++ xor r13d,r11d ++ xor r12d,ebx ++ shrd r13d,r13d,5 ++ vpxor xmm4,xmm4,xmm6 ++ xor r14d,edx ++ and r12d,r11d ++ xor r13d,r11d ++ vpsrld xmm6,xmm7,10 ++ add ecx,DWORD[52+rsp] ++ mov edi,edx ++ xor r12d,ebx ++ vpxor xmm4,xmm4,xmm5 ++ shrd r14d,r14d,11 ++ xor edi,r8d ++ add ecx,r12d ++ vpsrlq xmm7,xmm7,17 ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ vpaddd xmm3,xmm3,xmm4 ++ add ecx,r13d ++ xor r15d,r8d ++ shrd r14d,r14d,2 ++ vpxor xmm6,xmm6,xmm7 ++ add r10d,ecx ++ add ecx,r15d ++ mov r13d,r10d ++ vpsrlq xmm7,xmm7,2 ++ add r14d,ecx ++ shrd r13d,r13d,14 ++ mov ecx,r14d ++ vpxor xmm6,xmm6,xmm7 ++ mov r12d,r11d ++ shrd r14d,r14d,9 ++ xor r13d,r10d ++ vpshufb xmm6,xmm6,xmm8 ++ xor r12d,eax ++ shrd r13d,r13d,5 ++ xor r14d,ecx ++ vpaddd xmm3,xmm3,xmm6 ++ and r12d,r10d ++ xor r13d,r10d ++ add ebx,DWORD[56+rsp] ++ vpshufd xmm7,xmm3,80 ++ mov r15d,ecx ++ xor r12d,eax ++ shrd r14d,r14d,11 ++ vpsrld xmm6,xmm7,10 ++ xor r15d,edx ++ add ebx,r12d ++ shrd r13d,r13d,6 ++ vpsrlq xmm7,xmm7,17 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ vpxor xmm6,xmm6,xmm7 ++ xor edi,edx ++ shrd r14d,r14d,2 ++ add r9d,ebx ++ vpsrlq xmm7,xmm7,2 ++ add ebx,edi ++ mov r13d,r9d ++ add r14d,ebx ++ vpxor xmm6,xmm6,xmm7 ++ shrd r13d,r13d,14 ++ mov ebx,r14d ++ mov r12d,r10d ++ vpshufb xmm6,xmm6,xmm9 ++ shrd r14d,r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ vpaddd xmm3,xmm3,xmm6 ++ shrd r13d,r13d,5 ++ xor r14d,ebx ++ and r12d,r9d ++ vpaddd xmm6,xmm3,XMMWORD[96+rbp] ++ xor r13d,r9d ++ add eax,DWORD[60+rsp] ++ mov edi,ebx ++ xor r12d,r11d ++ shrd r14d,r14d,11 ++ xor edi,ecx ++ add eax,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ shrd r14d,r14d,2 ++ add r8d,eax ++ add eax,r15d ++ mov r13d,r8d ++ add r14d,eax ++ vmovdqa XMMWORD[48+rsp],xmm6 ++ cmp BYTE[131+rbp],0 ++ jne NEAR $L$avx_00_47 ++ shrd r13d,r13d,14 ++ mov eax,r14d ++ mov r12d,r9d ++ shrd r14d,r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ shrd r13d,r13d,5 ++ xor r14d,eax ++ and r12d,r8d ++ xor r13d,r8d ++ add r11d,DWORD[rsp] ++ mov r15d,eax ++ xor r12d,r10d ++ shrd r14d,r14d,11 ++ xor r15d,ebx ++ add r11d,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ shrd r14d,r14d,2 ++ add edx,r11d ++ add r11d,edi ++ mov r13d,edx ++ add r14d,r11d ++ shrd r13d,r13d,14 ++ mov r11d,r14d ++ mov r12d,r8d ++ shrd r14d,r14d,9 ++ xor r13d,edx ++ xor r12d,r9d ++ shrd r13d,r13d,5 ++ xor r14d,r11d ++ and r12d,edx ++ xor r13d,edx ++ add r10d,DWORD[4+rsp] ++ mov edi,r11d ++ xor r12d,r9d ++ shrd r14d,r14d,11 ++ xor edi,eax ++ add r10d,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ add r10d,r13d ++ xor r15d,eax ++ shrd r14d,r14d,2 ++ add ecx,r10d ++ add r10d,r15d ++ mov r13d,ecx ++ add r14d,r10d ++ shrd r13d,r13d,14 ++ mov r10d,r14d ++ mov r12d,edx ++ shrd r14d,r14d,9 ++ xor r13d,ecx ++ xor r12d,r8d ++ shrd r13d,r13d,5 ++ xor r14d,r10d ++ and r12d,ecx ++ xor r13d,ecx ++ add r9d,DWORD[8+rsp] ++ mov r15d,r10d ++ xor r12d,r8d ++ shrd r14d,r14d,11 ++ xor r15d,r11d ++ add r9d,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ xor edi,r11d ++ shrd r14d,r14d,2 ++ add ebx,r9d ++ add r9d,edi ++ mov r13d,ebx ++ add r14d,r9d ++ shrd r13d,r13d,14 ++ mov r9d,r14d ++ mov r12d,ecx ++ shrd r14d,r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ shrd r13d,r13d,5 ++ xor r14d,r9d ++ and r12d,ebx ++ xor r13d,ebx ++ add r8d,DWORD[12+rsp] ++ mov edi,r9d ++ xor r12d,edx ++ shrd r14d,r14d,11 ++ xor edi,r10d ++ add r8d,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ shrd r14d,r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ mov r13d,eax ++ add r14d,r8d ++ shrd r13d,r13d,14 ++ mov r8d,r14d ++ mov r12d,ebx ++ shrd r14d,r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ shrd r13d,r13d,5 ++ xor r14d,r8d ++ and r12d,eax ++ xor r13d,eax ++ add edx,DWORD[16+rsp] ++ mov r15d,r8d ++ xor r12d,ecx ++ shrd r14d,r14d,11 ++ xor r15d,r9d ++ add edx,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ shrd r14d,r14d,2 ++ add r11d,edx ++ add edx,edi ++ mov r13d,r11d ++ add r14d,edx ++ shrd r13d,r13d,14 ++ mov edx,r14d ++ mov r12d,eax ++ shrd r14d,r14d,9 ++ xor r13d,r11d ++ xor r12d,ebx ++ shrd r13d,r13d,5 ++ xor r14d,edx ++ and r12d,r11d ++ xor r13d,r11d ++ add ecx,DWORD[20+rsp] ++ mov edi,edx ++ xor r12d,ebx ++ shrd r14d,r14d,11 ++ xor edi,r8d ++ add ecx,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ add ecx,r13d ++ xor r15d,r8d ++ shrd r14d,r14d,2 ++ add r10d,ecx ++ add ecx,r15d ++ mov r13d,r10d ++ add r14d,ecx ++ shrd r13d,r13d,14 ++ mov ecx,r14d ++ mov r12d,r11d ++ shrd r14d,r14d,9 ++ xor r13d,r10d ++ xor r12d,eax ++ shrd r13d,r13d,5 ++ xor r14d,ecx ++ and r12d,r10d ++ xor r13d,r10d ++ add ebx,DWORD[24+rsp] ++ mov r15d,ecx ++ xor r12d,eax ++ shrd r14d,r14d,11 ++ xor r15d,edx ++ add ebx,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ xor edi,edx ++ shrd r14d,r14d,2 ++ add r9d,ebx ++ add ebx,edi ++ mov r13d,r9d ++ add r14d,ebx ++ shrd r13d,r13d,14 ++ mov ebx,r14d ++ mov r12d,r10d ++ shrd r14d,r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ shrd r13d,r13d,5 ++ xor r14d,ebx ++ and r12d,r9d ++ xor r13d,r9d ++ add eax,DWORD[28+rsp] ++ mov edi,ebx ++ xor r12d,r11d ++ shrd r14d,r14d,11 ++ xor edi,ecx ++ add eax,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ shrd r14d,r14d,2 ++ add r8d,eax ++ add eax,r15d ++ mov r13d,r8d ++ add r14d,eax ++ shrd r13d,r13d,14 ++ mov eax,r14d ++ mov r12d,r9d ++ shrd r14d,r14d,9 ++ xor r13d,r8d ++ xor r12d,r10d ++ shrd r13d,r13d,5 ++ xor r14d,eax ++ and r12d,r8d ++ xor r13d,r8d ++ add r11d,DWORD[32+rsp] ++ mov r15d,eax ++ xor r12d,r10d ++ shrd r14d,r14d,11 ++ xor r15d,ebx ++ add r11d,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,eax ++ add r11d,r13d ++ xor edi,ebx ++ shrd r14d,r14d,2 ++ add edx,r11d ++ add r11d,edi ++ mov r13d,edx ++ add r14d,r11d ++ shrd r13d,r13d,14 ++ mov r11d,r14d ++ mov r12d,r8d ++ shrd r14d,r14d,9 ++ xor r13d,edx ++ xor r12d,r9d ++ shrd r13d,r13d,5 ++ xor r14d,r11d ++ and r12d,edx ++ xor r13d,edx ++ add r10d,DWORD[36+rsp] ++ mov edi,r11d ++ xor r12d,r9d ++ shrd r14d,r14d,11 ++ xor edi,eax ++ add r10d,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r11d ++ add r10d,r13d ++ xor r15d,eax ++ shrd r14d,r14d,2 ++ add ecx,r10d ++ add r10d,r15d ++ mov r13d,ecx ++ add r14d,r10d ++ shrd r13d,r13d,14 ++ mov r10d,r14d ++ mov r12d,edx ++ shrd r14d,r14d,9 ++ xor r13d,ecx ++ xor r12d,r8d ++ shrd r13d,r13d,5 ++ xor r14d,r10d ++ and r12d,ecx ++ xor r13d,ecx ++ add r9d,DWORD[40+rsp] ++ mov r15d,r10d ++ xor r12d,r8d ++ shrd r14d,r14d,11 ++ xor r15d,r11d ++ add r9d,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,r10d ++ add r9d,r13d ++ xor edi,r11d ++ shrd r14d,r14d,2 ++ add ebx,r9d ++ add r9d,edi ++ mov r13d,ebx ++ add r14d,r9d ++ shrd r13d,r13d,14 ++ mov r9d,r14d ++ mov r12d,ecx ++ shrd r14d,r14d,9 ++ xor r13d,ebx ++ xor r12d,edx ++ shrd r13d,r13d,5 ++ xor r14d,r9d ++ and r12d,ebx ++ xor r13d,ebx ++ add r8d,DWORD[44+rsp] ++ mov edi,r9d ++ xor r12d,edx ++ shrd r14d,r14d,11 ++ xor edi,r10d ++ add r8d,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,r9d ++ add r8d,r13d ++ xor r15d,r10d ++ shrd r14d,r14d,2 ++ add eax,r8d ++ add r8d,r15d ++ mov r13d,eax ++ add r14d,r8d ++ shrd r13d,r13d,14 ++ mov r8d,r14d ++ mov r12d,ebx ++ shrd r14d,r14d,9 ++ xor r13d,eax ++ xor r12d,ecx ++ shrd r13d,r13d,5 ++ xor r14d,r8d ++ and r12d,eax ++ xor r13d,eax ++ add edx,DWORD[48+rsp] ++ mov r15d,r8d ++ xor r12d,ecx ++ shrd r14d,r14d,11 ++ xor r15d,r9d ++ add edx,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,r8d ++ add edx,r13d ++ xor edi,r9d ++ shrd r14d,r14d,2 ++ add r11d,edx ++ add edx,edi ++ mov r13d,r11d ++ add r14d,edx ++ shrd r13d,r13d,14 ++ mov edx,r14d ++ mov r12d,eax ++ shrd r14d,r14d,9 ++ xor r13d,r11d ++ xor r12d,ebx ++ shrd r13d,r13d,5 ++ xor r14d,edx ++ and r12d,r11d ++ xor r13d,r11d ++ add ecx,DWORD[52+rsp] ++ mov edi,edx ++ xor r12d,ebx ++ shrd r14d,r14d,11 ++ xor edi,r8d ++ add ecx,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,edx ++ add ecx,r13d ++ xor r15d,r8d ++ shrd r14d,r14d,2 ++ add r10d,ecx ++ add ecx,r15d ++ mov r13d,r10d ++ add r14d,ecx ++ shrd r13d,r13d,14 ++ mov ecx,r14d ++ mov r12d,r11d ++ shrd r14d,r14d,9 ++ xor r13d,r10d ++ xor r12d,eax ++ shrd r13d,r13d,5 ++ xor r14d,ecx ++ and r12d,r10d ++ xor r13d,r10d ++ add ebx,DWORD[56+rsp] ++ mov r15d,ecx ++ xor r12d,eax ++ shrd r14d,r14d,11 ++ xor r15d,edx ++ add ebx,r12d ++ shrd r13d,r13d,6 ++ and edi,r15d ++ xor r14d,ecx ++ add ebx,r13d ++ xor edi,edx ++ shrd r14d,r14d,2 ++ add r9d,ebx ++ add ebx,edi ++ mov r13d,r9d ++ add r14d,ebx ++ shrd r13d,r13d,14 ++ mov ebx,r14d ++ mov r12d,r10d ++ shrd r14d,r14d,9 ++ xor r13d,r9d ++ xor r12d,r11d ++ shrd r13d,r13d,5 ++ xor r14d,ebx ++ and r12d,r9d ++ xor r13d,r9d ++ add eax,DWORD[60+rsp] ++ mov edi,ebx ++ xor r12d,r11d ++ shrd r14d,r14d,11 ++ xor edi,ecx ++ add eax,r12d ++ shrd r13d,r13d,6 ++ and r15d,edi ++ xor r14d,ebx ++ add eax,r13d ++ xor r15d,ecx ++ shrd r14d,r14d,2 ++ add r8d,eax ++ add eax,r15d ++ mov r13d,r8d ++ add r14d,eax ++ mov rdi,QWORD[((64+0))+rsp] ++ mov eax,r14d ++ ++ add eax,DWORD[rdi] ++ lea rsi,[64+rsi] ++ add ebx,DWORD[4+rdi] ++ add ecx,DWORD[8+rdi] ++ add edx,DWORD[12+rdi] ++ add r8d,DWORD[16+rdi] ++ add r9d,DWORD[20+rdi] ++ add r10d,DWORD[24+rdi] ++ add r11d,DWORD[28+rdi] ++ ++ cmp rsi,QWORD[((64+16))+rsp] ++ ++ mov DWORD[rdi],eax ++ mov DWORD[4+rdi],ebx ++ mov DWORD[8+rdi],ecx ++ mov DWORD[12+rdi],edx ++ mov DWORD[16+rdi],r8d ++ mov DWORD[20+rdi],r9d ++ mov DWORD[24+rdi],r10d ++ mov DWORD[28+rdi],r11d ++ jb NEAR $L$loop_avx ++ ++ mov rsi,QWORD[((64+24))+rsp] ++ vzeroupper ++ movaps xmm6,XMMWORD[((64+32))+rsp] ++ movaps xmm7,XMMWORD[((64+48))+rsp] ++ movaps xmm8,XMMWORD[((64+64))+rsp] ++ movaps xmm9,XMMWORD[((64+80))+rsp] ++ mov r15,QWORD[rsi] ++ mov r14,QWORD[8+rsi] ++ mov r13,QWORD[16+rsi] ++ mov r12,QWORD[24+rsi] ++ mov rbp,QWORD[32+rsi] ++ mov rbx,QWORD[40+rsi] ++ lea rsp,[48+rsi] ++$L$epilogue_avx: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_block_data_order_avx: ++ ++ALIGN 64 ++sha256_block_data_order_avx2: ++ mov QWORD[8+rsp],rdi ;WIN64 prologue ++ mov QWORD[16+rsp],rsi ++ mov rax,rsp ++$L$SEH_begin_sha256_block_data_order_avx2: ++ mov rdi,rcx ++ mov rsi,rdx ++ mov rdx,r8 ++ ++ ++$L$avx2_shortcut: ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ mov r11,rsp ++ sub rsp,608 ++ shl rdx,4 ++ and rsp,-256*4 ++ lea rdx,[rdx*4+rsi] ++ add rsp,448 ++ mov QWORD[((64+0))+rsp],rdi ++ mov QWORD[((64+8))+rsp],rsi ++ mov QWORD[((64+16))+rsp],rdx ++ mov QWORD[((64+24))+rsp],r11 ++ movaps XMMWORD[(64+32)+rsp],xmm6 ++ movaps XMMWORD[(64+48)+rsp],xmm7 ++ movaps XMMWORD[(64+64)+rsp],xmm8 ++ movaps XMMWORD[(64+80)+rsp],xmm9 ++$L$prologue_avx2: ++ ++ vzeroupper ++ sub rsi,-16*4 ++ mov eax,DWORD[rdi] ++ mov r12,rsi ++ mov ebx,DWORD[4+rdi] ++ cmp rsi,rdx ++ mov ecx,DWORD[8+rdi] ++ cmove r12,rsp ++ mov edx,DWORD[12+rdi] ++ mov r8d,DWORD[16+rdi] ++ mov r9d,DWORD[20+rdi] ++ mov r10d,DWORD[24+rdi] ++ mov r11d,DWORD[28+rdi] ++ vmovdqa ymm8,YMMWORD[((K256+512+32))] ++ vmovdqa ymm9,YMMWORD[((K256+512+64))] ++ jmp NEAR $L$oop_avx2 ++ALIGN 16 ++$L$oop_avx2: ++ vmovdqa ymm7,YMMWORD[((K256+512))] ++ vmovdqu xmm0,XMMWORD[((-64+0))+rsi] ++ vmovdqu xmm1,XMMWORD[((-64+16))+rsi] ++ vmovdqu xmm2,XMMWORD[((-64+32))+rsi] ++ vmovdqu xmm3,XMMWORD[((-64+48))+rsi] ++ ++ vinserti128 ymm0,ymm0,XMMWORD[r12],1 ++ vinserti128 ymm1,ymm1,XMMWORD[16+r12],1 ++ vpshufb ymm0,ymm0,ymm7 ++ vinserti128 ymm2,ymm2,XMMWORD[32+r12],1 ++ vpshufb ymm1,ymm1,ymm7 ++ vinserti128 ymm3,ymm3,XMMWORD[48+r12],1 ++ ++ lea rbp,[K256] ++ vpshufb ymm2,ymm2,ymm7 ++ vpaddd ymm4,ymm0,YMMWORD[rbp] ++ vpshufb ymm3,ymm3,ymm7 ++ vpaddd ymm5,ymm1,YMMWORD[32+rbp] ++ vpaddd ymm6,ymm2,YMMWORD[64+rbp] ++ vpaddd ymm7,ymm3,YMMWORD[96+rbp] ++ vmovdqa YMMWORD[rsp],ymm4 ++ xor r14d,r14d ++ vmovdqa YMMWORD[32+rsp],ymm5 ++ lea rsp,[((-64))+rsp] ++ mov edi,ebx ++ vmovdqa YMMWORD[rsp],ymm6 ++ xor edi,ecx ++ vmovdqa YMMWORD[32+rsp],ymm7 ++ mov r12d,r9d ++ sub rbp,-16*2*4 ++ jmp NEAR $L$avx2_00_47 ++ ++ALIGN 16 ++$L$avx2_00_47: ++ lea rsp,[((-64))+rsp] ++ vpalignr ymm4,ymm1,ymm0,4 ++ add r11d,DWORD[((0+128))+rsp] ++ and r12d,r8d ++ rorx r13d,r8d,25 ++ vpalignr ymm7,ymm3,ymm2,4 ++ rorx r15d,r8d,11 ++ lea eax,[r14*1+rax] ++ lea r11d,[r12*1+r11] ++ vpsrld ymm6,ymm4,7 ++ andn r12d,r8d,r10d ++ xor r13d,r15d ++ rorx r14d,r8d,6 ++ vpaddd ymm0,ymm0,ymm7 ++ lea r11d,[r12*1+r11] ++ xor r13d,r14d ++ mov r15d,eax ++ vpsrld ymm7,ymm4,3 ++ rorx r12d,eax,22 ++ lea r11d,[r13*1+r11] ++ xor r15d,ebx ++ vpslld ymm5,ymm4,14 ++ rorx r14d,eax,13 ++ rorx r13d,eax,2 ++ lea edx,[r11*1+rdx] ++ vpxor ymm4,ymm7,ymm6 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,ebx ++ vpshufd ymm7,ymm3,250 ++ xor r14d,r13d ++ lea r11d,[rdi*1+r11] ++ mov r12d,r8d ++ vpsrld ymm6,ymm6,11 ++ add r10d,DWORD[((4+128))+rsp] ++ and r12d,edx ++ rorx r13d,edx,25 ++ vpxor ymm4,ymm4,ymm5 ++ rorx edi,edx,11 ++ lea r11d,[r14*1+r11] ++ lea r10d,[r12*1+r10] ++ vpslld ymm5,ymm5,11 ++ andn r12d,edx,r9d ++ xor r13d,edi ++ rorx r14d,edx,6 ++ vpxor ymm4,ymm4,ymm6 ++ lea r10d,[r12*1+r10] ++ xor r13d,r14d ++ mov edi,r11d ++ vpsrld ymm6,ymm7,10 ++ rorx r12d,r11d,22 ++ lea r10d,[r13*1+r10] ++ xor edi,eax ++ vpxor ymm4,ymm4,ymm5 ++ rorx r14d,r11d,13 ++ rorx r13d,r11d,2 ++ lea ecx,[r10*1+rcx] ++ vpsrlq ymm7,ymm7,17 ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,eax ++ vpaddd ymm0,ymm0,ymm4 ++ xor r14d,r13d ++ lea r10d,[r15*1+r10] ++ mov r12d,edx ++ vpxor ymm6,ymm6,ymm7 ++ add r9d,DWORD[((8+128))+rsp] ++ and r12d,ecx ++ rorx r13d,ecx,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx r15d,ecx,11 ++ lea r10d,[r14*1+r10] ++ lea r9d,[r12*1+r9] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,ecx,r8d ++ xor r13d,r15d ++ rorx r14d,ecx,6 ++ vpshufb ymm6,ymm6,ymm8 ++ lea r9d,[r12*1+r9] ++ xor r13d,r14d ++ mov r15d,r10d ++ vpaddd ymm0,ymm0,ymm6 ++ rorx r12d,r10d,22 ++ lea r9d,[r13*1+r9] ++ xor r15d,r11d ++ vpshufd ymm7,ymm0,80 ++ rorx r14d,r10d,13 ++ rorx r13d,r10d,2 ++ lea ebx,[r9*1+rbx] ++ vpsrld ymm6,ymm7,10 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r11d ++ vpsrlq ymm7,ymm7,17 ++ xor r14d,r13d ++ lea r9d,[rdi*1+r9] ++ mov r12d,ecx ++ vpxor ymm6,ymm6,ymm7 ++ add r8d,DWORD[((12+128))+rsp] ++ and r12d,ebx ++ rorx r13d,ebx,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx edi,ebx,11 ++ lea r9d,[r14*1+r9] ++ lea r8d,[r12*1+r8] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,ebx,edx ++ xor r13d,edi ++ rorx r14d,ebx,6 ++ vpshufb ymm6,ymm6,ymm9 ++ lea r8d,[r12*1+r8] ++ xor r13d,r14d ++ mov edi,r9d ++ vpaddd ymm0,ymm0,ymm6 ++ rorx r12d,r9d,22 ++ lea r8d,[r13*1+r8] ++ xor edi,r10d ++ vpaddd ymm6,ymm0,YMMWORD[rbp] ++ rorx r14d,r9d,13 ++ rorx r13d,r9d,2 ++ lea eax,[r8*1+rax] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r10d ++ xor r14d,r13d ++ lea r8d,[r15*1+r8] ++ mov r12d,ebx ++ vmovdqa YMMWORD[rsp],ymm6 ++ vpalignr ymm4,ymm2,ymm1,4 ++ add edx,DWORD[((32+128))+rsp] ++ and r12d,eax ++ rorx r13d,eax,25 ++ vpalignr ymm7,ymm0,ymm3,4 ++ rorx r15d,eax,11 ++ lea r8d,[r14*1+r8] ++ lea edx,[r12*1+rdx] ++ vpsrld ymm6,ymm4,7 ++ andn r12d,eax,ecx ++ xor r13d,r15d ++ rorx r14d,eax,6 ++ vpaddd ymm1,ymm1,ymm7 ++ lea edx,[r12*1+rdx] ++ xor r13d,r14d ++ mov r15d,r8d ++ vpsrld ymm7,ymm4,3 ++ rorx r12d,r8d,22 ++ lea edx,[r13*1+rdx] ++ xor r15d,r9d ++ vpslld ymm5,ymm4,14 ++ rorx r14d,r8d,13 ++ rorx r13d,r8d,2 ++ lea r11d,[rdx*1+r11] ++ vpxor ymm4,ymm7,ymm6 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r9d ++ vpshufd ymm7,ymm0,250 ++ xor r14d,r13d ++ lea edx,[rdi*1+rdx] ++ mov r12d,eax ++ vpsrld ymm6,ymm6,11 ++ add ecx,DWORD[((36+128))+rsp] ++ and r12d,r11d ++ rorx r13d,r11d,25 ++ vpxor ymm4,ymm4,ymm5 ++ rorx edi,r11d,11 ++ lea edx,[r14*1+rdx] ++ lea ecx,[r12*1+rcx] ++ vpslld ymm5,ymm5,11 ++ andn r12d,r11d,ebx ++ xor r13d,edi ++ rorx r14d,r11d,6 ++ vpxor ymm4,ymm4,ymm6 ++ lea ecx,[r12*1+rcx] ++ xor r13d,r14d ++ mov edi,edx ++ vpsrld ymm6,ymm7,10 ++ rorx r12d,edx,22 ++ lea ecx,[r13*1+rcx] ++ xor edi,r8d ++ vpxor ymm4,ymm4,ymm5 ++ rorx r14d,edx,13 ++ rorx r13d,edx,2 ++ lea r10d,[rcx*1+r10] ++ vpsrlq ymm7,ymm7,17 ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r8d ++ vpaddd ymm1,ymm1,ymm4 ++ xor r14d,r13d ++ lea ecx,[r15*1+rcx] ++ mov r12d,r11d ++ vpxor ymm6,ymm6,ymm7 ++ add ebx,DWORD[((40+128))+rsp] ++ and r12d,r10d ++ rorx r13d,r10d,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx r15d,r10d,11 ++ lea ecx,[r14*1+rcx] ++ lea ebx,[r12*1+rbx] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,r10d,eax ++ xor r13d,r15d ++ rorx r14d,r10d,6 ++ vpshufb ymm6,ymm6,ymm8 ++ lea ebx,[r12*1+rbx] ++ xor r13d,r14d ++ mov r15d,ecx ++ vpaddd ymm1,ymm1,ymm6 ++ rorx r12d,ecx,22 ++ lea ebx,[r13*1+rbx] ++ xor r15d,edx ++ vpshufd ymm7,ymm1,80 ++ rorx r14d,ecx,13 ++ rorx r13d,ecx,2 ++ lea r9d,[rbx*1+r9] ++ vpsrld ymm6,ymm7,10 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,edx ++ vpsrlq ymm7,ymm7,17 ++ xor r14d,r13d ++ lea ebx,[rdi*1+rbx] ++ mov r12d,r10d ++ vpxor ymm6,ymm6,ymm7 ++ add eax,DWORD[((44+128))+rsp] ++ and r12d,r9d ++ rorx r13d,r9d,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx edi,r9d,11 ++ lea ebx,[r14*1+rbx] ++ lea eax,[r12*1+rax] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,r9d,r11d ++ xor r13d,edi ++ rorx r14d,r9d,6 ++ vpshufb ymm6,ymm6,ymm9 ++ lea eax,[r12*1+rax] ++ xor r13d,r14d ++ mov edi,ebx ++ vpaddd ymm1,ymm1,ymm6 ++ rorx r12d,ebx,22 ++ lea eax,[r13*1+rax] ++ xor edi,ecx ++ vpaddd ymm6,ymm1,YMMWORD[32+rbp] ++ rorx r14d,ebx,13 ++ rorx r13d,ebx,2 ++ lea r8d,[rax*1+r8] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,ecx ++ xor r14d,r13d ++ lea eax,[r15*1+rax] ++ mov r12d,r9d ++ vmovdqa YMMWORD[32+rsp],ymm6 ++ lea rsp,[((-64))+rsp] ++ vpalignr ymm4,ymm3,ymm2,4 ++ add r11d,DWORD[((0+128))+rsp] ++ and r12d,r8d ++ rorx r13d,r8d,25 ++ vpalignr ymm7,ymm1,ymm0,4 ++ rorx r15d,r8d,11 ++ lea eax,[r14*1+rax] ++ lea r11d,[r12*1+r11] ++ vpsrld ymm6,ymm4,7 ++ andn r12d,r8d,r10d ++ xor r13d,r15d ++ rorx r14d,r8d,6 ++ vpaddd ymm2,ymm2,ymm7 ++ lea r11d,[r12*1+r11] ++ xor r13d,r14d ++ mov r15d,eax ++ vpsrld ymm7,ymm4,3 ++ rorx r12d,eax,22 ++ lea r11d,[r13*1+r11] ++ xor r15d,ebx ++ vpslld ymm5,ymm4,14 ++ rorx r14d,eax,13 ++ rorx r13d,eax,2 ++ lea edx,[r11*1+rdx] ++ vpxor ymm4,ymm7,ymm6 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,ebx ++ vpshufd ymm7,ymm1,250 ++ xor r14d,r13d ++ lea r11d,[rdi*1+r11] ++ mov r12d,r8d ++ vpsrld ymm6,ymm6,11 ++ add r10d,DWORD[((4+128))+rsp] ++ and r12d,edx ++ rorx r13d,edx,25 ++ vpxor ymm4,ymm4,ymm5 ++ rorx edi,edx,11 ++ lea r11d,[r14*1+r11] ++ lea r10d,[r12*1+r10] ++ vpslld ymm5,ymm5,11 ++ andn r12d,edx,r9d ++ xor r13d,edi ++ rorx r14d,edx,6 ++ vpxor ymm4,ymm4,ymm6 ++ lea r10d,[r12*1+r10] ++ xor r13d,r14d ++ mov edi,r11d ++ vpsrld ymm6,ymm7,10 ++ rorx r12d,r11d,22 ++ lea r10d,[r13*1+r10] ++ xor edi,eax ++ vpxor ymm4,ymm4,ymm5 ++ rorx r14d,r11d,13 ++ rorx r13d,r11d,2 ++ lea ecx,[r10*1+rcx] ++ vpsrlq ymm7,ymm7,17 ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,eax ++ vpaddd ymm2,ymm2,ymm4 ++ xor r14d,r13d ++ lea r10d,[r15*1+r10] ++ mov r12d,edx ++ vpxor ymm6,ymm6,ymm7 ++ add r9d,DWORD[((8+128))+rsp] ++ and r12d,ecx ++ rorx r13d,ecx,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx r15d,ecx,11 ++ lea r10d,[r14*1+r10] ++ lea r9d,[r12*1+r9] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,ecx,r8d ++ xor r13d,r15d ++ rorx r14d,ecx,6 ++ vpshufb ymm6,ymm6,ymm8 ++ lea r9d,[r12*1+r9] ++ xor r13d,r14d ++ mov r15d,r10d ++ vpaddd ymm2,ymm2,ymm6 ++ rorx r12d,r10d,22 ++ lea r9d,[r13*1+r9] ++ xor r15d,r11d ++ vpshufd ymm7,ymm2,80 ++ rorx r14d,r10d,13 ++ rorx r13d,r10d,2 ++ lea ebx,[r9*1+rbx] ++ vpsrld ymm6,ymm7,10 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r11d ++ vpsrlq ymm7,ymm7,17 ++ xor r14d,r13d ++ lea r9d,[rdi*1+r9] ++ mov r12d,ecx ++ vpxor ymm6,ymm6,ymm7 ++ add r8d,DWORD[((12+128))+rsp] ++ and r12d,ebx ++ rorx r13d,ebx,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx edi,ebx,11 ++ lea r9d,[r14*1+r9] ++ lea r8d,[r12*1+r8] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,ebx,edx ++ xor r13d,edi ++ rorx r14d,ebx,6 ++ vpshufb ymm6,ymm6,ymm9 ++ lea r8d,[r12*1+r8] ++ xor r13d,r14d ++ mov edi,r9d ++ vpaddd ymm2,ymm2,ymm6 ++ rorx r12d,r9d,22 ++ lea r8d,[r13*1+r8] ++ xor edi,r10d ++ vpaddd ymm6,ymm2,YMMWORD[64+rbp] ++ rorx r14d,r9d,13 ++ rorx r13d,r9d,2 ++ lea eax,[r8*1+rax] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r10d ++ xor r14d,r13d ++ lea r8d,[r15*1+r8] ++ mov r12d,ebx ++ vmovdqa YMMWORD[rsp],ymm6 ++ vpalignr ymm4,ymm0,ymm3,4 ++ add edx,DWORD[((32+128))+rsp] ++ and r12d,eax ++ rorx r13d,eax,25 ++ vpalignr ymm7,ymm2,ymm1,4 ++ rorx r15d,eax,11 ++ lea r8d,[r14*1+r8] ++ lea edx,[r12*1+rdx] ++ vpsrld ymm6,ymm4,7 ++ andn r12d,eax,ecx ++ xor r13d,r15d ++ rorx r14d,eax,6 ++ vpaddd ymm3,ymm3,ymm7 ++ lea edx,[r12*1+rdx] ++ xor r13d,r14d ++ mov r15d,r8d ++ vpsrld ymm7,ymm4,3 ++ rorx r12d,r8d,22 ++ lea edx,[r13*1+rdx] ++ xor r15d,r9d ++ vpslld ymm5,ymm4,14 ++ rorx r14d,r8d,13 ++ rorx r13d,r8d,2 ++ lea r11d,[rdx*1+r11] ++ vpxor ymm4,ymm7,ymm6 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r9d ++ vpshufd ymm7,ymm2,250 ++ xor r14d,r13d ++ lea edx,[rdi*1+rdx] ++ mov r12d,eax ++ vpsrld ymm6,ymm6,11 ++ add ecx,DWORD[((36+128))+rsp] ++ and r12d,r11d ++ rorx r13d,r11d,25 ++ vpxor ymm4,ymm4,ymm5 ++ rorx edi,r11d,11 ++ lea edx,[r14*1+rdx] ++ lea ecx,[r12*1+rcx] ++ vpslld ymm5,ymm5,11 ++ andn r12d,r11d,ebx ++ xor r13d,edi ++ rorx r14d,r11d,6 ++ vpxor ymm4,ymm4,ymm6 ++ lea ecx,[r12*1+rcx] ++ xor r13d,r14d ++ mov edi,edx ++ vpsrld ymm6,ymm7,10 ++ rorx r12d,edx,22 ++ lea ecx,[r13*1+rcx] ++ xor edi,r8d ++ vpxor ymm4,ymm4,ymm5 ++ rorx r14d,edx,13 ++ rorx r13d,edx,2 ++ lea r10d,[rcx*1+r10] ++ vpsrlq ymm7,ymm7,17 ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r8d ++ vpaddd ymm3,ymm3,ymm4 ++ xor r14d,r13d ++ lea ecx,[r15*1+rcx] ++ mov r12d,r11d ++ vpxor ymm6,ymm6,ymm7 ++ add ebx,DWORD[((40+128))+rsp] ++ and r12d,r10d ++ rorx r13d,r10d,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx r15d,r10d,11 ++ lea ecx,[r14*1+rcx] ++ lea ebx,[r12*1+rbx] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,r10d,eax ++ xor r13d,r15d ++ rorx r14d,r10d,6 ++ vpshufb ymm6,ymm6,ymm8 ++ lea ebx,[r12*1+rbx] ++ xor r13d,r14d ++ mov r15d,ecx ++ vpaddd ymm3,ymm3,ymm6 ++ rorx r12d,ecx,22 ++ lea ebx,[r13*1+rbx] ++ xor r15d,edx ++ vpshufd ymm7,ymm3,80 ++ rorx r14d,ecx,13 ++ rorx r13d,ecx,2 ++ lea r9d,[rbx*1+r9] ++ vpsrld ymm6,ymm7,10 ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,edx ++ vpsrlq ymm7,ymm7,17 ++ xor r14d,r13d ++ lea ebx,[rdi*1+rbx] ++ mov r12d,r10d ++ vpxor ymm6,ymm6,ymm7 ++ add eax,DWORD[((44+128))+rsp] ++ and r12d,r9d ++ rorx r13d,r9d,25 ++ vpsrlq ymm7,ymm7,2 ++ rorx edi,r9d,11 ++ lea ebx,[r14*1+rbx] ++ lea eax,[r12*1+rax] ++ vpxor ymm6,ymm6,ymm7 ++ andn r12d,r9d,r11d ++ xor r13d,edi ++ rorx r14d,r9d,6 ++ vpshufb ymm6,ymm6,ymm9 ++ lea eax,[r12*1+rax] ++ xor r13d,r14d ++ mov edi,ebx ++ vpaddd ymm3,ymm3,ymm6 ++ rorx r12d,ebx,22 ++ lea eax,[r13*1+rax] ++ xor edi,ecx ++ vpaddd ymm6,ymm3,YMMWORD[96+rbp] ++ rorx r14d,ebx,13 ++ rorx r13d,ebx,2 ++ lea r8d,[rax*1+r8] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,ecx ++ xor r14d,r13d ++ lea eax,[r15*1+rax] ++ mov r12d,r9d ++ vmovdqa YMMWORD[32+rsp],ymm6 ++ lea rbp,[128+rbp] ++ cmp BYTE[3+rbp],0 ++ jne NEAR $L$avx2_00_47 ++ add r11d,DWORD[((0+64))+rsp] ++ and r12d,r8d ++ rorx r13d,r8d,25 ++ rorx r15d,r8d,11 ++ lea eax,[r14*1+rax] ++ lea r11d,[r12*1+r11] ++ andn r12d,r8d,r10d ++ xor r13d,r15d ++ rorx r14d,r8d,6 ++ lea r11d,[r12*1+r11] ++ xor r13d,r14d ++ mov r15d,eax ++ rorx r12d,eax,22 ++ lea r11d,[r13*1+r11] ++ xor r15d,ebx ++ rorx r14d,eax,13 ++ rorx r13d,eax,2 ++ lea edx,[r11*1+rdx] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,ebx ++ xor r14d,r13d ++ lea r11d,[rdi*1+r11] ++ mov r12d,r8d ++ add r10d,DWORD[((4+64))+rsp] ++ and r12d,edx ++ rorx r13d,edx,25 ++ rorx edi,edx,11 ++ lea r11d,[r14*1+r11] ++ lea r10d,[r12*1+r10] ++ andn r12d,edx,r9d ++ xor r13d,edi ++ rorx r14d,edx,6 ++ lea r10d,[r12*1+r10] ++ xor r13d,r14d ++ mov edi,r11d ++ rorx r12d,r11d,22 ++ lea r10d,[r13*1+r10] ++ xor edi,eax ++ rorx r14d,r11d,13 ++ rorx r13d,r11d,2 ++ lea ecx,[r10*1+rcx] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,eax ++ xor r14d,r13d ++ lea r10d,[r15*1+r10] ++ mov r12d,edx ++ add r9d,DWORD[((8+64))+rsp] ++ and r12d,ecx ++ rorx r13d,ecx,25 ++ rorx r15d,ecx,11 ++ lea r10d,[r14*1+r10] ++ lea r9d,[r12*1+r9] ++ andn r12d,ecx,r8d ++ xor r13d,r15d ++ rorx r14d,ecx,6 ++ lea r9d,[r12*1+r9] ++ xor r13d,r14d ++ mov r15d,r10d ++ rorx r12d,r10d,22 ++ lea r9d,[r13*1+r9] ++ xor r15d,r11d ++ rorx r14d,r10d,13 ++ rorx r13d,r10d,2 ++ lea ebx,[r9*1+rbx] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r11d ++ xor r14d,r13d ++ lea r9d,[rdi*1+r9] ++ mov r12d,ecx ++ add r8d,DWORD[((12+64))+rsp] ++ and r12d,ebx ++ rorx r13d,ebx,25 ++ rorx edi,ebx,11 ++ lea r9d,[r14*1+r9] ++ lea r8d,[r12*1+r8] ++ andn r12d,ebx,edx ++ xor r13d,edi ++ rorx r14d,ebx,6 ++ lea r8d,[r12*1+r8] ++ xor r13d,r14d ++ mov edi,r9d ++ rorx r12d,r9d,22 ++ lea r8d,[r13*1+r8] ++ xor edi,r10d ++ rorx r14d,r9d,13 ++ rorx r13d,r9d,2 ++ lea eax,[r8*1+rax] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r10d ++ xor r14d,r13d ++ lea r8d,[r15*1+r8] ++ mov r12d,ebx ++ add edx,DWORD[((32+64))+rsp] ++ and r12d,eax ++ rorx r13d,eax,25 ++ rorx r15d,eax,11 ++ lea r8d,[r14*1+r8] ++ lea edx,[r12*1+rdx] ++ andn r12d,eax,ecx ++ xor r13d,r15d ++ rorx r14d,eax,6 ++ lea edx,[r12*1+rdx] ++ xor r13d,r14d ++ mov r15d,r8d ++ rorx r12d,r8d,22 ++ lea edx,[r13*1+rdx] ++ xor r15d,r9d ++ rorx r14d,r8d,13 ++ rorx r13d,r8d,2 ++ lea r11d,[rdx*1+r11] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r9d ++ xor r14d,r13d ++ lea edx,[rdi*1+rdx] ++ mov r12d,eax ++ add ecx,DWORD[((36+64))+rsp] ++ and r12d,r11d ++ rorx r13d,r11d,25 ++ rorx edi,r11d,11 ++ lea edx,[r14*1+rdx] ++ lea ecx,[r12*1+rcx] ++ andn r12d,r11d,ebx ++ xor r13d,edi ++ rorx r14d,r11d,6 ++ lea ecx,[r12*1+rcx] ++ xor r13d,r14d ++ mov edi,edx ++ rorx r12d,edx,22 ++ lea ecx,[r13*1+rcx] ++ xor edi,r8d ++ rorx r14d,edx,13 ++ rorx r13d,edx,2 ++ lea r10d,[rcx*1+r10] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r8d ++ xor r14d,r13d ++ lea ecx,[r15*1+rcx] ++ mov r12d,r11d ++ add ebx,DWORD[((40+64))+rsp] ++ and r12d,r10d ++ rorx r13d,r10d,25 ++ rorx r15d,r10d,11 ++ lea ecx,[r14*1+rcx] ++ lea ebx,[r12*1+rbx] ++ andn r12d,r10d,eax ++ xor r13d,r15d ++ rorx r14d,r10d,6 ++ lea ebx,[r12*1+rbx] ++ xor r13d,r14d ++ mov r15d,ecx ++ rorx r12d,ecx,22 ++ lea ebx,[r13*1+rbx] ++ xor r15d,edx ++ rorx r14d,ecx,13 ++ rorx r13d,ecx,2 ++ lea r9d,[rbx*1+r9] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,edx ++ xor r14d,r13d ++ lea ebx,[rdi*1+rbx] ++ mov r12d,r10d ++ add eax,DWORD[((44+64))+rsp] ++ and r12d,r9d ++ rorx r13d,r9d,25 ++ rorx edi,r9d,11 ++ lea ebx,[r14*1+rbx] ++ lea eax,[r12*1+rax] ++ andn r12d,r9d,r11d ++ xor r13d,edi ++ rorx r14d,r9d,6 ++ lea eax,[r12*1+rax] ++ xor r13d,r14d ++ mov edi,ebx ++ rorx r12d,ebx,22 ++ lea eax,[r13*1+rax] ++ xor edi,ecx ++ rorx r14d,ebx,13 ++ rorx r13d,ebx,2 ++ lea r8d,[rax*1+r8] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,ecx ++ xor r14d,r13d ++ lea eax,[r15*1+rax] ++ mov r12d,r9d ++ add r11d,DWORD[rsp] ++ and r12d,r8d ++ rorx r13d,r8d,25 ++ rorx r15d,r8d,11 ++ lea eax,[r14*1+rax] ++ lea r11d,[r12*1+r11] ++ andn r12d,r8d,r10d ++ xor r13d,r15d ++ rorx r14d,r8d,6 ++ lea r11d,[r12*1+r11] ++ xor r13d,r14d ++ mov r15d,eax ++ rorx r12d,eax,22 ++ lea r11d,[r13*1+r11] ++ xor r15d,ebx ++ rorx r14d,eax,13 ++ rorx r13d,eax,2 ++ lea edx,[r11*1+rdx] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,ebx ++ xor r14d,r13d ++ lea r11d,[rdi*1+r11] ++ mov r12d,r8d ++ add r10d,DWORD[4+rsp] ++ and r12d,edx ++ rorx r13d,edx,25 ++ rorx edi,edx,11 ++ lea r11d,[r14*1+r11] ++ lea r10d,[r12*1+r10] ++ andn r12d,edx,r9d ++ xor r13d,edi ++ rorx r14d,edx,6 ++ lea r10d,[r12*1+r10] ++ xor r13d,r14d ++ mov edi,r11d ++ rorx r12d,r11d,22 ++ lea r10d,[r13*1+r10] ++ xor edi,eax ++ rorx r14d,r11d,13 ++ rorx r13d,r11d,2 ++ lea ecx,[r10*1+rcx] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,eax ++ xor r14d,r13d ++ lea r10d,[r15*1+r10] ++ mov r12d,edx ++ add r9d,DWORD[8+rsp] ++ and r12d,ecx ++ rorx r13d,ecx,25 ++ rorx r15d,ecx,11 ++ lea r10d,[r14*1+r10] ++ lea r9d,[r12*1+r9] ++ andn r12d,ecx,r8d ++ xor r13d,r15d ++ rorx r14d,ecx,6 ++ lea r9d,[r12*1+r9] ++ xor r13d,r14d ++ mov r15d,r10d ++ rorx r12d,r10d,22 ++ lea r9d,[r13*1+r9] ++ xor r15d,r11d ++ rorx r14d,r10d,13 ++ rorx r13d,r10d,2 ++ lea ebx,[r9*1+rbx] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r11d ++ xor r14d,r13d ++ lea r9d,[rdi*1+r9] ++ mov r12d,ecx ++ add r8d,DWORD[12+rsp] ++ and r12d,ebx ++ rorx r13d,ebx,25 ++ rorx edi,ebx,11 ++ lea r9d,[r14*1+r9] ++ lea r8d,[r12*1+r8] ++ andn r12d,ebx,edx ++ xor r13d,edi ++ rorx r14d,ebx,6 ++ lea r8d,[r12*1+r8] ++ xor r13d,r14d ++ mov edi,r9d ++ rorx r12d,r9d,22 ++ lea r8d,[r13*1+r8] ++ xor edi,r10d ++ rorx r14d,r9d,13 ++ rorx r13d,r9d,2 ++ lea eax,[r8*1+rax] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r10d ++ xor r14d,r13d ++ lea r8d,[r15*1+r8] ++ mov r12d,ebx ++ add edx,DWORD[32+rsp] ++ and r12d,eax ++ rorx r13d,eax,25 ++ rorx r15d,eax,11 ++ lea r8d,[r14*1+r8] ++ lea edx,[r12*1+rdx] ++ andn r12d,eax,ecx ++ xor r13d,r15d ++ rorx r14d,eax,6 ++ lea edx,[r12*1+rdx] ++ xor r13d,r14d ++ mov r15d,r8d ++ rorx r12d,r8d,22 ++ lea edx,[r13*1+rdx] ++ xor r15d,r9d ++ rorx r14d,r8d,13 ++ rorx r13d,r8d,2 ++ lea r11d,[rdx*1+r11] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r9d ++ xor r14d,r13d ++ lea edx,[rdi*1+rdx] ++ mov r12d,eax ++ add ecx,DWORD[36+rsp] ++ and r12d,r11d ++ rorx r13d,r11d,25 ++ rorx edi,r11d,11 ++ lea edx,[r14*1+rdx] ++ lea ecx,[r12*1+rcx] ++ andn r12d,r11d,ebx ++ xor r13d,edi ++ rorx r14d,r11d,6 ++ lea ecx,[r12*1+rcx] ++ xor r13d,r14d ++ mov edi,edx ++ rorx r12d,edx,22 ++ lea ecx,[r13*1+rcx] ++ xor edi,r8d ++ rorx r14d,edx,13 ++ rorx r13d,edx,2 ++ lea r10d,[rcx*1+r10] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r8d ++ xor r14d,r13d ++ lea ecx,[r15*1+rcx] ++ mov r12d,r11d ++ add ebx,DWORD[40+rsp] ++ and r12d,r10d ++ rorx r13d,r10d,25 ++ rorx r15d,r10d,11 ++ lea ecx,[r14*1+rcx] ++ lea ebx,[r12*1+rbx] ++ andn r12d,r10d,eax ++ xor r13d,r15d ++ rorx r14d,r10d,6 ++ lea ebx,[r12*1+rbx] ++ xor r13d,r14d ++ mov r15d,ecx ++ rorx r12d,ecx,22 ++ lea ebx,[r13*1+rbx] ++ xor r15d,edx ++ rorx r14d,ecx,13 ++ rorx r13d,ecx,2 ++ lea r9d,[rbx*1+r9] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,edx ++ xor r14d,r13d ++ lea ebx,[rdi*1+rbx] ++ mov r12d,r10d ++ add eax,DWORD[44+rsp] ++ and r12d,r9d ++ rorx r13d,r9d,25 ++ rorx edi,r9d,11 ++ lea ebx,[r14*1+rbx] ++ lea eax,[r12*1+rax] ++ andn r12d,r9d,r11d ++ xor r13d,edi ++ rorx r14d,r9d,6 ++ lea eax,[r12*1+rax] ++ xor r13d,r14d ++ mov edi,ebx ++ rorx r12d,ebx,22 ++ lea eax,[r13*1+rax] ++ xor edi,ecx ++ rorx r14d,ebx,13 ++ rorx r13d,ebx,2 ++ lea r8d,[rax*1+r8] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,ecx ++ xor r14d,r13d ++ lea eax,[r15*1+rax] ++ mov r12d,r9d ++ mov rdi,QWORD[512+rsp] ++ add eax,r14d ++ ++ lea rbp,[448+rsp] ++ ++ add eax,DWORD[rdi] ++ add ebx,DWORD[4+rdi] ++ add ecx,DWORD[8+rdi] ++ add edx,DWORD[12+rdi] ++ add r8d,DWORD[16+rdi] ++ add r9d,DWORD[20+rdi] ++ add r10d,DWORD[24+rdi] ++ add r11d,DWORD[28+rdi] ++ ++ mov DWORD[rdi],eax ++ mov DWORD[4+rdi],ebx ++ mov DWORD[8+rdi],ecx ++ mov DWORD[12+rdi],edx ++ mov DWORD[16+rdi],r8d ++ mov DWORD[20+rdi],r9d ++ mov DWORD[24+rdi],r10d ++ mov DWORD[28+rdi],r11d ++ ++ cmp rsi,QWORD[80+rbp] ++ je NEAR $L$done_avx2 ++ ++ xor r14d,r14d ++ mov edi,ebx ++ xor edi,ecx ++ mov r12d,r9d ++ jmp NEAR $L$ower_avx2 ++ALIGN 16 ++$L$ower_avx2: ++ add r11d,DWORD[((0+16))+rbp] ++ and r12d,r8d ++ rorx r13d,r8d,25 ++ rorx r15d,r8d,11 ++ lea eax,[r14*1+rax] ++ lea r11d,[r12*1+r11] ++ andn r12d,r8d,r10d ++ xor r13d,r15d ++ rorx r14d,r8d,6 ++ lea r11d,[r12*1+r11] ++ xor r13d,r14d ++ mov r15d,eax ++ rorx r12d,eax,22 ++ lea r11d,[r13*1+r11] ++ xor r15d,ebx ++ rorx r14d,eax,13 ++ rorx r13d,eax,2 ++ lea edx,[r11*1+rdx] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,ebx ++ xor r14d,r13d ++ lea r11d,[rdi*1+r11] ++ mov r12d,r8d ++ add r10d,DWORD[((4+16))+rbp] ++ and r12d,edx ++ rorx r13d,edx,25 ++ rorx edi,edx,11 ++ lea r11d,[r14*1+r11] ++ lea r10d,[r12*1+r10] ++ andn r12d,edx,r9d ++ xor r13d,edi ++ rorx r14d,edx,6 ++ lea r10d,[r12*1+r10] ++ xor r13d,r14d ++ mov edi,r11d ++ rorx r12d,r11d,22 ++ lea r10d,[r13*1+r10] ++ xor edi,eax ++ rorx r14d,r11d,13 ++ rorx r13d,r11d,2 ++ lea ecx,[r10*1+rcx] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,eax ++ xor r14d,r13d ++ lea r10d,[r15*1+r10] ++ mov r12d,edx ++ add r9d,DWORD[((8+16))+rbp] ++ and r12d,ecx ++ rorx r13d,ecx,25 ++ rorx r15d,ecx,11 ++ lea r10d,[r14*1+r10] ++ lea r9d,[r12*1+r9] ++ andn r12d,ecx,r8d ++ xor r13d,r15d ++ rorx r14d,ecx,6 ++ lea r9d,[r12*1+r9] ++ xor r13d,r14d ++ mov r15d,r10d ++ rorx r12d,r10d,22 ++ lea r9d,[r13*1+r9] ++ xor r15d,r11d ++ rorx r14d,r10d,13 ++ rorx r13d,r10d,2 ++ lea ebx,[r9*1+rbx] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r11d ++ xor r14d,r13d ++ lea r9d,[rdi*1+r9] ++ mov r12d,ecx ++ add r8d,DWORD[((12+16))+rbp] ++ and r12d,ebx ++ rorx r13d,ebx,25 ++ rorx edi,ebx,11 ++ lea r9d,[r14*1+r9] ++ lea r8d,[r12*1+r8] ++ andn r12d,ebx,edx ++ xor r13d,edi ++ rorx r14d,ebx,6 ++ lea r8d,[r12*1+r8] ++ xor r13d,r14d ++ mov edi,r9d ++ rorx r12d,r9d,22 ++ lea r8d,[r13*1+r8] ++ xor edi,r10d ++ rorx r14d,r9d,13 ++ rorx r13d,r9d,2 ++ lea eax,[r8*1+rax] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r10d ++ xor r14d,r13d ++ lea r8d,[r15*1+r8] ++ mov r12d,ebx ++ add edx,DWORD[((32+16))+rbp] ++ and r12d,eax ++ rorx r13d,eax,25 ++ rorx r15d,eax,11 ++ lea r8d,[r14*1+r8] ++ lea edx,[r12*1+rdx] ++ andn r12d,eax,ecx ++ xor r13d,r15d ++ rorx r14d,eax,6 ++ lea edx,[r12*1+rdx] ++ xor r13d,r14d ++ mov r15d,r8d ++ rorx r12d,r8d,22 ++ lea edx,[r13*1+rdx] ++ xor r15d,r9d ++ rorx r14d,r8d,13 ++ rorx r13d,r8d,2 ++ lea r11d,[rdx*1+r11] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,r9d ++ xor r14d,r13d ++ lea edx,[rdi*1+rdx] ++ mov r12d,eax ++ add ecx,DWORD[((36+16))+rbp] ++ and r12d,r11d ++ rorx r13d,r11d,25 ++ rorx edi,r11d,11 ++ lea edx,[r14*1+rdx] ++ lea ecx,[r12*1+rcx] ++ andn r12d,r11d,ebx ++ xor r13d,edi ++ rorx r14d,r11d,6 ++ lea ecx,[r12*1+rcx] ++ xor r13d,r14d ++ mov edi,edx ++ rorx r12d,edx,22 ++ lea ecx,[r13*1+rcx] ++ xor edi,r8d ++ rorx r14d,edx,13 ++ rorx r13d,edx,2 ++ lea r10d,[rcx*1+r10] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,r8d ++ xor r14d,r13d ++ lea ecx,[r15*1+rcx] ++ mov r12d,r11d ++ add ebx,DWORD[((40+16))+rbp] ++ and r12d,r10d ++ rorx r13d,r10d,25 ++ rorx r15d,r10d,11 ++ lea ecx,[r14*1+rcx] ++ lea ebx,[r12*1+rbx] ++ andn r12d,r10d,eax ++ xor r13d,r15d ++ rorx r14d,r10d,6 ++ lea ebx,[r12*1+rbx] ++ xor r13d,r14d ++ mov r15d,ecx ++ rorx r12d,ecx,22 ++ lea ebx,[r13*1+rbx] ++ xor r15d,edx ++ rorx r14d,ecx,13 ++ rorx r13d,ecx,2 ++ lea r9d,[rbx*1+r9] ++ and edi,r15d ++ xor r14d,r12d ++ xor edi,edx ++ xor r14d,r13d ++ lea ebx,[rdi*1+rbx] ++ mov r12d,r10d ++ add eax,DWORD[((44+16))+rbp] ++ and r12d,r9d ++ rorx r13d,r9d,25 ++ rorx edi,r9d,11 ++ lea ebx,[r14*1+rbx] ++ lea eax,[r12*1+rax] ++ andn r12d,r9d,r11d ++ xor r13d,edi ++ rorx r14d,r9d,6 ++ lea eax,[r12*1+rax] ++ xor r13d,r14d ++ mov edi,ebx ++ rorx r12d,ebx,22 ++ lea eax,[r13*1+rax] ++ xor edi,ecx ++ rorx r14d,ebx,13 ++ rorx r13d,ebx,2 ++ lea r8d,[rax*1+r8] ++ and r15d,edi ++ xor r14d,r12d ++ xor r15d,ecx ++ xor r14d,r13d ++ lea eax,[r15*1+rax] ++ mov r12d,r9d ++ lea rbp,[((-64))+rbp] ++ cmp rbp,rsp ++ jae NEAR $L$ower_avx2 ++ ++ mov rdi,QWORD[512+rsp] ++ add eax,r14d ++ ++ lea rsp,[448+rsp] ++ ++ add eax,DWORD[rdi] ++ add ebx,DWORD[4+rdi] ++ add ecx,DWORD[8+rdi] ++ add edx,DWORD[12+rdi] ++ add r8d,DWORD[16+rdi] ++ add r9d,DWORD[20+rdi] ++ lea rsi,[128+rsi] ++ add r10d,DWORD[24+rdi] ++ mov r12,rsi ++ add r11d,DWORD[28+rdi] ++ cmp rsi,QWORD[((64+16))+rsp] ++ ++ mov DWORD[rdi],eax ++ cmove r12,rsp ++ mov DWORD[4+rdi],ebx ++ mov DWORD[8+rdi],ecx ++ mov DWORD[12+rdi],edx ++ mov DWORD[16+rdi],r8d ++ mov DWORD[20+rdi],r9d ++ mov DWORD[24+rdi],r10d ++ mov DWORD[28+rdi],r11d ++ ++ jbe NEAR $L$oop_avx2 ++ lea rbp,[rsp] ++ ++$L$done_avx2: ++ lea rsp,[rbp] ++ mov rsi,QWORD[((64+24))+rsp] ++ vzeroupper ++ movaps xmm6,XMMWORD[((64+32))+rsp] ++ movaps xmm7,XMMWORD[((64+48))+rsp] ++ movaps xmm8,XMMWORD[((64+64))+rsp] ++ movaps xmm9,XMMWORD[((64+80))+rsp] ++ mov r15,QWORD[rsi] ++ mov r14,QWORD[8+rsi] ++ mov r13,QWORD[16+rsi] ++ mov r12,QWORD[24+rsi] ++ mov rbp,QWORD[32+rsi] ++ mov rbx,QWORD[40+rsi] ++ lea rsp,[48+rsi] ++$L$epilogue_avx2: ++ mov rdi,QWORD[8+rsp] ;WIN64 epilogue ++ mov rsi,QWORD[16+rsp] ++ DB 0F3h,0C3h ;repret ++$L$SEH_end_sha256_block_data_order_avx2: ++EXTERN __imp_RtlVirtualUnwind ++ ++ALIGN 16 ++se_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ mov rsi,QWORD[8+r9] ++ mov r11,QWORD[56+r9] ++ ++ mov r10d,DWORD[r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ mov rax,QWORD[152+r8] ++ ++ mov r10d,DWORD[4+r11] ++ lea r10,[r10*1+rsi] ++ cmp rbx,r10 ++ jae NEAR $L$in_prologue ++ lea r10,[$L$avx2_shortcut] ++ cmp rbx,r10 ++ jb NEAR $L$not_in_avx2 ++ ++ and rax,-256*4 ++ add rax,448 ++$L$not_in_avx2: ++ mov rsi,rax ++ mov rax,QWORD[((64+24))+rax] ++ lea rax,[48+rax] ++ ++ mov rbx,QWORD[((-8))+rax] ++ mov rbp,QWORD[((-16))+rax] ++ mov r12,QWORD[((-24))+rax] ++ mov r13,QWORD[((-32))+rax] ++ mov r14,QWORD[((-40))+rax] ++ mov r15,QWORD[((-48))+rax] ++ mov QWORD[144+r8],rbx ++ mov QWORD[160+r8],rbp ++ mov QWORD[216+r8],r12 ++ mov QWORD[224+r8],r13 ++ mov QWORD[232+r8],r14 ++ mov QWORD[240+r8],r15 ++ ++ lea r10,[$L$epilogue] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ lea rsi,[((64+32))+rsi] ++ lea rdi,[512+r8] ++ mov ecx,8 ++ DD 0xa548f3fc ++ ++$L$in_prologue: ++ mov rdi,QWORD[8+rax] ++ mov rsi,QWORD[16+rax] ++ mov QWORD[152+r8],rax ++ mov QWORD[168+r8],rsi ++ mov QWORD[176+r8],rdi ++ ++ mov rdi,QWORD[40+r9] ++ mov rsi,r8 ++ mov ecx,154 ++ DD 0xa548f3fc ++ ++ mov rsi,r9 ++ xor rcx,rcx ++ mov rdx,QWORD[8+rsi] ++ mov r8,QWORD[rsi] ++ mov r9,QWORD[16+rsi] ++ mov r10,QWORD[40+rsi] ++ lea r11,[56+rsi] ++ lea r12,[24+rsi] ++ mov QWORD[32+rsp],r10 ++ mov QWORD[40+rsp],r11 ++ mov QWORD[48+rsp],r12 ++ mov QWORD[56+rsp],rcx ++ call QWORD[__imp_RtlVirtualUnwind] ++ ++ mov eax,1 ++ add rsp,64 ++ popfq ++ pop r15 ++ pop r14 ++ pop r13 ++ pop r12 ++ pop rbp ++ pop rbx ++ pop rdi ++ pop rsi ++ DB 0F3h,0C3h ;repret ++ ++ ++ALIGN 16 ++shaext_handler: ++ push rsi ++ push rdi ++ push rbx ++ push rbp ++ push r12 ++ push r13 ++ push r14 ++ push r15 ++ pushfq ++ sub rsp,64 ++ ++ mov rax,QWORD[120+r8] ++ mov rbx,QWORD[248+r8] ++ ++ lea r10,[$L$prologue_shaext] ++ cmp rbx,r10 ++ jb NEAR $L$in_prologue ++ ++ lea r10,[$L$epilogue_shaext] ++ cmp rbx,r10 ++ jae NEAR $L$in_prologue ++ ++ lea rsi,[((-8-80))+rax] ++ lea rdi,[512+r8] ++ mov ecx,10 ++ DD 0xa548f3fc ++ ++ jmp NEAR $L$in_prologue ++ ++section .pdata rdata align=4 ++ALIGN 4 ++ DD $L$SEH_begin_sha256_block_data_order wrt ..imagebase ++ DD $L$SEH_end_sha256_block_data_order wrt ..imagebase ++ DD $L$SEH_info_sha256_block_data_order wrt ..imagebase ++ DD $L$SEH_begin_sha256_block_data_order_shaext wrt ..imagebase ++ DD $L$SEH_end_sha256_block_data_order_shaext wrt ..imagebase ++ DD $L$SEH_info_sha256_block_data_order_shaext wrt ..imagebase ++ DD $L$SEH_begin_sha256_block_data_order_ssse3 wrt ..imagebase ++ DD $L$SEH_end_sha256_block_data_order_ssse3 wrt ..imagebase ++ DD $L$SEH_info_sha256_block_data_order_ssse3 wrt ..imagebase ++ DD $L$SEH_begin_sha256_block_data_order_avx wrt ..imagebase ++ DD $L$SEH_end_sha256_block_data_order_avx wrt ..imagebase ++ DD $L$SEH_info_sha256_block_data_order_avx wrt ..imagebase ++ DD $L$SEH_begin_sha256_block_data_order_avx2 wrt ..imagebase ++ DD $L$SEH_end_sha256_block_data_order_avx2 wrt ..imagebase ++ DD $L$SEH_info_sha256_block_data_order_avx2 wrt ..imagebase ++section .xdata rdata align=8 ++ALIGN 8 ++$L$SEH_info_sha256_block_data_order: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$prologue wrt ..imagebase,$L$epilogue wrt ..imagebase ++$L$SEH_info_sha256_block_data_order_shaext: ++DB 9,0,0,0 ++ DD shaext_handler wrt ..imagebase ++$L$SEH_info_sha256_block_data_order_ssse3: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$prologue_ssse3 wrt ..imagebase,$L$epilogue_ssse3 wrt ..imagebase ++$L$SEH_info_sha256_block_data_order_avx: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$prologue_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase ++$L$SEH_info_sha256_block_data_order_avx2: ++DB 9,0,0,0 ++ DD se_handler wrt ..imagebase ++ DD $L$prologue_avx2 wrt ..imagebase,$L$epilogue_avx2 wrt ..imagebase +diff --git a/SMP/lib/priority_options.h b/SMP/lib/priority_options.h +new file mode 100644 +index 0000000..77bc9ae +--- /dev/null ++++ b/SMP/lib/priority_options.h +@@ -0,0 +1,179 @@ ++/* ANSI-C code produced by gperf version 3.0.4 */ ++/* Command-line: gperf --global-table -t lib/priority_options.gperf */ ++/* Computed positions: -k'1,$' */ ++ ++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ ++ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ ++ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ ++ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ ++ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ ++ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ ++ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ ++ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ ++ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ ++ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ ++ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ ++ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ ++ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ ++ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ ++ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ ++ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ ++ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ ++ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ ++ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ ++ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ ++ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ ++ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ ++ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) ++/* The character set is not based on ISO-646. */ ++#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." ++#endif ++ ++#line 1 "lib/priority_options.gperf" ++ ++typedef void (*option_set_func)(gnutls_priority_t); ++#line 6 "lib/priority_options.gperf" ++struct priority_options_st { const char *name; option_set_func func; }; ++ ++#define TOTAL_KEYWORDS 29 ++#define MIN_WORD_LENGTH 6 ++#define MAX_WORD_LENGTH 32 ++#define MIN_HASH_VALUE 6 ++#define MAX_HASH_VALUE 52 ++/* maximum key range = 47, duplicates = 0 */ ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static unsigned int ++hash (register const char *str, register unsigned int len) ++{ ++ static const unsigned char asso_values[] = ++ { ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 25, 53, 53, 5, 53, 53, 20, 53, 53, 53, ++ 53, 53, 53, 53, 53, 5, 53, 10, 0, 25, ++ 10, 0, 0, 53, 53, 10, 20, 0, 0, 53, ++ 10, 53, 53, 0, 0, 0, 0, 30, 53, 5, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, ++ 53, 53, 53, 53, 53, 53 ++ }; ++ return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]]; ++} ++ ++static const struct priority_options_st wordlist[] = ++ { ++ {""}, {""}, {""}, {""}, {""}, {""}, ++#line 12 "lib/priority_options.gperf" ++ {"NO_ETM", enable_no_etm}, ++ {""}, {""}, {""}, ++#line 11 "lib/priority_options.gperf" ++ {"NO_TICKETS", enable_no_tickets}, ++#line 35 "lib/priority_options.gperf" ++ {"NEW_PADDING", dummy_func}, ++ {""}, ++#line 10 "lib/priority_options.gperf" ++ {"NO_EXTENSIONS", enable_no_extensions}, ++ {""}, ++#line 13 "lib/priority_options.gperf" ++ {"NO_SESSION_HASH", enable_no_ext_master_secret}, ++#line 8 "lib/priority_options.gperf" ++ {"COMPAT", enable_compat}, ++#line 25 "lib/priority_options.gperf" ++ {"DISABLE_WILDCARDS", disable_wildcards}, ++#line 21 "lib/priority_options.gperf" ++ {"SAFE_RENEGOTIATION", enable_safe_renegotiation}, ++#line 17 "lib/priority_options.gperf" ++ {"SSL3_RECORD_VERSION", enable_ssl3_record_version}, ++#line 20 "lib/priority_options.gperf" ++ {"UNSAFE_RENEGOTIATION", enable_unsafe_renegotiation}, ++#line 14 "lib/priority_options.gperf" ++ {"STATELESS_COMPRESSION", dummy_func}, ++#line 31 "lib/priority_options.gperf" ++ {"PROFILE_HIGH", enable_profile_high}, ++#line 24 "lib/priority_options.gperf" ++ {"FALLBACK_SCSV", enable_fallback_scsv}, ++#line 30 "lib/priority_options.gperf" ++ {"PROFILE_MEDIUM", enable_profile_medium}, ++#line 16 "lib/priority_options.gperf" ++ {"VERIFY_DISABLE_CRL_CHECKS", disable_crl_checks}, ++#line 23 "lib/priority_options.gperf" ++ {"DISABLE_SAFE_RENEGOTIATION", disable_safe_renegotiation}, ++#line 19 "lib/priority_options.gperf" ++ {"VERIFY_ALLOW_X509_V1_CA_CRT", dummy_func}, ++#line 32 "lib/priority_options.gperf" ++ {"PROFILE_ULTRA", enable_profile_ultra}, ++#line 29 "lib/priority_options.gperf" ++ {"PROFILE_LEGACY", enable_profile_legacy}, ++#line 15 "lib/priority_options.gperf" ++ {"VERIFY_ALLOW_SIGN_RSA_MD5", enable_verify_allow_rsa_md5}, ++#line 22 "lib/priority_options.gperf" ++ {"PARTIAL_RENEGOTIATION", enable_partial_safe_renegotiation}, ++#line 36 "lib/priority_options.gperf" ++ {"DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", enable_server_key_usage_violations}, ++ {""}, {""}, {""}, ++#line 9 "lib/priority_options.gperf" ++ {"DUMBFW", enable_dumbfw}, ++#line 27 "lib/priority_options.gperf" ++ {"PROFILE_VERY_WEAK", enable_profile_very_weak}, ++ {""}, {""}, {""}, ++#line 18 "lib/priority_options.gperf" ++ {"LATEST_RECORD_VERSION", enable_latest_record_version}, ++#line 26 "lib/priority_options.gperf" ++ {"SERVER_PRECEDENCE", enable_server_precedence}, ++ {""}, {""}, {""}, {""}, ++#line 33 "lib/priority_options.gperf" ++ {"PROFILE_SUITEB128", enable_profile_suiteb128}, ++ {""}, {""}, {""}, ++#line 28 "lib/priority_options.gperf" ++ {"PROFILE_LOW", enable_profile_low}, ++#line 34 "lib/priority_options.gperf" ++ {"PROFILE_SUITEB192", enable_profile_suiteb192} ++ }; ++ ++#ifdef __GNUC__ ++__inline ++#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ ++__attribute__ ((__gnu_inline__)) ++#endif ++#endif ++static const struct priority_options_st * ++in_word_set (register const char *str, register unsigned int len) ++{ ++ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) ++ { ++ register int key = hash (str, len); ++ ++ if (key <= MAX_HASH_VALUE && key >= 0) ++ { ++ register const char *s = wordlist[key].name; ++ ++ if (*str == *s && !strcmp (str + 1, s + 1)) ++ return &wordlist[key]; ++ } ++ } ++ return 0; ++} +diff --git a/SMP/lib/unistring/unictype.h b/SMP/lib/unistring/unictype.h +new file mode 100644 +index 0000000..cd35351 +--- /dev/null ++++ b/SMP/lib/unistring/unictype.h +@@ -0,0 +1,1060 @@ ++/* Unicode character classification and properties. ++ Copyright (C) 2002, 2005-2016 Free Software Foundation, Inc. ++ ++ This program is free software: you can redistribute it and/or modify it ++ under the terms of either: ++ ++ * the GNU Lesser General Public License as published ++ by the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ or ++ ++ * the GNU General Public License as published by the Free ++ Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ or both in parallel, as here. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef _UNICTYPE_H ++#define _UNICTYPE_H ++ ++#include "unitypes.h" ++ ++/* Get bool. */ ++#include <stdbool.h> ++ ++/* Get size_t. */ ++#include <stddef.h> ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ========================================================================= */ ++ ++/* Field 1 of Unicode Character Database: Character name. ++ See "uniname.h". */ ++ ++/* ========================================================================= */ ++ ++/* Field 2 of Unicode Character Database: General category. */ ++ ++/* Data type denoting a General category value. This is not just a bitmask, ++ but rather a bitmask and a pointer to the lookup table, so that programs ++ that use only the predefined bitmasks (i.e. don't combine bitmasks with & ++ and |) don't have a link-time dependency towards the big general table. */ ++typedef struct ++{ ++ uint32_t bitmask : 31; ++ /*bool*/ unsigned int generic : 1; ++ union ++ { ++ const void *table; /* when generic is 0 */ ++ bool (*lookup_fn) (ucs4_t uc, uint32_t bitmask); /* when generic is 1 */ ++ } lookup; ++} ++uc_general_category_t; ++ ++/* Bits and bit masks denoting General category values. UnicodeData-3.2.0.html ++ says a 32-bit integer will always suffice to represent them. ++ These bit masks can only be used with the uc_is_general_category_withtable ++ function. */ ++enum ++{ ++ UC_CATEGORY_MASK_L = 0x0000001f, ++ UC_CATEGORY_MASK_LC = 0x00000007, ++ UC_CATEGORY_MASK_Lu = 0x00000001, ++ UC_CATEGORY_MASK_Ll = 0x00000002, ++ UC_CATEGORY_MASK_Lt = 0x00000004, ++ UC_CATEGORY_MASK_Lm = 0x00000008, ++ UC_CATEGORY_MASK_Lo = 0x00000010, ++ UC_CATEGORY_MASK_M = 0x000000e0, ++ UC_CATEGORY_MASK_Mn = 0x00000020, ++ UC_CATEGORY_MASK_Mc = 0x00000040, ++ UC_CATEGORY_MASK_Me = 0x00000080, ++ UC_CATEGORY_MASK_N = 0x00000700, ++ UC_CATEGORY_MASK_Nd = 0x00000100, ++ UC_CATEGORY_MASK_Nl = 0x00000200, ++ UC_CATEGORY_MASK_No = 0x00000400, ++ UC_CATEGORY_MASK_P = 0x0003f800, ++ UC_CATEGORY_MASK_Pc = 0x00000800, ++ UC_CATEGORY_MASK_Pd = 0x00001000, ++ UC_CATEGORY_MASK_Ps = 0x00002000, ++ UC_CATEGORY_MASK_Pe = 0x00004000, ++ UC_CATEGORY_MASK_Pi = 0x00008000, ++ UC_CATEGORY_MASK_Pf = 0x00010000, ++ UC_CATEGORY_MASK_Po = 0x00020000, ++ UC_CATEGORY_MASK_S = 0x003c0000, ++ UC_CATEGORY_MASK_Sm = 0x00040000, ++ UC_CATEGORY_MASK_Sc = 0x00080000, ++ UC_CATEGORY_MASK_Sk = 0x00100000, ++ UC_CATEGORY_MASK_So = 0x00200000, ++ UC_CATEGORY_MASK_Z = 0x01c00000, ++ UC_CATEGORY_MASK_Zs = 0x00400000, ++ UC_CATEGORY_MASK_Zl = 0x00800000, ++ UC_CATEGORY_MASK_Zp = 0x01000000, ++ UC_CATEGORY_MASK_C = 0x3e000000, ++ UC_CATEGORY_MASK_Cc = 0x02000000, ++ UC_CATEGORY_MASK_Cf = 0x04000000, ++ UC_CATEGORY_MASK_Cs = 0x08000000, ++ UC_CATEGORY_MASK_Co = 0x10000000, ++ UC_CATEGORY_MASK_Cn = 0x20000000 ++}; ++ ++/* Predefined General category values. */ ++extern const uc_general_category_t UC_CATEGORY_L; ++extern const uc_general_category_t UC_CATEGORY_LC; ++extern const uc_general_category_t UC_CATEGORY_Lu; ++extern const uc_general_category_t UC_CATEGORY_Ll; ++extern const uc_general_category_t UC_CATEGORY_Lt; ++extern const uc_general_category_t UC_CATEGORY_Lm; ++extern const uc_general_category_t UC_CATEGORY_Lo; ++extern const uc_general_category_t UC_CATEGORY_M; ++extern const uc_general_category_t UC_CATEGORY_Mn; ++extern const uc_general_category_t UC_CATEGORY_Mc; ++extern const uc_general_category_t UC_CATEGORY_Me; ++extern const uc_general_category_t UC_CATEGORY_N; ++extern const uc_general_category_t UC_CATEGORY_Nd; ++extern const uc_general_category_t UC_CATEGORY_Nl; ++extern const uc_general_category_t UC_CATEGORY_No; ++extern const uc_general_category_t UC_CATEGORY_P; ++extern const uc_general_category_t UC_CATEGORY_Pc; ++extern const uc_general_category_t UC_CATEGORY_Pd; ++extern const uc_general_category_t UC_CATEGORY_Ps; ++extern const uc_general_category_t UC_CATEGORY_Pe; ++extern const uc_general_category_t UC_CATEGORY_Pi; ++extern const uc_general_category_t UC_CATEGORY_Pf; ++extern const uc_general_category_t UC_CATEGORY_Po; ++extern const uc_general_category_t UC_CATEGORY_S; ++extern const uc_general_category_t UC_CATEGORY_Sm; ++extern const uc_general_category_t UC_CATEGORY_Sc; ++extern const uc_general_category_t UC_CATEGORY_Sk; ++extern const uc_general_category_t UC_CATEGORY_So; ++extern const uc_general_category_t UC_CATEGORY_Z; ++extern const uc_general_category_t UC_CATEGORY_Zs; ++extern const uc_general_category_t UC_CATEGORY_Zl; ++extern const uc_general_category_t UC_CATEGORY_Zp; ++extern const uc_general_category_t UC_CATEGORY_C; ++extern const uc_general_category_t UC_CATEGORY_Cc; ++extern const uc_general_category_t UC_CATEGORY_Cf; ++extern const uc_general_category_t UC_CATEGORY_Cs; ++extern const uc_general_category_t UC_CATEGORY_Co; ++extern const uc_general_category_t UC_CATEGORY_Cn; ++/* Non-public. */ ++extern const uc_general_category_t _UC_CATEGORY_NONE; ++ ++/* Alias names for predefined General category values. */ ++#define UC_LETTER UC_CATEGORY_L ++#define UC_CASED_LETTER UC_CATEGORY_LC ++#define UC_UPPERCASE_LETTER UC_CATEGORY_Lu ++#define UC_LOWERCASE_LETTER UC_CATEGORY_Ll ++#define UC_TITLECASE_LETTER UC_CATEGORY_Lt ++#define UC_MODIFIER_LETTER UC_CATEGORY_Lm ++#define UC_OTHER_LETTER UC_CATEGORY_Lo ++#define UC_MARK UC_CATEGORY_M ++#define UC_NON_SPACING_MARK UC_CATEGORY_Mn ++#define UC_COMBINING_SPACING_MARK UC_CATEGORY_Mc ++#define UC_ENCLOSING_MARK UC_CATEGORY_Me ++#define UC_NUMBER UC_CATEGORY_N ++#define UC_DECIMAL_DIGIT_NUMBER UC_CATEGORY_Nd ++#define UC_LETTER_NUMBER UC_CATEGORY_Nl ++#define UC_OTHER_NUMBER UC_CATEGORY_No ++#define UC_PUNCTUATION UC_CATEGORY_P ++#define UC_CONNECTOR_PUNCTUATION UC_CATEGORY_Pc ++#define UC_DASH_PUNCTUATION UC_CATEGORY_Pd ++#define UC_OPEN_PUNCTUATION UC_CATEGORY_Ps /* a.k.a. UC_START_PUNCTUATION */ ++#define UC_CLOSE_PUNCTUATION UC_CATEGORY_Pe /* a.k.a. UC_END_PUNCTUATION */ ++#define UC_INITIAL_QUOTE_PUNCTUATION UC_CATEGORY_Pi ++#define UC_FINAL_QUOTE_PUNCTUATION UC_CATEGORY_Pf ++#define UC_OTHER_PUNCTUATION UC_CATEGORY_Po ++#define UC_SYMBOL UC_CATEGORY_S ++#define UC_MATH_SYMBOL UC_CATEGORY_Sm ++#define UC_CURRENCY_SYMBOL UC_CATEGORY_Sc ++#define UC_MODIFIER_SYMBOL UC_CATEGORY_Sk ++#define UC_OTHER_SYMBOL UC_CATEGORY_So ++#define UC_SEPARATOR UC_CATEGORY_Z ++#define UC_SPACE_SEPARATOR UC_CATEGORY_Zs ++#define UC_LINE_SEPARATOR UC_CATEGORY_Zl ++#define UC_PARAGRAPH_SEPARATOR UC_CATEGORY_Zp ++#define UC_OTHER UC_CATEGORY_C ++#define UC_CONTROL UC_CATEGORY_Cc ++#define UC_FORMAT UC_CATEGORY_Cf ++#define UC_SURROGATE UC_CATEGORY_Cs /* all of them are invalid characters */ ++#define UC_PRIVATE_USE UC_CATEGORY_Co ++#define UC_UNASSIGNED UC_CATEGORY_Cn /* some of them are invalid characters */ ++ ++/* Return the union of two general categories. ++ This corresponds to the unions of the two sets of characters. */ ++extern uc_general_category_t ++ uc_general_category_or (uc_general_category_t category1, ++ uc_general_category_t category2); ++ ++/* Return the intersection of two general categories as bit masks. ++ This *does*not* correspond to the intersection of the two sets of ++ characters. */ ++extern uc_general_category_t ++ uc_general_category_and (uc_general_category_t category1, ++ uc_general_category_t category2); ++ ++/* Return the intersection of a general category with the complement of a ++ second general category, as bit masks. ++ This *does*not* correspond to the intersection with complement, when ++ viewing the categories as sets of characters. */ ++extern uc_general_category_t ++ uc_general_category_and_not (uc_general_category_t category1, ++ uc_general_category_t category2); ++ ++/* Return the name of a general category. */ ++extern const char * ++ uc_general_category_name (uc_general_category_t category) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the long name of a general category. */ ++extern const char * ++ uc_general_category_long_name (uc_general_category_t category) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the general category given by name, e.g. "Lu", or by long name, ++ e.g. "Uppercase Letter". */ ++extern uc_general_category_t ++ uc_general_category_byname (const char *category_name) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the general category of a Unicode character. */ ++extern uc_general_category_t ++ uc_general_category (ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Test whether a Unicode character belongs to a given category. ++ The CATEGORY argument can be the combination of several predefined ++ general categories. */ ++extern bool ++ uc_is_general_category (ucs4_t uc, uc_general_category_t category) ++ _UC_ATTRIBUTE_PURE; ++/* Likewise. This function uses a big table comprising all categories. */ ++extern bool ++ uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Field 3 of Unicode Character Database: Canonical combining class. */ ++ ++/* The possible results of uc_combining_class (0..255) are described in ++ UCD.html. The list here is not definitive; more values can be added ++ in future versions. */ ++enum ++{ ++ UC_CCC_NR = 0, /* Not Reordered */ ++ UC_CCC_OV = 1, /* Overlay */ ++ UC_CCC_NK = 7, /* Nukta */ ++ UC_CCC_KV = 8, /* Kana Voicing */ ++ UC_CCC_VR = 9, /* Virama */ ++ UC_CCC_ATBL = 200, /* Attached Below Left */ ++ UC_CCC_ATB = 202, /* Attached Below */ ++ UC_CCC_ATA = 214, /* Attached Above */ ++ UC_CCC_ATAR = 216, /* Attached Above Right */ ++ UC_CCC_BL = 218, /* Below Left */ ++ UC_CCC_B = 220, /* Below */ ++ UC_CCC_BR = 222, /* Below Right */ ++ UC_CCC_L = 224, /* Left */ ++ UC_CCC_R = 226, /* Right */ ++ UC_CCC_AL = 228, /* Above Left */ ++ UC_CCC_A = 230, /* Above */ ++ UC_CCC_AR = 232, /* Above Right */ ++ UC_CCC_DB = 233, /* Double Below */ ++ UC_CCC_DA = 234, /* Double Above */ ++ UC_CCC_IS = 240 /* Iota Subscript */ ++}; ++ ++/* Return the canonical combining class of a Unicode character. */ ++extern int ++ uc_combining_class (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the name of a canonical combining class. */ ++extern const char * ++ uc_combining_class_name (int ccc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the long name of a canonical combining class. */ ++extern const char * ++ uc_combining_class_long_name (int ccc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the canonical combining class given by name, e.g. "BL", or by long ++ name, e.g. "Below Left". */ ++extern int ++ uc_combining_class_byname (const char *ccc_name) ++ _UC_ATTRIBUTE_PURE; ++ ++/* ========================================================================= */ ++ ++/* Field 4 of Unicode Character Database: Bidi class. ++ Before Unicode 4.0, this field was called "Bidirectional category". */ ++ ++enum ++{ ++ UC_BIDI_L, /* Left-to-Right */ ++ UC_BIDI_LRE, /* Left-to-Right Embedding */ ++ UC_BIDI_LRO, /* Left-to-Right Override */ ++ UC_BIDI_R, /* Right-to-Left */ ++ UC_BIDI_AL, /* Right-to-Left Arabic */ ++ UC_BIDI_RLE, /* Right-to-Left Embedding */ ++ UC_BIDI_RLO, /* Right-to-Left Override */ ++ UC_BIDI_PDF, /* Pop Directional Format */ ++ UC_BIDI_EN, /* European Number */ ++ UC_BIDI_ES, /* European Number Separator */ ++ UC_BIDI_ET, /* European Number Terminator */ ++ UC_BIDI_AN, /* Arabic Number */ ++ UC_BIDI_CS, /* Common Number Separator */ ++ UC_BIDI_NSM, /* Non-Spacing Mark */ ++ UC_BIDI_BN, /* Boundary Neutral */ ++ UC_BIDI_B, /* Paragraph Separator */ ++ UC_BIDI_S, /* Segment Separator */ ++ UC_BIDI_WS, /* Whitespace */ ++ UC_BIDI_ON, /* Other Neutral */ ++ UC_BIDI_LRI, /* Left-to-Right Isolate */ ++ UC_BIDI_RLI, /* Right-to-Left Isolate */ ++ UC_BIDI_FSI, /* First Strong Isolate */ ++ UC_BIDI_PDI /* Pop Directional Isolate */ ++}; ++ ++/* Return the name of a bidi class. */ ++extern const char * ++ uc_bidi_class_name (int bidi_class) ++ _UC_ATTRIBUTE_CONST; ++/* Same; obsolete function name. */ ++extern const char * ++ uc_bidi_category_name (int category) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the long name of a bidi class. */ ++extern const char * ++ uc_bidi_class_long_name (int bidi_class) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the bidi class given by name, e.g. "LRE", or by long name, e.g. ++ "Left-to-Right Embedding". */ ++extern int ++ uc_bidi_class_byname (const char *bidi_class_name) ++ _UC_ATTRIBUTE_PURE; ++/* Same; obsolete function name. */ ++extern int ++ uc_bidi_category_byname (const char *category_name) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the bidi class of a Unicode character. */ ++extern int ++ uc_bidi_class (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++/* Same; obsolete function name. */ ++extern int ++ uc_bidi_category (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test whether a Unicode character belongs to a given bidi class. */ ++extern bool ++ uc_is_bidi_class (ucs4_t uc, int bidi_class) ++ _UC_ATTRIBUTE_CONST; ++/* Same; obsolete function name. */ ++extern bool ++ uc_is_bidi_category (ucs4_t uc, int category) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Field 5 of Unicode Character Database: Character decomposition mapping. ++ See "uninorm.h". */ ++ ++/* ========================================================================= */ ++ ++/* Field 6 of Unicode Character Database: Decimal digit value. */ ++ ++/* Return the decimal digit value of a Unicode character. */ ++extern int ++ uc_decimal_value (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Field 7 of Unicode Character Database: Digit value. */ ++ ++/* Return the digit value of a Unicode character. */ ++extern int ++ uc_digit_value (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Field 8 of Unicode Character Database: Numeric value. */ ++ ++/* Return the numeric value of a Unicode character. */ ++typedef struct ++{ ++ int numerator; ++ int denominator; ++} ++uc_fraction_t; ++extern uc_fraction_t ++ uc_numeric_value (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Field 9 of Unicode Character Database: Mirrored. */ ++ ++/* Return the mirrored character of a Unicode character UC in *PUC. */ ++extern bool ++ uc_mirror_char (ucs4_t uc, ucs4_t *puc); ++ ++/* ========================================================================= */ ++ ++/* Field 10 of Unicode Character Database: Unicode 1.0 Name. ++ Not available in this library. */ ++ ++/* ========================================================================= */ ++ ++/* Field 11 of Unicode Character Database: ISO 10646 comment. ++ Not available in this library. */ ++ ++/* ========================================================================= */ ++ ++/* Field 12, 13, 14 of Unicode Character Database: Uppercase mapping, ++ lowercase mapping, titlecase mapping. See "unicase.h". */ ++ ++/* ========================================================================= */ ++ ++/* Field 2 of the file ArabicShaping.txt in the Unicode Character Database. */ ++ ++/* Possible joining types. */ ++enum ++{ ++ UC_JOINING_TYPE_U, /* Non_Joining */ ++ UC_JOINING_TYPE_T, /* Transparent */ ++ UC_JOINING_TYPE_C, /* Join_Causing */ ++ UC_JOINING_TYPE_L, /* Left_Joining */ ++ UC_JOINING_TYPE_R, /* Right_Joining */ ++ UC_JOINING_TYPE_D /* Dual_Joining */ ++}; ++ ++/* Return the name of a joining type. */ ++extern const char * ++ uc_joining_type_name (int joining_type) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the long name of a joining type. */ ++extern const char * ++ uc_joining_type_long_name (int joining_type) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the joining type given by name, e.g. "D", or by long name, e.g. ++ "Dual Joining". */ ++extern int ++ uc_joining_type_byname (const char *joining_type_name) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the joining type of a Unicode character. */ ++extern int ++ uc_joining_type (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Field 3 of the file ArabicShaping.txt in the Unicode Character Database. */ ++ ++/* Possible joining groups. ++ This enumeration may be extended in the future. */ ++enum ++{ ++ UC_JOINING_GROUP_NONE, /* No_Joining_Group */ ++ UC_JOINING_GROUP_AIN, /* Ain */ ++ UC_JOINING_GROUP_ALAPH, /* Alaph */ ++ UC_JOINING_GROUP_ALEF, /* Alef */ ++ UC_JOINING_GROUP_BEH, /* Beh */ ++ UC_JOINING_GROUP_BETH, /* Beth */ ++ UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, /* Burushaski_Yeh_Barree */ ++ UC_JOINING_GROUP_DAL, /* Dal */ ++ UC_JOINING_GROUP_DALATH_RISH, /* Dalath_Rish */ ++ UC_JOINING_GROUP_E, /* E */ ++ UC_JOINING_GROUP_FARSI_YEH, /* Farsi_Yeh */ ++ UC_JOINING_GROUP_FE, /* Fe */ ++ UC_JOINING_GROUP_FEH, /* Feh */ ++ UC_JOINING_GROUP_FINAL_SEMKATH, /* Final_Semkath */ ++ UC_JOINING_GROUP_GAF, /* Gaf */ ++ UC_JOINING_GROUP_GAMAL, /* Gamal */ ++ UC_JOINING_GROUP_HAH, /* Hah */ ++ UC_JOINING_GROUP_HE, /* He */ ++ UC_JOINING_GROUP_HEH, /* Heh */ ++ UC_JOINING_GROUP_HEH_GOAL, /* Heh_Goal */ ++ UC_JOINING_GROUP_HETH, /* Heth */ ++ UC_JOINING_GROUP_KAF, /* Kaf */ ++ UC_JOINING_GROUP_KAPH, /* Kaph */ ++ UC_JOINING_GROUP_KHAPH, /* Khaph */ ++ UC_JOINING_GROUP_KNOTTED_HEH, /* Knotted_Heh */ ++ UC_JOINING_GROUP_LAM, /* Lam */ ++ UC_JOINING_GROUP_LAMADH, /* Lamadh */ ++ UC_JOINING_GROUP_MEEM, /* Meem */ ++ UC_JOINING_GROUP_MIM, /* Mim */ ++ UC_JOINING_GROUP_NOON, /* Noon */ ++ UC_JOINING_GROUP_NUN, /* Nun */ ++ UC_JOINING_GROUP_NYA, /* Nya */ ++ UC_JOINING_GROUP_PE, /* Pe */ ++ UC_JOINING_GROUP_QAF, /* Qaf */ ++ UC_JOINING_GROUP_QAPH, /* Qaph */ ++ UC_JOINING_GROUP_REH, /* Reh */ ++ UC_JOINING_GROUP_REVERSED_PE, /* Reversed_Pe */ ++ UC_JOINING_GROUP_SAD, /* Sad */ ++ UC_JOINING_GROUP_SADHE, /* Sadhe */ ++ UC_JOINING_GROUP_SEEN, /* Seen */ ++ UC_JOINING_GROUP_SEMKATH, /* Semkath */ ++ UC_JOINING_GROUP_SHIN, /* Shin */ ++ UC_JOINING_GROUP_SWASH_KAF, /* Swash_Kaf */ ++ UC_JOINING_GROUP_SYRIAC_WAW, /* Syriac_Waw */ ++ UC_JOINING_GROUP_TAH, /* Tah */ ++ UC_JOINING_GROUP_TAW, /* Taw */ ++ UC_JOINING_GROUP_TEH_MARBUTA, /* Teh_Marbuta */ ++ UC_JOINING_GROUP_TEH_MARBUTA_GOAL, /* Teh_Marbuta_Goal */ ++ UC_JOINING_GROUP_TETH, /* Teth */ ++ UC_JOINING_GROUP_WAW, /* Waw */ ++ UC_JOINING_GROUP_YEH, /* Yeh */ ++ UC_JOINING_GROUP_YEH_BARREE, /* Yeh_Barree */ ++ UC_JOINING_GROUP_YEH_WITH_TAIL, /* Yeh_With_Tail */ ++ UC_JOINING_GROUP_YUDH, /* Yudh */ ++ UC_JOINING_GROUP_YUDH_HE, /* Yudh_He */ ++ UC_JOINING_GROUP_ZAIN, /* Zain */ ++ UC_JOINING_GROUP_ZHAIN, /* Zhain */ ++ UC_JOINING_GROUP_ROHINGYA_YEH, /* Rohingya_Yeh */ ++ UC_JOINING_GROUP_STRAIGHT_WAW, /* Straight_Waw */ ++ UC_JOINING_GROUP_MANICHAEAN_ALEPH, /* Manichaean_Aleph */ ++ UC_JOINING_GROUP_MANICHAEAN_BETH, /* Manichaean_Beth */ ++ UC_JOINING_GROUP_MANICHAEAN_GIMEL, /* Manichaean_Gimel */ ++ UC_JOINING_GROUP_MANICHAEAN_DALETH, /* Manichaean_Daleth */ ++ UC_JOINING_GROUP_MANICHAEAN_WAW, /* Manichaean_Waw */ ++ UC_JOINING_GROUP_MANICHAEAN_ZAYIN, /* Manichaean_Zayin */ ++ UC_JOINING_GROUP_MANICHAEAN_HETH, /* Manichaean_Heth */ ++ UC_JOINING_GROUP_MANICHAEAN_TETH, /* Manichaean_Teth */ ++ UC_JOINING_GROUP_MANICHAEAN_YODH, /* Manichaean_Yodh */ ++ UC_JOINING_GROUP_MANICHAEAN_KAPH, /* Manichaean_Kaph */ ++ UC_JOINING_GROUP_MANICHAEAN_LAMEDH, /* Manichaean_Lamedh */ ++ UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, /* Manichaean_Dhamedh */ ++ UC_JOINING_GROUP_MANICHAEAN_THAMEDH, /* Manichaean_Thamedh */ ++ UC_JOINING_GROUP_MANICHAEAN_MEM, /* Manichaean_Mem */ ++ UC_JOINING_GROUP_MANICHAEAN_NUN, /* Manichaean_Nun */ ++ UC_JOINING_GROUP_MANICHAEAN_SAMEKH, /* Manichaean_Aleph */ ++ UC_JOINING_GROUP_MANICHAEAN_AYIN, /* Manichaean_Ayin */ ++ UC_JOINING_GROUP_MANICHAEAN_PE, /* Manichaean_Pe */ ++ UC_JOINING_GROUP_MANICHAEAN_SADHE, /* Manichaean_Sadhe */ ++ UC_JOINING_GROUP_MANICHAEAN_QOPH, /* Manichaean_Qoph */ ++ UC_JOINING_GROUP_MANICHAEAN_RESH, /* Manichaean_Resh */ ++ UC_JOINING_GROUP_MANICHAEAN_TAW, /* Manichaean_Taw */ ++ UC_JOINING_GROUP_MANICHAEAN_ONE, /* Manichaean_One */ ++ UC_JOINING_GROUP_MANICHAEAN_FIVE, /* Manichaean_Five */ ++ UC_JOINING_GROUP_MANICHAEAN_TEN, /* Manichaean_Ten */ ++ UC_JOINING_GROUP_MANICHAEAN_TWENTY, /* Manichaean_Twenty */ ++ UC_JOINING_GROUP_MANICHAEAN_HUNDRED /* Manichaean_Hundred */ ++}; ++ ++/* Return the name of a joining group. */ ++extern const char * ++ uc_joining_group_name (int joining_group) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the joining group given by name, e.g. "Teh_Marbuta". */ ++extern int ++ uc_joining_group_byname (const char *joining_group_name) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the joining group of a Unicode character. */ ++extern int ++ uc_joining_group (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Common API for properties. */ ++ ++/* Data type denoting a property. This is not just a number, but rather a ++ pointer to the test functions, so that programs that use only few of the ++ properties don't have a link-time dependency towards all the tables. */ ++typedef struct ++{ ++ bool (*test_fn) (ucs4_t uc); ++} ++uc_property_t; ++ ++/* Predefined properties. */ ++/* General. */ ++extern const uc_property_t UC_PROPERTY_WHITE_SPACE; ++extern const uc_property_t UC_PROPERTY_ALPHABETIC; ++extern const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC; ++extern const uc_property_t UC_PROPERTY_NOT_A_CHARACTER; ++extern const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; ++extern const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; ++extern const uc_property_t UC_PROPERTY_DEPRECATED; ++extern const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; ++extern const uc_property_t UC_PROPERTY_VARIATION_SELECTOR; ++extern const uc_property_t UC_PROPERTY_PRIVATE_USE; ++extern const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE; ++/* Case. */ ++extern const uc_property_t UC_PROPERTY_UPPERCASE; ++extern const uc_property_t UC_PROPERTY_OTHER_UPPERCASE; ++extern const uc_property_t UC_PROPERTY_LOWERCASE; ++extern const uc_property_t UC_PROPERTY_OTHER_LOWERCASE; ++extern const uc_property_t UC_PROPERTY_TITLECASE; ++extern const uc_property_t UC_PROPERTY_CASED; ++extern const uc_property_t UC_PROPERTY_CASE_IGNORABLE; ++extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_LOWERCASED; ++extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_UPPERCASED; ++extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_TITLECASED; ++extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEFOLDED; ++extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEMAPPED; ++extern const uc_property_t UC_PROPERTY_SOFT_DOTTED; ++/* Identifiers. */ ++extern const uc_property_t UC_PROPERTY_ID_START; ++extern const uc_property_t UC_PROPERTY_OTHER_ID_START; ++extern const uc_property_t UC_PROPERTY_ID_CONTINUE; ++extern const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE; ++extern const uc_property_t UC_PROPERTY_XID_START; ++extern const uc_property_t UC_PROPERTY_XID_CONTINUE; ++extern const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE; ++extern const uc_property_t UC_PROPERTY_PATTERN_SYNTAX; ++/* Shaping and rendering. */ ++extern const uc_property_t UC_PROPERTY_JOIN_CONTROL; ++extern const uc_property_t UC_PROPERTY_GRAPHEME_BASE; ++extern const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND; ++extern const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND; ++extern const uc_property_t UC_PROPERTY_GRAPHEME_LINK; ++/* Bidi. */ ++extern const uc_property_t UC_PROPERTY_BIDI_CONTROL; ++extern const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT; ++extern const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; ++extern const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; ++extern const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT; ++extern const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; ++extern const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; ++extern const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT; ++extern const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR; ++extern const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR; ++extern const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; ++extern const uc_property_t UC_PROPERTY_BIDI_WHITESPACE; ++extern const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK; ++extern const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; ++extern const uc_property_t UC_PROPERTY_BIDI_PDF; ++extern const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; ++extern const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL; ++/* Numeric. */ ++extern const uc_property_t UC_PROPERTY_HEX_DIGIT; ++extern const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT; ++/* CJK. */ ++extern const uc_property_t UC_PROPERTY_IDEOGRAPHIC; ++extern const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH; ++extern const uc_property_t UC_PROPERTY_RADICAL; ++extern const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR; ++extern const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR; ++/* Misc. */ ++extern const uc_property_t UC_PROPERTY_ZERO_WIDTH; ++extern const uc_property_t UC_PROPERTY_SPACE; ++extern const uc_property_t UC_PROPERTY_NON_BREAK; ++extern const uc_property_t UC_PROPERTY_ISO_CONTROL; ++extern const uc_property_t UC_PROPERTY_FORMAT_CONTROL; ++extern const uc_property_t UC_PROPERTY_DASH; ++extern const uc_property_t UC_PROPERTY_HYPHEN; ++extern const uc_property_t UC_PROPERTY_PUNCTUATION; ++extern const uc_property_t UC_PROPERTY_LINE_SEPARATOR; ++extern const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR; ++extern const uc_property_t UC_PROPERTY_QUOTATION_MARK; ++extern const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL; ++extern const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION; ++extern const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL; ++extern const uc_property_t UC_PROPERTY_MATH; ++extern const uc_property_t UC_PROPERTY_OTHER_MATH; ++extern const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION; ++extern const uc_property_t UC_PROPERTY_LEFT_OF_PAIR; ++extern const uc_property_t UC_PROPERTY_COMBINING; ++extern const uc_property_t UC_PROPERTY_COMPOSITE; ++extern const uc_property_t UC_PROPERTY_DECIMAL_DIGIT; ++extern const uc_property_t UC_PROPERTY_NUMERIC; ++extern const uc_property_t UC_PROPERTY_DIACRITIC; ++extern const uc_property_t UC_PROPERTY_EXTENDER; ++extern const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL; ++ ++/* Return the property given by name, e.g. "White space". */ ++extern uc_property_t ++ uc_property_byname (const char *property_name); ++ ++/* Test whether a property is valid. */ ++#define uc_property_is_valid(property) ((property).test_fn != NULL) ++ ++/* Test whether a Unicode character has a given property. */ ++extern bool ++ uc_is_property (ucs4_t uc, uc_property_t property); ++extern bool uc_is_property_white_space (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_alphabetic (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_alphabetic (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_not_a_character (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_deprecated (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_logical_order_exception (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_variation_selector (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_private_use (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_unassigned_code_value (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_uppercase (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_uppercase (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_lowercase (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_lowercase (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_titlecase (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_cased (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_case_ignorable (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_changes_when_lowercased (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_changes_when_uppercased (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_changes_when_titlecased (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_changes_when_casefolded (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_changes_when_casemapped (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_soft_dotted (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_id_start (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_id_start (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_id_continue (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_id_continue (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_xid_start (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_xid_continue (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_pattern_white_space (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_pattern_syntax (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_join_control (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_grapheme_base (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_grapheme_extend (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_grapheme_extend (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_grapheme_link (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_control (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_left_to_right (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_european_digit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_common_separator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_block_separator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_segment_separator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_whitespace (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_pdf (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_bidi_other_neutral (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_hex_digit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_ascii_hex_digit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_ideographic (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_unified_ideograph (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_radical (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_ids_binary_operator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_ids_trinary_operator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_zero_width (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_space (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_non_break (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_iso_control (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_format_control (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_dash (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_hyphen (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_punctuation (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_line_separator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_paragraph_separator (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_quotation_mark (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_sentence_terminal (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_terminal_punctuation (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_currency_symbol (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_math (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_other_math (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_paired_punctuation (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_left_of_pair (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_combining (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_composite (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_decimal_digit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_numeric (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_diacritic (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_extender (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++extern bool uc_is_property_ignorable_control (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Subdivision of the Unicode characters into scripts. */ ++ ++typedef struct ++{ ++ unsigned int code : 21; ++ unsigned int start : 1; ++ unsigned int end : 1; ++} ++uc_interval_t; ++typedef struct ++{ ++ unsigned int nintervals; ++ const uc_interval_t *intervals; ++ const char *name; ++} ++uc_script_t; ++ ++/* Return the script of a Unicode character. */ ++extern const uc_script_t * ++ uc_script (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the script given by name, e.g. "HAN". */ ++extern const uc_script_t * ++ uc_script_byname (const char *script_name) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Test whether a Unicode character belongs to a given script. */ ++extern bool ++ uc_is_script (ucs4_t uc, const uc_script_t *script) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Get the list of all scripts. */ ++extern void ++ uc_all_scripts (const uc_script_t **scripts, size_t *count); ++ ++/* ========================================================================= */ ++ ++/* Subdivision of the Unicode character range into blocks. */ ++ ++typedef struct ++{ ++ ucs4_t start; ++ ucs4_t end; ++ const char *name; ++} ++uc_block_t; ++ ++/* Return the block a character belongs to. */ ++extern const uc_block_t * ++ uc_block (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test whether a Unicode character belongs to a given block. */ ++extern bool ++ uc_is_block (ucs4_t uc, const uc_block_t *block) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Get the list of all blocks. */ ++extern void ++ uc_all_blocks (const uc_block_t **blocks, size_t *count); ++ ++/* ========================================================================= */ ++ ++/* Properties taken from language standards. */ ++ ++/* Test whether a Unicode character is considered whitespace in ISO C 99. */ ++extern bool ++ uc_is_c_whitespace (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test whether a Unicode character is considered whitespace in Java. */ ++extern bool ++ uc_is_java_whitespace (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++enum ++{ ++ UC_IDENTIFIER_START, /* valid as first or subsequent character */ ++ UC_IDENTIFIER_VALID, /* valid as subsequent character only */ ++ UC_IDENTIFIER_INVALID, /* not valid */ ++ UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ ++}; ++ ++/* Return the categorization of a Unicode character w.r.t. the ISO C 99 ++ identifier syntax. */ ++extern int ++ uc_c_ident_category (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Return the categorization of a Unicode character w.r.t. the Java ++ identifier syntax. */ ++extern int ++ uc_java_ident_category (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++/* Like ISO C <ctype.h> and <wctype.h>. These functions are deprecated, ++ because this set of functions was designed with ASCII in mind and cannot ++ reflect the more diverse reality of the Unicode character set. But they ++ can be a quick-and-dirty porting aid when migrating from wchar_t APIs ++ to Unicode strings. */ ++ ++/* Test for any character for which 'uc_is_alpha' or 'uc_is_digit' is true. */ ++extern bool ++ uc_is_alnum (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character for which 'uc_is_upper' or 'uc_is_lower' is true, ++ or any character that is one of a locale-specific set of characters for ++ which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' ++ is true. */ ++extern bool ++ uc_is_alpha (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any control character. */ ++extern bool ++ uc_is_cntrl (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character that corresponds to a decimal-digit character. */ ++extern bool ++ uc_is_digit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character for which 'uc_is_print' is true and 'uc_is_space' ++ is false. */ ++extern bool ++ uc_is_graph (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character that corresponds to a lowercase letter or is one ++ of a locale-specific set of characters for which none of 'uc_is_cntrl', ++ 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ ++extern bool ++ uc_is_lower (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any printing character. */ ++extern bool ++ uc_is_print (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any printing character that is one of a locale-specific set of ++ characters for which neither 'uc_is_space' nor 'uc_is_alnum' is true. */ ++extern bool ++ uc_is_punct (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character that corresponds to a locale-specific set of ++ characters for which none of 'uc_is_alnum', 'uc_is_graph', or 'uc_is_punct' ++ is true. */ ++extern bool ++ uc_is_space (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character that corresponds to an uppercase letter or is one ++ of a locale-specific set of character for which none of 'uc_is_cntrl', ++ 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ ++extern bool ++ uc_is_upper (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* Test for any character that corresponds to a hexadecimal-digit ++ character. */ ++extern bool ++ uc_is_xdigit (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* GNU extension. */ ++/* Test for any character that corresponds to a standard blank character or ++ a locale-specific set of characters for which 'uc_is_alnum' is false. */ ++extern bool ++ uc_is_blank (ucs4_t uc) ++ _UC_ATTRIBUTE_CONST; ++ ++/* ========================================================================= */ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* _UNICTYPE_H */ +diff --git a/SMP/lib/unistring/unictype/categ_byname.h b/SMP/lib/unistring/unictype/categ_byname.h +new file mode 100644 +index 0000000..3681715 +--- /dev/null ++++ b/SMP/lib/unistring/unictype/categ_byname.h +@@ -0,0 +1,622 @@ ++/* ANSI-C code produced by gperf version 3.0.4 */ ++/* Command-line: gperf -m 10 lib/unistring/unictype/categ_byname.gperf */ ++/* Computed positions: -k'1-2,7,$' */ ++ ++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ ++ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ ++ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ ++ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ ++ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ ++ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ ++ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ ++ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ ++ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ ++ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ ++ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ ++ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ ++ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ ++ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ ++ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ ++ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ ++ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ ++ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ ++ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ ++ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ ++ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ ++ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ ++ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) ++/* The character set is not based on ISO-646. */ ++#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." ++#endif ++ ++#line 2 "lib/unistring/unictype/categ_byname.gperf" ++struct named_category { int name; unsigned int category_index; }; ++ ++#define TOTAL_KEYWORDS 103 ++#define MIN_WORD_LENGTH 1 ++#define MAX_WORD_LENGTH 21 ++#define MIN_HASH_VALUE 1 ++#define MAX_HASH_VALUE 150 ++/* maximum key range = 150, duplicates = 0 */ ++ ++#ifndef GPERF_DOWNCASE ++#define GPERF_DOWNCASE 1 ++static unsigned char gperf_downcase[256] = ++ { ++ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, ++ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, ++ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, ++ 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, ++ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, ++ 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, ++ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, ++ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, ++ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, ++ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, ++ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, ++ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, ++ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, ++ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, ++ 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, ++ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, ++ 255 ++ }; ++#endif ++ ++#ifndef GPERF_CASE_STRCMP ++#define GPERF_CASE_STRCMP 1 ++static int ++gperf_case_strcmp (register const char *s1, register const char *s2) ++{ ++ for (;;) ++ { ++ unsigned char c1 = gperf_downcase[(unsigned char)*s1++]; ++ unsigned char c2 = gperf_downcase[(unsigned char)*s2++]; ++ if (c1 != 0 && c1 == c2) ++ continue; ++ return (int)c1 - (int)c2; ++ } ++} ++#endif ++ ++#ifdef __GNUC__ ++__inline ++#else ++#ifdef __cplusplus ++inline ++#endif ++#endif ++static unsigned int ++general_category_hash (register const char *str, register unsigned int len) ++{ ++ static const unsigned char asso_values[] = ++ { ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 1, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 16, 151, 1, 66, 21, ++ 9, 25, 151, 62, 151, 49, 0, 51, 4, 7, ++ 6, 151, 25, 42, 5, 8, 151, 151, 151, 0, ++ 45, 151, 151, 151, 151, 151, 151, 16, 151, 1, ++ 66, 21, 9, 25, 151, 62, 151, 49, 0, 51, ++ 4, 7, 6, 151, 25, 42, 5, 8, 151, 151, ++ 151, 0, 45, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, ++ 151, 151, 151, 151, 151, 151 ++ }; ++ register int hval = len; ++ ++ switch (hval) ++ { ++ default: ++ hval += asso_values[(unsigned char)str[6]]; ++ /*FALLTHROUGH*/ ++ case 6: ++ case 5: ++ case 4: ++ case 3: ++ case 2: ++ hval += asso_values[(unsigned char)str[1]]; ++ /*FALLTHROUGH*/ ++ case 1: ++ hval += asso_values[(unsigned char)str[0]]; ++ break; ++ } ++ return hval + asso_values[(unsigned char)str[len - 1]]; ++} ++ ++struct general_category_stringpool_t ++ { ++ char general_category_stringpool_str1[sizeof("L")]; ++ char general_category_stringpool_str2[sizeof("Ll")]; ++ char general_category_stringpool_str3[sizeof("C")]; ++ char general_category_stringpool_str4[sizeof("LC")]; ++ char general_category_stringpool_str5[sizeof("Cc")]; ++ char general_category_stringpool_str6[sizeof("Nl")]; ++ char general_category_stringpool_str9[sizeof("N")]; ++ char general_category_stringpool_str10[sizeof("Pc")]; ++ char general_category_stringpool_str11[sizeof("Cn")]; ++ char general_category_stringpool_str12[sizeof("Lt")]; ++ char general_category_stringpool_str13[sizeof("P")]; ++ char general_category_stringpool_str15[sizeof("Control")]; ++ char general_category_stringpool_str16[sizeof("Lo")]; ++ char general_category_stringpool_str17[sizeof("Co")]; ++ char general_category_stringpool_str18[sizeof("Lu")]; ++ char general_category_stringpool_str20[sizeof("No")]; ++ char general_category_stringpool_str21[sizeof("Cf")]; ++ char general_category_stringpool_str22[sizeof("Po")]; ++ char general_category_stringpool_str23[sizeof("OtherSymbol")]; ++ char general_category_stringpool_str24[sizeof("CurrencySymbol")]; ++ char general_category_stringpool_str25[sizeof("Currency Symbol")]; ++ char general_category_stringpool_str26[sizeof("Pf")]; ++ char general_category_stringpool_str27[sizeof("Format")]; ++ char general_category_stringpool_str28[sizeof("Close Punctuation")]; ++ char general_category_stringpool_str29[sizeof("ClosePunctuation")]; ++ char general_category_stringpool_str36[sizeof("OpenPunctuation")]; ++ char general_category_stringpool_str37[sizeof("ConnectorPunctuation")]; ++ char general_category_stringpool_str38[sizeof("Connector Punctuation")]; ++ char general_category_stringpool_str39[sizeof("Other Punctuation")]; ++ char general_category_stringpool_str40[sizeof("OtherPunctuation")]; ++ char general_category_stringpool_str41[sizeof("Open Punctuation")]; ++ char general_category_stringpool_str42[sizeof("Other")]; ++ char general_category_stringpool_str43[sizeof("Number")]; ++ char general_category_stringpool_str45[sizeof("Punctuation")]; ++ char general_category_stringpool_str46[sizeof("Sc")]; ++ char general_category_stringpool_str47[sizeof("Zl")]; ++ char general_category_stringpool_str48[sizeof("Symbol")]; ++ char general_category_stringpool_str49[sizeof("Other Letter")]; ++ char general_category_stringpool_str50[sizeof("Pe")]; ++ char general_category_stringpool_str52[sizeof("Letter")]; ++ char general_category_stringpool_str53[sizeof("Other Number")]; ++ char general_category_stringpool_str54[sizeof("Cased Letter")]; ++ char general_category_stringpool_str55[sizeof("Mc")]; ++ char general_category_stringpool_str56[sizeof("OtherNumber")]; ++ char general_category_stringpool_str58[sizeof("So")]; ++ char general_category_stringpool_str59[sizeof("Zp")]; ++ char general_category_stringpool_str60[sizeof("Letter Number")]; ++ char general_category_stringpool_str61[sizeof("Mn")]; ++ char general_category_stringpool_str62[sizeof("LetterNumber")]; ++ char general_category_stringpool_str63[sizeof("LowercaseLetter")]; ++ char general_category_stringpool_str64[sizeof("Lowercase Letter")]; ++ char general_category_stringpool_str66[sizeof("Other Symbol")]; ++ char general_category_stringpool_str69[sizeof("OtherLetter")]; ++ char general_category_stringpool_str70[sizeof("UppercaseLetter")]; ++ char general_category_stringpool_str71[sizeof("Uppercase Letter")]; ++ char general_category_stringpool_str74[sizeof("CasedLetter")]; ++ char general_category_stringpool_str75[sizeof("NonspacingMark")]; ++ char general_category_stringpool_str76[sizeof("Nonspacing Mark")]; ++ char general_category_stringpool_str78[sizeof("Math Symbol")]; ++ char general_category_stringpool_str81[sizeof("ParagraphSeparator")]; ++ char general_category_stringpool_str82[sizeof("Paragraph Separator")]; ++ char general_category_stringpool_str83[sizeof("PrivateUse")]; ++ char general_category_stringpool_str84[sizeof("Private Use")]; ++ char general_category_stringpool_str85[sizeof("S")]; ++ char general_category_stringpool_str87[sizeof("Cs")]; ++ char general_category_stringpool_str88[sizeof("InitialPunctuation")]; ++ char general_category_stringpool_str89[sizeof("Initial Punctuation")]; ++ char general_category_stringpool_str91[sizeof("Z")]; ++ char general_category_stringpool_str92[sizeof("Ps")]; ++ char general_category_stringpool_str93[sizeof("ModifierSymbol")]; ++ char general_category_stringpool_str94[sizeof("Modifier Symbol")]; ++ char general_category_stringpool_str95[sizeof("Me")]; ++ char general_category_stringpool_str96[sizeof("Surrogate")]; ++ char general_category_stringpool_str98[sizeof("Final Punctuation")]; ++ char general_category_stringpool_str99[sizeof("FinalPunctuation")]; ++ char general_category_stringpool_str102[sizeof("Separator")]; ++ char general_category_stringpool_str103[sizeof("M")]; ++ char general_category_stringpool_str104[sizeof("Lm")]; ++ char general_category_stringpool_str105[sizeof("DashPunctuation")]; ++ char general_category_stringpool_str106[sizeof("LineSeparator")]; ++ char general_category_stringpool_str108[sizeof("SpaceSeparator")]; ++ char general_category_stringpool_str110[sizeof("Dash Punctuation")]; ++ char general_category_stringpool_str113[sizeof("Unassigned")]; ++ char general_category_stringpool_str118[sizeof("ModifierLetter")]; ++ char general_category_stringpool_str119[sizeof("Modifier Letter")]; ++ char general_category_stringpool_str120[sizeof("Mark")]; ++ char general_category_stringpool_str122[sizeof("Line Separator")]; ++ char general_category_stringpool_str123[sizeof("TitlecaseLetter")]; ++ char general_category_stringpool_str124[sizeof("Titlecase Letter")]; ++ char general_category_stringpool_str125[sizeof("DecimalNumber")]; ++ char general_category_stringpool_str126[sizeof("Decimal Number")]; ++ char general_category_stringpool_str128[sizeof("MathSymbol")]; ++ char general_category_stringpool_str130[sizeof("Space Separator")]; ++ char general_category_stringpool_str131[sizeof("Zs")]; ++ char general_category_stringpool_str132[sizeof("Pi")]; ++ char general_category_stringpool_str133[sizeof("SpacingMark")]; ++ char general_category_stringpool_str134[sizeof("Spacing Mark")]; ++ char general_category_stringpool_str138[sizeof("Nd")]; ++ char general_category_stringpool_str140[sizeof("Pd")]; ++ char general_category_stringpool_str142[sizeof("Sk")]; ++ char general_category_stringpool_str146[sizeof("Sm")]; ++ char general_category_stringpool_str149[sizeof("EnclosingMark")]; ++ char general_category_stringpool_str150[sizeof("Enclosing Mark")]; ++ }; ++static const struct general_category_stringpool_t general_category_stringpool_contents = ++ { ++ "L", ++ "Ll", ++ "C", ++ "LC", ++ "Cc", ++ "Nl", ++ "N", ++ "Pc", ++ "Cn", ++ "Lt", ++ "P", ++ "Control", ++ "Lo", ++ "Co", ++ "Lu", ++ "No", ++ "Cf", ++ "Po", ++ "OtherSymbol", ++ "CurrencySymbol", ++ "Currency Symbol", ++ "Pf", ++ "Format", ++ "Close Punctuation", ++ "ClosePunctuation", ++ "OpenPunctuation", ++ "ConnectorPunctuation", ++ "Connector Punctuation", ++ "Other Punctuation", ++ "OtherPunctuation", ++ "Open Punctuation", ++ "Other", ++ "Number", ++ "Punctuation", ++ "Sc", ++ "Zl", ++ "Symbol", ++ "Other Letter", ++ "Pe", ++ "Letter", ++ "Other Number", ++ "Cased Letter", ++ "Mc", ++ "OtherNumber", ++ "So", ++ "Zp", ++ "Letter Number", ++ "Mn", ++ "LetterNumber", ++ "LowercaseLetter", ++ "Lowercase Letter", ++ "Other Symbol", ++ "OtherLetter", ++ "UppercaseLetter", ++ "Uppercase Letter", ++ "CasedLetter", ++ "NonspacingMark", ++ "Nonspacing Mark", ++ "Math Symbol", ++ "ParagraphSeparator", ++ "Paragraph Separator", ++ "PrivateUse", ++ "Private Use", ++ "S", ++ "Cs", ++ "InitialPunctuation", ++ "Initial Punctuation", ++ "Z", ++ "Ps", ++ "ModifierSymbol", ++ "Modifier Symbol", ++ "Me", ++ "Surrogate", ++ "Final Punctuation", ++ "FinalPunctuation", ++ "Separator", ++ "M", ++ "Lm", ++ "DashPunctuation", ++ "LineSeparator", ++ "SpaceSeparator", ++ "Dash Punctuation", ++ "Unassigned", ++ "ModifierLetter", ++ "Modifier Letter", ++ "Mark", ++ "Line Separator", ++ "TitlecaseLetter", ++ "Titlecase Letter", ++ "DecimalNumber", ++ "Decimal Number", ++ "MathSymbol", ++ "Space Separator", ++ "Zs", ++ "Pi", ++ "SpacingMark", ++ "Spacing Mark", ++ "Nd", ++ "Pd", ++ "Sk", ++ "Sm", ++ "EnclosingMark", ++ "Enclosing Mark" ++ }; ++#define general_category_stringpool ((const char *) &general_category_stringpool_contents) ++ ++static const struct named_category general_category_names[] = ++ { ++ {-1}, ++#line 14 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str1, UC_CATEGORY_INDEX_L}, ++#line 17 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str2, UC_CATEGORY_INDEX_Ll}, ++#line 46 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str3, UC_CATEGORY_INDEX_C}, ++#line 15 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str4, UC_CATEGORY_INDEX_LC}, ++#line 47 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str5, UC_CATEGORY_INDEX_Cc}, ++#line 27 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str6, UC_CATEGORY_INDEX_Nl}, ++ {-1}, {-1}, ++#line 25 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str9, UC_CATEGORY_INDEX_N}, ++#line 30 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str10, UC_CATEGORY_INDEX_Pc}, ++#line 51 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str11, UC_CATEGORY_INDEX_Cn}, ++#line 18 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str12, UC_CATEGORY_INDEX_Lt}, ++#line 29 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str13, UC_CATEGORY_INDEX_P}, ++ {-1}, ++#line 111 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str15, UC_CATEGORY_INDEX_Cc}, ++#line 20 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str16, UC_CATEGORY_INDEX_Lo}, ++#line 50 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str17, UC_CATEGORY_INDEX_Co}, ++#line 16 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str18, UC_CATEGORY_INDEX_Lu}, ++ {-1}, ++#line 28 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str20, UC_CATEGORY_INDEX_No}, ++#line 48 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str21, UC_CATEGORY_INDEX_Cf}, ++#line 36 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str22, UC_CATEGORY_INDEX_Po}, ++#line 102 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str23, UC_CATEGORY_INDEX_So}, ++#line 98 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str24, UC_CATEGORY_INDEX_Sc}, ++#line 97 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str25, UC_CATEGORY_INDEX_Sc}, ++#line 35 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str26, UC_CATEGORY_INDEX_Pf}, ++#line 112 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str27, UC_CATEGORY_INDEX_Cf}, ++#line 86 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str28, UC_CATEGORY_INDEX_Pe}, ++#line 87 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str29, UC_CATEGORY_INDEX_Pe}, ++ {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, ++#line 85 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str36, UC_CATEGORY_INDEX_Ps}, ++#line 81 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str37, UC_CATEGORY_INDEX_Pc}, ++#line 80 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str38, UC_CATEGORY_INDEX_Pc}, ++#line 92 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str39, UC_CATEGORY_INDEX_Po}, ++#line 93 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str40, UC_CATEGORY_INDEX_Po}, ++#line 84 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str41, UC_CATEGORY_INDEX_Ps}, ++#line 110 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str42, UC_CATEGORY_INDEX_C}, ++#line 72 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str43, UC_CATEGORY_INDEX_N}, ++ {-1}, ++#line 79 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str45, UC_CATEGORY_INDEX_P}, ++#line 39 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str46, UC_CATEGORY_INDEX_Sc}, ++#line 44 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str47, UC_CATEGORY_INDEX_Zl}, ++#line 94 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str48, UC_CATEGORY_INDEX_S}, ++#line 63 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str49, UC_CATEGORY_INDEX_Lo}, ++#line 33 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str50, UC_CATEGORY_INDEX_Pe}, ++ {-1}, ++#line 52 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str52, UC_CATEGORY_INDEX_L}, ++#line 77 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str53, UC_CATEGORY_INDEX_No}, ++#line 53 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str54, UC_CATEGORY_INDEX_LC}, ++#line 23 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str55, UC_CATEGORY_INDEX_Mc}, ++#line 78 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str56, UC_CATEGORY_INDEX_No}, ++ {-1}, ++#line 41 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str58, UC_CATEGORY_INDEX_So}, ++#line 45 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str59, UC_CATEGORY_INDEX_Zp}, ++#line 75 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str60, UC_CATEGORY_INDEX_Nl}, ++#line 22 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str61, UC_CATEGORY_INDEX_Mn}, ++#line 76 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str62, UC_CATEGORY_INDEX_Nl}, ++#line 58 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str63, UC_CATEGORY_INDEX_Ll}, ++#line 57 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str64, UC_CATEGORY_INDEX_Ll}, ++ {-1}, ++#line 101 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str66, UC_CATEGORY_INDEX_So}, ++ {-1}, {-1}, ++#line 64 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str69, UC_CATEGORY_INDEX_Lo}, ++#line 56 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str70, UC_CATEGORY_INDEX_Lu}, ++#line 55 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str71, UC_CATEGORY_INDEX_Lu}, ++ {-1}, {-1}, ++#line 54 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str74, UC_CATEGORY_INDEX_LC}, ++#line 67 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str75, UC_CATEGORY_INDEX_Mn}, ++#line 66 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str76, UC_CATEGORY_INDEX_Mn}, ++ {-1}, ++#line 95 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str78, UC_CATEGORY_INDEX_Sm}, ++ {-1}, {-1}, ++#line 109 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str81, UC_CATEGORY_INDEX_Zp}, ++#line 108 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str82, UC_CATEGORY_INDEX_Zp}, ++#line 115 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str83, UC_CATEGORY_INDEX_Co}, ++#line 114 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str84, UC_CATEGORY_INDEX_Co}, ++#line 37 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str85, UC_CATEGORY_INDEX_S}, ++ {-1}, ++#line 49 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str87, UC_CATEGORY_INDEX_Cs}, ++#line 89 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str88, UC_CATEGORY_INDEX_Pi}, ++#line 88 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str89, UC_CATEGORY_INDEX_Pi}, ++ {-1}, ++#line 42 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str91, UC_CATEGORY_INDEX_Z}, ++#line 32 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str92, UC_CATEGORY_INDEX_Ps}, ++#line 100 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str93, UC_CATEGORY_INDEX_Sk}, ++#line 99 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str94, UC_CATEGORY_INDEX_Sk}, ++#line 24 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str95, UC_CATEGORY_INDEX_Me}, ++#line 113 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str96, UC_CATEGORY_INDEX_Cs}, ++ {-1}, ++#line 90 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str98, UC_CATEGORY_INDEX_Pf}, ++#line 91 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str99, UC_CATEGORY_INDEX_Pf}, ++ {-1}, {-1}, ++#line 103 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str102, UC_CATEGORY_INDEX_Z}, ++#line 21 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str103, UC_CATEGORY_INDEX_M}, ++#line 19 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str104, UC_CATEGORY_INDEX_Lm}, ++#line 83 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str105, UC_CATEGORY_INDEX_Pd}, ++#line 107 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str106, UC_CATEGORY_INDEX_Zl}, ++ {-1}, ++#line 105 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str108, UC_CATEGORY_INDEX_Zs}, ++ {-1}, ++#line 82 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str110, UC_CATEGORY_INDEX_Pd}, ++ {-1}, {-1}, ++#line 116 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str113, UC_CATEGORY_INDEX_Cn}, ++ {-1}, {-1}, {-1}, {-1}, ++#line 62 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str118, UC_CATEGORY_INDEX_Lm}, ++#line 61 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str119, UC_CATEGORY_INDEX_Lm}, ++#line 65 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str120, UC_CATEGORY_INDEX_M}, ++ {-1}, ++#line 106 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str122, UC_CATEGORY_INDEX_Zl}, ++#line 60 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str123, UC_CATEGORY_INDEX_Lt}, ++#line 59 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str124, UC_CATEGORY_INDEX_Lt}, ++#line 74 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str125, UC_CATEGORY_INDEX_Nd}, ++#line 73 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str126, UC_CATEGORY_INDEX_Nd}, ++ {-1}, ++#line 96 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str128, UC_CATEGORY_INDEX_Sm}, ++ {-1}, ++#line 104 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str130, UC_CATEGORY_INDEX_Zs}, ++#line 43 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str131, UC_CATEGORY_INDEX_Zs}, ++#line 34 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str132, UC_CATEGORY_INDEX_Pi}, ++#line 69 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str133, UC_CATEGORY_INDEX_Mc}, ++#line 68 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str134, UC_CATEGORY_INDEX_Mc}, ++ {-1}, {-1}, {-1}, ++#line 26 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str138, UC_CATEGORY_INDEX_Nd}, ++ {-1}, ++#line 31 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str140, UC_CATEGORY_INDEX_Pd}, ++ {-1}, ++#line 40 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str142, UC_CATEGORY_INDEX_Sk}, ++ {-1}, {-1}, {-1}, ++#line 38 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str146, UC_CATEGORY_INDEX_Sm}, ++ {-1}, {-1}, ++#line 71 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str149, UC_CATEGORY_INDEX_Me}, ++#line 70 "lib/unistring/unictype/categ_byname.gperf" ++ {(int)(long)&((struct general_category_stringpool_t *)0)->general_category_stringpool_str150, UC_CATEGORY_INDEX_Me} ++ }; ++ ++#ifdef __GNUC__ ++__inline ++#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ ++__attribute__ ((__gnu_inline__)) ++#endif ++#endif ++const struct named_category * ++uc_general_category_lookup (register const char *str, register unsigned int len) ++{ ++ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) ++ { ++ register int key = general_category_hash (str, len); ++ ++ if (key <= MAX_HASH_VALUE && key >= 0) ++ { ++ register int o = general_category_names[key].name; ++ if (o >= 0) ++ { ++ register const char *s = o + general_category_stringpool; ++ ++ if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strcmp (str, s)) ++ return &general_category_names[key]; ++ } ++ } ++ } ++ return 0; ++} +diff --git a/SMP/lib/unistring/uninorm.h b/SMP/lib/unistring/uninorm.h +new file mode 100644 +index 0000000..9c15471 +--- /dev/null ++++ b/SMP/lib/unistring/uninorm.h +@@ -0,0 +1,258 @@ ++/* Normalization forms (composition and decomposition) of Unicode strings. ++ Copyright (C) 2001-2002, 2009-2016 Free Software Foundation, Inc. ++ Written by Bruno Haible <bruno@clisp.org>, 2009. ++ ++ This program is free software: you can redistribute it and/or modify it ++ under the terms of either: ++ ++ * the GNU Lesser General Public License as published ++ by the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ or ++ ++ * the GNU General Public License as published by the Free ++ Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ or both in parallel, as here. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef _UNINORM_H ++#define _UNINORM_H ++ ++/* Get size_t. */ ++#include <stddef.h> ++ ++#include "unitypes.h" ++ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/* Conventions: ++ ++ All functions prefixed with u8_ operate on UTF-8 encoded strings. ++ Their unit is an uint8_t (1 byte). ++ ++ All functions prefixed with u16_ operate on UTF-16 encoded strings. ++ Their unit is an uint16_t (a 2-byte word). ++ ++ All functions prefixed with u32_ operate on UCS-4 encoded strings. ++ Their unit is an uint32_t (a 4-byte word). ++ ++ All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly ++ n units. ++ ++ Functions returning a string result take a (resultbuf, lengthp) argument ++ pair. If resultbuf is not NULL and the result fits into *lengthp units, ++ it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly ++ allocated string is returned. In both cases, *lengthp is set to the ++ length (number of units) of the returned string. In case of error, ++ NULL is returned and errno is set. */ ++ ++ ++enum ++{ ++ UC_DECOMP_CANONICAL,/* Canonical decomposition. */ ++ UC_DECOMP_FONT, /* <font> A font variant (e.g. a blackletter form). */ ++ UC_DECOMP_NOBREAK, /* <noBreak> A no-break version of a space or hyphen. */ ++ UC_DECOMP_INITIAL, /* <initial> An initial presentation form (Arabic). */ ++ UC_DECOMP_MEDIAL, /* <medial> A medial presentation form (Arabic). */ ++ UC_DECOMP_FINAL, /* <final> A final presentation form (Arabic). */ ++ UC_DECOMP_ISOLATED,/* <isolated> An isolated presentation form (Arabic). */ ++ UC_DECOMP_CIRCLE, /* <circle> An encircled form. */ ++ UC_DECOMP_SUPER, /* <super> A superscript form. */ ++ UC_DECOMP_SUB, /* <sub> A subscript form. */ ++ UC_DECOMP_VERTICAL,/* <vertical> A vertical layout presentation form. */ ++ UC_DECOMP_WIDE, /* <wide> A wide (or zenkaku) compatibility character. */ ++ UC_DECOMP_NARROW, /* <narrow> A narrow (or hankaku) compatibility character. */ ++ UC_DECOMP_SMALL, /* <small> A small variant form (CNS compatibility). */ ++ UC_DECOMP_SQUARE, /* <square> A CJK squared font variant. */ ++ UC_DECOMP_FRACTION,/* <fraction> A vulgar fraction form. */ ++ UC_DECOMP_COMPAT /* <compat> Otherwise unspecified compatibility character. */ ++}; ++ ++/* Maximum size of decomposition of a single Unicode character. */ ++#define UC_DECOMPOSITION_MAX_LENGTH 32 ++ ++/* Return the character decomposition mapping of a Unicode character. ++ DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH ++ ucs_t elements. ++ When a decomposition exists, DECOMPOSITION[0..N-1] and *DECOMP_TAG are ++ filled and N is returned. Otherwise -1 is returned. */ ++extern int ++ uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition); ++ ++/* Return the canonical character decomposition mapping of a Unicode character. ++ DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH ++ ucs_t elements. ++ When a decomposition exists, DECOMPOSITION[0..N-1] is filled and N is ++ returned. Otherwise -1 is returned. */ ++extern int ++ uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition); ++ ++ ++/* Attempt to combine the Unicode characters uc1, uc2. ++ uc1 is known to have canonical combining class 0. ++ Return the combination of uc1 and uc2, if it exists. ++ Return 0 otherwise. ++ Not all decompositions can be recombined using this function. See the ++ Unicode file CompositionExclusions.txt for details. */ ++extern ucs4_t ++ uc_composition (ucs4_t uc1, ucs4_t uc2) ++ _UC_ATTRIBUTE_CONST; ++ ++ ++/* An object of type uninorm_t denotes a Unicode normalization form. */ ++struct unicode_normalization_form; ++typedef const struct unicode_normalization_form *uninorm_t; ++ ++/* UNINORM_NFD: Normalization form D: canonical decomposition. */ ++extern const struct unicode_normalization_form uninorm_nfd; ++#define UNINORM_NFD (&uninorm_nfd) ++ ++/* UNINORM_NFC: Normalization form C: canonical decomposition, then ++ canonical composition. */ ++extern const struct unicode_normalization_form uninorm_nfc; ++#define UNINORM_NFC (&uninorm_nfc) ++ ++/* UNINORM_NFKD: Normalization form KD: compatibility decomposition. */ ++extern const struct unicode_normalization_form uninorm_nfkd; ++#define UNINORM_NFKD (&uninorm_nfkd) ++ ++/* UNINORM_NFKC: Normalization form KC: compatibility decomposition, then ++ canonical composition. */ ++extern const struct unicode_normalization_form uninorm_nfkc; ++#define UNINORM_NFKC (&uninorm_nfkc) ++ ++/* Test whether a normalization form does compatibility decomposition. */ ++#define uninorm_is_compat_decomposing(nf) \ ++ ((* (const unsigned int *) (nf) >> 0) & 1) ++ ++/* Test whether a normalization form includes canonical composition. */ ++#define uninorm_is_composing(nf) \ ++ ((* (const unsigned int *) (nf) >> 1) & 1) ++ ++/* Return the decomposing variant of a normalization form. ++ This maps NFC,NFD -> NFD and NFKC,NFKD -> NFKD. */ ++extern uninorm_t ++ uninorm_decomposing_form (uninorm_t nf) ++ _UC_ATTRIBUTE_PURE; ++ ++ ++/* Return the specified normalization form of a string. */ ++extern uint8_t * ++ u8_normalize (uninorm_t nf, const uint8_t *s, size_t n, ++ uint8_t *resultbuf, size_t *lengthp); ++extern uint16_t * ++ u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, ++ uint16_t *resultbuf, size_t *lengthp); ++extern uint32_t * ++ u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, ++ uint32_t *resultbuf, size_t *lengthp); ++ ++ ++/* Compare S1 and S2, ignoring differences in normalization. ++ NF must be either UNINORM_NFD or UNINORM_NFKD. ++ If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and ++ return 0. Upon failure, return -1 with errno set. */ ++extern int ++ u8_normcmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, ++ uninorm_t nf, int *resultp); ++extern int ++ u16_normcmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, ++ uninorm_t nf, int *resultp); ++extern int ++ u32_normcmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, ++ uninorm_t nf, int *resultp); ++ ++ ++/* Converts the string S of length N to a NUL-terminated byte sequence, in such ++ a way that comparing uN_normxfrm (S1) and uN_normxfrm (S2) with uN_cmp2() is ++ equivalent to comparing S1 and S2 with uN_normcoll(). ++ NF must be either UNINORM_NFC or UNINORM_NFKC. */ ++extern char * ++ u8_normxfrm (const uint8_t *s, size_t n, uninorm_t nf, ++ char *resultbuf, size_t *lengthp); ++extern char * ++ u16_normxfrm (const uint16_t *s, size_t n, uninorm_t nf, ++ char *resultbuf, size_t *lengthp); ++extern char * ++ u32_normxfrm (const uint32_t *s, size_t n, uninorm_t nf, ++ char *resultbuf, size_t *lengthp); ++ ++ ++/* Compare S1 and S2, ignoring differences in normalization, using the ++ collation rules of the current locale. ++ NF must be either UNINORM_NFC or UNINORM_NFKC. ++ If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and ++ return 0. Upon failure, return -1 with errno set. */ ++extern int ++ u8_normcoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, ++ uninorm_t nf, int *resultp); ++extern int ++ u16_normcoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, ++ uninorm_t nf, int *resultp); ++extern int ++ u32_normcoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, ++ uninorm_t nf, int *resultp); ++ ++ ++/* Normalization of a stream of Unicode characters. ++ ++ A "stream of Unicode characters" is essentially a function that accepts an ++ ucs4_t argument repeatedly, optionally combined with a function that ++ "flushes" the stream. */ ++ ++/* Data type of a stream of Unicode characters that normalizes its input ++ according to a given normalization form and passes the normalized character ++ sequence to the encapsulated stream of Unicode characters. */ ++struct uninorm_filter; ++ ++/* Create and return a normalization filter for Unicode characters. ++ The pair (stream_func, stream_data) is the encapsulated stream. ++ stream_func (stream_data, uc) receives the Unicode character uc ++ and returns 0 if successful, or -1 with errno set upon failure. ++ Return the new filter, or NULL with errno set upon failure. */ ++extern struct uninorm_filter * ++ uninorm_filter_create (uninorm_t nf, ++ int (*stream_func) (void *stream_data, ucs4_t uc), ++ void *stream_data); ++ ++/* Stuff a Unicode character into a normalizing filter. ++ Return 0 if successful, or -1 with errno set upon failure. */ ++extern int ++ uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc); ++ ++/* Bring data buffered in the filter to its destination, the encapsulated ++ stream. ++ Return 0 if successful, or -1 with errno set upon failure. ++ Note! If after calling this function, additional characters are written ++ into the filter, the resulting character sequence in the encapsulated stream ++ will not necessarily be normalized. */ ++extern int ++ uninorm_filter_flush (struct uninorm_filter *filter); ++ ++/* Bring data buffered in the filter to its destination, the encapsulated ++ stream, then close and free the filter. ++ Return 0 if successful, or -1 with errno set upon failure. */ ++extern int ++ uninorm_filter_free (struct uninorm_filter *filter); ++ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++ ++#endif /* _UNINORM_H */ +diff --git a/SMP/lib/unistring/unistr.h b/SMP/lib/unistring/unistr.h +new file mode 100644 +index 0000000..4619fa8 +--- /dev/null ++++ b/SMP/lib/unistring/unistr.h +@@ -0,0 +1,756 @@ ++/* Elementary Unicode string functions. ++ Copyright (C) 2001-2002, 2005-2016 Free Software Foundation, Inc. ++ ++ This program is free software: you can redistribute it and/or modify it ++ under the terms of either: ++ ++ * the GNU Lesser General Public License as published ++ by the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ or ++ ++ * the GNU General Public License as published by the Free ++ Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ or both in parallel, as here. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef _UNISTR_H ++#define _UNISTR_H ++ ++#include "unitypes.h" ++ ++/* Get common macros for C. */ ++#include "unused-parameter.h" ++ ++/* Get bool. */ ++#include <stdbool.h> ++ ++/* Get size_t. */ ++#include <stddef.h> ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/* Conventions: ++ ++ All functions prefixed with u8_ operate on UTF-8 encoded strings. ++ Their unit is an uint8_t (1 byte). ++ ++ All functions prefixed with u16_ operate on UTF-16 encoded strings. ++ Their unit is an uint16_t (a 2-byte word). ++ ++ All functions prefixed with u32_ operate on UCS-4 encoded strings. ++ Their unit is an uint32_t (a 4-byte word). ++ ++ All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly ++ n units. ++ ++ All arguments starting with "str" and the arguments of functions starting ++ with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string ++ which terminates at the first NUL unit. This termination unit is ++ considered part of the string for all memory allocation purposes, but ++ is not considered part of the string for all other logical purposes. ++ ++ Functions returning a string result take a (resultbuf, lengthp) argument ++ pair. If resultbuf is not NULL and the result fits into *lengthp units, ++ it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly ++ allocated string is returned. In both cases, *lengthp is set to the ++ length (number of units) of the returned string. In case of error, ++ NULL is returned and errno is set. */ ++ ++ ++/* Elementary string checks. */ ++ ++/* Check whether an UTF-8 string is well-formed. ++ Return NULL if valid, or a pointer to the first invalid unit otherwise. */ ++extern const uint8_t * ++ u8_check (const uint8_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Check whether an UTF-16 string is well-formed. ++ Return NULL if valid, or a pointer to the first invalid unit otherwise. */ ++extern const uint16_t * ++ u16_check (const uint16_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Check whether an UCS-4 string is well-formed. ++ Return NULL if valid, or a pointer to the first invalid unit otherwise. */ ++extern const uint32_t * ++ u32_check (const uint32_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++ ++/* Elementary string conversions. */ ++ ++/* Convert an UTF-8 string to an UTF-16 string. */ ++extern uint16_t * ++ u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf, ++ size_t *lengthp); ++ ++/* Convert an UTF-8 string to an UCS-4 string. */ ++extern uint32_t * ++ u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf, ++ size_t *lengthp); ++ ++/* Convert an UTF-16 string to an UTF-8 string. */ ++extern uint8_t * ++ u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf, ++ size_t *lengthp); ++ ++/* Convert an UTF-16 string to an UCS-4 string. */ ++extern uint32_t * ++ u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf, ++ size_t *lengthp); ++ ++/* Convert an UCS-4 string to an UTF-8 string. */ ++extern uint8_t * ++ u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf, ++ size_t *lengthp); ++ ++/* Convert an UCS-4 string to an UTF-16 string. */ ++extern uint16_t * ++ u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf, ++ size_t *lengthp); ++ ++ ++/* Elementary string functions. */ ++ ++/* Return the length (number of units) of the first character in S, which is ++ no longer than N. Return 0 if it is the NUL character. Return -1 upon ++ failure. */ ++/* Similar to mblen(), except that s must not be NULL. */ ++extern int ++ u8_mblen (const uint8_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u16_mblen (const uint16_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u32_mblen (const uint32_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the length (number of units) of the first character in S, putting ++ its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, ++ and an appropriate number of units is returned. ++ The number of available units, N, must be > 0. */ ++/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0, ++ and the NUL character is not treated specially. */ ++/* The variants with _safe suffix are safe, even if the library is compiled ++ without --enable-safety. */ ++ ++#if GNULIB_UNISTR_U8_MBTOUC_UNSAFE || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n); ++# else ++extern int ++ u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n); ++static inline int ++u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) ++{ ++ uint8_t c = *s; ++ ++ if (c < 0x80) ++ { ++ *puc = c; ++ return 1; ++ } ++ else ++ return u8_mbtouc_unsafe_aux (puc, s, n); ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U16_MBTOUC_UNSAFE || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n); ++# else ++extern int ++ u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n); ++static inline int ++u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) ++{ ++ uint16_t c = *s; ++ ++ if (c < 0xd800 || c >= 0xe000) ++ { ++ *puc = c; ++ return 1; ++ } ++ else ++ return u16_mbtouc_unsafe_aux (puc, s, n); ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U32_MBTOUC_UNSAFE || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n); ++# else ++static inline int ++u32_mbtouc_unsafe (ucs4_t *puc, ++ const uint32_t *s, size_t n _GL_UNUSED_PARAMETER) ++{ ++ uint32_t c = *s; ++ ++ if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) ++ *puc = c; ++ else ++ /* invalid multibyte character */ ++ *puc = 0xfffd; ++ return 1; ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U8_MBTOUC || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n); ++# else ++extern int ++ u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n); ++static inline int ++u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) ++{ ++ uint8_t c = *s; ++ ++ if (c < 0x80) ++ { ++ *puc = c; ++ return 1; ++ } ++ else ++ return u8_mbtouc_aux (puc, s, n); ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U16_MBTOUC || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n); ++# else ++extern int ++ u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n); ++static inline int ++u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) ++{ ++ uint16_t c = *s; ++ ++ if (c < 0xd800 || c >= 0xe000) ++ { ++ *puc = c; ++ return 1; ++ } ++ else ++ return u16_mbtouc_aux (puc, s, n); ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U32_MBTOUC || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n); ++# else ++static inline int ++u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n _GL_UNUSED_PARAMETER) ++{ ++ uint32_t c = *s; ++ ++ if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) ++ *puc = c; ++ else ++ /* invalid multibyte character */ ++ *puc = 0xfffd; ++ return 1; ++} ++# endif ++#endif ++ ++/* Return the length (number of units) of the first character in S, putting ++ its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, ++ and -1 is returned for an invalid sequence of units, -2 is returned for an ++ incomplete sequence of units. ++ The number of available units, N, must be > 0. */ ++/* Similar to u*_mbtouc(), except that the return value gives more details ++ about the failure, similar to mbrtowc(). */ ++ ++#if GNULIB_UNISTR_U8_MBTOUCR || HAVE_LIBUNISTRING ++extern int ++ u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n); ++#endif ++ ++#if GNULIB_UNISTR_U16_MBTOUCR || HAVE_LIBUNISTRING ++extern int ++ u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n); ++#endif ++ ++#if GNULIB_UNISTR_U32_MBTOUCR || HAVE_LIBUNISTRING ++extern int ++ u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n); ++#endif ++ ++/* Put the multibyte character represented by UC in S, returning its ++ length. Return -1 upon failure, -2 if the number of available units, N, ++ is too small. The latter case cannot occur if N >= 6/2/1, respectively. */ ++/* Similar to wctomb(), except that s must not be NULL, and the argument n ++ must be specified. */ ++ ++#if GNULIB_UNISTR_U8_UCTOMB || HAVE_LIBUNISTRING ++/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */ ++extern int ++ u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n); ++# if !HAVE_INLINE ++extern int ++ u8_uctomb (uint8_t *s, ucs4_t uc, int n); ++# else ++static inline int ++u8_uctomb (uint8_t *s, ucs4_t uc, int n) ++{ ++ if (uc < 0x80 && n > 0) ++ { ++ s[0] = uc; ++ return 1; ++ } ++ else ++ return u8_uctomb_aux (s, uc, n); ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U16_UCTOMB || HAVE_LIBUNISTRING ++/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */ ++extern int ++ u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n); ++# if !HAVE_INLINE ++extern int ++ u16_uctomb (uint16_t *s, ucs4_t uc, int n); ++# else ++static inline int ++u16_uctomb (uint16_t *s, ucs4_t uc, int n) ++{ ++ if (uc < 0xd800 && n > 0) ++ { ++ s[0] = uc; ++ return 1; ++ } ++ else ++ return u16_uctomb_aux (s, uc, n); ++} ++# endif ++#endif ++ ++#if GNULIB_UNISTR_U32_UCTOMB || HAVE_LIBUNISTRING ++# if !HAVE_INLINE ++extern int ++ u32_uctomb (uint32_t *s, ucs4_t uc, int n); ++# else ++static inline int ++u32_uctomb (uint32_t *s, ucs4_t uc, int n) ++{ ++ if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) ++ { ++ if (n > 0) ++ { ++ *s = uc; ++ return 1; ++ } ++ else ++ return -2; ++ } ++ else ++ return -1; ++} ++# endif ++#endif ++ ++/* Copy N units from SRC to DEST. */ ++/* Similar to memcpy(). */ ++extern uint8_t * ++ u8_cpy (uint8_t *dest, const uint8_t *src, size_t n); ++extern uint16_t * ++ u16_cpy (uint16_t *dest, const uint16_t *src, size_t n); ++extern uint32_t * ++ u32_cpy (uint32_t *dest, const uint32_t *src, size_t n); ++ ++/* Copy N units from SRC to DEST, guaranteeing correct behavior for ++ overlapping memory areas. */ ++/* Similar to memmove(). */ ++extern uint8_t * ++ u8_move (uint8_t *dest, const uint8_t *src, size_t n); ++extern uint16_t * ++ u16_move (uint16_t *dest, const uint16_t *src, size_t n); ++extern uint32_t * ++ u32_move (uint32_t *dest, const uint32_t *src, size_t n); ++ ++/* Set the first N characters of S to UC. UC should be a character that ++ occupies only 1 unit. */ ++/* Similar to memset(). */ ++extern uint8_t * ++ u8_set (uint8_t *s, ucs4_t uc, size_t n); ++extern uint16_t * ++ u16_set (uint16_t *s, ucs4_t uc, size_t n); ++extern uint32_t * ++ u32_set (uint32_t *s, ucs4_t uc, size_t n); ++ ++/* Compare S1 and S2, each of length N. */ ++/* Similar to memcmp(). */ ++extern int ++ u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Compare S1 and S2. */ ++/* Similar to the gnulib function memcmp2(). */ ++extern int ++ u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Search the string at S for UC. */ ++/* Similar to memchr(). */ ++extern uint8_t * ++ u8_chr (const uint8_t *s, size_t n, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++extern uint16_t * ++ u16_chr (const uint16_t *s, size_t n, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++extern uint32_t * ++ u32_chr (const uint32_t *s, size_t n, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Count the number of Unicode characters in the N units from S. */ ++/* Similar to mbsnlen(). */ ++extern size_t ++ u8_mbsnlen (const uint8_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u16_mbsnlen (const uint16_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u32_mbsnlen (const uint32_t *s, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Elementary string functions with memory allocation. */ ++ ++/* Make a freshly allocated copy of S, of length N. */ ++extern uint8_t * ++ u8_cpy_alloc (const uint8_t *s, size_t n); ++extern uint16_t * ++ u16_cpy_alloc (const uint16_t *s, size_t n); ++extern uint32_t * ++ u32_cpy_alloc (const uint32_t *s, size_t n); ++ ++/* Elementary string functions on NUL terminated strings. */ ++ ++/* Return the length (number of units) of the first character in S. ++ Return 0 if it is the NUL character. Return -1 upon failure. */ ++extern int ++ u8_strmblen (const uint8_t *s) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u16_strmblen (const uint16_t *s) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u32_strmblen (const uint32_t *s) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the length (number of units) of the first character in S, putting ++ its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL ++ character. Return -1 upon failure. */ ++extern int ++ u8_strmbtouc (ucs4_t *puc, const uint8_t *s); ++extern int ++ u16_strmbtouc (ucs4_t *puc, const uint16_t *s); ++extern int ++ u32_strmbtouc (ucs4_t *puc, const uint32_t *s); ++ ++/* Forward iteration step. Advances the pointer past the next character, ++ or returns NULL if the end of the string has been reached. Puts the ++ character's 'ucs4_t' representation in *PUC. */ ++extern const uint8_t * ++ u8_next (ucs4_t *puc, const uint8_t *s); ++extern const uint16_t * ++ u16_next (ucs4_t *puc, const uint16_t *s); ++extern const uint32_t * ++ u32_next (ucs4_t *puc, const uint32_t *s); ++ ++/* Backward iteration step. Advances the pointer to point to the previous ++ character, or returns NULL if the beginning of the string had been reached. ++ Puts the character's 'ucs4_t' representation in *PUC. */ ++extern const uint8_t * ++ u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start); ++extern const uint16_t * ++ u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start); ++extern const uint32_t * ++ u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start); ++ ++/* Return the number of units in S. */ ++/* Similar to strlen(), wcslen(). */ ++extern size_t ++ u8_strlen (const uint8_t *s) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u16_strlen (const uint16_t *s) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u32_strlen (const uint32_t *s) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the number of units in S, but at most MAXLEN. */ ++/* Similar to strnlen(), wcsnlen(). */ ++extern size_t ++ u8_strnlen (const uint8_t *s, size_t maxlen) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u16_strnlen (const uint16_t *s, size_t maxlen) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u32_strnlen (const uint32_t *s, size_t maxlen) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Copy SRC to DEST. */ ++/* Similar to strcpy(), wcscpy(). */ ++extern uint8_t * ++ u8_strcpy (uint8_t *dest, const uint8_t *src); ++extern uint16_t * ++ u16_strcpy (uint16_t *dest, const uint16_t *src); ++extern uint32_t * ++ u32_strcpy (uint32_t *dest, const uint32_t *src); ++ ++/* Copy SRC to DEST, returning the address of the terminating NUL in DEST. */ ++/* Similar to stpcpy(). */ ++extern uint8_t * ++ u8_stpcpy (uint8_t *dest, const uint8_t *src); ++extern uint16_t * ++ u16_stpcpy (uint16_t *dest, const uint16_t *src); ++extern uint32_t * ++ u32_stpcpy (uint32_t *dest, const uint32_t *src); ++ ++/* Copy no more than N units of SRC to DEST. */ ++/* Similar to strncpy(), wcsncpy(). */ ++extern uint8_t * ++ u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n); ++extern uint16_t * ++ u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n); ++extern uint32_t * ++ u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n); ++ ++/* Copy no more than N units of SRC to DEST. Return a pointer past the last ++ non-NUL unit written into DEST. */ ++/* Similar to stpncpy(). */ ++extern uint8_t * ++ u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n); ++extern uint16_t * ++ u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n); ++extern uint32_t * ++ u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n); ++ ++/* Append SRC onto DEST. */ ++/* Similar to strcat(), wcscat(). */ ++extern uint8_t * ++ u8_strcat (uint8_t *dest, const uint8_t *src); ++extern uint16_t * ++ u16_strcat (uint16_t *dest, const uint16_t *src); ++extern uint32_t * ++ u32_strcat (uint32_t *dest, const uint32_t *src); ++ ++/* Append no more than N units of SRC onto DEST. */ ++/* Similar to strncat(), wcsncat(). */ ++extern uint8_t * ++ u8_strncat (uint8_t *dest, const uint8_t *src, size_t n); ++extern uint16_t * ++ u16_strncat (uint16_t *dest, const uint16_t *src, size_t n); ++extern uint32_t * ++ u32_strncat (uint32_t *dest, const uint32_t *src, size_t n); ++ ++/* Compare S1 and S2. */ ++/* Similar to strcmp(), wcscmp(). */ ++#ifdef __sun ++/* Avoid a collision with the u8_strcmp() function in Solaris 11 libc. */ ++extern int ++ u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2) ++ _UC_ATTRIBUTE_PURE; ++# define u8_strcmp u8_strcmp_gnu ++#else ++extern int ++ u8_strcmp (const uint8_t *s1, const uint8_t *s2) ++ _UC_ATTRIBUTE_PURE; ++#endif ++extern int ++ u16_strcmp (const uint16_t *s1, const uint16_t *s2) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u32_strcmp (const uint32_t *s1, const uint32_t *s2) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Compare S1 and S2 using the collation rules of the current locale. ++ Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2. ++ Upon failure, set errno and return any value. */ ++/* Similar to strcoll(), wcscoll(). */ ++extern int ++ u8_strcoll (const uint8_t *s1, const uint8_t *s2); ++extern int ++ u16_strcoll (const uint16_t *s1, const uint16_t *s2); ++extern int ++ u32_strcoll (const uint32_t *s1, const uint32_t *s2); ++ ++/* Compare no more than N units of S1 and S2. */ ++/* Similar to strncmp(), wcsncmp(). */ ++extern int ++ u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) ++ _UC_ATTRIBUTE_PURE; ++extern int ++ u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Duplicate S, returning an identical malloc'd string. */ ++/* Similar to strdup(), wcsdup(). */ ++extern uint8_t * ++ u8_strdup (const uint8_t *s); ++extern uint16_t * ++ u16_strdup (const uint16_t *s); ++extern uint32_t * ++ u32_strdup (const uint32_t *s); ++ ++/* Find the first occurrence of UC in STR. */ ++/* Similar to strchr(), wcschr(). */ ++extern uint8_t * ++ u8_strchr (const uint8_t *str, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++extern uint16_t * ++ u16_strchr (const uint16_t *str, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++extern uint32_t * ++ u32_strchr (const uint32_t *str, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Find the last occurrence of UC in STR. */ ++/* Similar to strrchr(), wcsrchr(). */ ++extern uint8_t * ++ u8_strrchr (const uint8_t *str, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++extern uint16_t * ++ u16_strrchr (const uint16_t *str, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++extern uint32_t * ++ u32_strrchr (const uint32_t *str, ucs4_t uc) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the length of the initial segment of STR which consists entirely ++ of Unicode characters not in REJECT. */ ++/* Similar to strcspn(), wcscspn(). */ ++extern size_t ++ u8_strcspn (const uint8_t *str, const uint8_t *reject) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u16_strcspn (const uint16_t *str, const uint16_t *reject) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u32_strcspn (const uint32_t *str, const uint32_t *reject) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Return the length of the initial segment of STR which consists entirely ++ of Unicode characters in ACCEPT. */ ++/* Similar to strspn(), wcsspn(). */ ++extern size_t ++ u8_strspn (const uint8_t *str, const uint8_t *accept) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u16_strspn (const uint16_t *str, const uint16_t *accept) ++ _UC_ATTRIBUTE_PURE; ++extern size_t ++ u32_strspn (const uint32_t *str, const uint32_t *accept) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Find the first occurrence in STR of any character in ACCEPT. */ ++/* Similar to strpbrk(), wcspbrk(). */ ++extern uint8_t * ++ u8_strpbrk (const uint8_t *str, const uint8_t *accept) ++ _UC_ATTRIBUTE_PURE; ++extern uint16_t * ++ u16_strpbrk (const uint16_t *str, const uint16_t *accept) ++ _UC_ATTRIBUTE_PURE; ++extern uint32_t * ++ u32_strpbrk (const uint32_t *str, const uint32_t *accept) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Find the first occurrence of NEEDLE in HAYSTACK. */ ++/* Similar to strstr(), wcsstr(). */ ++extern uint8_t * ++ u8_strstr (const uint8_t *haystack, const uint8_t *needle) ++ _UC_ATTRIBUTE_PURE; ++extern uint16_t * ++ u16_strstr (const uint16_t *haystack, const uint16_t *needle) ++ _UC_ATTRIBUTE_PURE; ++extern uint32_t * ++ u32_strstr (const uint32_t *haystack, const uint32_t *needle) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Test whether STR starts with PREFIX. */ ++extern bool ++ u8_startswith (const uint8_t *str, const uint8_t *prefix) ++ _UC_ATTRIBUTE_PURE; ++extern bool ++ u16_startswith (const uint16_t *str, const uint16_t *prefix) ++ _UC_ATTRIBUTE_PURE; ++extern bool ++ u32_startswith (const uint32_t *str, const uint32_t *prefix) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Test whether STR ends with SUFFIX. */ ++extern bool ++ u8_endswith (const uint8_t *str, const uint8_t *suffix) ++ _UC_ATTRIBUTE_PURE; ++extern bool ++ u16_endswith (const uint16_t *str, const uint16_t *suffix) ++ _UC_ATTRIBUTE_PURE; ++extern bool ++ u32_endswith (const uint32_t *str, const uint32_t *suffix) ++ _UC_ATTRIBUTE_PURE; ++ ++/* Divide STR into tokens separated by characters in DELIM. ++ This interface is actually more similar to wcstok than to strtok. */ ++/* Similar to strtok_r(), wcstok(). */ ++extern uint8_t * ++ u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr); ++extern uint16_t * ++ u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr); ++extern uint32_t * ++ u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr); ++ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* _UNISTR_H */ +diff --git a/SMP/lib/unistring/unitypes.h b/SMP/lib/unistring/unitypes.h +new file mode 100644 +index 0000000..7380d5c +--- /dev/null ++++ b/SMP/lib/unistring/unitypes.h +@@ -0,0 +1,56 @@ ++/* Elementary types and macros for the GNU UniString library. ++ Copyright (C) 2002, 2005-2006, 2009-2016 Free Software Foundation, Inc. ++ ++ This program is free software: you can redistribute it and/or modify it ++ under the terms of either: ++ ++ * the GNU Lesser General Public License as published ++ by the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ or ++ ++ * the GNU General Public License as published by the Free ++ Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ or both in parallel, as here. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef _UNITYPES_H ++#define _UNITYPES_H ++ ++/* Get uint8_t, uint16_t, uint32_t. */ ++#include <stdint.h> ++ ++/* Type representing a Unicode character. */ ++typedef uint32_t ucs4_t; ++ ++/* Attribute of a function whose result depends only on the arguments ++ (not pointers!) and which has no side effects. */ ++#ifndef _UC_ATTRIBUTE_CONST ++# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) ++# define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) ++# else ++# define _UC_ATTRIBUTE_CONST ++# endif ++#endif ++ ++/* Attribute of a function whose result depends only on the arguments ++ (possibly pointers) and global memory, and which has no side effects. */ ++#ifndef _UC_ATTRIBUTE_PURE ++# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) ++# define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) ++# else ++# define _UC_ATTRIBUTE_PURE ++# endif ++#endif ++ ++#endif /* _UNITYPES_H */ +diff --git a/SMP/lib/unused-parameter.h b/SMP/lib/unused-parameter.h +new file mode 100644 +index 0000000..843db76 +--- /dev/null ++++ b/SMP/lib/unused-parameter.h +@@ -0,0 +1,36 @@ ++/* A C macro for declaring that specific function parameters are not used. ++ Copyright (C) 2008-2016 Free Software Foundation, Inc. ++ ++ This program is free software: you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published ++ by the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see <http://www.gnu.org/licenses/>. */ ++ ++/* _GL_UNUSED_PARAMETER is a marker that can be appended to function parameter ++ declarations for parameters that are not used. This helps to reduce ++ warnings, such as from GCC -Wunused-parameter. The syntax is as follows: ++ type param _GL_UNUSED_PARAMETER ++ or more generally ++ param_decl _GL_UNUSED_PARAMETER ++ For example: ++ int param _GL_UNUSED_PARAMETER ++ int *(*param)(void) _GL_UNUSED_PARAMETER ++ Other possible, but obscure and discouraged syntaxes: ++ int _GL_UNUSED_PARAMETER *(*param)(void) ++ _GL_UNUSED_PARAMETER int *(*param)(void) ++ */ ++#ifndef _GL_UNUSED_PARAMETER ++# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) ++# define _GL_UNUSED_PARAMETER __attribute__ ((__unused__)) ++# else ++# define _GL_UNUSED_PARAMETER ++# endif ++#endif +diff --git a/SMP/libgnutls.def b/SMP/libgnutls.def +new file mode 100644 +index 0000000..179940e +--- /dev/null ++++ b/SMP/libgnutls.def +@@ -0,0 +1,1056 @@ ++EXPORTS ++ gnutls_alert_get ++ gnutls_alert_get_name ++ gnutls_alert_send ++ gnutls_alert_send_appropriate ++ gnutls_anon_allocate_client_credentials ++ gnutls_anon_allocate_server_credentials ++ gnutls_anon_free_client_credentials ++ gnutls_anon_free_server_credentials ++ gnutls_anon_set_params_function ++ gnutls_anon_set_server_dh_params ++ gnutls_anon_set_server_params_function ++ gnutls_auth_client_get_type ++ gnutls_auth_get_type ++ gnutls_auth_server_get_type ++ gnutls_bye ++ gnutls_calloc ++ gnutls_certificate_activation_time_peers ++ gnutls_certificate_allocate_credentials ++ gnutls_certificate_client_get_request_status ++ gnutls_certificate_expiration_time_peers ++ gnutls_certificate_free_ca_names ++ gnutls_certificate_free_cas ++ gnutls_certificate_free_credentials ++ gnutls_certificate_free_crls ++ gnutls_certificate_free_keys ++ gnutls_certificate_get_ours ++ gnutls_certificate_get_peers ++ gnutls_certificate_send_x509_rdn_sequence ++ gnutls_certificate_server_set_request ++ gnutls_certificate_set_dh_params ++ gnutls_certificate_set_openpgp_key ++ gnutls_certificate_set_openpgp_key_file2 ++ gnutls_certificate_set_openpgp_key_file ++ gnutls_certificate_set_openpgp_key_mem2 ++ gnutls_certificate_set_openpgp_key_mem ++ gnutls_certificate_set_openpgp_keyring_file ++ gnutls_certificate_set_openpgp_keyring_mem ++ gnutls_certificate_set_params_function ++ gnutls_certificate_set_verify_flags ++ gnutls_certificate_set_verify_limits ++ gnutls_certificate_set_x509_crl ++ gnutls_certificate_set_x509_crl_file ++ gnutls_certificate_set_x509_crl_mem ++ gnutls_certificate_set_x509_key ++ gnutls_certificate_set_x509_key_file ++ gnutls_certificate_set_x509_key_mem ++ gnutls_certificate_set_x509_simple_pkcs12_file ++ gnutls_certificate_set_x509_trust ++ gnutls_certificate_set_x509_trust_file ++ gnutls_certificate_set_x509_trust_mem ++ gnutls_certificate_type_get ++ gnutls_certificate_type_get_id ++ gnutls_certificate_type_get_name ++ gnutls_certificate_type_list ++ gnutls_certificate_verify_peers2 ++ gnutls_check_version ++ gnutls_cipher_get ++ gnutls_cipher_get_id ++ gnutls_cipher_get_key_size ++ gnutls_cipher_get_name ++ gnutls_cipher_list ++ gnutls_cipher_suite_get_name ++ gnutls_cipher_suite_info ++ gnutls_compression_get ++ gnutls_compression_get_id ++ gnutls_compression_get_name ++ gnutls_compression_list ++ gnutls_credentials_clear ++ gnutls_credentials_set ++ gnutls_db_check_entry ++ gnutls_db_get_ptr ++ gnutls_db_remove_session ++ gnutls_db_set_cache_expiration ++ gnutls_db_set_ptr ++ gnutls_db_set_remove_function ++ gnutls_db_set_retrieve_function ++ gnutls_db_set_store_function ++ gnutls_deinit ++ gnutls_dh_get_group ++ gnutls_dh_get_peers_public_bits ++ gnutls_dh_get_prime_bits ++ gnutls_dh_get_pubkey ++ gnutls_dh_get_secret_bits ++ gnutls_dh_params_cpy ++ gnutls_dh_params_deinit ++ gnutls_dh_params_export_pkcs3 ++ gnutls_dh_params_export_raw ++ gnutls_dh_params_generate2 ++ gnutls_dh_params_import_pkcs3 ++ gnutls_dh_params_import_raw ++ gnutls_dh_params_init ++ gnutls_dh_set_prime_bits ++ gnutls_error_is_fatal ++ gnutls_error_to_alert ++ gnutls_fingerprint ++ gnutls_free ++ gnutls_global_deinit ++ gnutls_global_init ++ gnutls_global_set_log_function ++ gnutls_global_set_log_level ++ gnutls_global_set_mem_functions ++ gnutls_handshake ++ gnutls_handshake_get_last_in ++ gnutls_handshake_get_last_out ++ gnutls_handshake_set_max_packet_length ++ gnutls_handshake_set_post_client_hello_function ++ gnutls_handshake_set_private_extensions ++ gnutls_hex2bin ++ gnutls_hex_decode ++ gnutls_hex_encode ++ gnutls_init ++ gnutls_kx_get ++ gnutls_kx_get_id ++ gnutls_kx_get_name ++ gnutls_kx_list ++ gnutls_mac_get ++ gnutls_mac_get_id ++ gnutls_mac_get_key_size ++ gnutls_mac_get_name ++ gnutls_mac_list ++ gnutls_malloc ++ gnutls_openpgp_crt_check_hostname ++ gnutls_openpgp_crt_deinit ++ gnutls_openpgp_crt_export ++ gnutls_openpgp_crt_get_auth_subkey ++ gnutls_openpgp_crt_get_creation_time ++ gnutls_openpgp_crt_get_expiration_time ++ gnutls_openpgp_crt_get_fingerprint ++ gnutls_openpgp_crt_get_key_id ++ gnutls_openpgp_crt_get_key_usage ++ gnutls_openpgp_crt_get_name ++ gnutls_openpgp_crt_get_pk_algorithm ++ gnutls_openpgp_crt_get_pk_dsa_raw ++ gnutls_openpgp_crt_get_pk_rsa_raw ++ gnutls_openpgp_crt_get_preferred_key_id ++ gnutls_openpgp_crt_get_revoked_status ++ gnutls_openpgp_crt_get_subkey_count ++ gnutls_openpgp_crt_get_subkey_creation_time ++ gnutls_openpgp_crt_get_subkey_expiration_time ++ gnutls_openpgp_crt_get_subkey_fingerprint ++ gnutls_openpgp_crt_get_subkey_id ++ gnutls_openpgp_crt_get_subkey_idx ++ gnutls_openpgp_crt_get_subkey_pk_algorithm ++ gnutls_openpgp_crt_get_subkey_pk_dsa_raw ++ gnutls_openpgp_crt_get_subkey_pk_rsa_raw ++ gnutls_openpgp_crt_get_subkey_revoked_status ++ gnutls_openpgp_crt_get_subkey_usage ++ gnutls_openpgp_crt_get_version ++ gnutls_openpgp_crt_import ++ gnutls_openpgp_crt_init ++ gnutls_openpgp_crt_print ++ gnutls_openpgp_crt_set_preferred_key_id ++ gnutls_openpgp_crt_verify_ring ++ gnutls_openpgp_crt_verify_self ++ gnutls_openpgp_keyring_check_id ++ gnutls_openpgp_keyring_deinit ++ gnutls_openpgp_keyring_get_crt ++ gnutls_openpgp_keyring_get_crt_count ++ gnutls_openpgp_keyring_import ++ gnutls_openpgp_keyring_init ++ gnutls_openpgp_privkey_deinit ++ gnutls_openpgp_privkey_export ++ gnutls_openpgp_privkey_export_dsa_raw ++ gnutls_openpgp_privkey_export_rsa_raw ++ gnutls_openpgp_privkey_export_subkey_dsa_raw ++ gnutls_openpgp_privkey_export_subkey_rsa_raw ++ gnutls_openpgp_privkey_get_fingerprint ++ gnutls_openpgp_privkey_get_key_id ++ gnutls_openpgp_privkey_get_pk_algorithm ++ gnutls_openpgp_privkey_get_preferred_key_id ++ gnutls_openpgp_privkey_get_revoked_status ++ gnutls_openpgp_privkey_get_subkey_count ++ gnutls_openpgp_privkey_get_subkey_creation_time ++ gnutls_openpgp_privkey_get_subkey_expiration_time ++ gnutls_openpgp_privkey_get_subkey_fingerprint ++ gnutls_openpgp_privkey_get_subkey_id ++ gnutls_openpgp_privkey_get_subkey_idx ++ gnutls_openpgp_privkey_get_subkey_pk_algorithm ++ gnutls_openpgp_privkey_get_subkey_revoked_status ++ gnutls_openpgp_privkey_import ++ gnutls_openpgp_privkey_init ++ gnutls_openpgp_privkey_set_preferred_key_id ++ gnutls_openpgp_privkey_sign_hash ++ gnutls_openpgp_send_cert ++ gnutls_openpgp_set_recv_key_function ++ gnutls_pem_base64_decode ++ gnutls_pem_base64_decode2 ++ gnutls_pem_base64_encode ++ gnutls_pem_base64_encode2 ++ gnutls_perror ++ gnutls_pk_algorithm_get_name ++ gnutls_pk_get_id ++ gnutls_pk_get_name ++ gnutls_pk_list ++ gnutls_pkcs12_bag_decrypt ++ gnutls_pkcs12_bag_deinit ++ gnutls_pkcs12_bag_encrypt ++ gnutls_pkcs12_bag_get_count ++ gnutls_pkcs12_bag_get_data ++ gnutls_pkcs12_bag_get_friendly_name ++ gnutls_pkcs12_bag_get_key_id ++ gnutls_pkcs12_bag_get_type ++ gnutls_pkcs12_bag_init ++ gnutls_pkcs12_bag_set_crl ++ gnutls_pkcs12_bag_set_crt ++ gnutls_pkcs12_bag_set_data ++ gnutls_pkcs12_bag_set_friendly_name ++ gnutls_pkcs12_bag_set_key_id ++ gnutls_pkcs12_deinit ++ gnutls_pkcs12_export ++ gnutls_pkcs12_generate_mac ++ gnutls_pkcs12_get_bag ++ gnutls_pkcs12_import ++ gnutls_pkcs12_init ++ gnutls_pkcs12_set_bag ++ gnutls_pkcs12_verify_mac ++ gnutls_pkcs7_deinit ++ gnutls_pkcs7_delete_crl ++ gnutls_pkcs7_delete_crt ++ gnutls_pkcs7_export ++ gnutls_pkcs7_get_crl_count ++ gnutls_pkcs7_get_crl_raw ++ gnutls_pkcs7_get_crt_count ++ gnutls_pkcs7_get_crt_raw ++ gnutls_pkcs7_import ++ gnutls_pkcs7_init ++ gnutls_pkcs7_set_crl ++ gnutls_pkcs7_set_crl_raw ++ gnutls_pkcs7_set_crt ++ gnutls_pkcs7_set_crt_raw ++ gnutls_prf ++ gnutls_prf_raw ++ gnutls_priority_deinit ++ gnutls_priority_init ++ gnutls_priority_set ++ gnutls_priority_set_direct ++ gnutls_protocol_get_id ++ gnutls_protocol_get_name ++ gnutls_protocol_get_version ++ gnutls_protocol_list ++ gnutls_psk_allocate_client_credentials ++ gnutls_psk_allocate_server_credentials ++ gnutls_psk_client_get_hint ++ gnutls_psk_free_client_credentials ++ gnutls_psk_free_server_credentials ++ gnutls_psk_server_get_username ++ gnutls_psk_set_client_credentials ++ gnutls_psk_set_client_credentials_function ++ gnutls_psk_set_params_function ++ gnutls_psk_set_server_credentials_file ++ gnutls_psk_set_server_credentials_function ++ gnutls_psk_set_server_credentials_hint ++ gnutls_psk_set_server_dh_params ++ gnutls_psk_set_server_params_function ++ gnutls_realloc ++ gnutls_record_check_pending ++ gnutls_record_disable_padding ++ gnutls_record_get_direction ++ gnutls_record_get_max_size ++ gnutls_record_recv ++ gnutls_record_send ++ gnutls_record_set_max_size ++ gnutls_rehandshake ++ gnutls_secure_malloc ++ gnutls_server_name_get ++ gnutls_server_name_set ++ gnutls_session_enable_compatibility_mode ++ gnutls_session_get_data2 ++ gnutls_session_get_data ++ gnutls_session_get_id ++ gnutls_session_get_ptr ++ gnutls_session_is_resumed ++ gnutls_session_set_data ++ gnutls_session_set_ptr ++ gnutls_set_default_priority ++ gnutls_sign_get_id ++ gnutls_sign_get_name ++ gnutls_sign_list ++ gnutls_srp_1024_group_generator ++ gnutls_srp_1024_group_prime ++ gnutls_srp_1536_group_generator ++ gnutls_srp_1536_group_prime ++ gnutls_srp_2048_group_generator ++ gnutls_srp_2048_group_prime ++ gnutls_srp_allocate_client_credentials ++ gnutls_srp_allocate_server_credentials ++ gnutls_srp_base64_decode ++ gnutls_srp_base64_decode2 ++ gnutls_srp_base64_encode ++ gnutls_srp_base64_encode2 ++ gnutls_srp_free_client_credentials ++ gnutls_srp_free_server_credentials ++ gnutls_srp_server_get_username ++ gnutls_srp_set_client_credentials ++ gnutls_srp_set_client_credentials_function ++ gnutls_srp_set_prime_bits ++ gnutls_srp_set_server_credentials_file ++ gnutls_srp_set_server_credentials_function ++ gnutls_srp_verifier ++ gnutls_strdup ++ gnutls_strerror ++ gnutls_strerror_name ++ gnutls_supplemental_get_name ++ gnutls_transport_get_ptr2 ++ gnutls_transport_get_ptr ++ gnutls_transport_set_errno ++ gnutls_transport_set_ptr2 ++ gnutls_transport_set_ptr ++ gnutls_transport_set_pull_function ++ gnutls_transport_set_push_function ++ gnutls_x509_crl_check_issuer ++ gnutls_x509_crl_deinit ++ gnutls_x509_crl_export ++ gnutls_x509_crl_get_crt_count ++ gnutls_x509_crl_get_crt_serial ++ gnutls_x509_crl_get_dn_oid ++ gnutls_x509_crl_get_issuer_dn ++ gnutls_x509_crl_get_issuer_dn_by_oid ++ gnutls_x509_crl_get_next_update ++ gnutls_x509_crl_get_signature ++ gnutls_x509_crl_get_signature_algorithm ++ gnutls_x509_crl_get_this_update ++ gnutls_x509_crl_get_version ++ gnutls_x509_crl_import ++ gnutls_x509_crl_init ++ gnutls_x509_crl_print ++ gnutls_x509_crl_set_crt ++ gnutls_x509_crl_set_crt_serial ++ gnutls_x509_crl_set_next_update ++ gnutls_x509_crl_set_this_update ++ gnutls_x509_crl_set_version ++ gnutls_x509_crl_sign2 ++ gnutls_x509_crl_sign ++ gnutls_x509_crl_verify ++ gnutls_x509_crq_deinit ++ gnutls_x509_crq_export ++ gnutls_x509_crq_get_attribute_by_oid ++ gnutls_x509_crq_get_challenge_password ++ gnutls_x509_crq_get_dn ++ gnutls_x509_crq_get_dn_by_oid ++ gnutls_x509_crq_get_dn_oid ++ gnutls_x509_crq_get_pk_algorithm ++ gnutls_x509_crq_get_version ++ gnutls_x509_crq_import ++ gnutls_x509_crq_init ++ gnutls_x509_crq_set_attribute_by_oid ++ gnutls_x509_crq_set_challenge_password ++ gnutls_x509_crq_set_dn_by_oid ++ gnutls_x509_crq_set_key ++ gnutls_x509_crq_set_key_rsa_raw ++ gnutls_x509_crq_set_version ++ gnutls_x509_crq_sign2 ++ gnutls_x509_crq_sign ++ gnutls_x509_crt_check_hostname ++ gnutls_x509_crt_check_issuer ++ gnutls_x509_crt_check_revocation ++ gnutls_x509_crt_cpy_crl_dist_points ++ gnutls_x509_crt_deinit ++ gnutls_x509_crt_export ++ gnutls_x509_crt_get_activation_time ++ gnutls_x509_crt_get_authority_key_id ++ gnutls_x509_crt_get_basic_constraints ++ gnutls_x509_crt_get_ca_status ++ gnutls_x509_crt_get_crl_dist_points ++ gnutls_x509_crt_get_dn ++ gnutls_x509_crt_get_dn_by_oid ++ gnutls_x509_crt_get_dn_oid ++ gnutls_x509_crt_get_expiration_time ++ gnutls_x509_crt_get_extension_by_oid ++ gnutls_x509_crt_get_extension_data ++ gnutls_x509_crt_get_extension_info ++ gnutls_x509_crt_get_extension_oid ++ gnutls_x509_crt_get_fingerprint ++ gnutls_x509_crt_get_issuer ++ gnutls_x509_crt_get_issuer_dn ++ gnutls_x509_crt_get_issuer_dn_by_oid ++ gnutls_x509_crt_get_issuer_dn_oid ++ gnutls_x509_crt_get_issuer_unique_id ++ gnutls_x509_crt_get_key_id ++ gnutls_x509_crt_get_key_purpose_oid ++ gnutls_x509_crt_get_key_usage ++ gnutls_x509_crt_get_pk_algorithm ++ gnutls_x509_crt_get_pk_dsa_raw ++ gnutls_x509_crt_get_pk_rsa_raw ++ gnutls_x509_crt_get_proxy ++ gnutls_x509_crt_get_raw_dn ++ gnutls_x509_crt_get_raw_issuer_dn ++ gnutls_x509_crt_get_serial ++ gnutls_x509_crt_get_signature ++ gnutls_x509_crt_get_signature_algorithm ++ gnutls_x509_crt_get_subject ++ gnutls_x509_crt_get_subject_alt_name2 ++ gnutls_x509_crt_get_subject_alt_name ++ gnutls_x509_crt_get_subject_alt_othername_oid ++ gnutls_x509_crt_get_subject_key_id ++ gnutls_x509_crt_get_subject_unique_id ++ gnutls_x509_crt_get_version ++ gnutls_x509_crt_import ++ gnutls_x509_crt_init ++ gnutls_x509_crt_list_import ++ gnutls_x509_crt_list_verify ++ gnutls_x509_crt_print ++ gnutls_x509_crt_set_activation_time ++ gnutls_x509_crt_set_authority_key_id ++ gnutls_x509_crt_set_basic_constraints ++ gnutls_x509_crt_set_ca_status ++ gnutls_x509_crt_set_crl_dist_points2 ++ gnutls_x509_crt_set_crl_dist_points ++ gnutls_x509_crt_set_crq ++ gnutls_x509_crt_set_dn_by_oid ++ gnutls_x509_crt_set_expiration_time ++ gnutls_x509_crt_set_extension_by_oid ++ gnutls_x509_crt_set_issuer_dn_by_oid ++ gnutls_x509_crt_set_key ++ gnutls_x509_crt_set_key_purpose_oid ++ gnutls_x509_crt_set_key_usage ++ gnutls_x509_crt_set_proxy ++ gnutls_x509_crt_set_proxy_dn ++ gnutls_x509_crt_set_serial ++ gnutls_x509_crt_set_subject_alt_name ++ gnutls_x509_crt_set_subject_alternative_name ++ gnutls_x509_crt_set_subject_key_id ++ gnutls_x509_crt_set_version ++ gnutls_x509_crt_sign2 ++ gnutls_x509_crt_sign ++ gnutls_x509_crt_verify ++ gnutls_x509_dn_deinit ++ gnutls_x509_dn_export ++ gnutls_x509_dn_get_rdn_ava ++ gnutls_x509_dn_import ++ gnutls_x509_dn_init ++ gnutls_x509_dn_oid_known ++ gnutls_x509_privkey_cpy ++ gnutls_x509_privkey_deinit ++ gnutls_x509_privkey_export ++ gnutls_x509_privkey_export_dsa_raw ++ gnutls_x509_privkey_export_pkcs8 ++ gnutls_x509_privkey_export_rsa_raw ++ gnutls_x509_privkey_fix ++ gnutls_x509_privkey_generate ++ gnutls_x509_privkey_get_key_id ++ gnutls_x509_privkey_get_pk_algorithm ++ gnutls_x509_privkey_import ++ gnutls_x509_privkey_import_dsa_raw ++ gnutls_x509_privkey_import_pkcs8 ++ gnutls_x509_privkey_import_rsa_raw ++ gnutls_x509_privkey_init ++ gnutls_x509_privkey_sign_data ++ gnutls_x509_privkey_sign_hash ++ gnutls_x509_rdn_get ++ gnutls_x509_rdn_get_by_oid ++ gnutls_x509_rdn_get_oid ++ gnutls_certificate_set_x509_simple_pkcs12_mem ++ gnutls_x509_crl_get_authority_key_id ++ gnutls_x509_crl_get_extension_data ++ gnutls_x509_crl_get_extension_info ++ gnutls_x509_crl_get_extension_oid ++ gnutls_x509_crl_get_number ++ gnutls_x509_crl_set_authority_key_id ++ gnutls_x509_crl_set_number ++ gnutls_x509_crq_get_attribute_data ++ gnutls_x509_crq_get_attribute_info ++ gnutls_x509_crq_get_basic_constraints ++ gnutls_x509_crq_get_extension_by_oid ++ gnutls_x509_crq_get_extension_data ++ gnutls_x509_crq_get_extension_info ++ gnutls_x509_crq_get_key_id ++ gnutls_x509_crq_get_key_purpose_oid ++ gnutls_x509_crq_get_key_rsa_raw ++ gnutls_x509_crq_get_key_usage ++ gnutls_x509_crq_get_subject_alt_name ++ gnutls_x509_crq_get_subject_alt_othername_oid ++ gnutls_x509_crq_print ++ gnutls_x509_crq_set_basic_constraints ++ gnutls_x509_crq_set_key_purpose_oid ++ gnutls_x509_crq_set_key_usage ++ gnutls_x509_crq_set_subject_alt_name ++ gnutls_x509_crt_set_crq_extensions ++ gnutls_session_ticket_key_generate ++ gnutls_session_ticket_enable_client ++ gnutls_session_ticket_enable_server ++ gnutls_x509_crt_get_issuer_alt_name2 ++ gnutls_x509_crt_get_issuer_alt_name ++ gnutls_x509_crt_get_issuer_alt_othername_oid ++ gnutls_sign_algorithm_get_requested ++ gnutls_cipher_init ++ gnutls_cipher_encrypt ++ gnutls_cipher_decrypt ++ gnutls_cipher_deinit ++ gnutls_cipher_get_block_size ++ gnutls_hash_init ++ gnutls_hash_get_len ++ gnutls_hash ++ gnutls_hash_fast ++ gnutls_hash_deinit ++ gnutls_hash_output ++ gnutls_hmac_init ++ gnutls_hmac_get_len ++ gnutls_hmac ++ gnutls_hmac_fast ++ gnutls_hmac_deinit ++ gnutls_hmac_output ++ gnutls_certificate_set_verify_function ++ gnutls_safe_renegotiation_status ++ gnutls_certificate_set_retrieve_function ++ gnutls_x509_crt_import_url ++ gnutls_privkey_init ++ gnutls_privkey_deinit ++ gnutls_privkey_get_pk_algorithm ++ gnutls_privkey_get_type ++ gnutls_privkey_import_x509 ++ gnutls_privkey_import_openpgp ++ gnutls_privkey_decrypt_data ++ gnutls_x509_crq_privkey_sign ++ gnutls_x509_crl_privkey_sign ++ gnutls_x509_crt_privkey_sign ++ gnutls_pubkey_init ++ gnutls_pubkey_deinit ++ gnutls_pubkey_get_pk_algorithm ++ gnutls_pubkey_import_x509 ++ gnutls_pubkey_import_openpgp ++ gnutls_pubkey_export ++ gnutls_pubkey_get_key_id ++ gnutls_pubkey_get_key_usage ++ gnutls_pubkey_import_dsa_raw ++ gnutls_pubkey_import_rsa_raw ++ gnutls_pubkey_import ++ gnutls_x509_crt_set_pubkey ++ gnutls_x509_crq_set_pubkey ++ gnutls_x509_privkey_export_rsa_raw2 ++ gnutls_pubkey_get_preferred_hash_algorithm ++ gnutls_x509_crt_get_preferred_hash_algorithm ++ gnutls_global_set_mutex ++ gnutls_transport_set_vec_push_function ++ gnutls_transport_set_errno_function ++ gnutls_sec_param_to_pk_bits ++ gnutls_sec_param_get_name ++ gnutls_pk_bits_to_sec_param ++ gnutls_rnd ++ gnutls_cipher_encrypt2 ++ gnutls_cipher_decrypt2 ++ gnutls_openpgp_privkey_sec_param ++ gnutls_x509_privkey_sec_param ++ gnutls_session_channel_binding ++ gnutls_privkey_sign_hash ++ gnutls_privkey_sign_data ++ gnutls_pubkey_import_privkey ++ gnutls_certificate_get_issuer ++ gnutls_x509_crq_verify ++ gnutls_global_set_time_function ++ gnutls_x509_trust_list_verify_crt ++ gnutls_x509_trust_list_add_crls ++ gnutls_x509_trust_list_add_cas ++ gnutls_x509_trust_list_init ++ gnutls_x509_trust_list_deinit ++ gnutls_x509_crl_list_import ++ gnutls_x509_crl_list_import2 ++ gnutls_x509_crt_list_import2 ++ gnutls_cipher_tag ++ gnutls_cipher_add_auth ++ gnutls_dtls_set_timeouts ++ gnutls_transport_set_pull_timeout_function ++ gnutls_dtls_get_mtu ++ gnutls_dtls_set_mtu ++ gnutls_record_recv_seq ++ gnutls_key_generate ++ gnutls_dtls_cookie_verify ++ gnutls_dtls_cookie_send ++ gnutls_dtls_prestate_set ++ gnutls_dtls_get_data_mtu ++ gnutls_dtls_set_data_mtu ++ gnutls_cipher_set_iv ++ gnutls_pcert_deinit ++ gnutls_pcert_import_x509 ++ gnutls_pcert_import_x509_raw ++ gnutls_pcert_import_openpgp ++ gnutls_pcert_import_openpgp_raw ++ gnutls_pcert_export_x509 ++ gnutls_pcert_export_openpgp ++ gnutls_pubkey_get_openpgp_key_id ++ gnutls_certificate_set_retrieve_function2 ++ gnutls_x509_trust_list_get_issuer ++ gnutls_global_set_audit_log_function ++ gnutls_ecc_curve_get_name ++ gnutls_ecc_curve_get_size ++ gnutls_ecc_curve_get ++ gnutls_x509_privkey_export_ecc_raw ++ gnutls_x509_privkey_import_ecc_raw ++ gnutls_pubkey_verify_data2 ++ gnutls_x509_trust_list_verify_named_crt ++ gnutls_x509_trust_list_add_named_crt ++ gnutls_alert_get_strname ++ gnutls_pcert_list_import_x509_raw ++ gnutls_pubkey_import_ecc_raw ++ gnutls_record_get_discarded ++ gnutls_x509_crt_get_authority_info_access ++ gnutls_ocsp_req_add_cert ++ gnutls_ocsp_req_add_cert_id ++ gnutls_ocsp_req_deinit ++ gnutls_ocsp_req_export ++ gnutls_ocsp_req_get_cert_id ++ gnutls_ocsp_req_get_extension ++ gnutls_ocsp_req_get_nonce ++ gnutls_ocsp_req_get_version ++ gnutls_ocsp_req_import ++ gnutls_ocsp_req_init ++ gnutls_ocsp_req_print ++ gnutls_ocsp_req_randomize_nonce ++ gnutls_ocsp_req_set_extension ++ gnutls_ocsp_req_set_nonce ++ gnutls_ocsp_resp_deinit ++ gnutls_ocsp_resp_export ++ gnutls_ocsp_resp_get_certs ++ gnutls_ocsp_resp_get_extension ++ gnutls_ocsp_resp_get_nonce ++ gnutls_ocsp_resp_get_produced ++ gnutls_ocsp_resp_get_responder ++ gnutls_ocsp_resp_get_response ++ gnutls_ocsp_resp_get_signature ++ gnutls_ocsp_resp_get_signature_algorithm ++ gnutls_ocsp_resp_get_single ++ gnutls_ocsp_resp_get_status ++ gnutls_ocsp_resp_get_version ++ gnutls_ocsp_resp_import ++ gnutls_ocsp_resp_init ++ gnutls_ocsp_resp_print ++ gnutls_ocsp_resp_verify ++ gnutls_ocsp_resp_verify_direct ++ gnutls_privkey_import_ext ++ gnutls_certificate_set_key ++ gnutls_srp_3072_group_generator ++ gnutls_srp_3072_group_prime ++ gnutls_srp_4096_group_generator ++ gnutls_srp_4096_group_prime ++ gnutls_x509_privkey_verify_params ++ gnutls_priority_get_cipher_suite_index ++ gnutls_random_art ++ gnutls_pubkey_encrypt_data ++ gnutls_x509_dn_oid_name ++ gnutls_session_resumption_requested ++ gnutls_x509_crt_get_authority_key_gn_serial ++ gnutls_x509_crl_get_authority_key_gn_serial ++ gnutls_ecc_curve_list ++ gnutls_priority_certificate_type_list ++ gnutls_priority_sign_list ++ gnutls_priority_protocol_list ++ gnutls_priority_compression_list ++ gnutls_priority_ecc_curve_list ++ gnutls_verify_stored_pubkey ++ gnutls_store_commitment ++ gnutls_store_pubkey ++ gnutls_dtls_get_timeout ++ gnutls_tdb_init ++ gnutls_tdb_set_store_func ++ gnutls_tdb_set_store_commitment_func ++ gnutls_tdb_set_verify_func ++ gnutls_tdb_deinit ++ gnutls_x509_crt_set_authority_info_access ++ gnutls_x509_crt_get_private_key_usage_period ++ gnutls_x509_crq_get_private_key_usage_period ++ gnutls_x509_crt_set_private_key_usage_period ++ gnutls_x509_crq_set_private_key_usage_period ++ gnutls_session_get_random ++ gnutls_pubkey_verify_hash2 ++ gnutls_pk_to_sign ++ gnutls_certificate_set_x509_system_trust ++ gnutls_session_set_premaster ++ gnutls_ocsp_resp_check_crt ++ gnutls_x509_trust_list_add_system_trust ++ gnutls_x509_trust_list_add_trust_file ++ gnutls_x509_trust_list_add_trust_mem ++ gnutls_x509_trust_list_iter_get_ca ++ gnutls_x509_trust_list_iter_deinit ++ gnutls_pkcs12_simple_parse ++ gnutls_privkey_import_openpgp_raw ++ gnutls_privkey_import_x509_raw ++ gnutls_load_file ++ gnutls_x509_privkey_import_openssl ++ gnutls_x509_privkey_import2 ++ gnutls_privkey_import_ext2 ++ gnutls_privkey_import_tpm_raw ++ gnutls_tpm_privkey_generate ++ gnutls_pubkey_import_tpm_raw ++ gnutls_tpm_key_list_deinit ++ gnutls_tpm_key_list_get_url ++ gnutls_tpm_get_registered ++ gnutls_tpm_privkey_delete ++ gnutls_pubkey_import_tpm_url ++ gnutls_privkey_import_tpm_url ++ gnutls_privkey_import_url ++ gnutls_pubkey_import_url ++ gnutls_url_is_supported ++ gnutls_privkey_set_pin_function ++ gnutls_pubkey_set_pin_function ++ gnutls_certificate_set_pin_function ++ gnutls_x509_crt_set_pin_function ++ gnutls_handshake_set_timeout ++ gnutls_sign_get_pk_algorithm ++ gnutls_sign_get_hash_algorithm ++ gnutls_sign_algorithm_get ++ gnutls_x509_privkey_get_pk_algorithm2 ++ gnutls_heartbeat_ping ++ gnutls_heartbeat_pong ++ gnutls_heartbeat_enable ++ gnutls_heartbeat_allowed ++ gnutls_heartbeat_get_timeout ++ gnutls_heartbeat_set_timeouts ++ gnutls_certificate_set_ocsp_status_request_function ++ gnutls_certificate_set_ocsp_status_request_file ++ gnutls_ocsp_status_request_enable_client ++ gnutls_ocsp_status_request_get ++ gnutls_dh_params_export2_pkcs3 ++ gnutls_pubkey_export2 ++ gnutls_x509_crt_export2 ++ gnutls_x509_dn_export2 ++ gnutls_x509_crl_export2 ++ gnutls_pkcs7_export2 ++ gnutls_x509_privkey_export2 ++ gnutls_x509_privkey_export2_pkcs8 ++ gnutls_x509_crq_export2 ++ gnutls_openpgp_crt_export2 ++ gnutls_openpgp_privkey_export2 ++ gnutls_pkcs12_export2 ++ gnutls_pubkey_import_openpgp_raw ++ gnutls_pubkey_import_x509_raw ++ gnutls_certificate_get_peers_subkey_id ++ gnutls_session_get_id2 ++ gnutls_certificate_verify_peers3 ++ gnutls_certificate_verification_status_print ++ gnutls_srtp_get_profile_id ++ gnutls_srtp_get_profile_name ++ gnutls_srtp_get_selected_profile ++ gnutls_srtp_set_profile ++ gnutls_srtp_set_profile_direct ++ gnutls_srtp_get_keys ++ gnutls_srtp_get_mki ++ gnutls_srtp_set_mki ++ gnutls_ocsp_status_request_is_checked ++ gnutls_sign_is_secure ++ gnutls_x509_crt_get_policy ++ gnutls_x509_policy_release ++ gnutls_x509_crt_set_policy ++ gnutls_pubkey_import_x509_crq ++ gnutls_pubkey_print ++ gnutls_x509_crt_set_dn ++ gnutls_x509_crq_set_dn ++ gnutls_x509_crt_set_issuer_dn ++ gnutls_session_force_valid ++ gnutls_record_can_use_length_hiding ++ gnutls_range_split ++ gnutls_record_send_range ++ gnutls_db_check_entry_time ++ gnutls_handshake_set_random ++ gnutls_record_cork ++ gnutls_record_uncork ++ gnutls_transport_set_int2 ++ gnutls_transport_get_int2 ++ gnutls_transport_get_int ++ gnutls_x509_crt_get_issuer_dn2 ++ gnutls_x509_crt_get_dn2 ++ gnutls_x509_crl_get_issuer_dn2 ++ gnutls_x509_crq_get_dn2 ++ gnutls_x509_trust_list_remove_trust_mem ++ gnutls_x509_trust_list_remove_trust_file ++ gnutls_x509_trust_list_remove_cas ++ gnutls_session_get_desc ++ gnutls_privkey_status ++ gnutls_cipher_get_iv_size ++ gnutls_hmac_set_nonce ++ gnutls_sign_algorithm_get_client ++ gnutls_certificate_set_x509_key_mem2 ++ gnutls_certificate_set_x509_key_file2 ++ gnutls_alpn_get_selected_protocol ++ gnutls_alpn_set_protocols ++ gnutls_session_set_id ++ gnutls_certificate_set_trust_list ++ gnutls_certificate_get_trust_list ++ gnutls_cipher_get_tag_size ++ gnutls_record_overhead_size ++ gnutls_handshake_set_hook_function ++ gnutls_handshake_description_get_name ++ gnutls_digest_list ++ gnutls_digest_get_id ++ gnutls_digest_get_name ++ gnutls_priority_mac_list ++ gnutls_priority_cipher_list ++ gnutls_priority_kx_list ++ gnutls_record_set_timeout ++ gnutls_est_record_overhead_size ++ gnutls_pubkey_set_key_usage ++ gnutls_x509_privkey_import_rsa_raw2 ++ gnutls_pubkey_import_ecc_x962 ++ gnutls_rnd_refresh ++ gnutls_mac_get_nonce_size ++ gnutls_x509_crl_get_raw_issuer_dn ++ gnutls_certificate_get_crt_raw ++ gnutls_privkey_generate ++ gnutls_privkey_export_x509 ++ gnutls_privkey_export_openpgp ++ gnutls_fips140_mode_enabled ++ gnutls_record_check_corked ++ gnutls_sec_param_to_symmetric_bits ++ gnutls_privkey_export_ecc_raw ++ gnutls_privkey_export_dsa_raw ++ gnutls_privkey_export_rsa_raw ++ gnutls_privkey_import_rsa_raw ++ gnutls_privkey_import_dsa_raw ++ gnutls_privkey_import_ecc_raw ++ gnutls_pubkey_export_ecc_x962 ++ gnutls_pubkey_export_ecc_raw ++ gnutls_pubkey_export_dsa_raw ++ gnutls_pubkey_export_rsa_raw ++ gnutls_privkey_verify_params ++ gnutls_pubkey_verify_params ++ gnutls_db_get_default_cache_expiration ++ gnutls_x509_name_constraints_init ++ gnutls_x509_name_constraints_deinit ++ gnutls_x509_crt_get_name_constraints ++ gnutls_x509_name_constraints_add_permitted ++ gnutls_x509_name_constraints_add_excluded ++ gnutls_x509_crt_set_name_constraints ++ gnutls_x509_name_constraints_get_permitted ++ gnutls_x509_name_constraints_get_excluded ++ gnutls_x509_name_constraints_check ++ gnutls_x509_name_constraints_check_crt ++ gnutls_x509_cidr_to_rfc5280 ++ gnutls_srp_set_server_fake_salt_seed ++ gnutls_x509_crt_get_extension_data2 ++ gnutls_x509_crq_get_extension_data2 ++ gnutls_x509_crl_get_extension_data2 ++ gnutls_subject_alt_names_init ++ gnutls_subject_alt_names_deinit ++ gnutls_subject_alt_names_get ++ gnutls_subject_alt_names_set ++ gnutls_x509_ext_import_subject_alt_names ++ gnutls_x509_ext_export_subject_alt_names ++ gnutls_x509_crl_dist_points_init ++ gnutls_x509_crl_dist_points_deinit ++ gnutls_x509_crl_dist_points_get ++ gnutls_x509_crl_dist_points_set ++ gnutls_x509_ext_import_crl_dist_points ++ gnutls_x509_ext_export_crl_dist_points ++ gnutls_x509_ext_import_name_constraints ++ gnutls_x509_ext_export_name_constraints ++ gnutls_x509_aia_init ++ gnutls_x509_aia_deinit ++ gnutls_x509_aia_get ++ gnutls_x509_aia_set ++ gnutls_x509_ext_import_aia ++ gnutls_x509_ext_export_aia ++ gnutls_x509_ext_import_subject_key_id ++ gnutls_x509_ext_export_subject_key_id ++ gnutls_x509_ext_export_authority_key_id ++ gnutls_x509_ext_import_authority_key_id ++ gnutls_x509_aki_init ++ gnutls_x509_aki_get_id ++ gnutls_x509_aki_get_cert_issuer ++ gnutls_x509_aki_set_id ++ gnutls_x509_aki_set_cert_issuer ++ gnutls_x509_aki_deinit ++ gnutls_x509_ext_import_private_key_usage_period ++ gnutls_x509_ext_export_private_key_usage_period ++ gnutls_x509_ext_import_basic_constraints ++ gnutls_x509_ext_export_basic_constraints ++ gnutls_x509_ext_import_key_usage ++ gnutls_x509_ext_export_key_usage ++ gnutls_x509_ext_import_proxy ++ gnutls_x509_ext_export_proxy ++ gnutls_x509_policies_init ++ gnutls_x509_policies_deinit ++ gnutls_x509_policies_get ++ gnutls_x509_policies_set ++ gnutls_x509_ext_import_policies ++ gnutls_x509_ext_export_policies ++ gnutls_x509_crt_set_issuer_alt_name ++ gnutls_x509_key_purpose_init ++ gnutls_x509_key_purpose_deinit ++ gnutls_x509_key_purpose_set ++ gnutls_x509_key_purpose_get ++ gnutls_x509_ext_import_key_purposes ++ gnutls_x509_ext_export_key_purposes ++ gnutls_x509_crt_check_hostname2 ++ gnutls_openpgp_crt_check_hostname2 ++ gnutls_certificate_verify_peers ++ gnutls_certificate_get_verify_flags ++ gnutls_certificate_get_x509_key ++ gnutls_certificate_get_x509_crt ++ gnutls_certificate_get_openpgp_key ++ gnutls_certificate_get_openpgp_crt ++ gnutls_credentials_get ++ gnutls_x509_crl_iter_crt_serial ++ gnutls_x509_crl_iter_deinit ++ gnutls_packet_deinit ++ gnutls_record_recv_packet ++ gnutls_packet_get ++ gnutls_x509_trust_list_add_trust_dir ++ gnutls_certificate_set_x509_trust_dir ++ gnutls_pkcs_schema_get_name ++ gnutls_pkcs_schema_get_oid ++ gnutls_pkcs8_info ++ gnutls_pkcs12_bag_enc_info ++ gnutls_pkcs12_mac_info ++ gnutls_pkcs12_generate_mac2 ++ gnutls_x509_trust_list_verify_crt2 ++ gnutls_x509_crt_get_extension_by_oid2 ++ gnutls_x509_crq_get_extension_by_oid2 ++ gnutls_x509_ext_deinit ++ gnutls_x509_ext_print ++ gnutls_x509_othername_to_virtual ++ gnutls_x509_crq_get_signature_algorithm ++ gnutls_privkey_import_ext3 ++ gnutls_record_discard_queued ++ gnutls_session_ext_master_secret_status ++ gnutls_session_etm_status ++ gnutls_priority_string_list ++ gnutls_aead_cipher_init ++ gnutls_aead_cipher_decrypt ++ gnutls_aead_cipher_encrypt ++ gnutls_aead_cipher_deinit ++ gnutls_dh_params_import_raw2 ++ gnutls_memset ++ gnutls_memcmp ++ gnutls_pkcs12_bag_set_privkey ++ gnutls_x509_privkey_set_pin_function ++ gnutls_ocsp_resp_get_responder_raw_id ++ gnutls_system_key_iter_deinit ++ gnutls_system_key_iter_get_info ++ gnutls_system_key_delete ++ gnutls_system_key_add_x509 ++ gnutls_register_custom_url ++ gnutls_pcert_import_x509_list ++ gnutls_x509_trust_list_get_issuer_by_dn ++ gnutls_system_recv_timeout ++ gnutls_record_set_state ++ gnutls_record_get_state ++ gnutls_crypto_register_cipher ++ gnutls_crypto_register_aead_cipher ++ gnutls_crypto_register_mac ++ gnutls_crypto_register_digest ++ gnutls_ext_register ++ gnutls_buffer_append_data ++ gnutls_supplemental_register ++ gnutls_supplemental_send ++ gnutls_supplemental_recv ++ gnutls_ext_get_data ++ gnutls_ext_set_data ++ gnutls_openpgp_crt_check_email ++ gnutls_x509_crt_check_email ++ gnutls_x509_crt_get_pk_ecc_raw ++ gnutls_x509_dn_get_str ++ gnutls_x509_trust_list_get_issuer_by_subject_key_id ++ gnutls_pkcs7_get_crt_raw2 ++ gnutls_pkcs7_signature_info_deinit ++ gnutls_pkcs7_get_signature_info ++ gnutls_pkcs7_verify_direct ++ gnutls_pkcs7_verify ++ gnutls_pkcs7_get_crl_raw2 ++ gnutls_pkcs7_sign ++ gnutls_pkcs7_attrs_deinit ++ gnutls_pkcs7_add_attr ++ gnutls_pkcs7_get_attr ++ gnutls_pkcs7_print ++ gnutls_x509_crt_verify_data2 ++ gnutls_pkcs7_get_signature_count ++ gnutls_ecc_curve_get_oid ++ gnutls_digest_get_oid ++ gnutls_pk_get_oid ++ gnutls_sign_get_oid ++ gnutls_ecc_curve_get_id ++ gnutls_oid_to_digest ++ gnutls_oid_to_pk ++ gnutls_oid_to_sign ++ gnutls_oid_to_ecc_curve ++ gnutls_prf_rfc5705 ++ gnutls_hex_decode2 ++ gnutls_hex_encode2 ++ gnutls_session_set_verify_function ++ gnutls_session_set_verify_cert ++ gnutls_session_set_verify_cert2 ++ gnutls_session_get_verify_cert_status ++ gnutls_x509_privkey_generate2 ++ gnutls_x509_privkey_get_seed ++ gnutls_x509_privkey_verify_seed ++ gnutls_privkey_generate2 ++ gnutls_privkey_get_seed ++ gnutls_privkey_verify_seed ++ gnutls_x509_privkey_set_flags ++ gnutls_privkey_set_flags ++ gnutls_x509_crt_set_subject_unique_id ++ gnutls_x509_crt_set_issuer_unique_id ++ gnutls_certificate_set_flags ++ gnutls_decode_ber_digest_info ++ gnutls_encode_ber_digest_info ++ gnutls_pkcs7_get_embedded_data ++ gnutls_x509_crq_set_subject_alt_othername ++ gnutls_x509_crt_set_subject_alt_othername ++ gnutls_x509_crt_set_issuer_alt_othername ++ gnutls_dh_params_import_dsa ++ gnutls_session_get_flags ++ gnutls_session_get_master_secret ++ gnutls_x509_crt_get_signature_oid ++ gnutls_x509_crt_get_pk_oid ++ gnutls_x509_crq_get_signature_oid ++ gnutls_x509_crq_get_pk_oid ++ gnutls_x509_crl_get_signature_oid ++ gnutls_ecc_curve_get_pk ++ gnutls_x509_crt_equals ++ gnutls_x509_crt_equals2 ++ gnutls_x509_ext_import_tlsfeatures ++ gnutls_x509_ext_export_tlsfeatures ++ gnutls_x509_tlsfeatures_add ++ gnutls_x509_tlsfeatures_init ++ gnutls_x509_tlsfeatures_deinit ++ gnutls_x509_tlsfeatures_get ++ gnutls_x509_crt_get_tlsfeatures ++ gnutls_x509_crt_set_tlsfeatures ++ gnutls_x509_crq_get_tlsfeatures ++ gnutls_x509_crq_set_tlsfeatures ++ gnutls_ext_get_name ++ gnutls_x509_crt_set_crq_extension_by_oid ++ gnutls_x509_tlsfeatures_check_crt ++ gnutls_x509_crq_set_extension_by_oid ++ gnutls_x509_dn_set_str ++ gnutls_transport_set_fastopen ++ gnutls_oid_to_mac ++ gnutls_certificate_set_ocsp_status_request_function2 ++ gnutls_session_ext_register ++ gnutls_session_supplemental_register ++ gnutls_pkcs7_get_embedded_data_oid ++ gnutls_ffdhe_8192_group_prime ++ gnutls_ffdhe_8192_group_generator ++ gnutls_ffdhe_4096_group_prime ++ gnutls_ffdhe_4096_group_generator ++ gnutls_ffdhe_3072_group_prime ++ gnutls_ffdhe_3072_group_generator ++ gnutls_ffdhe_2048_group_prime ++ gnutls_ffdhe_2048_group_generator ++ gnutls_ffdhe_8192_key_bits ++ gnutls_ffdhe_4096_key_bits ++ gnutls_ffdhe_2048_key_bits ++ gnutls_ffdhe_3072_key_bits ++ gnutls_certificate_set_known_dh_params ++ gnutls_anon_set_server_known_dh_params ++ gnutls_psk_set_server_known_dh_params ++ gnutls_x509_crt_check_key_purpose ++ gnutls_ocsp_resp_get_responder2 ++ gnutls_x509_crt_get_issuer_dn3 ++ gnutls_x509_crt_get_dn3 ++ gnutls_x509_rdn_get2 ++ gnutls_x509_dn_get_str2 ++ gnutls_x509_crl_get_issuer_dn3 ++ gnutls_x509_crq_get_dn3 ++ gnutls_utf8_password_normalize ++ gnutls_idna_map ++ gnutls_idna_reverse_map +diff --git a/SMP/libgnutls.sln b/SMP/libgnutls.sln +new file mode 100644 +index 0000000..86b4ce7 +--- /dev/null ++++ b/SMP/libgnutls.sln +@@ -0,0 +1,57 @@ ++ ++Microsoft Visual Studio Solution File, Format Version 12.00 ++VisualStudioVersion = 12.0.30501.0 ++MinimumVisualStudioVersion = 12.0.30501.0 ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgnutls", "libgnutls.vcxproj", "{6F610EE8-7F59-4191-AB88-F63843267C02}" ++EndProject ++Global ++ GlobalSection(SolutionConfigurationPlatforms) = preSolution ++ Debug|x64 = Debug|x64 ++ Debug|x86 = Debug|x86 ++ DebugDLL|x64 = DebugDLL|x64 ++ DebugDLL|x86 = DebugDLL|x86 ++ DebugDLLStaticDeps|x64 = DebugDLLStaticDeps|x64 ++ DebugDLLStaticDeps|x86 = DebugDLLStaticDeps|x86 ++ Release|x64 = Release|x64 ++ Release|x86 = Release|x86 ++ ReleaseDLL|x64 = ReleaseDLL|x64 ++ ReleaseDLL|x86 = ReleaseDLL|x86 ++ ReleaseDLLStaticDeps|x64 = ReleaseDLLStaticDeps|x64 ++ ReleaseDLLStaticDeps|x86 = ReleaseDLLStaticDeps|x86 ++ ReleaseLTO|x64 = ReleaseLTO|x64 ++ ReleaseLTO|x86 = ReleaseLTO|x86 ++ EndGlobalSection ++ GlobalSection(ProjectConfigurationPlatforms) = postSolution ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x64.ActiveCfg = Debug|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x64.Build.0 = Debug|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x86.ActiveCfg = Debug|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x86.Build.0 = Debug|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x64.Build.0 = DebugDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x86.ActiveCfg = DebugDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x86.Build.0 = DebugDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x64.ActiveCfg = DebugDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x64.Build.0 = DebugDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x86.ActiveCfg = DebugDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x86.Build.0 = DebugDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x64.ActiveCfg = Release|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x64.Build.0 = Release|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x86.ActiveCfg = Release|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x86.Build.0 = Release|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x64.ActiveCfg = ReleaseDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x64.Build.0 = ReleaseDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x86.ActiveCfg = ReleaseDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x86.Build.0 = ReleaseDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x64.ActiveCfg = ReleaseLTO|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32 ++ EndGlobalSection ++ GlobalSection(SolutionProperties) = preSolution ++ HideSolutionNode = FALSE ++ EndGlobalSection ++EndGlobal +diff --git a/SMP/libgnutls.vcxproj b/SMP/libgnutls.vcxproj +new file mode 100644 +index 0000000..1b385ab +--- /dev/null ++++ b/SMP/libgnutls.vcxproj +@@ -0,0 +1,2811 @@ ++<?xml version="1.0" encoding="utf-8"?> ++<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ++ <ItemGroup Label="ProjectConfigurations"> ++ <ProjectConfiguration Include="DebugDLLStaticDeps|Win32"> ++ <Configuration>DebugDLLStaticDeps</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="DebugDLLStaticDeps|x64"> ++ <Configuration>DebugDLLStaticDeps</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="DebugDLL|Win32"> ++ <Configuration>DebugDLL</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="DebugDLL|x64"> ++ <Configuration>DebugDLL</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Debug|Win32"> ++ <Configuration>Debug</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Debug|x64"> ++ <Configuration>Debug</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="ReleaseDLLStaticDeps|Win32"> ++ <Configuration>ReleaseDLLStaticDeps</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="ReleaseDLLStaticDeps|x64"> ++ <Configuration>ReleaseDLLStaticDeps</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="ReleaseDLL|Win32"> ++ <Configuration>ReleaseDLL</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="ReleaseDLL|x64"> ++ <Configuration>ReleaseDLL</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="ReleaseLTO|Win32"> ++ <Configuration>ReleaseLTO</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="ReleaseLTO|x64"> ++ <Configuration>ReleaseLTO</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Release|Win32"> ++ <Configuration>Release</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Release|x64"> ++ <Configuration>Release</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ </ItemGroup> ++ <ItemGroup> ++ <ClInclude Include="..\lib\abstract_int.h" /> ++ <ClInclude Include="..\lib\accelerated\accelerated.h" /> ++ <ClInclude Include="..\lib\accelerated\cryptodev.h" /> ++ <ClInclude Include="..\lib\accelerated\x86\aes-gcm-aead.h" /> ++ <ClInclude Include="..\lib\accelerated\x86\aes-padlock.h" /> ++ <ClInclude Include="..\lib\accelerated\x86\aes-x86.h" /> ++ <ClInclude Include="..\lib\accelerated\x86\sha-padlock.h" /> ++ <ClInclude Include="..\lib\accelerated\x86\sha-x86.h" /> ++ <ClInclude Include="..\lib\accelerated\x86\x86-common.h" /> ++ <ClInclude Include="..\lib\algorithms.h" /> ++ <ClInclude Include="..\lib\atfork.h" /> ++ <ClInclude Include="..\lib\auth.h" /> ++ <ClInclude Include="..\lib\auth\anon.h" /> ++ <ClInclude Include="..\lib\auth\cert.h" /> ++ <ClInclude Include="..\lib\auth\dh_common.h" /> ++ <ClInclude Include="..\lib\auth\ecdhe.h" /> ++ <ClInclude Include="..\lib\auth\psk.h" /> ++ <ClInclude Include="..\lib\auth\psk_passwd.h" /> ++ <ClInclude Include="..\lib\auth\rsa_common.h" /> ++ <ClInclude Include="..\lib\auth\srp_kx.h" /> ++ <ClInclude Include="..\lib\auth\srp_passwd.h" /> ++ <ClInclude Include="..\lib\buffers.h" /> ++ <ClInclude Include="..\lib\cipher.h" /> ++ <ClInclude Include="..\lib\cipher_int.h" /> ++ <ClInclude Include="..\lib\compress.h" /> ++ <ClInclude Include="..\lib\constate.h" /> ++ <ClInclude Include="..\lib\crypto-backend.h" /> ++ <ClInclude Include="..\lib\crypto.h" /> ++ <ClInclude Include="..\lib\datum.h" /> ++ <ClInclude Include="..\lib\db.h" /> ++ <ClInclude Include="..\lib\debug.h" /> ++ <ClInclude Include="..\lib\dh.h" /> ++ <ClInclude Include="..\lib\dtls.h" /> ++ <ClInclude Include="..\lib\ecc.h" /> ++ <ClInclude Include="..\lib\errors.h" /> ++ <ClInclude Include="..\lib\extensions.h" /> ++ <ClInclude Include="..\lib\extras\hex.h" /> ++ <ClInclude Include="..\lib\extras\randomart.h" /> ++ <ClInclude Include="..\lib\ext\alpn.h" /> ++ <ClInclude Include="..\lib\ext\cert_type.h" /> ++ <ClInclude Include="..\lib\ext\dumbfw.h" /> ++ <ClInclude Include="..\lib\ext\ecc.h" /> ++ <ClInclude Include="..\lib\ext\etm.h" /> ++ <ClInclude Include="..\lib\ext\ext_master_secret.h" /> ++ <ClInclude Include="..\lib\ext\heartbeat.h" /> ++ <ClInclude Include="..\lib\ext\max_record.h" /> ++ <ClInclude Include="..\lib\ext\safe_renegotiation.h" /> ++ <ClInclude Include="..\lib\ext\server_name.h" /> ++ <ClInclude Include="..\lib\ext\session_ticket.h" /> ++ <ClInclude Include="..\lib\ext\signature.h" /> ++ <ClInclude Include="..\lib\ext\srp.h" /> ++ <ClInclude Include="..\lib\ext\srtp.h" /> ++ <ClInclude Include="..\lib\ext\status_request.h" /> ++ <ClInclude Include="..\lib\file.h" /> ++ <ClInclude Include="..\lib\fips.h" /> ++ <ClInclude Include="..\lib\global.h" /> ++ <ClInclude Include="..\lib\gnutls_int.h" /> ++ <ClInclude Include="..\lib\handshake.h" /> ++ <ClInclude Include="..\lib\hash_int.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\abstract.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\compat.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\crypto.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\dtls.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\ocsp.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\openpgp.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\pkcs11.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\pkcs12.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\pkcs7.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\self-test.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\socket.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\system-keys.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\tpm.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\urls.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\x509-ext.h" /> ++ <ClInclude Include="..\lib\includes\gnutls\x509.h" /> ++ <ClInclude Include="..\lib\kx.h" /> ++ <ClInclude Include="..\lib\locks.h" /> ++ <ClInclude Include="..\lib\mbuffers.h" /> ++ <ClInclude Include="..\lib\mem.h" /> ++ <ClInclude Include="..\lib\minitasn1\element.h" /> ++ <ClInclude Include="..\lib\minitasn1\gstr.h" /> ++ <ClInclude Include="..\lib\minitasn1\int.h" /> ++ <ClInclude Include="..\lib\minitasn1\libtasn1.h" /> ++ <ClInclude Include="..\lib\minitasn1\parser_aux.h" /> ++ <ClInclude Include="..\lib\minitasn1\structure.h" /> ++ <ClInclude Include="..\lib\mpi.h" /> ++ <ClInclude Include="..\lib\nettle\gnettle.h" /> ++ <ClInclude Include="..\lib\nettle\int\dsa-fips.h" /> ++ <ClInclude Include="..\lib\nettle\int\rsa-fips.h" /> ++ <ClInclude Include="..\lib\nettle\rnd-common.h" /> ++ <ClInclude Include="..\lib\num.h" /> ++ <ClInclude Include="..\lib\opencdk\context.h" /> ++ <ClInclude Include="..\lib\opencdk\filters.h" /> ++ <ClInclude Include="..\lib\opencdk\keydb.h" /> ++ <ClInclude Include="..\lib\opencdk\main.h" /> ++ <ClInclude Include="..\lib\opencdk\opencdk.h" /> ++ <ClInclude Include="..\lib\opencdk\packet.h" /> ++ <ClInclude Include="..\lib\opencdk\stream.h" /> ++ <ClInclude Include="..\lib\opencdk\types.h" /> ++ <ClInclude Include="..\lib\openpgp\openpgp.h" /> ++ <ClInclude Include="..\lib\openpgp\openpgp_int.h" /> ++ <ClInclude Include="..\lib\pin.h" /> ++ <ClInclude Include="..\lib\pk.h" /> ++ <ClInclude Include="..\lib\random.h" /> ++ <ClInclude Include="..\lib\record.h" /> ++ <ClInclude Include="..\lib\session_pack.h" /> ++ <ClInclude Include="..\lib\srp.h" /> ++ <ClInclude Include="..\lib\sslv2_compat.h" /> ++ <ClInclude Include="..\lib\state.h" /> ++ <ClInclude Include="..\lib\str.h" /> ++ <ClInclude Include="..\lib\str_array.h" /> ++ <ClInclude Include="..\lib\supplemental.h" /> ++ <ClInclude Include="..\lib\system-keys.h" /> ++ <ClInclude Include="..\lib\system.h" /> ++ <ClInclude Include="..\lib\tls-sig.h" /> ++ <ClInclude Include="..\lib\unistring\unicase\special-casing-table.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\bitmap.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_C.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cc.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cf.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cn.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Co.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cs.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_L.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_LC.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Ll.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lm.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lo.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lt.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lu.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_M.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Mc.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Me.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Mn.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_N.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Nd.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Nl.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_No.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_of.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_P.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pc.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pd.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pe.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pf.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pi.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Po.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Ps.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_S.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Sc.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Sk.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Sm.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_So.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Z.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Zl.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Zp.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Zs.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\combiningclass.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\pr_default_ignorable_code_point.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\pr_join_control.h" /> ++ <ClInclude Include="..\lib\unistring\unictype\pr_not_a_character.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\composition-table.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\decompose-internal.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\decomposition-table.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\decomposition-table1.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\decomposition-table2.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\normalize-internal.h" /> ++ <ClInclude Include="..\lib\unistring\uninorm\u-normalize-internal.h" /> ++ <ClInclude Include="..\lib\unistring\unistr\u-cpy.h" /> ++ <ClInclude Include="..\lib\urls.h" /> ++ <ClInclude Include="..\lib\vasprintf.h" /> ++ <ClInclude Include="..\lib\x509.h" /> ++ <ClInclude Include="..\lib\x509\attributes.h" /> ++ <ClInclude Include="..\lib\x509\common.h" /> ++ <ClInclude Include="..\lib\x509\ip-in-cidr.h" /> ++ <ClInclude Include="..\lib\x509\ip.h" /> ++ <ClInclude Include="..\lib\x509\krb5.h" /> ++ <ClInclude Include="..\lib\x509\pkcs7_int.h" /> ++ <ClInclude Include="..\lib\x509\prov-seed.h" /> ++ <ClInclude Include="..\lib\x509\verify-high.h" /> ++ <ClInclude Include="..\lib\x509\virt-san.h" /> ++ <ClInclude Include="..\lib\x509\x509_ext_int.h" /> ++ <ClInclude Include="..\lib\x509\x509_int.h" /> ++ <ClInclude Include="..\lib\x509_b64.h" /> ++ <ClInclude Include="config.h" /> ++ <ClInclude Include="lib\priority_options.h" /> ++ <ClInclude Include="version.h" /> ++ </ItemGroup> ++ <ItemGroup> ++ <ClCompile Include="..\gl\c-ctype.c" /> ++ <ClCompile Include="..\gl\hash-pjw-bare.c" /> ++ <ClCompile Include="..\gl\msvc-inval.c" /> ++ <ClCompile Include="..\gl\msvc-nothrow.c" /> ++ <ClCompile Include="..\gl\read-file.c" /> ++ <ClCompile Include="..\gl\secure_getenv.c" /> ++ <ClCompile Include="..\lib\accelerated\accelerated.c" /> ++ <ClCompile Include="..\lib\accelerated\cryptodev-gcm.c" /> ++ <ClCompile Include="..\lib\accelerated\cryptodev.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-cbc-x86-aesni.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-cbc-x86-ssse3.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-ccm-x86-aesni.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-padlock.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-aesni.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-pclmul-avx.c"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-pclmul.c"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-ssse3.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\aes-padlock.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\hmac-padlock.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\hmac-x86-ssse3.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\sha-padlock.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\sha-x86-ssse3.c" /> ++ <ClCompile Include="..\lib\accelerated\x86\x86-common.c" /> ++ <ClCompile Include="..\lib\alert.c" /> ++ <ClCompile Include="..\lib\algorithms\cert_types.c" /> ++ <ClCompile Include="..\lib\algorithms\ciphers.c" /> ++ <ClCompile Include="..\lib\algorithms\ciphersuites.c" /> ++ <ClCompile Include="..\lib\algorithms\ecc.c" /> ++ <ClCompile Include="..\lib\algorithms\groups.c" /> ++ <ClCompile Include="..\lib\algorithms\kx.c" /> ++ <ClCompile Include="..\lib\algorithms\mac.c" /> ++ <ClCompile Include="..\lib\algorithms\protocols.c" /> ++ <ClCompile Include="..\lib\algorithms\publickey.c" /> ++ <ClCompile Include="..\lib\algorithms\secparams.c" /> ++ <ClCompile Include="..\lib\algorithms\sign.c" /> ++ <ClCompile Include="..\lib\anon_cred.c" /> ++ <ClCompile Include="..\lib\atfork.c" /> ++ <ClCompile Include="..\lib\auth.c" /> ++ <ClCompile Include="..\lib\auth\anon.c" /> ++ <ClCompile Include="..\lib\auth\anon_ecdh.c" /> ++ <ClCompile Include="..\lib\auth\cert.c"> ++ <ObjectFileName>$(IntDir)\auth_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\dhe.c" /> ++ <ClCompile Include="..\lib\auth\dhe_psk.c" /> ++ <ClCompile Include="..\lib\auth\dh_common.c" /> ++ <ClCompile Include="..\lib\auth\ecdhe.c" /> ++ <ClCompile Include="..\lib\auth\psk.c"> ++ <ObjectFileName>$(IntDir)\auth_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\psk_passwd.c" /> ++ <ClCompile Include="..\lib\auth\rsa.c" /> ++ <ClCompile Include="..\lib\auth\rsa_psk.c" /> ++ <ClCompile Include="..\lib\auth\srp_kx.c" /> ++ <ClCompile Include="..\lib\auth\srp_passwd.c" /> ++ <ClCompile Include="..\lib\auth\srp_rsa.c" /> ++ <ClCompile Include="..\lib\auth\srp_sb64.c" /> ++ <ClCompile Include="..\lib\auto-verify.c" /> ++ <ClCompile Include="..\lib\buffers.c" /> ++ <ClCompile Include="..\lib\cert-cred-rawpk.c" /> ++ <ClCompile Include="..\lib\cert-cred-x509.c" /> ++ <ClCompile Include="..\lib\cert-cred.c" /> ++ <ClCompile Include="..\lib\cert-session.c" /> ++ <ClCompile Include="..\lib\cipher-cbc.c" /> ++ <ClCompile Include="..\lib\cipher.c" /> ++ <ClCompile Include="..\lib\cipher_int.c" /> ++ <ClCompile Include="..\lib\compress.c" /> ++ <ClCompile Include="..\lib\constate.c" /> ++ <ClCompile Include="..\lib\crypto-api.c" /> ++ <ClCompile Include="..\lib\crypto-backend.c" /> ++ <ClCompile Include="..\lib\crypto-selftests-pk.c" /> ++ <ClCompile Include="..\lib\crypto-selftests.c" /> ++ <ClCompile Include="..\lib\datum.c" /> ++ <ClCompile Include="..\lib\db.c" /> ++ <ClCompile Include="..\lib\debug.c" /> ++ <ClCompile Include="..\lib\dh-primes.c" /> ++ <ClCompile Include="..\lib\dh-session.c" /> ++ <ClCompile Include="..\lib\dh.c" /> ++ <ClCompile Include="..\lib\dtls-sw.c" /> ++ <ClCompile Include="..\lib\dtls.c" /> ++ <ClCompile Include="..\lib\ecc.c" /> ++ <ClCompile Include="..\lib\errors.c" /> ++ <ClCompile Include="..\lib\extras\hex.c" /> ++ <ClCompile Include="..\lib\extras\randomart.c"> ++ <ObjectFileName>$(IntDir)\extras_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\extv.c" /> ++ <ClCompile Include="..\lib\ext\alpn.c" /> ++ <ClCompile Include="..\lib\ext\client_cert_type.c" /> ++ <ClCompile Include="..\lib\ext\cookie.c" /> ++ <ClCompile Include="..\lib\ext\dumbfw.c" /> ++ <ClCompile Include="..\lib\ext\early_data.c" /> ++ <ClCompile Include="..\lib\ext\ec_point_formats.c" /> ++ <ClCompile Include="..\lib\ext\etm.c" /> ++ <ClCompile Include="..\lib\ext\ext_master_secret.c" /> ++ <ClCompile Include="..\lib\ext\heartbeat.c" /> ++ <ClCompile Include="..\lib\ext\key_share.c" /> ++ <ClCompile Include="..\lib\ext\max_record.c" /> ++ <ClCompile Include="..\lib\ext\post_handshake.c" /> ++ <ClCompile Include="..\lib\ext\pre_shared_key.c" /> ++ <ClCompile Include="..\lib\ext\psk_ke_modes.c" /> ++ <ClCompile Include="..\lib\ext\record_size_limit.c" /> ++ <ClCompile Include="..\lib\ext\safe_renegotiation.c" /> ++ <ClCompile Include="..\lib\ext\server_cert_type.c" /> ++ <ClCompile Include="..\lib\ext\server_name.c" /> ++ <ClCompile Include="..\lib\ext\session_ticket.c" /> ++ <ClCompile Include="..\lib\ext\signature.c" /> ++ <ClCompile Include="..\lib\ext\srp.c" /> ++ <ClCompile Include="..\lib\ext\srtp.c" /> ++ <ClCompile Include="..\lib\ext\status_request.c" /> ++ <ClCompile Include="..\lib\ext\supported_groups.c" /> ++ <ClCompile Include="..\lib\ext\supported_versions.c" /> ++ <ClCompile Include="..\lib\file.c" /> ++ <ClCompile Include="..\lib\fingerprint.c" /> ++ <ClCompile Include="..\lib\fips.c" /> ++ <ClCompile Include="..\lib\global.c" /> ++ <ClCompile Include="..\lib\gnutls_asn1_tab.c" /> ++ <ClCompile Include="..\lib\handshake-checks.c" /> ++ <ClCompile Include="..\lib\handshake-tls13.c" /> ++ <ClCompile Include="..\lib\handshake.c" /> ++ <ClCompile Include="..\lib\hash_int.c" /> ++ <ClCompile Include="..\lib\hello_ext.c" /> ++ <ClCompile Include="..\lib\hello_ext_lib.c" /> ++ <ClCompile Include="..\lib\kx.c" /> ++ <ClCompile Include="..\lib\locks.c" /> ++ <ClCompile Include="..\lib\mbuffers.c" /> ++ <ClCompile Include="..\lib\mem.c" /> ++ <ClCompile Include="..\lib\minitasn1\coding.c" /> ++ <ClCompile Include="..\lib\minitasn1\decoding.c" /> ++ <ClCompile Include="..\lib\minitasn1\element.c" /> ++ <ClCompile Include="..\lib\minitasn1\errors.c"> ++ <ObjectFileName>$(IntDir)\minitasn1_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\gstr.c" /> ++ <ClCompile Include="..\lib\minitasn1\parser_aux.c" /> ++ <ClCompile Include="..\lib\minitasn1\structure.c" /> ++ <ClCompile Include="..\lib\minitasn1\version.c" /> ++ <ClCompile Include="..\lib\mpi.c" /> ++ <ClCompile Include="..\lib\nettle\backport\cfb8.c" /> ++ <ClCompile Include="..\lib\nettle\backport\cmac.c" /> ++ <ClCompile Include="..\lib\nettle\cipher.c"> ++ <ObjectFileName>$(IntDir)\nettle_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\bignum-le.c" /> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gost-hash.c" /> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gost256cpa.c" /> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gost512a.c" /> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gostdsa-sign.c" /> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gostdsa-verify.c" /> ++ <ClCompile Include="..\lib\nettle\gost\gost28147.c" /> ++ <ClCompile Include="..\lib\nettle\gost\gostdsa-mask.c" /> ++ <ClCompile Include="..\lib\nettle\gost\gostdsa-sign.c" /> ++ <ClCompile Include="..\lib\nettle\gost\gostdsa-verify.c" /> ++ <ClCompile Include="..\lib\nettle\gost\gosthash94-meta.c" /> ++ <ClCompile Include="..\lib\nettle\gost\gosthash94.c" /> ++ <ClCompile Include="..\lib\nettle\gost\hmac-gosthash94.c" /> ++ <ClCompile Include="..\lib\nettle\gost\hmac-streebog.c" /> ++ <ClCompile Include="..\lib\nettle\gost\pbkdf2-hmac-gosthash94.c" /> ++ <ClCompile Include="..\lib\nettle\gost\pbkdf2-hmac-streebog.c" /> ++ <ClCompile Include="..\lib\nettle\gost\streebog-meta.c" /> ++ <ClCompile Include="..\lib\nettle\gost\streebog.c"> ++ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsC</CompileAs> ++ <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">CompileAsC</CompileAs> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\init.c" /> ++ <ClCompile Include="..\lib\nettle\int\drbg-aes-self-test.c" /> ++ <ClCompile Include="..\lib\nettle\int\drbg-aes.c" /> ++ <ClCompile Include="..\lib\nettle\int\dsa-keygen-fips186.c" /> ++ <ClCompile Include="..\lib\nettle\int\dsa-validate.c" /> ++ <ClCompile Include="..\lib\nettle\int\provable-prime.c" /> ++ <ClCompile Include="..\lib\nettle\int\rsa-keygen-fips186.c" /> ++ <ClCompile Include="..\lib\nettle\int\tls1-prf.c" /> ++ <ClCompile Include="..\lib\nettle\mac.c"> ++ <ObjectFileName>$(IntDir)\net_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\mpi.c"> ++ <ObjectFileName>$(IntDir)\nettle_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\pk.c"> ++ <ObjectFileName>$(IntDir)\nettle_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\prf.c" /> ++ <ClCompile Include="..\lib\nettle\rnd.c" /> ++ <ClCompile Include="..\lib\nettle\sysrng-windows.c" /> ++ <ClCompile Include="..\lib\num.c" /> ++ <ClCompile Include="..\lib\ocsp-api.c" /> ++ <ClCompile Include="..\lib\openpgp_compat.c" /> ++ <ClCompile Include="..\lib\pcert.c" /> ++ <ClCompile Include="..\lib\pin.c" /> ++ <ClCompile Include="..\lib\pk.c" /> ++ <ClCompile Include="..\lib\pkcs11.c"> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11x.c"> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_int.c"> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_privkey.c"> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_secret.c"> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_write.c"> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'">true</ExcludedFromBuild> ++ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkix_asn1_tab.c" /> ++ <ClCompile Include="..\lib\prf.c" /> ++ <ClCompile Include="..\lib\priority.c" /> ++ <ClCompile Include="..\lib\privkey.c" /> ++ <ClCompile Include="..\lib\privkey_raw.c" /> ++ <ClCompile Include="..\lib\psk.c" /> ++ <ClCompile Include="..\lib\pubkey.c" /> ++ <ClCompile Include="..\lib\random.c" /> ++ <ClCompile Include="..\lib\randomart.c" /> ++ <ClCompile Include="..\lib\range.c" /> ++ <ClCompile Include="..\lib\record.c" /> ++ <ClCompile Include="..\lib\safe-memfuncs.c" /> ++ <ClCompile Include="..\lib\secrets.c" /> ++ <ClCompile Include="..\lib\session.c" /> ++ <ClCompile Include="..\lib\session_pack.c" /> ++ <ClCompile Include="..\lib\srp.c" /> ++ <ClCompile Include="..\lib\sslv2_compat.c" /> ++ <ClCompile Include="..\lib\state.c" /> ++ <ClCompile Include="..\lib\stek.c" /> ++ <ClCompile Include="..\lib\str-iconv.c" /> ++ <ClCompile Include="..\lib\str-idna.c" /> ++ <ClCompile Include="..\lib\str-unicode.c" /> ++ <ClCompile Include="..\lib\str.c" /> ++ <ClCompile Include="..\lib\supplemental.c" /> ++ <ClCompile Include="..\lib\system.c" /> ++ <ClCompile Include="..\lib\system\certs.c" /> ++ <ClCompile Include="..\lib\system\fastopen.c" /> ++ <ClCompile Include="..\lib\system\keys-win.c" /> ++ <ClCompile Include="..\lib\system\sockets.c" /> ++ <ClCompile Include="..\lib\system\threads.c" /> ++ <ClCompile Include="..\lib\system_override.c" /> ++ <ClCompile Include="..\lib\tls-sig.c" /> ++ <ClCompile Include="..\lib\tls13-sig.c" /> ++ <ClCompile Include="..\lib\tls13\anti_replay.c" /> ++ <ClCompile Include="..\lib\tls13\certificate.c" /> ++ <ClCompile Include="..\lib\tls13\certificate_request.c" /> ++ <ClCompile Include="..\lib\tls13\certificate_verify.c" /> ++ <ClCompile Include="..\lib\tls13\early_data.c" /> ++ <ClCompile Include="..\lib\tls13\encrypted_extensions.c" /> ++ <ClCompile Include="..\lib\tls13\finished.c" /> ++ <ClCompile Include="..\lib\tls13\hello_retry.c" /> ++ <ClCompile Include="..\lib\tls13\key_update.c" /> ++ <ClCompile Include="..\lib\tls13\post_handshake.c" /> ++ <ClCompile Include="..\lib\tls13\psk_ext_parser.c" /> ++ <ClCompile Include="..\lib\tls13\session_ticket.c" /> ++ <ClCompile Include="..\lib\tpm.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_and.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_and_not.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_byname.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_C.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cc.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cf.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cn.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Co.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cs.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_L.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_LC.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Ll.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lm.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lo.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_longname.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lt.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lu.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_M.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Mc.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Me.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Mn.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_N.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_name.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Nd.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Nl.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_No.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_none.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_of.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_or.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_P.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pc.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pd.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pe.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pf.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pi.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Po.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Ps.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_S.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Sc.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Sk.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Sm.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_So.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_test.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Z.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Zl.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Zp.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Zs.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\combiningclass.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\pr_default_ignorable_code_point.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\pr_join_control.c" /> ++ <ClCompile Include="..\lib\unistring\unictype\pr_not_a_character.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\canonical-decomposition.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\compat-decomposition.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\composition.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\decompose-internal.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\decomposition-table.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\decomposition.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\nfc.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\nfd.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\nfkc.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\nfkd.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\u16-normalize.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\u32-normalize.c" /> ++ <ClCompile Include="..\lib\unistring\uninorm\u8-normalize.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-cpy.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-mbtouc-unsafe-aux.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-mbtouc-unsafe.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-mbtoucr.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-to-u8.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-uctomb-aux.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u16-uctomb.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u32-cpy.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u32-mbtouc-unsafe.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u32-to-u8.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u32-uctomb.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-check.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-cpy.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-mbtouc-unsafe-aux.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-mbtouc-unsafe.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-mbtoucr.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-to-u16.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-to-u32.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-uctomb-aux.c" /> ++ <ClCompile Include="..\lib\unistring\unistr\u8-uctomb.c" /> ++ <ClCompile Include="..\lib\urls.c" /> ++ <ClCompile Include="..\lib\verify-tofu.c" /> ++ <ClCompile Include="..\lib\x509\attributes.c" /> ++ <ClCompile Include="..\lib\x509\common.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\crl.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\crl_write.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\crq.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\dn.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\email-verify.c" /> ++ <ClCompile Include="..\lib\x509\extensions.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\hostname-verify.c" /> ++ <ClCompile Include="..\lib\x509\ip.c" /> ++ <ClCompile Include="..\lib\x509\key_decode.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\key_encode.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\krb5.c" /> ++ <ClCompile Include="..\lib\x509\mpi.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\name_constraints.c" /> ++ <ClCompile Include="..\lib\x509\ocsp.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\ocsp_output.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\output.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs12.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs12_bag.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs12_encr.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs7-attrs.c" /> ++ <ClCompile Include="..\lib\x509\pkcs7-crypt.c" /> ++ <ClCompile Include="..\lib\x509\pkcs7-output.c" /> ++ <ClCompile Include="..\lib\x509\pkcs7.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey_openssl.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey_pkcs8.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey_pkcs8_pbes1.c" /> ++ <ClCompile Include="..\lib\x509\prov-seed.c" /> ++ <ClCompile Include="..\lib\x509\sign.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\time.c" /> ++ <ClCompile Include="..\lib\x509\tls_features.c" /> ++ <ClCompile Include="..\lib\x509\verify-high.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\verify-high2.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\verify.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\virt-san.c" /> ++ <ClCompile Include="..\lib\x509\x509.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\x509_dn.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\x509_ext.c" /> ++ <ClCompile Include="..\lib\x509\x509_write.c"> ++ <ObjectFileName>$(IntDir)\x509_%(Filename).obj</ObjectFileName> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509_b64.c" /> ++ </ItemGroup> ++ <ItemGroup> ++ <None Include="libgnutls.def" /> ++ </ItemGroup> ++ <ItemGroup> ++ <YASM Include="lib\accelerated\x86\coff\aes-ssse3-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aes-ssse3-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aesni-gcm-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aesni-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aesni-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\cpuid-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\cpuid-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\e_padlock-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\e_padlock-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\ghash-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\ghash-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha1-ssse3-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha1-ssse3-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha256-avx-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha256-ssse3-x86.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='x64'">true</ExcludedFromBuild> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha256-ssse3-x86_64.asm"> ++ <ExcludedFromBuild Condition="'$(Platform)'=='Win32'">true</ExcludedFromBuild> ++ </YASM> ++ </ItemGroup> ++ <PropertyGroup Label="Globals"> ++ <ProjectGuid>{6F610EE8-7F59-4191-AB88-F63843267C02}</ProjectGuid> ++ <RootNamespace>libgnutls</RootNamespace> ++ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> ++ </PropertyGroup> ++ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ <WholeProgramOptimization>true</WholeProgramOptimization> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ <WholeProgramOptimization>true</WholeProgramOptimization> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'" Label="Configuration"> ++ <ConfigurationType>DynamicLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '14.0'">v140</PlatformToolset> ++ <PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> ++ <ImportGroup Label="ExtensionSettings"> ++ <Import Project="$(VCTargetsPath)\BuildCustomizations\yasm.props" /> ++ </ImportGroup> ++ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'" Label="PropertySheets"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <PropertyGroup Label="UserMacros" /> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>libgnutlsd</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>libgnutlsd</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutlsd</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutlsd</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutlsd</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutlsd</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>libgnutls</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>libgnutls</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>libgnutls</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>libgnutls</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutls</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'"> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutls</TargetName> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutls</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'"> ++ <IntDir>$(SolutionDir)obj\$(Configuration)\$(Platform)\$(ProjectName)\</IntDir> ++ <TargetName>gnutls</TargetName> ++ <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> ++ <CustomBuildAfterTargets>Clean</CustomBuildAfterTargets> ++ </PropertyGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;_DEBUG;DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\backport;..\lib\nettle\gost;..\lib\nettle\int;..\lib\tls13;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4133;4142;4013;4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName> ++ <MinimalRebuild>false</MinimalRebuild> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ </Link> ++ <Lib> ++ <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <TargetMachine>MachineX86</TargetMachine> ++ <SubSystem>Windows</SubSystem> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;libzlibd.lib;libhogweedd.lib;libgmpd.lib;libnettled.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ </Lib> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;_DEBUG;DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\backport;..\lib\nettle\gost;..\lib\nettle\int;..\lib\tls13;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4133;4142;4013;4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName> ++ <MinimalRebuild>false</MinimalRebuild> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ </Link> ++ <Lib> ++ <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <TargetMachine>MachineX64</TargetMachine> ++ <SubSystem>Windows</SubSystem> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;libzlibd.lib;libhogweedd.lib;libgmpd.lib;libnettled.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ </Lib> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;_DEBUG;DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <BufferSecurityCheck>true</BufferSecurityCheck> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <MinimalRebuild>false</MinimalRebuild> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <OutputFile>$(OutDir)\bin\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x86\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;zlibd.lib;hogweedd.lib;gmpd.lib;nettled.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <LargeAddressAware>true</LargeAddressAware> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <MinimumRequiredVersion>5.1</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;_DEBUG;DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <BufferSecurityCheck>true</BufferSecurityCheck> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <MinimalRebuild>false</MinimalRebuild> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <OutputFile>$(OutDir)\bin\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x86\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;libzlibd.lib;libhogweedd.lib;libgmpd.lib;libnettled.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <LargeAddressAware>true</LargeAddressAware> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <MinimumRequiredVersion>5.1</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLL|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;_DEBUG;DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <MinimalRebuild>false</MinimalRebuild> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <OutputFile>$(OutDir)\bin\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x64\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;zlibd.lib;hogweedd.lib;gmpd.lib;nettled.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <MinimumRequiredVersion>6.0</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDLLStaticDeps|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;_DEBUG;DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <MinimalRebuild>false</MinimalRebuild> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <OutputFile>$(OutDir)\bin\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x64\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;libzlibd.lib;libhogweedd.lib;libgmpd.lib;libnettled.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <MinimumRequiredVersion>6.0</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\backport;..\lib\nettle\gost;..\lib\nettle\int;..\lib\tls13;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4133;4142;4013;4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <InterproceduralOptimization>SingleFile</InterproceduralOptimization> ++ <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ </Link> ++ <Lib> ++ <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <TargetMachine>MachineX86</TargetMachine> ++ <SubSystem>Windows</SubSystem> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;libzlib.lib;libhogweed.lib;libgmp.lib;libnettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ </Lib> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir "$(OutDir)"\licenses ++copy ..\LICENSE "$(OutDir)"\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <InterproceduralOptimization>SingleFile</InterproceduralOptimization> ++ <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ </Link> ++ <Lib> ++ <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <TargetMachine>MachineX86</TargetMachine> ++ <SubSystem>Windows</SubSystem> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;libzlib.lib;libhogweed.lib;libgmp.lib;libnettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ </Lib> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\backport;..\lib\nettle\gost;..\lib\nettle\int;..\lib\tls13;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4133;4142;4013;4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <InterproceduralOptimization>SingleFile</InterproceduralOptimization> ++ <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ <AdditionalOptions> ++ </AdditionalOptions> ++ </ClCompile> ++ <Link> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ </Link> ++ <Lib> ++ <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <TargetMachine>MachineX64</TargetMachine> ++ <SubSystem>Windows</SubSystem> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;libzlib.lib;libhogweed.lib;libgmp.lib;libnettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 /NODEFAULTLIB:LIBCMT.LIB %(AdditionalOptions)</AdditionalOptions> ++ </Lib> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir "$(OutDir)"\licenses ++copy ..\LICENSE "$(OutDir)"\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseLTO|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <InterproceduralOptimization>SingleFile</InterproceduralOptimization> ++ <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ </Link> ++ <Lib> ++ <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <TargetMachine>MachineX64</TargetMachine> ++ <SubSystem>Windows</SubSystem> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;libzlib.lib;libhogweed.lib;libgmp.lib;libnettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ </Lib> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ <OutputFile>$(OutDir)\bin\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x86\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;zlib.lib;hogweed.lib;gmp.lib;nettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <LargeAddressAware>true</LargeAddressAware> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <MinimumRequiredVersion>5.1</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86;ASM_X86_32;_WIN32_WINNT=0x0502;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ <OutputFile>$(OutDir)\bin\x86\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x86\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;Ws2_32.lib;libzlib.lib;libhogweed.lib;libgmp.lib;libnettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x86\;$(ProjectDir)\..\..\prebuilt\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <LargeAddressAware>true</LargeAddressAware> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <MinimumRequiredVersion>5.1</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ <OutputFile>$(OutDir)\bin\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x64\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;zlib.lib;hogweed.lib;gmp.lib;nettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <MinimumRequiredVersion>6.0</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDLLStaticDeps|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <MultiProcessorCompilation>true</MultiProcessorCompilation> ++ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> ++ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> ++ <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations> ++ <OmitFramePointers>true</OmitFramePointers> ++ <StringPooling>true</StringPooling> ++ <PreprocessorDefinitions>HAVE_WIN32_LOCKS;HAVE_CONFIG_H;inline=__inline;ASN1_BUILDING;ASN1_STATIC;LOCALEDIR=".";__func__=__FUNCTION__;ASM_X86_64;_WIN32_WINNT=0x0A00;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <AdditionalIncludeDirectories>.\;.\lib;..\lib;..\lib\accelerated;..\lib\auth;..\lib\ext;..\lib\extras;..\lib\minitasn1;..\lib\nettle;..\lib\nettle\int;..\lib\openpgp;..\lib\opencdk;..\lib\x509;..\lib\includes;..\gl;$(OutDir)\include;..\lib\accelerated\x86;.\lib\unistring;..\lib\unistring;$(ProjectDir)\..\..\prebuilt\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> ++ <DisableSpecificWarnings>4996;4244;4018;4146;4267;4028;4101;4020;4047;4024;4005;4311;4312;4334;4116;4090;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> ++ <ObjectFileName>$(IntDir)\%(RelativeDir)\</ObjectFileName> ++ </ClCompile> ++ <Link> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ <OutputFile>$(OutDir)\bin\x64\$(TargetName)$(TargetExt)</OutputFile> ++ <ProgramDatabaseFile>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDatabaseFile> ++ <SubSystem>Windows</SubSystem> ++ <ImportLibrary>$(OutDir)\lib\x64\$(TargetName).lib</ImportLibrary> ++ <ProfileGuidedDatabase>$(IntDir)\$(TargetName).pgd</ProfileGuidedDatabase> ++ <ModuleDefinitionFile>libgnutls.def</ModuleDefinitionFile> ++ <AdditionalDependencies>Crypt32.lib;bcrypt.lib;Ws2_32.lib;libzlib.lib;libhogweed.lib;libgmp.lib;libnettle.lib;%(AdditionalDependencies)</AdditionalDependencies> ++ <AdditionalLibraryDirectories>$(OutDir)\lib\x64\;$(ProjectDir)\..\..\prebuilt\lib\x64\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> ++ <AdditionalOptions>/IGNORE:4006,4221,4042 %(AdditionalOptions)</AdditionalOptions> ++ <GenerateDebugInformation>true</GenerateDebugInformation> ++ <MinimumRequiredVersion>6.0</MinimumRequiredVersion> ++ </Link> ++ <PostBuildEvent> ++ <Command>mkdir "$(OutDir)"\include ++mkdir "$(OutDir)"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "$(OutDir)"\include\gnutls ++copy .\gnutls\gnutls.h "$(OutDir)"\include\gnutls ++mkdir $(OutDir)\licenses ++copy ..\LICENSE $(OutDir)\licenses\gnutls.txt</Command> ++ </PostBuildEvent> ++ <PreBuildEvent> ++ <Command>if exist ..\config.h ( ++del ..\config.h ++) ++if exist ..\lib\includes\gnutls\gnutls.h ( ++del ..\lib\includes\gnutls\gnutls.h ++) ++if exist ..\lib\priority_options.h ( ++del ..\lib\priority_options.h ++) ++if exist "$(OutDir)"\include\gnutls ( ++rd /s /q "$(OutDir)"\include\gnutls ++cd ../ ++cd $(ProjectDir) ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\arpa\inet.h ( ++del ..\gl\arpa\inet.h ++) ++if exist ..\gl\byteswap.h ( ++del ..\gl\\byteswap.h ++) ++if exist ..\gl\signal.h ( ++del ..\gl\signal.h ++) ++if exist ..\gl\stdio.h ( ++del ..\gl\stdio.h ++) ++if exist ..\gl\stdlib.h ( ++del ..\gl\stdlib.h ++) ++if exist ..\gl\string.h ( ++del ..\gl\string.h ++) ++if exist ..\gl\strings.h ( ++del ..\gl\strings.h ++) ++if exist ..\gl\sys\select.h ( ++del ..\gl\sys\select.h ++) ++if exist ..\gl\sys\socket.h ( ++del ..\gl\sys\socket.h ++) ++if exist ..\gl\sys\stat.h ( ++del ..\gl\sys\stat.h ++) ++if exist ..\gl\sys\time.h ( ++del ..\gl\sys\time.h ++) ++if exist ..\gl\sys\types.h ( ++del ..\gl\sys\types.h ++) ++if exist ..\gl\sys\uio.h ( ++del ..\gl\sys\uio.h ++) ++if exist ..\gl\time.h ( ++del ..\gl\time.h ++) ++if exist ..\gl\unistd.h ( ++del ..\gl\unistd.h ++) ++if exist ..\gl\wchar.h ( ++del ..\gl\wchar.h ++) ++if exist ..\gl\errno.h ( ++del ..\gl\errno.h ++)</Command> ++ </PreBuildEvent> ++ <CustomBuildStep> ++ <Message>Custom Clean Step</Message> ++ </CustomBuildStep> ++ <CustomBuildStep> ++ <Outputs>force_clean</Outputs> ++ <Command>if exist "$(OutDir)"\include\gnutls ( ++rmdir /s /q "$(OutDir)"\include\gnutls ++) ++if exist $(OutDir)\licenses\gnutls.txt ( ++del /f /q $(OutDir)\licenses\gnutls.txt ++)</Command> ++ </CustomBuildStep> ++ <YASM> ++ <PreprocessorDefinitions>__NASM_VERSION_ID__=0x02030000;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ </YASM> ++ </ItemDefinitionGroup> ++ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> ++ <ImportGroup Label="ExtensionTargets"> ++ <Import Project="$(VCTargetsPath)\BuildCustomizations\yasm.targets" /> ++ </ImportGroup> ++</Project> +\ No newline at end of file +diff --git a/SMP/libgnutls.vcxproj.filters b/SMP/libgnutls.vcxproj.filters +new file mode 100644 +index 0000000..85202ab +--- /dev/null ++++ b/SMP/libgnutls.vcxproj.filters +@@ -0,0 +1,1804 @@ ++<?xml version="1.0" encoding="utf-8"?> ++<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ++ <ItemGroup> ++ <Filter Include="Header Files"> ++ <UniqueIdentifier>{e850f24d-093f-4c30-a99c-413a7dfa71b8}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Resource Files"> ++ <UniqueIdentifier>{f18cd969-acc3-480c-9147-ea3ae1c8ba92}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files"> ++ <UniqueIdentifier>{bdd0568e-d423-4fcc-affe-6ba0c2a40f78}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib"> ++ <UniqueIdentifier>{846a84d9-f6ed-42fa-b50c-2f7863cb6f59}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib"> ++ <UniqueIdentifier>{71e41116-0a7f-426b-ac4c-8171392cfb42}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\x509"> ++ <UniqueIdentifier>{1e36f4d1-6f20-4d58-943b-cea4ad43176a}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\x509"> ++ <UniqueIdentifier>{6bc6970b-1b78-4be2-9533-f22a0e1c4e4f}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\accelerated"> ++ <UniqueIdentifier>{cacc9806-9bcd-4062-804c-4944b45f0633}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\accelerated"> ++ <UniqueIdentifier>{6687ddd2-a384-4b88-b6f1-6d8ebb43f65f}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\auth"> ++ <UniqueIdentifier>{37a0ca08-651d-420d-97c6-9c577325bdbd}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\auth"> ++ <UniqueIdentifier>{dea014de-cf7e-464e-aa39-96603d49a936}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\ext"> ++ <UniqueIdentifier>{17cfe271-8110-465e-b2b0-b2a7731203fc}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\ext"> ++ <UniqueIdentifier>{6c654e49-dc39-45e3-bb25-88a1d6df16c1}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\algorithms"> ++ <UniqueIdentifier>{3ff047f2-7e65-4a3f-8cf6-9f1cabb20c9d}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\extras"> ++ <UniqueIdentifier>{e0df656e-9c3c-41cc-8c76-e066482dd266}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\extras"> ++ <UniqueIdentifier>{d11cb355-4d28-468c-a771-99d8caaa37b8}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\minitasn1"> ++ <UniqueIdentifier>{ea53b459-c726-4e60-ae2a-e8b1942d1e04}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\minitasn1"> ++ <UniqueIdentifier>{0b42137d-60dd-4225-89f7-04f9c16bc03f}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\opencdk"> ++ <UniqueIdentifier>{a716acb9-1d19-4901-b51d-e8491cd6b1cd}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\openpgp"> ++ <UniqueIdentifier>{801859ed-a82a-4425-bc41-853a3e36c91f}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\nettle"> ++ <UniqueIdentifier>{1d37e53c-2b42-4c10-b915-8d5ea32ad5b8}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\nettle"> ++ <UniqueIdentifier>{5f3f5aa7-e3c3-4b10-bcfd-e57affb22689}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\includes"> ++ <UniqueIdentifier>{8196ba47-8e25-4785-84b7-5585d48180f0}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\includes\gnutls"> ++ <UniqueIdentifier>{a627b137-991b-4990-b694-a9b2d2c653a5}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\gl"> ++ <UniqueIdentifier>{f35f5731-aedc-4518-a473-6d2cb214104d}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\accelerated\x86"> ++ <UniqueIdentifier>{075c40f2-5cd7-4fd6-8eed-4d712901d635}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\accelerated\x86"> ++ <UniqueIdentifier>{c5ee836d-4b0b-49bc-873a-28ceb87a5faa}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\accelerated\x86\coff"> ++ <UniqueIdentifier>{8c3b1839-8bb4-46d1-9a23-50782c575e2b}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\system"> ++ <UniqueIdentifier>{76aa5080-e372-4c96-a1c7-83f54eb77073}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\nettle\int"> ++ <UniqueIdentifier>{b4e1b395-c5b4-4cca-bf0c-8b2dd4d759d6}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\nettle\int"> ++ <UniqueIdentifier>{10367618-d480-419d-a5fe-8ec68eb12027}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\unistring"> ++ <UniqueIdentifier>{abc680d5-b39e-4f85-87c0-e0aa59d89e9f}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\unistring\unictype"> ++ <UniqueIdentifier>{b9ad9166-4729-4357-995d-373469886c60}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\unistring\uninorm"> ++ <UniqueIdentifier>{fd64761c-61cb-4651-be22-593c83c644d5}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\unistring\unistr"> ++ <UniqueIdentifier>{ad287a87-3bf8-43f1-bc30-847e503bab04}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\unistring"> ++ <UniqueIdentifier>{5a6accd0-2489-4547-87f7-47aa7007346e}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\unistring\unicase"> ++ <UniqueIdentifier>{73e37f29-8dea-41f2-a47c-b7c615301f3f}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\unistring\unictype"> ++ <UniqueIdentifier>{cec5d9f9-5fa1-4465-b15c-90bc17c739c3}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\unistring\uninorm"> ++ <UniqueIdentifier>{9fdad55e-e7bb-48d5-b9bb-69e4a0a05bdc}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Header Files\lib\unistring\unistring"> ++ <UniqueIdentifier>{61d0ba14-cae2-4b4d-ba92-1e608145d2aa}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\nettle\gost"> ++ <UniqueIdentifier>{4b6e9ec2-1641-476a-a471-5c4fdd17cbdc}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\nettle\backport"> ++ <UniqueIdentifier>{acbf7848-4968-43cc-a912-95a1e5b88a7d}</UniqueIdentifier> ++ </Filter> ++ <Filter Include="Source Files\lib\tls13"> ++ <UniqueIdentifier>{3ef6a57c-114c-4352-b886-9e06e1297905}</UniqueIdentifier> ++ </Filter> ++ </ItemGroup> ++ <ItemGroup> ++ <ClInclude Include="config.h"> ++ <Filter>Header Files</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\ocsp.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\openpgp.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\pkcs11.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\pkcs12.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\tpm.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\x509.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\abstract.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\compat.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\crypto.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\dtls.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\common.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\verify-high.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\x509_int.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\cryptodev.h"> ++ <Filter>Header Files\lib\accelerated</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\accelerated.h"> ++ <Filter>Header Files\lib\accelerated</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\anon.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\cert.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\dh_common.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\ecdhe.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\psk.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\psk_passwd.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\rsa_common.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\srp_passwd.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\alpn.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\cert_type.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\dumbfw.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\ecc.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\heartbeat.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\max_record.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\safe_renegotiation.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\server_name.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\session_ticket.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\signature.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\srp.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\srtp.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\status_request.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\extras\randomart.h"> ++ <Filter>Header Files\lib\extras</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\minitasn1\element.h"> ++ <Filter>Header Files\lib\minitasn1</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\minitasn1\gstr.h"> ++ <Filter>Header Files\lib\minitasn1</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\minitasn1\int.h"> ++ <Filter>Header Files\lib\minitasn1</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\minitasn1\libtasn1.h"> ++ <Filter>Header Files\lib\minitasn1</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\minitasn1\parser_aux.h"> ++ <Filter>Header Files\lib\minitasn1</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\minitasn1\structure.h"> ++ <Filter>Header Files\lib\minitasn1</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\context.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\filters.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\keydb.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\main.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\opencdk.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\packet.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\stream.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\opencdk\types.h"> ++ <Filter>Header Files\lib\opencdk</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\openpgp\openpgp_int.h"> ++ <Filter>Header Files\lib\openpgp</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\nettle\gnettle.h"> ++ <Filter>Header Files\lib\nettle</Filter> ++ </ClInclude> ++ <ClInclude Include="version.h"> ++ <Filter>Header Files</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\self-test.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\x509-ext.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\nettle\rnd-common.h"> ++ <Filter>Header Files\lib\nettle</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\x86\aes-padlock.h"> ++ <Filter>Header Files\lib\accelerated\x86</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\x86\aes-x86.h"> ++ <Filter>Header Files\lib\accelerated\x86</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\x86\sha-padlock.h"> ++ <Filter>Header Files\lib\accelerated\x86</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\x86\sha-x86.h"> ++ <Filter>Header Files\lib\accelerated\x86</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\x86\x86-common.h"> ++ <Filter>Header Files\lib\accelerated\x86</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\accelerated\x86\aes-gcm-aead.h"> ++ <Filter>Header Files\lib\accelerated\x86</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\etm.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ext\ext_master_secret.h"> ++ <Filter>Header Files\lib\ext</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\extras\hex.h"> ++ <Filter>Header Files\lib\extras</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\system-keys.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\urls.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\pkcs7.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth\srp_kx.h"> ++ <Filter>Header Files\lib\auth</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\includes\gnutls\socket.h"> ++ <Filter>Header Files\lib\includes\gnutls</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\abstract_int.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\algorithms.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\atfork.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\auth.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\buffers.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\cipher.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\cipher_int.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\compress.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\constate.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\crypto.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\crypto-backend.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\datum.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\db.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\debug.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\dh.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\dtls.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\ecc.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\errors.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\extensions.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\file.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\fips.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\global.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\gnutls_int.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\handshake.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\hash_int.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\kx.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\locks.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\mbuffers.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\mem.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\mpi.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\num.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\pin.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\pk.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\random.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\record.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\session_pack.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\srp.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\sslv2_compat.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\state.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\str.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\str_array.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\supplemental.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\system.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\system-keys.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\tls-sig.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\urls.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\vasprintf.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509_b64.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="lib\priority_options.h"> ++ <Filter>Header Files\lib</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\nettle\int\dsa-fips.h"> ++ <Filter>Header Files\lib\nettle\int</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\nettle\int\rsa-fips.h"> ++ <Filter>Header Files\lib\nettle\int</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\openpgp\openpgp.h"> ++ <Filter>Header Files\lib\openpgp</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\ip.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\ip-in-cidr.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\krb5.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\pkcs7_int.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\virt-san.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\x509_ext_int.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unicase\special-casing-table.h"> ++ <Filter>Header Files\lib\unistring\unicase</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pc.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pd.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pe.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pf.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Pi.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Po.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Ps.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_S.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Sc.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Sk.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Sm.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_So.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Z.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Zl.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Zp.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Zs.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\combiningclass.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\pr_default_ignorable_code_point.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\pr_join_control.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\pr_not_a_character.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\bitmap.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_C.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cc.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cf.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cn.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Co.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Cs.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_L.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_LC.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Ll.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lm.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lo.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lt.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Lu.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_M.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Mc.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Me.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Mn.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_N.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Nd.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_Nl.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_No.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_of.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unictype\categ_P.h"> ++ <Filter>Header Files\lib\unistring\unictype</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\composition-table.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\decompose-internal.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\decomposition-table.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\decomposition-table1.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\decomposition-table2.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\normalize-internal.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\uninorm\u-normalize-internal.h"> ++ <Filter>Header Files\lib\unistring\uninorm</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\unistring\unistr\u-cpy.h"> ++ <Filter>Header Files\lib\unistring\unistring</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\attributes.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ <ClInclude Include="..\lib\x509\prov-seed.h"> ++ <Filter>Header Files\lib\x509</Filter> ++ </ClInclude> ++ </ItemGroup> ++ <ItemGroup> ++ <ClCompile Include="..\lib\x509\pkcs7.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs12.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs12_bag.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs12_encr.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey_openssl.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey_pkcs8.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\sign.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\verify.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\verify-high.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\verify-high2.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\x509.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\x509_dn.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\x509_write.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\common.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\crl.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\crl_write.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\crq.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\dn.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\extensions.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\key_decode.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\key_encode.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\mpi.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\ocsp.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\ocsp_output.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\output.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\cryptodev-gcm.c"> ++ <Filter>Source Files\lib\accelerated</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\accelerated.c"> ++ <Filter>Source Files\lib\accelerated</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\cryptodev.c"> ++ <Filter>Source Files\lib\accelerated</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\dhe_psk.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\ecdhe.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\psk.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\psk_passwd.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\rsa.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\rsa_psk.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\srp_passwd.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\srp_rsa.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\srp_sb64.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\anon.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\anon_ecdh.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\cert.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\dh_common.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\dhe.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\extras\randomart.c"> ++ <Filter>Source Files\lib\extras</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\parser_aux.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\structure.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\version.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\coding.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\decoding.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\element.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\errors.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\minitasn1\gstr.c"> ++ <Filter>Source Files\lib\minitasn1</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\mac.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\mpi.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\pk.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\cipher.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\init.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\gl\c-ctype.c"> ++ <Filter>Source Files\gl</Filter> ++ </ClCompile> ++ <ClCompile Include="..\gl\read-file.c"> ++ <Filter>Source Files\gl</Filter> ++ </ClCompile> ++ <ClCompile Include="..\gl\hash-pjw-bare.c"> ++ <Filter>Source Files\gl</Filter> ++ </ClCompile> ++ <ClCompile Include="..\gl\msvc-nothrow.c"> ++ <Filter>Source Files\gl</Filter> ++ </ClCompile> ++ <ClCompile Include="..\gl\msvc-inval.c"> ++ <Filter>Source Files\gl</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\rnd.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\name_constraints.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\x509_ext.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\x86-common.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-pclmul.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-ssse3.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-padlock.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\hmac-padlock.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\hmac-x86-ssse3.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\sha-padlock.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\sha-x86-ssse3.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-cbc-x86-aesni.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-cbc-x86-ssse3.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-padlock.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-aesni.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-ccm-x86-aesni.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\extras\hex.c"> ++ <Filter>Source Files\lib\extras</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\email-verify.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\hostname-verify.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs7-attrs.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs7-output.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\gl\secure_getenv.c"> ++ <Filter>Source Files\gl</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\accelerated\x86\aes-gcm-x86-pclmul-avx.c"> ++ <Filter>Source Files\lib\accelerated\x86</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth\srp_kx.c"> ++ <Filter>Source Files\lib\auth</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system\certs.c"> ++ <Filter>Source Files\lib\system</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system\fastopen.c"> ++ <Filter>Source Files\lib\system</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system\keys-win.c"> ++ <Filter>Source Files\lib\system</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system\sockets.c"> ++ <Filter>Source Files\lib\system</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system\threads.c"> ++ <Filter>Source Files\lib\system</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\sysrng-windows.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\ip.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\krb5.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\pkcs7-crypt.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\privkey_pkcs8_pbes1.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\tls_features.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\virt-san.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Sm.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_So.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_test.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Z.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Zl.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Zp.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Zs.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\combiningclass.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\pr_default_ignorable_code_point.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\pr_join_control.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\pr_not_a_character.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_and.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_and_not.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_byname.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_C.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cc.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cf.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cn.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Co.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Cs.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_L.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_LC.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Ll.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lm.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lo.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_longname.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lt.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Lu.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_M.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Mc.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Me.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Mn.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_N.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_name.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Nd.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Nl.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_No.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_none.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_of.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_or.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_P.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pc.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pd.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pe.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pf.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Pi.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Po.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Ps.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_S.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Sc.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unictype\categ_Sk.c"> ++ <Filter>Source Files\lib\unistring\unictype</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\u32-normalize.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\canonical-decomposition.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\compat-decomposition.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\composition.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\decompose-internal.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\decomposition.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\decomposition-table.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\nfc.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\nfd.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\nfkc.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\nfkd.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\u8-normalize.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\uninorm\u16-normalize.c"> ++ <Filter>Source Files\lib\unistring\uninorm</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-mbtouc-unsafe-aux.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-to-u16.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-to-u32.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-uctomb.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-uctomb-aux.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-cpy.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-mbtoucr.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-mbtouc-unsafe.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-mbtouc-unsafe-aux.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-to-u8.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-uctomb.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u16-uctomb-aux.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u32-cpy.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u32-mbtouc-unsafe.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u32-to-u8.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u32-uctomb.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-check.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-cpy.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-mbtoucr.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\unistring\unistr\u8-mbtouc-unsafe.c"> ++ <Filter>Source Files\lib\unistring\unistr</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\time.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\attributes.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509\prov-seed.c"> ++ <Filter>Source Files\lib\x509</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\early_data.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\ec_point_formats.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\etm.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\ext_master_secret.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\heartbeat.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\key_share.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\max_record.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\post_handshake.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\pre_shared_key.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\psk_ke_modes.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\record_size_limit.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\safe_renegotiation.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\server_cert_type.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\server_name.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\session_ticket.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\signature.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\srp.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\srtp.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\status_request.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\supported_groups.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\supported_versions.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\alpn.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\client_cert_type.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\cookie.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ext\dumbfw.c"> ++ <Filter>Source Files\lib\ext</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gost-hash.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\gost28147.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\gostdsa-mask.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\gostdsa-sign.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\gostdsa-verify.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\gosthash94.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\gosthash94-meta.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\hmac-gosthash94.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\hmac-streebog.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\pbkdf2-hmac-gosthash94.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\pbkdf2-hmac-streebog.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\streebog.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\streebog-meta.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\bignum-le.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gost256cpa.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gost512a.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gostdsa-sign.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\gost\ecc-gostdsa-verify.c"> ++ <Filter>Source Files\lib\nettle\gost</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\backport\cfb8.c"> ++ <Filter>Source Files\lib\nettle\backport</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\backport\cmac.c"> ++ <Filter>Source Files\lib\nettle\backport</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\certificate_request.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\certificate_verify.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\early_data.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\encrypted_extensions.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\finished.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\hello_retry.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\key_update.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\post_handshake.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\psk_ext_parser.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\session_ticket.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\anti_replay.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13\certificate.c"> ++ <Filter>Source Files\lib\tls13</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\gnutls_asn1_tab.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\handshake.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\handshake-checks.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\handshake-tls13.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\hash_int.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\hello_ext.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\hello_ext_lib.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\kx.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\locks.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\mbuffers.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\mem.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\mpi.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\num.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ocsp-api.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\openpgp_compat.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pcert.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pin.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pk.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_int.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_privkey.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_secret.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11_write.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkcs11x.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pkix_asn1_tab.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\prf.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\priority.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\privkey.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\privkey_raw.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\psk.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\pubkey.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\random.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\randomart.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\range.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\record.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\safe-memfuncs.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\secrets.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\session.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\session_pack.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\srp.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\sslv2_compat.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\state.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\stek.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\str.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\str-iconv.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\str-idna.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\str-unicode.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\supplemental.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\system_override.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls13-sig.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tls-sig.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\tpm.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\urls.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\verify-tofu.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\x509_b64.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\alert.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\anon_cred.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\atfork.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auth.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\auto-verify.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\buffers.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cert-cred.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cert-cred-rawpk.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cert-cred-x509.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cert-session.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cipher.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cipher_int.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\cipher-cbc.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\compress.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\constate.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\crypto-api.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\crypto-backend.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\crypto-selftests.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\crypto-selftests-pk.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\datum.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\db.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\debug.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\dh.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\dh-primes.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\dh-session.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\dtls.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\dtls-sw.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\ecc.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\errors.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\extv.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\file.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\fingerprint.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\fips.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\global.c"> ++ <Filter>Source Files\lib</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\ciphers.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\ciphersuites.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\ecc.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\groups.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\kx.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\mac.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\protocols.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\publickey.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\secparams.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\sign.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\algorithms\cert_types.c"> ++ <Filter>Source Files\lib\algorithms</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\prf.c"> ++ <Filter>Source Files\lib\nettle</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\drbg-aes-self-test.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\dsa-keygen-fips186.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\dsa-validate.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\provable-prime.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\rsa-keygen-fips186.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\tls1-prf.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ <ClCompile Include="..\lib\nettle\int\drbg-aes.c"> ++ <Filter>Source Files\lib\nettle\int</Filter> ++ </ClCompile> ++ </ItemGroup> ++ <ItemGroup> ++ <None Include="libgnutls.def"> ++ <Filter>Resource Files</Filter> ++ </None> ++ </ItemGroup> ++ <ItemGroup> ++ <YASM Include="lib\accelerated\x86\coff\aesni-gcm-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aesni-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aesni-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aes-ssse3-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\aes-ssse3-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\cpuid-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\cpuid-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\e_padlock-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\e_padlock-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\ghash-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\ghash-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha1-ssse3-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha1-ssse3-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha256-ssse3-x86.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha256-avx-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ <YASM Include="lib\accelerated\x86\coff\sha256-ssse3-x86_64.asm"> ++ <Filter>Source Files\lib\accelerated\x86\coff</Filter> ++ </YASM> ++ </ItemGroup> ++</Project> +\ No newline at end of file +diff --git a/SMP/libgnutls_deps.sln b/SMP/libgnutls_deps.sln +new file mode 100644 +index 0000000..03cf8e4 +--- /dev/null ++++ b/SMP/libgnutls_deps.sln +@@ -0,0 +1,195 @@ ++ ++Microsoft Visual Studio Solution File, Format Version 12.00 ++VisualStudioVersion = 12.0.30501.0 ++MinimumVisualStudioVersion = 12.0.30501.0 ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgnutls", "libgnutls.vcxproj", "{6F610EE8-7F59-4191-AB88-F63843267C02}" ++ ProjectSection(ProjectDependencies) = postProject ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2} = {02B94302-23D6-43EF-8865-95CDE99D5DC2} ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518} = {070FEF2B-0C3F-4F33-9D3C-53C7330BF518} ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32} = {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32} ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C} = {200F3D3C-8B84-46D8-953A-6C0EBD283B5C} ++ EndProjectSection ++EndProject ++Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dependencies", "dependencies", "{653672DB-3E16-4696-981A-81294116434F}" ++EndProject ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhogweed", "..\..\nettle\SMP\libhogweed.vcxproj", "{200F3D3C-8B84-46D8-953A-6C0EBD283B5C}" ++ ProjectSection(ProjectDependencies) = postProject ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2} = {02B94302-23D6-43EF-8865-95CDE99D5DC2} ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518} = {070FEF2B-0C3F-4F33-9D3C-53C7330BF518} ++ EndProjectSection ++EndProject ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnettle", "..\..\nettle\SMP\libnettle.vcxproj", "{070FEF2B-0C3F-4F33-9D3C-53C7330BF518}" ++EndProject ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgmp", "..\..\gmp\SMP\libgmp.vcxproj", "{02B94302-23D6-43EF-8865-95CDE99D5DC2}" ++EndProject ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libzlib", "..\..\zlib\SMP\libzlib.vcxproj", "{CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}" ++EndProject ++Global ++ GlobalSection(SolutionConfigurationPlatforms) = preSolution ++ Debug|x64 = Debug|x64 ++ Debug|x86 = Debug|x86 ++ DebugDLL|x64 = DebugDLL|x64 ++ DebugDLL|x86 = DebugDLL|x86 ++ DebugDLLStaticDeps|x64 = DebugDLLStaticDeps|x64 ++ DebugDLLStaticDeps|x86 = DebugDLLStaticDeps|x86 ++ Release|x64 = Release|x64 ++ Release|x86 = Release|x86 ++ ReleaseDLL|x64 = ReleaseDLL|x64 ++ ReleaseDLL|x86 = ReleaseDLL|x86 ++ ReleaseDLLStaticDeps|x64 = ReleaseDLLStaticDeps|x64 ++ ReleaseDLLStaticDeps|x86 = ReleaseDLLStaticDeps|x86 ++ ReleaseLTO|x64 = ReleaseLTO|x64 ++ ReleaseLTO|x86 = ReleaseLTO|x86 ++ EndGlobalSection ++ GlobalSection(ProjectConfigurationPlatforms) = postSolution ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x64.ActiveCfg = Debug|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x64.Build.0 = Debug|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x86.ActiveCfg = Debug|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Debug|x86.Build.0 = Debug|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x64.Build.0 = DebugDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x86.ActiveCfg = DebugDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLL|x86.Build.0 = DebugDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x64.ActiveCfg = DebugDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x64.Build.0 = DebugDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x86.ActiveCfg = DebugDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.DebugDLLStaticDeps|x86.Build.0 = DebugDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x64.ActiveCfg = Release|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x64.Build.0 = Release|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x86.ActiveCfg = Release|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.Release|x86.Build.0 = Release|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x64.ActiveCfg = ReleaseDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x64.Build.0 = ReleaseDLLStaticDeps|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x86.ActiveCfg = ReleaseDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseDLLStaticDeps|x86.Build.0 = ReleaseDLLStaticDeps|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x64.ActiveCfg = ReleaseLTO|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32 ++ {6F610EE8-7F59-4191-AB88-F63843267C02}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Debug|x64.ActiveCfg = Debug|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Debug|x64.Build.0 = Debug|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Debug|x86.ActiveCfg = Debug|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Debug|x86.Build.0 = Debug|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLL|x64.Build.0 = DebugDLL|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLL|x86.ActiveCfg = DebugDLL|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLL|x86.Build.0 = DebugDLL|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLLStaticDeps|x64.ActiveCfg = Debug|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLLStaticDeps|x64.Build.0 = Debug|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLLStaticDeps|x86.ActiveCfg = Debug|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.DebugDLLStaticDeps|x86.Build.0 = Debug|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release|x64.ActiveCfg = Release|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release|x64.Build.0 = Release|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release|x86.ActiveCfg = Release|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.Release|x86.Build.0 = Release|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLLStaticDeps|x64.ActiveCfg = Release|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLLStaticDeps|x64.Build.0 = Release|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLLStaticDeps|x86.ActiveCfg = Release|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseDLLStaticDeps|x86.Build.0 = Release|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x64.ActiveCfg = ReleaseLTO|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32 ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Debug|x64.ActiveCfg = Debug|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Debug|x64.Build.0 = Debug|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Debug|x86.ActiveCfg = Debug|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Debug|x86.Build.0 = Debug|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLL|x64.Build.0 = DebugDLL|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLL|x86.ActiveCfg = DebugDLL|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLL|x86.Build.0 = DebugDLL|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLLStaticDeps|x64.ActiveCfg = Debug|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLLStaticDeps|x64.Build.0 = Debug|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLLStaticDeps|x86.ActiveCfg = Debug|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.DebugDLLStaticDeps|x86.Build.0 = Debug|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release|x64.ActiveCfg = Release|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release|x64.Build.0 = Release|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release|x86.ActiveCfg = Release|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.Release|x86.Build.0 = Release|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLLStaticDeps|x64.ActiveCfg = Release|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLLStaticDeps|x64.Build.0 = Release|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLLStaticDeps|x86.ActiveCfg = Release|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseDLLStaticDeps|x86.Build.0 = Release|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x64.ActiveCfg = ReleaseLTO|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32 ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Debug|x64.ActiveCfg = Debug|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Debug|x64.Build.0 = Debug|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Debug|x86.ActiveCfg = Debug|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Debug|x86.Build.0 = Debug|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLL|x64.Build.0 = DebugDLL|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLL|x86.ActiveCfg = DebugDLL|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLL|x86.Build.0 = DebugDLL|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLLStaticDeps|x64.ActiveCfg = Debug|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLLStaticDeps|x64.Build.0 = Debug|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLLStaticDeps|x86.ActiveCfg = Debug|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.DebugDLLStaticDeps|x86.Build.0 = Debug|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release|x64.ActiveCfg = Release|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release|x64.Build.0 = Release|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release|x86.ActiveCfg = Release|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.Release|x86.Build.0 = Release|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLLStaticDeps|x64.ActiveCfg = Release|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLLStaticDeps|x64.Build.0 = Release|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLLStaticDeps|x86.ActiveCfg = Release|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseDLLStaticDeps|x86.Build.0 = Release|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x64.ActiveCfg = ReleaseLTO|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32 ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Debug|x64.ActiveCfg = Debug|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Debug|x64.Build.0 = Debug|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Debug|x86.ActiveCfg = Debug|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Debug|x86.Build.0 = Debug|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLL|x64.Build.0 = DebugDLL|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLL|x86.ActiveCfg = DebugDLL|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLL|x86.Build.0 = DebugDLL|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLLStaticDeps|x64.ActiveCfg = Debug|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLLStaticDeps|x64.Build.0 = Debug|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLLStaticDeps|x86.ActiveCfg = Debug|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.DebugDLLStaticDeps|x86.Build.0 = Debug|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release|x64.ActiveCfg = Release|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release|x64.Build.0 = Release|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release|x86.ActiveCfg = Release|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.Release|x86.Build.0 = Release|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLL|x86.ActiveCfg = ReleaseDLL|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLL|x86.Build.0 = ReleaseDLL|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLLStaticDeps|x64.ActiveCfg = Release|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLLStaticDeps|x64.Build.0 = Release|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLLStaticDeps|x86.ActiveCfg = Release|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseDLLStaticDeps|x86.Build.0 = Release|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x64.ActiveCfg = ReleaseLTO|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x64.Build.0 = ReleaseLTO|x64 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x86.ActiveCfg = ReleaseLTO|Win32 ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32}.ReleaseLTO|x86.Build.0 = ReleaseLTO|Win32 ++ EndGlobalSection ++ GlobalSection(SolutionProperties) = preSolution ++ HideSolutionNode = FALSE ++ EndGlobalSection ++ GlobalSection(NestedProjects) = preSolution ++ {200F3D3C-8B84-46D8-953A-6C0EBD283B5C} = {653672DB-3E16-4696-981A-81294116434F} ++ {070FEF2B-0C3F-4F33-9D3C-53C7330BF518} = {653672DB-3E16-4696-981A-81294116434F} ++ {02B94302-23D6-43EF-8865-95CDE99D5DC2} = {653672DB-3E16-4696-981A-81294116434F} ++ {CA9A4A38-CC63-4BDB-8CFB-E058965DDA32} = {653672DB-3E16-4696-981A-81294116434F} ++ EndGlobalSection ++EndGlobal +diff --git a/SMP/project_get_dependencies.bat b/SMP/project_get_dependencies.bat +new file mode 100644 +index 0000000..91fd902 +--- /dev/null ++++ b/SMP/project_get_dependencies.bat +@@ -0,0 +1,161 @@ ++@ECHO OFF ++SETLOCAL EnableDelayedExpansion ++ ++SET UPSTREAMURL=https://github.com/ShiftMediaProject ++SET DEPENDENCIES=( ^ ++nettle, ^ ++zlib, ^ ++gmp ^ ++) ++ ++REM Get passed in list of dependencies to skip ++SET PASSDEPENDENCIES=%~1 ++ ++REM Check if git is installed and available ++IF "%MSVC_VER%"=="" ( ++ git status >NUL 2>&1 ++ IF ERRORLEVEL 1 ( ++ ECHO A working copy of git was not found. To use this script you must first install git for windows. ++ GOTO exitOnError ++ ) ++) ++ ++REM Store current directory and ensure working directory is the location of current .bat ++SET CURRDIR="%CD%" ++cd "%~dp0" ++ ++REM Initialise error check value ++SET ERROR=0 ++ ++cd ..\.. ++FOR %%I IN %DEPENDENCIES% DO ( ++ ECHO !PASSDEPENDENCIES! | FINDSTR /C:"%%I" >NUL 2>&1 || ( ++ REM Check if MSVC_VER environment variable is set ++ IF "%MSVC_VER%"=="" ( ++ CALL :cloneOrUpdateRepo "%%I" || GOTO exitOnError ++ ) ELSE ( ++ CALL :downloadLibs "%%I" || GOTO exitOnError ++ ) ++ ) ++) ++cd "%CURRDIR%" >NUL ++GOTO exit ++ ++REM Function to clone or update a repo ++REM cloneOrUpdateRepo: RepoName ++REM RepoName = Name of the repository ++:cloneOrUpdateRepo ++SET REPONAME=%~1 ++REM Check if the repo folder already exists ++IF EXIST "%REPONAME%" ( ++ ECHO %REPONAME%: Existing folder found. Checking for updates... ++ cd %REPONAME% ++ REM Check if any updates are available ++ FOR /f %%J IN ('git rev-parse HEAD') do set CURRHEAD=%%J ++ FOR /f %%J IN ('git ls-remote origin HEAD') do set ORIGHEAD=%%J ++ IF "!CURRHEAD!"=="!ORIGHEAD!" ( ++ ECHO %REPONAME%: Repository up to date. ++ ) ELSE ( ++ REM Stash any uncommited changes then update from origin ++ ECHO %REPONAME%: Updates available. Updating repository... ++ git checkout master --quiet ++ git stash --quiet ++ git pull origin master --quiet -ff ++ git stash pop --quiet ++ ) ++ cd ..\ ++) ELSE ( ++ ECHO %REPONAME%: Existing folder not found. Cloning repository... ++ REM Clone from the origin repo ++ SET REPOURL=%UPSTREAMURL%/%REPONAME%.git ++ git clone !REPOURL! --quiet ++ IF ERRORLEVEL 1 ( ++ ECHO %REPONAME%: Git clone failed. ++ GOTO exitOnError ++ ) ++ REM Initialise autocrlf options to fix cross platform interoperation ++ REM Once updated the repo needs to be reset to correct the local line endings ++ cd %REPONAME% ++ git config --local core.autocrlf false ++ git rm --cached -r . --quiet ++ git reset --hard --quiet ++ cd ..\ ++) ++REM Add current repo to list of already passed dependencies ++SET PASSDEPENDENCIES=%PASSDEPENDENCIES% %REPONAME% ++REM Check if the repo itself has required dependencies ++IF EXIST "%REPONAME%\SMP\project_get_dependencies.bat" ( ++ ECHO %REPONAME%: Found additional dependencies... ++ ECHO. ++ cd %REPONAME%\SMP ++ project_get_dependencies.bat "!PASSDEPENDENCIES!" || EXIT /B 1 ++ cd ..\.. ++) ++ECHO. ++EXIT /B %ERRORLEVEL% ++ ++REM Function to download existing prebuilt libraries ++REM downloadLibs: RepoName ++REM RepoName = Name of the repository ++:downloadLibs ++SET REPONAME=%~1 ++REM Get latest release ++ECHO %REPONAME%: Getting latest release... ++SET UPSTREAMAPIURL=%UPSTREAMURL:github.com=api.github.com/repos% ++REM Check if secure OAuth is available ++IF "%GITHUBTOKEN%" == "" ( ++ powershell -nologo -noprofile -command "$currentMaxTls = [Math]::Max([Net.ServicePointManager]::SecurityProtocol.value__,[Net.SecurityProtocolType]::Tls.value__);$newTlsTypes = [enum]::GetValues('Net.SecurityProtocolType') | ?{ $_ -gt $currentMaxTls };ForEach ($newTls in $newTlsTypes) { [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor $newTls };try { Invoke-RestMethod -Uri %UPSTREAMAPIURL%/%REPONAME%/releases/latest > latest.json } catch {exit 1}" ++) ELSE ( ++ powershell -nologo -noprofile -command "$currentMaxTls = [Math]::Max([Net.ServicePointManager]::SecurityProtocol.value__,[Net.SecurityProtocolType]::Tls.value__);$newTlsTypes = [enum]::GetValues('Net.SecurityProtocolType') | ?{ $_ -gt $currentMaxTls };ForEach ($newTls in $newTlsTypes) { [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor $newTls };try { Invoke-RestMethod -Uri %UPSTREAMAPIURL%/%REPONAME%/releases/latest -Headers @{'Authorization' = 'token %GITHUBTOKEN%'} > latest.json } catch {exit 1}" ++) ++IF ERRORLEVEL 1 ( ECHO Failed getting latest %REPONAME% release & EXIT /B 1 ) ++REM Get tag for latest release ++FOR /F "tokens=* USEBACKQ" %%F IN (`TYPE latest.json ^| FINDSTR /B "tag_name"`) DO SET TAG=%%F ++FOR /F "tokens=2 delims=: " %%F in ("%TAG%") DO SET TAG=%%F ++IF "%TAG%"=="" ( ECHO Failed getting latest %REPONAME% release tag information & EXIT /B 1 ) ++REM Get download name of latest release ++SET LIBNAME= ++FOR /F "tokens=* USEBACKQ" %%F IN (`TYPE latest.json ^| FINDSTR "name="`) DO ( SET TEMPF=%%F ++ SET TEMPF=!TEMPF:*name=! ++ IF "!TEMPF:~1,3!"=="lib" ( SET LIBNAME=!TEMPF:~1! ) ++) ++FOR /F "tokens=1 delims=_" %%F in ("%LIBNAME%") DO SET LIBNAME=%%F ++IF "%LIBNAME%"=="" ( ECHO Failed getting latest %REPONAME% release name information & EXIT /B 1 ) ++DEL /F /Q latest.json ++REM Get the download location for the required tag ++SET TAG2=%TAG:+=.% ++SET DLURL=%UPSTREAMURL%/%REPONAME%/releases/download/%TAG%/%LIBNAME%_%TAG2%_msvc%MSVC_VER%.zip ++REM Download a pre-built archive and extract ++ECHO %REPONAME%: Downloading %LIBNAME%_%TAG%_msvc%MSVC_VER%.zip... ++SET PREBUILTDIR=prebuilt ++MKDIR %PREBUILTDIR% >NUL 2>&1 ++powershell -nologo -noprofile -command "$currentMaxTls = [Math]::Max([Net.ServicePointManager]::SecurityProtocol.value__,[Net.SecurityProtocolType]::Tls.value__);$newTlsTypes = [enum]::GetValues('Net.SecurityProtocolType') | ?{ $_ -gt $currentMaxTls };ForEach ($newTls in $newTlsTypes) { [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor $newTls };try { (New-Object Net.WebClient).DownloadFile('%DLURL%', '%PREBUILTDIR%\temp.zip') } catch {exit 1}" ++IF ERRORLEVEL 1 ( ECHO Failed downloading %DLURL% & EXIT /B 1 ) ++powershell -nologo -noprofile -command "Add-Type -AssemblyName System.IO.Compression.FileSystem; $zip=[System.IO.Compression.ZipFile]::OpenRead('%PREBUILTDIR%\temp.zip'); foreach ($item in $zip.Entries) { try {$file=(Join-Path -Path .\%PREBUILTDIR% -ChildPath $item.FullName); $null=[System.IO.Directory]::CreateDirectory((Split-Path -Path $file)); [System.IO.Compression.ZipFileExtensions]::ExtractToFile($item,$file,$true)} catch {exit 1} }" ++IF ERRORLEVEL 1 ( ECHO Failed extracting downloaded archive & EXIT /B 1 ) ++DEL /F /Q %PREBUILTDIR%\\temp.zip ++ECHO. ++EXIT /B %ERRORLEVEL% ++ ++:exitOnError ++cd "%CURRDIR%" ++SET ERROR=1 ++ ++:exit ++REM Directly exit if an AppVeyor build ++IF NOT "%APPVEYOR%"=="" ( ++ GOTO return ++) ++REM Return the passed dependency list ++( ++ ENDLOCAL ++ SET PASSDEPENDENCIES=%PASSDEPENDENCIES% ++) ++ ++REM Check if this was launched from an existing terminal or directly from .bat ++REM If launched by executing the .bat then pause on completion ++ECHO %CMDCMDLINE% | FINDSTR /L %COMSPEC% >NUL 2>&1 ++IF %ERRORLEVEL% == 0 IF "%~1"=="" PAUSE ++ ++:return ++EXIT /B %ERROR% +\ No newline at end of file +diff --git a/SMP/readme.txt b/SMP/readme.txt +new file mode 100644 +index 0000000..fa73ea3 +--- /dev/null ++++ b/SMP/readme.txt +@@ -0,0 +1,16 @@ ++ ++This is a small list of steps in order to build gnutls into a msvc DLL and lib file. ++ ++The project contains Release and Debug builds for static lib files (Debug/Release) ++ as well as dynamic shared dll files (DebugDLL/ReleaseDLL). ++Choose whichever project configuration meets your requirements. ++ ++ ++*** Building with YASM *** ++ ++In order to build gmp using msvc you must first download and install YASM. ++YASM is required to compile all gmp assembly files. ++ ++1) Visual Studio YASM integration can be downloaded from https://github.com/ShiftMediaProject/VSYASM/releases/latest ++ ++2) Once downloaded simply follow the install instructions included in the download. +\ No newline at end of file +diff --git a/SMP/stdio.h b/SMP/stdio.h +new file mode 100644 +index 0000000..1f97403 +--- /dev/null ++++ b/SMP/stdio.h +@@ -0,0 +1,147 @@ ++/* ++ * MSVC stdio.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_STDIO_H ++#define SMP_STDIO_H ++ ++#ifndef _MSC_VER ++# include_next <stdio.h> ++#else ++ ++#include <crtversion.h> ++#if _VC_CRT_MAJOR_VERSION >= 14 ++# include <../ucrt/stdio.h> ++#else ++# include <../include/stdio.h> ++# define snprintf _snprintf ++#endif ++ ++#include <unistd.h> ++#include <limits.h> ++#include <stdint.h> ++#include <stdlib.h> ++#include <errno.h> ++#include <stdarg.h> ++ ++#ifndef SSIZE_MAX ++# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) ++#endif ++ ++static __inline ssize_t getdelim(char **lineptr, size_t *n, int delimiter, FILE *fp) ++{ ++ ssize_t result; ++ size_t cur_len = 0; ++ ++ if (lineptr == NULL || n == NULL || fp == NULL) { ++ errno = EINVAL; ++ return -1; ++ } ++ if (*lineptr == NULL || *n == 0) { ++ char *new_lineptr; ++ *n = 120; ++ new_lineptr = (char *)realloc(*lineptr, *n); ++ if (new_lineptr == NULL) { ++ result = -1; ++ return result; ++ } ++ *lineptr = new_lineptr; ++ } ++ ++ for (;;) { ++ int i; ++ i = getc(fp); ++ if (i == EOF) { ++ result = -1; ++ break; ++ } ++ if (cur_len + 1 >= *n) { ++ size_t needed_max = SSIZE_MAX < SIZE_MAX ? (size_t)SSIZE_MAX + 1 : SIZE_MAX; ++ size_t needed = 2 * *n + 1; ++ char *new_lineptr; ++ if (needed_max < needed) { ++ needed = needed_max; ++ } ++ if (cur_len + 1 >= needed) { ++ result = -1; ++ errno = EOVERFLOW; ++ return result; ++ } ++ new_lineptr = (char *)realloc(*lineptr, needed); ++ if (new_lineptr == NULL) { ++ result = -1; ++ return result; ++ } ++ *lineptr = new_lineptr; ++ *n = needed; ++ } ++ (*lineptr)[cur_len] = i; ++ cur_len++; ++ if (i == delimiter) { ++ break; ++ } ++ } ++ (*lineptr)[cur_len] = '\0'; ++ result = cur_len ? cur_len : result; ++ ++ return result; ++} ++ ++static __inline ssize_t getline(char **lineptr, size_t *n, FILE *stream) ++{ ++ return getdelim(lineptr, n, '\n', stream); ++} ++ ++static __inline int vasprintf(char **res, char const *fmt, va_list args) ++{ ++ int r, sz = _vscprintf(fmt, args); ++ if (sz >= 0) { ++ if ((*res = malloc(sz + 1)) == NULL) { ++ return -1; ++ } ++ r = vsnprintf(*res, sz + 1, fmt, args); ++ if ((r < 0) || (r > sz)) { ++ free(*res); ++ *res = NULL; ++ return -1; ++ } ++ return r; ++ } else { ++ return -1; ++ } ++} ++ ++static __inline int asprintf(char **strp, const char *fmt, ...) ++{ ++ int r; ++ va_list ap; ++ va_start(ap, fmt); ++ r = vasprintf(strp, fmt, ap); ++ va_end(ap); ++ return(r); ++} ++ ++#define fseeko _fseeki64 ++#define ftello _ftelli64 ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_STDIO_H */ +\ No newline at end of file +diff --git a/SMP/string.h b/SMP/string.h +new file mode 100644 +index 0000000..39854ea +--- /dev/null ++++ b/SMP/string.h +@@ -0,0 +1,130 @@ ++/* ++ * MSVC string.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_STRING_H ++#define SMP_STRING_H ++ ++#ifndef _MSC_VER ++# include_next <string.h> ++#else ++ ++#include <crtversion.h> ++#if _VC_CRT_MAJOR_VERSION >= 14 ++# include <../ucrt/string.h> ++#else ++# include <../include/string.h> ++# define strtoll _strtoi64 ++#endif ++ ++static __inline void *memmem(const void *haystack, size_t haystack_len, const void *needle, size_t needle_len) ++{ ++ const char *begin = haystack; ++ const char *last_possible = begin + haystack_len - needle_len; ++ const char *tail = needle; ++ char point; ++ ++ if (needle_len == 0) ++ return (void *)begin; ++ ++ if (haystack_len < needle_len) ++ return NULL; ++ ++ point = *tail++; ++ for (; begin <= last_possible; begin++) { ++ if (*begin == point && !memcmp(begin + 1, tail, needle_len - 1)) ++ return (void *)begin; ++ } ++ ++ return NULL; ++} ++ ++#include <stdint.h> ++#include <ctype.h> ++ ++#define S_N 0x0 ++#define S_I 0x3 ++#define S_F 0x6 ++#define S_Z 0x9 ++ ++#define CMP 2 ++#define LEN 3 ++ ++static __inline int strverscmp(const char *s1, const char *s2) ++{ ++ const unsigned char *p1 = (const unsigned char *)s1; ++ const unsigned char *p2 = (const unsigned char *)s2; ++ ++ const uint8_t next_state[] = ++ { ++ /* state x d 0 */ ++ /* S_N */ S_N, S_I, S_Z, ++ /* S_I */ S_N, S_I, S_I, ++ /* S_F */ S_N, S_F, S_F, ++ /* S_Z */ S_N, S_F, S_Z ++ }; ++ ++ const int8_t result_type[] = ++ { ++ /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, ++ /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN, ++ /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, ++ /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP ++ }; ++ ++ if (p1 == p2) ++ return 0; ++ unsigned char c1 = *p1++; ++ unsigned char c2 = *p2++; ++ int state = S_N + ((c1 == '0') + (isdigit(c1) != 0)); ++ int diff; ++ while ((diff = c1 - c2) == 0) { ++ if (c1 == '\0') { ++ return diff; ++ } ++ state = next_state[state]; ++ c1 = *p1++; ++ c2 = *p2++; ++ state += (c1 == '0') + (isdigit(c1) != 0); ++ } ++ state = result_type[state * 3 + (((c2 == '0') + (isdigit(c2) != 0)))]; ++ switch (state) { ++ case CMP: ++ return diff; ++ case LEN: ++ while (isdigit(*p1++)) { ++ if (!isdigit(*p2++)) { ++ return 1; ++ } ++ } ++ return isdigit(*p2) ? -1 : diff; ++ default: ++ return state; ++ } ++} ++ ++#define strtok_r strtok_s ++#define strcasecmp _stricmp ++#define strncasecmp _strnicmp ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_STRING_H */ +\ No newline at end of file +diff --git a/SMP/sys/socket.h b/SMP/sys/socket.h +new file mode 100644 +index 0000000..9fff505 +--- /dev/null ++++ b/SMP/sys/socket.h +@@ -0,0 +1,35 @@ ++/* ++ * MSVC sys/socket.h compatibility header. ++ * Copyright (c) 2015 Matthew Oliver ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_SYS_SOCKET_H ++#define SMP_SYS_SOCKET_H ++ ++#ifndef _MSC_VER ++# include_next <sys/socket.h> ++#else ++ ++#include <Winsock2.h> ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_SYS_SOCKET_H */ +\ No newline at end of file +diff --git a/SMP/sys/stat.h b/SMP/sys/stat.h +new file mode 100644 +index 0000000..e35d122 +--- /dev/null ++++ b/SMP/sys/stat.h +@@ -0,0 +1,103 @@ ++/* ++ * MSVC sys/stat.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_SYS_STAT_H ++#define SMP_SYS_STAT_H ++ ++#ifndef _MSC_VER ++# include_next <sys/stat.h> ++#else ++ ++#include <crtversion.h> ++#if _VC_CRT_MAJOR_VERSION >= 14 ++# include <../ucrt/sys/stat.h> ++#else ++# include <../include/sys/stat.h> ++#endif ++ ++#ifndef S_ISBLK ++#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) ++#endif ++ ++#ifndef S_ISFIFO ++#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) ++#endif ++ ++#ifndef S_ISCHR ++#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) ++#endif ++ ++#ifndef S_ISDIR ++#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) ++#endif ++ ++#ifndef S_ISREG ++#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) ++#endif ++ ++#ifndef S_ISLNK ++#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) ++#endif ++ ++#ifndef S_ISSOCK ++#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) ++#endif ++ ++#define _S_ISUID 0004000 ++#define _S_ISGID 0002000 ++#define _S_ISVTX 0001000 ++ ++#define S_ISUID _S_ISUID ++#define S_ISGID _S_ISGID ++#define S_ISVTX _S_ISVTX ++ ++#define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC) ++#define _S_IXUSR _S_IEXEC ++#define _S_IWUSR _S_IWRITE ++#define _S_IRUSR _S_IREAD ++#define _S_IRWXG (_S_IRWXU >> 3) ++#define _S_IXGRP (_S_IXUSR >> 3) ++#define _S_IWGRP (_S_IWUSR >> 3) ++#define _S_IRGRP (_S_IRUSR >> 3) ++#define _S_IRWXO (_S_IRWXG >> 3) ++#define _S_IXOTH (_S_IXGRP >> 3) ++#define _S_IWOTH (_S_IWGRP >> 3) ++#define _S_IROTH (_S_IRGRP >> 3) ++ ++#ifndef S_IRWXU ++#define S_IRWXU _S_IRWXU ++#define S_IXUSR _S_IXUSR ++#define S_IWUSR _S_IWUSR ++#define S_IRUSR _S_IRUSR ++#endif ++#define S_IRWXG _S_IRWXG ++#define S_IXGRP _S_IXGRP ++#define S_IWGRP _S_IWGRP ++#define S_IRGRP _S_IRGRP ++#define S_IRWXO _S_IRWXO ++#define S_IXOTH _S_IXOTH ++#define S_IWOTH _S_IWOTH ++#define S_IROTH _S_IROTH ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_SYS_STAT_H */ +\ No newline at end of file +diff --git a/SMP/sys/time.h b/SMP/sys/time.h +new file mode 100644 +index 0000000..8d060ea +--- /dev/null ++++ b/SMP/sys/time.h +@@ -0,0 +1,72 @@ ++/* ++ * MSVC sys/time.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_SYS_TIME_H ++#define SMP_SYS_TIME_H ++ ++#ifndef _MSC_VER ++# include_next <sys/time.h> ++#else ++ ++#include <time.h> ++#include <winsock2.h> ++#include <winapifamily.h> ++ ++struct timezone ++{ ++ int tz_minuteswest; /* minutes W of Greenwich */ ++ int tz_dsttime; /* type of dst correction */ ++}; ++ ++static __inline int gettimeofday(struct timeval * tp, struct timezone * tzp) ++{ ++ FILETIME file_time; ++ SYSTEMTIME system_time; ++ ULARGE_INTEGER ularge; ++ static int tzflag; ++ ++ GetSystemTime(&system_time); ++ SystemTimeToFileTime(&system_time, &file_time); ++ ularge.LowPart = file_time.dwLowDateTime; ++ ularge.HighPart = file_time.dwHighDateTime; ++ ++ tp->tv_sec = (long) ((ularge.QuadPart - 116444736000000000Ui64) / 10000000L); ++ tp->tv_usec = (long) (system_time.wMilliseconds * 1000); ++ ++#if !(defined(WINAPI_FAMILY_PARTITION) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)) ++ if (NULL != tzp) ++ { ++ if (!tzflag) ++ { ++ _tzset(); ++ tzflag++; ++ } ++ tzp->tz_minuteswest = _timezone / 60; ++ tzp->tz_dsttime = _daylight; ++ } ++#endif ++ return 0; ++} ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_SYS_TIME_H */ +\ No newline at end of file +diff --git a/SMP/test.bat b/SMP/test.bat +new file mode 100644 +index 0000000..1836af3 +--- /dev/null ++++ b/SMP/test.bat +@@ -0,0 +1,6 @@ ++mkdir "C:\Users\fner\Projects\ring-project\daemon\contrib\build\gnutls - 3.6.7\SMP\..\..\..\msvc\"\include ++mkdir "C:\Users\fner\Projects\ring-project\daemon\contrib\build\gnutls - 3.6.7\SMP\..\..\..\msvc\"\include\gnutls ++copy ..\lib\includes\gnutls\*.h "C:\Users\fner\Projects\ring-project\daemon\contrib\build\gnutls - 3.6.7\SMP\..\..\..\msvc\"\include\gnutls ++copy .\gnutls\gnutls.h "C:\Users\fner\Projects\ring-project\daemon\contrib\build\gnutls - 3.6.7\SMP\..\..\..\msvc\"\include\gnutls ++mkdir C:\Users\fner\Projects\ring-project\daemon\contrib\build\gnutls - 3.6.7\SMP\..\..\..\msvc\\licenses ++copy ..\LICENSE C:\Users\fner\Projects\ring-project\daemon\contrib\build\gnutls - 3.6.7\SMP\..\..\..\msvc\\licenses\gnutls.txt +\ No newline at end of file +diff --git a/SMP/time.h b/SMP/time.h +new file mode 100644 +index 0000000..05f55a9 +--- /dev/null ++++ b/SMP/time.h +@@ -0,0 +1,47 @@ ++/* ++ * MSVC time.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_TIME_H ++#define SMP_TIME_H ++ ++#ifndef _MSC_VER ++# include_next <time.h> ++#else ++ ++#include <crtversion.h> ++#if _VC_CRT_MAJOR_VERSION >= 14 ++# include <../ucrt/time.h> ++#else ++# include <../include/time.h> ++struct timespec ++{ ++ time_t tv_sec; ++ long int tv_nsec; ++}; ++#endif ++ ++#define gmtime_r(x,y) ((gmtime_s(y,x)==0)?x:NULL) ++#define localtime_r ((localtime_s(y,x)==0)?x:NULL) ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_TIME_H */ +\ No newline at end of file +diff --git a/SMP/unistd.h b/SMP/unistd.h +new file mode 100644 +index 0000000..cef9584 +--- /dev/null ++++ b/SMP/unistd.h +@@ -0,0 +1,78 @@ ++/* ++ * MSVC unistd.h compatibility header. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ */ ++ ++#ifndef SMP_UNISTD_H ++#define SMP_UNISTD_H ++ ++#ifndef _MSC_VER ++# include_next <unistd.h> ++#else ++ ++#include <stdlib.h> ++#include <process.h> ++#include <direct.h> ++#include <fcntl.h> ++ ++#define R_OK 4 /* Test for read permission. */ ++#define W_OK 2 /* Test for write permission. */ ++//#define X_OK 1 /* execute permission - unsupported in windows*/ ++#define F_OK 0 /* Test for existence. */ ++ ++#ifndef STDIN_FILENO ++#define STDIN_FILENO 0 ++#endif ++ ++#ifndef STDOUT_FILENO ++#define STDOUT_FILENO 1 ++#endif ++ ++#ifndef STDERR_FILENO ++#define STDERR_FILENO 2 ++#endif ++ ++#define srandom srand ++#define random rand ++ ++#define inline __inline ++typedef int mode_t; ++#include <BaseTsd.h> ++typedef SSIZE_T ssize_t; ++ ++#include <winapifamily.h> ++#if defined(WINAPI_FAMILY_PARTITION) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) ++#include <winsock2.h> ++#include <windows.h> ++static __inline char *getcwd(char *buffer, size_t size) ++{ ++ return NULL; ++} ++ ++typedef int pid_t; ++static __inline pid_t getpid(void) ++{ ++ return GetCurrentProcessId(); ++} ++#endif ++ ++#endif /* _MSC_VER */ ++ ++#endif /* SMP_UNISTD_H */ +\ No newline at end of file +diff --git a/SMP/version.h b/SMP/version.h +new file mode 100644 +index 0000000..9d44d0d +--- /dev/null ++++ b/SMP/version.h +@@ -0,0 +1,5 @@ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.6.7" ++ ++/* Version number of package */ ++#define VERSION "3.6.7" +-- +2.7.4 + + diff --git a/contrib/src/gnutls/read-file-limits.h.patch b/contrib/src/gnutls/read-file-limits.h.patch new file mode 100644 index 0000000000000000000000000000000000000000..b13b1a88f482bce0d18cb239132237313b5cfd0b --- /dev/null +++ b/contrib/src/gnutls/read-file-limits.h.patch @@ -0,0 +1,12 @@ +--- gnutls/gl/read-file.c.orig 2012-03-06 20:59:29.600593329 -0500 ++++ gnutls/gl/read-file.c 2012-03-06 20:59:44.568593328 -0500 +@@ -35,6 +35,9 @@ + /* Get errno. */ + #include <errno.h> + ++/* Get SIZE_MAX */ ++#include <limits.h> ++ + /* Read a STREAM and return a newly allocated string with the content, + and set *LENGTH to the length of the string. The string is + zero-terminated, but the terminating zero byte is not counted in diff --git a/contrib/src/gnutls/rules.mak b/contrib/src/gnutls/rules.mak index d4e85f60900befcb8b963c77c6e15a53ae861918..b8fbd734f8482498c0eec087ce50e091f0aa578c 100644 --- a/contrib/src/gnutls/rules.mak +++ b/contrib/src/gnutls/rules.mak @@ -21,6 +21,7 @@ ifndef HAVE_IOS $(APPLY) $(SRC)/gnutls/mac-keychain-lookup.patch endif $(call pkg_static,"lib/gnutls.pc.in") + $(UPDATE_AUTOCONFIG) $(MOVE) GNUTLS_CONF := \ @@ -28,10 +29,8 @@ GNUTLS_CONF := \ --without-p11-kit \ --disable-cxx \ --disable-srp-authentication \ - --disable-psk-authentication-FIXME \ --with-included-libtasn1 \ --with-included-unistring \ - --disable-openpgp-authentication \ --disable-openssl-compatibility \ --disable-guile \ --disable-nls \ @@ -53,6 +52,7 @@ CFLAGS="-D_POSIX_C_SOURCE" endif .gnutls: gnutls + $(RECONF) ifdef HAVE_ANDROID cd $< && $(HOSTVARS) ./configure $(GNUTLS_CONF) else