From ff2e5c3efe931e6a088c2368b0ce5d5c21f03c65 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 11 Jul 2021 17:43:56 +0100 Subject: Simplify `big_int_not` for negative inputs --- src/big_int.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/big_int.cpp') diff --git a/src/big_int.cpp b/src/big_int.cpp index 231064bea..9cb1ec586 100644 --- a/src/big_int.cpp +++ b/src/big_int.cpp @@ -415,6 +415,14 @@ void big_int_not(BigInt *dst, BigInt const *x, i32 bit_count, bool is_signed) { big_int_from_u64(dst, 0); return; } + if (big_int_is_neg(x)) { + // ~x == -x - 1 + big_int_neg(dst, x); + mp_decr(dst); + mp_mod_2d(dst, bit_count, dst); + return; + } + BigInt pow2b = {}; mp_2expt(&pow2b, bit_count); -- cgit v1.2.3