diff options
author | jsing <> | 2023-02-17 05:46:57 +0000 |
---|---|---|
committer | jsing <> | 2023-02-17 05:46:57 +0000 |
commit | 7440c5fbd9e9c40e46c20a80100dab9c467a2334 (patch) | |
tree | ed8f49ce744cdd272510f159427f698e9ef022dc /src/lib | |
parent | d58b728cbd6aaa07432f9003f6cd5b9687d0eede (diff) | |
download | openbsd-7440c5fbd9e9c40e46c20a80100dab9c467a2334.tar.gz openbsd-7440c5fbd9e9c40e46c20a80100dab9c467a2334.tar.bz2 openbsd-7440c5fbd9e9c40e46c20a80100dab9c467a2334.zip |
Provide optimised versions of bn_addw() and bn_subw() for aarch64.
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/bn/arch/aarch64/bn_arch.h | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h b/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h index cc456848c9..9d61bc9114 100644 --- a/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h +++ b/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_arch.h,v 1.4 2023/02/16 10:41:03 jsing Exp $ */ | 1 | /* $OpenBSD: bn_arch.h,v 1.5 2023/02/17 05:46:57 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -23,6 +23,23 @@ | |||
23 | #ifndef OPENSSL_NO_ASM | 23 | #ifndef OPENSSL_NO_ASM |
24 | 24 | ||
25 | #if defined(__GNUC__) | 25 | #if defined(__GNUC__) |
26 | |||
27 | #define HAVE_BN_ADDW | ||
28 | |||
29 | static inline void | ||
30 | bn_addw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) | ||
31 | { | ||
32 | BN_ULONG carry, r0; | ||
33 | |||
34 | __asm__ ("adds %1, %2, %3; cset %0, cs" | ||
35 | : "=r"(carry), "=r"(r0) | ||
36 | : "r"(a), "r"(b) | ||
37 | : "cc"); | ||
38 | |||
39 | *out_r1 = carry; | ||
40 | *out_r0 = r0; | ||
41 | } | ||
42 | |||
26 | #define HAVE_BN_MULW | 43 | #define HAVE_BN_MULW |
27 | 44 | ||
28 | static inline void | 45 | static inline void |
@@ -38,6 +55,23 @@ bn_mulw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) | |||
38 | *out_r1 = r1; | 55 | *out_r1 = r1; |
39 | *out_r0 = r0; | 56 | *out_r0 = r0; |
40 | } | 57 | } |
58 | |||
59 | #define HAVE_BN_SUBW | ||
60 | |||
61 | static inline void | ||
62 | bn_subw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_borrow, BN_ULONG *out_r0) | ||
63 | { | ||
64 | BN_ULONG borrow, r0; | ||
65 | |||
66 | __asm__ ("subs %1, %2, %3; cset %0, cc" | ||
67 | : "=r"(borrow), "=r"(r0) | ||
68 | : "r"(a), "r"(b) | ||
69 | : "cc"); | ||
70 | |||
71 | *out_borrow = borrow; | ||
72 | *out_r0 = r0; | ||
73 | } | ||
74 | |||
41 | #endif /* __GNUC__ */ | 75 | #endif /* __GNUC__ */ |
42 | 76 | ||
43 | #endif | 77 | #endif |