summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bn/bn_add.c
diff options
context:
space:
mode:
authorjsing <>2023-06-12 16:17:24 +0000
committerjsing <>2023-06-12 16:17:24 +0000
commit9555359b43b00ed20a16eba7b602909bc52f32b0 (patch)
treeb4e21a96adfc49bf3a4624865e60a6430dcf75ab /src/lib/libcrypto/bn/bn_add.c
parent3e78f2fb356efca03fc4bfdadb63b49114e128a2 (diff)
downloadopenbsd-9555359b43b00ed20a16eba7b602909bc52f32b0.tar.gz
openbsd-9555359b43b00ed20a16eba7b602909bc52f32b0.tar.bz2
openbsd-9555359b43b00ed20a16eba7b602909bc52f32b0.zip
Provide and use various quad word primitives.
This includes bn_qwaddqw(), bn_qwsubqw(), bn_qwmulw_addw() and bn_qwmulw_addqw_addw(). These can typically be optimised on architectures that have a reasonable number of general purpose registers. ok tb@
Diffstat (limited to 'src/lib/libcrypto/bn/bn_add.c')
-rw-r--r--src/lib/libcrypto/bn/bn_add.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/lib/libcrypto/bn/bn_add.c b/src/lib/libcrypto/bn/bn_add.c
index 92489b7da3..36f160ab5f 100644
--- a/src/lib/libcrypto/bn/bn_add.c
+++ b/src/lib/libcrypto/bn/bn_add.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: bn_add.c,v 1.24 2023/02/22 05:46:37 jsing Exp $ */ 1/* $OpenBSD: bn_add.c,v 1.25 2023/06/12 16:17:24 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -80,18 +80,14 @@ bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
80 if (n <= 0) 80 if (n <= 0)
81 return 0; 81 return 0;
82 82
83#ifndef OPENSSL_SMALL_FOOTPRINT
84 while (n & ~3) { 83 while (n & ~3) {
85 bn_addw_addw(a[0], b[0], carry, &carry, &r[0]); 84 bn_qwaddqw(a[3], a[2], a[1], a[0], b[3], b[2], b[1], b[0],
86 bn_addw_addw(a[1], b[1], carry, &carry, &r[1]); 85 carry, &carry, &r[3], &r[2], &r[1], &r[0]);
87 bn_addw_addw(a[2], b[2], carry, &carry, &r[2]);
88 bn_addw_addw(a[3], b[3], carry, &carry, &r[3]);
89 a += 4; 86 a += 4;
90 b += 4; 87 b += 4;
91 r += 4; 88 r += 4;
92 n -= 4; 89 n -= 4;
93 } 90 }
94#endif
95 while (n) { 91 while (n) {
96 bn_addw_addw(a[0], b[0], carry, &carry, &r[0]); 92 bn_addw_addw(a[0], b[0], carry, &carry, &r[0]);
97 a++; 93 a++;
@@ -165,18 +161,14 @@ bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
165 if (n <= 0) 161 if (n <= 0)
166 return 0; 162 return 0;
167 163
168#ifndef OPENSSL_SMALL_FOOTPRINT
169 while (n & ~3) { 164 while (n & ~3) {
170 bn_subw_subw(a[0], b[0], borrow, &borrow, &r[0]); 165 bn_qwsubqw(a[3], a[2], a[1], a[0], b[3], b[2], b[1], b[0],
171 bn_subw_subw(a[1], b[1], borrow, &borrow, &r[1]); 166 borrow, &borrow, &r[3], &r[2], &r[1], &r[0]);
172 bn_subw_subw(a[2], b[2], borrow, &borrow, &r[2]);
173 bn_subw_subw(a[3], b[3], borrow, &borrow, &r[3]);
174 a += 4; 167 a += 4;
175 b += 4; 168 b += 4;
176 r += 4; 169 r += 4;
177 n -= 4; 170 n -= 4;
178 } 171 }
179#endif
180 while (n) { 172 while (n) {
181 bn_subw_subw(a[0], b[0], borrow, &borrow, &r[0]); 173 bn_subw_subw(a[0], b[0], borrow, &borrow, &r[0]);
182 a++; 174 a++;