diff options
author | Min Zhou <zhoumin@loongson.cn> | 2023-12-13 22:40:14 +0800 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2023-12-27 10:15:29 +0100 |
commit | 3d68e2937ee5c50eacef5f4c34abdf7c0e4dc479 (patch) | |
tree | 62032cc26380c6a302b45a3db9d6d447d0366bc7 /crypto/md5/md5_local.h | |
parent | 9277ed0a4fc082807ad8d8f66925fb7968437cf6 (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.h | 3 |
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 |