From 21e95b4e34b5a4d6c262b7773516d2dd03c38fa5 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 28 Jul 2023 09:26:40 +0930 Subject: [PATCH] moved u128+u128 to int128.h --- src/field_5x52_int128_impl.h | 19 +------------------ src/int128.h | 5 +++++ src/int128_native_impl.h | 4 ++++ src/int128_struct_impl.h | 5 +++++ 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/field_5x52_int128_impl.h b/src/field_5x52_int128_impl.h index 56b2e02e42..e288617aa2 100644 --- a/src/field_5x52_int128_impl.h +++ b/src/field_5x52_int128_impl.h @@ -57,26 +57,9 @@ static FIAT_SECP256K1_DETTMAN_FIAT_INLINE uint64_t u64_and_u128_u64(secp256k1_ui } static FIAT_SECP256K1_DETTMAN_FIAT_INLINE secp256k1_uint128 u128_add_u128_u128(secp256k1_uint128 a, secp256k1_uint128 b) { - uint64_t bl; - uint64_t bh; - uint64_t rh; - uint64_t rl; secp256k1_uint128 r = a; - bl = secp256k1_u128_to_u64(&b); - - /* adding low b to r*/ - secp256k1_u128_accum_u64(&r, bl); - - rl = secp256k1_u128_to_u64(&r); - rh = secp256k1_u128_hi_u64(&r); - - /* adding high b*/ - bh = secp256k1_u128_hi_u64(&b); - rh += bh; - - /* saving all in r*/ - secp256k1_u128_load(&r, rh, rl); + secp256k1_u128_accum(&r, &b); return r; } diff --git a/src/int128.h b/src/int128.h index 5355fbfae0..c0b611ecf9 100644 --- a/src/int128.h +++ b/src/int128.h @@ -28,6 +28,11 @@ static SECP256K1_INLINE void secp256k1_u128_accum_mul(secp256k1_uint128 *r, uint */ static SECP256K1_INLINE void secp256k1_u128_accum_u64(secp256k1_uint128 *r, uint64_t a); +/* Add an unsigned 128-bit value a to r. + * The final result is taken modulo 2^128. + */ +static SECP256K1_INLINE void secp256k1_u128_accum(secp256k1_uint128 *r, secp256k1_uint128 *a); + /* Unsigned (logical) right shift. * Non-constant time in n. */ diff --git a/src/int128_native_impl.h b/src/int128_native_impl.h index 7f02e1590b..b9f089d43a 100644 --- a/src/int128_native_impl.h +++ b/src/int128_native_impl.h @@ -20,6 +20,10 @@ static SECP256K1_INLINE void secp256k1_u128_accum_u64(secp256k1_uint128 *r, uint *r += a; } +static SECP256K1_INLINE void secp256k1_u128_accum(secp256k1_uint128 *r, secp256k1_uint128 *a){ + *r += *a; +} + static SECP256K1_INLINE void secp256k1_u128_rshift(secp256k1_uint128 *r, unsigned int n) { VERIFY_CHECK(n < 128); *r >>= n; diff --git a/src/int128_struct_impl.h b/src/int128_struct_impl.h index 962a71d13b..a59c41ebdc 100644 --- a/src/int128_struct_impl.h +++ b/src/int128_struct_impl.h @@ -71,6 +71,11 @@ static SECP256K1_INLINE void secp256k1_u128_accum_u64(secp256k1_uint128 *r, uint r->hi += r->lo < a; } +static SECP256K1_INLINE void secp256k1_u128_accum(secp256k1_uint128 *r, secp256k1_uint128 *a){ + r->lo += a->lo; + r->hi += r->lo < a->lo + a->hi; +} + /* Unsigned (logical) right shift. * Non-constant time in n. */