diff options
Diffstat (limited to 'src')
| -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 |
