diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-10-06 14:25:10 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-10-06 14:25:54 +0200 |
commit | 567eefcaf8712b72c3cd5b45aa013ff1eb45d235 (patch) | |
tree | cd91aa2419c3234026d5de4d102de4f2f849fcba | |
parent | 00f2cceb6aa194aadcbe70675a0f0a0660aea233 (diff) | |
download | busybox-w32-567eefcaf8712b72c3cd5b45aa013ff1eb45d235.tar.gz busybox-w32-567eefcaf8712b72c3cd5b45aa013ff1eb45d235.tar.bz2 busybox-w32-567eefcaf8712b72c3cd5b45aa013ff1eb45d235.zip |
tls: P256: do not dumplicate sp_256_sub_8()
function old new delta
sp_256_proj_point_dbl_8 359 374 +15
sp_256_ecc_mulmod_8 1159 1171 +12
sp_256_mont_reduce_8 245 250 +5
sp_256_mont_dbl_8 26 31 +5
sp_256_sub_8_p256_mod 43 - -43
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 4/0 up/down: 37/-43) Total: -6 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/tls_sp_c32.c | 26 |
1 files changed, 3 insertions, 23 deletions
diff --git a/networking/tls_sp_c32.c b/networking/tls_sp_c32.c index 6fca2aad8..17fc05f63 100644 --- a/networking/tls_sp_c32.c +++ b/networking/tls_sp_c32.c | |||
@@ -291,10 +291,10 @@ static int sp_256_sub_8(sp_digit* r, const sp_digit* a, const sp_digit* b) | |||
291 | #endif | 291 | #endif |
292 | } | 292 | } |
293 | 293 | ||
294 | #if ALLOW_ASM && defined(__GNUC__) && defined(__i386__) | ||
294 | /* Sub p256_mod from a into r. (r = a - p256_mod). */ | 295 | /* Sub p256_mod from a into r. (r = a - p256_mod). */ |
295 | static void sp_256_sub_8_p256_mod(sp_digit* r, const sp_digit* a) | 296 | static void sp_256_sub_8_p256_mod(sp_digit* r, const sp_digit* a) |
296 | { | 297 | { |
297 | #if ALLOW_ASM && defined(__GNUC__) && defined(__i386__) | ||
298 | sp_digit reg; | 298 | sp_digit reg; |
299 | //p256_mod[7..0] = ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff | 299 | //p256_mod[7..0] = ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff |
300 | asm volatile ( | 300 | asm volatile ( |
@@ -334,30 +334,10 @@ static void sp_256_sub_8_p256_mod(sp_digit* r, const sp_digit* a) | |||
334 | : "0" (a), "1" (r) | 334 | : "0" (a), "1" (r) |
335 | : "memory" | 335 | : "memory" |
336 | ); | 336 | ); |
337 | } | ||
337 | #else | 338 | #else |
338 | const sp_digit* b = p256_mod; | 339 | # define sp_256_sub_8_p256_mod(r, a) sp_256_sub_8((r), (a), p256_mod) |
339 | int i; | ||
340 | sp_digit borrow; | ||
341 | |||
342 | borrow = 0; | ||
343 | for (i = 0; i < 8; i++) { | ||
344 | sp_digit w, v; | ||
345 | w = b[i] + borrow; | ||
346 | v = a[i]; | ||
347 | if (w != 0) { | ||
348 | v = a[i] - w; | ||
349 | borrow = (v > a[i]); | ||
350 | /* hope compiler detects above as "carry flag set" */ | ||
351 | } | ||
352 | /* else: b + borrow == 0, two cases: | ||
353 | * b:ffffffff, borrow:1 | ||
354 | * b:00000000, borrow:0 | ||
355 | * in either case, r[i] = a[i] and borrow remains unchanged | ||
356 | */ | ||
357 | r[i] = v; | ||
358 | } | ||
359 | #endif | 340 | #endif |
360 | } | ||
361 | 341 | ||
362 | /* Multiply a and b into r. (r = a * b) */ | 342 | /* Multiply a and b into r. (r = a * b) */ |
363 | static void sp_256_mul_8(sp_digit* r, const sp_digit* a, const sp_digit* b) | 343 | static void sp_256_mul_8(sp_digit* r, const sp_digit* a, const sp_digit* b) |