diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/libcrypto/bn/arch/aarch64/bn_arch.h | 29 |
1 files changed, 28 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 f658510c73..aa780e09e9 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.10 2023/06/12 16:42:11 jsing Exp $ */ | 1 | /* $OpenBSD: bn_arch.h,v 1.11 2023/06/17 15:40:46 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2023 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -177,6 +177,33 @@ bn_mulw_addtw(BN_ULONG a, BN_ULONG b, BN_ULONG c2, BN_ULONG c1, BN_ULONG c0, | |||
| 177 | *out_r0 = r0; | 177 | *out_r0 = r0; |
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | #define HAVE_BN_MUL2_MULW_ADDTW | ||
| 181 | |||
| 182 | static inline void | ||
| 183 | bn_mul2_mulw_addtw(BN_ULONG a, BN_ULONG b, BN_ULONG c2, BN_ULONG c1, BN_ULONG c0, | ||
| 184 | BN_ULONG *out_r2, BN_ULONG *out_r1, BN_ULONG *out_r0) | ||
| 185 | { | ||
| 186 | BN_ULONG r2, r1, r0, x1, x0; | ||
| 187 | |||
| 188 | __asm__ ( | ||
| 189 | "umulh %[x1], %[a], %[b] \n" | ||
| 190 | "mul %[x0], %[a], %[b] \n" | ||
| 191 | "adds %[r0], %[c0], %[x0] \n" | ||
| 192 | "adcs %[r1], %[c1], %[x1] \n" | ||
| 193 | "adc %[r2], xzr, %[c2] \n" | ||
| 194 | "adds %[r0], %[r0], %[x0] \n" | ||
| 195 | "adcs %[r1], %[r1], %[x1] \n" | ||
| 196 | "adc %[r2], xzr, %[r2] \n" | ||
| 197 | : [r2]"=&r"(r2), [r1]"=&r"(r1), [r0]"=&r"(r0), [x1]"=&r"(x1), | ||
| 198 | [x0]"=&r"(x0) | ||
| 199 | : [a]"r"(a), [b]"r"(b), [c2]"r"(c2), [c1]"r"(c1), [c0]"r"(c0) | ||
| 200 | : "cc"); | ||
| 201 | |||
| 202 | *out_r2 = r2; | ||
| 203 | *out_r1 = r1; | ||
| 204 | *out_r0 = r0; | ||
| 205 | } | ||
| 206 | |||
| 180 | #define HAVE_BN_QWMULW_ADDW | 207 | #define HAVE_BN_QWMULW_ADDW |
| 181 | 208 | ||
| 182 | static inline void | 209 | static inline void |
