From 49f8b812ba5844f6aae6f5271db0821c22300a0f Mon Sep 17 00:00:00 2001 From: davidben Date: Tue, 12 May 2015 15:13:21 -0700 Subject: Revert of Roll src/third_party/boringssl/src 68de407:de12d6c (patchset #3 id:40001 of https://codereview.chromium.org/1132443004/) Reason for revert: http://build.chromium.org/p/chromium.linux/builders/Android%20Arm64%20Builder%20%28dbg%29/builds/17339 Decent chance this will need to be re-uploaded manually, but let's see... Original issue's description: > Roll src/third_party/boringssl/src 68de407:de12d6c > > Summary of changes available at: > https://boringssl.googlesource.com/boringssl/+log/68de407..de12d6c > > This also removes update_gypi_and_asm.py in favor of the script inside > BoringSSL proper. > > BUG=none > > Committed: https://crrev.com/45248985036de1238c29d195b583797319a7020f > Cr-Commit-Position: refs/heads/master@{#329500} TBR=agl@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=none Review URL: https://codereview.chromium.org/1128293004 Cr-Commit-Position: refs/heads/master@{#329504} --- third_party/boringssl/README.chromium | 7 - third_party/boringssl/boringssl.gypi | 4 +- third_party/boringssl/boringssl_tests.gypi | 67 +- third_party/boringssl/boringssl_unittest.cc | 52 +- third_party/boringssl/err_data.c | 580 +++-- .../linux-aarch64/crypto/aes/aesv8-armx.S | 2 - .../linux-aarch64/crypto/modes/ghashv8-armx.S | 2 - .../boringssl/linux-arm/crypto/aes/aes-armv4.S | 93 +- .../boringssl/linux-arm/crypto/aes/bsaes-armv7.S | 2331 ++++++++++---------- .../boringssl/linux-arm/crypto/bn/armv4-mont.S | 321 ++- .../boringssl/linux-arm/crypto/modes/ghash-armv4.S | 325 ++- .../linux-arm/crypto/sha/sha1-armv4-large.S | 248 +-- .../boringssl/linux-arm/crypto/sha/sha256-armv4.S | 197 +- .../boringssl/linux-arm/crypto/sha/sha512-armv4.S | 1363 ++++++------ .../boringssl/linux-x86/crypto/aes/aesni-x86.S | 789 +++---- .../linux-x86_64/crypto/aes/aesni-x86_64.S | 502 +---- .../boringssl/mac-x86/crypto/aes/aesni-x86.S | 793 +++---- .../boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S | 502 +---- third_party/boringssl/update_gypi_and_asm.py | 259 +++ .../boringssl/win-x86/crypto/aes/aesni-x86.asm | 792 +++---- .../win-x86_64/crypto/aes/aesni-x86_64.asm | 522 +---- 21 files changed, 3940 insertions(+), 5811 deletions(-) create mode 100644 third_party/boringssl/update_gypi_and_asm.py (limited to 'third_party/boringssl') diff --git a/third_party/boringssl/README.chromium b/third_party/boringssl/README.chromium index 8c89faa..c4c63c4 100644 --- a/third_party/boringssl/README.chromium +++ b/third_party/boringssl/README.chromium @@ -9,10 +9,3 @@ Security Critical: yes Description: This is BoringSSL, a fork of OpenSSL. See https://www.imperialviolet.org/2014/06/20/boringssl.html - -Note: when rolling DEPS forward, remember to run - - cd third_party/boringssl - python src/util/generate_build_files.py chromium - -from a system with both Perl and Go installed. diff --git a/third_party/boringssl/boringssl.gypi b/third_party/boringssl/boringssl.gypi index 6187637..80d24e1 100644 --- a/third_party/boringssl/boringssl.gypi +++ b/third_party/boringssl/boringssl.gypi @@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# This file is created by generate_build_files.py. Do not edit manually. +# This file is created by update_gypi_and_asm.py. Do not edit manually. { 'variables': { @@ -95,7 +95,6 @@ 'src/crypto/cipher/e_ssl3.c', 'src/crypto/cipher/e_tls.c', 'src/crypto/cipher/tls_cbc.c', - 'src/crypto/cmac/cmac.c', 'src/crypto/conf/conf.c', 'src/crypto/cpu-arm.c', 'src/crypto/cpu-intel.c', @@ -185,7 +184,6 @@ 'src/crypto/sha/sha512.c', 'src/crypto/stack/stack.c', 'src/crypto/thread.c', - 'src/crypto/thread_none.c', 'src/crypto/thread_pthread.c', 'src/crypto/thread_win.c', 'src/crypto/time_support.c', diff --git a/third_party/boringssl/boringssl_tests.gypi b/third_party/boringssl/boringssl_tests.gypi index cec6780..81893db 100644 --- a/third_party/boringssl/boringssl_tests.gypi +++ b/third_party/boringssl/boringssl_tests.gypi @@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# This file is created by generate_build_files.py. Do not edit manually. +# This file is created by update_gypi_and_asm.py. Do not edit manually. { 'targets': [ @@ -14,7 +14,6 @@ ], 'sources': [ 'src/crypto/base64/base64_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -28,7 +27,6 @@ ], 'sources': [ 'src/crypto/bio/bio_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -42,7 +40,6 @@ ], 'sources': [ 'src/crypto/bn/bn_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -56,7 +53,6 @@ ], 'sources': [ 'src/crypto/bytestring/bytestring_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -69,8 +65,7 @@ 'boringssl.gyp:boringssl', ], 'sources': [ - 'src/crypto/cipher/aead_test.cc', - '<@(boringssl_test_support_sources)', + 'src/crypto/cipher/aead_test.c', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -84,21 +79,6 @@ ], 'sources': [ 'src/crypto/cipher/cipher_test.c', - '<@(boringssl_test_support_sources)', - ], - # TODO(davidben): Fix size_t truncations in BoringSSL. - # https://crbug.com/429039 - 'msvs_disabled_warnings': [ 4267, ], - }, - { - 'target_name': 'boringssl_cmac_test', - 'type': 'executable', - 'dependencies': [ - 'boringssl.gyp:boringssl', - ], - 'sources': [ - 'src/crypto/cmac/cmac_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -112,7 +92,6 @@ ], 'sources': [ 'src/crypto/constant_time_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -125,8 +104,7 @@ 'boringssl.gyp:boringssl', ], 'sources': [ - 'src/crypto/dh/dh_test.cc', - '<@(boringssl_test_support_sources)', + 'src/crypto/dh/dh_test.c', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -140,7 +118,6 @@ ], 'sources': [ 'src/crypto/digest/digest_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -154,7 +131,6 @@ ], 'sources': [ 'src/crypto/dsa/dsa_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -168,7 +144,6 @@ ], 'sources': [ 'src/crypto/ec/ec_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -182,7 +157,6 @@ ], 'sources': [ 'src/crypto/ec/example_mul.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -196,7 +170,6 @@ ], 'sources': [ 'src/crypto/ecdsa/ecdsa_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -210,21 +183,6 @@ ], 'sources': [ 'src/crypto/err/err_test.cc', - '<@(boringssl_test_support_sources)', - ], - # TODO(davidben): Fix size_t truncations in BoringSSL. - # https://crbug.com/429039 - 'msvs_disabled_warnings': [ 4267, ], - }, - { - 'target_name': 'boringssl_evp_extra_test', - 'type': 'executable', - 'dependencies': [ - 'boringssl.gyp:boringssl', - ], - 'sources': [ - 'src/crypto/evp/evp_extra_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -238,7 +196,6 @@ ], 'sources': [ 'src/crypto/evp/evp_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -252,7 +209,6 @@ ], 'sources': [ 'src/crypto/evp/pbkdf_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -266,7 +222,6 @@ ], 'sources': [ 'src/crypto/hkdf/hkdf_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -280,7 +235,6 @@ ], 'sources': [ 'src/crypto/hmac/hmac_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -294,7 +248,6 @@ ], 'sources': [ 'src/crypto/lhash/lhash_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -308,7 +261,6 @@ ], 'sources': [ 'src/crypto/modes/gcm_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -321,8 +273,7 @@ 'boringssl.gyp:boringssl', ], 'sources': [ - 'src/crypto/pkcs8/pkcs12_test.cc', - '<@(boringssl_test_support_sources)', + 'src/crypto/pkcs8/pkcs12_test.c', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -336,7 +287,6 @@ ], 'sources': [ 'src/crypto/rsa/rsa_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -350,7 +300,6 @@ ], 'sources': [ 'src/crypto/thread_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -364,7 +313,6 @@ ], 'sources': [ 'src/crypto/x509/pkcs7_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -378,7 +326,6 @@ ], 'sources': [ 'src/ssl/pqueue/pqueue_test.c', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -392,7 +339,6 @@ ], 'sources': [ 'src/ssl/ssl_test.cc', - '<@(boringssl_test_support_sources)', ], # TODO(davidben): Fix size_t truncations in BoringSSL. # https://crbug.com/429039 @@ -400,9 +346,6 @@ }, ], 'variables': { - 'boringssl_test_support_sources': [ - 'src/crypto/test/file_test.cc', - ], 'boringssl_test_targets': [ 'boringssl_aead_test', 'boringssl_base64_test', @@ -410,7 +353,6 @@ 'boringssl_bn_test', 'boringssl_bytestring_test', 'boringssl_cipher_test', - 'boringssl_cmac_test', 'boringssl_constant_time_test', 'boringssl_dh_test', 'boringssl_digest_test', @@ -418,7 +360,6 @@ 'boringssl_ec_test', 'boringssl_ecdsa_test', 'boringssl_err_test', - 'boringssl_evp_extra_test', 'boringssl_evp_test', 'boringssl_example_mul', 'boringssl_gcm_test', diff --git a/third_party/boringssl/boringssl_unittest.cc b/third_party/boringssl/boringssl_unittest.cc index 3f765bf61..52bac99 100644 --- a/third_party/boringssl/boringssl_unittest.cc +++ b/third_party/boringssl/boringssl_unittest.cc @@ -157,6 +157,10 @@ TEST(BoringSSL, ByteString) { TestSimple("bytestring_test"); } +TEST(BoringSSL, ConstantTime) { + TestSimple("constant_time_test"); +} + TEST(BoringSSL, Cipher) { base::FilePath data_file; ASSERT_TRUE(CryptoCipherTestPath(&data_file)); @@ -168,14 +172,6 @@ TEST(BoringSSL, Cipher) { TestProcess("cipher_test", args); } -TEST(BoringSSL, CMAC) { - TestSimple("cmac_test"); -} - -TEST(BoringSSL, ConstantTime) { - TestSimple("constant_time_test"); -} - TEST(BoringSSL, DH) { TestSimple("dh_test"); } @@ -205,16 +201,7 @@ TEST(BoringSSL, GCM) { } TEST(BoringSSL, HMAC) { - base::FilePath data_file; - ASSERT_TRUE(BoringSSLPath(&data_file)); - data_file = data_file.Append(FILE_PATH_LITERAL("crypto")); - data_file = data_file.Append(FILE_PATH_LITERAL("hmac")); - data_file = data_file.Append(FILE_PATH_LITERAL("hmac_tests.txt")); - - std::vector args; - args.push_back(data_file.value()); - - TestProcess("hmac_test", args); + TestSimple("hmac_test"); } TEST(BoringSSL, LH) { @@ -238,34 +225,7 @@ TEST(BoringSSL, ExampleMul) { } TEST(BoringSSL, EVP) { - base::FilePath data_file; - ASSERT_TRUE(BoringSSLPath(&data_file)); - data_file = data_file.Append(FILE_PATH_LITERAL("crypto")); - data_file = data_file.Append(FILE_PATH_LITERAL("evp")); - data_file = data_file.Append(FILE_PATH_LITERAL("evp_tests.txt")); - - std::vector args; - args.push_back(data_file.value()); - - TestProcess("evp_test", args); -} - -// evp_test is also run on hmac_test's input. -TEST(BoringSSL, EVPHMAC) { - base::FilePath data_file; - ASSERT_TRUE(BoringSSLPath(&data_file)); - data_file = data_file.Append(FILE_PATH_LITERAL("crypto")); - data_file = data_file.Append(FILE_PATH_LITERAL("hmac")); - data_file = data_file.Append(FILE_PATH_LITERAL("hmac_tests.txt")); - - std::vector args; - args.push_back(data_file.value()); - - TestProcess("evp_test", args); -} - -TEST(BoringSSL, EVPExtra) { - TestSimple("evp_extra_test"); + TestSimple("evp_test"); } TEST(BoringSSL, SSL) { diff --git a/third_party/boringssl/err_data.c b/third_party/boringssl/err_data.c index 68397e4..16b52e7 100644 --- a/third_party/boringssl/err_data.c +++ b/third_party/boringssl/err_data.c @@ -216,65 +216,65 @@ const uint32_t kOpenSSLFunctionValues[] = { 0x28330aa9, 0x28338aae, 0x28340ab9, - 0x2c322a70, - 0x2c32aa7c, - 0x2c332a8f, - 0x2c33aaa0, - 0x2c342ab9, - 0x2c34aae1, - 0x2c352af8, - 0x2c35ab15, - 0x2c362b32, - 0x2c36ab4f, - 0x2c372b68, - 0x2c37ab81, - 0x2c382b97, - 0x2c38aba5, - 0x2c392bb7, - 0x2c39abd4, - 0x2c3a2bf1, - 0x2c3aabff, - 0x2c3b2c1d, - 0x2c3bac3b, - 0x2c3c2c56, - 0x2c3cac6a, - 0x2c3d2c7c, - 0x2c3dac8c, - 0x2c3e2c9a, - 0x2c3eacaa, - 0x2c3f2cba, - 0x2c3facd5, - 0x2c402ce6, - 0x2c40ad01, - 0x2c412d15, - 0x2c41ad28, - 0x2c422d47, - 0x2c42ad5b, - 0x2c432d6e, - 0x2c43ad7d, - 0x2c442d8c, - 0x2c44ada3, - 0x2c452dbe, - 0x2c45add6, - 0x2c462dea, - 0x2c46adfd, - 0x2c472e0e, - 0x2c47ae1f, - 0x2c482e30, - 0x2c48ae41, - 0x2c492e50, - 0x2c49ae5d, - 0x2c4a2e6a, - 0x2c4aae77, - 0x2c4b2e80, - 0x2c4bae94, - 0x2c4c2ea3, - 0x2c4caeb1, - 0x2c4d2ed3, - 0x2c4daee4, - 0x2c4e2ef5, - 0x2c4eaec0, - 0x2c4f2ad2, + 0x2c322a27, + 0x2c32aa33, + 0x2c332a46, + 0x2c33aa57, + 0x2c342a70, + 0x2c34aa98, + 0x2c352aaf, + 0x2c35aacc, + 0x2c362ae9, + 0x2c36ab06, + 0x2c372b1f, + 0x2c37ab38, + 0x2c382b4e, + 0x2c38ab5c, + 0x2c392b6e, + 0x2c39ab8b, + 0x2c3a2ba8, + 0x2c3aabb6, + 0x2c3b2bd4, + 0x2c3babf2, + 0x2c3c2c0d, + 0x2c3cac21, + 0x2c3d2c33, + 0x2c3dac43, + 0x2c3e2c51, + 0x2c3eac61, + 0x2c3f2c71, + 0x2c3fac8c, + 0x2c402c9d, + 0x2c40acb8, + 0x2c412ccc, + 0x2c41acdf, + 0x2c422cfe, + 0x2c42ad12, + 0x2c432d25, + 0x2c43ad34, + 0x2c442d43, + 0x2c44ad5a, + 0x2c452d75, + 0x2c45ad8d, + 0x2c462da1, + 0x2c46adb4, + 0x2c472dc5, + 0x2c47add6, + 0x2c482de7, + 0x2c48adf8, + 0x2c492e07, + 0x2c49ae14, + 0x2c4a2e21, + 0x2c4aae2e, + 0x2c4b2e37, + 0x2c4bae4b, + 0x2c4c2e5a, + 0x2c4cae68, + 0x2c4d2e8a, + 0x2c4dae9b, + 0x2c4e2eac, + 0x2c4eae77, + 0x2c4f2a89, 0x30320000, 0x30328018, 0x3033002c, @@ -414,176 +414,172 @@ const uint32_t kOpenSSLFunctionValues[] = { 0x3c521083, 0x40321b21, 0x40329b3b, - 0x40331b63, - 0x40339b7b, - 0x40341b99, - 0x40349be0, - 0x40351bf7, - 0x40359c13, - 0x40361c2f, - 0x40369c49, - 0x40371c68, - 0x40379c87, - 0x40381c9f, - 0x40389cbc, - 0x40391cdf, - 0x40399cfc, - 0x403a1d1a, - 0x403a9d2a, - 0x403b1d3f, - 0x403b9d5b, - 0x403c1d75, - 0x403c9d80, - 0x403d1da3, - 0x403d9dc7, - 0x403e1ddd, - 0x403e9de7, - 0x403f1df3, - 0x403f9e04, - 0x40401e1c, - 0x40409e24, - 0x40411e2d, - 0x40419e36, - 0x40421e5e, - 0x40429e72, - 0x40431e7d, - 0x40439e89, - 0x40441edd, - 0x40449ee9, - 0x40451ef6, - 0x40459f09, - 0x40461f21, - 0x40469f39, - 0x40471f4f, - 0x40479f6a, - 0x40481f85, - 0x40489f99, - 0x40491fb2, - 0x40499fcb, - 0x404a1fe5, - 0x404a9fef, - 0x404b1fff, - 0x404ba020, - 0x404c203b, - 0x404ca049, - 0x404d2056, - 0x404da06a, - 0x404e2082, - 0x404ea090, - 0x404f20ba, - 0x404fa0d1, - 0x405020e3, - 0x4050a114, - 0x40512145, - 0x4051a15a, - 0x4052216b, - 0x4052a18b, - 0x405321a6, - 0x4053a1b6, - 0x4054a1c2, - 0x405521d8, - 0x4055a1f6, - 0x40562203, - 0x4056a20d, - 0x4057221b, - 0x4057a236, - 0x40582251, - 0x4058a270, - 0x40592285, - 0x4059a29a, - 0x405a22b7, - 0x405aa2cb, - 0x405b22e7, - 0x405ba2fd, - 0x405c231a, - 0x405ca32c, - 0x405d2343, - 0x405da354, - 0x405e2370, - 0x405ea384, - 0x405f2394, - 0x405fa3b0, - 0x406023c5, - 0x4060a3db, - 0x406123f8, - 0x4061a411, - 0x4062243b, - 0x4062a444, - 0x40632454, - 0x4063a48d, - 0x406424a3, - 0x4064a4c1, - 0x406524d6, - 0x4065a4f3, - 0x4066250a, - 0x4066a528, - 0x40672545, - 0x4067a55c, - 0x4068257a, - 0x4068a591, - 0x406925a9, - 0x4069a5ba, - 0x406a25cd, - 0x406aa5e0, - 0x406b25f4, - 0x406ba618, - 0x406c2633, - 0x406ca654, - 0x406d2678, - 0x406da693, - 0x406e26b4, - 0x406ea6c9, - 0x406f26e2, - 0x406fa6ef, - 0x407026fd, - 0x4070a70a, - 0x40712727, - 0x4071a747, - 0x40722762, - 0x4072a77b, - 0x40732792, - 0x4073a7ac, - 0x407427d0, - 0x4074a7e6, - 0x407527fa, - 0x4075a80f, - 0x40762829, - 0x4076a83b, - 0x40772850, - 0x4077a876, - 0x40782893, - 0x4078a8b6, - 0x407928dc, - 0x4079a8f9, - 0x407a291c, - 0x407aa938, - 0x407b2954, - 0x407ba966, - 0x407c2973, - 0x407e2980, - 0x407ea996, - 0x407f29ae, - 0x407fa9c1, - 0x408029d6, - 0x4080a9ef, - 0x40812a0d, - 0x4081aa2d, - 0x40822a36, - 0x4082aa52, - 0x40832a5b, - 0x4083a09f, - 0x4084212e, - 0x4084a0fe, - 0x4085247c, - 0x4085a460, - 0x40861bb8, - 0x40869bcb, - 0x40871ebd, - 0x40879ecc, - 0x40881b47, - 0x40889e46, - 0x40891ea4, - 0x4089a424, + 0x40331b47, + 0x40339b5f, + 0x40341b7d, + 0x40349b9c, + 0x40351bb3, + 0x40359bcf, + 0x40361beb, + 0x40369c05, + 0x40371c24, + 0x40379c43, + 0x40381c5b, + 0x40389c78, + 0x40391c9b, + 0x40399cb8, + 0x403a1cd6, + 0x403a9ce6, + 0x403b1cfb, + 0x403b9d17, + 0x403c1d31, + 0x403c9d3c, + 0x403d1d5f, + 0x403d9d83, + 0x403e1d99, + 0x403e9da3, + 0x403f1daf, + 0x403f9dc0, + 0x40401dd8, + 0x40409de0, + 0x40411de9, + 0x40419df2, + 0x40421e02, + 0x40429e16, + 0x40431e21, + 0x40439e2d, + 0x40441e48, + 0x40449e54, + 0x40451e61, + 0x40459e74, + 0x40461e8c, + 0x40469ea4, + 0x40471eba, + 0x40479ed5, + 0x40481ef0, + 0x40489f04, + 0x40491f1d, + 0x40499f36, + 0x404a1f50, + 0x404a9f5a, + 0x404b1f6a, + 0x404b9f8b, + 0x404c1fa6, + 0x404c9fb4, + 0x404d1fc1, + 0x404d9fd5, + 0x404e1fed, + 0x404e9ffb, + 0x404f2025, + 0x404fa03c, + 0x4050204e, + 0x4050a07f, + 0x405120b0, + 0x4051a0c5, + 0x405220d6, + 0x4052a0f6, + 0x40532111, + 0x4053a121, + 0x4054212d, + 0x4054a140, + 0x40552156, + 0x4055a174, + 0x40562181, + 0x4056a18b, + 0x40572199, + 0x4057a1b4, + 0x405821cf, + 0x4058a1ee, + 0x40592203, + 0x4059a218, + 0x405a2235, + 0x405aa249, + 0x405b2265, + 0x405ba27b, + 0x405c2298, + 0x405ca2aa, + 0x405d22c1, + 0x405da2d2, + 0x405e22ee, + 0x405ea302, + 0x405f2312, + 0x405fa32e, + 0x40602343, + 0x4060a359, + 0x40612376, + 0x4061a38f, + 0x406223a2, + 0x4062a3ab, + 0x406323bb, + 0x4063a3f4, + 0x4064240a, + 0x4064a428, + 0x4065243d, + 0x4065a45a, + 0x40662471, + 0x4066a48f, + 0x406724ac, + 0x4067a4c3, + 0x406824e1, + 0x4068a4f8, + 0x40692510, + 0x4069a521, + 0x406a2534, + 0x406aa547, + 0x406b255b, + 0x406ba57f, + 0x406c259a, + 0x406ca5bb, + 0x406d25df, + 0x406da5fa, + 0x406e261b, + 0x406ea630, + 0x406f2649, + 0x406fa656, + 0x40702664, + 0x4070a671, + 0x4071268e, + 0x4071a6ae, + 0x407226c9, + 0x4072a6e2, + 0x407326f9, + 0x4073a713, + 0x40742737, + 0x4074a74d, + 0x40752761, + 0x4075a776, + 0x40762790, + 0x4076a7a2, + 0x407727b7, + 0x4077a7dd, + 0x407827fa, + 0x4078a81d, + 0x40792843, + 0x4079a860, + 0x407a2883, + 0x407aa89f, + 0x407b28bb, + 0x407ba8cd, + 0x407c28da, + 0x407ca8e7, + 0x407d2904, + 0x407da91b, + 0x407e2937, + 0x407ea94d, + 0x407f2965, + 0x407fa978, + 0x4080298d, + 0x4080a9a6, + 0x408129c4, + 0x4081a9e4, + 0x408229ed, + 0x4082aa09, + 0x40832a12, + 0x4083a00a, + 0x40842099, + 0x4084a069, + 0x408523e3, + 0x4085a3c7, 0x4432042a, 0x4432843c, 0x44330445, @@ -620,63 +616,63 @@ const uint32_t kOpenSSLFunctionValues[] = { 0x4c3998af, 0x4c3a18c7, 0x4c3a98da, - 0x50322f06, - 0x5032af1b, - 0x50332f2c, - 0x5033af3f, - 0x50342f50, - 0x5034af63, - 0x50352f72, - 0x5035af87, - 0x50362f97, - 0x5036afa6, - 0x50372fb7, - 0x5037afc7, - 0x50382fd8, - 0x5038afeb, - 0x50392ffd, - 0x5039b013, - 0x503a3025, - 0x503ab036, - 0x503b3047, - 0x503bb058, - 0x503c3063, - 0x503cb06f, - 0x503d307a, - 0x503db085, - 0x503e3092, - 0x503eb0a7, - 0x503f30b5, - 0x503fb0c9, - 0x504030dc, - 0x5040b0ed, - 0x50413107, - 0x5041b116, - 0x5042311f, - 0x5042b12e, - 0x50433140, - 0x5043b14c, - 0x50443154, - 0x5044b167, - 0x50453178, - 0x5045b18e, - 0x5046319a, - 0x5046b1ae, - 0x504731bc, - 0x5047b1d0, - 0x504831ea, - 0x5048b1fe, - 0x50493214, - 0x5049b22b, - 0x504a323d, - 0x504ab251, - 0x504b3266, - 0x504bb27d, - 0x504c3291, - 0x504cb29a, - 0x504d32a2, - 0x504db2b1, - 0x504e32c1, + 0x50322ebd, + 0x5032aed2, + 0x50332ee3, + 0x5033aef6, + 0x50342f07, + 0x5034af1a, + 0x50352f29, + 0x5035af3e, + 0x50362f4e, + 0x5036af5d, + 0x50372f6e, + 0x5037af7e, + 0x50382f8f, + 0x5038afa2, + 0x50392fb4, + 0x5039afca, + 0x503a2fdc, + 0x503aafed, + 0x503b2ffe, + 0x503bb00f, + 0x503c301a, + 0x503cb026, + 0x503d3031, + 0x503db03c, + 0x503e3049, + 0x503eb05e, + 0x503f306c, + 0x503fb080, + 0x50403093, + 0x5040b0a4, + 0x504130be, + 0x5041b0cd, + 0x504230d6, + 0x5042b0e5, + 0x504330f7, + 0x5043b103, + 0x5044310b, + 0x5044b11e, + 0x5045312f, + 0x5045b145, + 0x50463151, + 0x5046b165, + 0x50473173, + 0x5047b187, + 0x504831a1, + 0x5048b1b5, + 0x504931cb, + 0x5049b1e2, + 0x504a31f4, + 0x504ab208, + 0x504b321d, + 0x504bb234, + 0x504c3248, + 0x504cb251, + 0x504d3259, + 0x504db268, + 0x504e3278, 0x683210ba, 0x683290cb, 0x683310db, @@ -1107,12 +1103,9 @@ const char kOpenSSLFunctionStringData[] = "verify_raw\0" "SSL_CTX_check_private_key\0" "SSL_CTX_new\0" - "SSL_CTX_set1_tls_channel_id\0" "SSL_CTX_set_cipher_list\0" "SSL_CTX_set_cipher_list_tls11\0" "SSL_CTX_set_session_id_context\0" - "SSL_CTX_set_tmp_dh\0" - "SSL_CTX_set_tmp_ecdh\0" "SSL_CTX_use_PrivateKey\0" "SSL_CTX_use_PrivateKey_ASN1\0" "SSL_CTX_use_PrivateKey_file\0" @@ -1140,14 +1133,10 @@ const char kOpenSSLFunctionStringData[] = "SSL_peek\0" "SSL_read\0" "SSL_renegotiate\0" - "SSL_set1_tls_channel_id\0" "SSL_set_cipher_list\0" "SSL_set_fd\0" "SSL_set_rfd\0" "SSL_set_session_id_context\0" - "SSL_set_tlsext_host_name\0" - "SSL_set_tmp_dh\0" - "SSL_set_tmp_ecdh\0" "SSL_set_wfd\0" "SSL_shutdown\0" "SSL_use_PrivateKey\0" @@ -1183,6 +1172,7 @@ const char kOpenSSLFunctionStringData[] = "dtls1_write_app_data_bytes\0" "i2d_SSL_SESSION\0" "ssl3_accept\0" + "ssl3_callback_ctrl\0" "ssl3_cert_verify_hash\0" "ssl3_check_cert_and_algorithm\0" "ssl3_connect\0" @@ -1210,7 +1200,6 @@ const char kOpenSSLFunctionStringData[] = "ssl3_get_server_key_exchange\0" "ssl3_get_v2_client_hello\0" "ssl3_handshake_mac\0" - "ssl3_output_cert_chain\0" "ssl3_prf\0" "ssl3_read_bytes\0" "ssl3_read_n\0" @@ -1266,6 +1255,9 @@ const char kOpenSSLFunctionStringData[] = "ssl_sess_cert_new\0" "ssl_set_cert\0" "ssl_set_pkey\0" + "ssl_undefined_const_function\0" + "ssl_undefined_function\0" + "ssl_undefined_void_function\0" "ssl_verify_cert_chain\0" "tls12_check_peer_sigalg\0" "tls1_aead_ctx_init\0" diff --git a/third_party/boringssl/linux-aarch64/crypto/aes/aesv8-armx.S b/third_party/boringssl/linux-aarch64/crypto/aes/aesv8-armx.S index 9c63291..049ccb6 100644 --- a/third_party/boringssl/linux-aarch64/crypto/aes/aesv8-armx.S +++ b/third_party/boringssl/linux-aarch64/crypto/aes/aesv8-armx.S @@ -2,9 +2,7 @@ #if __ARM_MAX_ARCH__>=7 .text -#if !defined(__clang__) .arch armv8-a+crypto -#endif .align 5 .Lrcon: .long 0x01,0x01,0x01,0x01 diff --git a/third_party/boringssl/linux-aarch64/crypto/modes/ghashv8-armx.S b/third_party/boringssl/linux-aarch64/crypto/modes/ghashv8-armx.S index ad19074..adc0391 100644 --- a/third_party/boringssl/linux-aarch64/crypto/modes/ghashv8-armx.S +++ b/third_party/boringssl/linux-aarch64/crypto/modes/ghashv8-armx.S @@ -1,9 +1,7 @@ #include "arm_arch.h" .text -#if !defined(__clang__) .arch armv8-a+crypto -#endif .globl gcm_init_v8 .type gcm_init_v8,%function .align 4 diff --git a/third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S b/third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S index 1135020..0b7d193 100644 --- a/third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S @@ -43,7 +43,7 @@ .code 32 #else .syntax unified -# if defined(__thumb2__) && !defined(__APPLE__) +# ifdef __thumb2__ .thumb # else .code 32 @@ -158,9 +158,9 @@ AES_Te: @ void asm_AES_encrypt(const unsigned char *in, unsigned char *out, @ const AES_KEY *key) { -.globl asm_AES_encrypt -.hidden asm_AES_encrypt -.type asm_AES_encrypt,%function +.global asm_AES_encrypt +.hidden asm_AES_encrypt +.type asm_AES_encrypt,%function .align 5 asm_AES_encrypt: #if __ARM_ARCH__<7 @@ -168,14 +168,10 @@ asm_AES_encrypt: #else adr r3,asm_AES_encrypt #endif - stmdb sp!,{r1,r4-r12,lr} -#ifdef __APPLE__ - adr r10,AES_Te -#else - sub r10,r3,#asm_AES_encrypt-AES_Te @ Te -#endif + stmdb sp!,{r1,r4-r12,lr} mov r12,r0 @ inp mov r11,r2 + sub r10,r3,#asm_AES_encrypt-AES_Te @ Te #if __ARM_ARCH__<7 ldrb r0,[r12,#3] @ load input data in endian-neutral ldrb r4,[r12,#2] @ manner... @@ -262,20 +258,20 @@ asm_AES_encrypt: strb r3,[r12,#15] #endif #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + ldmia sp!,{r4-r12,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size asm_AES_encrypt,.-asm_AES_encrypt -.type _armv4_AES_encrypt,%function +.type _armv4_AES_encrypt,%function .align 2 _armv4_AES_encrypt: str lr,[sp,#-4]! @ push lr - ldmia r11!,{r4,r5,r6,r7} + ldmia r11!,{r4-r7} eor r0,r0,r4 ldr r12,[r11,#240-16] eor r1,r1,r5 @@ -408,9 +404,9 @@ _armv4_AES_encrypt: ldr pc,[sp],#4 @ pop and return .size _armv4_AES_encrypt,.-_armv4_AES_encrypt -.globl asm_AES_set_encrypt_key -.hidden asm_AES_set_encrypt_key -.type asm_AES_set_encrypt_key,%function +.global asm_AES_set_encrypt_key +.hidden asm_AES_set_encrypt_key +.type asm_AES_set_encrypt_key,%function .align 5 asm_AES_set_encrypt_key: _armv4_AES_set_encrypt_key: @@ -443,17 +439,13 @@ _armv4_AES_set_encrypt_key: movne r0,#-1 bne .Labrt -.Lok: stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} +.Lok: stmdb sp!,{r4-r12,lr} + sub r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4 + mov r12,r0 @ inp mov lr,r1 @ bits mov r11,r2 @ key -#ifdef __APPLE__ - adr r10,AES_Te+1024 @ Te4 -#else - sub r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4 -#endif - #if __ARM_ARCH__<7 ldrb r0,[r12,#3] @ load input data in endian-neutral ldrb r4,[r12,#2] @ manner... @@ -704,20 +696,20 @@ _armv4_AES_set_encrypt_key: .align 2 .Ldone: mov r0,#0 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + ldmia sp!,{r4-r12,lr} .Labrt: -#if __ARM_ARCH__>=5 - bx lr @ .word 0xe12fff1e +#if defined(__thumb2__) && __ARM_ARCH__>=7 + .short 0x4770 @ .word 0xe12fff1e in Thumb2 encoding #else tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key -.globl asm_AES_set_decrypt_key -.hidden asm_AES_set_decrypt_key -.type asm_AES_set_decrypt_key,%function +.global asm_AES_set_decrypt_key +.hidden asm_AES_set_decrypt_key +.type asm_AES_set_decrypt_key,%function .align 5 asm_AES_set_decrypt_key: str lr,[sp,#-4]! @ push lr @@ -732,13 +724,13 @@ asm_AES_set_decrypt_key: .size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key @ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out) -.globl AES_set_enc2dec_key +.global AES_set_enc2dec_key .hidden AES_set_enc2dec_key .type AES_set_enc2dec_key,%function .align 5 AES_set_enc2dec_key: _armv4_AES_set_enc2dec_key: - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + stmdb sp!,{r4-r12,lr} ldr r12,[r0,#240] mov r7,r0 @ input @@ -820,12 +812,12 @@ _armv4_AES_set_enc2dec_key: mov r0,#0 #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + ldmia sp!,{r4-r12,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size AES_set_enc2dec_key,.-AES_set_enc2dec_key @@ -933,9 +925,9 @@ AES_Td: @ void asm_AES_decrypt(const unsigned char *in, unsigned char *out, @ const AES_KEY *key) { -.globl asm_AES_decrypt -.hidden asm_AES_decrypt -.type asm_AES_decrypt,%function +.global asm_AES_decrypt +.hidden asm_AES_decrypt +.type asm_AES_decrypt,%function .align 5 asm_AES_decrypt: #if __ARM_ARCH__<7 @@ -943,14 +935,10 @@ asm_AES_decrypt: #else adr r3,asm_AES_decrypt #endif - stmdb sp!,{r1,r4-r12,lr} -#ifdef __APPLE__ - adr r10,AES_Td -#else - sub r10,r3,#asm_AES_decrypt-AES_Td @ Td -#endif + stmdb sp!,{r1,r4-r12,lr} mov r12,r0 @ inp mov r11,r2 + sub r10,r3,#asm_AES_decrypt-AES_Td @ Td #if __ARM_ARCH__<7 ldrb r0,[r12,#3] @ load input data in endian-neutral ldrb r4,[r12,#2] @ manner... @@ -1037,20 +1025,20 @@ asm_AES_decrypt: strb r3,[r12,#15] #endif #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + ldmia sp!,{r4-r12,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size asm_AES_decrypt,.-asm_AES_decrypt -.type _armv4_AES_decrypt,%function +.type _armv4_AES_decrypt,%function .align 2 _armv4_AES_decrypt: str lr,[sp,#-4]! @ push lr - ldmia r11!,{r4,r5,r6,r7} + ldmia r11!,{r4-r7} eor r0,r0,r4 ldr r12,[r11,#240-16] eor r1,r1,r5 @@ -1191,8 +1179,7 @@ _armv4_AES_decrypt: sub r10,r10,#1024 ldr pc,[sp],#4 @ pop and return .size _armv4_AES_decrypt,.-_armv4_AES_decrypt -.byte 65,69,83,32,102,111,114,32,65,82,77,118,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 +.asciz "AES for ARMv4, CRYPTOGAMS by " .align 2 #endif diff --git a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S b/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S index 0feeab0..cbc32fb 100644 --- a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S +++ b/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S @@ -60,141 +60,135 @@ # define BSAES_ASM_EXTENDED_KEY # define XTS_CHAIN_TWEAK # define __ARM_ARCH__ __LINUX_ARM_ARCH__ -# define __ARM_MAX_ARCH__ 7 #endif #ifdef __thumb__ # define adrl adr #endif -#if __ARM_MAX_ARCH__>=7 -.arch armv7-a -.fpu neon - +#if __ARM_ARCH__>=7 .text .syntax unified @ ARMv7-capable assembler is expected to handle this -#if defined(__thumb2__) && !defined(__APPLE__) +#ifdef __thumb2__ .thumb #else -.code 32 +.code 32 #endif +.fpu neon + .type _bsaes_decrypt8,%function .align 4 _bsaes_decrypt8: adr r6,_bsaes_decrypt8 vldmia r4!, {q9} @ round 0 key -#ifdef __APPLE__ - adr r6,.LM0ISR -#else add r6,r6,#.LM0ISR-_bsaes_decrypt8 -#endif vldmia r6!, {q8} @ .LM0ISR veor q10, q0, q9 @ xor with round0 key veor q11, q1, q9 - vtbl.8 d0, {q10}, d16 - vtbl.8 d1, {q10}, d17 + vtbl.8 d0, {q10}, d16 + vtbl.8 d1, {q10}, d17 veor q12, q2, q9 - vtbl.8 d2, {q11}, d16 - vtbl.8 d3, {q11}, d17 + vtbl.8 d2, {q11}, d16 + vtbl.8 d3, {q11}, d17 veor q13, q3, q9 - vtbl.8 d4, {q12}, d16 - vtbl.8 d5, {q12}, d17 + vtbl.8 d4, {q12}, d16 + vtbl.8 d5, {q12}, d17 veor q14, q4, q9 - vtbl.8 d6, {q13}, d16 - vtbl.8 d7, {q13}, d17 + vtbl.8 d6, {q13}, d16 + vtbl.8 d7, {q13}, d17 veor q15, q5, q9 - vtbl.8 d8, {q14}, d16 - vtbl.8 d9, {q14}, d17 + vtbl.8 d8, {q14}, d16 + vtbl.8 d9, {q14}, d17 veor q10, q6, q9 - vtbl.8 d10, {q15}, d16 - vtbl.8 d11, {q15}, d17 + vtbl.8 d10, {q15}, d16 + vtbl.8 d11, {q15}, d17 veor q11, q7, q9 - vtbl.8 d12, {q10}, d16 - vtbl.8 d13, {q10}, d17 - vtbl.8 d14, {q11}, d16 - vtbl.8 d15, {q11}, d17 + vtbl.8 d12, {q10}, d16 + vtbl.8 d13, {q10}, d17 + vtbl.8 d14, {q11}, d16 + vtbl.8 d15, {q11}, d17 vmov.i8 q8,#0x55 @ compose .LBS0 vmov.i8 q9,#0x33 @ compose .LBS1 vshr.u64 q10, q6, #1 - vshr.u64 q11, q4, #1 - veor q10, q10, q7 - veor q11, q11, q5 - vand q10, q10, q8 - vand q11, q11, q8 - veor q7, q7, q10 + vshr.u64 q11, q4, #1 + veor q10, q10, q7 + veor q11, q11, q5 + vand q10, q10, q8 + vand q11, q11, q8 + veor q7, q7, q10 vshl.u64 q10, q10, #1 - veor q5, q5, q11 - vshl.u64 q11, q11, #1 - veor q6, q6, q10 - veor q4, q4, q11 + veor q5, q5, q11 + vshl.u64 q11, q11, #1 + veor q6, q6, q10 + veor q4, q4, q11 vshr.u64 q10, q2, #1 - vshr.u64 q11, q0, #1 - veor q10, q10, q3 - veor q11, q11, q1 - vand q10, q10, q8 - vand q11, q11, q8 - veor q3, q3, q10 + vshr.u64 q11, q0, #1 + veor q10, q10, q3 + veor q11, q11, q1 + vand q10, q10, q8 + vand q11, q11, q8 + veor q3, q3, q10 vshl.u64 q10, q10, #1 - veor q1, q1, q11 - vshl.u64 q11, q11, #1 - veor q2, q2, q10 - veor q0, q0, q11 + veor q1, q1, q11 + vshl.u64 q11, q11, #1 + veor q2, q2, q10 + veor q0, q0, q11 vmov.i8 q8,#0x0f @ compose .LBS2 vshr.u64 q10, q5, #2 - vshr.u64 q11, q4, #2 - veor q10, q10, q7 - veor q11, q11, q6 - vand q10, q10, q9 - vand q11, q11, q9 - veor q7, q7, q10 + vshr.u64 q11, q4, #2 + veor q10, q10, q7 + veor q11, q11, q6 + vand q10, q10, q9 + vand q11, q11, q9 + veor q7, q7, q10 vshl.u64 q10, q10, #2 - veor q6, q6, q11 - vshl.u64 q11, q11, #2 - veor q5, q5, q10 - veor q4, q4, q11 + veor q6, q6, q11 + vshl.u64 q11, q11, #2 + veor q5, q5, q10 + veor q4, q4, q11 vshr.u64 q10, q1, #2 - vshr.u64 q11, q0, #2 - veor q10, q10, q3 - veor q11, q11, q2 - vand q10, q10, q9 - vand q11, q11, q9 - veor q3, q3, q10 + vshr.u64 q11, q0, #2 + veor q10, q10, q3 + veor q11, q11, q2 + vand q10, q10, q9 + vand q11, q11, q9 + veor q3, q3, q10 vshl.u64 q10, q10, #2 - veor q2, q2, q11 - vshl.u64 q11, q11, #2 - veor q1, q1, q10 - veor q0, q0, q11 + veor q2, q2, q11 + vshl.u64 q11, q11, #2 + veor q1, q1, q10 + veor q0, q0, q11 vshr.u64 q10, q3, #4 - vshr.u64 q11, q2, #4 - veor q10, q10, q7 - veor q11, q11, q6 - vand q10, q10, q8 - vand q11, q11, q8 - veor q7, q7, q10 + vshr.u64 q11, q2, #4 + veor q10, q10, q7 + veor q11, q11, q6 + vand q10, q10, q8 + vand q11, q11, q8 + veor q7, q7, q10 vshl.u64 q10, q10, #4 - veor q6, q6, q11 - vshl.u64 q11, q11, #4 - veor q3, q3, q10 - veor q2, q2, q11 + veor q6, q6, q11 + vshl.u64 q11, q11, #4 + veor q3, q3, q10 + veor q2, q2, q11 vshr.u64 q10, q1, #4 - vshr.u64 q11, q0, #4 - veor q10, q10, q5 - veor q11, q11, q4 - vand q10, q10, q8 - vand q11, q11, q8 - veor q5, q5, q10 + vshr.u64 q11, q0, #4 + veor q10, q10, q5 + veor q11, q11, q4 + vand q10, q10, q8 + vand q11, q11, q8 + veor q5, q5, q10 vshl.u64 q10, q10, #4 - veor q4, q4, q11 - vshl.u64 q11, q11, #4 - veor q1, q1, q10 - veor q0, q0, q11 + veor q4, q4, q11 + vshl.u64 q11, q11, #4 + veor q1, q1, q10 + veor q0, q0, q11 sub r5,r5,#1 b .Ldec_sbox .align 4 .Ldec_loop: - vldmia r4!, {q8,q9,q10,q11} + vldmia r4!, {q8-q11} veor q8, q8, q0 veor q9, q9, q1 vtbl.8 d0, {q8}, d24 @@ -224,17 +218,17 @@ _bsaes_decrypt8: vtbl.8 d14, {q11}, d24 vtbl.8 d15, {q11}, d25 .Ldec_sbox: - veor q1, q1, q4 + veor q1, q1, q4 veor q3, q3, q4 veor q4, q4, q7 - veor q1, q1, q6 + veor q1, q1, q6 veor q2, q2, q7 veor q6, q6, q4 veor q0, q0, q1 veor q2, q2, q5 - veor q7, q7, q6 + veor q7, q7, q6 veor q3, q3, q0 veor q5, q5, q0 veor q1, q1, q3 @@ -242,7 +236,7 @@ _bsaes_decrypt8: veor q10, q7, q4 veor q9, q1, q6 veor q13, q4, q0 - vmov q8, q10 + vmov q8, q10 veor q12, q5, q2 vorr q10, q10, q9 @@ -299,7 +293,7 @@ _bsaes_decrypt8: veor q14, q14, q11 veor q12, q5, q2 veor q8, q1, q6 - veor q10, q15, q14 + veor q10, q15, q14 vand q10, q10, q5 veor q5, q5, q1 vand q11, q1, q15 @@ -309,19 +303,19 @@ _bsaes_decrypt8: veor q15, q15, q13 veor q14, q14, q9 veor q11, q15, q14 - veor q10, q13, q9 + veor q10, q13, q9 vand q11, q11, q12 - vand q10, q10, q2 + vand q10, q10, q2 veor q12, q12, q8 - veor q2, q2, q6 + veor q2, q2, q6 vand q8, q8, q15 - vand q6, q6, q13 + vand q6, q6, q13 vand q12, q12, q14 - vand q2, q2, q9 + vand q2, q2, q9 veor q8, q8, q12 - veor q2, q2, q6 + veor q2, q2, q6 veor q12, q12, q11 - veor q6, q6, q10 + veor q6, q6, q10 veor q5, q5, q12 veor q2, q2, q12 veor q1, q1, q8 @@ -330,22 +324,22 @@ _bsaes_decrypt8: veor q12, q3, q0 veor q8, q7, q4 veor q11, q15, q14 - veor q10, q13, q9 + veor q10, q13, q9 vand q11, q11, q12 - vand q10, q10, q0 + vand q10, q10, q0 veor q12, q12, q8 - veor q0, q0, q4 + veor q0, q0, q4 vand q8, q8, q15 - vand q4, q4, q13 + vand q4, q4, q13 vand q12, q12, q14 - vand q0, q0, q9 + vand q0, q0, q9 veor q8, q8, q12 - veor q0, q0, q4 + veor q0, q0, q4 veor q12, q12, q11 - veor q4, q4, q10 + veor q4, q4, q10 veor q15, q15, q13 veor q14, q14, q9 - veor q10, q15, q14 + veor q10, q15, q14 vand q10, q10, q3 veor q3, q3, q7 vand q11, q7, q15 @@ -363,10 +357,10 @@ _bsaes_decrypt8: veor q2, q2, q7 veor q5, q5, q7 veor q4, q4, q2 - veor q7, q7, q0 + veor q7, q7, q0 veor q4, q4, q5 - veor q3, q3, q6 - veor q6, q6, q1 + veor q3, q3, q6 + veor q6, q6, q1 veor q3, q3, q4 veor q4, q4, q0 @@ -391,58 +385,58 @@ _bsaes_decrypt8: veor q12, q12, q2 veor q13, q13, q7 - veor q0, q0, q14 - veor q1, q1, q14 - veor q6, q6, q8 - veor q2, q2, q10 - veor q4, q4, q9 - veor q1, q1, q15 - veor q6, q6, q15 - veor q2, q2, q14 - veor q7, q7, q11 - veor q4, q4, q14 - veor q3, q3, q12 - veor q2, q2, q15 - veor q7, q7, q15 - veor q5, q5, q13 + veor q0, q0, q14 + veor q1, q1, q14 + veor q6, q6, q8 + veor q2, q2, q10 + veor q4, q4, q9 + veor q1, q1, q15 + veor q6, q6, q15 + veor q2, q2, q14 + veor q7, q7, q11 + veor q4, q4, q14 + veor q3, q3, q12 + veor q2, q2, q15 + veor q7, q7, q15 + veor q5, q5, q13 vext.8 q8, q0, q0, #12 @ x0 <<< 32 vext.8 q9, q1, q1, #12 - veor q0, q0, q8 @ x0 ^ (x0 <<< 32) + veor q0, q0, q8 @ x0 ^ (x0 <<< 32) vext.8 q10, q6, q6, #12 - veor q1, q1, q9 + veor q1, q1, q9 vext.8 q11, q4, q4, #12 - veor q6, q6, q10 + veor q6, q6, q10 vext.8 q12, q2, q2, #12 - veor q4, q4, q11 + veor q4, q4, q11 vext.8 q13, q7, q7, #12 - veor q2, q2, q12 + veor q2, q2, q12 vext.8 q14, q3, q3, #12 - veor q7, q7, q13 + veor q7, q7, q13 vext.8 q15, q5, q5, #12 - veor q3, q3, q14 + veor q3, q3, q14 veor q9, q9, q0 - veor q5, q5, q15 - vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) + veor q5, q5, q15 + vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) veor q10, q10, q1 veor q8, q8, q5 veor q9, q9, q5 - vext.8 q1, q1, q1, #8 + vext.8 q1, q1, q1, #8 veor q13, q13, q2 - veor q0, q0, q8 + veor q0, q0, q8 veor q14, q14, q7 - veor q1, q1, q9 - vext.8 q8, q2, q2, #8 + veor q1, q1, q9 + vext.8 q8, q2, q2, #8 veor q12, q12, q4 - vext.8 q9, q7, q7, #8 + vext.8 q9, q7, q7, #8 veor q15, q15, q3 - vext.8 q2, q4, q4, #8 + vext.8 q2, q4, q4, #8 veor q11, q11, q6 - vext.8 q7, q5, q5, #8 + vext.8 q7, q5, q5, #8 veor q12, q12, q5 - vext.8 q4, q3, q3, #8 + vext.8 q4, q3, q3, #8 veor q11, q11, q5 - vext.8 q3, q6, q6, #8 + vext.8 q3, q6, q6, #8 veor q5, q9, q13 veor q11, q11, q2 veor q7, q7, q15 @@ -462,78 +456,78 @@ _bsaes_decrypt8: vmov.i8 q8,#0x55 @ compose .LBS0 vmov.i8 q9,#0x33 @ compose .LBS1 vshr.u64 q10, q3, #1 - vshr.u64 q11, q2, #1 - veor q10, q10, q5 - veor q11, q11, q7 - vand q10, q10, q8 - vand q11, q11, q8 - veor q5, q5, q10 + vshr.u64 q11, q2, #1 + veor q10, q10, q5 + veor q11, q11, q7 + vand q10, q10, q8 + vand q11, q11, q8 + veor q5, q5, q10 vshl.u64 q10, q10, #1 - veor q7, q7, q11 - vshl.u64 q11, q11, #1 - veor q3, q3, q10 - veor q2, q2, q11 + veor q7, q7, q11 + vshl.u64 q11, q11, #1 + veor q3, q3, q10 + veor q2, q2, q11 vshr.u64 q10, q6, #1 - vshr.u64 q11, q0, #1 - veor q10, q10, q4 - veor q11, q11, q1 - vand q10, q10, q8 - vand q11, q11, q8 - veor q4, q4, q10 + vshr.u64 q11, q0, #1 + veor q10, q10, q4 + veor q11, q11, q1 + vand q10, q10, q8 + vand q11, q11, q8 + veor q4, q4, q10 vshl.u64 q10, q10, #1 - veor q1, q1, q11 - vshl.u64 q11, q11, #1 - veor q6, q6, q10 - veor q0, q0, q11 + veor q1, q1, q11 + vshl.u64 q11, q11, #1 + veor q6, q6, q10 + veor q0, q0, q11 vmov.i8 q8,#0x0f @ compose .LBS2 vshr.u64 q10, q7, #2 - vshr.u64 q11, q2, #2 - veor q10, q10, q5 - veor q11, q11, q3 - vand q10, q10, q9 - vand q11, q11, q9 - veor q5, q5, q10 + vshr.u64 q11, q2, #2 + veor q10, q10, q5 + veor q11, q11, q3 + vand q10, q10, q9 + vand q11, q11, q9 + veor q5, q5, q10 vshl.u64 q10, q10, #2 - veor q3, q3, q11 - vshl.u64 q11, q11, #2 - veor q7, q7, q10 - veor q2, q2, q11 + veor q3, q3, q11 + vshl.u64 q11, q11, #2 + veor q7, q7, q10 + veor q2, q2, q11 vshr.u64 q10, q1, #2 - vshr.u64 q11, q0, #2 - veor q10, q10, q4 - veor q11, q11, q6 - vand q10, q10, q9 - vand q11, q11, q9 - veor q4, q4, q10 + vshr.u64 q11, q0, #2 + veor q10, q10, q4 + veor q11, q11, q6 + vand q10, q10, q9 + vand q11, q11, q9 + veor q4, q4, q10 vshl.u64 q10, q10, #2 - veor q6, q6, q11 - vshl.u64 q11, q11, #2 - veor q1, q1, q10 - veor q0, q0, q11 + veor q6, q6, q11 + vshl.u64 q11, q11, #2 + veor q1, q1, q10 + veor q0, q0, q11 vshr.u64 q10, q4, #4 - vshr.u64 q11, q6, #4 - veor q10, q10, q5 - veor q11, q11, q3 - vand q10, q10, q8 - vand q11, q11, q8 - veor q5, q5, q10 + vshr.u64 q11, q6, #4 + veor q10, q10, q5 + veor q11, q11, q3 + vand q10, q10, q8 + vand q11, q11, q8 + veor q5, q5, q10 vshl.u64 q10, q10, #4 - veor q3, q3, q11 - vshl.u64 q11, q11, #4 - veor q4, q4, q10 - veor q6, q6, q11 + veor q3, q3, q11 + vshl.u64 q11, q11, #4 + veor q4, q4, q10 + veor q6, q6, q11 vshr.u64 q10, q1, #4 - vshr.u64 q11, q0, #4 - veor q10, q10, q7 - veor q11, q11, q2 - vand q10, q10, q8 - vand q11, q11, q8 - veor q7, q7, q10 + vshr.u64 q11, q0, #4 + veor q10, q10, q7 + veor q11, q11, q2 + vand q10, q10, q8 + vand q11, q11, q8 + veor q7, q7, q10 vshl.u64 q10, q10, #4 - veor q2, q2, q11 - vshl.u64 q11, q11, #4 - veor q1, q1, q10 - veor q0, q0, q11 + veor q2, q2, q11 + vshl.u64 q11, q11, #4 + veor q1, q1, q10 + veor q0, q0, q11 vldmia r4, {q8} @ last round key veor q6, q6, q8 veor q4, q4, q8 @@ -549,24 +543,23 @@ _bsaes_decrypt8: .type _bsaes_const,%object .align 6 _bsaes_const: -.LM0ISR:@ InvShiftRows constants -.quad 0x0a0e0206070b0f03, 0x0004080c0d010509 +.LM0ISR: @ InvShiftRows constants + .quad 0x0a0e0206070b0f03, 0x0004080c0d010509 .LISR: -.quad 0x0504070602010003, 0x0f0e0d0c080b0a09 + .quad 0x0504070602010003, 0x0f0e0d0c080b0a09 .LISRM0: -.quad 0x01040b0e0205080f, 0x0306090c00070a0d -.LM0SR:@ ShiftRows constants -.quad 0x0a0e02060f03070b, 0x0004080c05090d01 + .quad 0x01040b0e0205080f, 0x0306090c00070a0d +.LM0SR: @ ShiftRows constants + .quad 0x0a0e02060f03070b, 0x0004080c05090d01 .LSR: -.quad 0x0504070600030201, 0x0f0e0d0c0a09080b + .quad 0x0504070600030201, 0x0f0e0d0c0a09080b .LSRM0: -.quad 0x0304090e00050a0f, 0x01060b0c0207080d + .quad 0x0304090e00050a0f, 0x01060b0c0207080d .LM0: -.quad 0x02060a0e03070b0f, 0x0004080c0105090d + .quad 0x02060a0e03070b0f, 0x0004080c0105090d .LREVM0SR: -.quad 0x090d01050c000408, 0x03070b0f060a0e02 -.byte 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 + .quad 0x090d01050c000408, 0x03070b0f060a0e02 +.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by " .align 6 .size _bsaes_const,.-_bsaes_const @@ -575,119 +568,115 @@ _bsaes_const: _bsaes_encrypt8: adr r6,_bsaes_encrypt8 vldmia r4!, {q9} @ round 0 key -#ifdef __APPLE__ - adr r6,.LM0SR -#else sub r6,r6,#_bsaes_encrypt8-.LM0SR -#endif vldmia r6!, {q8} @ .LM0SR _bsaes_encrypt8_alt: veor q10, q0, q9 @ xor with round0 key veor q11, q1, q9 - vtbl.8 d0, {q10}, d16 - vtbl.8 d1, {q10}, d17 + vtbl.8 d0, {q10}, d16 + vtbl.8 d1, {q10}, d17 veor q12, q2, q9 - vtbl.8 d2, {q11}, d16 - vtbl.8 d3, {q11}, d17 + vtbl.8 d2, {q11}, d16 + vtbl.8 d3, {q11}, d17 veor q13, q3, q9 - vtbl.8 d4, {q12}, d16 - vtbl.8 d5, {q12}, d17 + vtbl.8 d4, {q12}, d16 + vtbl.8 d5, {q12}, d17 veor q14, q4, q9 - vtbl.8 d6, {q13}, d16 - vtbl.8 d7, {q13}, d17 + vtbl.8 d6, {q13}, d16 + vtbl.8 d7, {q13}, d17 veor q15, q5, q9 - vtbl.8 d8, {q14}, d16 - vtbl.8 d9, {q14}, d17 + vtbl.8 d8, {q14}, d16 + vtbl.8 d9, {q14}, d17 veor q10, q6, q9 - vtbl.8 d10, {q15}, d16 - vtbl.8 d11, {q15}, d17 + vtbl.8 d10, {q15}, d16 + vtbl.8 d11, {q15}, d17 veor q11, q7, q9 - vtbl.8 d12, {q10}, d16 - vtbl.8 d13, {q10}, d17 - vtbl.8 d14, {q11}, d16 - vtbl.8 d15, {q11}, d17 + vtbl.8 d12, {q10}, d16 + vtbl.8 d13, {q10}, d17 + vtbl.8 d14, {q11}, d16 + vtbl.8 d15, {q11}, d17 _bsaes_encrypt8_bitslice: vmov.i8 q8,#0x55 @ compose .LBS0 vmov.i8 q9,#0x33 @ compose .LBS1 vshr.u64 q10, q6, #1 - vshr.u64 q11, q4, #1 - veor q10, q10, q7 - veor q11, q11, q5 - vand q10, q10, q8 - vand q11, q11, q8 - veor q7, q7, q10 + vshr.u64 q11, q4, #1 + veor q10, q10, q7 + veor q11, q11, q5 + vand q10, q10, q8 + vand q11, q11, q8 + veor q7, q7, q10 vshl.u64 q10, q10, #1 - veor q5, q5, q11 - vshl.u64 q11, q11, #1 - veor q6, q6, q10 - veor q4, q4, q11 + veor q5, q5, q11 + vshl.u64 q11, q11, #1 + veor q6, q6, q10 + veor q4, q4, q11 vshr.u64 q10, q2, #1 - vshr.u64 q11, q0, #1 - veor q10, q10, q3 - veor q11, q11, q1 - vand q10, q10, q8 - vand q11, q11, q8 - veor q3, q3, q10 + vshr.u64 q11, q0, #1 + veor q10, q10, q3 + veor q11, q11, q1 + vand q10, q10, q8 + vand q11, q11, q8 + veor q3, q3, q10 vshl.u64 q10, q10, #1 - veor q1, q1, q11 - vshl.u64 q11, q11, #1 - veor q2, q2, q10 - veor q0, q0, q11 + veor q1, q1, q11 + vshl.u64 q11, q11, #1 + veor q2, q2, q10 + veor q0, q0, q11 vmov.i8 q8,#0x0f @ compose .LBS2 vshr.u64 q10, q5, #2 - vshr.u64 q11, q4, #2 - veor q10, q10, q7 - veor q11, q11, q6 - vand q10, q10, q9 - vand q11, q11, q9 - veor q7, q7, q10 + vshr.u64 q11, q4, #2 + veor q10, q10, q7 + veor q11, q11, q6 + vand q10, q10, q9 + vand q11, q11, q9 + veor q7, q7, q10 vshl.u64 q10, q10, #2 - veor q6, q6, q11 - vshl.u64 q11, q11, #2 - veor q5, q5, q10 - veor q4, q4, q11 + veor q6, q6, q11 + vshl.u64 q11, q11, #2 + veor q5, q5, q10 + veor q4, q4, q11 vshr.u64 q10, q1, #2 - vshr.u64 q11, q0, #2 - veor q10, q10, q3 - veor q11, q11, q2 - vand q10, q10, q9 - vand q11, q11, q9 - veor q3, q3, q10 + vshr.u64 q11, q0, #2 + veor q10, q10, q3 + veor q11, q11, q2 + vand q10, q10, q9 + vand q11, q11, q9 + veor q3, q3, q10 vshl.u64 q10, q10, #2 - veor q2, q2, q11 - vshl.u64 q11, q11, #2 - veor q1, q1, q10 - veor q0, q0, q11 + veor q2, q2, q11 + vshl.u64 q11, q11, #2 + veor q1, q1, q10 + veor q0, q0, q11 vshr.u64 q10, q3, #4 - vshr.u64 q11, q2, #4 - veor q10, q10, q7 - veor q11, q11, q6 - vand q10, q10, q8 - vand q11, q11, q8 - veor q7, q7, q10 + vshr.u64 q11, q2, #4 + veor q10, q10, q7 + veor q11, q11, q6 + vand q10, q10, q8 + vand q11, q11, q8 + veor q7, q7, q10 vshl.u64 q10, q10, #4 - veor q6, q6, q11 - vshl.u64 q11, q11, #4 - veor q3, q3, q10 - veor q2, q2, q11 + veor q6, q6, q11 + vshl.u64 q11, q11, #4 + veor q3, q3, q10 + veor q2, q2, q11 vshr.u64 q10, q1, #4 - vshr.u64 q11, q0, #4 - veor q10, q10, q5 - veor q11, q11, q4 - vand q10, q10, q8 - vand q11, q11, q8 - veor q5, q5, q10 + vshr.u64 q11, q0, #4 + veor q10, q10, q5 + veor q11, q11, q4 + vand q10, q10, q8 + vand q11, q11, q8 + veor q5, q5, q10 vshl.u64 q10, q10, #4 - veor q4, q4, q11 - vshl.u64 q11, q11, #4 - veor q1, q1, q10 - veor q0, q0, q11 + veor q4, q4, q11 + vshl.u64 q11, q11, #4 + veor q1, q1, q10 + veor q0, q0, q11 sub r5,r5,#1 b .Lenc_sbox .align 4 .Lenc_loop: - vldmia r4!, {q8,q9,q10,q11} + vldmia r4!, {q8-q11} veor q8, q8, q0 veor q9, q9, q1 vtbl.8 d0, {q8}, d24 @@ -736,7 +725,7 @@ _bsaes_encrypt8_bitslice: veor q10, q1, q2 veor q9, q5, q3 veor q13, q2, q4 - vmov q8, q10 + vmov q8, q10 veor q12, q6, q0 vorr q10, q10, q9 @@ -793,7 +782,7 @@ _bsaes_encrypt8_bitslice: veor q14, q14, q11 veor q12, q6, q0 veor q8, q5, q3 - veor q10, q15, q14 + veor q10, q15, q14 vand q10, q10, q6 veor q6, q6, q5 vand q11, q5, q15 @@ -803,19 +792,19 @@ _bsaes_encrypt8_bitslice: veor q15, q15, q13 veor q14, q14, q9 veor q11, q15, q14 - veor q10, q13, q9 + veor q10, q13, q9 vand q11, q11, q12 - vand q10, q10, q0 + vand q10, q10, q0 veor q12, q12, q8 - veor q0, q0, q3 + veor q0, q0, q3 vand q8, q8, q15 - vand q3, q3, q13 + vand q3, q3, q13 vand q12, q12, q14 - vand q0, q0, q9 + vand q0, q0, q9 veor q8, q8, q12 - veor q0, q0, q3 + veor q0, q0, q3 veor q12, q12, q11 - veor q3, q3, q10 + veor q3, q3, q10 veor q6, q6, q12 veor q0, q0, q12 veor q5, q5, q8 @@ -824,22 +813,22 @@ _bsaes_encrypt8_bitslice: veor q12, q7, q4 veor q8, q1, q2 veor q11, q15, q14 - veor q10, q13, q9 + veor q10, q13, q9 vand q11, q11, q12 - vand q10, q10, q4 + vand q10, q10, q4 veor q12, q12, q8 - veor q4, q4, q2 + veor q4, q4, q2 vand q8, q8, q15 - vand q2, q2, q13 + vand q2, q2, q13 vand q12, q12, q14 - vand q4, q4, q9 + vand q4, q4, q9 veor q8, q8, q12 - veor q4, q4, q2 + veor q4, q4, q2 veor q12, q12, q11 - veor q2, q2, q10 + veor q2, q2, q10 veor q15, q15, q13 veor q14, q14, q9 - veor q10, q15, q14 + veor q10, q15, q14 vand q10, q10, q7 veor q7, q7, q1 vand q11, q1, q15 @@ -867,42 +856,42 @@ _bsaes_encrypt8_bitslice: bcc .Lenc_done vext.8 q8, q0, q0, #12 @ x0 <<< 32 vext.8 q9, q1, q1, #12 - veor q0, q0, q8 @ x0 ^ (x0 <<< 32) + veor q0, q0, q8 @ x0 ^ (x0 <<< 32) vext.8 q10, q4, q4, #12 - veor q1, q1, q9 + veor q1, q1, q9 vext.8 q11, q6, q6, #12 - veor q4, q4, q10 + veor q4, q4, q10 vext.8 q12, q3, q3, #12 - veor q6, q6, q11 + veor q6, q6, q11 vext.8 q13, q7, q7, #12 - veor q3, q3, q12 + veor q3, q3, q12 vext.8 q14, q2, q2, #12 - veor q7, q7, q13 + veor q7, q7, q13 vext.8 q15, q5, q5, #12 - veor q2, q2, q14 + veor q2, q2, q14 veor q9, q9, q0 - veor q5, q5, q15 - vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) + veor q5, q5, q15 + vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) veor q10, q10, q1 veor q8, q8, q5 veor q9, q9, q5 - vext.8 q1, q1, q1, #8 + vext.8 q1, q1, q1, #8 veor q13, q13, q3 - veor q0, q0, q8 + veor q0, q0, q8 veor q14, q14, q7 - veor q1, q1, q9 - vext.8 q8, q3, q3, #8 + veor q1, q1, q9 + vext.8 q8, q3, q3, #8 veor q12, q12, q6 - vext.8 q9, q7, q7, #8 + vext.8 q9, q7, q7, #8 veor q15, q15, q2 - vext.8 q3, q6, q6, #8 + vext.8 q3, q6, q6, #8 veor q11, q11, q4 - vext.8 q7, q5, q5, #8 + vext.8 q7, q5, q5, #8 veor q12, q12, q5 - vext.8 q6, q2, q2, #8 + vext.8 q6, q2, q2, #8 veor q11, q11, q5 - vext.8 q2, q4, q4, #8 + vext.8 q2, q4, q4, #8 veor q5, q9, q13 veor q4, q8, q12 veor q3, q3, q11 @@ -922,78 +911,78 @@ _bsaes_encrypt8_bitslice: vmov.i8 q8,#0x55 @ compose .LBS0 vmov.i8 q9,#0x33 @ compose .LBS1 vshr.u64 q10, q2, #1 - vshr.u64 q11, q3, #1 - veor q10, q10, q5 - veor q11, q11, q7 - vand q10, q10, q8 - vand q11, q11, q8 - veor q5, q5, q10 + vshr.u64 q11, q3, #1 + veor q10, q10, q5 + veor q11, q11, q7 + vand q10, q10, q8 + vand q11, q11, q8 + veor q5, q5, q10 vshl.u64 q10, q10, #1 - veor q7, q7, q11 - vshl.u64 q11, q11, #1 - veor q2, q2, q10 - veor q3, q3, q11 + veor q7, q7, q11 + vshl.u64 q11, q11, #1 + veor q2, q2, q10 + veor q3, q3, q11 vshr.u64 q10, q4, #1 - vshr.u64 q11, q0, #1 - veor q10, q10, q6 - veor q11, q11, q1 - vand q10, q10, q8 - vand q11, q11, q8 - veor q6, q6, q10 + vshr.u64 q11, q0, #1 + veor q10, q10, q6 + veor q11, q11, q1 + vand q10, q10, q8 + vand q11, q11, q8 + veor q6, q6, q10 vshl.u64 q10, q10, #1 - veor q1, q1, q11 - vshl.u64 q11, q11, #1 - veor q4, q4, q10 - veor q0, q0, q11 + veor q1, q1, q11 + vshl.u64 q11, q11, #1 + veor q4, q4, q10 + veor q0, q0, q11 vmov.i8 q8,#0x0f @ compose .LBS2 vshr.u64 q10, q7, #2 - vshr.u64 q11, q3, #2 - veor q10, q10, q5 - veor q11, q11, q2 - vand q10, q10, q9 - vand q11, q11, q9 - veor q5, q5, q10 + vshr.u64 q11, q3, #2 + veor q10, q10, q5 + veor q11, q11, q2 + vand q10, q10, q9 + vand q11, q11, q9 + veor q5, q5, q10 vshl.u64 q10, q10, #2 - veor q2, q2, q11 - vshl.u64 q11, q11, #2 - veor q7, q7, q10 - veor q3, q3, q11 + veor q2, q2, q11 + vshl.u64 q11, q11, #2 + veor q7, q7, q10 + veor q3, q3, q11 vshr.u64 q10, q1, #2 - vshr.u64 q11, q0, #2 - veor q10, q10, q6 - veor q11, q11, q4 - vand q10, q10, q9 - vand q11, q11, q9 - veor q6, q6, q10 + vshr.u64 q11, q0, #2 + veor q10, q10, q6 + veor q11, q11, q4 + vand q10, q10, q9 + vand q11, q11, q9 + veor q6, q6, q10 vshl.u64 q10, q10, #2 - veor q4, q4, q11 - vshl.u64 q11, q11, #2 - veor q1, q1, q10 - veor q0, q0, q11 + veor q4, q4, q11 + vshl.u64 q11, q11, #2 + veor q1, q1, q10 + veor q0, q0, q11 vshr.u64 q10, q6, #4 - vshr.u64 q11, q4, #4 - veor q10, q10, q5 - veor q11, q11, q2 - vand q10, q10, q8 - vand q11, q11, q8 - veor q5, q5, q10 + vshr.u64 q11, q4, #4 + veor q10, q10, q5 + veor q11, q11, q2 + vand q10, q10, q8 + vand q11, q11, q8 + veor q5, q5, q10 vshl.u64 q10, q10, #4 - veor q2, q2, q11 - vshl.u64 q11, q11, #4 - veor q6, q6, q10 - veor q4, q4, q11 + veor q2, q2, q11 + vshl.u64 q11, q11, #4 + veor q6, q6, q10 + veor q4, q4, q11 vshr.u64 q10, q1, #4 - vshr.u64 q11, q0, #4 - veor q10, q10, q7 - veor q11, q11, q3 - vand q10, q10, q8 - vand q11, q11, q8 - veor q7, q7, q10 + vshr.u64 q11, q0, #4 + veor q10, q10, q7 + veor q11, q11, q3 + vand q10, q10, q8 + vand q11, q11, q8 + veor q7, q7, q10 vshl.u64 q10, q10, #4 - veor q3, q3, q11 - vshl.u64 q11, q11, #4 - veor q1, q1, q10 - veor q0, q0, q11 + veor q3, q3, q11 + vshl.u64 q11, q11, #4 + veor q1, q1, q10 + veor q0, q0, q11 vldmia r4, {q8} @ last round key veor q4, q4, q8 veor q6, q6, q8 @@ -1010,11 +999,7 @@ _bsaes_encrypt8_bitslice: _bsaes_key_convert: adr r6,_bsaes_key_convert vld1.8 {q7}, [r4]! @ load round 0 key -#ifdef __APPLE__ - adr r6,.LM0 -#else sub r6,r6,#_bsaes_key_convert-.LM0 -#endif vld1.8 {q15}, [r4]! @ load round 1 key vmov.i8 q8, #0x01 @ bit masks @@ -1057,17 +1042,17 @@ _bsaes_key_convert: vrev32.8 q15, q15 #endif subs r5,r5,#1 - vstmia r12!,{q0,q1,q2,q3,q4,q5,q6,q7} @ write bit-sliced round key + vstmia r12!,{q0-q7} @ write bit-sliced round key bne .Lkey_loop vmov.i8 q7,#0x63 @ compose .L63 @ don't save last round key bx lr .size _bsaes_key_convert,.-_bsaes_key_convert +.extern AES_cbc_encrypt +.extern AES_decrypt - - -.globl bsaes_cbc_encrypt +.global bsaes_cbc_encrypt .hidden bsaes_cbc_encrypt .type bsaes_cbc_encrypt,%function .align 5 @@ -1086,7 +1071,7 @@ bsaes_cbc_encrypt: @ it is up to the caller to make sure we are called with enc == 0 mov ip, sp - stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} + stmdb sp!, {r4-r10, lr} VFP_ABI_PUSH ldr r8, [ip] @ IV is 1st arg on the stack mov r2, r2, lsr#4 @ len in 16 byte blocks @@ -1126,7 +1111,7 @@ bsaes_cbc_encrypt: vstmia r4, {q7} .align 2 - +0: #endif vld1.8 {q15}, [r8] @ load IV @@ -1137,33 +1122,33 @@ bsaes_cbc_encrypt: subs r2, r2, #0x8 bmi .Lcbc_dec_loop_finish - vld1.8 {q0,q1}, [r0]! @ load input - vld1.8 {q2,q3}, [r0]! + vld1.8 {q0-q1}, [r0]! @ load input + vld1.8 {q2-q3}, [r0]! #ifndef BSAES_ASM_EXTENDED_KEY mov r4, sp @ pass the key #else add r4, r3, #248 #endif - vld1.8 {q4,q5}, [r0]! + vld1.8 {q4-q5}, [r0]! mov r5, r10 - vld1.8 {q6,q7}, [r0] + vld1.8 {q6-q7}, [r0] sub r0, r0, #0x60 vstmia r9, {q15} @ put aside IV bl _bsaes_decrypt8 vldmia r9, {q14} @ reload IV - vld1.8 {q8,q9}, [r0]! @ reload input + vld1.8 {q8-q9}, [r0]! @ reload input veor q0, q0, q14 @ ^= IV - vld1.8 {q10,q11}, [r0]! + vld1.8 {q10-q11}, [r0]! veor q1, q1, q8 veor q6, q6, q9 - vld1.8 {q12,q13}, [r0]! + vld1.8 {q12-q13}, [r0]! veor q4, q4, q10 veor q2, q2, q11 - vld1.8 {q14,q15}, [r0]! + vld1.8 {q14-q15}, [r0]! veor q7, q7, q12 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output veor q3, q3, q13 vst1.8 {q6}, [r1]! veor q5, q5, q14 @@ -1207,17 +1192,17 @@ bsaes_cbc_encrypt: bl _bsaes_decrypt8 vldmia r9, {q14} @ reload IV - vld1.8 {q8,q9}, [r0]! @ reload input + vld1.8 {q8-q9}, [r0]! @ reload input veor q0, q0, q14 @ ^= IV - vld1.8 {q10,q11}, [r0]! + vld1.8 {q10-q11}, [r0]! veor q1, q1, q8 veor q6, q6, q9 - vld1.8 {q12,q13}, [r0]! + vld1.8 {q12-q13}, [r0]! veor q4, q4, q10 veor q2, q2, q11 vld1.8 {q15}, [r0]! veor q7, q7, q12 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output veor q3, q3, q13 vst1.8 {q6}, [r1]! vst1.8 {q4}, [r1]! @@ -1230,9 +1215,9 @@ bsaes_cbc_encrypt: sub r0, r0, #0x60 bl _bsaes_decrypt8 vldmia r9,{q14} @ reload IV - vld1.8 {q8,q9}, [r0]! @ reload input + vld1.8 {q8-q9}, [r0]! @ reload input veor q0, q0, q14 @ ^= IV - vld1.8 {q10,q11}, [r0]! + vld1.8 {q10-q11}, [r0]! veor q1, q1, q8 veor q6, q6, q9 vld1.8 {q12}, [r0]! @@ -1240,7 +1225,7 @@ bsaes_cbc_encrypt: veor q2, q2, q11 vld1.8 {q15}, [r0]! veor q7, q7, q12 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output vst1.8 {q6}, [r1]! vst1.8 {q4}, [r1]! vst1.8 {q2}, [r1]! @@ -1251,14 +1236,14 @@ bsaes_cbc_encrypt: sub r0, r0, #0x50 bl _bsaes_decrypt8 vldmia r9, {q14} @ reload IV - vld1.8 {q8,q9}, [r0]! @ reload input + vld1.8 {q8-q9}, [r0]! @ reload input veor q0, q0, q14 @ ^= IV - vld1.8 {q10,q11}, [r0]! + vld1.8 {q10-q11}, [r0]! veor q1, q1, q8 veor q6, q6, q9 vld1.8 {q15}, [r0]! veor q4, q4, q10 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output veor q2, q2, q11 vst1.8 {q6}, [r1]! vst1.8 {q4}, [r1]! @@ -1269,14 +1254,14 @@ bsaes_cbc_encrypt: sub r0, r0, #0x40 bl _bsaes_decrypt8 vldmia r9, {q14} @ reload IV - vld1.8 {q8,q9}, [r0]! @ reload input + vld1.8 {q8-q9}, [r0]! @ reload input veor q0, q0, q14 @ ^= IV vld1.8 {q10}, [r0]! veor q1, q1, q8 veor q6, q6, q9 vld1.8 {q15}, [r0]! veor q4, q4, q10 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output vst1.8 {q6}, [r1]! vst1.8 {q4}, [r1]! b .Lcbc_dec_done @@ -1285,12 +1270,12 @@ bsaes_cbc_encrypt: sub r0, r0, #0x30 bl _bsaes_decrypt8 vldmia r9, {q14} @ reload IV - vld1.8 {q8,q9}, [r0]! @ reload input + vld1.8 {q8-q9}, [r0]! @ reload input veor q0, q0, q14 @ ^= IV vld1.8 {q15}, [r0]! veor q1, q1, q8 veor q6, q6, q9 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output vst1.8 {q6}, [r1]! b .Lcbc_dec_done .align 4 @@ -1302,7 +1287,7 @@ bsaes_cbc_encrypt: veor q0, q0, q14 @ ^= IV vld1.8 {q15}, [r0]! @ reload input veor q1, q1, q8 - vst1.8 {q0,q1}, [r1]! @ write output + vst1.8 {q0-q1}, [r1]! @ write output b .Lcbc_dec_done .align 4 .Lcbc_dec_one: @@ -1322,20 +1307,20 @@ bsaes_cbc_encrypt: #ifndef BSAES_ASM_EXTENDED_KEY vmov.i32 q0, #0 vmov.i32 q1, #0 -.Lcbc_dec_bzero:@ wipe key schedule [if any] - vstmia sp!, {q0,q1} - cmp sp, r9 - bne .Lcbc_dec_bzero +.Lcbc_dec_bzero: @ wipe key schedule [if any] + vstmia sp!, {q0-q1} + cmp sp, r9 + bne .Lcbc_dec_bzero #endif mov sp, r9 add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb vst1.8 {q15}, [r8] @ return IV VFP_ABI_POP - ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} + ldmia sp!, {r4-r10, pc} .size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt - -.globl bsaes_ctr32_encrypt_blocks +.extern AES_encrypt +.global bsaes_ctr32_encrypt_blocks .hidden bsaes_ctr32_encrypt_blocks .type bsaes_ctr32_encrypt_blocks,%function .align 5 @@ -1344,7 +1329,7 @@ bsaes_ctr32_encrypt_blocks: blo .Lctr_enc_short @ small sizes mov ip, sp - stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} + stmdb sp!, {r4-r10, lr} VFP_ABI_PUSH ldr r8, [ip] @ ctr is 1st arg on the stack sub sp, sp, #0x10 @ scratch space to carry over the ctr @@ -1365,12 +1350,7 @@ bsaes_ctr32_encrypt_blocks: vstmia r12, {q7} @ save last round key vld1.8 {q0}, [r8] @ load counter -#ifdef __APPLE__ - mov r8, #.LREVM0SR-.LM0 - add r8, r6, r8 -#else add r8, r6, #.LREVM0SR-.LM0 @ borrow r8 -#endif vldmia sp, {q4} @ load round0 key #else ldr r12, [r3, #244] @@ -1387,7 +1367,7 @@ bsaes_ctr32_encrypt_blocks: vstmia r12, {q7} @ save last round key .align 2 - add r12, r3, #248 +0: add r12, r3, #248 vld1.8 {q0}, [r8] @ load counter adrl r8, .LREVM0SR @ borrow r8 vldmia r12, {q4} @ load round0 key @@ -1395,9 +1375,9 @@ bsaes_ctr32_encrypt_blocks: #endif vmov.i32 q8,#1 @ compose 1<<96 - veor q9,q9,q9 + veor q9,q9,q9 vrev32.8 q0,q0 - vext.8 q8,q9,q8,#4 + vext.8 q8,q9,q8,#4 vrev32.8 q4,q4 vadd.u32 q9,q8,q8 @ compose 2<<96 vstmia sp, {q4} @ save adjusted round0 key @@ -1418,122 +1398,117 @@ bsaes_ctr32_encrypt_blocks: @ Borrow prologue from _bsaes_encrypt8 to use the opportunity @ to flip byte order in 32-bit counter - vldmia sp, {q9} @ load round0 key + vldmia sp, {q9} @ load round0 key #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x10 @ pass next round key + add r4, sp, #0x10 @ pass next round key #else - add r4, r3, #264 + add r4, r3, #264 #endif - vldmia r8, {q8} @ .LREVM0SR - mov r5, r10 @ pass rounds - vstmia r9, {q10} @ save next counter -#ifdef __APPLE__ - mov r6, #.LREVM0SR-.LSR - sub r6, r8, r6 -#else - sub r6, r8, #.LREVM0SR-.LSR @ pass constants -#endif - - bl _bsaes_encrypt8_alt - - subs r2, r2, #8 - blo .Lctr_enc_loop_done - - vld1.8 {q8,q9}, [r0]! @ load input - vld1.8 {q10,q11}, [r0]! - veor q0, q8 - veor q1, q9 - vld1.8 {q12,q13}, [r0]! - veor q4, q10 - veor q6, q11 - vld1.8 {q14,q15}, [r0]! - veor q3, q12 - vst1.8 {q0,q1}, [r1]! @ write output - veor q7, q13 - veor q2, q14 - vst1.8 {q4}, [r1]! - veor q5, q15 - vst1.8 {q6}, [r1]! + vldmia r8, {q8} @ .LREVM0SR + mov r5, r10 @ pass rounds + vstmia r9, {q10} @ save next counter + sub r6, r8, #.LREVM0SR-.LSR @ pass constants + + bl _bsaes_encrypt8_alt + + subs r2, r2, #8 + blo .Lctr_enc_loop_done + + vld1.8 {q8-q9}, [r0]! @ load input + vld1.8 {q10-q11}, [r0]! + veor q0, q8 + veor q1, q9 + vld1.8 {q12-q13}, [r0]! + veor q4, q10 + veor q6, q11 + vld1.8 {q14-q15}, [r0]! + veor q3, q12 + vst1.8 {q0-q1}, [r1]! @ write output + veor q7, q13 + veor q2, q14 + vst1.8 {q4}, [r1]! + veor q5, q15 + vst1.8 {q6}, [r1]! vmov.i32 q8, #1 @ compose 1<<96 - vst1.8 {q3}, [r1]! - veor q9, q9, q9 - vst1.8 {q7}, [r1]! - vext.8 q8, q9, q8, #4 - vst1.8 {q2}, [r1]! + vst1.8 {q3}, [r1]! + veor q9, q9, q9 + vst1.8 {q7}, [r1]! + vext.8 q8, q9, q8, #4 + vst1.8 {q2}, [r1]! vadd.u32 q9,q8,q8 @ compose 2<<96 - vst1.8 {q5}, [r1]! - vldmia r9, {q0} @ load counter + vst1.8 {q5}, [r1]! + vldmia r9, {q0} @ load counter - bne .Lctr_enc_loop - b .Lctr_enc_done + bne .Lctr_enc_loop + b .Lctr_enc_done .align 4 .Lctr_enc_loop_done: - add r2, r2, #8 - vld1.8 {q8}, [r0]! @ load input - veor q0, q8 - vst1.8 {q0}, [r1]! @ write output - cmp r2, #2 - blo .Lctr_enc_done - vld1.8 {q9}, [r0]! - veor q1, q9 - vst1.8 {q1}, [r1]! - beq .Lctr_enc_done - vld1.8 {q10}, [r0]! - veor q4, q10 - vst1.8 {q4}, [r1]! - cmp r2, #4 - blo .Lctr_enc_done - vld1.8 {q11}, [r0]! - veor q6, q11 - vst1.8 {q6}, [r1]! - beq .Lctr_enc_done - vld1.8 {q12}, [r0]! - veor q3, q12 - vst1.8 {q3}, [r1]! - cmp r2, #6 - blo .Lctr_enc_done - vld1.8 {q13}, [r0]! - veor q7, q13 - vst1.8 {q7}, [r1]! - beq .Lctr_enc_done - vld1.8 {q14}, [r0] - veor q2, q14 - vst1.8 {q2}, [r1]! + add r2, r2, #8 + vld1.8 {q8}, [r0]! @ load input + veor q0, q8 + vst1.8 {q0}, [r1]! @ write output + cmp r2, #2 + blo .Lctr_enc_done + vld1.8 {q9}, [r0]! + veor q1, q9 + vst1.8 {q1}, [r1]! + beq .Lctr_enc_done + vld1.8 {q10}, [r0]! + veor q4, q10 + vst1.8 {q4}, [r1]! + cmp r2, #4 + blo .Lctr_enc_done + vld1.8 {q11}, [r0]! + veor q6, q11 + vst1.8 {q6}, [r1]! + beq .Lctr_enc_done + vld1.8 {q12}, [r0]! + veor q3, q12 + vst1.8 {q3}, [r1]! + cmp r2, #6 + blo .Lctr_enc_done + vld1.8 {q13}, [r0]! + veor q7, q13 + vst1.8 {q7}, [r1]! + beq .Lctr_enc_done + vld1.8 {q14}, [r0] + veor q2, q14 + vst1.8 {q2}, [r1]! .Lctr_enc_done: vmov.i32 q0, #0 vmov.i32 q1, #0 #ifndef BSAES_ASM_EXTENDED_KEY -.Lctr_enc_bzero:@ wipe key schedule [if any] - vstmia sp!, {q0,q1} - cmp sp, r9 - bne .Lctr_enc_bzero +.Lctr_enc_bzero: @ wipe key schedule [if any] + vstmia sp!, {q0-q1} + cmp sp, r9 + bne .Lctr_enc_bzero #else - vstmia sp, {q0,q1} + vstmia sp, {q0-q1} #endif mov sp, r9 add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb VFP_ABI_POP - ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return + ldmia sp!, {r4-r10, pc} @ return .align 4 .Lctr_enc_short: ldr ip, [sp] @ ctr pointer is passed on stack - stmdb sp!, {r4,r5,r6,r7,r8, lr} + stmdb sp!, {r4-r8, lr} mov r4, r0 @ copy arguments mov r5, r1 mov r6, r2 mov r7, r3 - ldr r8, [ip, #12] @ load counter .LSW + ldr r8, [ip, #12] @ load counter LSW vld1.8 {q1}, [ip] @ load whole counter value #ifdef __ARMEL__ rev r8, r8 #endif sub sp, sp, #0x10 - vst1.8 {q1}, [sp] @ copy counter value + vst1.8 {q1}, [sp,:64] @ copy counter value sub sp, sp, #0x10 .Lctr_enc_short_loop: @@ -1544,7 +1519,7 @@ bsaes_ctr32_encrypt_blocks: bl AES_encrypt vld1.8 {q0}, [r4]! @ load input - vld1.8 {q1}, [sp] @ load encrypted counter + vld1.8 {q1}, [sp,:64] @ load encrypted counter add r8, r8, #1 #ifdef __ARMEL__ rev r0, r8 @@ -1559,9 +1534,9 @@ bsaes_ctr32_encrypt_blocks: vmov.i32 q0, #0 vmov.i32 q1, #0 - vstmia sp!, {q0,q1} + vstmia sp!, {q0-q1} - ldmia sp!, {r4,r5,r6,r7,r8, pc} + ldmia sp!, {r4-r8, pc} .size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks .globl bsaes_xts_encrypt .hidden bsaes_xts_encrypt @@ -1569,7 +1544,7 @@ bsaes_ctr32_encrypt_blocks: .align 4 bsaes_xts_encrypt: mov ip, sp - stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} @ 0x20 + stmdb sp!, {r4-r10, lr} @ 0x20 VFP_ABI_PUSH mov r6, sp @ future r3 @@ -1623,7 +1598,7 @@ bsaes_xts_encrypt: vstmia r12, {q7} .align 2 - sub sp, #0x90 @ place for tweak[9] +0: sub sp, #0x90 @ place for tweak[9] #endif vld1.8 {q8}, [r0] @ initial tweak @@ -1635,422 +1610,422 @@ bsaes_xts_encrypt: .align 4 .Lxts_enc_loop: - vldmia r2, {q5} @ load XTS magic + vldmia r2, {q5} @ load XTS magic vshr.s64 q6, q8, #63 - mov r0, sp - vand q6, q6, q5 + mov r0, sp + vand q6, q6, q5 vadd.u64 q9, q8, q8 - vst1.64 {q8}, [r0,:128]! - vswp d13,d12 + vst1.64 {q8}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q9, #63 - veor q9, q9, q6 - vand q7, q7, q5 + veor q9, q9, q6 + vand q7, q7, q5 vadd.u64 q10, q9, q9 - vst1.64 {q9}, [r0,:128]! - vswp d15,d14 + vst1.64 {q9}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q10, #63 - veor q10, q10, q7 - vand q6, q6, q5 - vld1.8 {q0}, [r7]! + veor q10, q10, q7 + vand q6, q6, q5 + vld1.8 {q0}, [r7]! vadd.u64 q11, q10, q10 - vst1.64 {q10}, [r0,:128]! - vswp d13,d12 + vst1.64 {q10}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q11, #63 - veor q11, q11, q6 - vand q7, q7, q5 - vld1.8 {q1}, [r7]! - veor q0, q0, q8 + veor q11, q11, q6 + vand q7, q7, q5 + vld1.8 {q1}, [r7]! + veor q0, q0, q8 vadd.u64 q12, q11, q11 - vst1.64 {q11}, [r0,:128]! - vswp d15,d14 + vst1.64 {q11}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q12, #63 - veor q12, q12, q7 - vand q6, q6, q5 - vld1.8 {q2}, [r7]! - veor q1, q1, q9 + veor q12, q12, q7 + vand q6, q6, q5 + vld1.8 {q2}, [r7]! + veor q1, q1, q9 vadd.u64 q13, q12, q12 - vst1.64 {q12}, [r0,:128]! - vswp d13,d12 + vst1.64 {q12}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q13, #63 - veor q13, q13, q6 - vand q7, q7, q5 - vld1.8 {q3}, [r7]! - veor q2, q2, q10 + veor q13, q13, q6 + vand q7, q7, q5 + vld1.8 {q3}, [r7]! + veor q2, q2, q10 vadd.u64 q14, q13, q13 - vst1.64 {q13}, [r0,:128]! - vswp d15,d14 + vst1.64 {q13}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q14, #63 - veor q14, q14, q7 - vand q6, q6, q5 - vld1.8 {q4}, [r7]! - veor q3, q3, q11 + veor q14, q14, q7 + vand q6, q6, q5 + vld1.8 {q4}, [r7]! + veor q3, q3, q11 vadd.u64 q15, q14, q14 - vst1.64 {q14}, [r0,:128]! - vswp d13,d12 + vst1.64 {q14}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q15, #63 - veor q15, q15, q6 - vand q7, q7, q5 - vld1.8 {q5}, [r7]! - veor q4, q4, q12 + veor q15, q15, q6 + vand q7, q7, q5 + vld1.8 {q5}, [r7]! + veor q4, q4, q12 vadd.u64 q8, q15, q15 - vst1.64 {q15}, [r0,:128]! - vswp d15,d14 - veor q8, q8, q7 - vst1.64 {q8}, [r0,:128] @ next round tweak + vst1.64 {q15}, [r0,:128]! + vswp d15,d14 + veor q8, q8, q7 + vst1.64 {q8}, [r0,:128] @ next round tweak - vld1.8 {q6,q7}, [r7]! - veor q5, q5, q13 + vld1.8 {q6-q7}, [r7]! + veor q5, q5, q13 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q6, q6, q14 - mov r5, r1 @ pass rounds - veor q7, q7, q15 - mov r0, sp - - bl _bsaes_encrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12,q13}, [r0,:128]! - veor q1, q1, q9 - veor q8, q4, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q6, q11 - vld1.64 {q14,q15}, [r0,:128]! - veor q10, q3, q12 - vst1.8 {q8,q9}, [r8]! - veor q11, q7, q13 - veor q12, q2, q14 - vst1.8 {q10,q11}, [r8]! - veor q13, q5, q15 - vst1.8 {q12,q13}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - - subs r9, #0x80 - bpl .Lxts_enc_loop + veor q6, q6, q14 + mov r5, r1 @ pass rounds + veor q7, q7, q15 + mov r0, sp + + bl _bsaes_encrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12-q13}, [r0,:128]! + veor q1, q1, q9 + veor q8, q4, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q6, q11 + vld1.64 {q14-q15}, [r0,:128]! + veor q10, q3, q12 + vst1.8 {q8-q9}, [r8]! + veor q11, q7, q13 + veor q12, q2, q14 + vst1.8 {q10-q11}, [r8]! + veor q13, q5, q15 + vst1.8 {q12-q13}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + + subs r9, #0x80 + bpl .Lxts_enc_loop .Lxts_enc_short: - adds r9, #0x70 - bmi .Lxts_enc_done + adds r9, #0x70 + bmi .Lxts_enc_done - vldmia r2, {q5} @ load XTS magic + vldmia r2, {q5} @ load XTS magic vshr.s64 q7, q8, #63 - mov r0, sp - vand q7, q7, q5 + mov r0, sp + vand q7, q7, q5 vadd.u64 q9, q8, q8 - vst1.64 {q8}, [r0,:128]! - vswp d15,d14 + vst1.64 {q8}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q9, #63 - veor q9, q9, q7 - vand q6, q6, q5 + veor q9, q9, q7 + vand q6, q6, q5 vadd.u64 q10, q9, q9 - vst1.64 {q9}, [r0,:128]! - vswp d13,d12 + vst1.64 {q9}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q10, #63 - veor q10, q10, q6 - vand q7, q7, q5 - vld1.8 {q0}, [r7]! - subs r9, #0x10 - bmi .Lxts_enc_1 + veor q10, q10, q6 + vand q7, q7, q5 + vld1.8 {q0}, [r7]! + subs r9, #0x10 + bmi .Lxts_enc_1 vadd.u64 q11, q10, q10 - vst1.64 {q10}, [r0,:128]! - vswp d15,d14 + vst1.64 {q10}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q11, #63 - veor q11, q11, q7 - vand q6, q6, q5 - vld1.8 {q1}, [r7]! - subs r9, #0x10 - bmi .Lxts_enc_2 - veor q0, q0, q8 + veor q11, q11, q7 + vand q6, q6, q5 + vld1.8 {q1}, [r7]! + subs r9, #0x10 + bmi .Lxts_enc_2 + veor q0, q0, q8 vadd.u64 q12, q11, q11 - vst1.64 {q11}, [r0,:128]! - vswp d13,d12 + vst1.64 {q11}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q12, #63 - veor q12, q12, q6 - vand q7, q7, q5 - vld1.8 {q2}, [r7]! - subs r9, #0x10 - bmi .Lxts_enc_3 - veor q1, q1, q9 + veor q12, q12, q6 + vand q7, q7, q5 + vld1.8 {q2}, [r7]! + subs r9, #0x10 + bmi .Lxts_enc_3 + veor q1, q1, q9 vadd.u64 q13, q12, q12 - vst1.64 {q12}, [r0,:128]! - vswp d15,d14 + vst1.64 {q12}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q13, #63 - veor q13, q13, q7 - vand q6, q6, q5 - vld1.8 {q3}, [r7]! - subs r9, #0x10 - bmi .Lxts_enc_4 - veor q2, q2, q10 + veor q13, q13, q7 + vand q6, q6, q5 + vld1.8 {q3}, [r7]! + subs r9, #0x10 + bmi .Lxts_enc_4 + veor q2, q2, q10 vadd.u64 q14, q13, q13 - vst1.64 {q13}, [r0,:128]! - vswp d13,d12 + vst1.64 {q13}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q14, #63 - veor q14, q14, q6 - vand q7, q7, q5 - vld1.8 {q4}, [r7]! - subs r9, #0x10 - bmi .Lxts_enc_5 - veor q3, q3, q11 + veor q14, q14, q6 + vand q7, q7, q5 + vld1.8 {q4}, [r7]! + subs r9, #0x10 + bmi .Lxts_enc_5 + veor q3, q3, q11 vadd.u64 q15, q14, q14 - vst1.64 {q14}, [r0,:128]! - vswp d15,d14 + vst1.64 {q14}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q15, #63 - veor q15, q15, q7 - vand q6, q6, q5 - vld1.8 {q5}, [r7]! - subs r9, #0x10 - bmi .Lxts_enc_6 - veor q4, q4, q12 - sub r9, #0x10 - vst1.64 {q15}, [r0,:128] @ next round tweak - - vld1.8 {q6}, [r7]! - veor q5, q5, q13 + veor q15, q15, q7 + vand q6, q6, q5 + vld1.8 {q5}, [r7]! + subs r9, #0x10 + bmi .Lxts_enc_6 + veor q4, q4, q12 + sub r9, #0x10 + vst1.64 {q15}, [r0,:128] @ next round tweak + + vld1.8 {q6}, [r7]! + veor q5, q5, q13 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q6, q6, q14 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_encrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12,q13}, [r0,:128]! - veor q1, q1, q9 - veor q8, q4, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q6, q11 - vld1.64 {q14}, [r0,:128]! - veor q10, q3, q12 - vst1.8 {q8,q9}, [r8]! - veor q11, q7, q13 - veor q12, q2, q14 - vst1.8 {q10,q11}, [r8]! - vst1.8 {q12}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_enc_done + veor q6, q6, q14 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_encrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12-q13}, [r0,:128]! + veor q1, q1, q9 + veor q8, q4, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q6, q11 + vld1.64 {q14}, [r0,:128]! + veor q10, q3, q12 + vst1.8 {q8-q9}, [r8]! + veor q11, q7, q13 + veor q12, q2, q14 + vst1.8 {q10-q11}, [r8]! + vst1.8 {q12}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_enc_done .align 4 .Lxts_enc_6: - vst1.64 {q14}, [r0,:128] @ next round tweak + vst1.64 {q14}, [r0,:128] @ next round tweak - veor q4, q4, q12 + veor q4, q4, q12 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q5, q5, q13 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_encrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12,q13}, [r0,:128]! - veor q1, q1, q9 - veor q8, q4, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q6, q11 - veor q10, q3, q12 - vst1.8 {q8,q9}, [r8]! - veor q11, q7, q13 - vst1.8 {q10,q11}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_enc_done + veor q5, q5, q13 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_encrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12-q13}, [r0,:128]! + veor q1, q1, q9 + veor q8, q4, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q6, q11 + veor q10, q3, q12 + vst1.8 {q8-q9}, [r8]! + veor q11, q7, q13 + vst1.8 {q10-q11}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_enc_done @ put this in range for both ARM and Thumb mode adr instructions .align 5 .Lxts_magic: -.quad 1, 0x87 + .quad 1, 0x87 .align 5 .Lxts_enc_5: - vst1.64 {q13}, [r0,:128] @ next round tweak + vst1.64 {q13}, [r0,:128] @ next round tweak - veor q3, q3, q11 + veor q3, q3, q11 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q4, q4, q12 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_encrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12}, [r0,:128]! - veor q1, q1, q9 - veor q8, q4, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q6, q11 - veor q10, q3, q12 - vst1.8 {q8,q9}, [r8]! - vst1.8 {q10}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_enc_done + veor q4, q4, q12 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_encrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12}, [r0,:128]! + veor q1, q1, q9 + veor q8, q4, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q6, q11 + veor q10, q3, q12 + vst1.8 {q8-q9}, [r8]! + vst1.8 {q10}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_enc_done .align 4 .Lxts_enc_4: - vst1.64 {q12}, [r0,:128] @ next round tweak + vst1.64 {q12}, [r0,:128] @ next round tweak - veor q2, q2, q10 + veor q2, q2, q10 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q3, q3, q11 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_encrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - veor q1, q1, q9 - veor q8, q4, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q6, q11 - vst1.8 {q8,q9}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_enc_done + veor q3, q3, q11 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_encrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + veor q1, q1, q9 + veor q8, q4, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q6, q11 + vst1.8 {q8-q9}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_enc_done .align 4 .Lxts_enc_3: - vst1.64 {q11}, [r0,:128] @ next round tweak + vst1.64 {q11}, [r0,:128] @ next round tweak - veor q1, q1, q9 + veor q1, q1, q9 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q2, q2, q10 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_encrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10}, [r0,:128]! - veor q0, q0, q8 - veor q1, q1, q9 - veor q8, q4, q10 - vst1.8 {q0,q1}, [r8]! - vst1.8 {q8}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_enc_done + veor q2, q2, q10 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_encrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10}, [r0,:128]! + veor q0, q0, q8 + veor q1, q1, q9 + veor q8, q4, q10 + vst1.8 {q0-q1}, [r8]! + vst1.8 {q8}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_enc_done .align 4 .Lxts_enc_2: - vst1.64 {q10}, [r0,:128] @ next round tweak + vst1.64 {q10}, [r0,:128] @ next round tweak - veor q0, q0, q8 + veor q0, q0, q8 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q1, q1, q9 - mov r5, r1 @ pass rounds - mov r0, sp + veor q1, q1, q9 + mov r5, r1 @ pass rounds + mov r0, sp - bl _bsaes_encrypt8 + bl _bsaes_encrypt8 - vld1.64 {q8,q9}, [r0,:128]! - veor q0, q0, q8 - veor q1, q1, q9 - vst1.8 {q0,q1}, [r8]! + vld1.64 {q8-q9}, [r0,:128]! + veor q0, q0, q8 + veor q1, q1, q9 + vst1.8 {q0-q1}, [r8]! - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_enc_done + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_enc_done .align 4 .Lxts_enc_1: - mov r0, sp - veor q0, q8 - mov r1, sp - vst1.8 {q0}, [sp,:128] - mov r2, r10 - mov r4, r3 @ preserve fp + mov r0, sp + veor q0, q8 + mov r1, sp + vst1.8 {q0}, [sp,:128] + mov r2, r10 + mov r4, r3 @ preserve fp - bl AES_encrypt + bl AES_encrypt - vld1.8 {q0}, [sp,:128] - veor q0, q0, q8 - vst1.8 {q0}, [r8]! - mov r3, r4 + vld1.8 {q0}, [sp,:128] + veor q0, q0, q8 + vst1.8 {q0}, [r8]! + mov r3, r4 - vmov q8, q9 @ next round tweak + vmov q8, q9 @ next round tweak .Lxts_enc_done: #ifndef XTS_CHAIN_TWEAK - adds r9, #0x10 - beq .Lxts_enc_ret - sub r6, r8, #0x10 + adds r9, #0x10 + beq .Lxts_enc_ret + sub r6, r8, #0x10 .Lxts_enc_steal: - ldrb r0, [r7], #1 - ldrb r1, [r8, #-0x10] - strb r0, [r8, #-0x10] - strb r1, [r8], #1 - - subs r9, #1 - bhi .Lxts_enc_steal - - vld1.8 {q0}, [r6] - mov r0, sp - veor q0, q0, q8 - mov r1, sp - vst1.8 {q0}, [sp,:128] - mov r2, r10 - mov r4, r3 @ preserve fp - - bl AES_encrypt - - vld1.8 {q0}, [sp,:128] - veor q0, q0, q8 - vst1.8 {q0}, [r6] - mov r3, r4 + ldrb r0, [r7], #1 + ldrb r1, [r8, #-0x10] + strb r0, [r8, #-0x10] + strb r1, [r8], #1 + + subs r9, #1 + bhi .Lxts_enc_steal + + vld1.8 {q0}, [r6] + mov r0, sp + veor q0, q0, q8 + mov r1, sp + vst1.8 {q0}, [sp,:128] + mov r2, r10 + mov r4, r3 @ preserve fp + + bl AES_encrypt + + vld1.8 {q0}, [sp,:128] + veor q0, q0, q8 + vst1.8 {q0}, [r6] + mov r3, r4 #endif .Lxts_enc_ret: - bic r0, r3, #0xf + bic r0, r3, #0xf vmov.i32 q0, #0 vmov.i32 q1, #0 #ifdef XTS_CHAIN_TWEAK - ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak + ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak #endif -.Lxts_enc_bzero:@ wipe key schedule [if any] - vstmia sp!, {q0,q1} - cmp sp, r0 - bne .Lxts_enc_bzero +.Lxts_enc_bzero: @ wipe key schedule [if any] + vstmia sp!, {q0-q1} + cmp sp, r0 + bne .Lxts_enc_bzero - mov sp, r3 + mov sp, r3 #ifdef XTS_CHAIN_TWEAK - vst1.8 {q8}, [r1] + vst1.8 {q8}, [r1] #endif VFP_ABI_POP - ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return + ldmia sp!, {r4-r10, pc} @ return .size bsaes_xts_encrypt,.-bsaes_xts_encrypt @@ -2060,7 +2035,7 @@ bsaes_xts_encrypt: .align 4 bsaes_xts_decrypt: mov ip, sp - stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} @ 0x20 + stmdb sp!, {r4-r10, lr} @ 0x20 VFP_ABI_PUSH mov r6, sp @ future r3 @@ -2120,16 +2095,14 @@ bsaes_xts_decrypt: vstmia r4, {q7} .align 2 - sub sp, #0x90 @ place for tweak[9] +0: sub sp, #0x90 @ place for tweak[9] #endif vld1.8 {q8}, [r0] @ initial tweak adr r2, .Lxts_magic -#ifndef XTS_CHAIN_TWEAK tst r9, #0xf @ if not multiple of 16 it ne @ Thumb2 thing, sanity check in ARM subne r9, #0x10 @ subtract another 16 bytes -#endif subs r9, #0x80 blo .Lxts_dec_short @@ -2137,440 +2110,440 @@ bsaes_xts_decrypt: .align 4 .Lxts_dec_loop: - vldmia r2, {q5} @ load XTS magic + vldmia r2, {q5} @ load XTS magic vshr.s64 q6, q8, #63 - mov r0, sp - vand q6, q6, q5 + mov r0, sp + vand q6, q6, q5 vadd.u64 q9, q8, q8 - vst1.64 {q8}, [r0,:128]! - vswp d13,d12 + vst1.64 {q8}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q9, #63 - veor q9, q9, q6 - vand q7, q7, q5 + veor q9, q9, q6 + vand q7, q7, q5 vadd.u64 q10, q9, q9 - vst1.64 {q9}, [r0,:128]! - vswp d15,d14 + vst1.64 {q9}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q10, #63 - veor q10, q10, q7 - vand q6, q6, q5 - vld1.8 {q0}, [r7]! + veor q10, q10, q7 + vand q6, q6, q5 + vld1.8 {q0}, [r7]! vadd.u64 q11, q10, q10 - vst1.64 {q10}, [r0,:128]! - vswp d13,d12 + vst1.64 {q10}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q11, #63 - veor q11, q11, q6 - vand q7, q7, q5 - vld1.8 {q1}, [r7]! - veor q0, q0, q8 + veor q11, q11, q6 + vand q7, q7, q5 + vld1.8 {q1}, [r7]! + veor q0, q0, q8 vadd.u64 q12, q11, q11 - vst1.64 {q11}, [r0,:128]! - vswp d15,d14 + vst1.64 {q11}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q12, #63 - veor q12, q12, q7 - vand q6, q6, q5 - vld1.8 {q2}, [r7]! - veor q1, q1, q9 + veor q12, q12, q7 + vand q6, q6, q5 + vld1.8 {q2}, [r7]! + veor q1, q1, q9 vadd.u64 q13, q12, q12 - vst1.64 {q12}, [r0,:128]! - vswp d13,d12 + vst1.64 {q12}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q13, #63 - veor q13, q13, q6 - vand q7, q7, q5 - vld1.8 {q3}, [r7]! - veor q2, q2, q10 + veor q13, q13, q6 + vand q7, q7, q5 + vld1.8 {q3}, [r7]! + veor q2, q2, q10 vadd.u64 q14, q13, q13 - vst1.64 {q13}, [r0,:128]! - vswp d15,d14 + vst1.64 {q13}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q14, #63 - veor q14, q14, q7 - vand q6, q6, q5 - vld1.8 {q4}, [r7]! - veor q3, q3, q11 + veor q14, q14, q7 + vand q6, q6, q5 + vld1.8 {q4}, [r7]! + veor q3, q3, q11 vadd.u64 q15, q14, q14 - vst1.64 {q14}, [r0,:128]! - vswp d13,d12 + vst1.64 {q14}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q15, #63 - veor q15, q15, q6 - vand q7, q7, q5 - vld1.8 {q5}, [r7]! - veor q4, q4, q12 + veor q15, q15, q6 + vand q7, q7, q5 + vld1.8 {q5}, [r7]! + veor q4, q4, q12 vadd.u64 q8, q15, q15 - vst1.64 {q15}, [r0,:128]! - vswp d15,d14 - veor q8, q8, q7 - vst1.64 {q8}, [r0,:128] @ next round tweak + vst1.64 {q15}, [r0,:128]! + vswp d15,d14 + veor q8, q8, q7 + vst1.64 {q8}, [r0,:128] @ next round tweak - vld1.8 {q6,q7}, [r7]! - veor q5, q5, q13 + vld1.8 {q6-q7}, [r7]! + veor q5, q5, q13 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q6, q6, q14 - mov r5, r1 @ pass rounds - veor q7, q7, q15 - mov r0, sp - - bl _bsaes_decrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12,q13}, [r0,:128]! - veor q1, q1, q9 - veor q8, q6, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q4, q11 - vld1.64 {q14,q15}, [r0,:128]! - veor q10, q2, q12 - vst1.8 {q8,q9}, [r8]! - veor q11, q7, q13 - veor q12, q3, q14 - vst1.8 {q10,q11}, [r8]! - veor q13, q5, q15 - vst1.8 {q12,q13}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - - subs r9, #0x80 - bpl .Lxts_dec_loop + veor q6, q6, q14 + mov r5, r1 @ pass rounds + veor q7, q7, q15 + mov r0, sp + + bl _bsaes_decrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12-q13}, [r0,:128]! + veor q1, q1, q9 + veor q8, q6, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q4, q11 + vld1.64 {q14-q15}, [r0,:128]! + veor q10, q2, q12 + vst1.8 {q8-q9}, [r8]! + veor q11, q7, q13 + veor q12, q3, q14 + vst1.8 {q10-q11}, [r8]! + veor q13, q5, q15 + vst1.8 {q12-q13}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + + subs r9, #0x80 + bpl .Lxts_dec_loop .Lxts_dec_short: - adds r9, #0x70 - bmi .Lxts_dec_done + adds r9, #0x70 + bmi .Lxts_dec_done - vldmia r2, {q5} @ load XTS magic + vldmia r2, {q5} @ load XTS magic vshr.s64 q7, q8, #63 - mov r0, sp - vand q7, q7, q5 + mov r0, sp + vand q7, q7, q5 vadd.u64 q9, q8, q8 - vst1.64 {q8}, [r0,:128]! - vswp d15,d14 + vst1.64 {q8}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q9, #63 - veor q9, q9, q7 - vand q6, q6, q5 + veor q9, q9, q7 + vand q6, q6, q5 vadd.u64 q10, q9, q9 - vst1.64 {q9}, [r0,:128]! - vswp d13,d12 + vst1.64 {q9}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q10, #63 - veor q10, q10, q6 - vand q7, q7, q5 - vld1.8 {q0}, [r7]! - subs r9, #0x10 - bmi .Lxts_dec_1 + veor q10, q10, q6 + vand q7, q7, q5 + vld1.8 {q0}, [r7]! + subs r9, #0x10 + bmi .Lxts_dec_1 vadd.u64 q11, q10, q10 - vst1.64 {q10}, [r0,:128]! - vswp d15,d14 + vst1.64 {q10}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q11, #63 - veor q11, q11, q7 - vand q6, q6, q5 - vld1.8 {q1}, [r7]! - subs r9, #0x10 - bmi .Lxts_dec_2 - veor q0, q0, q8 + veor q11, q11, q7 + vand q6, q6, q5 + vld1.8 {q1}, [r7]! + subs r9, #0x10 + bmi .Lxts_dec_2 + veor q0, q0, q8 vadd.u64 q12, q11, q11 - vst1.64 {q11}, [r0,:128]! - vswp d13,d12 + vst1.64 {q11}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q12, #63 - veor q12, q12, q6 - vand q7, q7, q5 - vld1.8 {q2}, [r7]! - subs r9, #0x10 - bmi .Lxts_dec_3 - veor q1, q1, q9 + veor q12, q12, q6 + vand q7, q7, q5 + vld1.8 {q2}, [r7]! + subs r9, #0x10 + bmi .Lxts_dec_3 + veor q1, q1, q9 vadd.u64 q13, q12, q12 - vst1.64 {q12}, [r0,:128]! - vswp d15,d14 + vst1.64 {q12}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q13, #63 - veor q13, q13, q7 - vand q6, q6, q5 - vld1.8 {q3}, [r7]! - subs r9, #0x10 - bmi .Lxts_dec_4 - veor q2, q2, q10 + veor q13, q13, q7 + vand q6, q6, q5 + vld1.8 {q3}, [r7]! + subs r9, #0x10 + bmi .Lxts_dec_4 + veor q2, q2, q10 vadd.u64 q14, q13, q13 - vst1.64 {q13}, [r0,:128]! - vswp d13,d12 + vst1.64 {q13}, [r0,:128]! + vswp d13,d12 vshr.s64 q7, q14, #63 - veor q14, q14, q6 - vand q7, q7, q5 - vld1.8 {q4}, [r7]! - subs r9, #0x10 - bmi .Lxts_dec_5 - veor q3, q3, q11 + veor q14, q14, q6 + vand q7, q7, q5 + vld1.8 {q4}, [r7]! + subs r9, #0x10 + bmi .Lxts_dec_5 + veor q3, q3, q11 vadd.u64 q15, q14, q14 - vst1.64 {q14}, [r0,:128]! - vswp d15,d14 + vst1.64 {q14}, [r0,:128]! + vswp d15,d14 vshr.s64 q6, q15, #63 - veor q15, q15, q7 - vand q6, q6, q5 - vld1.8 {q5}, [r7]! - subs r9, #0x10 - bmi .Lxts_dec_6 - veor q4, q4, q12 - sub r9, #0x10 - vst1.64 {q15}, [r0,:128] @ next round tweak - - vld1.8 {q6}, [r7]! - veor q5, q5, q13 + veor q15, q15, q7 + vand q6, q6, q5 + vld1.8 {q5}, [r7]! + subs r9, #0x10 + bmi .Lxts_dec_6 + veor q4, q4, q12 + sub r9, #0x10 + vst1.64 {q15}, [r0,:128] @ next round tweak + + vld1.8 {q6}, [r7]! + veor q5, q5, q13 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q6, q6, q14 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_decrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12,q13}, [r0,:128]! - veor q1, q1, q9 - veor q8, q6, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q4, q11 - vld1.64 {q14}, [r0,:128]! - veor q10, q2, q12 - vst1.8 {q8,q9}, [r8]! - veor q11, q7, q13 - veor q12, q3, q14 - vst1.8 {q10,q11}, [r8]! - vst1.8 {q12}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_dec_done + veor q6, q6, q14 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_decrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12-q13}, [r0,:128]! + veor q1, q1, q9 + veor q8, q6, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q4, q11 + vld1.64 {q14}, [r0,:128]! + veor q10, q2, q12 + vst1.8 {q8-q9}, [r8]! + veor q11, q7, q13 + veor q12, q3, q14 + vst1.8 {q10-q11}, [r8]! + vst1.8 {q12}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_dec_done .align 4 .Lxts_dec_6: - vst1.64 {q14}, [r0,:128] @ next round tweak + vst1.64 {q14}, [r0,:128] @ next round tweak - veor q4, q4, q12 + veor q4, q4, q12 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q5, q5, q13 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_decrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12,q13}, [r0,:128]! - veor q1, q1, q9 - veor q8, q6, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q4, q11 - veor q10, q2, q12 - vst1.8 {q8,q9}, [r8]! - veor q11, q7, q13 - vst1.8 {q10,q11}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_dec_done + veor q5, q5, q13 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_decrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12-q13}, [r0,:128]! + veor q1, q1, q9 + veor q8, q6, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q4, q11 + veor q10, q2, q12 + vst1.8 {q8-q9}, [r8]! + veor q11, q7, q13 + vst1.8 {q10-q11}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_dec_done .align 4 .Lxts_dec_5: - vst1.64 {q13}, [r0,:128] @ next round tweak + vst1.64 {q13}, [r0,:128] @ next round tweak - veor q3, q3, q11 + veor q3, q3, q11 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q4, q4, q12 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_decrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - vld1.64 {q12}, [r0,:128]! - veor q1, q1, q9 - veor q8, q6, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q4, q11 - veor q10, q2, q12 - vst1.8 {q8,q9}, [r8]! - vst1.8 {q10}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_dec_done + veor q4, q4, q12 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_decrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + vld1.64 {q12}, [r0,:128]! + veor q1, q1, q9 + veor q8, q6, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q4, q11 + veor q10, q2, q12 + vst1.8 {q8-q9}, [r8]! + vst1.8 {q10}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_dec_done .align 4 .Lxts_dec_4: - vst1.64 {q12}, [r0,:128] @ next round tweak + vst1.64 {q12}, [r0,:128] @ next round tweak - veor q2, q2, q10 + veor q2, q2, q10 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q3, q3, q11 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_decrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10,q11}, [r0,:128]! - veor q0, q0, q8 - veor q1, q1, q9 - veor q8, q6, q10 - vst1.8 {q0,q1}, [r8]! - veor q9, q4, q11 - vst1.8 {q8,q9}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_dec_done + veor q3, q3, q11 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_decrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10-q11}, [r0,:128]! + veor q0, q0, q8 + veor q1, q1, q9 + veor q8, q6, q10 + vst1.8 {q0-q1}, [r8]! + veor q9, q4, q11 + vst1.8 {q8-q9}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_dec_done .align 4 .Lxts_dec_3: - vst1.64 {q11}, [r0,:128] @ next round tweak + vst1.64 {q11}, [r0,:128] @ next round tweak - veor q1, q1, q9 + veor q1, q1, q9 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q2, q2, q10 - mov r5, r1 @ pass rounds - mov r0, sp - - bl _bsaes_decrypt8 - - vld1.64 {q8,q9}, [r0,:128]! - vld1.64 {q10}, [r0,:128]! - veor q0, q0, q8 - veor q1, q1, q9 - veor q8, q6, q10 - vst1.8 {q0,q1}, [r8]! - vst1.8 {q8}, [r8]! - - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_dec_done + veor q2, q2, q10 + mov r5, r1 @ pass rounds + mov r0, sp + + bl _bsaes_decrypt8 + + vld1.64 {q8-q9}, [r0,:128]! + vld1.64 {q10}, [r0,:128]! + veor q0, q0, q8 + veor q1, q1, q9 + veor q8, q6, q10 + vst1.8 {q0-q1}, [r8]! + vst1.8 {q8}, [r8]! + + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_dec_done .align 4 .Lxts_dec_2: - vst1.64 {q10}, [r0,:128] @ next round tweak + vst1.64 {q10}, [r0,:128] @ next round tweak - veor q0, q0, q8 + veor q0, q0, q8 #ifndef BSAES_ASM_EXTENDED_KEY - add r4, sp, #0x90 @ pass key schedule + add r4, sp, #0x90 @ pass key schedule #else - add r4, r10, #248 @ pass key schedule + add r4, r10, #248 @ pass key schedule #endif - veor q1, q1, q9 - mov r5, r1 @ pass rounds - mov r0, sp + veor q1, q1, q9 + mov r5, r1 @ pass rounds + mov r0, sp - bl _bsaes_decrypt8 + bl _bsaes_decrypt8 - vld1.64 {q8,q9}, [r0,:128]! - veor q0, q0, q8 - veor q1, q1, q9 - vst1.8 {q0,q1}, [r8]! + vld1.64 {q8-q9}, [r0,:128]! + veor q0, q0, q8 + veor q1, q1, q9 + vst1.8 {q0-q1}, [r8]! - vld1.64 {q8}, [r0,:128] @ next round tweak - b .Lxts_dec_done + vld1.64 {q8}, [r0,:128] @ next round tweak + b .Lxts_dec_done .align 4 .Lxts_dec_1: - mov r0, sp - veor q0, q8 - mov r1, sp - vst1.8 {q0}, [sp,:128] - mov r2, r10 - mov r4, r3 @ preserve fp - mov r5, r2 @ preserve magic + mov r0, sp + veor q0, q8 + mov r1, sp + vst1.8 {q0}, [sp,:128] + mov r2, r10 + mov r4, r3 @ preserve fp + mov r5, r2 @ preserve magic - bl AES_decrypt + bl AES_decrypt - vld1.8 {q0}, [sp,:128] - veor q0, q0, q8 - vst1.8 {q0}, [r8]! - mov r3, r4 - mov r2, r5 + vld1.8 {q0}, [sp,:128] + veor q0, q0, q8 + vst1.8 {q0}, [r8]! + mov r3, r4 + mov r2, r5 - vmov q8, q9 @ next round tweak + vmov q8, q9 @ next round tweak .Lxts_dec_done: #ifndef XTS_CHAIN_TWEAK - adds r9, #0x10 - beq .Lxts_dec_ret + adds r9, #0x10 + beq .Lxts_dec_ret @ calculate one round of extra tweak for the stolen ciphertext - vldmia r2, {q5} + vldmia r2, {q5} vshr.s64 q6, q8, #63 - vand q6, q6, q5 + vand q6, q6, q5 vadd.u64 q9, q8, q8 - vswp d13,d12 - veor q9, q9, q6 + vswp d13,d12 + veor q9, q9, q6 @ perform the final decryption with the last tweak value - vld1.8 {q0}, [r7]! - mov r0, sp - veor q0, q0, q9 - mov r1, sp - vst1.8 {q0}, [sp,:128] - mov r2, r10 - mov r4, r3 @ preserve fp + vld1.8 {q0}, [r7]! + mov r0, sp + veor q0, q0, q9 + mov r1, sp + vst1.8 {q0}, [sp,:128] + mov r2, r10 + mov r4, r3 @ preserve fp - bl AES_decrypt + bl AES_decrypt - vld1.8 {q0}, [sp,:128] - veor q0, q0, q9 - vst1.8 {q0}, [r8] + vld1.8 {q0}, [sp,:128] + veor q0, q0, q9 + vst1.8 {q0}, [r8] - mov r6, r8 + mov r6, r8 .Lxts_dec_steal: - ldrb r1, [r8] - ldrb r0, [r7], #1 - strb r1, [r8, #0x10] - strb r0, [r8], #1 - - subs r9, #1 - bhi .Lxts_dec_steal - - vld1.8 {q0}, [r6] - mov r0, sp - veor q0, q8 - mov r1, sp - vst1.8 {q0}, [sp,:128] - mov r2, r10 - - bl AES_decrypt - - vld1.8 {q0}, [sp,:128] - veor q0, q0, q8 - vst1.8 {q0}, [r6] - mov r3, r4 + ldrb r1, [r8] + ldrb r0, [r7], #1 + strb r1, [r8, #0x10] + strb r0, [r8], #1 + + subs r9, #1 + bhi .Lxts_dec_steal + + vld1.8 {q0}, [r6] + mov r0, sp + veor q0, q8 + mov r1, sp + vst1.8 {q0}, [sp,:128] + mov r2, r10 + + bl AES_decrypt + + vld1.8 {q0}, [sp,:128] + veor q0, q0, q8 + vst1.8 {q0}, [r6] + mov r3, r4 #endif .Lxts_dec_ret: - bic r0, r3, #0xf + bic r0, r3, #0xf vmov.i32 q0, #0 vmov.i32 q1, #0 #ifdef XTS_CHAIN_TWEAK - ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak + ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak #endif -.Lxts_dec_bzero:@ wipe key schedule [if any] - vstmia sp!, {q0,q1} - cmp sp, r0 - bne .Lxts_dec_bzero +.Lxts_dec_bzero: @ wipe key schedule [if any] + vstmia sp!, {q0-q1} + cmp sp, r0 + bne .Lxts_dec_bzero - mov sp, r3 + mov sp, r3 #ifdef XTS_CHAIN_TWEAK - vst1.8 {q8}, [r1] + vst1.8 {q8}, [r1] #endif VFP_ABI_POP - ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return + ldmia sp!, {r4-r10, pc} @ return .size bsaes_xts_decrypt,.-bsaes_xts_decrypt #endif diff --git a/third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S b/third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S index 81dcbeb..aafc450 100644 --- a/third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S +++ b/third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S @@ -3,30 +3,26 @@ .text .code 32 -#if __ARM_MAX_ARCH__>=7 +#if __ARM_ARCH__>=7 .align 5 .LOPENSSL_armcap: -.word OPENSSL_armcap_P-.Lbn_mul_mont +.word OPENSSL_armcap_P-bn_mul_mont #endif -.globl bn_mul_mont +.global bn_mul_mont .hidden bn_mul_mont .type bn_mul_mont,%function .align 5 bn_mul_mont: -.Lbn_mul_mont: ldr ip,[sp,#4] @ load num stmdb sp!,{r0,r2} @ sp points at argument block -#if __ARM_MAX_ARCH__>=7 +#if __ARM_ARCH__>=7 tst ip,#7 bne .Lialu adr r0,bn_mul_mont ldr r2,.LOPENSSL_armcap ldr r0,[r0,r2] -#ifdef __APPLE__ - ldr r0,[r0] -#endif tst r0,#1 @ NEON available? ldmia sp, {r0,r2} beq .Lialu @@ -41,7 +37,7 @@ bn_mul_mont: addlt sp,sp,#2*4 blt .Labrt - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} @ save 10 registers + stmdb sp!,{r4-r12,lr} @ save 10 registers mov r0,r0,lsl#2 @ rescale r0 for byte count sub sp,sp,r0 @ alloca(4*num) @@ -85,7 +81,7 @@ bn_mul_mont: adc r14,r14,#0 str r12,[r0] @ tp[num-1]= str r14,[r0,#4] @ tp[num]= - + .Louter: sub r7,r0,sp @ "original" r0-1 value sub r1,r1,r7 @ "rewind" ap to &ap[1] @@ -133,7 +129,7 @@ bn_mul_mont: cmp r4,r7 bne .Louter - + ldr r2,[r0,#12*4] @ pull rp add r0,r0,#4 @ r0 to point at &tp[num] sub r5,r0,sp @ "original" num value @@ -163,40 +159,34 @@ bn_mul_mont: bne .Lcopy add sp,r0,#4 @ skip over tp[num+1] - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} @ restore registers + ldmia sp!,{r4-r12,lr} @ restore registers add sp,sp,#2*4 @ skip over {r0,r2} mov r0,#1 -.Labrt: -#if __ARM_ARCH__>=5 - bx lr @ .word 0xe12fff1e -#else - tst lr,#1 +.Labrt: tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) -#endif + .word 0xe12fff1e @ interoperable with Thumb ISA:-) .size bn_mul_mont,.-bn_mul_mont -#if __ARM_MAX_ARCH__>=7 -.arch armv7-a +#if __ARM_ARCH__>=7 .fpu neon .type bn_mul8x_mont_neon,%function .align 5 bn_mul8x_mont_neon: mov ip,sp - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} - vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so - ldmia ip,{r4,r5} @ load rest of parameter block - - sub r7,sp,#16 - vld1.32 {d28[0]}, [r2,:32]! - sub r7,r7,r5,lsl#4 - vld1.32 {d0,d1,d2,d3}, [r1]! @ can't specify :32 :-( - and r7,r7,#-64 - vld1.32 {d30[0]}, [r4,:32] - mov sp,r7 @ alloca - veor d8,d8,d8 - subs r8,r5,#8 - vzip.16 d28,d8 + stmdb sp!,{r4-r11} + vstmdb sp!,{d8-d15} @ ABI specification says so + ldmia ip,{r4-r5} @ load rest of parameter block + + sub r7,sp,#16 + vld1.32 {d28[0]}, [r2,:32]! + sub r7,r7,r5,lsl#4 + vld1.32 {d0-d3}, [r1]! @ can't specify :32 :-( + and r7,r7,#-64 + vld1.32 {d30[0]}, [r4,:32] + mov sp,r7 @ alloca + veor d8,d8,d8 + subs r8,r5,#8 + vzip.16 d28,d8 vmull.u32 q6,d28,d0[0] vmull.u32 q7,d28,d0[1] @@ -205,14 +195,14 @@ bn_mul8x_mont_neon: vmull.u32 q9,d28,d1[1] vadd.u64 d10,d10,d12 - veor d8,d8,d8 + veor d8,d8,d8 vmul.u32 d29,d10,d30 vmull.u32 q10,d28,d2[0] - vld1.32 {d4,d5,d6,d7}, [r3]! + vld1.32 {d4-d7}, [r3]! vmull.u32 q11,d28,d2[1] vmull.u32 q12,d28,d3[0] - vzip.16 d29,d8 + vzip.16 d29,d8 vmull.u32 q13,d28,d3[1] bne .LNEON_1st @@ -220,35 +210,35 @@ bn_mul8x_mont_neon: @ special case for num=8, everything is in register bank... vmlal.u32 q6,d29,d4[0] - sub r9,r5,#1 + sub r9,r5,#1 vmlal.u32 q7,d29,d4[1] vmlal.u32 q8,d29,d5[0] vmlal.u32 q9,d29,d5[1] vmlal.u32 q10,d29,d6[0] - vmov q5,q6 + vmov q5,q6 vmlal.u32 q11,d29,d6[1] - vmov q6,q7 + vmov q6,q7 vmlal.u32 q12,d29,d7[0] - vmov q7,q8 + vmov q7,q8 vmlal.u32 q13,d29,d7[1] - vmov q8,q9 - vmov q9,q10 + vmov q8,q9 + vmov q9,q10 vshr.u64 d10,d10,#16 - vmov q10,q11 - vmov q11,q12 + vmov q10,q11 + vmov q11,q12 vadd.u64 d10,d10,d11 - vmov q12,q13 - veor q13,q13 + vmov q12,q13 + veor q13,q13 vshr.u64 d10,d10,#16 b .LNEON_outer8 .align 4 .LNEON_outer8: - vld1.32 {d28[0]}, [r2,:32]! - veor d8,d8,d8 - vzip.16 d28,d8 + vld1.32 {d28[0]}, [r2,:32]! + veor d8,d8,d8 + vzip.16 d28,d8 vadd.u64 d12,d12,d10 vmlal.u32 q6,d28,d0[0] @@ -258,14 +248,14 @@ bn_mul8x_mont_neon: vmlal.u32 q9,d28,d1[1] vadd.u64 d10,d10,d12 - veor d8,d8,d8 - subs r9,r9,#1 + veor d8,d8,d8 + subs r9,r9,#1 vmul.u32 d29,d10,d30 vmlal.u32 q10,d28,d2[0] vmlal.u32 q11,d28,d2[1] vmlal.u32 q12,d28,d3[0] - vzip.16 d29,d8 + vzip.16 d29,d8 vmlal.u32 q13,d28,d3[1] vmlal.u32 q6,d29,d4[0] @@ -274,59 +264,59 @@ bn_mul8x_mont_neon: vmlal.u32 q9,d29,d5[1] vmlal.u32 q10,d29,d6[0] - vmov q5,q6 + vmov q5,q6 vmlal.u32 q11,d29,d6[1] - vmov q6,q7 + vmov q6,q7 vmlal.u32 q12,d29,d7[0] - vmov q7,q8 + vmov q7,q8 vmlal.u32 q13,d29,d7[1] - vmov q8,q9 - vmov q9,q10 + vmov q8,q9 + vmov q9,q10 vshr.u64 d10,d10,#16 - vmov q10,q11 - vmov q11,q12 + vmov q10,q11 + vmov q11,q12 vadd.u64 d10,d10,d11 - vmov q12,q13 - veor q13,q13 + vmov q12,q13 + veor q13,q13 vshr.u64 d10,d10,#16 bne .LNEON_outer8 vadd.u64 d12,d12,d10 - mov r7,sp + mov r7,sp vshr.u64 d10,d12,#16 - mov r8,r5 + mov r8,r5 vadd.u64 d13,d13,d10 - add r6,sp,#16 + add r6,sp,#16 vshr.u64 d10,d13,#16 - vzip.16 d12,d13 + vzip.16 d12,d13 b .LNEON_tail2 .align 4 .LNEON_1st: vmlal.u32 q6,d29,d4[0] - vld1.32 {d0,d1,d2,d3}, [r1]! + vld1.32 {d0-d3}, [r1]! vmlal.u32 q7,d29,d4[1] - subs r8,r8,#8 + subs r8,r8,#8 vmlal.u32 q8,d29,d5[0] vmlal.u32 q9,d29,d5[1] vmlal.u32 q10,d29,d6[0] - vld1.32 {d4,d5}, [r3]! + vld1.32 {d4-d5}, [r3]! vmlal.u32 q11,d29,d6[1] - vst1.64 {q6,q7}, [r7,:256]! + vst1.64 {q6-q7}, [r7,:256]! vmlal.u32 q12,d29,d7[0] vmlal.u32 q13,d29,d7[1] - vst1.64 {q8,q9}, [r7,:256]! + vst1.64 {q8-q9}, [r7,:256]! vmull.u32 q6,d28,d0[0] - vld1.32 {d6,d7}, [r3]! + vld1.32 {d6-d7}, [r3]! vmull.u32 q7,d28,d0[1] - vst1.64 {q10,q11}, [r7,:256]! + vst1.64 {q10-q11}, [r7,:256]! vmull.u32 q8,d28,d1[0] vmull.u32 q9,d28,d1[1] - vst1.64 {q12,q13}, [r7,:256]! + vst1.64 {q12-q13}, [r7,:256]! vmull.u32 q10,d28,d2[0] vmull.u32 q11,d28,d2[1] @@ -336,93 +326,93 @@ bn_mul8x_mont_neon: bne .LNEON_1st vmlal.u32 q6,d29,d4[0] - add r6,sp,#16 + add r6,sp,#16 vmlal.u32 q7,d29,d4[1] - sub r1,r1,r5,lsl#2 @ rewind r1 + sub r1,r1,r5,lsl#2 @ rewind r1 vmlal.u32 q8,d29,d5[0] - vld1.64 {q5}, [sp,:128] + vld1.64 {q5}, [sp,:128] vmlal.u32 q9,d29,d5[1] - sub r9,r5,#1 + sub r9,r5,#1 vmlal.u32 q10,d29,d6[0] - vst1.64 {q6,q7}, [r7,:256]! + vst1.64 {q6-q7}, [r7,:256]! vmlal.u32 q11,d29,d6[1] vshr.u64 d10,d10,#16 - vld1.64 {q6}, [r6, :128]! + vld1.64 {q6}, [r6, :128]! vmlal.u32 q12,d29,d7[0] - vst1.64 {q8,q9}, [r7,:256]! + vst1.64 {q8-q9}, [r7,:256]! vmlal.u32 q13,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! + vst1.64 {q10-q11}, [r7,:256]! vadd.u64 d10,d10,d11 - veor q4,q4,q4 - vst1.64 {q12,q13}, [r7,:256]! - vld1.64 {q7,q8}, [r6, :256]! - vst1.64 {q4}, [r7,:128] + veor q4,q4,q4 + vst1.64 {q12-q13}, [r7,:256]! + vld1.64 {q7-q8}, [r6, :256]! + vst1.64 {q4}, [r7,:128] vshr.u64 d10,d10,#16 - b .LNEON_outer + b .LNEON_outer .align 4 .LNEON_outer: - vld1.32 {d28[0]}, [r2,:32]! - sub r3,r3,r5,lsl#2 @ rewind r3 - vld1.32 {d0,d1,d2,d3}, [r1]! - veor d8,d8,d8 - mov r7,sp - vzip.16 d28,d8 - sub r8,r5,#8 + vld1.32 {d28[0]}, [r2,:32]! + sub r3,r3,r5,lsl#2 @ rewind r3 + vld1.32 {d0-d3}, [r1]! + veor d8,d8,d8 + mov r7,sp + vzip.16 d28,d8 + sub r8,r5,#8 vadd.u64 d12,d12,d10 vmlal.u32 q6,d28,d0[0] - vld1.64 {q9,q10},[r6,:256]! + vld1.64 {q9-q10},[r6,:256]! vmlal.u32 q7,d28,d0[1] vmlal.u32 q8,d28,d1[0] - vld1.64 {q11,q12},[r6,:256]! + vld1.64 {q11-q12},[r6,:256]! vmlal.u32 q9,d28,d1[1] vshl.i64 d10,d13,#16 - veor d8,d8,d8 + veor d8,d8,d8 vadd.u64 d10,d10,d12 - vld1.64 {q13},[r6,:128]! + vld1.64 {q13},[r6,:128]! vmul.u32 d29,d10,d30 vmlal.u32 q10,d28,d2[0] - vld1.32 {d4,d5,d6,d7}, [r3]! + vld1.32 {d4-d7}, [r3]! vmlal.u32 q11,d28,d2[1] vmlal.u32 q12,d28,d3[0] - vzip.16 d29,d8 + vzip.16 d29,d8 vmlal.u32 q13,d28,d3[1] .LNEON_inner: vmlal.u32 q6,d29,d4[0] - vld1.32 {d0,d1,d2,d3}, [r1]! + vld1.32 {d0-d3}, [r1]! vmlal.u32 q7,d29,d4[1] - subs r8,r8,#8 + subs r8,r8,#8 vmlal.u32 q8,d29,d5[0] vmlal.u32 q9,d29,d5[1] - vst1.64 {q6,q7}, [r7,:256]! + vst1.64 {q6-q7}, [r7,:256]! vmlal.u32 q10,d29,d6[0] - vld1.64 {q6}, [r6, :128]! + vld1.64 {q6}, [r6, :128]! vmlal.u32 q11,d29,d6[1] - vst1.64 {q8,q9}, [r7,:256]! + vst1.64 {q8-q9}, [r7,:256]! vmlal.u32 q12,d29,d7[0] - vld1.64 {q7,q8}, [r6, :256]! + vld1.64 {q7-q8}, [r6, :256]! vmlal.u32 q13,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! + vst1.64 {q10-q11}, [r7,:256]! vmlal.u32 q6,d28,d0[0] - vld1.64 {q9,q10}, [r6, :256]! + vld1.64 {q9-q10}, [r6, :256]! vmlal.u32 q7,d28,d0[1] - vst1.64 {q12,q13}, [r7,:256]! + vst1.64 {q12-q13}, [r7,:256]! vmlal.u32 q8,d28,d1[0] - vld1.64 {q11,q12}, [r6, :256]! + vld1.64 {q11-q12}, [r6, :256]! vmlal.u32 q9,d28,d1[1] - vld1.32 {d4,d5,d6,d7}, [r3]! + vld1.32 {d4-d7}, [r3]! vmlal.u32 q10,d28,d2[0] - vld1.64 {q13}, [r6, :128]! + vld1.64 {q13}, [r6, :128]! vmlal.u32 q11,d28,d2[1] vmlal.u32 q12,d28,d3[0] vmlal.u32 q13,d28,d3[1] @@ -430,97 +420,97 @@ bn_mul8x_mont_neon: bne .LNEON_inner vmlal.u32 q6,d29,d4[0] - add r6,sp,#16 + add r6,sp,#16 vmlal.u32 q7,d29,d4[1] - sub r1,r1,r5,lsl#2 @ rewind r1 + sub r1,r1,r5,lsl#2 @ rewind r1 vmlal.u32 q8,d29,d5[0] - vld1.64 {q5}, [sp,:128] + vld1.64 {q5}, [sp,:128] vmlal.u32 q9,d29,d5[1] - subs r9,r9,#1 + subs r9,r9,#1 vmlal.u32 q10,d29,d6[0] - vst1.64 {q6,q7}, [r7,:256]! + vst1.64 {q6-q7}, [r7,:256]! vmlal.u32 q11,d29,d6[1] - vld1.64 {q6}, [r6, :128]! + vld1.64 {q6}, [r6, :128]! vshr.u64 d10,d10,#16 - vst1.64 {q8,q9}, [r7,:256]! + vst1.64 {q8-q9}, [r7,:256]! vmlal.u32 q12,d29,d7[0] - vld1.64 {q7,q8}, [r6, :256]! + vld1.64 {q7-q8}, [r6, :256]! vmlal.u32 q13,d29,d7[1] - vst1.64 {q10,q11}, [r7,:256]! + vst1.64 {q10-q11}, [r7,:256]! vadd.u64 d10,d10,d11 - vst1.64 {q12,q13}, [r7,:256]! + vst1.64 {q12-q13}, [r7,:256]! vshr.u64 d10,d10,#16 bne .LNEON_outer - mov r7,sp - mov r8,r5 + mov r7,sp + mov r8,r5 .LNEON_tail: vadd.u64 d12,d12,d10 - vld1.64 {q9,q10}, [r6, :256]! + vld1.64 {q9-q10}, [r6, :256]! vshr.u64 d10,d12,#16 vadd.u64 d13,d13,d10 - vld1.64 {q11,q12}, [r6, :256]! + vld1.64 {q11-q12}, [r6, :256]! vshr.u64 d10,d13,#16 - vld1.64 {q13}, [r6, :128]! - vzip.16 d12,d13 + vld1.64 {q13}, [r6, :128]! + vzip.16 d12,d13 .LNEON_tail2: vadd.u64 d14,d14,d10 - vst1.32 {d12[0]}, [r7, :32]! + vst1.32 {d12[0]}, [r7, :32]! vshr.u64 d10,d14,#16 vadd.u64 d15,d15,d10 vshr.u64 d10,d15,#16 - vzip.16 d14,d15 + vzip.16 d14,d15 vadd.u64 d16,d16,d10 - vst1.32 {d14[0]}, [r7, :32]! + vst1.32 {d14[0]}, [r7, :32]! vshr.u64 d10,d16,#16 vadd.u64 d17,d17,d10 vshr.u64 d10,d17,#16 - vzip.16 d16,d17 + vzip.16 d16,d17 vadd.u64 d18,d18,d10 - vst1.32 {d16[0]}, [r7, :32]! + vst1.32 {d16[0]}, [r7, :32]! vshr.u64 d10,d18,#16 vadd.u64 d19,d19,d10 vshr.u64 d10,d19,#16 - vzip.16 d18,d19 + vzip.16 d18,d19 vadd.u64 d20,d20,d10 - vst1.32 {d18[0]}, [r7, :32]! + vst1.32 {d18[0]}, [r7, :32]! vshr.u64 d10,d20,#16 vadd.u64 d21,d21,d10 vshr.u64 d10,d21,#16 - vzip.16 d20,d21 + vzip.16 d20,d21 vadd.u64 d22,d22,d10 - vst1.32 {d20[0]}, [r7, :32]! + vst1.32 {d20[0]}, [r7, :32]! vshr.u64 d10,d22,#16 vadd.u64 d23,d23,d10 vshr.u64 d10,d23,#16 - vzip.16 d22,d23 + vzip.16 d22,d23 vadd.u64 d24,d24,d10 - vst1.32 {d22[0]}, [r7, :32]! + vst1.32 {d22[0]}, [r7, :32]! vshr.u64 d10,d24,#16 vadd.u64 d25,d25,d10 - vld1.64 {q6}, [r6, :128]! + vld1.64 {q6}, [r6, :128]! vshr.u64 d10,d25,#16 - vzip.16 d24,d25 + vzip.16 d24,d25 vadd.u64 d26,d26,d10 - vst1.32 {d24[0]}, [r7, :32]! + vst1.32 {d24[0]}, [r7, :32]! vshr.u64 d10,d26,#16 vadd.u64 d27,d27,d10 - vld1.64 {q7,q8}, [r6, :256]! + vld1.64 {q7-q8}, [r6, :256]! vshr.u64 d10,d27,#16 - vzip.16 d26,d27 - subs r8,r8,#8 - vst1.32 {d26[0]}, [r7, :32]! + vzip.16 d26,d27 + subs r8,r8,#8 + vst1.32 {d26[0]}, [r7, :32]! bne .LNEON_tail @@ -530,14 +520,14 @@ bn_mul8x_mont_neon: add r2,sp,r5,lsl#2 .LNEON_sub: - ldmia r1!, {r4,r5,r6,r7} - ldmia r3!, {r8,r9,r10,r11} + ldmia r1!, {r4-r7} + ldmia r3!, {r8-r11} sbcs r8, r4,r8 sbcs r9, r5,r9 sbcs r10,r6,r10 sbcs r11,r7,r11 teq r1,r2 @ preserves carry - stmia r0!, {r8,r9,r10,r11} + stmia r0!, {r8-r11} bne .LNEON_sub ldr r10, [r1] @ load top-most bit @@ -550,38 +540,37 @@ bn_mul8x_mont_neon: sbcs r10,r10,#0 @ result is carry flag .LNEON_copy_n_zap: - ldmia r1!, {r4,r5,r6,r7} - ldmia r0, {r8,r9,r10,r11} + ldmia r1!, {r4-r7} + ldmia r0, {r8-r11} movcc r8, r4 - vst1.64 {q0,q1}, [r3,:256]! @ wipe + vst1.64 {q0-q1}, [r3,:256]! @ wipe movcc r9, r5 movcc r10,r6 - vst1.64 {q0,q1}, [r3,:256]! @ wipe + vst1.64 {q0-q1}, [r3,:256]! @ wipe movcc r11,r7 - ldmia r1, {r4,r5,r6,r7} - stmia r0!, {r8,r9,r10,r11} + ldmia r1, {r4-r7} + stmia r0!, {r8-r11} sub r1,r1,#16 - ldmia r0, {r8,r9,r10,r11} + ldmia r0, {r8-r11} movcc r8, r4 - vst1.64 {q0,q1}, [r1,:256]! @ wipe + vst1.64 {q0-q1}, [r1,:256]! @ wipe movcc r9, r5 movcc r10,r6 - vst1.64 {q0,q1}, [r3,:256]! @ wipe + vst1.64 {q0-q1}, [r3,:256]! @ wipe movcc r11,r7 teq r1,r2 @ preserves carry - stmia r0!, {r8,r9,r10,r11} + stmia r0!, {r8-r11} bne .LNEON_copy_n_zap sub sp,ip,#96 - vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11} - bx lr @ .word 0xe12fff1e + vldmia sp!,{d8-d15} + ldmia sp!,{r4-r11} + .word 0xe12fff1e .size bn_mul8x_mont_neon,.-bn_mul8x_mont_neon #endif -.byte 77,111,110,116,103,111,109,101,114,121,32,109,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 +.asciz "Montgomery multiplication for ARMv4/NEON, CRYPTOGAMS by " .align 2 -#if __ARM_MAX_ARCH__>=7 +#if __ARM_ARCH__>=7 .comm OPENSSL_armcap_P,4,4 .hidden OPENSSL_armcap_P #endif diff --git a/third_party/boringssl/linux-arm/crypto/modes/ghash-armv4.S b/third_party/boringssl/linux-arm/crypto/modes/ghash-armv4.S index b6c7e9b..8c81975 100644 --- a/third_party/boringssl/linux-arm/crypto/modes/ghash-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/modes/ghash-armv4.S @@ -1,16 +1,11 @@ #if defined(__arm__) #include "arm_arch.h" -.syntax unified +.syntax unified .text .code 32 -#ifdef __APPLE__ -#define ldrplb ldrbpl -#define ldrneb ldrbne -#endif - .type rem_4bit,%object .align 5 rem_4bit: @@ -28,17 +23,17 @@ rem_4bit_get: nop .size rem_4bit_get,.-rem_4bit_get -.globl gcm_ghash_4bit +.global gcm_ghash_4bit .hidden gcm_ghash_4bit .type gcm_ghash_4bit,%function gcm_ghash_4bit: sub r12,pc,#8 add r3,r2,r3 @ r3 to point at the end - stmdb sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,lr} @ save r3/end too + stmdb sp!,{r3-r11,lr} @ save r3/end too sub r12,r12,#48 @ &rem_4bit - ldmia r12,{r4,r5,r6,r7,r8,r9,r10,r11} @ copy rem_4bit ... - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} @ ... to stack + ldmia r12,{r4-r11} @ copy rem_4bit ... + stmdb sp!,{r4-r11} @ ... to stack ldrb r12,[r2,#15] ldrb r14,[r0,#15] @@ -49,12 +44,12 @@ gcm_ghash_4bit: mov r3,#14 add r7,r1,r12,lsl#4 - ldmia r7,{r4,r5,r6,r7} @ load Htbl[nlo] + ldmia r7,{r4-r7} @ load Htbl[nlo] add r11,r1,r14 ldrb r12,[r2,#14] and r14,r4,#0xf @ rem - ldmia r11,{r8,r9,r10,r11} @ load Htbl[nhi] + ldmia r11,{r8-r11} @ load Htbl[nhi] add r14,r14,r14 eor r4,r8,r4,lsr#4 ldrh r8,[sp,r14] @ rem_4bit[rem] @@ -75,7 +70,7 @@ gcm_ghash_4bit: and r12,r4,#0xf @ rem subs r3,r3,#1 add r12,r12,r12 - ldmia r11,{r8,r9,r10,r11} @ load Htbl[nlo] + ldmia r11,{r8-r11} @ load Htbl[nlo] eor r4,r8,r4,lsr#4 eor r4,r4,r5,lsl#28 eor r5,r9,r5,lsr#4 @@ -90,7 +85,7 @@ gcm_ghash_4bit: and r14,r4,#0xf @ rem eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem] add r14,r14,r14 - ldmia r11,{r8,r9,r10,r11} @ load Htbl[nhi] + ldmia r11,{r8-r11} @ load Htbl[nhi] eor r4,r8,r4,lsr#4 ldrbpl r8,[r0,r3] eor r4,r4,r5,lsl#28 @@ -153,7 +148,7 @@ gcm_ghash_4bit: strb r10,[r0,#4+1] strb r11,[r0,#4] #endif - + #if __ARM_ARCH__>=7 && defined(__ARMEL__) rev r7,r7 str r7,[r0,#0] @@ -168,25 +163,25 @@ gcm_ghash_4bit: strb r10,[r0,#0+1] strb r11,[r0,#0] #endif - + bne .Louter add sp,sp,#36 #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc} + ldmia sp!,{r4-r11,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr} + ldmia sp!,{r4-r11,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size gcm_ghash_4bit,.-gcm_ghash_4bit -.globl gcm_gmult_4bit +.global gcm_gmult_4bit .hidden gcm_gmult_4bit .type gcm_gmult_4bit,%function gcm_gmult_4bit: - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr} + stmdb sp!,{r4-r11,lr} ldrb r12,[r0,#15] b rem_4bit_get .Lrem_4bit_got: @@ -195,12 +190,12 @@ gcm_gmult_4bit: mov r3,#14 add r7,r1,r12,lsl#4 - ldmia r7,{r4,r5,r6,r7} @ load Htbl[nlo] + ldmia r7,{r4-r7} @ load Htbl[nlo] ldrb r12,[r0,#14] add r11,r1,r14 and r14,r4,#0xf @ rem - ldmia r11,{r8,r9,r10,r11} @ load Htbl[nhi] + ldmia r11,{r8-r11} @ load Htbl[nhi] add r14,r14,r14 eor r4,r8,r4,lsr#4 ldrh r8,[r2,r14] @ rem_4bit[rem] @@ -219,7 +214,7 @@ gcm_gmult_4bit: and r12,r4,#0xf @ rem subs r3,r3,#1 add r12,r12,r12 - ldmia r11,{r8,r9,r10,r11} @ load Htbl[nlo] + ldmia r11,{r8-r11} @ load Htbl[nlo] eor r4,r8,r4,lsr#4 eor r4,r4,r5,lsl#28 eor r5,r9,r5,lsr#4 @@ -234,7 +229,7 @@ gcm_gmult_4bit: and r14,r4,#0xf @ rem eor r7,r7,r8,lsl#16 @ ^= rem_4bit[rem] add r14,r14,r14 - ldmia r11,{r8,r9,r10,r11} @ load Htbl[nhi] + ldmia r11,{r8-r11} @ load Htbl[nhi] eor r4,r8,r4,lsr#4 eor r4,r4,r5,lsl#28 eor r5,r9,r5,lsr#4 @@ -261,7 +256,7 @@ gcm_gmult_4bit: strb r10,[r0,#12+1] strb r11,[r0,#12] #endif - + #if __ARM_ARCH__>=7 && defined(__ARMEL__) rev r5,r5 str r5,[r0,#8] @@ -276,7 +271,7 @@ gcm_gmult_4bit: strb r10,[r0,#8+1] strb r11,[r0,#8] #endif - + #if __ARM_ARCH__>=7 && defined(__ARMEL__) rev r6,r6 str r6,[r0,#4] @@ -291,7 +286,7 @@ gcm_gmult_4bit: strb r10,[r0,#4+1] strb r11,[r0,#4] #endif - + #if __ARM_ARCH__>=7 && defined(__ARMEL__) rev r7,r7 str r7,[r0,#0] @@ -306,234 +301,232 @@ gcm_gmult_4bit: strb r10,[r0,#0+1] strb r11,[r0,#0] #endif - + #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc} + ldmia sp!,{r4-r11,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr} + ldmia sp!,{r4-r11,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size gcm_gmult_4bit,.-gcm_gmult_4bit -#if __ARM_MAX_ARCH__>=7 -.arch armv7-a +#if __ARM_ARCH__>=7 .fpu neon -.globl gcm_init_neon +.global gcm_init_neon .hidden gcm_init_neon .type gcm_init_neon,%function .align 4 gcm_init_neon: - vld1.64 d7,[r1]! @ load H - vmov.i8 q8,#0xe1 - vld1.64 d6,[r1] + vld1.64 d7,[r1,:64]! @ load H + vmov.i8 q8,#0xe1 + vld1.64 d6,[r1,:64] vshl.i64 d17,#57 vshr.u64 d16,#63 @ t0=0xc2....01 - vdup.8 q9,d7[7] + vdup.8 q9,d7[7] vshr.u64 d26,d6,#63 - vshr.s8 q9,#7 @ broadcast carry bit + vshr.s8 q9,#7 @ broadcast carry bit vshl.i64 q3,q3,#1 - vand q8,q8,q9 - vorr d7,d26 @ H<<<=1 - veor q3,q3,q8 @ twisted H - vstmia r0,{q3} + vand q8,q8,q9 + vorr d7,d26 @ H<<<=1 + veor q3,q3,q8 @ twisted H + vstmia r0,{q3} - bx lr @ bx lr + .word 0xe12fff1e .size gcm_init_neon,.-gcm_init_neon -.globl gcm_gmult_neon +.global gcm_gmult_neon .hidden gcm_gmult_neon .type gcm_gmult_neon,%function .align 4 gcm_gmult_neon: - vld1.64 d7,[r0]! @ load Xi - vld1.64 d6,[r0]! + vld1.64 d7,[r0,:64]! @ load Xi + vld1.64 d6,[r0,:64]! vmov.i64 d29,#0x0000ffffffffffff - vldmia r1,{d26,d27} @ load twisted H + vldmia r1,{d26-d27} @ load twisted H vmov.i64 d30,#0x00000000ffffffff #ifdef __ARMEL__ vrev64.8 q3,q3 #endif vmov.i64 d31,#0x000000000000ffff - veor d28,d26,d27 @ Karatsuba pre-processing - mov r3,#16 - b .Lgmult_neon + veor d28,d26,d27 @ Karatsuba pre-processing + mov r3,#16 + b .Lgmult_neon .size gcm_gmult_neon,.-gcm_gmult_neon -.globl gcm_ghash_neon +.global gcm_ghash_neon .hidden gcm_ghash_neon .type gcm_ghash_neon,%function .align 4 gcm_ghash_neon: - vld1.64 d1,[r0]! @ load Xi - vld1.64 d0,[r0]! + vld1.64 d1,[r0,:64]! @ load Xi + vld1.64 d0,[r0,:64]! vmov.i64 d29,#0x0000ffffffffffff - vldmia r1,{d26,d27} @ load twisted H + vldmia r1,{d26-d27} @ load twisted H vmov.i64 d30,#0x00000000ffffffff #ifdef __ARMEL__ vrev64.8 q0,q0 #endif vmov.i64 d31,#0x000000000000ffff - veor d28,d26,d27 @ Karatsuba pre-processing + veor d28,d26,d27 @ Karatsuba pre-processing .Loop_neon: - vld1.64 d7,[r2]! @ load inp - vld1.64 d6,[r2]! + vld1.64 d7,[r2]! @ load inp + vld1.64 d6,[r2]! #ifdef __ARMEL__ vrev64.8 q3,q3 #endif - veor q3,q0 @ inp^=Xi + veor q3,q0 @ inp^=Xi .Lgmult_neon: - vext.8 d16, d26, d26, #1 @ A1 + vext.8 d16, d26, d26, #1 @ A1 vmull.p8 q8, d16, d6 @ F = A1*B - vext.8 d0, d6, d6, #1 @ B1 + vext.8 d0, d6, d6, #1 @ B1 vmull.p8 q0, d26, d0 @ E = A*B1 - vext.8 d18, d26, d26, #2 @ A2 + vext.8 d18, d26, d26, #2 @ A2 vmull.p8 q9, d18, d6 @ H = A2*B - vext.8 d22, d6, d6, #2 @ B2 + vext.8 d22, d6, d6, #2 @ B2 vmull.p8 q11, d26, d22 @ G = A*B2 - vext.8 d20, d26, d26, #3 @ A3 - veor q8, q8, q0 @ L = E + F + vext.8 d20, d26, d26, #3 @ A3 + veor q8, q8, q0 @ L = E + F vmull.p8 q10, d20, d6 @ J = A3*B - vext.8 d0, d6, d6, #3 @ B3 - veor q9, q9, q11 @ M = G + H + vext.8 d0, d6, d6, #3 @ B3 + veor q9, q9, q11 @ M = G + H vmull.p8 q0, d26, d0 @ I = A*B3 - veor d16, d16, d17 @ t0 = (L) (P0 + P1) << 8 - vand d17, d17, d29 - vext.8 d22, d6, d6, #4 @ B4 - veor d18, d18, d19 @ t1 = (M) (P2 + P3) << 16 - vand d19, d19, d30 + veor d16, d16, d17 @ t0 = (L) (P0 + P1) << 8 + vand d17, d17, d29 + vext.8 d22, d6, d6, #4 @ B4 + veor d18, d18, d19 @ t1 = (M) (P2 + P3) << 16 + vand d19, d19, d30 vmull.p8 q11, d26, d22 @ K = A*B4 - veor q10, q10, q0 @ N = I + J - veor d16, d16, d17 - veor d18, d18, d19 - veor d20, d20, d21 @ t2 = (N) (P4 + P5) << 24 - vand d21, d21, d31 - vext.8 q8, q8, q8, #15 - veor d22, d22, d23 @ t3 = (K) (P6 + P7) << 32 + veor q10, q10, q0 @ N = I + J + veor d16, d16, d17 + veor d18, d18, d19 + veor d20, d20, d21 @ t2 = (N) (P4 + P5) << 24 + vand d21, d21, d31 + vext.8 q8, q8, q8, #15 + veor d22, d22, d23 @ t3 = (K) (P6 + P7) << 32 vmov.i64 d23, #0 - vext.8 q9, q9, q9, #14 - veor d20, d20, d21 + vext.8 q9, q9, q9, #14 + veor d20, d20, d21 vmull.p8 q0, d26, d6 @ D = A*B - vext.8 q11, q11, q11, #12 - vext.8 q10, q10, q10, #13 - veor q8, q8, q9 - veor q10, q10, q11 - veor q0, q0, q8 - veor q0, q0, q10 - veor d6,d6,d7 @ Karatsuba pre-processing - vext.8 d16, d28, d28, #1 @ A1 + vext.8 q11, q11, q11, #12 + vext.8 q10, q10, q10, #13 + veor q8, q8, q9 + veor q10, q10, q11 + veor q0, q0, q8 + veor q0, q0, q10 + veor d6,d6,d7 @ Karatsuba pre-processing + vext.8 d16, d28, d28, #1 @ A1 vmull.p8 q8, d16, d6 @ F = A1*B - vext.8 d2, d6, d6, #1 @ B1 + vext.8 d2, d6, d6, #1 @ B1 vmull.p8 q1, d28, d2 @ E = A*B1 - vext.8 d18, d28, d28, #2 @ A2 + vext.8 d18, d28, d28, #2 @ A2 vmull.p8 q9, d18, d6 @ H = A2*B - vext.8 d22, d6, d6, #2 @ B2 + vext.8 d22, d6, d6, #2 @ B2 vmull.p8 q11, d28, d22 @ G = A*B2 - vext.8 d20, d28, d28, #3 @ A3 - veor q8, q8, q1 @ L = E + F + vext.8 d20, d28, d28, #3 @ A3 + veor q8, q8, q1 @ L = E + F vmull.p8 q10, d20, d6 @ J = A3*B - vext.8 d2, d6, d6, #3 @ B3 - veor q9, q9, q11 @ M = G + H + vext.8 d2, d6, d6, #3 @ B3 + veor q9, q9, q11 @ M = G + H vmull.p8 q1, d28, d2 @ I = A*B3 - veor d16, d16, d17 @ t0 = (L) (P0 + P1) << 8 - vand d17, d17, d29 - vext.8 d22, d6, d6, #4 @ B4 - veor d18, d18, d19 @ t1 = (M) (P2 + P3) << 16 - vand d19, d19, d30 + veor d16, d16, d17 @ t0 = (L) (P0 + P1) << 8 + vand d17, d17, d29 + vext.8 d22, d6, d6, #4 @ B4 + veor d18, d18, d19 @ t1 = (M) (P2 + P3) << 16 + vand d19, d19, d30 vmull.p8 q11, d28, d22 @ K = A*B4 - veor q10, q10, q1 @ N = I + J - veor d16, d16, d17 - veor d18, d18, d19 - veor d20, d20, d21 @ t2 = (N) (P4 + P5) << 24 - vand d21, d21, d31 - vext.8 q8, q8, q8, #15 - veor d22, d22, d23 @ t3 = (K) (P6 + P7) << 32 + veor q10, q10, q1 @ N = I + J + veor d16, d16, d17 + veor d18, d18, d19 + veor d20, d20, d21 @ t2 = (N) (P4 + P5) << 24 + vand d21, d21, d31 + vext.8 q8, q8, q8, #15 + veor d22, d22, d23 @ t3 = (K) (P6 + P7) << 32 vmov.i64 d23, #0 - vext.8 q9, q9, q9, #14 - veor d20, d20, d21 + vext.8 q9, q9, q9, #14 + veor d20, d20, d21 vmull.p8 q1, d28, d6 @ D = A*B - vext.8 q11, q11, q11, #12 - vext.8 q10, q10, q10, #13 - veor q8, q8, q9 - veor q10, q10, q11 - veor q1, q1, q8 - veor q1, q1, q10 - vext.8 d16, d27, d27, #1 @ A1 + vext.8 q11, q11, q11, #12 + vext.8 q10, q10, q10, #13 + veor q8, q8, q9 + veor q10, q10, q11 + veor q1, q1, q8 + veor q1, q1, q10 + vext.8 d16, d27, d27, #1 @ A1 vmull.p8 q8, d16, d7 @ F = A1*B - vext.8 d4, d7, d7, #1 @ B1 + vext.8 d4, d7, d7, #1 @ B1 vmull.p8 q2, d27, d4 @ E = A*B1 - vext.8 d18, d27, d27, #2 @ A2 + vext.8 d18, d27, d27, #2 @ A2 vmull.p8 q9, d18, d7 @ H = A2*B - vext.8 d22, d7, d7, #2 @ B2 + vext.8 d22, d7, d7, #2 @ B2 vmull.p8 q11, d27, d22 @ G = A*B2 - vext.8 d20, d27, d27, #3 @ A3 - veor q8, q8, q2 @ L = E + F + vext.8 d20, d27, d27, #3 @ A3 + veor q8, q8, q2 @ L = E + F vmull.p8 q10, d20, d7 @ J = A3*B - vext.8 d4, d7, d7, #3 @ B3 - veor q9, q9, q11 @ M = G + H + vext.8 d4, d7, d7, #3 @ B3 + veor q9, q9, q11 @ M = G + H vmull.p8 q2, d27, d4 @ I = A*B3 - veor d16, d16, d17 @ t0 = (L) (P0 + P1) << 8 - vand d17, d17, d29 - vext.8 d22, d7, d7, #4 @ B4 - veor d18, d18, d19 @ t1 = (M) (P2 + P3) << 16 - vand d19, d19, d30 + veor d16, d16, d17 @ t0 = (L) (P0 + P1) << 8 + vand d17, d17, d29 + vext.8 d22, d7, d7, #4 @ B4 + veor d18, d18, d19 @ t1 = (M) (P2 + P3) << 16 + vand d19, d19, d30 vmull.p8 q11, d27, d22 @ K = A*B4 - veor q10, q10, q2 @ N = I + J - veor d16, d16, d17 - veor d18, d18, d19 - veor d20, d20, d21 @ t2 = (N) (P4 + P5) << 24 - vand d21, d21, d31 - vext.8 q8, q8, q8, #15 - veor d22, d22, d23 @ t3 = (K) (P6 + P7) << 32 + veor q10, q10, q2 @ N = I + J + veor d16, d16, d17 + veor d18, d18, d19 + veor d20, d20, d21 @ t2 = (N) (P4 + P5) << 24 + vand d21, d21, d31 + vext.8 q8, q8, q8, #15 + veor d22, d22, d23 @ t3 = (K) (P6 + P7) << 32 vmov.i64 d23, #0 - vext.8 q9, q9, q9, #14 - veor d20, d20, d21 + vext.8 q9, q9, q9, #14 + veor d20, d20, d21 vmull.p8 q2, d27, d7 @ D = A*B - vext.8 q11, q11, q11, #12 - vext.8 q10, q10, q10, #13 - veor q8, q8, q9 - veor q10, q10, q11 - veor q2, q2, q8 - veor q2, q2, q10 - veor q1,q1,q0 @ Karatsuba post-processing - veor q1,q1,q2 - veor d1,d1,d2 - veor d4,d4,d3 @ Xh|Xl - 256-bit result + vext.8 q11, q11, q11, #12 + vext.8 q10, q10, q10, #13 + veor q8, q8, q9 + veor q10, q10, q11 + veor q2, q2, q8 + veor q2, q2, q10 + veor q1,q1,q0 @ Karatsuba post-processing + veor q1,q1,q2 + veor d1,d1,d2 + veor d4,d4,d3 @ Xh|Xl - 256-bit result @ equivalent of reduction_avx from ghash-x86_64.pl vshl.i64 q9,q0,#57 @ 1st phase vshl.i64 q10,q0,#62 - veor q10,q10,q9 @ + veor q10,q10,q9 @ vshl.i64 q9,q0,#63 - veor q10, q10, q9 @ - veor d1,d1,d20 @ - veor d4,d4,d21 + veor q10, q10, q9 @ + veor d1,d1,d20 @ + veor d4,d4,d21 vshr.u64 q10,q0,#1 @ 2nd phase - veor q2,q2,q0 - veor q0,q0,q10 @ + veor q2,q2,q0 + veor q0,q0,q10 @ vshr.u64 q10,q10,#6 vshr.u64 q0,q0,#1 @ - veor q0,q0,q2 @ - veor q0,q0,q10 @ + veor q0,q0,q2 @ + veor q0,q0,q10 @ - subs r3,#16 - bne .Loop_neon + subs r3,#16 + bne .Loop_neon #ifdef __ARMEL__ vrev64.8 q0,q0 #endif - sub r0,#16 - vst1.64 d1,[r0]! @ write out Xi - vst1.64 d0,[r0] + sub r0,#16 + vst1.64 d1,[r0,:64]! @ write out Xi + vst1.64 d0,[r0,:64] - bx lr @ bx lr + .word 0xe12fff1e .size gcm_ghash_neon,.-gcm_ghash_neon #endif -.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 -.align 2 +.asciz "GHASH for ARMv4/NEON, CRYPTOGAMS by " +.align 2 #endif diff --git a/third_party/boringssl/linux-arm/crypto/sha/sha1-armv4-large.S b/third_party/boringssl/linux-arm/crypto/sha/sha1-armv4-large.S index 52c99bf..5abc328 100644 --- a/third_party/boringssl/linux-arm/crypto/sha/sha1-armv4-large.S +++ b/third_party/boringssl/linux-arm/crypto/sha/sha1-armv4-large.S @@ -3,7 +3,7 @@ .text .code 32 -.globl sha1_block_data_order +.global sha1_block_data_order .type sha1_block_data_order,%function .align 5 @@ -12,15 +12,12 @@ sha1_block_data_order: sub r3,pc,#8 @ sha1_block_data_order ldr r12,.LOPENSSL_armcap ldr r12,[r3,r12] @ OPENSSL_armcap_P -#ifdef __APPLE__ - ldr r12,[r12] -#endif tst r12,#ARMV8_SHA1 bne .LARMv8 tst r12,#ARMV7_NEON bne .LNEON #endif - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + stmdb sp!,{r4-r12,lr} add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 ldmia r0,{r3,r4,r5,r6,r7} .Lloop: @@ -196,7 +193,7 @@ sha1_block_data_order: add r6,r6,r7,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r3,r10,ror#2 @ F_xx_xx + and r10,r3,r10,ror#2 @ F_xx_xx @ F_xx_xx add r6,r6,r9 @ E+=X[i] eor r10,r10,r5,ror#2 @ F_00_19(B,C,D) @@ -213,7 +210,7 @@ sha1_block_data_order: add r5,r5,r6,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r7,r10,ror#2 @ F_xx_xx + and r10,r7,r10,ror#2 @ F_xx_xx @ F_xx_xx add r5,r5,r9 @ E+=X[i] eor r10,r10,r4,ror#2 @ F_00_19(B,C,D) @@ -230,7 +227,7 @@ sha1_block_data_order: add r4,r4,r5,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r6,r10,ror#2 @ F_xx_xx + and r10,r6,r10,ror#2 @ F_xx_xx @ F_xx_xx add r4,r4,r9 @ E+=X[i] eor r10,r10,r3,ror#2 @ F_00_19(B,C,D) @@ -247,7 +244,7 @@ sha1_block_data_order: add r3,r3,r4,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r5,r10,ror#2 @ F_xx_xx + and r10,r5,r10,ror#2 @ F_xx_xx @ F_xx_xx add r3,r3,r9 @ E+=X[i] eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) @@ -268,7 +265,7 @@ sha1_block_data_order: add r7,r7,r3,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - eor r10,r4,r10,ror#2 @ F_xx_xx + eor r10,r4,r10,ror#2 @ F_xx_xx @ F_xx_xx add r7,r7,r9 @ E+=X[i] add r7,r7,r10 @ E+=F_20_39(B,C,D) @@ -284,7 +281,7 @@ sha1_block_data_order: add r6,r6,r7,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - eor r10,r3,r10,ror#2 @ F_xx_xx + eor r10,r3,r10,ror#2 @ F_xx_xx @ F_xx_xx add r6,r6,r9 @ E+=X[i] add r6,r6,r10 @ E+=F_20_39(B,C,D) @@ -300,7 +297,7 @@ sha1_block_data_order: add r5,r5,r6,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - eor r10,r7,r10,ror#2 @ F_xx_xx + eor r10,r7,r10,ror#2 @ F_xx_xx @ F_xx_xx add r5,r5,r9 @ E+=X[i] add r5,r5,r10 @ E+=F_20_39(B,C,D) @@ -316,7 +313,7 @@ sha1_block_data_order: add r4,r4,r5,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - eor r10,r6,r10,ror#2 @ F_xx_xx + eor r10,r6,r10,ror#2 @ F_xx_xx @ F_xx_xx add r4,r4,r9 @ E+=X[i] add r4,r4,r10 @ E+=F_20_39(B,C,D) @@ -332,7 +329,7 @@ sha1_block_data_order: add r3,r3,r4,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - eor r10,r5,r10,ror#2 @ F_xx_xx + eor r10,r5,r10,ror#2 @ F_xx_xx @ F_xx_xx add r3,r3,r9 @ E+=X[i] add r3,r3,r10 @ E+=F_20_39(B,C,D) @@ -355,8 +352,8 @@ sha1_block_data_order: add r7,r7,r3,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r4,r10,ror#2 @ F_xx_xx - and r11,r5,r6 @ F_xx_xx + and r10,r4,r10,ror#2 @ F_xx_xx + and r11,r5,r6 @ F_xx_xx add r7,r7,r9 @ E+=X[i] add r7,r7,r10 @ E+=F_40_59(B,C,D) add r7,r7,r11,ror#2 @@ -372,8 +369,8 @@ sha1_block_data_order: add r6,r6,r7,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r3,r10,ror#2 @ F_xx_xx - and r11,r4,r5 @ F_xx_xx + and r10,r3,r10,ror#2 @ F_xx_xx + and r11,r4,r5 @ F_xx_xx add r6,r6,r9 @ E+=X[i] add r6,r6,r10 @ E+=F_40_59(B,C,D) add r6,r6,r11,ror#2 @@ -389,8 +386,8 @@ sha1_block_data_order: add r5,r5,r6,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r7,r10,ror#2 @ F_xx_xx - and r11,r3,r4 @ F_xx_xx + and r10,r7,r10,ror#2 @ F_xx_xx + and r11,r3,r4 @ F_xx_xx add r5,r5,r9 @ E+=X[i] add r5,r5,r10 @ E+=F_40_59(B,C,D) add r5,r5,r11,ror#2 @@ -406,8 +403,8 @@ sha1_block_data_order: add r4,r4,r5,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r6,r10,ror#2 @ F_xx_xx - and r11,r7,r3 @ F_xx_xx + and r10,r6,r10,ror#2 @ F_xx_xx + and r11,r7,r3 @ F_xx_xx add r4,r4,r9 @ E+=X[i] add r4,r4,r10 @ E+=F_40_59(B,C,D) add r4,r4,r11,ror#2 @@ -423,8 +420,8 @@ sha1_block_data_order: add r3,r3,r4,ror#27 @ E+=ROR(A,27) eor r9,r9,r11,ror#31 str r9,[r14,#-4]! - and r10,r5,r10,ror#2 @ F_xx_xx - and r11,r6,r7 @ F_xx_xx + and r10,r5,r10,ror#2 @ F_xx_xx + and r11,r6,r7 @ F_xx_xx add r3,r3,r9 @ E+=X[i] add r3,r3,r10 @ E+=F_40_59(B,C,D) add r3,r3,r11,ror#2 @@ -448,26 +445,25 @@ sha1_block_data_order: bne .Lloop @ [+18], total 1307 #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + ldmia sp!,{r4-r12,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size sha1_block_data_order,.-sha1_block_data_order .align 5 -.LK_00_19:.word 0x5a827999 -.LK_20_39:.word 0x6ed9eba1 -.LK_40_59:.word 0x8f1bbcdc -.LK_60_79:.word 0xca62c1d6 +.LK_00_19: .word 0x5a827999 +.LK_20_39: .word 0x6ed9eba1 +.LK_40_59: .word 0x8f1bbcdc +.LK_60_79: .word 0xca62c1d6 #if __ARM_MAX_ARCH__>=7 .LOPENSSL_armcap: .word OPENSSL_armcap_P-sha1_block_data_order #endif -.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 +.asciz "SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by " .align 5 #if __ARM_MAX_ARCH__>=7 .arch armv7-a @@ -477,7 +473,7 @@ sha1_block_data_order: .align 4 sha1_block_data_order_neon: .LNEON: - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + stmdb sp!,{r4-r12,lr} add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 @ dmb @ errata #451034 on early Cortex A8 @ vstmdb sp!,{d8-d15} @ ABI specification says so @@ -489,21 +485,21 @@ sha1_block_data_order_neon: ldmia r0,{r3,r4,r5,r6,r7} @ load context mov r12,sp - vld1.8 {q0,q1},[r1]! @ handles unaligned - veor q15,q15,q15 - vld1.8 {q2,q3},[r1]! - vld1.32 {d28[],d29[]},[r8,:32]! @ load K_00_19 + vld1.8 {q0-q1},[r1]! @ handles unaligned + veor q15,q15,q15 + vld1.8 {q2-q3},[r1]! + vld1.32 {d28[],d29[]},[r8,:32]! @ load K_00_19 vrev32.8 q0,q0 @ yes, even on vrev32.8 q1,q1 @ big-endian... vrev32.8 q2,q2 vadd.i32 q8,q0,q14 vrev32.8 q3,q3 vadd.i32 q9,q1,q14 - vst1.32 {q8},[r12,:128]! + vst1.32 {q8},[r12,:128]! vadd.i32 q10,q2,q14 - vst1.32 {q9},[r12,:128]! - vst1.32 {q10},[r12,:128]! - ldr r9,[sp] @ big RAW stall + vst1.32 {q9},[r12,:128]! + vst1.32 {q10},[r12,:128]! + ldr r9,[sp] @ big RAW stall .Loop_neon: vext.8 q8,q0,q1,#8 @@ -1181,10 +1177,10 @@ sha1_block_data_order_neon: teq r1,r2 sub r8,r8,#16 subeq r1,r1,#64 - vld1.8 {q0,q1},[r1]! + vld1.8 {q0-q1},[r1]! ldr r9,[sp,#4] eor r11,r10,r6 - vld1.8 {q2,q3},[r1]! + vld1.8 {q2-q3},[r1]! add r3,r3,r4,ror#27 mov r5,r5,ror#2 vld1.32 {d28[],d29[]},[r8,:32]! @@ -1317,7 +1313,7 @@ sha1_block_data_order_neon: bne .Loop_neon @ vldmia sp!,{d8-d15} - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} .size sha1_block_data_order_neon,.-sha1_block_data_order_neon #endif #if __ARM_MAX_ARCH__>=7 @@ -1325,7 +1321,7 @@ sha1_block_data_order_neon: .align 5 sha1_block_data_order_armv8: .LARMv8: - vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so + vstmdb sp!,{d8-d15} @ ABI specification says so veor q1,q1,q1 adr r3,.LK_00_19 @@ -1338,119 +1334,119 @@ sha1_block_data_order_armv8: vld1.32 {d22[],d23[]},[r3,:32] .Loop_v8: - vld1.8 {q4,q5},[r1]! - vld1.8 {q6,q7},[r1]! + vld1.8 {q4-q5},[r1]! + vld1.8 {q6-q7},[r1]! vrev32.8 q4,q4 vrev32.8 q5,q5 vadd.i32 q12,q8,q4 vrev32.8 q6,q6 - vmov q14,q0 @ offload - subs r2,r2,#1 + vmov q14,q0 @ offload + subs r2,r2,#1 vadd.i32 q13,q8,q5 vrev32.8 q7,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 0 -.byte 0x68,0x0c,0x02,0xf2 @ sha1c q0,q1,q12 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 0 + .byte 0x68,0x0c,0x02,0xf2 @ sha1c q0,q1,q12 vadd.i32 q12,q8,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 1 -.byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 + .byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 1 + .byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 vadd.i32 q13,q8,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 2 -.byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 + .byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 + .byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 2 + .byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 vadd.i32 q12,q8,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 3 -.byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 + .byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 + .byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 3 + .byte 0x6a,0x0c,0x06,0xf2 @ sha1c q0,q3,q13 vadd.i32 q13,q9,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 4 -.byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 + .byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 + .byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 4 + .byte 0x68,0x0c,0x04,0xf2 @ sha1c q0,q2,q12 vadd.i32 q12,q9,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 5 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + .byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 + .byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 5 + .byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 vadd.i32 q13,q9,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 6 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + .byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 + .byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 6 + .byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 vadd.i32 q12,q9,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 7 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + .byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 + .byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 7 + .byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 vadd.i32 q13,q9,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 8 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + .byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 + .byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 8 + .byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 vadd.i32 q12,q10,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 9 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + .byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 + .byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 9 + .byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 vadd.i32 q13,q10,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 10 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + .byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 + .byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 10 + .byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 vadd.i32 q12,q10,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 11 -.byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 + .byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 + .byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 11 + .byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 vadd.i32 q13,q10,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 12 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + .byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 + .byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 12 + .byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 vadd.i32 q12,q10,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 13 -.byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 + .byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 + .byte 0x4c,0x8c,0x3a,0xf2 @ sha1su0 q4,q5,q6 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 13 + .byte 0x6a,0x0c,0x26,0xf2 @ sha1m q0,q3,q13 vadd.i32 q13,q11,q7 -.byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 -.byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 14 -.byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 + .byte 0x8e,0x83,0xba,0xf3 @ sha1su1 q4,q7 + .byte 0x4e,0xac,0x3c,0xf2 @ sha1su0 q5,q6,q7 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 14 + .byte 0x68,0x0c,0x24,0xf2 @ sha1m q0,q2,q12 vadd.i32 q12,q11,q4 -.byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 -.byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 15 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + .byte 0x88,0xa3,0xba,0xf3 @ sha1su1 q5,q4 + .byte 0x48,0xcc,0x3e,0xf2 @ sha1su0 q6,q7,q4 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 15 + .byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 vadd.i32 q13,q11,q5 -.byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 -.byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 16 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + .byte 0x8a,0xc3,0xba,0xf3 @ sha1su1 q6,q5 + .byte 0x4a,0xec,0x38,0xf2 @ sha1su0 q7,q4,q5 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 16 + .byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 vadd.i32 q12,q11,q6 -.byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 17 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + .byte 0x8c,0xe3,0xba,0xf3 @ sha1su1 q7,q6 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 17 + .byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 vadd.i32 q13,q11,q7 -.byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 18 -.byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 + .byte 0xc0,0x62,0xb9,0xf3 @ sha1h q3,q0 @ 18 + .byte 0x68,0x0c,0x14,0xf2 @ sha1p q0,q2,q12 -.byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 19 -.byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 + .byte 0xc0,0x42,0xb9,0xf3 @ sha1h q2,q0 @ 19 + .byte 0x6a,0x0c,0x16,0xf2 @ sha1p q0,q3,q13 vadd.i32 q1,q1,q2 vadd.i32 q0,q0,q14 - bne .Loop_v8 + bne .Loop_v8 - vst1.32 {q0},[r0]! - vst1.32 {d2[0]},[r0] + vst1.32 {q0},[r0]! + vst1.32 {d2[0]},[r0] - vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} + vldmia sp!,{d8-d15} bx lr @ bx lr .size sha1_block_data_order_armv8,.-sha1_block_data_order_armv8 #endif diff --git a/third_party/boringssl/linux-arm/crypto/sha/sha256-armv4.S b/third_party/boringssl/linux-arm/crypto/sha/sha256-armv4.S index ba37795..fa09ac0 100644 --- a/third_party/boringssl/linux-arm/crypto/sha/sha256-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/sha/sha256-armv4.S @@ -47,12 +47,12 @@ #if __ARM_ARCH__<7 .code 32 #else -.syntax unified -# if defined(__thumb2__) && !defined(__APPLE__) +.syntax unified +# ifdef __thumb2__ # define adrl adr .thumb # else -.code 32 +.code 32 # endif #endif @@ -79,14 +79,13 @@ K256: .word 0 @ terminator #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) .LOPENSSL_armcap: -.word OPENSSL_armcap_P-.Lsha256_block_data_order +.word OPENSSL_armcap_P-sha256_block_data_order #endif .align 5 -.globl sha256_block_data_order +.global sha256_block_data_order .type sha256_block_data_order,%function sha256_block_data_order: -.Lsha256_block_data_order: #if __ARM_ARCH__<7 sub r3,pc,#8 @ sha256_block_data_order #else @@ -95,9 +94,6 @@ sha256_block_data_order: #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,.LOPENSSL_armcap ldr r12,[r3,r12] @ OPENSSL_armcap_P -#ifdef __APPLE__ - ldr r12,[r12] -#endif tst r12,#ARMV8_SHA256 bne .LARMv8 tst r12,#ARMV7_NEON @@ -1861,64 +1857,64 @@ sha256_block_data_order: add sp,sp,#19*4 @ destroy frame #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc} + ldmia sp!,{r4-r11,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr} + ldmia sp!,{r4-r11,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size sha256_block_data_order,.-sha256_block_data_order #if __ARM_MAX_ARCH__>=7 .arch armv7-a .fpu neon -.globl sha256_block_data_order_neon +.global sha256_block_data_order_neon .type sha256_block_data_order_neon,%function .align 4 sha256_block_data_order_neon: .LNEON: - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + stmdb sp!,{r4-r12,lr} sub r11,sp,#16*4+16 - adr r14,K256 + adrl r14,K256 bic r11,r11,#15 @ align for 128-bit stores mov r12,sp mov sp,r11 @ alloca add r2,r1,r2,lsl#6 @ len to point at the end of inp - vld1.8 {q0},[r1]! - vld1.8 {q1},[r1]! - vld1.8 {q2},[r1]! - vld1.8 {q3},[r1]! - vld1.32 {q8},[r14,:128]! - vld1.32 {q9},[r14,:128]! - vld1.32 {q10},[r14,:128]! - vld1.32 {q11},[r14,:128]! + vld1.8 {q0},[r1]! + vld1.8 {q1},[r1]! + vld1.8 {q2},[r1]! + vld1.8 {q3},[r1]! + vld1.32 {q8},[r14,:128]! + vld1.32 {q9},[r14,:128]! + vld1.32 {q10},[r14,:128]! + vld1.32 {q11},[r14,:128]! vrev32.8 q0,q0 @ yes, even on - str r0,[sp,#64] + str r0,[sp,#64] vrev32.8 q1,q1 @ big-endian - str r1,[sp,#68] - mov r1,sp + str r1,[sp,#68] + mov r1,sp vrev32.8 q2,q2 - str r2,[sp,#72] + str r2,[sp,#72] vrev32.8 q3,q3 - str r12,[sp,#76] @ save original sp + str r12,[sp,#76] @ save original sp vadd.i32 q8,q8,q0 vadd.i32 q9,q9,q1 - vst1.32 {q8},[r1,:128]! + vst1.32 {q8},[r1,:128]! vadd.i32 q10,q10,q2 - vst1.32 {q9},[r1,:128]! + vst1.32 {q9},[r1,:128]! vadd.i32 q11,q11,q3 - vst1.32 {q10},[r1,:128]! - vst1.32 {q11},[r1,:128]! + vst1.32 {q10},[r1,:128]! + vst1.32 {q11},[r1,:128]! - ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} - sub r1,r1,#64 - ldr r2,[sp,#0] - eor r12,r12,r12 - eor r3,r5,r6 - b .L_00_48 + ldmia r0,{r4-r11} + sub r1,r1,#64 + ldr r2,[sp,#0] + eor r12,r12,r12 + eor r3,r5,r6 + b .L_00_48 .align 4 .L_00_48: @@ -2319,19 +2315,19 @@ sha256_block_data_order_neon: sub r1,r1,#64 bne .L_00_48 - ldr r1,[sp,#68] - ldr r0,[sp,#72] - sub r14,r14,#256 @ rewind r14 - teq r1,r0 - it eq - subeq r1,r1,#64 @ avoid SEGV - vld1.8 {q0},[r1]! @ load next input block - vld1.8 {q1},[r1]! - vld1.8 {q2},[r1]! - vld1.8 {q3},[r1]! - it ne - strne r1,[sp,#68] - mov r1,sp + ldr r1,[sp,#68] + ldr r0,[sp,#72] + sub r14,r14,#256 @ rewind r14 + teq r1,r0 + it eq + subeq r1,r1,#64 @ avoid SEGV + vld1.8 {q0},[r1]! @ load next input block + vld1.8 {q1},[r1]! + vld1.8 {q2},[r1]! + vld1.8 {q3},[r1]! + it ne + strne r1,[sp,#68] + mov r1,sp add r11,r11,r2 eor r2,r9,r10 eor r0,r8,r8,ror#5 @@ -2641,7 +2637,7 @@ sha256_block_data_order_neon: str r6,[r2],#4 add r11,r11,r1 str r7,[r2],#4 - stmia r2,{r8,r9,r10,r11} + stmia r2,{r8-r11} ittte ne movne r1,sp @@ -2652,12 +2648,12 @@ sha256_block_data_order_neon: eorne r3,r5,r6 bne .L_00_48 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} .size sha256_block_data_order_neon,.-sha256_block_data_order_neon #endif #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) -# if defined(__thumb2__) && !defined(__APPLE__) +# ifdef __thumb2__ # define INST(a,b,c,d) .byte c,d|0xc,a,b # else # define INST(a,b,c,d) .byte a,b,c,d @@ -2668,9 +2664,7 @@ sha256_block_data_order_neon: sha256_block_data_order_armv8: .LARMv8: vld1.32 {q0,q1},[r0] -# ifdef __APPLE__ - sub r3,r3,#256+32 -# elif defined(__thumb2__) +# ifdef __thumb2__ adr r3,.LARMv8 sub r3,r3,#.LARMv8-K256 # else @@ -2679,138 +2673,137 @@ sha256_block_data_order_armv8: add r2,r1,r2,lsl#6 @ len to point at the end of inp .Loop_v8: - vld1.8 {q8,q9},[r1]! - vld1.8 {q10,q11},[r1]! - vld1.32 {q12},[r3]! + vld1.8 {q8-q9},[r1]! + vld1.8 {q10-q11},[r1]! + vld1.32 {q12},[r3]! vrev32.8 q8,q8 vrev32.8 q9,q9 vrev32.8 q10,q10 vrev32.8 q11,q11 - vmov q14,q0 @ offload - vmov q15,q1 - teq r1,r2 - vld1.32 {q13},[r3]! + vmov q14,q0 @ offload + vmov q15,q1 + teq r1,r2 + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q8 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q9 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 - vld1.32 {q13},[r3]! + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q10 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q11 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 - vld1.32 {q13},[r3]! + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q8 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q9 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 - vld1.32 {q13},[r3]! + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q10 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q11 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 - vld1.32 {q13},[r3]! + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q8 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q9 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 - vld1.32 {q13},[r3]! + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q10 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q11 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 - vld1.32 {q13},[r3]! + vld1.32 {q13},[r3]! vadd.i32 q12,q12,q8 - vmov q2,q0 + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 - vld1.32 {q12},[r3]! + vld1.32 {q12},[r3]! vadd.i32 q13,q13,q9 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 - vld1.32 {q13},[r3] + vld1.32 {q13},[r3] vadd.i32 q12,q12,q10 - sub r3,r3,#256-16 @ rewind - vmov q2,q0 + sub r3,r3,#256-16 @ rewind + vmov q2,q0 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 vadd.i32 q13,q13,q11 - vmov q2,q0 + vmov q2,q0 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 vadd.i32 q0,q0,q14 vadd.i32 q1,q1,q15 - it ne - bne .Loop_v8 + it ne + bne .Loop_v8 - vst1.32 {q0,q1},[r0] + vst1.32 {q0,q1},[r0] bx lr @ bx lr .size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 #endif -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 +.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by " .align 2 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) -.comm OPENSSL_armcap_P,4,4 -.hidden OPENSSL_armcap_P +.comm OPENSSL_armcap_P,4,4 +.hidden OPENSSL_armcap_P #endif diff --git a/third_party/boringssl/linux-arm/crypto/sha/sha512-armv4.S b/third_party/boringssl/linux-arm/crypto/sha/sha512-armv4.S index 1a3d467..738d126 100644 --- a/third_party/boringssl/linux-arm/crypto/sha/sha512-armv4.S +++ b/third_party/boringssl/linux-arm/crypto/sha/sha512-armv4.S @@ -67,74 +67,73 @@ #endif .text -#if __ARM_ARCH__<7 || defined(__APPLE__) +#if __ARM_ARCH__<7 .code 32 #else -.syntax unified +.syntax unified # ifdef __thumb2__ # define adrl adr .thumb # else -.code 32 +.code 32 # endif #endif .type K512,%object .align 5 K512: - WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd) - WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc) - WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019) - WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118) - WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe) - WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2) - WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1) - WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694) - WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3) - WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65) - WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483) - WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5) - WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210) - WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4) - WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725) - WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70) - WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926) - WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df) - WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8) - WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b) - WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001) - WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30) - WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910) - WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8) - WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53) - WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8) - WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb) - WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3) - WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60) - WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec) - WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9) - WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b) - WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207) - WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178) - WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6) - WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b) - WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493) - WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c) - WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a) - WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) +WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd) +WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc) +WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019) +WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118) +WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe) +WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2) +WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1) +WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694) +WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3) +WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65) +WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483) +WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5) +WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210) +WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4) +WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725) +WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70) +WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926) +WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df) +WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8) +WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b) +WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001) +WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30) +WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910) +WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8) +WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53) +WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8) +WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb) +WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3) +WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60) +WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec) +WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9) +WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b) +WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207) +WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178) +WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6) +WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b) +WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493) +WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c) +WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a) +WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) .size K512,.-K512 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) .LOPENSSL_armcap: -.word OPENSSL_armcap_P-.Lsha512_block_data_order +.word OPENSSL_armcap_P-sha512_block_data_order .skip 32-4 #else .skip 32 #endif -.globl sha512_block_data_order +.global sha512_block_data_order .type sha512_block_data_order,%function sha512_block_data_order: -.Lsha512_block_data_order: #if __ARM_ARCH__<7 sub r3,pc,#8 @ sha512_block_data_order #else @@ -143,14 +142,11 @@ sha512_block_data_order: #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) ldr r12,.LOPENSSL_armcap ldr r12,[r3,r12] @ OPENSSL_armcap_P -#ifdef __APPLE__ - ldr r12,[r12] -#endif tst r12,#1 bne .LNEON #endif add r2,r1,r2,lsl#7 @ len to point at the end of inp - stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + stmdb sp!,{r4-r12,lr} sub r14,r3,#672 @ K512 sub sp,sp,#9*8 @@ -519,1347 +515,1346 @@ sha512_block_data_order: add sp,sp,#8*9 @ destroy frame #if __ARM_ARCH__>=5 - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} + ldmia sp!,{r4-r12,pc} #else - ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} + ldmia sp!,{r4-r12,lr} tst lr,#1 moveq pc,lr @ be binary compatible with V4, yet -.word 0xe12fff1e @ interoperable with Thumb ISA:-) + .word 0xe12fff1e @ interoperable with Thumb ISA:-) #endif .size sha512_block_data_order,.-sha512_block_data_order #if __ARM_MAX_ARCH__>=7 .arch armv7-a .fpu neon -.globl sha512_block_data_order_neon +.global sha512_block_data_order_neon .type sha512_block_data_order_neon,%function .align 4 sha512_block_data_order_neon: .LNEON: - dmb @ errata #451034 on early Cortex A8 + dmb @ errata #451034 on early Cortex A8 add r2,r1,r2,lsl#7 @ len to point at the end of inp - adr r3,K512 VFP_ABI_PUSH - vldmia r0,{d16,d17,d18,d19,d20,d21,d22,d23} @ load context + adrl r3,K512 + vldmia r0,{d16-d23} @ load context .Loop_neon: vshr.u64 d24,d20,#14 @ 0 #if 0<16 - vld1.64 {d0},[r1]! @ handles unaligned + vld1.64 {d0},[r1]! @ handles unaligned #endif vshr.u64 d25,d20,#18 #if 0>0 - vadd.i64 d16,d30 @ h+=Maj from the past + vadd.i64 d16,d30 @ h+=Maj from the past #endif vshr.u64 d26,d20,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d20,#50 - vsli.64 d25,d20,#46 - vmov d29,d20 - vsli.64 d26,d20,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d20,#50 + vsli.64 d25,d20,#46 + vmov d29,d20 + vsli.64 d26,d20,#23 #if 0<16 && defined(__ARMEL__) vrev64.8 d0,d0 #endif - veor d25,d24 - vbsl d29,d21,d22 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d21,d22 @ Ch(e,f,g) vshr.u64 d24,d16,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d23 vshr.u64 d25,d16,#34 - vsli.64 d24,d16,#36 + vsli.64 d24,d16,#36 vadd.i64 d27,d26 vshr.u64 d26,d16,#39 vadd.i64 d28,d0 - vsli.64 d25,d16,#30 - veor d30,d16,d17 - vsli.64 d26,d16,#25 - veor d23,d24,d25 + vsli.64 d25,d16,#30 + veor d30,d16,d17 + vsli.64 d26,d16,#25 + veor d23,d24,d25 vadd.i64 d27,d28 - vbsl d30,d18,d17 @ Maj(a,b,c) - veor d23,d26 @ Sigma0(a) + vbsl d30,d18,d17 @ Maj(a,b,c) + veor d23,d26 @ Sigma0(a) vadd.i64 d19,d27 vadd.i64 d30,d27 @ vadd.i64 d23,d30 vshr.u64 d24,d19,#14 @ 1 #if 1<16 - vld1.64 {d1},[r1]! @ handles unaligned + vld1.64 {d1},[r1]! @ handles unaligned #endif vshr.u64 d25,d19,#18 #if 1>0 - vadd.i64 d23,d30 @ h+=Maj from the past + vadd.i64 d23,d30 @ h+=Maj from the past #endif vshr.u64 d26,d19,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d19,#50 - vsli.64 d25,d19,#46 - vmov d29,d19 - vsli.64 d26,d19,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d19,#50 + vsli.64 d25,d19,#46 + vmov d29,d19 + vsli.64 d26,d19,#23 #if 1<16 && defined(__ARMEL__) vrev64.8 d1,d1 #endif - veor d25,d24 - vbsl d29,d20,d21 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d20,d21 @ Ch(e,f,g) vshr.u64 d24,d23,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d22 vshr.u64 d25,d23,#34 - vsli.64 d24,d23,#36 + vsli.64 d24,d23,#36 vadd.i64 d27,d26 vshr.u64 d26,d23,#39 vadd.i64 d28,d1 - vsli.64 d25,d23,#30 - veor d30,d23,d16 - vsli.64 d26,d23,#25 - veor d22,d24,d25 + vsli.64 d25,d23,#30 + veor d30,d23,d16 + vsli.64 d26,d23,#25 + veor d22,d24,d25 vadd.i64 d27,d28 - vbsl d30,d17,d16 @ Maj(a,b,c) - veor d22,d26 @ Sigma0(a) + vbsl d30,d17,d16 @ Maj(a,b,c) + veor d22,d26 @ Sigma0(a) vadd.i64 d18,d27 vadd.i64 d30,d27 @ vadd.i64 d22,d30 vshr.u64 d24,d18,#14 @ 2 #if 2<16 - vld1.64 {d2},[r1]! @ handles unaligned + vld1.64 {d2},[r1]! @ handles unaligned #endif vshr.u64 d25,d18,#18 #if 2>0 - vadd.i64 d22,d30 @ h+=Maj from the past + vadd.i64 d22,d30 @ h+=Maj from the past #endif vshr.u64 d26,d18,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d18,#50 - vsli.64 d25,d18,#46 - vmov d29,d18 - vsli.64 d26,d18,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d18,#50 + vsli.64 d25,d18,#46 + vmov d29,d18 + vsli.64 d26,d18,#23 #if 2<16 && defined(__ARMEL__) vrev64.8 d2,d2 #endif - veor d25,d24 - vbsl d29,d19,d20 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d19,d20 @ Ch(e,f,g) vshr.u64 d24,d22,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d21 vshr.u64 d25,d22,#34 - vsli.64 d24,d22,#36 + vsli.64 d24,d22,#36 vadd.i64 d27,d26 vshr.u64 d26,d22,#39 vadd.i64 d28,d2 - vsli.64 d25,d22,#30 - veor d30,d22,d23 - vsli.64 d26,d22,#25 - veor d21,d24,d25 + vsli.64 d25,d22,#30 + veor d30,d22,d23 + vsli.64 d26,d22,#25 + veor d21,d24,d25 vadd.i64 d27,d28 - vbsl d30,d16,d23 @ Maj(a,b,c) - veor d21,d26 @ Sigma0(a) + vbsl d30,d16,d23 @ Maj(a,b,c) + veor d21,d26 @ Sigma0(a) vadd.i64 d17,d27 vadd.i64 d30,d27 @ vadd.i64 d21,d30 vshr.u64 d24,d17,#14 @ 3 #if 3<16 - vld1.64 {d3},[r1]! @ handles unaligned + vld1.64 {d3},[r1]! @ handles unaligned #endif vshr.u64 d25,d17,#18 #if 3>0 - vadd.i64 d21,d30 @ h+=Maj from the past + vadd.i64 d21,d30 @ h+=Maj from the past #endif vshr.u64 d26,d17,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d17,#50 - vsli.64 d25,d17,#46 - vmov d29,d17 - vsli.64 d26,d17,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d17,#50 + vsli.64 d25,d17,#46 + vmov d29,d17 + vsli.64 d26,d17,#23 #if 3<16 && defined(__ARMEL__) vrev64.8 d3,d3 #endif - veor d25,d24 - vbsl d29,d18,d19 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d18,d19 @ Ch(e,f,g) vshr.u64 d24,d21,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d20 vshr.u64 d25,d21,#34 - vsli.64 d24,d21,#36 + vsli.64 d24,d21,#36 vadd.i64 d27,d26 vshr.u64 d26,d21,#39 vadd.i64 d28,d3 - vsli.64 d25,d21,#30 - veor d30,d21,d22 - vsli.64 d26,d21,#25 - veor d20,d24,d25 + vsli.64 d25,d21,#30 + veor d30,d21,d22 + vsli.64 d26,d21,#25 + veor d20,d24,d25 vadd.i64 d27,d28 - vbsl d30,d23,d22 @ Maj(a,b,c) - veor d20,d26 @ Sigma0(a) + vbsl d30,d23,d22 @ Maj(a,b,c) + veor d20,d26 @ Sigma0(a) vadd.i64 d16,d27 vadd.i64 d30,d27 @ vadd.i64 d20,d30 vshr.u64 d24,d16,#14 @ 4 #if 4<16 - vld1.64 {d4},[r1]! @ handles unaligned + vld1.64 {d4},[r1]! @ handles unaligned #endif vshr.u64 d25,d16,#18 #if 4>0 - vadd.i64 d20,d30 @ h+=Maj from the past + vadd.i64 d20,d30 @ h+=Maj from the past #endif vshr.u64 d26,d16,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d16,#50 - vsli.64 d25,d16,#46 - vmov d29,d16 - vsli.64 d26,d16,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d16,#50 + vsli.64 d25,d16,#46 + vmov d29,d16 + vsli.64 d26,d16,#23 #if 4<16 && defined(__ARMEL__) vrev64.8 d4,d4 #endif - veor d25,d24 - vbsl d29,d17,d18 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d17,d18 @ Ch(e,f,g) vshr.u64 d24,d20,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d19 vshr.u64 d25,d20,#34 - vsli.64 d24,d20,#36 + vsli.64 d24,d20,#36 vadd.i64 d27,d26 vshr.u64 d26,d20,#39 vadd.i64 d28,d4 - vsli.64 d25,d20,#30 - veor d30,d20,d21 - vsli.64 d26,d20,#25 - veor d19,d24,d25 + vsli.64 d25,d20,#30 + veor d30,d20,d21 + vsli.64 d26,d20,#25 + veor d19,d24,d25 vadd.i64 d27,d28 - vbsl d30,d22,d21 @ Maj(a,b,c) - veor d19,d26 @ Sigma0(a) + vbsl d30,d22,d21 @ Maj(a,b,c) + veor d19,d26 @ Sigma0(a) vadd.i64 d23,d27 vadd.i64 d30,d27 @ vadd.i64 d19,d30 vshr.u64 d24,d23,#14 @ 5 #if 5<16 - vld1.64 {d5},[r1]! @ handles unaligned + vld1.64 {d5},[r1]! @ handles unaligned #endif vshr.u64 d25,d23,#18 #if 5>0 - vadd.i64 d19,d30 @ h+=Maj from the past + vadd.i64 d19,d30 @ h+=Maj from the past #endif vshr.u64 d26,d23,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d23,#50 - vsli.64 d25,d23,#46 - vmov d29,d23 - vsli.64 d26,d23,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d23,#50 + vsli.64 d25,d23,#46 + vmov d29,d23 + vsli.64 d26,d23,#23 #if 5<16 && defined(__ARMEL__) vrev64.8 d5,d5 #endif - veor d25,d24 - vbsl d29,d16,d17 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d16,d17 @ Ch(e,f,g) vshr.u64 d24,d19,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d18 vshr.u64 d25,d19,#34 - vsli.64 d24,d19,#36 + vsli.64 d24,d19,#36 vadd.i64 d27,d26 vshr.u64 d26,d19,#39 vadd.i64 d28,d5 - vsli.64 d25,d19,#30 - veor d30,d19,d20 - vsli.64 d26,d19,#25 - veor d18,d24,d25 + vsli.64 d25,d19,#30 + veor d30,d19,d20 + vsli.64 d26,d19,#25 + veor d18,d24,d25 vadd.i64 d27,d28 - vbsl d30,d21,d20 @ Maj(a,b,c) - veor d18,d26 @ Sigma0(a) + vbsl d30,d21,d20 @ Maj(a,b,c) + veor d18,d26 @ Sigma0(a) vadd.i64 d22,d27 vadd.i64 d30,d27 @ vadd.i64 d18,d30 vshr.u64 d24,d22,#14 @ 6 #if 6<16 - vld1.64 {d6},[r1]! @ handles unaligned + vld1.64 {d6},[r1]! @ handles unaligned #endif vshr.u64 d25,d22,#18 #if 6>0 - vadd.i64 d18,d30 @ h+=Maj from the past + vadd.i64 d18,d30 @ h+=Maj from the past #endif vshr.u64 d26,d22,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d22,#50 - vsli.64 d25,d22,#46 - vmov d29,d22 - vsli.64 d26,d22,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d22,#50 + vsli.64 d25,d22,#46 + vmov d29,d22 + vsli.64 d26,d22,#23 #if 6<16 && defined(__ARMEL__) vrev64.8 d6,d6 #endif - veor d25,d24 - vbsl d29,d23,d16 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d23,d16 @ Ch(e,f,g) vshr.u64 d24,d18,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d17 vshr.u64 d25,d18,#34 - vsli.64 d24,d18,#36 + vsli.64 d24,d18,#36 vadd.i64 d27,d26 vshr.u64 d26,d18,#39 vadd.i64 d28,d6 - vsli.64 d25,d18,#30 - veor d30,d18,d19 - vsli.64 d26,d18,#25 - veor d17,d24,d25 + vsli.64 d25,d18,#30 + veor d30,d18,d19 + vsli.64 d26,d18,#25 + veor d17,d24,d25 vadd.i64 d27,d28 - vbsl d30,d20,d19 @ Maj(a,b,c) - veor d17,d26 @ Sigma0(a) + vbsl d30,d20,d19 @ Maj(a,b,c) + veor d17,d26 @ Sigma0(a) vadd.i64 d21,d27 vadd.i64 d30,d27 @ vadd.i64 d17,d30 vshr.u64 d24,d21,#14 @ 7 #if 7<16 - vld1.64 {d7},[r1]! @ handles unaligned + vld1.64 {d7},[r1]! @ handles unaligned #endif vshr.u64 d25,d21,#18 #if 7>0 - vadd.i64 d17,d30 @ h+=Maj from the past + vadd.i64 d17,d30 @ h+=Maj from the past #endif vshr.u64 d26,d21,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d21,#50 - vsli.64 d25,d21,#46 - vmov d29,d21 - vsli.64 d26,d21,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d21,#50 + vsli.64 d25,d21,#46 + vmov d29,d21 + vsli.64 d26,d21,#23 #if 7<16 && defined(__ARMEL__) vrev64.8 d7,d7 #endif - veor d25,d24 - vbsl d29,d22,d23 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d22,d23 @ Ch(e,f,g) vshr.u64 d24,d17,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d16 vshr.u64 d25,d17,#34 - vsli.64 d24,d17,#36 + vsli.64 d24,d17,#36 vadd.i64 d27,d26 vshr.u64 d26,d17,#39 vadd.i64 d28,d7 - vsli.64 d25,d17,#30 - veor d30,d17,d18 - vsli.64 d26,d17,#25 - veor d16,d24,d25 + vsli.64 d25,d17,#30 + veor d30,d17,d18 + vsli.64 d26,d17,#25 + veor d16,d24,d25 vadd.i64 d27,d28 - vbsl d30,d19,d18 @ Maj(a,b,c) - veor d16,d26 @ Sigma0(a) + vbsl d30,d19,d18 @ Maj(a,b,c) + veor d16,d26 @ Sigma0(a) vadd.i64 d20,d27 vadd.i64 d30,d27 @ vadd.i64 d16,d30 vshr.u64 d24,d20,#14 @ 8 #if 8<16 - vld1.64 {d8},[r1]! @ handles unaligned + vld1.64 {d8},[r1]! @ handles unaligned #endif vshr.u64 d25,d20,#18 #if 8>0 - vadd.i64 d16,d30 @ h+=Maj from the past + vadd.i64 d16,d30 @ h+=Maj from the past #endif vshr.u64 d26,d20,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d20,#50 - vsli.64 d25,d20,#46 - vmov d29,d20 - vsli.64 d26,d20,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d20,#50 + vsli.64 d25,d20,#46 + vmov d29,d20 + vsli.64 d26,d20,#23 #if 8<16 && defined(__ARMEL__) vrev64.8 d8,d8 #endif - veor d25,d24 - vbsl d29,d21,d22 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d21,d22 @ Ch(e,f,g) vshr.u64 d24,d16,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d23 vshr.u64 d25,d16,#34 - vsli.64 d24,d16,#36 + vsli.64 d24,d16,#36 vadd.i64 d27,d26 vshr.u64 d26,d16,#39 vadd.i64 d28,d8 - vsli.64 d25,d16,#30 - veor d30,d16,d17 - vsli.64 d26,d16,#25 - veor d23,d24,d25 + vsli.64 d25,d16,#30 + veor d30,d16,d17 + vsli.64 d26,d16,#25 + veor d23,d24,d25 vadd.i64 d27,d28 - vbsl d30,d18,d17 @ Maj(a,b,c) - veor d23,d26 @ Sigma0(a) + vbsl d30,d18,d17 @ Maj(a,b,c) + veor d23,d26 @ Sigma0(a) vadd.i64 d19,d27 vadd.i64 d30,d27 @ vadd.i64 d23,d30 vshr.u64 d24,d19,#14 @ 9 #if 9<16 - vld1.64 {d9},[r1]! @ handles unaligned + vld1.64 {d9},[r1]! @ handles unaligned #endif vshr.u64 d25,d19,#18 #if 9>0 - vadd.i64 d23,d30 @ h+=Maj from the past + vadd.i64 d23,d30 @ h+=Maj from the past #endif vshr.u64 d26,d19,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d19,#50 - vsli.64 d25,d19,#46 - vmov d29,d19 - vsli.64 d26,d19,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d19,#50 + vsli.64 d25,d19,#46 + vmov d29,d19 + vsli.64 d26,d19,#23 #if 9<16 && defined(__ARMEL__) vrev64.8 d9,d9 #endif - veor d25,d24 - vbsl d29,d20,d21 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d20,d21 @ Ch(e,f,g) vshr.u64 d24,d23,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d22 vshr.u64 d25,d23,#34 - vsli.64 d24,d23,#36 + vsli.64 d24,d23,#36 vadd.i64 d27,d26 vshr.u64 d26,d23,#39 vadd.i64 d28,d9 - vsli.64 d25,d23,#30 - veor d30,d23,d16 - vsli.64 d26,d23,#25 - veor d22,d24,d25 + vsli.64 d25,d23,#30 + veor d30,d23,d16 + vsli.64 d26,d23,#25 + veor d22,d24,d25 vadd.i64 d27,d28 - vbsl d30,d17,d16 @ Maj(a,b,c) - veor d22,d26 @ Sigma0(a) + vbsl d30,d17,d16 @ Maj(a,b,c) + veor d22,d26 @ Sigma0(a) vadd.i64 d18,d27 vadd.i64 d30,d27 @ vadd.i64 d22,d30 vshr.u64 d24,d18,#14 @ 10 #if 10<16 - vld1.64 {d10},[r1]! @ handles unaligned + vld1.64 {d10},[r1]! @ handles unaligned #endif vshr.u64 d25,d18,#18 #if 10>0 - vadd.i64 d22,d30 @ h+=Maj from the past + vadd.i64 d22,d30 @ h+=Maj from the past #endif vshr.u64 d26,d18,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d18,#50 - vsli.64 d25,d18,#46 - vmov d29,d18 - vsli.64 d26,d18,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d18,#50 + vsli.64 d25,d18,#46 + vmov d29,d18 + vsli.64 d26,d18,#23 #if 10<16 && defined(__ARMEL__) vrev64.8 d10,d10 #endif - veor d25,d24 - vbsl d29,d19,d20 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d19,d20 @ Ch(e,f,g) vshr.u64 d24,d22,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d21 vshr.u64 d25,d22,#34 - vsli.64 d24,d22,#36 + vsli.64 d24,d22,#36 vadd.i64 d27,d26 vshr.u64 d26,d22,#39 vadd.i64 d28,d10 - vsli.64 d25,d22,#30 - veor d30,d22,d23 - vsli.64 d26,d22,#25 - veor d21,d24,d25 + vsli.64 d25,d22,#30 + veor d30,d22,d23 + vsli.64 d26,d22,#25 + veor d21,d24,d25 vadd.i64 d27,d28 - vbsl d30,d16,d23 @ Maj(a,b,c) - veor d21,d26 @ Sigma0(a) + vbsl d30,d16,d23 @ Maj(a,b,c) + veor d21,d26 @ Sigma0(a) vadd.i64 d17,d27 vadd.i64 d30,d27 @ vadd.i64 d21,d30 vshr.u64 d24,d17,#14 @ 11 #if 11<16 - vld1.64 {d11},[r1]! @ handles unaligned + vld1.64 {d11},[r1]! @ handles unaligned #endif vshr.u64 d25,d17,#18 #if 11>0 - vadd.i64 d21,d30 @ h+=Maj from the past + vadd.i64 d21,d30 @ h+=Maj from the past #endif vshr.u64 d26,d17,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d17,#50 - vsli.64 d25,d17,#46 - vmov d29,d17 - vsli.64 d26,d17,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d17,#50 + vsli.64 d25,d17,#46 + vmov d29,d17 + vsli.64 d26,d17,#23 #if 11<16 && defined(__ARMEL__) vrev64.8 d11,d11 #endif - veor d25,d24 - vbsl d29,d18,d19 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d18,d19 @ Ch(e,f,g) vshr.u64 d24,d21,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d20 vshr.u64 d25,d21,#34 - vsli.64 d24,d21,#36 + vsli.64 d24,d21,#36 vadd.i64 d27,d26 vshr.u64 d26,d21,#39 vadd.i64 d28,d11 - vsli.64 d25,d21,#30 - veor d30,d21,d22 - vsli.64 d26,d21,#25 - veor d20,d24,d25 + vsli.64 d25,d21,#30 + veor d30,d21,d22 + vsli.64 d26,d21,#25 + veor d20,d24,d25 vadd.i64 d27,d28 - vbsl d30,d23,d22 @ Maj(a,b,c) - veor d20,d26 @ Sigma0(a) + vbsl d30,d23,d22 @ Maj(a,b,c) + veor d20,d26 @ Sigma0(a) vadd.i64 d16,d27 vadd.i64 d30,d27 @ vadd.i64 d20,d30 vshr.u64 d24,d16,#14 @ 12 #if 12<16 - vld1.64 {d12},[r1]! @ handles unaligned + vld1.64 {d12},[r1]! @ handles unaligned #endif vshr.u64 d25,d16,#18 #if 12>0 - vadd.i64 d20,d30 @ h+=Maj from the past + vadd.i64 d20,d30 @ h+=Maj from the past #endif vshr.u64 d26,d16,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d16,#50 - vsli.64 d25,d16,#46 - vmov d29,d16 - vsli.64 d26,d16,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d16,#50 + vsli.64 d25,d16,#46 + vmov d29,d16 + vsli.64 d26,d16,#23 #if 12<16 && defined(__ARMEL__) vrev64.8 d12,d12 #endif - veor d25,d24 - vbsl d29,d17,d18 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d17,d18 @ Ch(e,f,g) vshr.u64 d24,d20,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d19 vshr.u64 d25,d20,#34 - vsli.64 d24,d20,#36 + vsli.64 d24,d20,#36 vadd.i64 d27,d26 vshr.u64 d26,d20,#39 vadd.i64 d28,d12 - vsli.64 d25,d20,#30 - veor d30,d20,d21 - vsli.64 d26,d20,#25 - veor d19,d24,d25 + vsli.64 d25,d20,#30 + veor d30,d20,d21 + vsli.64 d26,d20,#25 + veor d19,d24,d25 vadd.i64 d27,d28 - vbsl d30,d22,d21 @ Maj(a,b,c) - veor d19,d26 @ Sigma0(a) + vbsl d30,d22,d21 @ Maj(a,b,c) + veor d19,d26 @ Sigma0(a) vadd.i64 d23,d27 vadd.i64 d30,d27 @ vadd.i64 d19,d30 vshr.u64 d24,d23,#14 @ 13 #if 13<16 - vld1.64 {d13},[r1]! @ handles unaligned + vld1.64 {d13},[r1]! @ handles unaligned #endif vshr.u64 d25,d23,#18 #if 13>0 - vadd.i64 d19,d30 @ h+=Maj from the past + vadd.i64 d19,d30 @ h+=Maj from the past #endif vshr.u64 d26,d23,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d23,#50 - vsli.64 d25,d23,#46 - vmov d29,d23 - vsli.64 d26,d23,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d23,#50 + vsli.64 d25,d23,#46 + vmov d29,d23 + vsli.64 d26,d23,#23 #if 13<16 && defined(__ARMEL__) vrev64.8 d13,d13 #endif - veor d25,d24 - vbsl d29,d16,d17 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d16,d17 @ Ch(e,f,g) vshr.u64 d24,d19,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d18 vshr.u64 d25,d19,#34 - vsli.64 d24,d19,#36 + vsli.64 d24,d19,#36 vadd.i64 d27,d26 vshr.u64 d26,d19,#39 vadd.i64 d28,d13 - vsli.64 d25,d19,#30 - veor d30,d19,d20 - vsli.64 d26,d19,#25 - veor d18,d24,d25 + vsli.64 d25,d19,#30 + veor d30,d19,d20 + vsli.64 d26,d19,#25 + veor d18,d24,d25 vadd.i64 d27,d28 - vbsl d30,d21,d20 @ Maj(a,b,c) - veor d18,d26 @ Sigma0(a) + vbsl d30,d21,d20 @ Maj(a,b,c) + veor d18,d26 @ Sigma0(a) vadd.i64 d22,d27 vadd.i64 d30,d27 @ vadd.i64 d18,d30 vshr.u64 d24,d22,#14 @ 14 #if 14<16 - vld1.64 {d14},[r1]! @ handles unaligned + vld1.64 {d14},[r1]! @ handles unaligned #endif vshr.u64 d25,d22,#18 #if 14>0 - vadd.i64 d18,d30 @ h+=Maj from the past + vadd.i64 d18,d30 @ h+=Maj from the past #endif vshr.u64 d26,d22,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d22,#50 - vsli.64 d25,d22,#46 - vmov d29,d22 - vsli.64 d26,d22,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d22,#50 + vsli.64 d25,d22,#46 + vmov d29,d22 + vsli.64 d26,d22,#23 #if 14<16 && defined(__ARMEL__) vrev64.8 d14,d14 #endif - veor d25,d24 - vbsl d29,d23,d16 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d23,d16 @ Ch(e,f,g) vshr.u64 d24,d18,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d17 vshr.u64 d25,d18,#34 - vsli.64 d24,d18,#36 + vsli.64 d24,d18,#36 vadd.i64 d27,d26 vshr.u64 d26,d18,#39 vadd.i64 d28,d14 - vsli.64 d25,d18,#30 - veor d30,d18,d19 - vsli.64 d26,d18,#25 - veor d17,d24,d25 + vsli.64 d25,d18,#30 + veor d30,d18,d19 + vsli.64 d26,d18,#25 + veor d17,d24,d25 vadd.i64 d27,d28 - vbsl d30,d20,d19 @ Maj(a,b,c) - veor d17,d26 @ Sigma0(a) + vbsl d30,d20,d19 @ Maj(a,b,c) + veor d17,d26 @ Sigma0(a) vadd.i64 d21,d27 vadd.i64 d30,d27 @ vadd.i64 d17,d30 vshr.u64 d24,d21,#14 @ 15 #if 15<16 - vld1.64 {d15},[r1]! @ handles unaligned + vld1.64 {d15},[r1]! @ handles unaligned #endif vshr.u64 d25,d21,#18 #if 15>0 - vadd.i64 d17,d30 @ h+=Maj from the past + vadd.i64 d17,d30 @ h+=Maj from the past #endif vshr.u64 d26,d21,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d21,#50 - vsli.64 d25,d21,#46 - vmov d29,d21 - vsli.64 d26,d21,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d21,#50 + vsli.64 d25,d21,#46 + vmov d29,d21 + vsli.64 d26,d21,#23 #if 15<16 && defined(__ARMEL__) vrev64.8 d15,d15 #endif - veor d25,d24 - vbsl d29,d22,d23 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d22,d23 @ Ch(e,f,g) vshr.u64 d24,d17,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d16 vshr.u64 d25,d17,#34 - vsli.64 d24,d17,#36 + vsli.64 d24,d17,#36 vadd.i64 d27,d26 vshr.u64 d26,d17,#39 vadd.i64 d28,d15 - vsli.64 d25,d17,#30 - veor d30,d17,d18 - vsli.64 d26,d17,#25 - veor d16,d24,d25 + vsli.64 d25,d17,#30 + veor d30,d17,d18 + vsli.64 d26,d17,#25 + veor d16,d24,d25 vadd.i64 d27,d28 - vbsl d30,d19,d18 @ Maj(a,b,c) - veor d16,d26 @ Sigma0(a) + vbsl d30,d19,d18 @ Maj(a,b,c) + veor d16,d26 @ Sigma0(a) vadd.i64 d20,d27 vadd.i64 d30,d27 @ vadd.i64 d16,d30 - mov r12,#4 + mov r12,#4 .L16_79_neon: - subs r12,#1 + subs r12,#1 vshr.u64 q12,q7,#19 vshr.u64 q13,q7,#61 - vadd.i64 d16,d30 @ h+=Maj from the past + vadd.i64 d16,d30 @ h+=Maj from the past vshr.u64 q15,q7,#6 - vsli.64 q12,q7,#45 - vext.8 q14,q0,q1,#8 @ X[i+1] - vsli.64 q13,q7,#3 - veor q15,q12 + vsli.64 q12,q7,#45 + vext.8 q14,q0,q1,#8 @ X[i+1] + vsli.64 q13,q7,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q0,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q4,q5,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q4,q5,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d20,#14 @ from NEON_00_15 vadd.i64 q0,q14 vshr.u64 d25,d20,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d20,#41 @ from NEON_00_15 vadd.i64 q0,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d20,#50 - vsli.64 d25,d20,#46 - vmov d29,d20 - vsli.64 d26,d20,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d20,#50 + vsli.64 d25,d20,#46 + vmov d29,d20 + vsli.64 d26,d20,#23 #if 16<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d21,d22 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d21,d22 @ Ch(e,f,g) vshr.u64 d24,d16,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d23 vshr.u64 d25,d16,#34 - vsli.64 d24,d16,#36 + vsli.64 d24,d16,#36 vadd.i64 d27,d26 vshr.u64 d26,d16,#39 vadd.i64 d28,d0 - vsli.64 d25,d16,#30 - veor d30,d16,d17 - vsli.64 d26,d16,#25 - veor d23,d24,d25 + vsli.64 d25,d16,#30 + veor d30,d16,d17 + vsli.64 d26,d16,#25 + veor d23,d24,d25 vadd.i64 d27,d28 - vbsl d30,d18,d17 @ Maj(a,b,c) - veor d23,d26 @ Sigma0(a) + vbsl d30,d18,d17 @ Maj(a,b,c) + veor d23,d26 @ Sigma0(a) vadd.i64 d19,d27 vadd.i64 d30,d27 @ vadd.i64 d23,d30 vshr.u64 d24,d19,#14 @ 17 #if 17<16 - vld1.64 {d1},[r1]! @ handles unaligned + vld1.64 {d1},[r1]! @ handles unaligned #endif vshr.u64 d25,d19,#18 #if 17>0 - vadd.i64 d23,d30 @ h+=Maj from the past + vadd.i64 d23,d30 @ h+=Maj from the past #endif vshr.u64 d26,d19,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d19,#50 - vsli.64 d25,d19,#46 - vmov d29,d19 - vsli.64 d26,d19,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d19,#50 + vsli.64 d25,d19,#46 + vmov d29,d19 + vsli.64 d26,d19,#23 #if 17<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d20,d21 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d20,d21 @ Ch(e,f,g) vshr.u64 d24,d23,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d22 vshr.u64 d25,d23,#34 - vsli.64 d24,d23,#36 + vsli.64 d24,d23,#36 vadd.i64 d27,d26 vshr.u64 d26,d23,#39 vadd.i64 d28,d1 - vsli.64 d25,d23,#30 - veor d30,d23,d16 - vsli.64 d26,d23,#25 - veor d22,d24,d25 + vsli.64 d25,d23,#30 + veor d30,d23,d16 + vsli.64 d26,d23,#25 + veor d22,d24,d25 vadd.i64 d27,d28 - vbsl d30,d17,d16 @ Maj(a,b,c) - veor d22,d26 @ Sigma0(a) + vbsl d30,d17,d16 @ Maj(a,b,c) + veor d22,d26 @ Sigma0(a) vadd.i64 d18,d27 vadd.i64 d30,d27 @ vadd.i64 d22,d30 vshr.u64 q12,q0,#19 vshr.u64 q13,q0,#61 - vadd.i64 d22,d30 @ h+=Maj from the past + vadd.i64 d22,d30 @ h+=Maj from the past vshr.u64 q15,q0,#6 - vsli.64 q12,q0,#45 - vext.8 q14,q1,q2,#8 @ X[i+1] - vsli.64 q13,q0,#3 - veor q15,q12 + vsli.64 q12,q0,#45 + vext.8 q14,q1,q2,#8 @ X[i+1] + vsli.64 q13,q0,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q1,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q5,q6,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q5,q6,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d18,#14 @ from NEON_00_15 vadd.i64 q1,q14 vshr.u64 d25,d18,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d18,#41 @ from NEON_00_15 vadd.i64 q1,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d18,#50 - vsli.64 d25,d18,#46 - vmov d29,d18 - vsli.64 d26,d18,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d18,#50 + vsli.64 d25,d18,#46 + vmov d29,d18 + vsli.64 d26,d18,#23 #if 18<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d19,d20 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d19,d20 @ Ch(e,f,g) vshr.u64 d24,d22,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d21 vshr.u64 d25,d22,#34 - vsli.64 d24,d22,#36 + vsli.64 d24,d22,#36 vadd.i64 d27,d26 vshr.u64 d26,d22,#39 vadd.i64 d28,d2 - vsli.64 d25,d22,#30 - veor d30,d22,d23 - vsli.64 d26,d22,#25 - veor d21,d24,d25 + vsli.64 d25,d22,#30 + veor d30,d22,d23 + vsli.64 d26,d22,#25 + veor d21,d24,d25 vadd.i64 d27,d28 - vbsl d30,d16,d23 @ Maj(a,b,c) - veor d21,d26 @ Sigma0(a) + vbsl d30,d16,d23 @ Maj(a,b,c) + veor d21,d26 @ Sigma0(a) vadd.i64 d17,d27 vadd.i64 d30,d27 @ vadd.i64 d21,d30 vshr.u64 d24,d17,#14 @ 19 #if 19<16 - vld1.64 {d3},[r1]! @ handles unaligned + vld1.64 {d3},[r1]! @ handles unaligned #endif vshr.u64 d25,d17,#18 #if 19>0 - vadd.i64 d21,d30 @ h+=Maj from the past + vadd.i64 d21,d30 @ h+=Maj from the past #endif vshr.u64 d26,d17,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d17,#50 - vsli.64 d25,d17,#46 - vmov d29,d17 - vsli.64 d26,d17,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d17,#50 + vsli.64 d25,d17,#46 + vmov d29,d17 + vsli.64 d26,d17,#23 #if 19<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d18,d19 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d18,d19 @ Ch(e,f,g) vshr.u64 d24,d21,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d20 vshr.u64 d25,d21,#34 - vsli.64 d24,d21,#36 + vsli.64 d24,d21,#36 vadd.i64 d27,d26 vshr.u64 d26,d21,#39 vadd.i64 d28,d3 - vsli.64 d25,d21,#30 - veor d30,d21,d22 - vsli.64 d26,d21,#25 - veor d20,d24,d25 + vsli.64 d25,d21,#30 + veor d30,d21,d22 + vsli.64 d26,d21,#25 + veor d20,d24,d25 vadd.i64 d27,d28 - vbsl d30,d23,d22 @ Maj(a,b,c) - veor d20,d26 @ Sigma0(a) + vbsl d30,d23,d22 @ Maj(a,b,c) + veor d20,d26 @ Sigma0(a) vadd.i64 d16,d27 vadd.i64 d30,d27 @ vadd.i64 d20,d30 vshr.u64 q12,q1,#19 vshr.u64 q13,q1,#61 - vadd.i64 d20,d30 @ h+=Maj from the past + vadd.i64 d20,d30 @ h+=Maj from the past vshr.u64 q15,q1,#6 - vsli.64 q12,q1,#45 - vext.8 q14,q2,q3,#8 @ X[i+1] - vsli.64 q13,q1,#3 - veor q15,q12 + vsli.64 q12,q1,#45 + vext.8 q14,q2,q3,#8 @ X[i+1] + vsli.64 q13,q1,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q2,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q6,q7,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q6,q7,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d16,#14 @ from NEON_00_15 vadd.i64 q2,q14 vshr.u64 d25,d16,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d16,#41 @ from NEON_00_15 vadd.i64 q2,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d16,#50 - vsli.64 d25,d16,#46 - vmov d29,d16 - vsli.64 d26,d16,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d16,#50 + vsli.64 d25,d16,#46 + vmov d29,d16 + vsli.64 d26,d16,#23 #if 20<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d17,d18 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d17,d18 @ Ch(e,f,g) vshr.u64 d24,d20,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d19 vshr.u64 d25,d20,#34 - vsli.64 d24,d20,#36 + vsli.64 d24,d20,#36 vadd.i64 d27,d26 vshr.u64 d26,d20,#39 vadd.i64 d28,d4 - vsli.64 d25,d20,#30 - veor d30,d20,d21 - vsli.64 d26,d20,#25 - veor d19,d24,d25 + vsli.64 d25,d20,#30 + veor d30,d20,d21 + vsli.64 d26,d20,#25 + veor d19,d24,d25 vadd.i64 d27,d28 - vbsl d30,d22,d21 @ Maj(a,b,c) - veor d19,d26 @ Sigma0(a) + vbsl d30,d22,d21 @ Maj(a,b,c) + veor d19,d26 @ Sigma0(a) vadd.i64 d23,d27 vadd.i64 d30,d27 @ vadd.i64 d19,d30 vshr.u64 d24,d23,#14 @ 21 #if 21<16 - vld1.64 {d5},[r1]! @ handles unaligned + vld1.64 {d5},[r1]! @ handles unaligned #endif vshr.u64 d25,d23,#18 #if 21>0 - vadd.i64 d19,d30 @ h+=Maj from the past + vadd.i64 d19,d30 @ h+=Maj from the past #endif vshr.u64 d26,d23,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d23,#50 - vsli.64 d25,d23,#46 - vmov d29,d23 - vsli.64 d26,d23,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d23,#50 + vsli.64 d25,d23,#46 + vmov d29,d23 + vsli.64 d26,d23,#23 #if 21<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d16,d17 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d16,d17 @ Ch(e,f,g) vshr.u64 d24,d19,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d18 vshr.u64 d25,d19,#34 - vsli.64 d24,d19,#36 + vsli.64 d24,d19,#36 vadd.i64 d27,d26 vshr.u64 d26,d19,#39 vadd.i64 d28,d5 - vsli.64 d25,d19,#30 - veor d30,d19,d20 - vsli.64 d26,d19,#25 - veor d18,d24,d25 + vsli.64 d25,d19,#30 + veor d30,d19,d20 + vsli.64 d26,d19,#25 + veor d18,d24,d25 vadd.i64 d27,d28 - vbsl d30,d21,d20 @ Maj(a,b,c) - veor d18,d26 @ Sigma0(a) + vbsl d30,d21,d20 @ Maj(a,b,c) + veor d18,d26 @ Sigma0(a) vadd.i64 d22,d27 vadd.i64 d30,d27 @ vadd.i64 d18,d30 vshr.u64 q12,q2,#19 vshr.u64 q13,q2,#61 - vadd.i64 d18,d30 @ h+=Maj from the past + vadd.i64 d18,d30 @ h+=Maj from the past vshr.u64 q15,q2,#6 - vsli.64 q12,q2,#45 - vext.8 q14,q3,q4,#8 @ X[i+1] - vsli.64 q13,q2,#3 - veor q15,q12 + vsli.64 q12,q2,#45 + vext.8 q14,q3,q4,#8 @ X[i+1] + vsli.64 q13,q2,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q3,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q7,q0,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q7,q0,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d22,#14 @ from NEON_00_15 vadd.i64 q3,q14 vshr.u64 d25,d22,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d22,#41 @ from NEON_00_15 vadd.i64 q3,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d22,#50 - vsli.64 d25,d22,#46 - vmov d29,d22 - vsli.64 d26,d22,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d22,#50 + vsli.64 d25,d22,#46 + vmov d29,d22 + vsli.64 d26,d22,#23 #if 22<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d23,d16 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d23,d16 @ Ch(e,f,g) vshr.u64 d24,d18,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d17 vshr.u64 d25,d18,#34 - vsli.64 d24,d18,#36 + vsli.64 d24,d18,#36 vadd.i64 d27,d26 vshr.u64 d26,d18,#39 vadd.i64 d28,d6 - vsli.64 d25,d18,#30 - veor d30,d18,d19 - vsli.64 d26,d18,#25 - veor d17,d24,d25 + vsli.64 d25,d18,#30 + veor d30,d18,d19 + vsli.64 d26,d18,#25 + veor d17,d24,d25 vadd.i64 d27,d28 - vbsl d30,d20,d19 @ Maj(a,b,c) - veor d17,d26 @ Sigma0(a) + vbsl d30,d20,d19 @ Maj(a,b,c) + veor d17,d26 @ Sigma0(a) vadd.i64 d21,d27 vadd.i64 d30,d27 @ vadd.i64 d17,d30 vshr.u64 d24,d21,#14 @ 23 #if 23<16 - vld1.64 {d7},[r1]! @ handles unaligned + vld1.64 {d7},[r1]! @ handles unaligned #endif vshr.u64 d25,d21,#18 #if 23>0 - vadd.i64 d17,d30 @ h+=Maj from the past + vadd.i64 d17,d30 @ h+=Maj from the past #endif vshr.u64 d26,d21,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d21,#50 - vsli.64 d25,d21,#46 - vmov d29,d21 - vsli.64 d26,d21,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d21,#50 + vsli.64 d25,d21,#46 + vmov d29,d21 + vsli.64 d26,d21,#23 #if 23<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d22,d23 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d22,d23 @ Ch(e,f,g) vshr.u64 d24,d17,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d16 vshr.u64 d25,d17,#34 - vsli.64 d24,d17,#36 + vsli.64 d24,d17,#36 vadd.i64 d27,d26 vshr.u64 d26,d17,#39 vadd.i64 d28,d7 - vsli.64 d25,d17,#30 - veor d30,d17,d18 - vsli.64 d26,d17,#25 - veor d16,d24,d25 + vsli.64 d25,d17,#30 + veor d30,d17,d18 + vsli.64 d26,d17,#25 + veor d16,d24,d25 vadd.i64 d27,d28 - vbsl d30,d19,d18 @ Maj(a,b,c) - veor d16,d26 @ Sigma0(a) + vbsl d30,d19,d18 @ Maj(a,b,c) + veor d16,d26 @ Sigma0(a) vadd.i64 d20,d27 vadd.i64 d30,d27 @ vadd.i64 d16,d30 vshr.u64 q12,q3,#19 vshr.u64 q13,q3,#61 - vadd.i64 d16,d30 @ h+=Maj from the past + vadd.i64 d16,d30 @ h+=Maj from the past vshr.u64 q15,q3,#6 - vsli.64 q12,q3,#45 - vext.8 q14,q4,q5,#8 @ X[i+1] - vsli.64 q13,q3,#3 - veor q15,q12 + vsli.64 q12,q3,#45 + vext.8 q14,q4,q5,#8 @ X[i+1] + vsli.64 q13,q3,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q4,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q0,q1,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q0,q1,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d20,#14 @ from NEON_00_15 vadd.i64 q4,q14 vshr.u64 d25,d20,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d20,#41 @ from NEON_00_15 vadd.i64 q4,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d20,#50 - vsli.64 d25,d20,#46 - vmov d29,d20 - vsli.64 d26,d20,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d20,#50 + vsli.64 d25,d20,#46 + vmov d29,d20 + vsli.64 d26,d20,#23 #if 24<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d21,d22 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d21,d22 @ Ch(e,f,g) vshr.u64 d24,d16,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d23 vshr.u64 d25,d16,#34 - vsli.64 d24,d16,#36 + vsli.64 d24,d16,#36 vadd.i64 d27,d26 vshr.u64 d26,d16,#39 vadd.i64 d28,d8 - vsli.64 d25,d16,#30 - veor d30,d16,d17 - vsli.64 d26,d16,#25 - veor d23,d24,d25 + vsli.64 d25,d16,#30 + veor d30,d16,d17 + vsli.64 d26,d16,#25 + veor d23,d24,d25 vadd.i64 d27,d28 - vbsl d30,d18,d17 @ Maj(a,b,c) - veor d23,d26 @ Sigma0(a) + vbsl d30,d18,d17 @ Maj(a,b,c) + veor d23,d26 @ Sigma0(a) vadd.i64 d19,d27 vadd.i64 d30,d27 @ vadd.i64 d23,d30 vshr.u64 d24,d19,#14 @ 25 #if 25<16 - vld1.64 {d9},[r1]! @ handles unaligned + vld1.64 {d9},[r1]! @ handles unaligned #endif vshr.u64 d25,d19,#18 #if 25>0 - vadd.i64 d23,d30 @ h+=Maj from the past + vadd.i64 d23,d30 @ h+=Maj from the past #endif vshr.u64 d26,d19,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d19,#50 - vsli.64 d25,d19,#46 - vmov d29,d19 - vsli.64 d26,d19,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d19,#50 + vsli.64 d25,d19,#46 + vmov d29,d19 + vsli.64 d26,d19,#23 #if 25<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d20,d21 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d20,d21 @ Ch(e,f,g) vshr.u64 d24,d23,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d22 vshr.u64 d25,d23,#34 - vsli.64 d24,d23,#36 + vsli.64 d24,d23,#36 vadd.i64 d27,d26 vshr.u64 d26,d23,#39 vadd.i64 d28,d9 - vsli.64 d25,d23,#30 - veor d30,d23,d16 - vsli.64 d26,d23,#25 - veor d22,d24,d25 + vsli.64 d25,d23,#30 + veor d30,d23,d16 + vsli.64 d26,d23,#25 + veor d22,d24,d25 vadd.i64 d27,d28 - vbsl d30,d17,d16 @ Maj(a,b,c) - veor d22,d26 @ Sigma0(a) + vbsl d30,d17,d16 @ Maj(a,b,c) + veor d22,d26 @ Sigma0(a) vadd.i64 d18,d27 vadd.i64 d30,d27 @ vadd.i64 d22,d30 vshr.u64 q12,q4,#19 vshr.u64 q13,q4,#61 - vadd.i64 d22,d30 @ h+=Maj from the past + vadd.i64 d22,d30 @ h+=Maj from the past vshr.u64 q15,q4,#6 - vsli.64 q12,q4,#45 - vext.8 q14,q5,q6,#8 @ X[i+1] - vsli.64 q13,q4,#3 - veor q15,q12 + vsli.64 q12,q4,#45 + vext.8 q14,q5,q6,#8 @ X[i+1] + vsli.64 q13,q4,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q5,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q1,q2,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q1,q2,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d18,#14 @ from NEON_00_15 vadd.i64 q5,q14 vshr.u64 d25,d18,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d18,#41 @ from NEON_00_15 vadd.i64 q5,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d18,#50 - vsli.64 d25,d18,#46 - vmov d29,d18 - vsli.64 d26,d18,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d18,#50 + vsli.64 d25,d18,#46 + vmov d29,d18 + vsli.64 d26,d18,#23 #if 26<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d19,d20 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d19,d20 @ Ch(e,f,g) vshr.u64 d24,d22,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d21 vshr.u64 d25,d22,#34 - vsli.64 d24,d22,#36 + vsli.64 d24,d22,#36 vadd.i64 d27,d26 vshr.u64 d26,d22,#39 vadd.i64 d28,d10 - vsli.64 d25,d22,#30 - veor d30,d22,d23 - vsli.64 d26,d22,#25 - veor d21,d24,d25 + vsli.64 d25,d22,#30 + veor d30,d22,d23 + vsli.64 d26,d22,#25 + veor d21,d24,d25 vadd.i64 d27,d28 - vbsl d30,d16,d23 @ Maj(a,b,c) - veor d21,d26 @ Sigma0(a) + vbsl d30,d16,d23 @ Maj(a,b,c) + veor d21,d26 @ Sigma0(a) vadd.i64 d17,d27 vadd.i64 d30,d27 @ vadd.i64 d21,d30 vshr.u64 d24,d17,#14 @ 27 #if 27<16 - vld1.64 {d11},[r1]! @ handles unaligned + vld1.64 {d11},[r1]! @ handles unaligned #endif vshr.u64 d25,d17,#18 #if 27>0 - vadd.i64 d21,d30 @ h+=Maj from the past + vadd.i64 d21,d30 @ h+=Maj from the past #endif vshr.u64 d26,d17,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d17,#50 - vsli.64 d25,d17,#46 - vmov d29,d17 - vsli.64 d26,d17,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d17,#50 + vsli.64 d25,d17,#46 + vmov d29,d17 + vsli.64 d26,d17,#23 #if 27<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d18,d19 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d18,d19 @ Ch(e,f,g) vshr.u64 d24,d21,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d20 vshr.u64 d25,d21,#34 - vsli.64 d24,d21,#36 + vsli.64 d24,d21,#36 vadd.i64 d27,d26 vshr.u64 d26,d21,#39 vadd.i64 d28,d11 - vsli.64 d25,d21,#30 - veor d30,d21,d22 - vsli.64 d26,d21,#25 - veor d20,d24,d25 + vsli.64 d25,d21,#30 + veor d30,d21,d22 + vsli.64 d26,d21,#25 + veor d20,d24,d25 vadd.i64 d27,d28 - vbsl d30,d23,d22 @ Maj(a,b,c) - veor d20,d26 @ Sigma0(a) + vbsl d30,d23,d22 @ Maj(a,b,c) + veor d20,d26 @ Sigma0(a) vadd.i64 d16,d27 vadd.i64 d30,d27 @ vadd.i64 d20,d30 vshr.u64 q12,q5,#19 vshr.u64 q13,q5,#61 - vadd.i64 d20,d30 @ h+=Maj from the past + vadd.i64 d20,d30 @ h+=Maj from the past vshr.u64 q15,q5,#6 - vsli.64 q12,q5,#45 - vext.8 q14,q6,q7,#8 @ X[i+1] - vsli.64 q13,q5,#3 - veor q15,q12 + vsli.64 q12,q5,#45 + vext.8 q14,q6,q7,#8 @ X[i+1] + vsli.64 q13,q5,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q6,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q2,q3,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q2,q3,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d16,#14 @ from NEON_00_15 vadd.i64 q6,q14 vshr.u64 d25,d16,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d16,#41 @ from NEON_00_15 vadd.i64 q6,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d16,#50 - vsli.64 d25,d16,#46 - vmov d29,d16 - vsli.64 d26,d16,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d16,#50 + vsli.64 d25,d16,#46 + vmov d29,d16 + vsli.64 d26,d16,#23 #if 28<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d17,d18 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d17,d18 @ Ch(e,f,g) vshr.u64 d24,d20,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d19 vshr.u64 d25,d20,#34 - vsli.64 d24,d20,#36 + vsli.64 d24,d20,#36 vadd.i64 d27,d26 vshr.u64 d26,d20,#39 vadd.i64 d28,d12 - vsli.64 d25,d20,#30 - veor d30,d20,d21 - vsli.64 d26,d20,#25 - veor d19,d24,d25 + vsli.64 d25,d20,#30 + veor d30,d20,d21 + vsli.64 d26,d20,#25 + veor d19,d24,d25 vadd.i64 d27,d28 - vbsl d30,d22,d21 @ Maj(a,b,c) - veor d19,d26 @ Sigma0(a) + vbsl d30,d22,d21 @ Maj(a,b,c) + veor d19,d26 @ Sigma0(a) vadd.i64 d23,d27 vadd.i64 d30,d27 @ vadd.i64 d19,d30 vshr.u64 d24,d23,#14 @ 29 #if 29<16 - vld1.64 {d13},[r1]! @ handles unaligned + vld1.64 {d13},[r1]! @ handles unaligned #endif vshr.u64 d25,d23,#18 #if 29>0 - vadd.i64 d19,d30 @ h+=Maj from the past + vadd.i64 d19,d30 @ h+=Maj from the past #endif vshr.u64 d26,d23,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d23,#50 - vsli.64 d25,d23,#46 - vmov d29,d23 - vsli.64 d26,d23,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d23,#50 + vsli.64 d25,d23,#46 + vmov d29,d23 + vsli.64 d26,d23,#23 #if 29<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d16,d17 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d16,d17 @ Ch(e,f,g) vshr.u64 d24,d19,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d18 vshr.u64 d25,d19,#34 - vsli.64 d24,d19,#36 + vsli.64 d24,d19,#36 vadd.i64 d27,d26 vshr.u64 d26,d19,#39 vadd.i64 d28,d13 - vsli.64 d25,d19,#30 - veor d30,d19,d20 - vsli.64 d26,d19,#25 - veor d18,d24,d25 + vsli.64 d25,d19,#30 + veor d30,d19,d20 + vsli.64 d26,d19,#25 + veor d18,d24,d25 vadd.i64 d27,d28 - vbsl d30,d21,d20 @ Maj(a,b,c) - veor d18,d26 @ Sigma0(a) + vbsl d30,d21,d20 @ Maj(a,b,c) + veor d18,d26 @ Sigma0(a) vadd.i64 d22,d27 vadd.i64 d30,d27 @ vadd.i64 d18,d30 vshr.u64 q12,q6,#19 vshr.u64 q13,q6,#61 - vadd.i64 d18,d30 @ h+=Maj from the past + vadd.i64 d18,d30 @ h+=Maj from the past vshr.u64 q15,q6,#6 - vsli.64 q12,q6,#45 - vext.8 q14,q7,q0,#8 @ X[i+1] - vsli.64 q13,q6,#3 - veor q15,q12 + vsli.64 q12,q6,#45 + vext.8 q14,q7,q0,#8 @ X[i+1] + vsli.64 q13,q6,#3 + veor q15,q12 vshr.u64 q12,q14,#1 - veor q15,q13 @ sigma1(X[i+14]) + veor q15,q13 @ sigma1(X[i+14]) vshr.u64 q13,q14,#8 vadd.i64 q7,q15 vshr.u64 q15,q14,#7 - vsli.64 q12,q14,#63 - vsli.64 q13,q14,#56 - vext.8 q14,q3,q4,#8 @ X[i+9] - veor q15,q12 + vsli.64 q12,q14,#63 + vsli.64 q13,q14,#56 + vext.8 q14,q3,q4,#8 @ X[i+9] + veor q15,q12 vshr.u64 d24,d22,#14 @ from NEON_00_15 vadd.i64 q7,q14 vshr.u64 d25,d22,#18 @ from NEON_00_15 - veor q15,q13 @ sigma0(X[i+1]) + veor q15,q13 @ sigma0(X[i+1]) vshr.u64 d26,d22,#41 @ from NEON_00_15 vadd.i64 q7,q15 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d22,#50 - vsli.64 d25,d22,#46 - vmov d29,d22 - vsli.64 d26,d22,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d22,#50 + vsli.64 d25,d22,#46 + vmov d29,d22 + vsli.64 d26,d22,#23 #if 30<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d23,d16 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d23,d16 @ Ch(e,f,g) vshr.u64 d24,d18,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d17 vshr.u64 d25,d18,#34 - vsli.64 d24,d18,#36 + vsli.64 d24,d18,#36 vadd.i64 d27,d26 vshr.u64 d26,d18,#39 vadd.i64 d28,d14 - vsli.64 d25,d18,#30 - veor d30,d18,d19 - vsli.64 d26,d18,#25 - veor d17,d24,d25 + vsli.64 d25,d18,#30 + veor d30,d18,d19 + vsli.64 d26,d18,#25 + veor d17,d24,d25 vadd.i64 d27,d28 - vbsl d30,d20,d19 @ Maj(a,b,c) - veor d17,d26 @ Sigma0(a) + vbsl d30,d20,d19 @ Maj(a,b,c) + veor d17,d26 @ Sigma0(a) vadd.i64 d21,d27 vadd.i64 d30,d27 @ vadd.i64 d17,d30 vshr.u64 d24,d21,#14 @ 31 #if 31<16 - vld1.64 {d15},[r1]! @ handles unaligned + vld1.64 {d15},[r1]! @ handles unaligned #endif vshr.u64 d25,d21,#18 #if 31>0 - vadd.i64 d17,d30 @ h+=Maj from the past + vadd.i64 d17,d30 @ h+=Maj from the past #endif vshr.u64 d26,d21,#41 - vld1.64 {d28},[r3,:64]! @ K[i++] - vsli.64 d24,d21,#50 - vsli.64 d25,d21,#46 - vmov d29,d21 - vsli.64 d26,d21,#23 + vld1.64 {d28},[r3,:64]! @ K[i++] + vsli.64 d24,d21,#50 + vsli.64 d25,d21,#46 + vmov d29,d21 + vsli.64 d26,d21,#23 #if 31<16 && defined(__ARMEL__) vrev64.8 , #endif - veor d25,d24 - vbsl d29,d22,d23 @ Ch(e,f,g) + veor d25,d24 + vbsl d29,d22,d23 @ Ch(e,f,g) vshr.u64 d24,d17,#28 - veor d26,d25 @ Sigma1(e) + veor d26,d25 @ Sigma1(e) vadd.i64 d27,d29,d16 vshr.u64 d25,d17,#34 - vsli.64 d24,d17,#36 + vsli.64 d24,d17,#36 vadd.i64 d27,d26 vshr.u64 d26,d17,#39 vadd.i64 d28,d15 - vsli.64 d25,d17,#30 - veor d30,d17,d18 - vsli.64 d26,d17,#25 - veor d16,d24,d25 + vsli.64 d25,d17,#30 + veor d30,d17,d18 + vsli.64 d26,d17,#25 + veor d16,d24,d25 vadd.i64 d27,d28 - vbsl d30,d19,d18 @ Maj(a,b,c) - veor d16,d26 @ Sigma0(a) + vbsl d30,d19,d18 @ Maj(a,b,c) + veor d16,d26 @ Sigma0(a) vadd.i64 d20,d27 vadd.i64 d30,d27 @ vadd.i64 d16,d30 - bne .L16_79_neon + bne .L16_79_neon - vadd.i64 d16,d30 @ h+=Maj from the past - vldmia r0,{d24,d25,d26,d27,d28,d29,d30,d31} @ load context to temp + vadd.i64 d16,d30 @ h+=Maj from the past + vldmia r0,{d24-d31} @ load context to temp vadd.i64 q8,q12 @ vectorized accumulate vadd.i64 q9,q13 vadd.i64 q10,q14 vadd.i64 q11,q15 - vstmia r0,{d16,d17,d18,d19,d20,d21,d22,d23} @ save context - teq r1,r2 - sub r3,#640 @ rewind K512 - bne .Loop_neon + vstmia r0,{d16-d23} @ save context + teq r1,r2 + sub r3,#640 @ rewind K512 + bne .Loop_neon VFP_ABI_POP bx lr @ .word 0xe12fff1e .size sha512_block_data_order_neon,.-sha512_block_data_order_neon #endif -.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 2 +.asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by " .align 2 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) .comm OPENSSL_armcap_P,4,4 diff --git a/third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S b/third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S index aec110d..5aee116 100644 --- a/third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S +++ b/third_party/boringssl/linux-x86/crypto/aes/aesni-x86.S @@ -23,10 +23,7 @@ aesni_encrypt: leal 16(%edx),%edx jnz .L000enc1_loop_1 .byte 102,15,56,221,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%eax) - pxor %xmm2,%xmm2 ret .size aesni_encrypt,.-.L_aesni_encrypt_begin .globl aesni_decrypt @@ -51,10 +48,7 @@ aesni_decrypt: leal 16(%edx),%edx jnz .L001dec1_loop_2 .byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%eax) - pxor %xmm2,%xmm2 ret .size aesni_decrypt,.-.L_aesni_decrypt_begin .hidden _aesni_encrypt2 @@ -275,15 +269,17 @@ _aesni_encrypt6: negl %ecx .byte 102,15,56,220,225 pxor %xmm0,%xmm7 - movups (%edx,%ecx,1),%xmm0 addl $16,%ecx - jmp .L008_aesni_encrypt6_inner +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups -16(%edx,%ecx,1),%xmm0 + jmp .L_aesni_encrypt6_enter .align 16 -.L009enc6_loop: +.L008enc6_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 -.L008_aesni_encrypt6_inner: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 @@ -297,7 +293,7 @@ _aesni_encrypt6: .byte 102,15,56,220,240 .byte 102,15,56,220,248 movups -16(%edx,%ecx,1),%xmm0 - jnz .L009enc6_loop + jnz .L008enc6_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -330,15 +326,17 @@ _aesni_decrypt6: negl %ecx .byte 102,15,56,222,225 pxor %xmm0,%xmm7 - movups (%edx,%ecx,1),%xmm0 addl $16,%ecx - jmp .L010_aesni_decrypt6_inner +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups -16(%edx,%ecx,1),%xmm0 + jmp .L_aesni_decrypt6_enter .align 16 -.L011dec6_loop: +.L009dec6_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 -.L010_aesni_decrypt6_inner: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 @@ -352,7 +350,7 @@ _aesni_decrypt6: .byte 102,15,56,222,240 .byte 102,15,56,222,248 movups -16(%edx,%ecx,1),%xmm0 - jnz .L011dec6_loop + jnz .L009dec6_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -383,14 +381,14 @@ aesni_ecb_encrypt: movl 32(%esp),%edx movl 36(%esp),%ebx andl $-16,%eax - jz .L012ecb_ret + jz .L010ecb_ret movl 240(%edx),%ecx testl %ebx,%ebx - jz .L013ecb_decrypt + jz .L011ecb_decrypt movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb .L014ecb_enc_tail + jb .L012ecb_enc_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -399,9 +397,9 @@ aesni_ecb_encrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp .L015ecb_enc_loop6_enter + jmp .L013ecb_enc_loop6_enter .align 16 -.L016ecb_enc_loop6: +.L014ecb_enc_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -416,12 +414,12 @@ aesni_ecb_encrypt: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -.L015ecb_enc_loop6_enter: +.L013ecb_enc_loop6_enter: call _aesni_encrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc .L016ecb_enc_loop6 + jnc .L014ecb_enc_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -430,18 +428,18 @@ aesni_ecb_encrypt: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz .L012ecb_ret -.L014ecb_enc_tail: + jz .L010ecb_ret +.L012ecb_enc_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb .L017ecb_enc_one + jb .L015ecb_enc_one movups 16(%esi),%xmm3 - je .L018ecb_enc_two + je .L016ecb_enc_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb .L019ecb_enc_three + jb .L017ecb_enc_three movups 48(%esi),%xmm5 - je .L020ecb_enc_four + je .L018ecb_enc_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call _aesni_encrypt6 @@ -450,49 +448,49 @@ aesni_ecb_encrypt: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L017ecb_enc_one: +.L015ecb_enc_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L021enc1_loop_3: +.L019enc1_loop_3: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L021enc1_loop_3 + jnz .L019enc1_loop_3 .byte 102,15,56,221,209 movups %xmm2,(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L018ecb_enc_two: +.L016ecb_enc_two: call _aesni_encrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L019ecb_enc_three: +.L017ecb_enc_three: call _aesni_encrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L020ecb_enc_four: +.L018ecb_enc_four: call _aesni_encrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L013ecb_decrypt: +.L011ecb_decrypt: movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb .L022ecb_dec_tail + jb .L020ecb_dec_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -501,9 +499,9 @@ aesni_ecb_encrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp .L023ecb_dec_loop6_enter + jmp .L021ecb_dec_loop6_enter .align 16 -.L024ecb_dec_loop6: +.L022ecb_dec_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -518,12 +516,12 @@ aesni_ecb_encrypt: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -.L023ecb_dec_loop6_enter: +.L021ecb_dec_loop6_enter: call _aesni_decrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc .L024ecb_dec_loop6 + jnc .L022ecb_dec_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -532,18 +530,18 @@ aesni_ecb_encrypt: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz .L012ecb_ret -.L022ecb_dec_tail: + jz .L010ecb_ret +.L020ecb_dec_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb .L025ecb_dec_one + jb .L023ecb_dec_one movups 16(%esi),%xmm3 - je .L026ecb_dec_two + je .L024ecb_dec_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb .L027ecb_dec_three + jb .L025ecb_dec_three movups 48(%esi),%xmm5 - je .L028ecb_dec_four + je .L026ecb_dec_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call _aesni_decrypt6 @@ -552,51 +550,43 @@ aesni_ecb_encrypt: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L025ecb_dec_one: +.L023ecb_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L029dec1_loop_4: +.L027dec1_loop_4: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L029dec1_loop_4 + jnz .L027dec1_loop_4 .byte 102,15,56,223,209 movups %xmm2,(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L026ecb_dec_two: +.L024ecb_dec_two: call _aesni_decrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L027ecb_dec_three: +.L025ecb_dec_three: call _aesni_decrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L012ecb_ret + jmp .L010ecb_ret .align 16 -.L028ecb_dec_four: +.L026ecb_dec_four: call _aesni_decrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) -.L012ecb_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 +.L010ecb_ret: popl %edi popl %esi popl %ebx @@ -644,7 +634,7 @@ aesni_ccm64_encrypt_blocks: leal 32(%edx,%ecx,1),%edx subl %ecx,%ebx .byte 102,15,56,0,253 -.L030ccm64_enc_outer: +.L028ccm64_enc_outer: movups (%ebp),%xmm0 movl %ebx,%ecx movups (%esi),%xmm6 @@ -653,7 +643,7 @@ aesni_ccm64_encrypt_blocks: xorps %xmm6,%xmm0 xorps %xmm0,%xmm3 movups 32(%ebp),%xmm0 -.L031ccm64_enc2_loop: +.L029ccm64_enc2_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 movups (%edx,%ecx,1),%xmm1 @@ -661,7 +651,7 @@ aesni_ccm64_encrypt_blocks: .byte 102,15,56,220,208 .byte 102,15,56,220,216 movups -16(%edx,%ecx,1),%xmm0 - jnz .L031ccm64_enc2_loop + jnz .L029ccm64_enc2_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 paddq 16(%esp),%xmm7 @@ -674,18 +664,10 @@ aesni_ccm64_encrypt_blocks: movups %xmm6,(%edi) .byte 102,15,56,0,213 leal 16(%edi),%edi - jnz .L030ccm64_enc_outer + jnz .L028ccm64_enc_outer movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -734,12 +716,12 @@ aesni_ccm64_decrypt_blocks: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L032enc1_loop_5: +.L030enc1_loop_5: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L032enc1_loop_5 + jnz .L030enc1_loop_5 .byte 102,15,56,221,209 shll $4,%ebx movl $16,%ecx @@ -749,16 +731,16 @@ aesni_ccm64_decrypt_blocks: subl %ebx,%ecx leal 32(%ebp,%ebx,1),%edx movl %ecx,%ebx - jmp .L033ccm64_dec_outer + jmp .L031ccm64_dec_outer .align 16 -.L033ccm64_dec_outer: +.L031ccm64_dec_outer: xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 movups %xmm6,(%edi) leal 16(%edi),%edi .byte 102,15,56,0,213 subl $1,%eax - jz .L034ccm64_dec_break + jz .L032ccm64_dec_break movups (%ebp),%xmm0 movl %ebx,%ecx movups 16(%ebp),%xmm1 @@ -766,7 +748,7 @@ aesni_ccm64_decrypt_blocks: xorps %xmm0,%xmm2 xorps %xmm6,%xmm3 movups 32(%ebp),%xmm0 -.L035ccm64_dec2_loop: +.L033ccm64_dec2_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 movups (%edx,%ecx,1),%xmm1 @@ -774,7 +756,7 @@ aesni_ccm64_decrypt_blocks: .byte 102,15,56,220,208 .byte 102,15,56,220,216 movups -16(%edx,%ecx,1),%xmm0 - jnz .L035ccm64_dec2_loop + jnz .L033ccm64_dec2_loop movups (%esi),%xmm6 paddq 16(%esp),%xmm7 .byte 102,15,56,220,209 @@ -782,9 +764,9 @@ aesni_ccm64_decrypt_blocks: .byte 102,15,56,221,208 .byte 102,15,56,221,216 leal 16(%esi),%esi - jmp .L033ccm64_dec_outer + jmp .L031ccm64_dec_outer .align 16 -.L034ccm64_dec_break: +.L032ccm64_dec_break: movl 240(%ebp),%ecx movl %ebp,%edx movups (%edx),%xmm0 @@ -792,24 +774,16 @@ aesni_ccm64_decrypt_blocks: xorps %xmm0,%xmm6 leal 32(%edx),%edx xorps %xmm6,%xmm3 -.L036enc1_loop_6: +.L034enc1_loop_6: .byte 102,15,56,220,217 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L036enc1_loop_6 + jnz .L034enc1_loop_6 .byte 102,15,56,221,217 movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -836,7 +810,7 @@ aesni_ctr32_encrypt_blocks: andl $-16,%esp movl %ebp,80(%esp) cmpl $1,%eax - je .L037ctr32_one_shortcut + je .L035ctr32_one_shortcut movdqu (%ebx),%xmm7 movl $202182159,(%esp) movl $134810123,4(%esp) @@ -874,7 +848,7 @@ aesni_ctr32_encrypt_blocks: pshufd $192,%xmm0,%xmm2 pshufd $128,%xmm0,%xmm3 cmpl $6,%eax - jb .L038ctr32_tail + jb .L036ctr32_tail pxor %xmm6,%xmm7 shll $4,%ecx movl $16,%ebx @@ -883,9 +857,9 @@ aesni_ctr32_encrypt_blocks: subl %ecx,%ebx leal 32(%edx,%ecx,1),%edx subl $6,%eax - jmp .L039ctr32_loop6 + jmp .L037ctr32_loop6 .align 16 -.L039ctr32_loop6: +.L037ctr32_loop6: pshufd $64,%xmm0,%xmm4 movdqa 32(%esp),%xmm0 pshufd $192,%xmm1,%xmm5 @@ -939,27 +913,27 @@ aesni_ctr32_encrypt_blocks: leal 96(%edi),%edi pshufd $128,%xmm0,%xmm3 subl $6,%eax - jnc .L039ctr32_loop6 + jnc .L037ctr32_loop6 addl $6,%eax - jz .L040ctr32_ret + jz .L038ctr32_ret movdqu (%ebp),%xmm7 movl %ebp,%edx pxor 32(%esp),%xmm7 movl 240(%ebp),%ecx -.L038ctr32_tail: +.L036ctr32_tail: por %xmm7,%xmm2 cmpl $2,%eax - jb .L041ctr32_one + jb .L039ctr32_one pshufd $64,%xmm0,%xmm4 por %xmm7,%xmm3 - je .L042ctr32_two + je .L040ctr32_two pshufd $192,%xmm1,%xmm5 por %xmm7,%xmm4 cmpl $4,%eax - jb .L043ctr32_three + jb .L041ctr32_three pshufd $128,%xmm1,%xmm6 por %xmm7,%xmm5 - je .L044ctr32_four + je .L042ctr32_four por %xmm7,%xmm6 call _aesni_encrypt6 movups (%esi),%xmm1 @@ -977,29 +951,29 @@ aesni_ctr32_encrypt_blocks: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L040ctr32_ret + jmp .L038ctr32_ret .align 16 -.L037ctr32_one_shortcut: +.L035ctr32_one_shortcut: movups (%ebx),%xmm2 movl 240(%edx),%ecx -.L041ctr32_one: +.L039ctr32_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L045enc1_loop_7: +.L043enc1_loop_7: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L045enc1_loop_7 + jnz .L043enc1_loop_7 .byte 102,15,56,221,209 movups (%esi),%xmm6 xorps %xmm2,%xmm6 movups %xmm6,(%edi) - jmp .L040ctr32_ret + jmp .L038ctr32_ret .align 16 -.L042ctr32_two: +.L040ctr32_two: call _aesni_encrypt2 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -1007,9 +981,9 @@ aesni_ctr32_encrypt_blocks: xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L040ctr32_ret + jmp .L038ctr32_ret .align 16 -.L043ctr32_three: +.L041ctr32_three: call _aesni_encrypt3 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -1020,9 +994,9 @@ aesni_ctr32_encrypt_blocks: xorps %xmm7,%xmm4 movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L040ctr32_ret + jmp .L038ctr32_ret .align 16 -.L044ctr32_four: +.L042ctr32_four: call _aesni_encrypt4 movups (%esi),%xmm6 movups 16(%esi),%xmm7 @@ -1036,18 +1010,7 @@ aesni_ctr32_encrypt_blocks: xorps %xmm0,%xmm5 movups %xmm4,32(%edi) movups %xmm5,48(%edi) -.L040ctr32_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - movdqa %xmm0,32(%esp) - pxor %xmm5,%xmm5 - movdqa %xmm0,48(%esp) - pxor %xmm6,%xmm6 - movdqa %xmm0,64(%esp) - pxor %xmm7,%xmm7 +.L038ctr32_ret: movl 80(%esp),%esp popl %edi popl %esi @@ -1073,12 +1036,12 @@ aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L046enc1_loop_8: +.L044enc1_loop_8: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L046enc1_loop_8 + jnz .L044enc1_loop_8 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1102,14 +1065,14 @@ aesni_xts_encrypt: movl %edx,%ebp movl %ecx,%ebx subl $96,%eax - jc .L047xts_enc_short + jc .L045xts_enc_short shll $4,%ecx movl $16,%ebx subl %ecx,%ebx leal 32(%edx,%ecx,1),%edx - jmp .L048xts_enc_loop6 + jmp .L046xts_enc_loop6 .align 16 -.L048xts_enc_loop6: +.L046xts_enc_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1198,23 +1161,23 @@ aesni_xts_encrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 subl $96,%eax - jnc .L048xts_enc_loop6 + jnc .L046xts_enc_loop6 movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -.L047xts_enc_short: +.L045xts_enc_short: addl $96,%eax - jz .L049xts_enc_done6x + jz .L047xts_enc_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb .L050xts_enc_one + jb .L048xts_enc_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je .L051xts_enc_two + je .L049xts_enc_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1223,7 +1186,7 @@ aesni_xts_encrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb .L052xts_enc_three + jb .L050xts_enc_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1233,7 +1196,7 @@ aesni_xts_encrypt: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je .L053xts_enc_four + je .L051xts_enc_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1265,9 +1228,9 @@ aesni_xts_encrypt: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp .L054xts_enc_done + jmp .L052xts_enc_done .align 16 -.L050xts_enc_one: +.L048xts_enc_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1275,20 +1238,20 @@ aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L055enc1_loop_9: +.L053enc1_loop_9: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L055enc1_loop_9 + jnz .L053enc1_loop_9 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp .L054xts_enc_done + jmp .L052xts_enc_done .align 16 -.L051xts_enc_two: +.L049xts_enc_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1302,9 +1265,9 @@ aesni_xts_encrypt: movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L054xts_enc_done + jmp .L052xts_enc_done .align 16 -.L052xts_enc_three: +.L050xts_enc_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1322,9 +1285,9 @@ aesni_xts_encrypt: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp .L054xts_enc_done + jmp .L052xts_enc_done .align 16 -.L053xts_enc_four: +.L051xts_enc_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1346,28 +1309,28 @@ aesni_xts_encrypt: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L054xts_enc_done + jmp .L052xts_enc_done .align 16 -.L049xts_enc_done6x: +.L047xts_enc_done6x: movl 112(%esp),%eax andl $15,%eax - jz .L056xts_enc_ret + jz .L054xts_enc_ret movdqa %xmm1,%xmm5 movl %eax,112(%esp) - jmp .L057xts_enc_steal + jmp .L055xts_enc_steal .align 16 -.L054xts_enc_done: +.L052xts_enc_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz .L056xts_enc_ret + jz .L054xts_enc_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm5 paddq %xmm1,%xmm1 pand 96(%esp),%xmm5 pxor %xmm1,%xmm5 -.L057xts_enc_steal: +.L055xts_enc_steal: movzbl (%esi),%ecx movzbl -16(%edi),%edx leal 1(%esi),%esi @@ -1375,7 +1338,7 @@ aesni_xts_encrypt: movb %dl,(%edi) leal 1(%edi),%edi subl $1,%eax - jnz .L057xts_enc_steal + jnz .L055xts_enc_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1385,30 +1348,16 @@ aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L058enc1_loop_10: +.L056enc1_loop_10: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L058enc1_loop_10 + jnz .L056enc1_loop_10 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,-16(%edi) -.L056xts_enc_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - movdqa %xmm0,(%esp) - pxor %xmm3,%xmm3 - movdqa %xmm0,16(%esp) - pxor %xmm4,%xmm4 - movdqa %xmm0,32(%esp) - pxor %xmm5,%xmm5 - movdqa %xmm0,48(%esp) - pxor %xmm6,%xmm6 - movdqa %xmm0,64(%esp) - pxor %xmm7,%xmm7 - movdqa %xmm0,80(%esp) +.L054xts_enc_ret: movl 116(%esp),%esp popl %edi popl %esi @@ -1434,12 +1383,12 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L059enc1_loop_11: +.L057enc1_loop_11: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L059enc1_loop_11 + jnz .L057enc1_loop_11 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1468,14 +1417,14 @@ aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 andl $-16,%eax subl $96,%eax - jc .L060xts_dec_short + jc .L058xts_dec_short shll $4,%ecx movl $16,%ebx subl %ecx,%ebx leal 32(%edx,%ecx,1),%edx - jmp .L061xts_dec_loop6 + jmp .L059xts_dec_loop6 .align 16 -.L061xts_dec_loop6: +.L059xts_dec_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1564,23 +1513,23 @@ aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 subl $96,%eax - jnc .L061xts_dec_loop6 + jnc .L059xts_dec_loop6 movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -.L060xts_dec_short: +.L058xts_dec_short: addl $96,%eax - jz .L062xts_dec_done6x + jz .L060xts_dec_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb .L063xts_dec_one + jb .L061xts_dec_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je .L064xts_dec_two + je .L062xts_dec_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1589,7 +1538,7 @@ aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb .L065xts_dec_three + jb .L063xts_dec_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1599,7 +1548,7 @@ aesni_xts_decrypt: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je .L066xts_dec_four + je .L064xts_dec_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1631,9 +1580,9 @@ aesni_xts_decrypt: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp .L067xts_dec_done + jmp .L065xts_dec_done .align 16 -.L063xts_dec_one: +.L061xts_dec_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1641,20 +1590,20 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L068dec1_loop_12: +.L066dec1_loop_12: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L068dec1_loop_12 + jnz .L066dec1_loop_12 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp .L067xts_dec_done + jmp .L065xts_dec_done .align 16 -.L064xts_dec_two: +.L062xts_dec_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1668,9 +1617,9 @@ aesni_xts_decrypt: movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L067xts_dec_done + jmp .L065xts_dec_done .align 16 -.L065xts_dec_three: +.L063xts_dec_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1688,9 +1637,9 @@ aesni_xts_decrypt: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp .L067xts_dec_done + jmp .L065xts_dec_done .align 16 -.L066xts_dec_four: +.L064xts_dec_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1712,20 +1661,20 @@ aesni_xts_decrypt: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L067xts_dec_done + jmp .L065xts_dec_done .align 16 -.L062xts_dec_done6x: +.L060xts_dec_done6x: movl 112(%esp),%eax andl $15,%eax - jz .L069xts_dec_ret + jz .L067xts_dec_ret movl %eax,112(%esp) - jmp .L070xts_dec_only_one_more + jmp .L068xts_dec_only_one_more .align 16 -.L067xts_dec_done: +.L065xts_dec_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz .L069xts_dec_ret + jz .L067xts_dec_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm2 @@ -1735,7 +1684,7 @@ aesni_xts_decrypt: pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 -.L070xts_dec_only_one_more: +.L068xts_dec_only_one_more: pshufd $19,%xmm0,%xmm5 movdqa %xmm1,%xmm6 paddq %xmm1,%xmm1 @@ -1749,16 +1698,16 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L071dec1_loop_13: +.L069dec1_loop_13: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L071dec1_loop_13 + jnz .L069dec1_loop_13 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) -.L072xts_dec_steal: +.L070xts_dec_steal: movzbl 16(%esi),%ecx movzbl (%edi),%edx leal 1(%esi),%esi @@ -1766,7 +1715,7 @@ aesni_xts_decrypt: movb %dl,16(%edi) leal 1(%edi),%edi subl $1,%eax - jnz .L072xts_dec_steal + jnz .L070xts_dec_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1776,30 +1725,16 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L073dec1_loop_14: +.L071dec1_loop_14: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L073dec1_loop_14 + jnz .L071dec1_loop_14 .byte 102,15,56,223,209 xorps %xmm6,%xmm2 movups %xmm2,(%edi) -.L069xts_dec_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - movdqa %xmm0,(%esp) - pxor %xmm3,%xmm3 - movdqa %xmm0,16(%esp) - pxor %xmm4,%xmm4 - movdqa %xmm0,32(%esp) - pxor %xmm5,%xmm5 - movdqa %xmm0,48(%esp) - pxor %xmm6,%xmm6 - movdqa %xmm0,64(%esp) - pxor %xmm7,%xmm7 - movdqa %xmm0,80(%esp) +.L067xts_dec_ret: movl 116(%esp),%esp popl %edi popl %esi @@ -1826,7 +1761,7 @@ aesni_cbc_encrypt: movl 32(%esp),%edx movl 36(%esp),%ebp testl %eax,%eax - jz .L074cbc_abort + jz .L072cbc_abort cmpl $0,40(%esp) xchgl %esp,%ebx movups (%ebp),%xmm7 @@ -1834,14 +1769,14 @@ aesni_cbc_encrypt: movl %edx,%ebp movl %ebx,16(%esp) movl %ecx,%ebx - je .L075cbc_decrypt + je .L073cbc_decrypt movaps %xmm7,%xmm2 cmpl $16,%eax - jb .L076cbc_enc_tail + jb .L074cbc_enc_tail subl $16,%eax - jmp .L077cbc_enc_loop + jmp .L075cbc_enc_loop .align 16 -.L077cbc_enc_loop: +.L075cbc_enc_loop: movups (%esi),%xmm7 leal 16(%esi),%esi movups (%edx),%xmm0 @@ -1849,25 +1784,24 @@ aesni_cbc_encrypt: xorps %xmm0,%xmm7 leal 32(%edx),%edx xorps %xmm7,%xmm2 -.L078enc1_loop_15: +.L076enc1_loop_15: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L078enc1_loop_15 + jnz .L076enc1_loop_15 .byte 102,15,56,221,209 movl %ebx,%ecx movl %ebp,%edx movups %xmm2,(%edi) leal 16(%edi),%edi subl $16,%eax - jnc .L077cbc_enc_loop + jnc .L075cbc_enc_loop addl $16,%eax - jnz .L076cbc_enc_tail + jnz .L074cbc_enc_tail movaps %xmm2,%xmm7 - pxor %xmm2,%xmm2 - jmp .L079cbc_ret -.L076cbc_enc_tail: + jmp .L077cbc_ret +.L074cbc_enc_tail: movl %eax,%ecx .long 2767451785 movl $16,%ecx @@ -1878,20 +1812,20 @@ aesni_cbc_encrypt: movl %ebx,%ecx movl %edi,%esi movl %ebp,%edx - jmp .L077cbc_enc_loop + jmp .L075cbc_enc_loop .align 16 -.L075cbc_decrypt: +.L073cbc_decrypt: cmpl $80,%eax - jbe .L080cbc_dec_tail + jbe .L078cbc_dec_tail movaps %xmm7,(%esp) subl $80,%eax - jmp .L081cbc_dec_loop6_enter + jmp .L079cbc_dec_loop6_enter .align 16 -.L082cbc_dec_loop6: +.L080cbc_dec_loop6: movaps %xmm0,(%esp) movups %xmm7,(%edi) leal 16(%edi),%edi -.L081cbc_dec_loop6_enter: +.L079cbc_dec_loop6_enter: movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -1921,28 +1855,28 @@ aesni_cbc_encrypt: movups %xmm6,64(%edi) leal 80(%edi),%edi subl $96,%eax - ja .L082cbc_dec_loop6 + ja .L080cbc_dec_loop6 movaps %xmm7,%xmm2 movaps %xmm0,%xmm7 addl $80,%eax - jle .L083cbc_dec_clear_tail_collected + jle .L081cbc_dec_tail_collected movups %xmm2,(%edi) leal 16(%edi),%edi -.L080cbc_dec_tail: +.L078cbc_dec_tail: movups (%esi),%xmm2 movaps %xmm2,%xmm6 cmpl $16,%eax - jbe .L084cbc_dec_one + jbe .L082cbc_dec_one movups 16(%esi),%xmm3 movaps %xmm3,%xmm5 cmpl $32,%eax - jbe .L085cbc_dec_two + jbe .L083cbc_dec_two movups 32(%esi),%xmm4 cmpl $48,%eax - jbe .L086cbc_dec_three + jbe .L084cbc_dec_three movups 48(%esi),%xmm5 cmpl $64,%eax - jbe .L087cbc_dec_four + jbe .L085cbc_dec_four movups 64(%esi),%xmm6 movaps %xmm7,(%esp) movups (%esi),%xmm2 @@ -1960,62 +1894,55 @@ aesni_cbc_encrypt: xorps %xmm0,%xmm6 movups %xmm2,(%edi) movups %xmm3,16(%edi) - pxor %xmm3,%xmm3 movups %xmm4,32(%edi) - pxor %xmm4,%xmm4 movups %xmm5,48(%edi) - pxor %xmm5,%xmm5 leal 64(%edi),%edi movaps %xmm6,%xmm2 - pxor %xmm6,%xmm6 subl $80,%eax - jmp .L088cbc_dec_tail_collected + jmp .L081cbc_dec_tail_collected .align 16 -.L084cbc_dec_one: +.L082cbc_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L089dec1_loop_16: +.L086dec1_loop_16: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L089dec1_loop_16 + jnz .L086dec1_loop_16 .byte 102,15,56,223,209 xorps %xmm7,%xmm2 movaps %xmm6,%xmm7 subl $16,%eax - jmp .L088cbc_dec_tail_collected + jmp .L081cbc_dec_tail_collected .align 16 -.L085cbc_dec_two: +.L083cbc_dec_two: call _aesni_decrypt2 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movaps %xmm3,%xmm2 - pxor %xmm3,%xmm3 leal 16(%edi),%edi movaps %xmm5,%xmm7 subl $32,%eax - jmp .L088cbc_dec_tail_collected + jmp .L081cbc_dec_tail_collected .align 16 -.L086cbc_dec_three: +.L084cbc_dec_three: call _aesni_decrypt3 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 xorps %xmm5,%xmm4 movups %xmm2,(%edi) movaps %xmm4,%xmm2 - pxor %xmm4,%xmm4 movups %xmm3,16(%edi) - pxor %xmm3,%xmm3 leal 32(%edi),%edi movups 32(%esi),%xmm7 subl $48,%eax - jmp .L088cbc_dec_tail_collected + jmp .L081cbc_dec_tail_collected .align 16 -.L087cbc_dec_four: +.L085cbc_dec_four: call _aesni_decrypt4 movups 16(%esi),%xmm1 movups 32(%esi),%xmm0 @@ -2025,44 +1952,28 @@ aesni_cbc_encrypt: movups %xmm2,(%edi) xorps %xmm1,%xmm4 movups %xmm3,16(%edi) - pxor %xmm3,%xmm3 xorps %xmm0,%xmm5 movups %xmm4,32(%edi) - pxor %xmm4,%xmm4 leal 48(%edi),%edi movaps %xmm5,%xmm2 - pxor %xmm5,%xmm5 subl $64,%eax - jmp .L088cbc_dec_tail_collected -.align 16 -.L083cbc_dec_clear_tail_collected: - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 -.L088cbc_dec_tail_collected: +.L081cbc_dec_tail_collected: andl $15,%eax - jnz .L090cbc_dec_tail_partial + jnz .L087cbc_dec_tail_partial movups %xmm2,(%edi) - pxor %xmm0,%xmm0 - jmp .L079cbc_ret + jmp .L077cbc_ret .align 16 -.L090cbc_dec_tail_partial: +.L087cbc_dec_tail_partial: movaps %xmm2,(%esp) - pxor %xmm0,%xmm0 movl $16,%ecx movl %esp,%esi subl %eax,%ecx .long 2767451785 - movdqa %xmm2,(%esp) -.L079cbc_ret: +.L077cbc_ret: movl 16(%esp),%esp movl 36(%esp),%ebp - pxor %xmm2,%xmm2 - pxor %xmm1,%xmm1 movups %xmm7,(%ebp) - pxor %xmm7,%xmm7 -.L074cbc_abort: +.L072cbc_abort: popl %edi popl %esi popl %ebx @@ -2073,62 +1984,52 @@ aesni_cbc_encrypt: .type _aesni_set_encrypt_key,@function .align 16 _aesni_set_encrypt_key: - pushl %ebp - pushl %ebx testl %eax,%eax - jz .L091bad_pointer + jz .L088bad_pointer testl %edx,%edx - jz .L091bad_pointer - call .L092pic -.L092pic: - popl %ebx - leal .Lkey_const-.L092pic(%ebx),%ebx - leal OPENSSL_ia32cap_P-.Lkey_const(%ebx),%ebp + jz .L088bad_pointer movups (%eax),%xmm0 xorps %xmm4,%xmm4 - movl 4(%ebp),%ebp leal 16(%edx),%edx - andl $268437504,%ebp cmpl $256,%ecx - je .L09314rounds + je .L08914rounds cmpl $192,%ecx - je .L09412rounds + je .L09012rounds cmpl $128,%ecx - jne .L095bad_keybits + jne .L091bad_keybits .align 16 -.L09610rounds: - cmpl $268435456,%ebp - je .L09710rounds_alt +.L09210rounds: movl $9,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,200,1 - call .L098key_128_cold + call .L093key_128_cold .byte 102,15,58,223,200,2 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,4 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,8 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,16 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,32 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,64 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,128 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,27 - call .L099key_128 + call .L094key_128 .byte 102,15,58,223,200,54 - call .L099key_128 + call .L094key_128 movups %xmm0,(%edx) movl %ecx,80(%edx) - jmp .L100good_key + xorl %eax,%eax + ret .align 16 -.L099key_128: +.L094key_128: movups %xmm0,(%edx) leal 16(%edx),%edx -.L098key_128_cold: +.L093key_128_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2137,91 +2038,38 @@ _aesni_set_encrypt_key: xorps %xmm1,%xmm0 ret .align 16 -.L09710rounds_alt: - movdqa (%ebx),%xmm5 - movl $8,%ecx - movdqa 32(%ebx),%xmm4 - movdqa %xmm0,%xmm2 - movdqu %xmm0,-16(%edx) -.L101loop_key128: -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - leal 16(%edx),%edx - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - pxor %xmm2,%xmm0 - movdqu %xmm0,-16(%edx) - movdqa %xmm0,%xmm2 - decl %ecx - jnz .L101loop_key128 - movdqa 48(%ebx),%xmm4 -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - pxor %xmm2,%xmm0 - movdqu %xmm0,(%edx) - movdqa %xmm0,%xmm2 -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - pxor %xmm2,%xmm0 - movdqu %xmm0,16(%edx) - movl $9,%ecx - movl %ecx,96(%edx) - jmp .L100good_key -.align 16 -.L09412rounds: +.L09012rounds: movq 16(%eax),%xmm2 - cmpl $268435456,%ebp - je .L10212rounds_alt movl $11,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,202,1 - call .L103key_192a_cold + call .L095key_192a_cold .byte 102,15,58,223,202,2 - call .L104key_192b + call .L096key_192b .byte 102,15,58,223,202,4 - call .L105key_192a + call .L097key_192a .byte 102,15,58,223,202,8 - call .L104key_192b + call .L096key_192b .byte 102,15,58,223,202,16 - call .L105key_192a + call .L097key_192a .byte 102,15,58,223,202,32 - call .L104key_192b + call .L096key_192b .byte 102,15,58,223,202,64 - call .L105key_192a + call .L097key_192a .byte 102,15,58,223,202,128 - call .L104key_192b + call .L096key_192b movups %xmm0,(%edx) movl %ecx,48(%edx) - jmp .L100good_key + xorl %eax,%eax + ret .align 16 -.L105key_192a: +.L097key_192a: movups %xmm0,(%edx) leal 16(%edx),%edx .align 16 -.L103key_192a_cold: +.L095key_192a_cold: movaps %xmm2,%xmm5 -.L106key_192b_warm: +.L098key_192b_warm: shufps $16,%xmm0,%xmm4 movdqa %xmm2,%xmm3 xorps %xmm4,%xmm0 @@ -2235,90 +2083,56 @@ _aesni_set_encrypt_key: pxor %xmm3,%xmm2 ret .align 16 -.L104key_192b: +.L096key_192b: movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%edx) shufps $78,%xmm2,%xmm3 movups %xmm3,16(%edx) leal 32(%edx),%edx - jmp .L106key_192b_warm -.align 16 -.L10212rounds_alt: - movdqa 16(%ebx),%xmm5 - movdqa 32(%ebx),%xmm4 - movl $8,%ecx - movdqu %xmm0,-16(%edx) -.L107loop_key192: - movq %xmm2,(%edx) - movdqa %xmm2,%xmm1 -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - pslld $1,%xmm4 - leal 24(%edx),%edx - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - pshufd $255,%xmm0,%xmm3 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pxor %xmm2,%xmm0 - pxor %xmm3,%xmm2 - movdqu %xmm0,-16(%edx) - decl %ecx - jnz .L107loop_key192 - movl $11,%ecx - movl %ecx,32(%edx) - jmp .L100good_key + jmp .L098key_192b_warm .align 16 -.L09314rounds: +.L08914rounds: movups 16(%eax),%xmm2 - leal 16(%edx),%edx - cmpl $268435456,%ebp - je .L10814rounds_alt movl $13,%ecx + leal 16(%edx),%edx movups %xmm0,-32(%edx) movups %xmm2,-16(%edx) .byte 102,15,58,223,202,1 - call .L109key_256a_cold + call .L099key_256a_cold .byte 102,15,58,223,200,1 - call .L110key_256b + call .L100key_256b .byte 102,15,58,223,202,2 - call .L111key_256a + call .L101key_256a .byte 102,15,58,223,200,2 - call .L110key_256b + call .L100key_256b .byte 102,15,58,223,202,4 - call .L111key_256a + call .L101key_256a .byte 102,15,58,223,200,4 - call .L110key_256b + call .L100key_256b .byte 102,15,58,223,202,8 - call .L111key_256a + call .L101key_256a .byte 102,15,58,223,200,8 - call .L110key_256b + call .L100key_256b .byte 102,15,58,223,202,16 - call .L111key_256a + call .L101key_256a .byte 102,15,58,223,200,16 - call .L110key_256b + call .L100key_256b .byte 102,15,58,223,202,32 - call .L111key_256a + call .L101key_256a .byte 102,15,58,223,200,32 - call .L110key_256b + call .L100key_256b .byte 102,15,58,223,202,64 - call .L111key_256a + call .L101key_256a movups %xmm0,(%edx) movl %ecx,16(%edx) xorl %eax,%eax - jmp .L100good_key + ret .align 16 -.L111key_256a: +.L101key_256a: movups %xmm2,(%edx) leal 16(%edx),%edx -.L109key_256a_cold: +.L099key_256a_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2327,7 +2141,7 @@ _aesni_set_encrypt_key: xorps %xmm1,%xmm0 ret .align 16 -.L110key_256b: +.L100key_256b: movups %xmm0,(%edx) leal 16(%edx),%edx shufps $16,%xmm2,%xmm4 @@ -2337,70 +2151,13 @@ _aesni_set_encrypt_key: shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 ret -.align 16 -.L10814rounds_alt: - movdqa (%ebx),%xmm5 - movdqa 32(%ebx),%xmm4 - movl $7,%ecx - movdqu %xmm0,-32(%edx) - movdqa %xmm2,%xmm1 - movdqu %xmm2,-16(%edx) -.L112loop_key256: -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - pslld $1,%xmm4 - pxor %xmm2,%xmm0 - movdqu %xmm0,(%edx) - decl %ecx - jz .L113done_key256 - pshufd $255,%xmm0,%xmm2 - pxor %xmm3,%xmm3 -.byte 102,15,56,221,211 - movdqa %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm3,%xmm1 - pxor %xmm1,%xmm2 - movdqu %xmm2,16(%edx) - leal 32(%edx),%edx - movdqa %xmm2,%xmm1 - jmp .L112loop_key256 -.L113done_key256: - movl $13,%ecx - movl %ecx,16(%edx) -.L100good_key: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - xorl %eax,%eax - popl %ebx - popl %ebp - ret .align 4 -.L091bad_pointer: +.L088bad_pointer: movl $-1,%eax - popl %ebx - popl %ebp ret .align 4 -.L095bad_keybits: - pxor %xmm0,%xmm0 +.L091bad_keybits: movl $-2,%eax - popl %ebx - popl %ebp ret .size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key .globl aesni_set_encrypt_key @@ -2428,7 +2185,7 @@ aesni_set_decrypt_key: movl 12(%esp),%edx shll $4,%ecx testl %eax,%eax - jnz .L114dec_key_ret + jnz .L102dec_key_ret leal 16(%edx,%ecx,1),%eax movups (%edx),%xmm0 movups (%eax),%xmm1 @@ -2436,7 +2193,7 @@ aesni_set_decrypt_key: movups %xmm1,(%edx) leal 16(%edx),%edx leal -16(%eax),%eax -.L115dec_key_inverse: +.L103dec_key_inverse: movups (%edx),%xmm0 movups (%eax),%xmm1 .byte 102,15,56,219,192 @@ -2446,22 +2203,14 @@ aesni_set_decrypt_key: movups %xmm0,16(%eax) movups %xmm1,-16(%edx) cmpl %edx,%eax - ja .L115dec_key_inverse + ja .L103dec_key_inverse movups (%edx),%xmm0 .byte 102,15,56,219,192 movups %xmm0,(%edx) - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 xorl %eax,%eax -.L114dec_key_ret: +.L102dec_key_ret: ret .size aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin -.align 64 -.Lkey_const: -.long 202313229,202313229,202313229,202313229 -.long 67569157,67569157,67569157,67569157 -.long 1,1,1,1 -.long 27,27,27,27 .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 .byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 diff --git a/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S b/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S index 1d51d5b..ecefbe5 100644 --- a/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S +++ b/third_party/boringssl/linux-x86_64/crypto/aes/aesni-x86_64.S @@ -20,10 +20,7 @@ aesni_encrypt: leaq 16(%rdx),%rdx jnz .Loop_enc1_1 .byte 102,15,56,221,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 .byte 0xf3,0xc3 .size aesni_encrypt,.-aesni_encrypt @@ -45,10 +42,7 @@ aesni_decrypt: leaq 16(%rdx),%rdx jnz .Loop_dec1_2 .byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 .byte 0xf3,0xc3 .size aesni_decrypt, .-aesni_decrypt .type _aesni_encrypt2,@function @@ -274,18 +268,21 @@ _aesni_encrypt6: pxor %xmm0,%xmm6 .byte 102,15,56,220,225 pxor %xmm0,%xmm7 - movups (%rcx,%rax,1),%xmm0 addq $16,%rax +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups -16(%rcx,%rax,1),%xmm0 jmp .Lenc_loop6_enter .align 16 .Lenc_loop6: .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 -.Lenc_loop6_enter: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 +.Lenc_loop6_enter: movups (%rcx,%rax,1),%xmm1 addq $32,%rax .byte 102,15,56,220,208 @@ -328,18 +325,21 @@ _aesni_decrypt6: pxor %xmm0,%xmm6 .byte 102,15,56,222,225 pxor %xmm0,%xmm7 - movups (%rcx,%rax,1),%xmm0 addq $16,%rax +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups -16(%rcx,%rax,1),%xmm0 jmp .Ldec_loop6_enter .align 16 .Ldec_loop6: .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 -.Ldec_loop6_enter: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 +.Ldec_loop6_enter: movups (%rcx,%rax,1),%xmm1 addq $32,%rax .byte 102,15,56,222,208 @@ -379,18 +379,23 @@ _aesni_encrypt8: leaq 32(%rcx,%rax,1),%rcx negq %rax .byte 102,15,56,220,209 + addq $16,%rax pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 .byte 102,15,56,220,217 + pxor %xmm0,%xmm8 pxor %xmm0,%xmm9 - movups (%rcx,%rax,1),%xmm0 - addq $16,%rax - jmp .Lenc_loop8_inner +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 +.byte 102,68,15,56,220,193 +.byte 102,68,15,56,220,201 + movups -16(%rcx,%rax,1),%xmm0 + jmp .Lenc_loop8_enter .align 16 .Lenc_loop8: .byte 102,15,56,220,209 .byte 102,15,56,220,217 -.Lenc_loop8_inner: .byte 102,15,56,220,225 .byte 102,15,56,220,233 .byte 102,15,56,220,241 @@ -443,18 +448,23 @@ _aesni_decrypt8: leaq 32(%rcx,%rax,1),%rcx negq %rax .byte 102,15,56,222,209 + addq $16,%rax pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 .byte 102,15,56,222,217 + pxor %xmm0,%xmm8 pxor %xmm0,%xmm9 - movups (%rcx,%rax,1),%xmm0 - addq $16,%rax - jmp .Ldec_loop8_inner +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 +.byte 102,68,15,56,222,201 + movups -16(%rcx,%rax,1),%xmm0 + jmp .Ldec_loop8_enter .align 16 .Ldec_loop8: .byte 102,15,56,222,209 .byte 102,15,56,222,217 -.Ldec_loop8_inner: .byte 102,15,56,222,225 .byte 102,15,56,222,233 .byte 102,15,56,222,241 @@ -582,7 +592,6 @@ aesni_ecb_encrypt: movups 80(%rdi),%xmm7 je .Lecb_enc_six movdqu 96(%rdi),%xmm8 - xorps %xmm9,%xmm9 call _aesni_encrypt8 movups %xmm2,(%rsi) movups %xmm3,16(%rsi) @@ -696,23 +705,15 @@ aesni_ecb_encrypt: jnc .Lecb_dec_loop8 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movq %r11,%rcx movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movl %r10d,%eax movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 movups %xmm7,80(%rsi) - pxor %xmm7,%xmm7 movups %xmm8,96(%rsi) - pxor %xmm8,%xmm8 movups %xmm9,112(%rsi) - pxor %xmm9,%xmm9 leaq 128(%rsi),%rsi addq $128,%rdx jz .Lecb_ret @@ -735,23 +736,14 @@ aesni_ecb_encrypt: je .Lecb_dec_six movups 96(%rdi),%xmm8 movups (%rcx),%xmm0 - xorps %xmm9,%xmm9 call _aesni_decrypt8 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 movups %xmm7,80(%rsi) - pxor %xmm7,%xmm7 movups %xmm8,96(%rsi) - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 jmp .Lecb_ret .align 16 .Lecb_dec_one: @@ -767,73 +759,49 @@ aesni_ecb_encrypt: jnz .Loop_dec1_4 .byte 102,15,56,223,209 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 jmp .Lecb_ret .align 16 .Lecb_dec_two: call _aesni_decrypt2 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 jmp .Lecb_ret .align 16 .Lecb_dec_three: call _aesni_decrypt3 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 jmp .Lecb_ret .align 16 .Lecb_dec_four: call _aesni_decrypt4 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 jmp .Lecb_ret .align 16 .Lecb_dec_five: xorps %xmm7,%xmm7 call _aesni_decrypt6 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 jmp .Lecb_ret .align 16 .Lecb_dec_six: call _aesni_decrypt6 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 movups %xmm7,80(%rsi) - pxor %xmm7,%xmm7 .Lecb_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 .byte 0xf3,0xc3 .size aesni_ecb_encrypt,.-aesni_ecb_encrypt .globl aesni_ccm64_encrypt_blocks @@ -891,13 +859,7 @@ aesni_ccm64_encrypt_blocks: leaq 16(%rsi),%rsi jnz .Lccm64_enc_outer - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 movups %xmm3,(%r9) - pxor %xmm3,%xmm3 - pxor %xmm8,%xmm8 - pxor %xmm6,%xmm6 .byte 0xf3,0xc3 .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks @@ -989,13 +951,7 @@ aesni_ccm64_decrypt_blocks: leaq 16(%r11),%r11 jnz .Loop_enc1_6 .byte 102,15,56,221,217 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 movups %xmm3,(%r9) - pxor %xmm3,%xmm3 - pxor %xmm8,%xmm8 - pxor %xmm6,%xmm6 .byte 0xf3,0xc3 .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks @@ -1003,43 +959,14 @@ aesni_ccm64_decrypt_blocks: .type aesni_ctr32_encrypt_blocks,@function .align 16 aesni_ctr32_encrypt_blocks: - cmpq $1,%rdx - jne .Lctr32_bulk - - - - movups (%r8),%xmm2 - movups (%rdi),%xmm3 - movl 240(%rcx),%edx - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -.Loop_enc1_7: -.byte 102,15,56,220,209 - decl %edx - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz .Loop_enc1_7 -.byte 102,15,56,221,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 - movups %xmm2,(%rsi) - xorps %xmm2,%xmm2 - jmp .Lctr32_epilogue - -.align 16 -.Lctr32_bulk: leaq (%rsp),%rax pushq %rbp subq $128,%rsp andq $-16,%rsp leaq -8(%rax),%rbp - - + cmpq $1,%rdx + je .Lctr32_one_shortcut movdqu (%r8),%xmm2 movdqu (%rcx),%xmm0 @@ -1430,14 +1357,11 @@ aesni_ctr32_encrypt_blocks: leaq -128(%rcx),%rcx .Lctr32_tail: - - leaq 16(%rcx),%rcx cmpq $4,%rdx jb .Lctr32_loop3 je .Lctr32_loop4 - shll $4,%eax movdqa 96(%rsp),%xmm8 pxor %xmm9,%xmm9 @@ -1540,33 +1464,30 @@ aesni_ctr32_encrypt_blocks: movups 32(%rdi),%xmm12 xorps %xmm12,%xmm4 movups %xmm4,32(%rsi) + jmp .Lctr32_done +.align 16 +.Lctr32_one_shortcut: + movups (%r8),%xmm2 + movups (%rdi),%xmm10 + movl 240(%rcx),%eax + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + leaq 32(%rcx),%rcx + xorps %xmm0,%xmm2 +.Loop_enc1_7: +.byte 102,15,56,220,209 + decl %eax + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz .Loop_enc1_7 +.byte 102,15,56,221,209 + xorps %xmm10,%xmm2 + movups %xmm2,(%rsi) + jmp .Lctr32_done + +.align 16 .Lctr32_done: - xorps %xmm0,%xmm0 - xorl %r11d,%r11d - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - movaps %xmm0,0(%rsp) - pxor %xmm8,%xmm8 - movaps %xmm0,16(%rsp) - pxor %xmm9,%xmm9 - movaps %xmm0,32(%rsp) - pxor %xmm10,%xmm10 - movaps %xmm0,48(%rsp) - pxor %xmm11,%xmm11 - movaps %xmm0,64(%rsp) - pxor %xmm12,%xmm12 - movaps %xmm0,80(%rsp) - pxor %xmm13,%xmm13 - movaps %xmm0,96(%rsp) - pxor %xmm14,%xmm14 - movaps %xmm0,112(%rsp) - pxor %xmm15,%xmm15 leaq (%rbp),%rsp popq %rbp .Lctr32_epilogue: @@ -1838,7 +1759,6 @@ aesni_xts_encrypt: shrl $4,%eax .Lxts_enc_short: - movl %eax,%r10d pxor %xmm0,%xmm10 addq $96,%rdx @@ -1867,7 +1787,6 @@ aesni_xts_encrypt: pxor %xmm12,%xmm4 pxor %xmm13,%xmm5 pxor %xmm14,%xmm6 - pxor %xmm7,%xmm7 call _aesni_encrypt6 @@ -2010,29 +1929,6 @@ aesni_xts_encrypt: movups %xmm2,-16(%rsi) .Lxts_enc_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - movaps %xmm0,0(%rsp) - pxor %xmm8,%xmm8 - movaps %xmm0,16(%rsp) - pxor %xmm9,%xmm9 - movaps %xmm0,32(%rsp) - pxor %xmm10,%xmm10 - movaps %xmm0,48(%rsp) - pxor %xmm11,%xmm11 - movaps %xmm0,64(%rsp) - pxor %xmm12,%xmm12 - movaps %xmm0,80(%rsp) - pxor %xmm13,%xmm13 - movaps %xmm0,96(%rsp) - pxor %xmm14,%xmm14 - pxor %xmm15,%xmm15 leaq (%rbp),%rsp popq %rbp .Lxts_enc_epilogue: @@ -2310,7 +2206,6 @@ aesni_xts_decrypt: shrl $4,%eax .Lxts_dec_short: - movl %eax,%r10d pxor %xmm0,%xmm10 pxor %xmm0,%xmm11 @@ -2513,29 +2408,6 @@ aesni_xts_decrypt: movups %xmm2,(%rsi) .Lxts_dec_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - movaps %xmm0,0(%rsp) - pxor %xmm8,%xmm8 - movaps %xmm0,16(%rsp) - pxor %xmm9,%xmm9 - movaps %xmm0,32(%rsp) - pxor %xmm10,%xmm10 - movaps %xmm0,48(%rsp) - pxor %xmm11,%xmm11 - movaps %xmm0,64(%rsp) - pxor %xmm12,%xmm12 - movaps %xmm0,80(%rsp) - pxor %xmm13,%xmm13 - movaps %xmm0,96(%rsp) - pxor %xmm14,%xmm14 - pxor %xmm15,%xmm15 leaq (%rbp),%rsp popq %rbp .Lxts_dec_epilogue: @@ -2585,11 +2457,7 @@ aesni_cbc_encrypt: jnc .Lcbc_enc_loop addq $16,%rdx jnz .Lcbc_enc_tail - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%r8) - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 jmp .Lcbc_ret .Lcbc_enc_tail: @@ -2609,35 +2477,6 @@ aesni_cbc_encrypt: .align 16 .Lcbc_decrypt: - cmpq $16,%rdx - jne .Lcbc_decrypt_bulk - - - - movdqu (%rdi),%xmm2 - movdqu (%r8),%xmm3 - movdqa %xmm2,%xmm4 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -.Loop_dec1_16: -.byte 102,15,56,222,209 - decl %r10d - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz .Loop_dec1_16 -.byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movdqu %xmm4,(%r8) - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 - movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 - jmp .Lcbc_ret -.align 16 -.Lcbc_decrypt_bulk: leaq (%rsp),%rax pushq %rbp subq $16,%rsp @@ -2874,7 +2713,7 @@ aesni_cbc_encrypt: movaps %xmm9,%xmm2 leaq -112(%rcx),%rcx addq $112,%rdx - jle .Lcbc_dec_clear_tail_collected + jle .Lcbc_dec_tail_collected movups %xmm9,(%rsi) leaq 16(%rsi),%rsi cmpq $80,%rdx @@ -2893,19 +2732,14 @@ aesni_cbc_encrypt: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 pxor %xmm14,%xmm6 movdqu %xmm5,48(%rsi) - pxor %xmm5,%xmm5 pxor %xmm15,%xmm7 movdqu %xmm6,64(%rsi) - pxor %xmm6,%xmm6 leaq 80(%rsi),%rsi movdqa %xmm7,%xmm2 - pxor %xmm7,%xmm7 jmp .Lcbc_dec_tail_collected .align 16 @@ -2920,23 +2754,16 @@ aesni_cbc_encrypt: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 pxor %xmm14,%xmm6 movdqu %xmm5,48(%rsi) - pxor %xmm5,%xmm5 pxor %xmm15,%xmm7 movdqu %xmm6,64(%rsi) - pxor %xmm6,%xmm6 pxor %xmm9,%xmm8 movdqu %xmm7,80(%rsi) - pxor %xmm7,%xmm7 leaq 96(%rsi),%rsi movdqa %xmm8,%xmm2 - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 jmp .Lcbc_dec_tail_collected .align 16 @@ -2980,7 +2807,7 @@ aesni_cbc_encrypt: movdqa %xmm7,%xmm2 addq $80,%rdx - jle .Lcbc_dec_clear_tail_collected + jle .Lcbc_dec_tail_collected movups %xmm7,(%rsi) leaq 16(%rsi),%rsi @@ -3015,17 +2842,12 @@ aesni_cbc_encrypt: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 pxor %xmm14,%xmm6 movdqu %xmm5,48(%rsi) - pxor %xmm5,%xmm5 leaq 64(%rsi),%rsi movdqa %xmm6,%xmm2 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 subq $16,%rdx jmp .Lcbc_dec_tail_collected @@ -3036,12 +2858,12 @@ aesni_cbc_encrypt: movups 16(%rcx),%xmm1 leaq 32(%rcx),%rcx xorps %xmm0,%xmm2 -.Loop_dec1_17: +.Loop_dec1_16: .byte 102,15,56,222,209 decl %eax movups (%rcx),%xmm1 leaq 16(%rcx),%rcx - jnz .Loop_dec1_17 + jnz .Loop_dec1_16 .byte 102,15,56,223,209 xorps %xmm10,%xmm2 movaps %xmm11,%xmm10 @@ -3055,7 +2877,6 @@ aesni_cbc_encrypt: pxor %xmm11,%xmm3 movdqu %xmm2,(%rsi) movdqa %xmm3,%xmm2 - pxor %xmm3,%xmm3 leaq 16(%rsi),%rsi jmp .Lcbc_dec_tail_collected .align 16 @@ -3068,9 +2889,7 @@ aesni_cbc_encrypt: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movdqa %xmm4,%xmm2 - pxor %xmm4,%xmm4 leaq 32(%rsi),%rsi jmp .Lcbc_dec_tail_collected .align 16 @@ -3083,45 +2902,29 @@ aesni_cbc_encrypt: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movdqa %xmm5,%xmm2 - pxor %xmm5,%xmm5 leaq 48(%rsi),%rsi jmp .Lcbc_dec_tail_collected .align 16 -.Lcbc_dec_clear_tail_collected: - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 .Lcbc_dec_tail_collected: movups %xmm10,(%r8) andq $15,%rdx jnz .Lcbc_dec_tail_partial movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 jmp .Lcbc_dec_ret .align 16 .Lcbc_dec_tail_partial: movaps %xmm2,(%rsp) - pxor %xmm2,%xmm2 movq $16,%rcx movq %rsi,%rdi subq %rdx,%rcx leaq (%rsp),%rsi .long 0x9066A4F3 - movdqa %xmm2,(%rsp) .Lcbc_dec_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 leaq (%rbp),%rsp popq %rbp .Lcbc_ret: @@ -3160,9 +2963,7 @@ aesni_set_decrypt_key: movups (%rdx),%xmm0 .byte 102,15,56,219,192 - pxor %xmm1,%xmm1 movups %xmm0,(%rdi) - pxor %xmm0,%xmm0 .Ldec_key_ret: addq $8,%rsp .byte 0xf3,0xc3 @@ -3181,10 +2982,8 @@ __aesni_set_encrypt_key: testq %rdx,%rdx jz .Lenc_key_ret - movl $268437504,%r10d movups (%rdi),%xmm0 xorps %xmm4,%xmm4 - andl OPENSSL_ia32cap_P+4(%rip),%r10d leaq 16(%rdx),%rax cmpl $256,%esi je .L14rounds @@ -3195,9 +2994,6 @@ __aesni_set_encrypt_key: .L10rounds: movl $9,%esi - cmpl $268435456,%r10d - je .L10rounds_alt - movups %xmm0,(%rdx) .byte 102,15,58,223,200,1 call .Lkey_expansion_128_cold @@ -3225,79 +3021,9 @@ __aesni_set_encrypt_key: jmp .Lenc_key_ret .align 16 -.L10rounds_alt: - movdqa .Lkey_rotate(%rip),%xmm5 - movl $8,%r10d - movdqa .Lkey_rcon1(%rip),%xmm4 - movdqa %xmm0,%xmm2 - movdqu %xmm0,(%rdx) - jmp .Loop_key128 - -.align 16 -.Loop_key128: -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - leaq 16(%rax),%rax - - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - - pxor %xmm2,%xmm0 - movdqu %xmm0,-16(%rax) - movdqa %xmm0,%xmm2 - - decl %r10d - jnz .Loop_key128 - - movdqa .Lkey_rcon1b(%rip),%xmm4 - -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - - pxor %xmm2,%xmm0 - movdqu %xmm0,(%rax) - - movdqa %xmm0,%xmm2 -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - - pxor %xmm2,%xmm0 - movdqu %xmm0,16(%rax) - - movl %esi,96(%rax) - xorl %eax,%eax - jmp .Lenc_key_ret - -.align 16 .L12rounds: movq 16(%rdi),%xmm2 movl $11,%esi - cmpl $268435456,%r10d - je .L12rounds_alt - movups %xmm0,(%rdx) .byte 102,15,58,223,202,1 call .Lkey_expansion_192a_cold @@ -3321,54 +3047,10 @@ __aesni_set_encrypt_key: jmp .Lenc_key_ret .align 16 -.L12rounds_alt: - movdqa .Lkey_rotate192(%rip),%xmm5 - movdqa .Lkey_rcon1(%rip),%xmm4 - movl $8,%r10d - movdqu %xmm0,(%rdx) - jmp .Loop_key192 - -.align 16 -.Loop_key192: - movq %xmm2,0(%rax) - movdqa %xmm2,%xmm1 -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - pslld $1,%xmm4 - leaq 24(%rax),%rax - - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - - pshufd $255,%xmm0,%xmm3 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - - pxor %xmm2,%xmm0 - pxor %xmm3,%xmm2 - movdqu %xmm0,-16(%rax) - - decl %r10d - jnz .Loop_key192 - - movl %esi,32(%rax) - xorl %eax,%eax - jmp .Lenc_key_ret - -.align 16 .L14rounds: movups 16(%rdi),%xmm2 movl $13,%esi leaq 16(%rax),%rax - cmpl $268435456,%r10d - je .L14rounds_alt - movups %xmm0,(%rdx) movups %xmm2,16(%rdx) .byte 102,15,58,223,202,1 @@ -3403,69 +3085,9 @@ __aesni_set_encrypt_key: jmp .Lenc_key_ret .align 16 -.L14rounds_alt: - movdqa .Lkey_rotate(%rip),%xmm5 - movdqa .Lkey_rcon1(%rip),%xmm4 - movl $7,%r10d - movdqu %xmm0,0(%rdx) - movdqa %xmm2,%xmm1 - movdqu %xmm2,16(%rdx) - jmp .Loop_key256 - -.align 16 -.Loop_key256: -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - pslld $1,%xmm4 - - pxor %xmm2,%xmm0 - movdqu %xmm0,(%rax) - - decl %r10d - jz .Ldone_key256 - - pshufd $255,%xmm0,%xmm2 - pxor %xmm3,%xmm3 -.byte 102,15,56,221,211 - - movdqa %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm3,%xmm1 - - pxor %xmm1,%xmm2 - movdqu %xmm2,16(%rax) - leaq 32(%rax),%rax - movdqa %xmm2,%xmm1 - - jmp .Loop_key256 - -.Ldone_key256: - movl %esi,16(%rax) - xorl %eax,%eax - jmp .Lenc_key_ret - -.align 16 .Lbad_keybits: movq $-2,%rax .Lenc_key_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 addq $8,%rsp .byte 0xf3,0xc3 .LSEH_end_set_encrypt_key: @@ -3551,14 +3173,6 @@ __aesni_set_encrypt_key: .long 0x87,0,1,0 .Lincrement1: .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 -.Lkey_rotate: -.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d -.Lkey_rotate192: -.long 0x04070605,0x04070605,0x04070605,0x04070605 -.Lkey_rcon1: -.long 1,1,1,1 -.Lkey_rcon1b: -.long 0x1b,0x1b,0x1b,0x1b .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 64 diff --git a/third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S b/third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S index 07719ba..9000478 100644 --- a/third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S +++ b/third_party/boringssl/mac-x86/crypto/aes/aesni-x86.S @@ -22,10 +22,7 @@ L000enc1_loop_1: leal 16(%edx),%edx jnz L000enc1_loop_1 .byte 102,15,56,221,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%eax) - pxor %xmm2,%xmm2 ret .globl _aesni_decrypt .private_extern _aesni_decrypt @@ -48,10 +45,7 @@ L001dec1_loop_2: leal 16(%edx),%edx jnz L001dec1_loop_2 .byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%eax) - pxor %xmm2,%xmm2 ret .private_extern __aesni_encrypt2 .align 4 @@ -258,15 +252,17 @@ __aesni_encrypt6: negl %ecx .byte 102,15,56,220,225 pxor %xmm0,%xmm7 - movups (%edx,%ecx,1),%xmm0 addl $16,%ecx - jmp L008_aesni_encrypt6_inner +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups -16(%edx,%ecx,1),%xmm0 + jmp L_aesni_encrypt6_enter .align 4,0x90 -L009enc6_loop: +L008enc6_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 -L008_aesni_encrypt6_inner: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 @@ -280,7 +276,7 @@ L_aesni_encrypt6_enter: .byte 102,15,56,220,240 .byte 102,15,56,220,248 movups -16(%edx,%ecx,1),%xmm0 - jnz L009enc6_loop + jnz L008enc6_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -311,15 +307,17 @@ __aesni_decrypt6: negl %ecx .byte 102,15,56,222,225 pxor %xmm0,%xmm7 - movups (%edx,%ecx,1),%xmm0 addl $16,%ecx - jmp L010_aesni_decrypt6_inner +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups -16(%edx,%ecx,1),%xmm0 + jmp L_aesni_decrypt6_enter .align 4,0x90 -L011dec6_loop: +L009dec6_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 -L010_aesni_decrypt6_inner: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 @@ -333,7 +331,7 @@ L_aesni_decrypt6_enter: .byte 102,15,56,222,240 .byte 102,15,56,222,248 movups -16(%edx,%ecx,1),%xmm0 - jnz L011dec6_loop + jnz L009dec6_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -362,14 +360,14 @@ L_aesni_ecb_encrypt_begin: movl 32(%esp),%edx movl 36(%esp),%ebx andl $-16,%eax - jz L012ecb_ret + jz L010ecb_ret movl 240(%edx),%ecx testl %ebx,%ebx - jz L013ecb_decrypt + jz L011ecb_decrypt movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb L014ecb_enc_tail + jb L012ecb_enc_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -378,9 +376,9 @@ L_aesni_ecb_encrypt_begin: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp L015ecb_enc_loop6_enter + jmp L013ecb_enc_loop6_enter .align 4,0x90 -L016ecb_enc_loop6: +L014ecb_enc_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -395,12 +393,12 @@ L016ecb_enc_loop6: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -L015ecb_enc_loop6_enter: +L013ecb_enc_loop6_enter: call __aesni_encrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc L016ecb_enc_loop6 + jnc L014ecb_enc_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -409,18 +407,18 @@ L015ecb_enc_loop6_enter: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz L012ecb_ret -L014ecb_enc_tail: + jz L010ecb_ret +L012ecb_enc_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb L017ecb_enc_one + jb L015ecb_enc_one movups 16(%esi),%xmm3 - je L018ecb_enc_two + je L016ecb_enc_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb L019ecb_enc_three + jb L017ecb_enc_three movups 48(%esi),%xmm5 - je L020ecb_enc_four + je L018ecb_enc_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call __aesni_encrypt6 @@ -429,49 +427,49 @@ L014ecb_enc_tail: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L017ecb_enc_one: +L015ecb_enc_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L021enc1_loop_3: +L019enc1_loop_3: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L021enc1_loop_3 + jnz L019enc1_loop_3 .byte 102,15,56,221,209 movups %xmm2,(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L018ecb_enc_two: +L016ecb_enc_two: call __aesni_encrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L019ecb_enc_three: +L017ecb_enc_three: call __aesni_encrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L020ecb_enc_four: +L018ecb_enc_four: call __aesni_encrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L013ecb_decrypt: +L011ecb_decrypt: movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb L022ecb_dec_tail + jb L020ecb_dec_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -480,9 +478,9 @@ L013ecb_decrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp L023ecb_dec_loop6_enter + jmp L021ecb_dec_loop6_enter .align 4,0x90 -L024ecb_dec_loop6: +L022ecb_dec_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -497,12 +495,12 @@ L024ecb_dec_loop6: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -L023ecb_dec_loop6_enter: +L021ecb_dec_loop6_enter: call __aesni_decrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc L024ecb_dec_loop6 + jnc L022ecb_dec_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -511,18 +509,18 @@ L023ecb_dec_loop6_enter: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz L012ecb_ret -L022ecb_dec_tail: + jz L010ecb_ret +L020ecb_dec_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb L025ecb_dec_one + jb L023ecb_dec_one movups 16(%esi),%xmm3 - je L026ecb_dec_two + je L024ecb_dec_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb L027ecb_dec_three + jb L025ecb_dec_three movups 48(%esi),%xmm5 - je L028ecb_dec_four + je L026ecb_dec_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call __aesni_decrypt6 @@ -531,51 +529,43 @@ L022ecb_dec_tail: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L025ecb_dec_one: +L023ecb_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L029dec1_loop_4: +L027dec1_loop_4: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L029dec1_loop_4 + jnz L027dec1_loop_4 .byte 102,15,56,223,209 movups %xmm2,(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L026ecb_dec_two: +L024ecb_dec_two: call __aesni_decrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L027ecb_dec_three: +L025ecb_dec_three: call __aesni_decrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp L012ecb_ret + jmp L010ecb_ret .align 4,0x90 -L028ecb_dec_four: +L026ecb_dec_four: call __aesni_decrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) -L012ecb_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 +L010ecb_ret: popl %edi popl %esi popl %ebx @@ -621,7 +611,7 @@ L_aesni_ccm64_encrypt_blocks_begin: leal 32(%edx,%ecx,1),%edx subl %ecx,%ebx .byte 102,15,56,0,253 -L030ccm64_enc_outer: +L028ccm64_enc_outer: movups (%ebp),%xmm0 movl %ebx,%ecx movups (%esi),%xmm6 @@ -630,7 +620,7 @@ L030ccm64_enc_outer: xorps %xmm6,%xmm0 xorps %xmm0,%xmm3 movups 32(%ebp),%xmm0 -L031ccm64_enc2_loop: +L029ccm64_enc2_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 movups (%edx,%ecx,1),%xmm1 @@ -638,7 +628,7 @@ L031ccm64_enc2_loop: .byte 102,15,56,220,208 .byte 102,15,56,220,216 movups -16(%edx,%ecx,1),%xmm0 - jnz L031ccm64_enc2_loop + jnz L029ccm64_enc2_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 paddq 16(%esp),%xmm7 @@ -651,18 +641,10 @@ L031ccm64_enc2_loop: movups %xmm6,(%edi) .byte 102,15,56,0,213 leal 16(%edi),%edi - jnz L030ccm64_enc_outer + jnz L028ccm64_enc_outer movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -709,12 +691,12 @@ L_aesni_ccm64_decrypt_blocks_begin: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L032enc1_loop_5: +L030enc1_loop_5: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L032enc1_loop_5 + jnz L030enc1_loop_5 .byte 102,15,56,221,209 shll $4,%ebx movl $16,%ecx @@ -724,16 +706,16 @@ L032enc1_loop_5: subl %ebx,%ecx leal 32(%ebp,%ebx,1),%edx movl %ecx,%ebx - jmp L033ccm64_dec_outer + jmp L031ccm64_dec_outer .align 4,0x90 -L033ccm64_dec_outer: +L031ccm64_dec_outer: xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 movups %xmm6,(%edi) leal 16(%edi),%edi .byte 102,15,56,0,213 subl $1,%eax - jz L034ccm64_dec_break + jz L032ccm64_dec_break movups (%ebp),%xmm0 movl %ebx,%ecx movups 16(%ebp),%xmm1 @@ -741,7 +723,7 @@ L033ccm64_dec_outer: xorps %xmm0,%xmm2 xorps %xmm6,%xmm3 movups 32(%ebp),%xmm0 -L035ccm64_dec2_loop: +L033ccm64_dec2_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 movups (%edx,%ecx,1),%xmm1 @@ -749,7 +731,7 @@ L035ccm64_dec2_loop: .byte 102,15,56,220,208 .byte 102,15,56,220,216 movups -16(%edx,%ecx,1),%xmm0 - jnz L035ccm64_dec2_loop + jnz L033ccm64_dec2_loop movups (%esi),%xmm6 paddq 16(%esp),%xmm7 .byte 102,15,56,220,209 @@ -757,9 +739,9 @@ L035ccm64_dec2_loop: .byte 102,15,56,221,208 .byte 102,15,56,221,216 leal 16(%esi),%esi - jmp L033ccm64_dec_outer + jmp L031ccm64_dec_outer .align 4,0x90 -L034ccm64_dec_break: +L032ccm64_dec_break: movl 240(%ebp),%ecx movl %ebp,%edx movups (%edx),%xmm0 @@ -767,24 +749,16 @@ L034ccm64_dec_break: xorps %xmm0,%xmm6 leal 32(%edx),%edx xorps %xmm6,%xmm3 -L036enc1_loop_6: +L034enc1_loop_6: .byte 102,15,56,220,217 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L036enc1_loop_6 + jnz L034enc1_loop_6 .byte 102,15,56,221,217 movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -809,7 +783,7 @@ L_aesni_ctr32_encrypt_blocks_begin: andl $-16,%esp movl %ebp,80(%esp) cmpl $1,%eax - je L037ctr32_one_shortcut + je L035ctr32_one_shortcut movdqu (%ebx),%xmm7 movl $202182159,(%esp) movl $134810123,4(%esp) @@ -847,7 +821,7 @@ L_aesni_ctr32_encrypt_blocks_begin: pshufd $192,%xmm0,%xmm2 pshufd $128,%xmm0,%xmm3 cmpl $6,%eax - jb L038ctr32_tail + jb L036ctr32_tail pxor %xmm6,%xmm7 shll $4,%ecx movl $16,%ebx @@ -856,9 +830,9 @@ L_aesni_ctr32_encrypt_blocks_begin: subl %ecx,%ebx leal 32(%edx,%ecx,1),%edx subl $6,%eax - jmp L039ctr32_loop6 + jmp L037ctr32_loop6 .align 4,0x90 -L039ctr32_loop6: +L037ctr32_loop6: pshufd $64,%xmm0,%xmm4 movdqa 32(%esp),%xmm0 pshufd $192,%xmm1,%xmm5 @@ -912,27 +886,27 @@ L039ctr32_loop6: leal 96(%edi),%edi pshufd $128,%xmm0,%xmm3 subl $6,%eax - jnc L039ctr32_loop6 + jnc L037ctr32_loop6 addl $6,%eax - jz L040ctr32_ret + jz L038ctr32_ret movdqu (%ebp),%xmm7 movl %ebp,%edx pxor 32(%esp),%xmm7 movl 240(%ebp),%ecx -L038ctr32_tail: +L036ctr32_tail: por %xmm7,%xmm2 cmpl $2,%eax - jb L041ctr32_one + jb L039ctr32_one pshufd $64,%xmm0,%xmm4 por %xmm7,%xmm3 - je L042ctr32_two + je L040ctr32_two pshufd $192,%xmm1,%xmm5 por %xmm7,%xmm4 cmpl $4,%eax - jb L043ctr32_three + jb L041ctr32_three pshufd $128,%xmm1,%xmm6 por %xmm7,%xmm5 - je L044ctr32_four + je L042ctr32_four por %xmm7,%xmm6 call __aesni_encrypt6 movups (%esi),%xmm1 @@ -950,29 +924,29 @@ L038ctr32_tail: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp L040ctr32_ret + jmp L038ctr32_ret .align 4,0x90 -L037ctr32_one_shortcut: +L035ctr32_one_shortcut: movups (%ebx),%xmm2 movl 240(%edx),%ecx -L041ctr32_one: +L039ctr32_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L045enc1_loop_7: +L043enc1_loop_7: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L045enc1_loop_7 + jnz L043enc1_loop_7 .byte 102,15,56,221,209 movups (%esi),%xmm6 xorps %xmm2,%xmm6 movups %xmm6,(%edi) - jmp L040ctr32_ret + jmp L038ctr32_ret .align 4,0x90 -L042ctr32_two: +L040ctr32_two: call __aesni_encrypt2 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -980,9 +954,9 @@ L042ctr32_two: xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp L040ctr32_ret + jmp L038ctr32_ret .align 4,0x90 -L043ctr32_three: +L041ctr32_three: call __aesni_encrypt3 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -993,9 +967,9 @@ L043ctr32_three: xorps %xmm7,%xmm4 movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp L040ctr32_ret + jmp L038ctr32_ret .align 4,0x90 -L044ctr32_four: +L042ctr32_four: call __aesni_encrypt4 movups (%esi),%xmm6 movups 16(%esi),%xmm7 @@ -1009,18 +983,7 @@ L044ctr32_four: xorps %xmm0,%xmm5 movups %xmm4,32(%edi) movups %xmm5,48(%edi) -L040ctr32_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - movdqa %xmm0,32(%esp) - pxor %xmm5,%xmm5 - movdqa %xmm0,48(%esp) - pxor %xmm6,%xmm6 - movdqa %xmm0,64(%esp) - pxor %xmm7,%xmm7 +L038ctr32_ret: movl 80(%esp),%esp popl %edi popl %esi @@ -1044,12 +1007,12 @@ L_aesni_xts_encrypt_begin: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L046enc1_loop_8: +L044enc1_loop_8: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L046enc1_loop_8 + jnz L044enc1_loop_8 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1073,14 +1036,14 @@ L046enc1_loop_8: movl %edx,%ebp movl %ecx,%ebx subl $96,%eax - jc L047xts_enc_short + jc L045xts_enc_short shll $4,%ecx movl $16,%ebx subl %ecx,%ebx leal 32(%edx,%ecx,1),%edx - jmp L048xts_enc_loop6 + jmp L046xts_enc_loop6 .align 4,0x90 -L048xts_enc_loop6: +L046xts_enc_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1169,23 +1132,23 @@ L048xts_enc_loop6: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 subl $96,%eax - jnc L048xts_enc_loop6 + jnc L046xts_enc_loop6 movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -L047xts_enc_short: +L045xts_enc_short: addl $96,%eax - jz L049xts_enc_done6x + jz L047xts_enc_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb L050xts_enc_one + jb L048xts_enc_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je L051xts_enc_two + je L049xts_enc_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1194,7 +1157,7 @@ L047xts_enc_short: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb L052xts_enc_three + jb L050xts_enc_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1204,7 +1167,7 @@ L047xts_enc_short: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je L053xts_enc_four + je L051xts_enc_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1236,9 +1199,9 @@ L047xts_enc_short: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp L054xts_enc_done + jmp L052xts_enc_done .align 4,0x90 -L050xts_enc_one: +L048xts_enc_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1246,20 +1209,20 @@ L050xts_enc_one: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L055enc1_loop_9: +L053enc1_loop_9: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L055enc1_loop_9 + jnz L053enc1_loop_9 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp L054xts_enc_done + jmp L052xts_enc_done .align 4,0x90 -L051xts_enc_two: +L049xts_enc_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1273,9 +1236,9 @@ L051xts_enc_two: movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp L054xts_enc_done + jmp L052xts_enc_done .align 4,0x90 -L052xts_enc_three: +L050xts_enc_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1293,9 +1256,9 @@ L052xts_enc_three: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp L054xts_enc_done + jmp L052xts_enc_done .align 4,0x90 -L053xts_enc_four: +L051xts_enc_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1317,28 +1280,28 @@ L053xts_enc_four: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp L054xts_enc_done + jmp L052xts_enc_done .align 4,0x90 -L049xts_enc_done6x: +L047xts_enc_done6x: movl 112(%esp),%eax andl $15,%eax - jz L056xts_enc_ret + jz L054xts_enc_ret movdqa %xmm1,%xmm5 movl %eax,112(%esp) - jmp L057xts_enc_steal + jmp L055xts_enc_steal .align 4,0x90 -L054xts_enc_done: +L052xts_enc_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz L056xts_enc_ret + jz L054xts_enc_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm5 paddq %xmm1,%xmm1 pand 96(%esp),%xmm5 pxor %xmm1,%xmm5 -L057xts_enc_steal: +L055xts_enc_steal: movzbl (%esi),%ecx movzbl -16(%edi),%edx leal 1(%esi),%esi @@ -1346,7 +1309,7 @@ L057xts_enc_steal: movb %dl,(%edi) leal 1(%edi),%edi subl $1,%eax - jnz L057xts_enc_steal + jnz L055xts_enc_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1356,30 +1319,16 @@ L057xts_enc_steal: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L058enc1_loop_10: +L056enc1_loop_10: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L058enc1_loop_10 + jnz L056enc1_loop_10 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,-16(%edi) -L056xts_enc_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - movdqa %xmm0,(%esp) - pxor %xmm3,%xmm3 - movdqa %xmm0,16(%esp) - pxor %xmm4,%xmm4 - movdqa %xmm0,32(%esp) - pxor %xmm5,%xmm5 - movdqa %xmm0,48(%esp) - pxor %xmm6,%xmm6 - movdqa %xmm0,64(%esp) - pxor %xmm7,%xmm7 - movdqa %xmm0,80(%esp) +L054xts_enc_ret: movl 116(%esp),%esp popl %edi popl %esi @@ -1403,12 +1352,12 @@ L_aesni_xts_decrypt_begin: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L059enc1_loop_11: +L057enc1_loop_11: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L059enc1_loop_11 + jnz L057enc1_loop_11 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1437,14 +1386,14 @@ L059enc1_loop_11: pcmpgtd %xmm1,%xmm0 andl $-16,%eax subl $96,%eax - jc L060xts_dec_short + jc L058xts_dec_short shll $4,%ecx movl $16,%ebx subl %ecx,%ebx leal 32(%edx,%ecx,1),%edx - jmp L061xts_dec_loop6 + jmp L059xts_dec_loop6 .align 4,0x90 -L061xts_dec_loop6: +L059xts_dec_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1533,23 +1482,23 @@ L061xts_dec_loop6: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 subl $96,%eax - jnc L061xts_dec_loop6 + jnc L059xts_dec_loop6 movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -L060xts_dec_short: +L058xts_dec_short: addl $96,%eax - jz L062xts_dec_done6x + jz L060xts_dec_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb L063xts_dec_one + jb L061xts_dec_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je L064xts_dec_two + je L062xts_dec_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1558,7 +1507,7 @@ L060xts_dec_short: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb L065xts_dec_three + jb L063xts_dec_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1568,7 +1517,7 @@ L060xts_dec_short: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je L066xts_dec_four + je L064xts_dec_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1600,9 +1549,9 @@ L060xts_dec_short: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp L067xts_dec_done + jmp L065xts_dec_done .align 4,0x90 -L063xts_dec_one: +L061xts_dec_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1610,20 +1559,20 @@ L063xts_dec_one: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L068dec1_loop_12: +L066dec1_loop_12: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L068dec1_loop_12 + jnz L066dec1_loop_12 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp L067xts_dec_done + jmp L065xts_dec_done .align 4,0x90 -L064xts_dec_two: +L062xts_dec_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1637,9 +1586,9 @@ L064xts_dec_two: movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp L067xts_dec_done + jmp L065xts_dec_done .align 4,0x90 -L065xts_dec_three: +L063xts_dec_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1657,9 +1606,9 @@ L065xts_dec_three: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp L067xts_dec_done + jmp L065xts_dec_done .align 4,0x90 -L066xts_dec_four: +L064xts_dec_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1681,20 +1630,20 @@ L066xts_dec_four: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp L067xts_dec_done + jmp L065xts_dec_done .align 4,0x90 -L062xts_dec_done6x: +L060xts_dec_done6x: movl 112(%esp),%eax andl $15,%eax - jz L069xts_dec_ret + jz L067xts_dec_ret movl %eax,112(%esp) - jmp L070xts_dec_only_one_more + jmp L068xts_dec_only_one_more .align 4,0x90 -L067xts_dec_done: +L065xts_dec_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz L069xts_dec_ret + jz L067xts_dec_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm2 @@ -1704,7 +1653,7 @@ L067xts_dec_done: pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 -L070xts_dec_only_one_more: +L068xts_dec_only_one_more: pshufd $19,%xmm0,%xmm5 movdqa %xmm1,%xmm6 paddq %xmm1,%xmm1 @@ -1718,16 +1667,16 @@ L070xts_dec_only_one_more: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L071dec1_loop_13: +L069dec1_loop_13: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L071dec1_loop_13 + jnz L069dec1_loop_13 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) -L072xts_dec_steal: +L070xts_dec_steal: movzbl 16(%esi),%ecx movzbl (%edi),%edx leal 1(%esi),%esi @@ -1735,7 +1684,7 @@ L072xts_dec_steal: movb %dl,16(%edi) leal 1(%edi),%edi subl $1,%eax - jnz L072xts_dec_steal + jnz L070xts_dec_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1745,30 +1694,16 @@ L072xts_dec_steal: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L073dec1_loop_14: +L071dec1_loop_14: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L073dec1_loop_14 + jnz L071dec1_loop_14 .byte 102,15,56,223,209 xorps %xmm6,%xmm2 movups %xmm2,(%edi) -L069xts_dec_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - movdqa %xmm0,(%esp) - pxor %xmm3,%xmm3 - movdqa %xmm0,16(%esp) - pxor %xmm4,%xmm4 - movdqa %xmm0,32(%esp) - pxor %xmm5,%xmm5 - movdqa %xmm0,48(%esp) - pxor %xmm6,%xmm6 - movdqa %xmm0,64(%esp) - pxor %xmm7,%xmm7 - movdqa %xmm0,80(%esp) +L067xts_dec_ret: movl 116(%esp),%esp popl %edi popl %esi @@ -1793,7 +1728,7 @@ L_aesni_cbc_encrypt_begin: movl 32(%esp),%edx movl 36(%esp),%ebp testl %eax,%eax - jz L074cbc_abort + jz L072cbc_abort cmpl $0,40(%esp) xchgl %esp,%ebx movups (%ebp),%xmm7 @@ -1801,14 +1736,14 @@ L_aesni_cbc_encrypt_begin: movl %edx,%ebp movl %ebx,16(%esp) movl %ecx,%ebx - je L075cbc_decrypt + je L073cbc_decrypt movaps %xmm7,%xmm2 cmpl $16,%eax - jb L076cbc_enc_tail + jb L074cbc_enc_tail subl $16,%eax - jmp L077cbc_enc_loop + jmp L075cbc_enc_loop .align 4,0x90 -L077cbc_enc_loop: +L075cbc_enc_loop: movups (%esi),%xmm7 leal 16(%esi),%esi movups (%edx),%xmm0 @@ -1816,25 +1751,24 @@ L077cbc_enc_loop: xorps %xmm0,%xmm7 leal 32(%edx),%edx xorps %xmm7,%xmm2 -L078enc1_loop_15: +L076enc1_loop_15: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L078enc1_loop_15 + jnz L076enc1_loop_15 .byte 102,15,56,221,209 movl %ebx,%ecx movl %ebp,%edx movups %xmm2,(%edi) leal 16(%edi),%edi subl $16,%eax - jnc L077cbc_enc_loop + jnc L075cbc_enc_loop addl $16,%eax - jnz L076cbc_enc_tail + jnz L074cbc_enc_tail movaps %xmm2,%xmm7 - pxor %xmm2,%xmm2 - jmp L079cbc_ret -L076cbc_enc_tail: + jmp L077cbc_ret +L074cbc_enc_tail: movl %eax,%ecx .long 2767451785 movl $16,%ecx @@ -1845,20 +1779,20 @@ L076cbc_enc_tail: movl %ebx,%ecx movl %edi,%esi movl %ebp,%edx - jmp L077cbc_enc_loop + jmp L075cbc_enc_loop .align 4,0x90 -L075cbc_decrypt: +L073cbc_decrypt: cmpl $80,%eax - jbe L080cbc_dec_tail + jbe L078cbc_dec_tail movaps %xmm7,(%esp) subl $80,%eax - jmp L081cbc_dec_loop6_enter + jmp L079cbc_dec_loop6_enter .align 4,0x90 -L082cbc_dec_loop6: +L080cbc_dec_loop6: movaps %xmm0,(%esp) movups %xmm7,(%edi) leal 16(%edi),%edi -L081cbc_dec_loop6_enter: +L079cbc_dec_loop6_enter: movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -1888,28 +1822,28 @@ L081cbc_dec_loop6_enter: movups %xmm6,64(%edi) leal 80(%edi),%edi subl $96,%eax - ja L082cbc_dec_loop6 + ja L080cbc_dec_loop6 movaps %xmm7,%xmm2 movaps %xmm0,%xmm7 addl $80,%eax - jle L083cbc_dec_clear_tail_collected + jle L081cbc_dec_tail_collected movups %xmm2,(%edi) leal 16(%edi),%edi -L080cbc_dec_tail: +L078cbc_dec_tail: movups (%esi),%xmm2 movaps %xmm2,%xmm6 cmpl $16,%eax - jbe L084cbc_dec_one + jbe L082cbc_dec_one movups 16(%esi),%xmm3 movaps %xmm3,%xmm5 cmpl $32,%eax - jbe L085cbc_dec_two + jbe L083cbc_dec_two movups 32(%esi),%xmm4 cmpl $48,%eax - jbe L086cbc_dec_three + jbe L084cbc_dec_three movups 48(%esi),%xmm5 cmpl $64,%eax - jbe L087cbc_dec_four + jbe L085cbc_dec_four movups 64(%esi),%xmm6 movaps %xmm7,(%esp) movups (%esi),%xmm2 @@ -1927,62 +1861,55 @@ L080cbc_dec_tail: xorps %xmm0,%xmm6 movups %xmm2,(%edi) movups %xmm3,16(%edi) - pxor %xmm3,%xmm3 movups %xmm4,32(%edi) - pxor %xmm4,%xmm4 movups %xmm5,48(%edi) - pxor %xmm5,%xmm5 leal 64(%edi),%edi movaps %xmm6,%xmm2 - pxor %xmm6,%xmm6 subl $80,%eax - jmp L088cbc_dec_tail_collected + jmp L081cbc_dec_tail_collected .align 4,0x90 -L084cbc_dec_one: +L082cbc_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L089dec1_loop_16: +L086dec1_loop_16: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L089dec1_loop_16 + jnz L086dec1_loop_16 .byte 102,15,56,223,209 xorps %xmm7,%xmm2 movaps %xmm6,%xmm7 subl $16,%eax - jmp L088cbc_dec_tail_collected + jmp L081cbc_dec_tail_collected .align 4,0x90 -L085cbc_dec_two: +L083cbc_dec_two: call __aesni_decrypt2 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movaps %xmm3,%xmm2 - pxor %xmm3,%xmm3 leal 16(%edi),%edi movaps %xmm5,%xmm7 subl $32,%eax - jmp L088cbc_dec_tail_collected + jmp L081cbc_dec_tail_collected .align 4,0x90 -L086cbc_dec_three: +L084cbc_dec_three: call __aesni_decrypt3 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 xorps %xmm5,%xmm4 movups %xmm2,(%edi) movaps %xmm4,%xmm2 - pxor %xmm4,%xmm4 movups %xmm3,16(%edi) - pxor %xmm3,%xmm3 leal 32(%edi),%edi movups 32(%esi),%xmm7 subl $48,%eax - jmp L088cbc_dec_tail_collected + jmp L081cbc_dec_tail_collected .align 4,0x90 -L087cbc_dec_four: +L085cbc_dec_four: call __aesni_decrypt4 movups 16(%esi),%xmm1 movups 32(%esi),%xmm0 @@ -1992,44 +1919,28 @@ L087cbc_dec_four: movups %xmm2,(%edi) xorps %xmm1,%xmm4 movups %xmm3,16(%edi) - pxor %xmm3,%xmm3 xorps %xmm0,%xmm5 movups %xmm4,32(%edi) - pxor %xmm4,%xmm4 leal 48(%edi),%edi movaps %xmm5,%xmm2 - pxor %xmm5,%xmm5 subl $64,%eax - jmp L088cbc_dec_tail_collected -.align 4,0x90 -L083cbc_dec_clear_tail_collected: - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 -L088cbc_dec_tail_collected: +L081cbc_dec_tail_collected: andl $15,%eax - jnz L090cbc_dec_tail_partial + jnz L087cbc_dec_tail_partial movups %xmm2,(%edi) - pxor %xmm0,%xmm0 - jmp L079cbc_ret + jmp L077cbc_ret .align 4,0x90 -L090cbc_dec_tail_partial: +L087cbc_dec_tail_partial: movaps %xmm2,(%esp) - pxor %xmm0,%xmm0 movl $16,%ecx movl %esp,%esi subl %eax,%ecx .long 2767451785 - movdqa %xmm2,(%esp) -L079cbc_ret: +L077cbc_ret: movl 16(%esp),%esp movl 36(%esp),%ebp - pxor %xmm2,%xmm2 - pxor %xmm1,%xmm1 movups %xmm7,(%ebp) - pxor %xmm7,%xmm7 -L074cbc_abort: +L072cbc_abort: popl %edi popl %esi popl %ebx @@ -2038,62 +1949,52 @@ L074cbc_abort: .private_extern __aesni_set_encrypt_key .align 4 __aesni_set_encrypt_key: - pushl %ebp - pushl %ebx testl %eax,%eax - jz L091bad_pointer + jz L088bad_pointer testl %edx,%edx - jz L091bad_pointer - call L092pic -L092pic: - popl %ebx - leal Lkey_const-L092pic(%ebx),%ebx - movl L_OPENSSL_ia32cap_P$non_lazy_ptr-Lkey_const(%ebx),%ebp + jz L088bad_pointer movups (%eax),%xmm0 xorps %xmm4,%xmm4 - movl 4(%ebp),%ebp leal 16(%edx),%edx - andl $268437504,%ebp cmpl $256,%ecx - je L09314rounds + je L08914rounds cmpl $192,%ecx - je L09412rounds + je L09012rounds cmpl $128,%ecx - jne L095bad_keybits + jne L091bad_keybits .align 4,0x90 -L09610rounds: - cmpl $268435456,%ebp - je L09710rounds_alt +L09210rounds: movl $9,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,200,1 - call L098key_128_cold + call L093key_128_cold .byte 102,15,58,223,200,2 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,4 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,8 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,16 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,32 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,64 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,128 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,27 - call L099key_128 + call L094key_128 .byte 102,15,58,223,200,54 - call L099key_128 + call L094key_128 movups %xmm0,(%edx) movl %ecx,80(%edx) - jmp L100good_key + xorl %eax,%eax + ret .align 4,0x90 -L099key_128: +L094key_128: movups %xmm0,(%edx) leal 16(%edx),%edx -L098key_128_cold: +L093key_128_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2102,91 +2003,38 @@ L098key_128_cold: xorps %xmm1,%xmm0 ret .align 4,0x90 -L09710rounds_alt: - movdqa (%ebx),%xmm5 - movl $8,%ecx - movdqa 32(%ebx),%xmm4 - movdqa %xmm0,%xmm2 - movdqu %xmm0,-16(%edx) -L101loop_key128: -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - leal 16(%edx),%edx - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - pxor %xmm2,%xmm0 - movdqu %xmm0,-16(%edx) - movdqa %xmm0,%xmm2 - decl %ecx - jnz L101loop_key128 - movdqa 48(%ebx),%xmm4 -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - pxor %xmm2,%xmm0 - movdqu %xmm0,(%edx) - movdqa %xmm0,%xmm2 -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - pxor %xmm2,%xmm0 - movdqu %xmm0,16(%edx) - movl $9,%ecx - movl %ecx,96(%edx) - jmp L100good_key -.align 4,0x90 -L09412rounds: +L09012rounds: movq 16(%eax),%xmm2 - cmpl $268435456,%ebp - je L10212rounds_alt movl $11,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,202,1 - call L103key_192a_cold + call L095key_192a_cold .byte 102,15,58,223,202,2 - call L104key_192b + call L096key_192b .byte 102,15,58,223,202,4 - call L105key_192a + call L097key_192a .byte 102,15,58,223,202,8 - call L104key_192b + call L096key_192b .byte 102,15,58,223,202,16 - call L105key_192a + call L097key_192a .byte 102,15,58,223,202,32 - call L104key_192b + call L096key_192b .byte 102,15,58,223,202,64 - call L105key_192a + call L097key_192a .byte 102,15,58,223,202,128 - call L104key_192b + call L096key_192b movups %xmm0,(%edx) movl %ecx,48(%edx) - jmp L100good_key + xorl %eax,%eax + ret .align 4,0x90 -L105key_192a: +L097key_192a: movups %xmm0,(%edx) leal 16(%edx),%edx .align 4,0x90 -L103key_192a_cold: +L095key_192a_cold: movaps %xmm2,%xmm5 -L106key_192b_warm: +L098key_192b_warm: shufps $16,%xmm0,%xmm4 movdqa %xmm2,%xmm3 xorps %xmm4,%xmm0 @@ -2200,90 +2048,56 @@ L106key_192b_warm: pxor %xmm3,%xmm2 ret .align 4,0x90 -L104key_192b: +L096key_192b: movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%edx) shufps $78,%xmm2,%xmm3 movups %xmm3,16(%edx) leal 32(%edx),%edx - jmp L106key_192b_warm + jmp L098key_192b_warm .align 4,0x90 -L10212rounds_alt: - movdqa 16(%ebx),%xmm5 - movdqa 32(%ebx),%xmm4 - movl $8,%ecx - movdqu %xmm0,-16(%edx) -L107loop_key192: - movq %xmm2,(%edx) - movdqa %xmm2,%xmm1 -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - pslld $1,%xmm4 - leal 24(%edx),%edx - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - pshufd $255,%xmm0,%xmm3 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pxor %xmm2,%xmm0 - pxor %xmm3,%xmm2 - movdqu %xmm0,-16(%edx) - decl %ecx - jnz L107loop_key192 - movl $11,%ecx - movl %ecx,32(%edx) - jmp L100good_key -.align 4,0x90 -L09314rounds: +L08914rounds: movups 16(%eax),%xmm2 - leal 16(%edx),%edx - cmpl $268435456,%ebp - je L10814rounds_alt movl $13,%ecx + leal 16(%edx),%edx movups %xmm0,-32(%edx) movups %xmm2,-16(%edx) .byte 102,15,58,223,202,1 - call L109key_256a_cold + call L099key_256a_cold .byte 102,15,58,223,200,1 - call L110key_256b + call L100key_256b .byte 102,15,58,223,202,2 - call L111key_256a + call L101key_256a .byte 102,15,58,223,200,2 - call L110key_256b + call L100key_256b .byte 102,15,58,223,202,4 - call L111key_256a + call L101key_256a .byte 102,15,58,223,200,4 - call L110key_256b + call L100key_256b .byte 102,15,58,223,202,8 - call L111key_256a + call L101key_256a .byte 102,15,58,223,200,8 - call L110key_256b + call L100key_256b .byte 102,15,58,223,202,16 - call L111key_256a + call L101key_256a .byte 102,15,58,223,200,16 - call L110key_256b + call L100key_256b .byte 102,15,58,223,202,32 - call L111key_256a + call L101key_256a .byte 102,15,58,223,200,32 - call L110key_256b + call L100key_256b .byte 102,15,58,223,202,64 - call L111key_256a + call L101key_256a movups %xmm0,(%edx) movl %ecx,16(%edx) xorl %eax,%eax - jmp L100good_key + ret .align 4,0x90 -L111key_256a: +L101key_256a: movups %xmm2,(%edx) leal 16(%edx),%edx -L109key_256a_cold: +L099key_256a_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2292,7 +2106,7 @@ L109key_256a_cold: xorps %xmm1,%xmm0 ret .align 4,0x90 -L110key_256b: +L100key_256b: movups %xmm0,(%edx) leal 16(%edx),%edx shufps $16,%xmm2,%xmm4 @@ -2302,70 +2116,13 @@ L110key_256b: shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 ret -.align 4,0x90 -L10814rounds_alt: - movdqa (%ebx),%xmm5 - movdqa 32(%ebx),%xmm4 - movl $7,%ecx - movdqu %xmm0,-32(%edx) - movdqa %xmm2,%xmm1 - movdqu %xmm2,-16(%edx) -L112loop_key256: -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - pslld $1,%xmm4 - pxor %xmm2,%xmm0 - movdqu %xmm0,(%edx) - decl %ecx - jz L113done_key256 - pshufd $255,%xmm0,%xmm2 - pxor %xmm3,%xmm3 -.byte 102,15,56,221,211 - movdqa %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm3,%xmm1 - pxor %xmm1,%xmm2 - movdqu %xmm2,16(%edx) - leal 32(%edx),%edx - movdqa %xmm2,%xmm1 - jmp L112loop_key256 -L113done_key256: - movl $13,%ecx - movl %ecx,16(%edx) -L100good_key: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - xorl %eax,%eax - popl %ebx - popl %ebp - ret .align 2,0x90 -L091bad_pointer: +L088bad_pointer: movl $-1,%eax - popl %ebx - popl %ebp ret .align 2,0x90 -L095bad_keybits: - pxor %xmm0,%xmm0 +L091bad_keybits: movl $-2,%eax - popl %ebx - popl %ebp ret .globl _aesni_set_encrypt_key .private_extern _aesni_set_encrypt_key @@ -2389,7 +2146,7 @@ L_aesni_set_decrypt_key_begin: movl 12(%esp),%edx shll $4,%ecx testl %eax,%eax - jnz L114dec_key_ret + jnz L102dec_key_ret leal 16(%edx,%ecx,1),%eax movups (%edx),%xmm0 movups (%eax),%xmm1 @@ -2397,7 +2154,7 @@ L_aesni_set_decrypt_key_begin: movups %xmm1,(%edx) leal 16(%edx),%edx leal -16(%eax),%eax -L115dec_key_inverse: +L103dec_key_inverse: movups (%edx),%xmm0 movups (%eax),%xmm1 .byte 102,15,56,219,192 @@ -2407,27 +2164,15 @@ L115dec_key_inverse: movups %xmm0,16(%eax) movups %xmm1,-16(%edx) cmpl %edx,%eax - ja L115dec_key_inverse + ja L103dec_key_inverse movups (%edx),%xmm0 .byte 102,15,56,219,192 movups %xmm0,(%edx) - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 xorl %eax,%eax -L114dec_key_ret: +L102dec_key_ret: ret -.align 6,0x90 -Lkey_const: -.long 202313229,202313229,202313229,202313229 -.long 67569157,67569157,67569157,67569157 -.long 1,1,1,1 -.long 27,27,27,27 .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 .byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 .byte 115,108,46,111,114,103,62,0 -.section __IMPORT,__pointers,non_lazy_symbol_pointers -L_OPENSSL_ia32cap_P$non_lazy_ptr: -.indirect_symbol _OPENSSL_ia32cap_P -.long 0 #endif diff --git a/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S b/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S index 69b22c2..032c94d 100644 --- a/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S +++ b/third_party/boringssl/mac-x86_64/crypto/aes/aesni-x86_64.S @@ -19,10 +19,7 @@ L$oop_enc1_1: leaq 16(%rdx),%rdx jnz L$oop_enc1_1 .byte 102,15,56,221,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 .byte 0xf3,0xc3 @@ -44,10 +41,7 @@ L$oop_dec1_2: leaq 16(%rdx),%rdx jnz L$oop_dec1_2 .byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 .byte 0xf3,0xc3 @@ -273,18 +267,21 @@ _aesni_encrypt6: pxor %xmm0,%xmm6 .byte 102,15,56,220,225 pxor %xmm0,%xmm7 - movups (%rcx,%rax,1),%xmm0 addq $16,%rax +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups -16(%rcx,%rax,1),%xmm0 jmp L$enc_loop6_enter .p2align 4 L$enc_loop6: .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 -L$enc_loop6_enter: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 +L$enc_loop6_enter: movups (%rcx,%rax,1),%xmm1 addq $32,%rax .byte 102,15,56,220,208 @@ -327,18 +324,21 @@ _aesni_decrypt6: pxor %xmm0,%xmm6 .byte 102,15,56,222,225 pxor %xmm0,%xmm7 - movups (%rcx,%rax,1),%xmm0 addq $16,%rax +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups -16(%rcx,%rax,1),%xmm0 jmp L$dec_loop6_enter .p2align 4 L$dec_loop6: .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 -L$dec_loop6_enter: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 +L$dec_loop6_enter: movups (%rcx,%rax,1),%xmm1 addq $32,%rax .byte 102,15,56,222,208 @@ -378,18 +378,23 @@ _aesni_encrypt8: leaq 32(%rcx,%rax,1),%rcx negq %rax .byte 102,15,56,220,209 + addq $16,%rax pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 .byte 102,15,56,220,217 + pxor %xmm0,%xmm8 pxor %xmm0,%xmm9 - movups (%rcx,%rax,1),%xmm0 - addq $16,%rax - jmp L$enc_loop8_inner +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 +.byte 102,68,15,56,220,193 +.byte 102,68,15,56,220,201 + movups -16(%rcx,%rax,1),%xmm0 + jmp L$enc_loop8_enter .p2align 4 L$enc_loop8: .byte 102,15,56,220,209 .byte 102,15,56,220,217 -L$enc_loop8_inner: .byte 102,15,56,220,225 .byte 102,15,56,220,233 .byte 102,15,56,220,241 @@ -442,18 +447,23 @@ _aesni_decrypt8: leaq 32(%rcx,%rax,1),%rcx negq %rax .byte 102,15,56,222,209 + addq $16,%rax pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 .byte 102,15,56,222,217 + pxor %xmm0,%xmm8 pxor %xmm0,%xmm9 - movups (%rcx,%rax,1),%xmm0 - addq $16,%rax - jmp L$dec_loop8_inner +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 +.byte 102,68,15,56,222,201 + movups -16(%rcx,%rax,1),%xmm0 + jmp L$dec_loop8_enter .p2align 4 L$dec_loop8: .byte 102,15,56,222,209 .byte 102,15,56,222,217 -L$dec_loop8_inner: .byte 102,15,56,222,225 .byte 102,15,56,222,233 .byte 102,15,56,222,241 @@ -581,7 +591,6 @@ L$ecb_enc_tail: movups 80(%rdi),%xmm7 je L$ecb_enc_six movdqu 96(%rdi),%xmm8 - xorps %xmm9,%xmm9 call _aesni_encrypt8 movups %xmm2,(%rsi) movups %xmm3,16(%rsi) @@ -695,23 +704,15 @@ L$ecb_dec_loop8_enter: jnc L$ecb_dec_loop8 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movq %r11,%rcx movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movl %r10d,%eax movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 movups %xmm7,80(%rsi) - pxor %xmm7,%xmm7 movups %xmm8,96(%rsi) - pxor %xmm8,%xmm8 movups %xmm9,112(%rsi) - pxor %xmm9,%xmm9 leaq 128(%rsi),%rsi addq $128,%rdx jz L$ecb_ret @@ -734,23 +735,14 @@ L$ecb_dec_tail: je L$ecb_dec_six movups 96(%rdi),%xmm8 movups (%rcx),%xmm0 - xorps %xmm9,%xmm9 call _aesni_decrypt8 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 movups %xmm7,80(%rsi) - pxor %xmm7,%xmm7 movups %xmm8,96(%rsi) - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 jmp L$ecb_ret .p2align 4 L$ecb_dec_one: @@ -766,73 +758,49 @@ L$oop_dec1_4: jnz L$oop_dec1_4 .byte 102,15,56,223,209 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 jmp L$ecb_ret .p2align 4 L$ecb_dec_two: call _aesni_decrypt2 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 jmp L$ecb_ret .p2align 4 L$ecb_dec_three: call _aesni_decrypt3 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 jmp L$ecb_ret .p2align 4 L$ecb_dec_four: call _aesni_decrypt4 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 jmp L$ecb_ret .p2align 4 L$ecb_dec_five: xorps %xmm7,%xmm7 call _aesni_decrypt6 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 jmp L$ecb_ret .p2align 4 L$ecb_dec_six: call _aesni_decrypt6 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 movups %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movups %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movups %xmm5,48(%rsi) - pxor %xmm5,%xmm5 movups %xmm6,64(%rsi) - pxor %xmm6,%xmm6 movups %xmm7,80(%rsi) - pxor %xmm7,%xmm7 L$ecb_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 .byte 0xf3,0xc3 .globl _aesni_ccm64_encrypt_blocks @@ -890,13 +858,7 @@ L$ccm64_enc2_loop: leaq 16(%rsi),%rsi jnz L$ccm64_enc_outer - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 movups %xmm3,(%r9) - pxor %xmm3,%xmm3 - pxor %xmm8,%xmm8 - pxor %xmm6,%xmm6 .byte 0xf3,0xc3 .globl _aesni_ccm64_decrypt_blocks @@ -988,13 +950,7 @@ L$oop_enc1_6: leaq 16(%r11),%r11 jnz L$oop_enc1_6 .byte 102,15,56,221,217 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 movups %xmm3,(%r9) - pxor %xmm3,%xmm3 - pxor %xmm8,%xmm8 - pxor %xmm6,%xmm6 .byte 0xf3,0xc3 .globl _aesni_ctr32_encrypt_blocks @@ -1002,43 +958,14 @@ L$oop_enc1_6: .p2align 4 _aesni_ctr32_encrypt_blocks: - cmpq $1,%rdx - jne L$ctr32_bulk - - - - movups (%r8),%xmm2 - movups (%rdi),%xmm3 - movl 240(%rcx),%edx - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -L$oop_enc1_7: -.byte 102,15,56,220,209 - decl %edx - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz L$oop_enc1_7 -.byte 102,15,56,221,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 - movups %xmm2,(%rsi) - xorps %xmm2,%xmm2 - jmp L$ctr32_epilogue - -.p2align 4 -L$ctr32_bulk: leaq (%rsp),%rax pushq %rbp subq $128,%rsp andq $-16,%rsp leaq -8(%rax),%rbp - - + cmpq $1,%rdx + je L$ctr32_one_shortcut movdqu (%r8),%xmm2 movdqu (%rcx),%xmm0 @@ -1429,14 +1356,11 @@ L$ctr32_enc_done: leaq -128(%rcx),%rcx L$ctr32_tail: - - leaq 16(%rcx),%rcx cmpq $4,%rdx jb L$ctr32_loop3 je L$ctr32_loop4 - shll $4,%eax movdqa 96(%rsp),%xmm8 pxor %xmm9,%xmm9 @@ -1539,33 +1463,30 @@ L$ctr32_loop3: movups 32(%rdi),%xmm12 xorps %xmm12,%xmm4 movups %xmm4,32(%rsi) + jmp L$ctr32_done +.p2align 4 +L$ctr32_one_shortcut: + movups (%r8),%xmm2 + movups (%rdi),%xmm10 + movl 240(%rcx),%eax + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + leaq 32(%rcx),%rcx + xorps %xmm0,%xmm2 +L$oop_enc1_7: +.byte 102,15,56,220,209 + decl %eax + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz L$oop_enc1_7 +.byte 102,15,56,221,209 + xorps %xmm10,%xmm2 + movups %xmm2,(%rsi) + jmp L$ctr32_done + +.p2align 4 L$ctr32_done: - xorps %xmm0,%xmm0 - xorl %r11d,%r11d - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - movaps %xmm0,0(%rsp) - pxor %xmm8,%xmm8 - movaps %xmm0,16(%rsp) - pxor %xmm9,%xmm9 - movaps %xmm0,32(%rsp) - pxor %xmm10,%xmm10 - movaps %xmm0,48(%rsp) - pxor %xmm11,%xmm11 - movaps %xmm0,64(%rsp) - pxor %xmm12,%xmm12 - movaps %xmm0,80(%rsp) - pxor %xmm13,%xmm13 - movaps %xmm0,96(%rsp) - pxor %xmm14,%xmm14 - movaps %xmm0,112(%rsp) - pxor %xmm15,%xmm15 leaq (%rbp),%rsp popq %rbp L$ctr32_epilogue: @@ -1837,7 +1758,6 @@ L$xts_enc_loop6: shrl $4,%eax L$xts_enc_short: - movl %eax,%r10d pxor %xmm0,%xmm10 addq $96,%rdx @@ -1866,7 +1786,6 @@ L$xts_enc_short: pxor %xmm12,%xmm4 pxor %xmm13,%xmm5 pxor %xmm14,%xmm6 - pxor %xmm7,%xmm7 call _aesni_encrypt6 @@ -2009,29 +1928,6 @@ L$oop_enc1_10: movups %xmm2,-16(%rsi) L$xts_enc_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - movaps %xmm0,0(%rsp) - pxor %xmm8,%xmm8 - movaps %xmm0,16(%rsp) - pxor %xmm9,%xmm9 - movaps %xmm0,32(%rsp) - pxor %xmm10,%xmm10 - movaps %xmm0,48(%rsp) - pxor %xmm11,%xmm11 - movaps %xmm0,64(%rsp) - pxor %xmm12,%xmm12 - movaps %xmm0,80(%rsp) - pxor %xmm13,%xmm13 - movaps %xmm0,96(%rsp) - pxor %xmm14,%xmm14 - pxor %xmm15,%xmm15 leaq (%rbp),%rsp popq %rbp L$xts_enc_epilogue: @@ -2309,7 +2205,6 @@ L$xts_dec_loop6: shrl $4,%eax L$xts_dec_short: - movl %eax,%r10d pxor %xmm0,%xmm10 pxor %xmm0,%xmm11 @@ -2512,29 +2407,6 @@ L$oop_dec1_14: movups %xmm2,(%rsi) L$xts_dec_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - movaps %xmm0,0(%rsp) - pxor %xmm8,%xmm8 - movaps %xmm0,16(%rsp) - pxor %xmm9,%xmm9 - movaps %xmm0,32(%rsp) - pxor %xmm10,%xmm10 - movaps %xmm0,48(%rsp) - pxor %xmm11,%xmm11 - movaps %xmm0,64(%rsp) - pxor %xmm12,%xmm12 - movaps %xmm0,80(%rsp) - pxor %xmm13,%xmm13 - movaps %xmm0,96(%rsp) - pxor %xmm14,%xmm14 - pxor %xmm15,%xmm15 leaq (%rbp),%rsp popq %rbp L$xts_dec_epilogue: @@ -2584,11 +2456,7 @@ L$oop_enc1_15: jnc L$cbc_enc_loop addq $16,%rdx jnz L$cbc_enc_tail - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 movups %xmm2,(%r8) - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 jmp L$cbc_ret L$cbc_enc_tail: @@ -2608,35 +2476,6 @@ L$cbc_enc_tail: .p2align 4 L$cbc_decrypt: - cmpq $16,%rdx - jne L$cbc_decrypt_bulk - - - - movdqu (%rdi),%xmm2 - movdqu (%r8),%xmm3 - movdqa %xmm2,%xmm4 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -L$oop_dec1_16: -.byte 102,15,56,222,209 - decl %r10d - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz L$oop_dec1_16 -.byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movdqu %xmm4,(%r8) - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 - movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 - jmp L$cbc_ret -.p2align 4 -L$cbc_decrypt_bulk: leaq (%rsp),%rax pushq %rbp subq $16,%rsp @@ -2873,7 +2712,7 @@ L$cbc_dec_done: movaps %xmm9,%xmm2 leaq -112(%rcx),%rcx addq $112,%rdx - jle L$cbc_dec_clear_tail_collected + jle L$cbc_dec_tail_collected movups %xmm9,(%rsi) leaq 16(%rsi),%rsi cmpq $80,%rdx @@ -2892,19 +2731,14 @@ L$cbc_dec_six_or_seven: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 pxor %xmm14,%xmm6 movdqu %xmm5,48(%rsi) - pxor %xmm5,%xmm5 pxor %xmm15,%xmm7 movdqu %xmm6,64(%rsi) - pxor %xmm6,%xmm6 leaq 80(%rsi),%rsi movdqa %xmm7,%xmm2 - pxor %xmm7,%xmm7 jmp L$cbc_dec_tail_collected .p2align 4 @@ -2919,23 +2753,16 @@ L$cbc_dec_seven: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 pxor %xmm14,%xmm6 movdqu %xmm5,48(%rsi) - pxor %xmm5,%xmm5 pxor %xmm15,%xmm7 movdqu %xmm6,64(%rsi) - pxor %xmm6,%xmm6 pxor %xmm9,%xmm8 movdqu %xmm7,80(%rsi) - pxor %xmm7,%xmm7 leaq 96(%rsi),%rsi movdqa %xmm8,%xmm2 - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 jmp L$cbc_dec_tail_collected .p2align 4 @@ -2979,7 +2806,7 @@ L$cbc_dec_loop6_enter: movdqa %xmm7,%xmm2 addq $80,%rdx - jle L$cbc_dec_clear_tail_collected + jle L$cbc_dec_tail_collected movups %xmm7,(%rsi) leaq 16(%rsi),%rsi @@ -3014,17 +2841,12 @@ L$cbc_dec_tail: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 pxor %xmm14,%xmm6 movdqu %xmm5,48(%rsi) - pxor %xmm5,%xmm5 leaq 64(%rsi),%rsi movdqa %xmm6,%xmm2 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 subq $16,%rdx jmp L$cbc_dec_tail_collected @@ -3035,12 +2857,12 @@ L$cbc_dec_one: movups 16(%rcx),%xmm1 leaq 32(%rcx),%rcx xorps %xmm0,%xmm2 -L$oop_dec1_17: +L$oop_dec1_16: .byte 102,15,56,222,209 decl %eax movups (%rcx),%xmm1 leaq 16(%rcx),%rcx - jnz L$oop_dec1_17 + jnz L$oop_dec1_16 .byte 102,15,56,223,209 xorps %xmm10,%xmm2 movaps %xmm11,%xmm10 @@ -3054,7 +2876,6 @@ L$cbc_dec_two: pxor %xmm11,%xmm3 movdqu %xmm2,(%rsi) movdqa %xmm3,%xmm2 - pxor %xmm3,%xmm3 leaq 16(%rsi),%rsi jmp L$cbc_dec_tail_collected .p2align 4 @@ -3067,9 +2888,7 @@ L$cbc_dec_three: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 movdqa %xmm4,%xmm2 - pxor %xmm4,%xmm4 leaq 32(%rsi),%rsi jmp L$cbc_dec_tail_collected .p2align 4 @@ -3082,45 +2901,29 @@ L$cbc_dec_four: movdqu %xmm2,(%rsi) pxor %xmm12,%xmm4 movdqu %xmm3,16(%rsi) - pxor %xmm3,%xmm3 pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) - pxor %xmm4,%xmm4 movdqa %xmm5,%xmm2 - pxor %xmm5,%xmm5 leaq 48(%rsi),%rsi jmp L$cbc_dec_tail_collected .p2align 4 -L$cbc_dec_clear_tail_collected: - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 - pxor %xmm6,%xmm6 - pxor %xmm7,%xmm7 - pxor %xmm8,%xmm8 - pxor %xmm9,%xmm9 L$cbc_dec_tail_collected: movups %xmm10,(%r8) andq $15,%rdx jnz L$cbc_dec_tail_partial movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 jmp L$cbc_dec_ret .p2align 4 L$cbc_dec_tail_partial: movaps %xmm2,(%rsp) - pxor %xmm2,%xmm2 movq $16,%rcx movq %rsi,%rdi subq %rdx,%rcx leaq (%rsp),%rsi .long 0x9066A4F3 - movdqa %xmm2,(%rsp) L$cbc_dec_ret: - xorps %xmm0,%xmm0 - pxor %xmm1,%xmm1 leaq (%rbp),%rsp popq %rbp L$cbc_ret: @@ -3159,9 +2962,7 @@ L$dec_key_inverse: movups (%rdx),%xmm0 .byte 102,15,56,219,192 - pxor %xmm1,%xmm1 movups %xmm0,(%rdi) - pxor %xmm0,%xmm0 L$dec_key_ret: addq $8,%rsp .byte 0xf3,0xc3 @@ -3180,10 +2981,8 @@ __aesni_set_encrypt_key: testq %rdx,%rdx jz L$enc_key_ret - movl $268437504,%r10d movups (%rdi),%xmm0 xorps %xmm4,%xmm4 - andl _OPENSSL_ia32cap_P+4(%rip),%r10d leaq 16(%rdx),%rax cmpl $256,%esi je L$14rounds @@ -3194,9 +2993,6 @@ __aesni_set_encrypt_key: L$10rounds: movl $9,%esi - cmpl $268435456,%r10d - je L$10rounds_alt - movups %xmm0,(%rdx) .byte 102,15,58,223,200,1 call L$key_expansion_128_cold @@ -3224,79 +3020,9 @@ L$10rounds: jmp L$enc_key_ret .p2align 4 -L$10rounds_alt: - movdqa L$key_rotate(%rip),%xmm5 - movl $8,%r10d - movdqa L$key_rcon1(%rip),%xmm4 - movdqa %xmm0,%xmm2 - movdqu %xmm0,(%rdx) - jmp L$oop_key128 - -.p2align 4 -L$oop_key128: -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - leaq 16(%rax),%rax - - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - - pxor %xmm2,%xmm0 - movdqu %xmm0,-16(%rax) - movdqa %xmm0,%xmm2 - - decl %r10d - jnz L$oop_key128 - - movdqa L$key_rcon1b(%rip),%xmm4 - -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - pslld $1,%xmm4 - - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - - pxor %xmm2,%xmm0 - movdqu %xmm0,(%rax) - - movdqa %xmm0,%xmm2 -.byte 102,15,56,0,197 -.byte 102,15,56,221,196 - - movdqa %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm2,%xmm3 - pslldq $4,%xmm2 - pxor %xmm3,%xmm2 - - pxor %xmm2,%xmm0 - movdqu %xmm0,16(%rax) - - movl %esi,96(%rax) - xorl %eax,%eax - jmp L$enc_key_ret - -.p2align 4 L$12rounds: movq 16(%rdi),%xmm2 movl $11,%esi - cmpl $268435456,%r10d - je L$12rounds_alt - movups %xmm0,(%rdx) .byte 102,15,58,223,202,1 call L$key_expansion_192a_cold @@ -3320,54 +3046,10 @@ L$12rounds: jmp L$enc_key_ret .p2align 4 -L$12rounds_alt: - movdqa L$key_rotate192(%rip),%xmm5 - movdqa L$key_rcon1(%rip),%xmm4 - movl $8,%r10d - movdqu %xmm0,(%rdx) - jmp L$oop_key192 - -.p2align 4 -L$oop_key192: - movq %xmm2,0(%rax) - movdqa %xmm2,%xmm1 -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - pslld $1,%xmm4 - leaq 24(%rax),%rax - - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - - pshufd $255,%xmm0,%xmm3 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - - pxor %xmm2,%xmm0 - pxor %xmm3,%xmm2 - movdqu %xmm0,-16(%rax) - - decl %r10d - jnz L$oop_key192 - - movl %esi,32(%rax) - xorl %eax,%eax - jmp L$enc_key_ret - -.p2align 4 L$14rounds: movups 16(%rdi),%xmm2 movl $13,%esi leaq 16(%rax),%rax - cmpl $268435456,%r10d - je L$14rounds_alt - movups %xmm0,(%rdx) movups %xmm2,16(%rdx) .byte 102,15,58,223,202,1 @@ -3402,69 +3084,9 @@ L$14rounds: jmp L$enc_key_ret .p2align 4 -L$14rounds_alt: - movdqa L$key_rotate(%rip),%xmm5 - movdqa L$key_rcon1(%rip),%xmm4 - movl $7,%r10d - movdqu %xmm0,0(%rdx) - movdqa %xmm2,%xmm1 - movdqu %xmm2,16(%rdx) - jmp L$oop_key256 - -.p2align 4 -L$oop_key256: -.byte 102,15,56,0,213 -.byte 102,15,56,221,212 - - movdqa %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm0,%xmm3 - pslldq $4,%xmm0 - pxor %xmm3,%xmm0 - pslld $1,%xmm4 - - pxor %xmm2,%xmm0 - movdqu %xmm0,(%rax) - - decl %r10d - jz L$done_key256 - - pshufd $255,%xmm0,%xmm2 - pxor %xmm3,%xmm3 -.byte 102,15,56,221,211 - - movdqa %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm1,%xmm3 - pslldq $4,%xmm1 - pxor %xmm3,%xmm1 - - pxor %xmm1,%xmm2 - movdqu %xmm2,16(%rax) - leaq 32(%rax),%rax - movdqa %xmm2,%xmm1 - - jmp L$oop_key256 - -L$done_key256: - movl %esi,16(%rax) - xorl %eax,%eax - jmp L$enc_key_ret - -.p2align 4 L$bad_keybits: movq $-2,%rax L$enc_key_ret: - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - pxor %xmm4,%xmm4 - pxor %xmm5,%xmm5 addq $8,%rsp .byte 0xf3,0xc3 L$SEH_end_set_encrypt_key: @@ -3550,14 +3172,6 @@ L$xts_magic: .long 0x87,0,1,0 L$increment1: .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 -L$key_rotate: -.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d -L$key_rotate192: -.long 0x04070605,0x04070605,0x04070605,0x04070605 -L$key_rcon1: -.long 1,1,1,1 -L$key_rcon1b: -.long 0x1b,0x1b,0x1b,0x1b .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .p2align 6 diff --git a/third_party/boringssl/update_gypi_and_asm.py b/third_party/boringssl/update_gypi_and_asm.py new file mode 100644 index 0000000..30558ed --- /dev/null +++ b/third_party/boringssl/update_gypi_and_asm.py @@ -0,0 +1,259 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can b +# found in the LICENSE file. + +"""Enumerates the BoringSSL source in src/ and generates two gypi files: + boringssl.gypi and boringssl_tests.gypi.""" + +import os +import subprocess +import sys + + +# OS_ARCH_COMBOS maps from OS and platform to the OpenSSL assembly "style" for +# that platform and the extension used by asm files. +OS_ARCH_COMBOS = [ + ('linux', 'arm', 'linux32', [], 'S'), + ('linux', 'aarch64', 'linux64', [], 'S'), + ('linux', 'x86', 'elf', ['-fPIC', '-DOPENSSL_IA32_SSE2'], 'S'), + ('linux', 'x86_64', 'elf', [], 'S'), + ('mac', 'x86', 'macosx', ['-fPIC', '-DOPENSSL_IA32_SSE2'], 'S'), + ('mac', 'x86_64', 'macosx', [], 'S'), + ('win', 'x86', 'win32n', ['-DOPENSSL_IA32_SSE2'], 'asm'), + ('win', 'x86_64', 'nasm', [], 'asm'), +] + +# NON_PERL_FILES enumerates assembly files that are not processed by the +# perlasm system. +NON_PERL_FILES = { + ('linux', 'arm'): [ + 'src/crypto/poly1305/poly1305_arm_asm.S', + 'src/crypto/chacha/chacha_vec_arm.S', + 'src/crypto/cpu-arm-asm.S', + ], +} + +FILE_HEADER = """# Copyright (c) 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This file is created by update_gypi_and_asm.py. Do not edit manually. + +""" + + +def FindCMakeFiles(directory): + """Returns list of all CMakeLists.txt files recursively in directory.""" + cmakefiles = [] + + for (path, _, filenames) in os.walk(directory): + for filename in filenames: + if filename == 'CMakeLists.txt': + cmakefiles.append(os.path.join(path, filename)) + + return cmakefiles + + +def NoTests(dent, is_dir): + """Filter function that can be passed to FindCFiles in order to remove test + sources.""" + if is_dir: + return dent != 'test' + return 'test.' not in dent and not dent.startswith('example_') + + +def OnlyTests(dent, is_dir): + """Filter function that can be passed to FindCFiles in order to remove + non-test sources.""" + if is_dir: + return True + return '_test.' in dent or dent.startswith('example_') + + +def FindCFiles(directory, filter_func): + """Recurses through directory and returns a list of paths to all the C source + files that pass filter_func.""" + cfiles = [] + + for (path, dirnames, filenames) in os.walk(directory): + for filename in filenames: + if not filename.endswith('.c') and not filename.endswith('.cc'): + continue + if not filter_func(filename, False): + continue + cfiles.append(os.path.join(path, filename)) + + for (i, dirname) in enumerate(dirnames): + if not filter_func(dirname, True): + del dirnames[i] + + return cfiles + + +def ExtractPerlAsmFromCMakeFile(cmakefile): + """Parses the contents of the CMakeLists.txt file passed as an argument and + returns a list of all the perlasm() directives found in the file.""" + perlasms = [] + with open(cmakefile) as f: + for line in f: + line = line.strip() + if not line.startswith('perlasm('): + continue + if not line.endswith(')'): + raise ValueError('Bad perlasm line in %s' % cmakefile) + # Remove "perlasm(" from start and ")" from end + params = line[8:-1].split() + if len(params) < 2: + raise ValueError('Bad perlasm line in %s' % cmakefile) + perlasms.append({ + 'extra_args': params[2:], + 'input': os.path.join(os.path.dirname(cmakefile), params[1]), + 'output': os.path.join(os.path.dirname(cmakefile), params[0]), + }) + + return perlasms + + +def ReadPerlAsmOperations(): + """Returns a list of all perlasm() directives found in CMake config files in + src/.""" + perlasms = [] + cmakefiles = FindCMakeFiles('src') + + for cmakefile in cmakefiles: + perlasms.extend(ExtractPerlAsmFromCMakeFile(cmakefile)) + + return perlasms + + +def PerlAsm(output_filename, input_filename, perlasm_style, extra_args): + """Runs the a perlasm script and puts the output into output_filename.""" + base_dir = os.path.dirname(output_filename) + if not os.path.isdir(base_dir): + os.makedirs(base_dir) + output = subprocess.check_output( + ['perl', input_filename, perlasm_style] + extra_args) + with open(output_filename, 'w+') as out_file: + out_file.write(output) + + +def ArchForAsmFilename(filename): + """Returns the architectures that a given asm file should be compiled for + based on substrings in the filename.""" + + if 'x86_64' in filename or 'avx2' in filename: + return ['x86_64'] + elif ('x86' in filename and 'x86_64' not in filename) or '586' in filename: + return ['x86'] + elif 'armx' in filename: + return ['arm', 'aarch64'] + elif 'armv8' in filename: + return ['aarch64'] + elif 'arm' in filename: + return ['arm'] + else: + raise ValueError('Unknown arch for asm filename: ' + filename) + + +def WriteAsmFiles(perlasms): + """Generates asm files from perlasm directives for each supported OS x + platform combination.""" + asmfiles = {} + + for osarch in OS_ARCH_COMBOS: + (osname, arch, perlasm_style, extra_args, asm_ext) = osarch + key = (osname, arch) + outDir = '%s-%s' % key + + for perlasm in perlasms: + filename = os.path.basename(perlasm['input']) + output = perlasm['output'] + if not output.startswith('src'): + raise ValueError('output missing src: %s' % output) + output = os.path.join(outDir, output[4:]) + output = output.replace('${ASM_EXT}', asm_ext) + + if arch in ArchForAsmFilename(filename): + PerlAsm(output, perlasm['input'], perlasm_style, + perlasm['extra_args'] + extra_args) + asmfiles.setdefault(key, []).append(output) + + for (key, non_perl_asm_files) in NON_PERL_FILES.iteritems(): + asmfiles.setdefault(key, []).extend(non_perl_asm_files) + + return asmfiles + + +def PrintVariableSection(out, name, files): + out.write(' \'%s\': [\n' % name) + for f in sorted(files): + out.write(' \'%s\',\n' % f) + out.write(' ],\n') + + +def main(): + crypto_c_files = FindCFiles(os.path.join('src', 'crypto'), NoTests) + ssl_c_files = FindCFiles(os.path.join('src', 'ssl'), NoTests) + + # Generate err_data.c + with open('err_data.c', 'w+') as err_data: + subprocess.check_call(['go', 'run', 'err_data_generate.go'], + cwd=os.path.join('src', 'crypto', 'err'), + stdout=err_data) + crypto_c_files.append('err_data.c') + + with open('boringssl.gypi', 'w+') as gypi: + gypi.write(FILE_HEADER + '{\n \'variables\': {\n') + + PrintVariableSection( + gypi, 'boringssl_lib_sources', crypto_c_files + ssl_c_files) + + perlasms = ReadPerlAsmOperations() + + for ((osname, arch), asm_files) in sorted( + WriteAsmFiles(perlasms).iteritems()): + PrintVariableSection(gypi, 'boringssl_%s_%s_sources' % + (osname, arch), asm_files) + + gypi.write(' }\n}\n') + + test_c_files = FindCFiles(os.path.join('src', 'crypto'), OnlyTests) + test_c_files += FindCFiles(os.path.join('src', 'ssl'), OnlyTests) + + with open('boringssl_tests.gypi', 'w+') as test_gypi: + test_gypi.write(FILE_HEADER + '{\n \'targets\': [\n') + + test_names = [] + for test in sorted(test_c_files): + test_name = 'boringssl_%s' % os.path.splitext(os.path.basename(test))[0] + test_gypi.write(""" { + 'target_name': '%s', + 'type': 'executable', + 'dependencies': [ + 'boringssl.gyp:boringssl', + ], + 'sources': [ + '%s', + ], + # TODO(davidben): Fix size_t truncations in BoringSSL. + # https://crbug.com/429039 + 'msvs_disabled_warnings': [ 4267, ], + },\n""" % (test_name, test)) + test_names.append(test_name) + + test_names.sort() + + test_gypi.write(""" ], + 'variables': { + 'boringssl_test_targets': [\n""") + + for test in test_names: + test_gypi.write(""" '%s',\n""" % test) + + test_gypi.write(' ],\n }\n}\n') + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/third_party/boringssl/win-x86/crypto/aes/aesni-x86.asm b/third_party/boringssl/win-x86/crypto/aes/aesni-x86.asm index a9a5956..845bb35 100644 --- a/third_party/boringssl/win-x86/crypto/aes/aesni-x86.asm +++ b/third_party/boringssl/win-x86/crypto/aes/aesni-x86.asm @@ -14,7 +14,6 @@ section .text code align=64 %else section .text code %endif -;extern _OPENSSL_ia32cap_P global _aesni_encrypt align 16 _aesni_encrypt: @@ -35,10 +34,7 @@ db 102,15,56,220,209 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 @@ -60,10 +56,7 @@ db 102,15,56,222,209 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: @@ -263,15 +256,17 @@ db 102,15,56,220,217 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 +db 102,15,56,220,233 +db 102,15,56,220,241 +db 102,15,56,220,249 + movups xmm0,[ecx*1+edx-16] + jmp NEAR L$_aesni_encrypt6_enter align 16 -L$009enc6_loop: +L$008enc6_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 @@ -285,7 +280,7 @@ 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 + jnz NEAR L$008enc6_loop db 102,15,56,220,209 db 102,15,56,220,217 db 102,15,56,220,225 @@ -315,15 +310,17 @@ db 102,15,56,222,217 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 +db 102,15,56,222,233 +db 102,15,56,222,241 +db 102,15,56,222,249 + movups xmm0,[ecx*1+edx-16] + jmp NEAR L$_aesni_decrypt6_enter align 16 -L$011dec6_loop: +L$009dec6_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 @@ -337,7 +334,7 @@ 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 + jnz NEAR L$009dec6_loop db 102,15,56,222,209 db 102,15,56,222,217 db 102,15,56,222,225 @@ -365,14 +362,14 @@ L$_aesni_ecb_encrypt_begin: mov edx,DWORD [32+esp] mov ebx,DWORD [36+esp] and eax,-16 - jz NEAR L$012ecb_ret + jz NEAR L$010ecb_ret mov ecx,DWORD [240+edx] test ebx,ebx - jz NEAR L$013ecb_decrypt + jz NEAR L$011ecb_decrypt mov ebp,edx mov ebx,ecx cmp eax,96 - jb NEAR L$014ecb_enc_tail + jb NEAR L$012ecb_enc_tail movdqu xmm2,[esi] movdqu xmm3,[16+esi] movdqu xmm4,[32+esi] @@ -381,9 +378,9 @@ L$_aesni_ecb_encrypt_begin: movdqu xmm7,[80+esi] lea esi,[96+esi] sub eax,96 - jmp NEAR L$015ecb_enc_loop6_enter + jmp NEAR L$013ecb_enc_loop6_enter align 16 -L$016ecb_enc_loop6: +L$014ecb_enc_loop6: movups [edi],xmm2 movdqu xmm2,[esi] movups [16+edi],xmm3 @@ -398,12 +395,12 @@ L$016ecb_enc_loop6: lea edi,[96+edi] movdqu xmm7,[80+esi] lea esi,[96+esi] -L$015ecb_enc_loop6_enter: +L$013ecb_enc_loop6_enter: call __aesni_encrypt6 mov edx,ebp mov ecx,ebx sub eax,96 - jnc NEAR L$016ecb_enc_loop6 + jnc NEAR L$014ecb_enc_loop6 movups [edi],xmm2 movups [16+edi],xmm3 movups [32+edi],xmm4 @@ -412,18 +409,18 @@ L$015ecb_enc_loop6_enter: movups [80+edi],xmm7 lea edi,[96+edi] add eax,96 - jz NEAR L$012ecb_ret -L$014ecb_enc_tail: + jz NEAR L$010ecb_ret +L$012ecb_enc_tail: movups xmm2,[esi] cmp eax,32 - jb NEAR L$017ecb_enc_one + jb NEAR L$015ecb_enc_one movups xmm3,[16+esi] - je NEAR L$018ecb_enc_two + je NEAR L$016ecb_enc_two movups xmm4,[32+esi] cmp eax,64 - jb NEAR L$019ecb_enc_three + jb NEAR L$017ecb_enc_three movups xmm5,[48+esi] - je NEAR L$020ecb_enc_four + je NEAR L$018ecb_enc_four movups xmm6,[64+esi] xorps xmm7,xmm7 call __aesni_encrypt6 @@ -432,49 +429,49 @@ L$014ecb_enc_tail: movups [32+edi],xmm4 movups [48+edi],xmm5 movups [64+edi],xmm6 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$017ecb_enc_one: +L$015ecb_enc_one: movups xmm0,[edx] movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$021enc1_loop_3: +L$019enc1_loop_3: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$021enc1_loop_3 + jnz NEAR L$019enc1_loop_3 db 102,15,56,221,209 movups [edi],xmm2 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$018ecb_enc_two: +L$016ecb_enc_two: call __aesni_encrypt2 movups [edi],xmm2 movups [16+edi],xmm3 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$019ecb_enc_three: +L$017ecb_enc_three: call __aesni_encrypt3 movups [edi],xmm2 movups [16+edi],xmm3 movups [32+edi],xmm4 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$020ecb_enc_four: +L$018ecb_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 + jmp NEAR L$010ecb_ret align 16 -L$013ecb_decrypt: +L$011ecb_decrypt: mov ebp,edx mov ebx,ecx cmp eax,96 - jb NEAR L$022ecb_dec_tail + jb NEAR L$020ecb_dec_tail movdqu xmm2,[esi] movdqu xmm3,[16+esi] movdqu xmm4,[32+esi] @@ -483,9 +480,9 @@ L$013ecb_decrypt: movdqu xmm7,[80+esi] lea esi,[96+esi] sub eax,96 - jmp NEAR L$023ecb_dec_loop6_enter + jmp NEAR L$021ecb_dec_loop6_enter align 16 -L$024ecb_dec_loop6: +L$022ecb_dec_loop6: movups [edi],xmm2 movdqu xmm2,[esi] movups [16+edi],xmm3 @@ -500,12 +497,12 @@ L$024ecb_dec_loop6: lea edi,[96+edi] movdqu xmm7,[80+esi] lea esi,[96+esi] -L$023ecb_dec_loop6_enter: +L$021ecb_dec_loop6_enter: call __aesni_decrypt6 mov edx,ebp mov ecx,ebx sub eax,96 - jnc NEAR L$024ecb_dec_loop6 + jnc NEAR L$022ecb_dec_loop6 movups [edi],xmm2 movups [16+edi],xmm3 movups [32+edi],xmm4 @@ -514,18 +511,18 @@ L$023ecb_dec_loop6_enter: movups [80+edi],xmm7 lea edi,[96+edi] add eax,96 - jz NEAR L$012ecb_ret -L$022ecb_dec_tail: + jz NEAR L$010ecb_ret +L$020ecb_dec_tail: movups xmm2,[esi] cmp eax,32 - jb NEAR L$025ecb_dec_one + jb NEAR L$023ecb_dec_one movups xmm3,[16+esi] - je NEAR L$026ecb_dec_two + je NEAR L$024ecb_dec_two movups xmm4,[32+esi] cmp eax,64 - jb NEAR L$027ecb_dec_three + jb NEAR L$025ecb_dec_three movups xmm5,[48+esi] - je NEAR L$028ecb_dec_four + je NEAR L$026ecb_dec_four movups xmm6,[64+esi] xorps xmm7,xmm7 call __aesni_decrypt6 @@ -534,51 +531,43 @@ L$022ecb_dec_tail: movups [32+edi],xmm4 movups [48+edi],xmm5 movups [64+edi],xmm6 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$025ecb_dec_one: +L$023ecb_dec_one: movups xmm0,[edx] movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$029dec1_loop_4: +L$027dec1_loop_4: db 102,15,56,222,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$029dec1_loop_4 + jnz NEAR L$027dec1_loop_4 db 102,15,56,223,209 movups [edi],xmm2 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$026ecb_dec_two: +L$024ecb_dec_two: call __aesni_decrypt2 movups [edi],xmm2 movups [16+edi],xmm3 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$027ecb_dec_three: +L$025ecb_dec_three: call __aesni_decrypt3 movups [edi],xmm2 movups [16+edi],xmm3 movups [32+edi],xmm4 - jmp NEAR L$012ecb_ret + jmp NEAR L$010ecb_ret align 16 -L$028ecb_dec_four: +L$026ecb_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 +L$010ecb_ret: pop edi pop esi pop ebx @@ -623,7 +612,7 @@ L$_aesni_ccm64_encrypt_blocks_begin: lea edx,[32+ecx*1+edx] sub ebx,ecx db 102,15,56,0,253 -L$030ccm64_enc_outer: +L$028ccm64_enc_outer: movups xmm0,[ebp] mov ecx,ebx movups xmm6,[esi] @@ -632,7 +621,7 @@ L$030ccm64_enc_outer: xorps xmm0,xmm6 xorps xmm3,xmm0 movups xmm0,[32+ebp] -L$031ccm64_enc2_loop: +L$029ccm64_enc2_loop: db 102,15,56,220,209 db 102,15,56,220,217 movups xmm1,[ecx*1+edx] @@ -640,7 +629,7 @@ db 102,15,56,220,217 db 102,15,56,220,208 db 102,15,56,220,216 movups xmm0,[ecx*1+edx-16] - jnz NEAR L$031ccm64_enc2_loop + jnz NEAR L$029ccm64_enc2_loop db 102,15,56,220,209 db 102,15,56,220,217 paddq xmm7,[16+esp] @@ -653,18 +642,10 @@ db 102,15,56,221,216 movups [edi],xmm6 db 102,15,56,0,213 lea edi,[16+edi] - jnz NEAR L$030ccm64_enc_outer + jnz NEAR L$028ccm64_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 @@ -710,12 +691,12 @@ db 102,15,56,0,253 movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$032enc1_loop_5: +L$030enc1_loop_5: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$032enc1_loop_5 + jnz NEAR L$030enc1_loop_5 db 102,15,56,221,209 shl ebx,4 mov ecx,16 @@ -725,16 +706,16 @@ db 102,15,56,221,209 sub ecx,ebx lea edx,[32+ebx*1+ebp] mov ebx,ecx - jmp NEAR L$033ccm64_dec_outer + jmp NEAR L$031ccm64_dec_outer align 16 -L$033ccm64_dec_outer: +L$031ccm64_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 + jz NEAR L$032ccm64_dec_break movups xmm0,[ebp] mov ecx,ebx movups xmm1,[16+ebp] @@ -742,7 +723,7 @@ db 102,15,56,0,213 xorps xmm2,xmm0 xorps xmm3,xmm6 movups xmm0,[32+ebp] -L$035ccm64_dec2_loop: +L$033ccm64_dec2_loop: db 102,15,56,220,209 db 102,15,56,220,217 movups xmm1,[ecx*1+edx] @@ -750,7 +731,7 @@ db 102,15,56,220,217 db 102,15,56,220,208 db 102,15,56,220,216 movups xmm0,[ecx*1+edx-16] - jnz NEAR L$035ccm64_dec2_loop + jnz NEAR L$033ccm64_dec2_loop movups xmm6,[esi] paddq xmm7,[16+esp] db 102,15,56,220,209 @@ -758,9 +739,9 @@ 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 + jmp NEAR L$031ccm64_dec_outer align 16 -L$034ccm64_dec_break: +L$032ccm64_dec_break: mov ecx,DWORD [240+ebp] mov edx,ebp movups xmm0,[edx] @@ -768,24 +749,16 @@ L$034ccm64_dec_break: xorps xmm6,xmm0 lea edx,[32+edx] xorps xmm3,xmm6 -L$036enc1_loop_6: +L$034enc1_loop_6: db 102,15,56,220,217 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$036enc1_loop_6 + jnz NEAR L$034enc1_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 @@ -809,7 +782,7 @@ L$_aesni_ctr32_encrypt_blocks_begin: and esp,-16 mov DWORD [80+esp],ebp cmp eax,1 - je NEAR L$037ctr32_one_shortcut + je NEAR L$035ctr32_one_shortcut movdqu xmm7,[ebx] mov DWORD [esp],202182159 mov DWORD [4+esp],134810123 @@ -847,7 +820,7 @@ db 102,15,56,0,202 pshufd xmm2,xmm0,192 pshufd xmm3,xmm0,128 cmp eax,6 - jb NEAR L$038ctr32_tail + jb NEAR L$036ctr32_tail pxor xmm7,xmm6 shl ecx,4 mov ebx,16 @@ -856,9 +829,9 @@ db 102,15,56,0,202 sub ebx,ecx lea edx,[32+ecx*1+edx] sub eax,6 - jmp NEAR L$039ctr32_loop6 + jmp NEAR L$037ctr32_loop6 align 16 -L$039ctr32_loop6: +L$037ctr32_loop6: pshufd xmm4,xmm0,64 movdqa xmm0,[32+esp] pshufd xmm5,xmm1,192 @@ -912,27 +885,27 @@ db 102,15,56,0,202 lea edi,[96+edi] pshufd xmm3,xmm0,128 sub eax,6 - jnc NEAR L$039ctr32_loop6 + jnc NEAR L$037ctr32_loop6 add eax,6 - jz NEAR L$040ctr32_ret + jz NEAR L$038ctr32_ret movdqu xmm7,[ebp] mov edx,ebp pxor xmm7,[32+esp] mov ecx,DWORD [240+ebp] -L$038ctr32_tail: +L$036ctr32_tail: por xmm2,xmm7 cmp eax,2 - jb NEAR L$041ctr32_one + jb NEAR L$039ctr32_one pshufd xmm4,xmm0,64 por xmm3,xmm7 - je NEAR L$042ctr32_two + je NEAR L$040ctr32_two pshufd xmm5,xmm1,192 por xmm4,xmm7 cmp eax,4 - jb NEAR L$043ctr32_three + jb NEAR L$041ctr32_three pshufd xmm6,xmm1,128 por xmm5,xmm7 - je NEAR L$044ctr32_four + je NEAR L$042ctr32_four por xmm6,xmm7 call __aesni_encrypt6 movups xmm1,[esi] @@ -950,29 +923,29 @@ L$038ctr32_tail: movups [32+edi],xmm4 movups [48+edi],xmm5 movups [64+edi],xmm6 - jmp NEAR L$040ctr32_ret + jmp NEAR L$038ctr32_ret align 16 -L$037ctr32_one_shortcut: +L$035ctr32_one_shortcut: movups xmm2,[ebx] mov ecx,DWORD [240+edx] -L$041ctr32_one: +L$039ctr32_one: movups xmm0,[edx] movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$045enc1_loop_7: +L$043enc1_loop_7: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$045enc1_loop_7 + jnz NEAR L$043enc1_loop_7 db 102,15,56,221,209 movups xmm6,[esi] xorps xmm6,xmm2 movups [edi],xmm6 - jmp NEAR L$040ctr32_ret + jmp NEAR L$038ctr32_ret align 16 -L$042ctr32_two: +L$040ctr32_two: call __aesni_encrypt2 movups xmm5,[esi] movups xmm6,[16+esi] @@ -980,9 +953,9 @@ L$042ctr32_two: xorps xmm3,xmm6 movups [edi],xmm2 movups [16+edi],xmm3 - jmp NEAR L$040ctr32_ret + jmp NEAR L$038ctr32_ret align 16 -L$043ctr32_three: +L$041ctr32_three: call __aesni_encrypt3 movups xmm5,[esi] movups xmm6,[16+esi] @@ -993,9 +966,9 @@ L$043ctr32_three: xorps xmm4,xmm7 movups [16+edi],xmm3 movups [32+edi],xmm4 - jmp NEAR L$040ctr32_ret + jmp NEAR L$038ctr32_ret align 16 -L$044ctr32_four: +L$042ctr32_four: call __aesni_encrypt4 movups xmm6,[esi] movups xmm7,[16+esi] @@ -1009,18 +982,7 @@ L$044ctr32_four: 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 +L$038ctr32_ret: mov esp,DWORD [80+esp] pop edi pop esi @@ -1043,12 +1005,12 @@ L$_aesni_xts_encrypt_begin: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$046enc1_loop_8: +L$044enc1_loop_8: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$046enc1_loop_8 + jnz NEAR L$044enc1_loop_8 db 102,15,56,221,209 mov esi,DWORD [20+esp] mov edi,DWORD [24+esp] @@ -1072,14 +1034,14 @@ db 102,15,56,221,209 mov ebp,edx mov ebx,ecx sub eax,96 - jc NEAR L$047xts_enc_short + jc NEAR L$045xts_enc_short shl ecx,4 mov ebx,16 sub ebx,ecx lea edx,[32+ecx*1+edx] - jmp NEAR L$048xts_enc_loop6 + jmp NEAR L$046xts_enc_loop6 align 16 -L$048xts_enc_loop6: +L$046xts_enc_loop6: pshufd xmm2,xmm0,19 pxor xmm0,xmm0 movdqa [esp],xmm1 @@ -1168,23 +1130,23 @@ db 102,15,56,220,249 pcmpgtd xmm0,xmm1 pxor xmm1,xmm2 sub eax,96 - jnc NEAR L$048xts_enc_loop6 + jnc NEAR L$046xts_enc_loop6 mov ecx,DWORD [240+ebp] mov edx,ebp mov ebx,ecx -L$047xts_enc_short: +L$045xts_enc_short: add eax,96 - jz NEAR L$049xts_enc_done6x + jz NEAR L$047xts_enc_done6x movdqa xmm5,xmm1 cmp eax,32 - jb NEAR L$050xts_enc_one + jb NEAR L$048xts_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 + je NEAR L$049xts_enc_two pshufd xmm2,xmm0,19 pxor xmm0,xmm0 movdqa xmm6,xmm1 @@ -1193,7 +1155,7 @@ L$047xts_enc_short: pcmpgtd xmm0,xmm1 pxor xmm1,xmm2 cmp eax,64 - jb NEAR L$052xts_enc_three + jb NEAR L$050xts_enc_three pshufd xmm2,xmm0,19 pxor xmm0,xmm0 movdqa xmm7,xmm1 @@ -1203,7 +1165,7 @@ L$047xts_enc_short: pxor xmm1,xmm2 movdqa [esp],xmm5 movdqa [16+esp],xmm6 - je NEAR L$053xts_enc_four + je NEAR L$051xts_enc_four movdqa [32+esp],xmm7 pshufd xmm7,xmm0,19 movdqa [48+esp],xmm1 @@ -1235,9 +1197,9 @@ L$047xts_enc_short: movups [48+edi],xmm5 movups [64+edi],xmm6 lea edi,[80+edi] - jmp NEAR L$054xts_enc_done + jmp NEAR L$052xts_enc_done align 16 -L$050xts_enc_one: +L$048xts_enc_one: movups xmm2,[esi] lea esi,[16+esi] xorps xmm2,xmm5 @@ -1245,20 +1207,20 @@ L$050xts_enc_one: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$055enc1_loop_9: +L$053enc1_loop_9: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$055enc1_loop_9 + jnz NEAR L$053enc1_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 + jmp NEAR L$052xts_enc_done align 16 -L$051xts_enc_two: +L$049xts_enc_two: movaps xmm6,xmm1 movups xmm2,[esi] movups xmm3,[16+esi] @@ -1272,9 +1234,9 @@ L$051xts_enc_two: movups [16+edi],xmm3 lea edi,[32+edi] movdqa xmm1,xmm6 - jmp NEAR L$054xts_enc_done + jmp NEAR L$052xts_enc_done align 16 -L$052xts_enc_three: +L$050xts_enc_three: movaps xmm7,xmm1 movups xmm2,[esi] movups xmm3,[16+esi] @@ -1292,9 +1254,9 @@ L$052xts_enc_three: movups [32+edi],xmm4 lea edi,[48+edi] movdqa xmm1,xmm7 - jmp NEAR L$054xts_enc_done + jmp NEAR L$052xts_enc_done align 16 -L$053xts_enc_four: +L$051xts_enc_four: movaps xmm6,xmm1 movups xmm2,[esi] movups xmm3,[16+esi] @@ -1316,28 +1278,28 @@ L$053xts_enc_four: movups [48+edi],xmm5 lea edi,[64+edi] movdqa xmm1,xmm6 - jmp NEAR L$054xts_enc_done + jmp NEAR L$052xts_enc_done align 16 -L$049xts_enc_done6x: +L$047xts_enc_done6x: mov eax,DWORD [112+esp] and eax,15 - jz NEAR L$056xts_enc_ret + jz NEAR L$054xts_enc_ret movdqa xmm5,xmm1 mov DWORD [112+esp],eax - jmp NEAR L$057xts_enc_steal + jmp NEAR L$055xts_enc_steal align 16 -L$054xts_enc_done: +L$052xts_enc_done: mov eax,DWORD [112+esp] pxor xmm0,xmm0 and eax,15 - jz NEAR L$056xts_enc_ret + jz NEAR L$054xts_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: +L$055xts_enc_steal: movzx ecx,BYTE [esi] movzx edx,BYTE [edi-16] lea esi,[1+esi] @@ -1345,7 +1307,7 @@ L$057xts_enc_steal: mov BYTE [edi],dl lea edi,[1+edi] sub eax,1 - jnz NEAR L$057xts_enc_steal + jnz NEAR L$055xts_enc_steal sub edi,DWORD [112+esp] mov edx,ebp mov ecx,ebx @@ -1355,30 +1317,16 @@ L$057xts_enc_steal: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$058enc1_loop_10: +L$056enc1_loop_10: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$058enc1_loop_10 + jnz NEAR L$056enc1_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 +L$054xts_enc_ret: mov esp,DWORD [116+esp] pop edi pop esi @@ -1401,12 +1349,12 @@ L$_aesni_xts_decrypt_begin: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$059enc1_loop_11: +L$057enc1_loop_11: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$059enc1_loop_11 + jnz NEAR L$057enc1_loop_11 db 102,15,56,221,209 mov esi,DWORD [20+esp] mov edi,DWORD [24+esp] @@ -1435,14 +1383,14 @@ db 102,15,56,221,209 pcmpgtd xmm0,xmm1 and eax,-16 sub eax,96 - jc NEAR L$060xts_dec_short + jc NEAR L$058xts_dec_short shl ecx,4 mov ebx,16 sub ebx,ecx lea edx,[32+ecx*1+edx] - jmp NEAR L$061xts_dec_loop6 + jmp NEAR L$059xts_dec_loop6 align 16 -L$061xts_dec_loop6: +L$059xts_dec_loop6: pshufd xmm2,xmm0,19 pxor xmm0,xmm0 movdqa [esp],xmm1 @@ -1531,23 +1479,23 @@ db 102,15,56,222,249 pcmpgtd xmm0,xmm1 pxor xmm1,xmm2 sub eax,96 - jnc NEAR L$061xts_dec_loop6 + jnc NEAR L$059xts_dec_loop6 mov ecx,DWORD [240+ebp] mov edx,ebp mov ebx,ecx -L$060xts_dec_short: +L$058xts_dec_short: add eax,96 - jz NEAR L$062xts_dec_done6x + jz NEAR L$060xts_dec_done6x movdqa xmm5,xmm1 cmp eax,32 - jb NEAR L$063xts_dec_one + jb NEAR L$061xts_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 + je NEAR L$062xts_dec_two pshufd xmm2,xmm0,19 pxor xmm0,xmm0 movdqa xmm6,xmm1 @@ -1556,7 +1504,7 @@ L$060xts_dec_short: pcmpgtd xmm0,xmm1 pxor xmm1,xmm2 cmp eax,64 - jb NEAR L$065xts_dec_three + jb NEAR L$063xts_dec_three pshufd xmm2,xmm0,19 pxor xmm0,xmm0 movdqa xmm7,xmm1 @@ -1566,7 +1514,7 @@ L$060xts_dec_short: pxor xmm1,xmm2 movdqa [esp],xmm5 movdqa [16+esp],xmm6 - je NEAR L$066xts_dec_four + je NEAR L$064xts_dec_four movdqa [32+esp],xmm7 pshufd xmm7,xmm0,19 movdqa [48+esp],xmm1 @@ -1598,9 +1546,9 @@ L$060xts_dec_short: movups [48+edi],xmm5 movups [64+edi],xmm6 lea edi,[80+edi] - jmp NEAR L$067xts_dec_done + jmp NEAR L$065xts_dec_done align 16 -L$063xts_dec_one: +L$061xts_dec_one: movups xmm2,[esi] lea esi,[16+esi] xorps xmm2,xmm5 @@ -1608,20 +1556,20 @@ L$063xts_dec_one: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$068dec1_loop_12: +L$066dec1_loop_12: db 102,15,56,222,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$068dec1_loop_12 + jnz NEAR L$066dec1_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 + jmp NEAR L$065xts_dec_done align 16 -L$064xts_dec_two: +L$062xts_dec_two: movaps xmm6,xmm1 movups xmm2,[esi] movups xmm3,[16+esi] @@ -1635,9 +1583,9 @@ L$064xts_dec_two: movups [16+edi],xmm3 lea edi,[32+edi] movdqa xmm1,xmm6 - jmp NEAR L$067xts_dec_done + jmp NEAR L$065xts_dec_done align 16 -L$065xts_dec_three: +L$063xts_dec_three: movaps xmm7,xmm1 movups xmm2,[esi] movups xmm3,[16+esi] @@ -1655,9 +1603,9 @@ L$065xts_dec_three: movups [32+edi],xmm4 lea edi,[48+edi] movdqa xmm1,xmm7 - jmp NEAR L$067xts_dec_done + jmp NEAR L$065xts_dec_done align 16 -L$066xts_dec_four: +L$064xts_dec_four: movaps xmm6,xmm1 movups xmm2,[esi] movups xmm3,[16+esi] @@ -1679,20 +1627,20 @@ L$066xts_dec_four: movups [48+edi],xmm5 lea edi,[64+edi] movdqa xmm1,xmm6 - jmp NEAR L$067xts_dec_done + jmp NEAR L$065xts_dec_done align 16 -L$062xts_dec_done6x: +L$060xts_dec_done6x: mov eax,DWORD [112+esp] and eax,15 - jz NEAR L$069xts_dec_ret + jz NEAR L$067xts_dec_ret mov DWORD [112+esp],eax - jmp NEAR L$070xts_dec_only_one_more + jmp NEAR L$068xts_dec_only_one_more align 16 -L$067xts_dec_done: +L$065xts_dec_done: mov eax,DWORD [112+esp] pxor xmm0,xmm0 and eax,15 - jz NEAR L$069xts_dec_ret + jz NEAR L$067xts_dec_ret pcmpgtd xmm0,xmm1 mov DWORD [112+esp],eax pshufd xmm2,xmm0,19 @@ -1702,7 +1650,7 @@ L$067xts_dec_done: pand xmm2,xmm3 pcmpgtd xmm0,xmm1 pxor xmm1,xmm2 -L$070xts_dec_only_one_more: +L$068xts_dec_only_one_more: pshufd xmm5,xmm0,19 movdqa xmm6,xmm1 paddq xmm1,xmm1 @@ -1716,16 +1664,16 @@ L$070xts_dec_only_one_more: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$071dec1_loop_13: +L$069dec1_loop_13: db 102,15,56,222,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$071dec1_loop_13 + jnz NEAR L$069dec1_loop_13 db 102,15,56,223,209 xorps xmm2,xmm5 movups [edi],xmm2 -L$072xts_dec_steal: +L$070xts_dec_steal: movzx ecx,BYTE [16+esi] movzx edx,BYTE [edi] lea esi,[1+esi] @@ -1733,7 +1681,7 @@ L$072xts_dec_steal: mov BYTE [16+edi],dl lea edi,[1+edi] sub eax,1 - jnz NEAR L$072xts_dec_steal + jnz NEAR L$070xts_dec_steal sub edi,DWORD [112+esp] mov edx,ebp mov ecx,ebx @@ -1743,30 +1691,16 @@ L$072xts_dec_steal: movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$073dec1_loop_14: +L$071dec1_loop_14: db 102,15,56,222,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$073dec1_loop_14 + jnz NEAR L$071dec1_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 +L$067xts_dec_ret: mov esp,DWORD [116+esp] pop edi pop esi @@ -1790,7 +1724,7 @@ L$_aesni_cbc_encrypt_begin: mov edx,DWORD [32+esp] mov ebp,DWORD [36+esp] test eax,eax - jz NEAR L$074cbc_abort + jz NEAR L$072cbc_abort cmp DWORD [40+esp],0 xchg ebx,esp movups xmm7,[ebp] @@ -1798,14 +1732,14 @@ L$_aesni_cbc_encrypt_begin: mov ebp,edx mov DWORD [16+esp],ebx mov ebx,ecx - je NEAR L$075cbc_decrypt + je NEAR L$073cbc_decrypt movaps xmm2,xmm7 cmp eax,16 - jb NEAR L$076cbc_enc_tail + jb NEAR L$074cbc_enc_tail sub eax,16 - jmp NEAR L$077cbc_enc_loop + jmp NEAR L$075cbc_enc_loop align 16 -L$077cbc_enc_loop: +L$075cbc_enc_loop: movups xmm7,[esi] lea esi,[16+esi] movups xmm0,[edx] @@ -1813,25 +1747,24 @@ L$077cbc_enc_loop: xorps xmm7,xmm0 lea edx,[32+edx] xorps xmm2,xmm7 -L$078enc1_loop_15: +L$076enc1_loop_15: db 102,15,56,220,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$078enc1_loop_15 + jnz NEAR L$076enc1_loop_15 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$077cbc_enc_loop + jnc NEAR L$075cbc_enc_loop add eax,16 - jnz NEAR L$076cbc_enc_tail + jnz NEAR L$074cbc_enc_tail movaps xmm7,xmm2 - pxor xmm2,xmm2 - jmp NEAR L$079cbc_ret -L$076cbc_enc_tail: + jmp NEAR L$077cbc_ret +L$074cbc_enc_tail: mov ecx,eax dd 2767451785 mov ecx,16 @@ -1842,20 +1775,20 @@ dd 2868115081 mov ecx,ebx mov esi,edi mov edx,ebp - jmp NEAR L$077cbc_enc_loop + jmp NEAR L$075cbc_enc_loop align 16 -L$075cbc_decrypt: +L$073cbc_decrypt: cmp eax,80 - jbe NEAR L$080cbc_dec_tail + jbe NEAR L$078cbc_dec_tail movaps [esp],xmm7 sub eax,80 - jmp NEAR L$081cbc_dec_loop6_enter + jmp NEAR L$079cbc_dec_loop6_enter align 16 -L$082cbc_dec_loop6: +L$080cbc_dec_loop6: movaps [esp],xmm0 movups [edi],xmm7 lea edi,[16+edi] -L$081cbc_dec_loop6_enter: +L$079cbc_dec_loop6_enter: movdqu xmm2,[esi] movdqu xmm3,[16+esi] movdqu xmm4,[32+esi] @@ -1885,28 +1818,28 @@ L$081cbc_dec_loop6_enter: movups [64+edi],xmm6 lea edi,[80+edi] sub eax,96 - ja NEAR L$082cbc_dec_loop6 + ja NEAR L$080cbc_dec_loop6 movaps xmm2,xmm7 movaps xmm7,xmm0 add eax,80 - jle NEAR L$083cbc_dec_clear_tail_collected + jle NEAR L$081cbc_dec_tail_collected movups [edi],xmm2 lea edi,[16+edi] -L$080cbc_dec_tail: +L$078cbc_dec_tail: movups xmm2,[esi] movaps xmm6,xmm2 cmp eax,16 - jbe NEAR L$084cbc_dec_one + jbe NEAR L$082cbc_dec_one movups xmm3,[16+esi] movaps xmm5,xmm3 cmp eax,32 - jbe NEAR L$085cbc_dec_two + jbe NEAR L$083cbc_dec_two movups xmm4,[32+esi] cmp eax,48 - jbe NEAR L$086cbc_dec_three + jbe NEAR L$084cbc_dec_three movups xmm5,[48+esi] cmp eax,64 - jbe NEAR L$087cbc_dec_four + jbe NEAR L$085cbc_dec_four movups xmm6,[64+esi] movaps [esp],xmm7 movups xmm2,[esi] @@ -1924,62 +1857,55 @@ L$080cbc_dec_tail: 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$088cbc_dec_tail_collected + jmp NEAR L$081cbc_dec_tail_collected align 16 -L$084cbc_dec_one: +L$082cbc_dec_one: movups xmm0,[edx] movups xmm1,[16+edx] lea edx,[32+edx] xorps xmm2,xmm0 -L$089dec1_loop_16: +L$086dec1_loop_16: db 102,15,56,222,209 dec ecx movups xmm1,[edx] lea edx,[16+edx] - jnz NEAR L$089dec1_loop_16 + jnz NEAR L$086dec1_loop_16 db 102,15,56,223,209 xorps xmm2,xmm7 movaps xmm7,xmm6 sub eax,16 - jmp NEAR L$088cbc_dec_tail_collected + jmp NEAR L$081cbc_dec_tail_collected align 16 -L$085cbc_dec_two: +L$083cbc_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$088cbc_dec_tail_collected + jmp NEAR L$081cbc_dec_tail_collected align 16 -L$086cbc_dec_three: +L$084cbc_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$088cbc_dec_tail_collected + jmp NEAR L$081cbc_dec_tail_collected align 16 -L$087cbc_dec_four: +L$085cbc_dec_four: call __aesni_decrypt4 movups xmm1,[16+esi] movups xmm0,[32+esi] @@ -1989,44 +1915,28 @@ L$087cbc_dec_four: 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$088cbc_dec_tail_collected -align 16 -L$083cbc_dec_clear_tail_collected: - pxor xmm3,xmm3 - pxor xmm4,xmm4 - pxor xmm5,xmm5 - pxor xmm6,xmm6 -L$088cbc_dec_tail_collected: +L$081cbc_dec_tail_collected: and eax,15 - jnz NEAR L$090cbc_dec_tail_partial + jnz NEAR L$087cbc_dec_tail_partial movups [edi],xmm2 - pxor xmm0,xmm0 - jmp NEAR L$079cbc_ret + jmp NEAR L$077cbc_ret align 16 -L$090cbc_dec_tail_partial: +L$087cbc_dec_tail_partial: movaps [esp],xmm2 - pxor xmm0,xmm0 mov ecx,16 mov esi,esp sub ecx,eax dd 2767451785 - movdqa [esp],xmm2 -L$079cbc_ret: +L$077cbc_ret: mov esp,DWORD [16+esp] mov ebp,DWORD [36+esp] - pxor xmm2,xmm2 - pxor xmm1,xmm1 movups [ebp],xmm7 - pxor xmm7,xmm7 -L$074cbc_abort: +L$072cbc_abort: pop edi pop esi pop ebx @@ -2034,62 +1944,52 @@ L$074cbc_abort: ret align 16 __aesni_set_encrypt_key: - push ebp - push ebx test eax,eax - jz NEAR L$091bad_pointer + jz NEAR L$088bad_pointer test edx,edx - jz NEAR L$091bad_pointer - call L$092pic -L$092pic: - pop ebx - lea ebx,[(L$key_const-L$092pic)+ebx] - lea ebp,[_OPENSSL_ia32cap_P] + jz NEAR L$088bad_pointer movups xmm0,[eax] xorps xmm4,xmm4 - mov ebp,DWORD [4+ebp] lea edx,[16+edx] - and ebp,268437504 cmp ecx,256 - je NEAR L$09314rounds + je NEAR L$08914rounds cmp ecx,192 - je NEAR L$09412rounds + je NEAR L$09012rounds cmp ecx,128 - jne NEAR L$095bad_keybits + jne NEAR L$091bad_keybits align 16 -L$09610rounds: - cmp ebp,268435456 - je NEAR L$09710rounds_alt +L$09210rounds: mov ecx,9 movups [edx-16],xmm0 db 102,15,58,223,200,1 - call L$098key_128_cold + call L$093key_128_cold db 102,15,58,223,200,2 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,4 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,8 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,16 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,32 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,64 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,128 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,27 - call L$099key_128 + call L$094key_128 db 102,15,58,223,200,54 - call L$099key_128 + call L$094key_128 movups [edx],xmm0 mov DWORD [80+edx],ecx - jmp NEAR L$100good_key + xor eax,eax + ret align 16 -L$099key_128: +L$094key_128: movups [edx],xmm0 lea edx,[16+edx] -L$098key_128_cold: +L$093key_128_cold: shufps xmm4,xmm0,16 xorps xmm0,xmm4 shufps xmm4,xmm0,140 @@ -2098,91 +1998,38 @@ L$098key_128_cold: xorps xmm0,xmm1 ret align 16 -L$09710rounds_alt: - movdqa xmm5,[ebx] - mov ecx,8 - movdqa xmm4,[32+ebx] - movdqa xmm2,xmm0 - movdqu [edx-16],xmm0 -L$101loop_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$101loop_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$100good_key -align 16 -L$09412rounds: +L$09012rounds: movq xmm2,[16+eax] - cmp ebp,268435456 - je NEAR L$10212rounds_alt mov ecx,11 movups [edx-16],xmm0 db 102,15,58,223,202,1 - call L$103key_192a_cold + call L$095key_192a_cold db 102,15,58,223,202,2 - call L$104key_192b + call L$096key_192b db 102,15,58,223,202,4 - call L$105key_192a + call L$097key_192a db 102,15,58,223,202,8 - call L$104key_192b + call L$096key_192b db 102,15,58,223,202,16 - call L$105key_192a + call L$097key_192a db 102,15,58,223,202,32 - call L$104key_192b + call L$096key_192b db 102,15,58,223,202,64 - call L$105key_192a + call L$097key_192a db 102,15,58,223,202,128 - call L$104key_192b + call L$096key_192b movups [edx],xmm0 mov DWORD [48+edx],ecx - jmp NEAR L$100good_key + xor eax,eax + ret align 16 -L$105key_192a: +L$097key_192a: movups [edx],xmm0 lea edx,[16+edx] align 16 -L$103key_192a_cold: +L$095key_192a_cold: movaps xmm5,xmm2 -L$106key_192b_warm: +L$098key_192b_warm: shufps xmm4,xmm0,16 movdqa xmm3,xmm2 xorps xmm0,xmm4 @@ -2196,90 +2043,56 @@ L$106key_192b_warm: pxor xmm2,xmm3 ret align 16 -L$104key_192b: +L$096key_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$106key_192b_warm -align 16 -L$10212rounds_alt: - movdqa xmm5,[16+ebx] - movdqa xmm4,[32+ebx] - mov ecx,8 - movdqu [edx-16],xmm0 -L$107loop_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$107loop_key192 - mov ecx,11 - mov DWORD [32+edx],ecx - jmp NEAR L$100good_key + jmp NEAR L$098key_192b_warm align 16 -L$09314rounds: +L$08914rounds: movups xmm2,[16+eax] - lea edx,[16+edx] - cmp ebp,268435456 - je NEAR L$10814rounds_alt mov ecx,13 + lea edx,[16+edx] movups [edx-32],xmm0 movups [edx-16],xmm2 db 102,15,58,223,202,1 - call L$109key_256a_cold + call L$099key_256a_cold db 102,15,58,223,200,1 - call L$110key_256b + call L$100key_256b db 102,15,58,223,202,2 - call L$111key_256a + call L$101key_256a db 102,15,58,223,200,2 - call L$110key_256b + call L$100key_256b db 102,15,58,223,202,4 - call L$111key_256a + call L$101key_256a db 102,15,58,223,200,4 - call L$110key_256b + call L$100key_256b db 102,15,58,223,202,8 - call L$111key_256a + call L$101key_256a db 102,15,58,223,200,8 - call L$110key_256b + call L$100key_256b db 102,15,58,223,202,16 - call L$111key_256a + call L$101key_256a db 102,15,58,223,200,16 - call L$110key_256b + call L$100key_256b db 102,15,58,223,202,32 - call L$111key_256a + call L$101key_256a db 102,15,58,223,200,32 - call L$110key_256b + call L$100key_256b db 102,15,58,223,202,64 - call L$111key_256a + call L$101key_256a movups [edx],xmm0 mov DWORD [16+edx],ecx xor eax,eax - jmp NEAR L$100good_key + ret align 16 -L$111key_256a: +L$101key_256a: movups [edx],xmm2 lea edx,[16+edx] -L$109key_256a_cold: +L$099key_256a_cold: shufps xmm4,xmm0,16 xorps xmm0,xmm4 shufps xmm4,xmm0,140 @@ -2288,7 +2101,7 @@ L$109key_256a_cold: xorps xmm0,xmm1 ret align 16 -L$110key_256b: +L$100key_256b: movups [edx],xmm0 lea edx,[16+edx] shufps xmm4,xmm2,16 @@ -2298,70 +2111,13 @@ L$110key_256b: shufps xmm1,xmm1,170 xorps xmm2,xmm1 ret -align 16 -L$10814rounds_alt: - movdqa xmm5,[ebx] - movdqa xmm4,[32+ebx] - mov ecx,7 - movdqu [edx-32],xmm0 - movdqa xmm1,xmm2 - movdqu [edx-16],xmm2 -L$112loop_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$113done_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$112loop_key256 -L$113done_key256: - mov ecx,13 - mov DWORD [16+edx],ecx -L$100good_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$091bad_pointer: +L$088bad_pointer: mov eax,-1 - pop ebx - pop ebp ret align 4 -L$095bad_keybits: - pxor xmm0,xmm0 +L$091bad_keybits: mov eax,-2 - pop ebx - pop ebp ret global _aesni_set_encrypt_key align 16 @@ -2383,7 +2139,7 @@ L$_aesni_set_decrypt_key_begin: mov edx,DWORD [12+esp] shl ecx,4 test eax,eax - jnz NEAR L$114dec_key_ret + jnz NEAR L$102dec_key_ret lea eax,[16+ecx*1+edx] movups xmm0,[edx] movups xmm1,[eax] @@ -2391,7 +2147,7 @@ L$_aesni_set_decrypt_key_begin: movups [edx],xmm1 lea edx,[16+edx] lea eax,[eax-16] -L$115dec_key_inverse: +L$103dec_key_inverse: movups xmm0,[edx] movups xmm1,[eax] db 102,15,56,219,192 @@ -2401,24 +2157,14 @@ db 102,15,56,219,201 movups [16+eax],xmm0 movups [edx-16],xmm1 cmp eax,edx - ja NEAR L$115dec_key_inverse + ja NEAR L$103dec_key_inverse movups xmm0,[edx] db 102,15,56,219,192 movups [edx],xmm0 - pxor xmm0,xmm0 - pxor xmm1,xmm1 xor eax,eax -L$114dec_key_ret: +L$102dec_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 _OPENSSL_ia32cap_P 16 diff --git a/third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm b/third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm index cf313d1..e1c9e0e 100644 --- a/third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm +++ b/third_party/boringssl/win-x86_64/crypto/aes/aesni-x86_64.asm @@ -22,10 +22,7 @@ DB 102,15,56,220,209 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 @@ -46,10 +43,7 @@ DB 102,15,56,222,209 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 @@ -275,18 +269,21 @@ DB 102,15,56,220,217 pxor xmm6,xmm0 DB 102,15,56,220,225 pxor xmm7,xmm0 - movups xmm0,XMMWORD[rax*1+rcx] add rax,16 +DB 102,15,56,220,233 +DB 102,15,56,220,241 +DB 102,15,56,220,249 + movups xmm0,XMMWORD[((-16))+rax*1+rcx] 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 +$L$enc_loop6_enter: movups xmm1,XMMWORD[rax*1+rcx] add rax,32 DB 102,15,56,220,208 @@ -329,18 +326,21 @@ DB 102,15,56,222,217 pxor xmm6,xmm0 DB 102,15,56,222,225 pxor xmm7,xmm0 - movups xmm0,XMMWORD[rax*1+rcx] add rax,16 +DB 102,15,56,222,233 +DB 102,15,56,222,241 +DB 102,15,56,222,249 + movups xmm0,XMMWORD[((-16))+rax*1+rcx] 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 +$L$dec_loop6_enter: movups xmm1,XMMWORD[rax*1+rcx] add rax,32 DB 102,15,56,222,208 @@ -380,18 +380,23 @@ _aesni_encrypt8: lea rcx,[32+rax*1+rcx] neg rax DB 102,15,56,220,209 + add rax,16 pxor xmm7,xmm0 - pxor xmm8,xmm0 DB 102,15,56,220,217 + pxor xmm8,xmm0 pxor xmm9,xmm0 - movups xmm0,XMMWORD[rax*1+rcx] - add rax,16 - jmp NEAR $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 + movups xmm0,XMMWORD[((-16))+rax*1+rcx] + jmp NEAR $L$enc_loop8_enter 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 @@ -444,18 +449,23 @@ _aesni_decrypt8: lea rcx,[32+rax*1+rcx] neg rax DB 102,15,56,222,209 + add rax,16 pxor xmm7,xmm0 - pxor xmm8,xmm0 DB 102,15,56,222,217 + pxor xmm8,xmm0 pxor xmm9,xmm0 - movups xmm0,XMMWORD[rax*1+rcx] - add rax,16 - jmp NEAR $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 + movups xmm0,XMMWORD[((-16))+rax*1+rcx] + jmp NEAR $L$dec_loop8_enter 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 @@ -599,7 +609,6 @@ $L$ecb_enc_tail: 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 @@ -713,23 +722,15 @@ $L$ecb_dec_loop8_enter: 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 @@ -752,23 +753,14 @@ $L$ecb_dec_tail: 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: @@ -784,81 +776,53 @@ DB 102,15,56,222,209 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 @@ -937,21 +901,11 @@ 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 @@ -1064,21 +1018,11 @@ DB 102,15,56,220,217 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 @@ -1100,35 +1044,6 @@ $L$SEH_begin_aesni_ctr32_encrypt_blocks: 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 @@ -1146,8 +1061,8 @@ $L$ctr32_bulk: $L$ctr32_body: lea rbp,[((-8))+rax] - - + cmp rdx,1 + je NEAR $L$ctr32_one_shortcut movdqu xmm2,XMMWORD[r8] movdqu xmm0,XMMWORD[rcx] @@ -1538,14 +1453,11 @@ DB 102,69,15,56,221,202 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 @@ -1648,43 +1560,40 @@ DB 102,15,56,221,225 movups xmm12,XMMWORD[32+rdi] xorps xmm4,xmm12 movups XMMWORD[32+rsi],xmm4 + jmp NEAR $L$ctr32_done +ALIGN 16 +$L$ctr32_one_shortcut: + movups xmm2,XMMWORD[r8] + movups xmm10,XMMWORD[rdi] + mov eax,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 eax + movups xmm1,XMMWORD[rcx] + lea rcx,[16+rcx] + jnz NEAR $L$oop_enc1_7 +DB 102,15,56,221,209 + xorps xmm2,xmm10 + movups XMMWORD[rsi],xmm2 + jmp NEAR $L$ctr32_done + +ALIGN 16 $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: @@ -1980,7 +1889,6 @@ DB 102,15,56,221,124,36,80 shr eax,4 $L$xts_enc_short: - mov r10d,eax pxor xmm10,xmm0 add rdx,16*6 @@ -2009,7 +1917,6 @@ $L$xts_enc_short: pxor xmm4,xmm12 pxor xmm5,xmm13 pxor xmm6,xmm14 - pxor xmm7,xmm7 call _aesni_encrypt6 @@ -2152,39 +2059,16 @@ DB 102,15,56,221,209 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: @@ -2486,7 +2370,6 @@ DB 102,15,56,223,124,36,80 shr eax,4 $L$xts_dec_short: - mov r10d,eax pxor xmm10,xmm0 pxor xmm11,xmm0 @@ -2689,39 +2572,16 @@ DB 102,15,56,223,209 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: @@ -2784,11 +2644,7 @@ DB 102,15,56,221,209 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: @@ -2808,35 +2664,6 @@ $L$cbc_enc_tail: 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 @@ -3084,7 +2911,7 @@ DB 102,69,15,56,223,202 movaps xmm2,xmm9 lea rcx,[((-112))+rcx] add rdx,0x70 - jle NEAR $L$cbc_dec_clear_tail_collected + jle NEAR $L$cbc_dec_tail_collected movups XMMWORD[rsi],xmm9 lea rsi,[16+rsi] cmp rdx,0x50 @@ -3103,19 +2930,14 @@ $L$cbc_dec_six_or_seven: 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 @@ -3130,23 +2952,16 @@ $L$cbc_dec_seven: 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 @@ -3190,7 +3005,7 @@ $L$cbc_dec_loop6_enter: movdqa xmm2,xmm7 add rdx,0x50 - jle NEAR $L$cbc_dec_clear_tail_collected + jle NEAR $L$cbc_dec_tail_collected movups XMMWORD[rsi],xmm7 lea rsi,[16+rsi] @@ -3225,17 +3040,12 @@ $L$cbc_dec_tail: 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 @@ -3246,12 +3056,12 @@ $L$cbc_dec_one: movups xmm1,XMMWORD[16+rcx] lea rcx,[32+rcx] xorps xmm2,xmm0 -$L$oop_dec1_17: +$L$oop_dec1_16: DB 102,15,56,222,209 dec eax movups xmm1,XMMWORD[rcx] lea rcx,[16+rcx] - jnz NEAR $L$oop_dec1_17 + jnz NEAR $L$oop_dec1_16 DB 102,15,56,223,209 xorps xmm2,xmm10 movaps xmm10,xmm11 @@ -3265,7 +3075,6 @@ $L$cbc_dec_two: 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 @@ -3278,9 +3087,7 @@ $L$cbc_dec_three: 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 @@ -3293,61 +3100,39 @@ $L$cbc_dec_four: 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: @@ -3387,9 +3172,7 @@ DB 102,15,56,219,201 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 @@ -3407,10 +3190,8 @@ DB 0x48,0x83,0xEC,0x08 test r8,r8 jz NEAR $L$enc_key_ret - mov r10d,268437504 movups xmm0,XMMWORD[rcx] xorps xmm4,xmm4 - and r10d,DWORD[((OPENSSL_ia32cap_P+4))] lea rax,[16+r8] cmp edx,256 je NEAR $L$14rounds @@ -3421,9 +3202,6 @@ DB 0x48,0x83,0xEC,0x08 $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 @@ -3451,79 +3229,9 @@ DB 102,15,58,223,200,54 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 @@ -3547,54 +3255,10 @@ DB 102,15,58,223,202,128 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 @@ -3629,69 +3293,9 @@ DB 102,15,58,223,202,64 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: @@ -3777,14 +3381,6 @@ $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 @@ -3890,7 +3486,7 @@ cbc_se_handler: mov rax,QWORD[152+r8] mov rbx,QWORD[248+r8] - lea r10,[$L$cbc_decrypt_bulk] + lea r10,[$L$cbc_decrypt] cmp rbx,r10 jb NEAR $L$common_seh_tail -- cgit v1.1