summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2023-02-17 05:46:57 +0000
committerjsing <>2023-02-17 05:46:57 +0000
commit7440c5fbd9e9c40e46c20a80100dab9c467a2334 (patch)
treeed8f49ce744cdd272510f159427f698e9ef022dc /src/lib
parentd58b728cbd6aaa07432f9003f6cd5b9687d0eede (diff)
downloadopenbsd-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.h36
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
29static inline void
30bn_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
28static inline void 45static 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
61static inline void
62bn_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