Skip to content

Commit f2b7e88

Browse files
committed
Add int128 randomized tests
1 parent 6138d73 commit f2b7e88

File tree

4 files changed

+362
-75
lines changed

4 files changed

+362
-75
lines changed

src/int128.h

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
# error "Please select int128 implementation"
1313
# endif
1414

15+
/* Construct an unsigned 128-bit value from a high and a low 64-bit value. */
16+
static SECP256K1_INLINE void secp256k1_u128_load(secp256k1_uint128 *r, uint64_t hi, uint64_t lo);
17+
1518
/* Multiply two unsigned 64-bit values a and b and write the result to r. */
1619
static SECP256K1_INLINE void secp256k1_u128_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b);
1720

@@ -44,6 +47,9 @@ static SECP256K1_INLINE void secp256k1_u128_from_u64(secp256k1_uint128 *r, uint6
4447
*/
4548
static SECP256K1_INLINE int secp256k1_u128_check_bits(const secp256k1_uint128 *r, unsigned int n);
4649

50+
/* Construct an signed 128-bit value from a high and a low 64-bit value. */
51+
static SECP256K1_INLINE void secp256k1_i128_load(secp256k1_int128 *r, int64_t hi, uint64_t lo);
52+
4753
/* Multiply two signed 64-bit values a and b and write the result to r. */
4854
static SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b);
4955

src/int128_native_impl.h

+8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
#include "int128.h"
55

6+
static SECP256K1_INLINE void secp256k1_u128_load(secp256k1_uint128 *r, uint64_t hi, uint64_t lo) {
7+
*r = (((uint128_t)hi) << 64) + lo;
8+
}
9+
610
static SECP256K1_INLINE void secp256k1_u128_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b) {
711
*r = (uint128_t)a * b;
812
}
@@ -37,6 +41,10 @@ static SECP256K1_INLINE int secp256k1_u128_check_bits(const secp256k1_uint128 *r
3741
return (*r >> n == 0);
3842
}
3943

44+
static SECP256K1_INLINE void secp256k1_i128_load(secp256k1_int128 *r, int64_t hi, uint64_t lo) {
45+
*r = (((uint128_t)(uint64_t)hi) << 64) + lo;
46+
}
47+
4048
static SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b) {
4149
*r = (int128_t)a * b;
4250
}

src/int128_struct_impl.h

+10
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ static SECP256K1_INLINE int64_t secp256k1_mul128(int64_t a, int64_t b, int64_t*
4444
}
4545
#endif
4646

47+
static SECP256K1_INLINE void secp256k1_u128_load(secp256k1_uint128 *r, uint64_t hi, uint64_t lo) {
48+
r->hi = hi;
49+
r->lo = lo;
50+
}
51+
4752
static SECP256K1_INLINE void secp256k1_u128_mul(secp256k1_uint128 *r, uint64_t a, uint64_t b) {
4853
r->lo = secp256k1_umul128(a, b, &r->hi);
4954
}
@@ -93,6 +98,11 @@ static SECP256K1_INLINE int secp256k1_u128_check_bits(const secp256k1_uint128 *r
9398
: r->hi == 0 && r->lo >> n == 0;
9499
}
95100

101+
static SECP256K1_INLINE void secp256k1_i128_load(secp256k1_int128 *r, int64_t hi, uint64_t lo) {
102+
r->hi = hi;
103+
r->lo = lo;
104+
}
105+
96106
static SECP256K1_INLINE void secp256k1_i128_mul(secp256k1_int128 *r, int64_t a, int64_t b) {
97107
int64_t hi;
98108
r->lo = (uint64_t)secp256k1_mul128(a, b, &hi);

0 commit comments

Comments
 (0)