summaryrefslogtreecommitdiffstats
path: root/crypto/md5/md5_local.h
diff options
context:
space:
mode:
authorMin Zhou <zhoumin@loongson.cn>2023-12-13 22:40:14 +0800
committerTomas Mraz <tomas@openssl.org>2023-12-27 10:15:29 +0100
commit3d68e2937ee5c50eacef5f4c34abdf7c0e4dc479 (patch)
tree62032cc26380c6a302b45a3db9d6d447d0366bc7 /crypto/md5/md5_local.h
parent9277ed0a4fc082807ad8d8f66925fb7968437cf6 (diff)
md5: add assembly implementation for loongarch64
This change can improve md5 performance by using a hand-optimized assembly implementation of the inner loop of md5 calculation. This implementation refered to md5-x86_64.pl and made more effort to reorder instructions for separating data dependencies as much as possible. Test with: $ openssl speed md5 3A5000 type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes md5 45061.04k 130440.75k 291105.28k 421101.23k 484639.27k 488320.43k md5-modified 47179.95k 139015.57k 308836.69k 445963.26k 512540.67k 518215.00k +5% +7% +6% +6% +6% +6% 3A6000 type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes md5 60070.06k 161822.76k 325817.60k 438017.02k 486864.21k 492243.31k md5-modified 62827.74k 170294.04k 343795.03k 463324.50k 515831.13k 520060.93k +5% +5% +6% +6% +6% +6% Signed-off-by: Min Zhou <zhoumin@loongson.cn> Co-authored-by: Xi Ruoyao <xry111@xry111.site> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/21704)
Diffstat (limited to 'crypto/md5/md5_local.h')
-rw-r--r--crypto/md5/md5_local.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/crypto/md5/md5_local.h b/crypto/md5/md5_local.h
index 894567c3f5..fab8bb9dae 100644
--- a/crypto/md5/md5_local.h
+++ b/crypto/md5/md5_local.h
@@ -15,7 +15,8 @@
#ifdef MD5_ASM
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
- defined(_M_X64) || defined(__aarch64__)
+ defined(_M_X64) || defined(__aarch64__) || \
+ (defined(__loongarch__) && __loongarch_grlen == 64)
# define md5_block_data_order ossl_md5_block_asm_data_order
# elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
# define md5_block_data_order ossl_md5_block_asm_data_order