Skip to content

Commit dcf4c27

Browse files
committed
intn: make digit_bit_size a constant
Use INTN_DIGIT_BITS instead of `sizeof(intn_digit_t) * 8`. Signed-off-by: Davide Bettio <davide@uninstall.it>
1 parent 0009c83 commit dcf4c27

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

src/libAtomVM/intn.c

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -787,23 +787,21 @@ size_t intn_bnot(const intn_digit_t m[], size_t m_len, intn_integer_sign_t m_sig
787787

788788
size_t intn_bsl(const intn_digit_t num[], size_t len, size_t n, intn_digit_t *out)
789789
{
790-
size_t digit_bit_size = sizeof(uint32_t) * 8;
791-
792790
size_t digit_left_bit_shift = n % 32;
793791
size_t right_shift_n = (32 - digit_left_bit_shift);
794792

795793
size_t counted_digits = intn_count_digits(num, len);
796794
size_t ms_digit_bits = 32 - uint32_nlz(num[counted_digits - 1]);
797-
size_t effective_bits_len = (counted_digits - 1) * digit_bit_size + ms_digit_bits;
798-
size_t new_bits_len = size_align_up_pow2(effective_bits_len + n, digit_bit_size);
795+
size_t effective_bits_len = (counted_digits - 1) * INTN_DIGIT_BITS + ms_digit_bits;
796+
size_t new_bits_len = size_align_up_pow2(effective_bits_len + n, INTN_DIGIT_BITS);
799797

800-
size_t new_digits_count = new_bits_len / digit_bit_size;
798+
size_t new_digits_count = new_bits_len / INTN_DIGIT_BITS;
801799

802800
if (new_digits_count > INTN_BSL_MAX_RES_LEN) {
803801
return new_digits_count;
804802
}
805803

806-
size_t initial_zeros = MIN(n / digit_bit_size, INTN_BSL_MAX_RES_LEN);
804+
size_t initial_zeros = MIN(n / INTN_DIGIT_BITS, INTN_BSL_MAX_RES_LEN);
807805
memset(out, 0, initial_zeros * sizeof(uint32_t));
808806

809807
if (right_shift_n == 32) {
@@ -833,15 +831,14 @@ size_t intn_bsl(const intn_digit_t num[], size_t len, size_t n, intn_digit_t *ou
833831
void bsru(
834832
const uint32_t num[], size_t effective_bits_len, size_t n, uint32_t last_digit, uint32_t *out)
835833
{
836-
size_t digit_bit_size = sizeof(uint32_t) * 8; // 32
837-
838-
size_t digit_right_bit_shift = n % digit_bit_size;
839-
size_t left_shift_n = (digit_bit_size - digit_right_bit_shift);
834+
size_t digit_right_bit_shift = n % INTN_DIGIT_BITS;
835+
size_t left_shift_n = (INTN_DIGIT_BITS - digit_right_bit_shift);
840836

841-
size_t len_in_digits = size_align_up_pow2(effective_bits_len, digit_bit_size) / digit_bit_size;
837+
size_t len_in_digits
838+
= size_align_up_pow2(effective_bits_len, INTN_DIGIT_BITS) / INTN_DIGIT_BITS;
842839

843840
// caller makes sure that discarded < len_in_digits
844-
size_t discarded = n / digit_bit_size;
841+
size_t discarded = n / INTN_DIGIT_BITS;
845842

846843
if (left_shift_n == 32) {
847844
memcpy(out, num + discarded, (len_in_digits - discarded) * sizeof(uint32_t));
@@ -864,18 +861,17 @@ void bsru(
864861
size_t intn_bsr(
865862
const intn_digit_t num[], size_t len, intn_integer_sign_t num_sign, size_t n, intn_digit_t *out)
866863
{
867-
size_t digit_bit_size = sizeof(uint32_t) * 8;
868864
size_t counted_digits = intn_count_digits(num, len);
869865
size_t ms_digit_bits = 32 - uint32_nlz(num[counted_digits - 1]);
870-
size_t effective_bits_len = (counted_digits - 1) * digit_bit_size + ms_digit_bits;
866+
size_t effective_bits_len = (counted_digits - 1) * INTN_DIGIT_BITS + ms_digit_bits;
871867

872868
if (n >= effective_bits_len) {
873869
out[0] = (num_sign == IntNPositiveInteger) ? 0 : 1;
874870
return 1;
875871
}
876872

877873
size_t shifted_len
878-
= size_align_up_pow2(effective_bits_len - n, digit_bit_size) / digit_bit_size;
874+
= size_align_up_pow2(effective_bits_len - n, INTN_DIGIT_BITS) / INTN_DIGIT_BITS;
879875

880876
if (num_sign == IntNPositiveInteger) {
881877
bsru(num, effective_bits_len, n, 0, out);

src/libAtomVM/intn.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#define INTN_DIV_OUT_LEN(m, n) ((m) - (n) + 1 + 1)
5353
#define INTN_ABS_OUT_LEN(m) ((m) + 1)
5454

55+
#define INTN_DIGIT_BITS 32
5556
#define INTN_MAX_UNSIGNED_BYTES_SIZE 32
5657
#define INTN_MAX_UNSIGNED_BITS_SIZE 256
5758

0 commit comments

Comments
 (0)