1 #ifndef SECP256K1_INT128_STRUCT_IMPL_H 2 #define SECP256K1_INT128_STRUCT_IMPL_H 6 #if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64)) 8 # if defined(_M_ARM64) || defined(SECP256K1_MSVC_MULH_TEST_OVERRIDE) 12 # if defined(SECP256K1_MSVC_MULH_TEST_OVERRIDE) 13 # pragma message(__FILE__ ": SECP256K1_MSVC_MULH_TEST_OVERRIDE is defined, forcing use of __(u)mulh.") 26 # define secp256k1_umul128 _umul128 27 # define secp256k1_mul128 _mul128 37 *hi = hh + (lh >> 32) + (hl >> 32) + (mid34 >> 32);
47 *hi = hh + (lh >> 32) + (hl >> 32) + (mid34 >> 32);
58 r->
lo = secp256k1_umul128(
a, b, &r->
hi);
63 lo = secp256k1_umul128(
a, b, &hi);
65 r->
hi += hi + (r->
lo < lo);
79 r->
lo = r->
hi >> (n-64);
82 r->
lo = ((1U * r->
hi) << (64-n)) | r->
lo >> n;
102 return n >= 64 ? r->
hi >> (n - 64) == 0
103 : r->
hi == 0 && r->
lo >> n == 0;
113 r->lo = (
uint64_t)secp256k1_mul128(
a, b, &hi);
155 secp256k1_i128_mul(r,
a, d);
156 secp256k1_i128_dissip_mul(r, b, c);
168 r->lo = ((1U * r->hi) << (64-n)) | r->lo >> n;
180 return (
int64_t)secp256k1_i128_to_u64(
a);
189 return a->hi == b->hi &&
a->lo == b->lo;
194 return n >= 64 ? r->hi == (
uint64_t)1 << (n - 64) && r->lo == 0
195 : r->hi == 0 && r->lo == (
uint64_t)1 << n;
#define VERIFY_CHECK(cond)
int128_t secp256k1_int128
unsigned __int64 uint64_t
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a