Skip to content

Commit 7b5409a

Browse files
committed
Merge pull request #1928 from bettio/remove-bif-args_to_bigint
bif.c: remove `args_to_bigint` These changes are made under both the "Apache 2.0" and the "GNU Lesser General Public License 2.1 or later" license terms (dual license). SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
2 parents 70519ec + 75e08ea commit 7b5409a

File tree

1 file changed

+31
-44
lines changed

1 file changed

+31
-44
lines changed

src/libAtomVM/bif.c

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,8 @@ _Static_assert(
8888
static term make_bigint(Context *ctx, uint32_t fail_label, uint32_t live,
8989
const intn_digit_t bigres[], size_t bigres_len, intn_integer_sign_t sign);
9090

91-
static void term_to_bigint(term arg1, intn_digit_t *tmp_buf1, intn_digit_t **b1, size_t *b1_len,
92-
intn_integer_sign_t *b1_sign);
93-
94-
static void args_to_bigint(term arg1, term arg2, intn_digit_t *tmp_buf1, intn_digit_t *tmp_buf2,
95-
intn_digit_t **b1, size_t *b1_len, intn_integer_sign_t *b1_sign, intn_digit_t **b2,
96-
size_t *b2_len, intn_integer_sign_t *b2_sign);
91+
static void term_to_bigint(term arg1, intn_digit_t *tmp_buf1, const intn_digit_t **b1,
92+
size_t *b1_len, intn_integer_sign_t *b1_sign);
9793

9894
const struct ExportedFunction *bif_registry_get_handler(const char *mfa)
9995
{
@@ -556,14 +552,14 @@ static term add_maybe_bigint(Context *ctx, uint32_t fail_label, uint32_t live, t
556552
intn_digit_t tmp_buf1[INTN_INT64_LEN];
557553
intn_digit_t tmp_buf2[INTN_INT64_LEN];
558554

559-
intn_digit_t *bn1;
555+
const intn_digit_t *bn1;
560556
size_t bn1_len;
561557
intn_integer_sign_t bn1_sign;
562-
intn_digit_t *bn2;
558+
term_to_bigint(arg1, tmp_buf1, &bn1, &bn1_len, &bn1_sign);
559+
const intn_digit_t *bn2;
563560
size_t bn2_len;
564561
intn_integer_sign_t bn2_sign;
565-
args_to_bigint(
566-
arg1, arg2, tmp_buf1, tmp_buf2, &bn1, &bn1_len, &bn1_sign, &bn2, &bn2_len, &bn2_sign);
562+
term_to_bigint(arg2, tmp_buf2, &bn2, &bn2_len, &bn2_sign);
567563

568564
size_t bigres_len = INTN_ADD_OUT_LEN(bn1_len, bn2_len);
569565
if (bigres_len > INTN_MAX_RES_LEN) {
@@ -694,14 +690,14 @@ static term sub_maybe_bigint(Context *ctx, uint32_t fail_label, uint32_t live, t
694690
intn_digit_t tmp_buf1[INTN_INT64_LEN];
695691
intn_digit_t tmp_buf2[INTN_INT64_LEN];
696692

697-
intn_digit_t *bn1;
693+
const intn_digit_t *bn1;
698694
size_t bn1_len;
699695
intn_integer_sign_t bn1_sign;
700-
intn_digit_t *bn2;
696+
term_to_bigint(arg1, tmp_buf1, &bn1, &bn1_len, &bn1_sign);
697+
const intn_digit_t *bn2;
701698
size_t bn2_len;
702699
intn_integer_sign_t bn2_sign;
703-
args_to_bigint(
704-
arg1, arg2, tmp_buf1, tmp_buf2, &bn1, &bn1_len, &bn1_sign, &bn2, &bn2_len, &bn2_sign);
700+
term_to_bigint(arg2, tmp_buf2, &bn2, &bn2_len, &bn2_sign);
705701

706702
size_t bigres_len = INTN_SUB_OUT_LEN(bn1_len, bn2_len);
707703
if (bigres_len > INTN_MAX_RES_LEN) {
@@ -842,8 +838,8 @@ static term make_bigint(Context *ctx, uint32_t fail_label, uint32_t live,
842838
}
843839
}
844840

845-
static void term_to_bigint(term arg1, intn_digit_t *tmp_buf1, intn_digit_t **b1, size_t *b1_len,
846-
intn_integer_sign_t *b1_sign)
841+
static void term_to_bigint(term arg1, intn_digit_t *tmp_buf1, const intn_digit_t **b1,
842+
size_t *b1_len, intn_integer_sign_t *b1_sign)
847843
{
848844
if (term_is_boxed_integer(arg1)
849845
&& (term_boxed_size(arg1) > (INTN_INT64_LEN * sizeof(intn_digit_t)) / sizeof(term))) {
@@ -858,16 +854,6 @@ static void term_to_bigint(term arg1, intn_digit_t *tmp_buf1, intn_digit_t **b1,
858854
}
859855
}
860856

861-
static void args_to_bigint(term arg1, term arg2, intn_digit_t *tmp_buf1, intn_digit_t *tmp_buf2,
862-
intn_digit_t **b1, size_t *b1_len, intn_integer_sign_t *b1_sign, intn_digit_t **b2,
863-
size_t *b2_len, intn_integer_sign_t *b2_sign)
864-
{
865-
// arg1 or arg2 may need to be "upgraded",
866-
// in that case tmp_buf will hold the "upgraded" version
867-
term_to_bigint(arg1, tmp_buf1, b1, b1_len, b1_sign);
868-
term_to_bigint(arg2, tmp_buf2, b2, b2_len, b2_sign);
869-
}
870-
871857
static term mul_int64_to_bigint(
872858
Context *ctx, uint32_t fail_label, uint32_t live, int64_t val1, int64_t val2)
873859
{
@@ -884,14 +870,14 @@ static term mul_maybe_bigint(Context *ctx, uint32_t fail_label, uint32_t live, t
884870
intn_digit_t tmp_buf1[INTN_INT64_LEN];
885871
intn_digit_t tmp_buf2[INTN_INT64_LEN];
886872

887-
intn_digit_t *bn1;
873+
const intn_digit_t *bn1;
888874
size_t bn1_len;
889875
intn_integer_sign_t bn1_sign;
890-
intn_digit_t *bn2;
876+
term_to_bigint(arg1, tmp_buf1, &bn1, &bn1_len, &bn1_sign);
877+
const intn_digit_t *bn2;
891878
size_t bn2_len;
892879
intn_integer_sign_t bn2_sign;
893-
args_to_bigint(
894-
arg1, arg2, tmp_buf1, tmp_buf2, &bn1, &bn1_len, &bn1_sign, &bn2, &bn2_len, &bn2_sign);
880+
term_to_bigint(arg2, tmp_buf2, &bn2, &bn2_len, &bn2_sign);
895881

896882
size_t bigres_len = INTN_MUL_OUT_LEN(bn1_len, bn2_len);
897883
if (bigres_len > INTN_MAX_RES_LEN) {
@@ -1047,14 +1033,14 @@ static term div_maybe_bigint(Context *ctx, uint32_t fail_label, uint32_t live, t
10471033
intn_digit_t tmp_buf1[INTN_INT64_LEN];
10481034
intn_digit_t tmp_buf2[INTN_INT64_LEN];
10491035

1050-
intn_digit_t *bn1;
1036+
const intn_digit_t *bn1;
10511037
size_t bn1_len;
10521038
intn_integer_sign_t bn1_sign;
1053-
intn_digit_t *bn2;
1039+
term_to_bigint(arg1, tmp_buf1, &bn1, &bn1_len, &bn1_sign);
1040+
const intn_digit_t *bn2;
10541041
size_t bn2_len;
10551042
intn_integer_sign_t bn2_sign;
1056-
args_to_bigint(
1057-
arg1, arg2, tmp_buf1, tmp_buf2, &bn1, &bn1_len, &bn1_sign, &bn2, &bn2_len, &bn2_sign);
1043+
term_to_bigint(arg2, tmp_buf2, &bn2, &bn2_len, &bn2_sign);
10581044

10591045
int cmp_result = intn_cmp(bn1, bn1_len, bn2, bn2_len);
10601046
if (cmp_result < 0) {
@@ -1367,14 +1353,14 @@ static term rem_maybe_bigint(Context *ctx, uint32_t fail_label, uint32_t live, t
13671353
intn_digit_t tmp_buf1[INTN_INT64_LEN];
13681354
intn_digit_t tmp_buf2[INTN_INT64_LEN];
13691355

1370-
intn_digit_t *bn1;
1356+
const intn_digit_t *bn1;
13711357
size_t bn1_len;
13721358
intn_integer_sign_t bn1_sign;
1373-
intn_digit_t *bn2;
1359+
term_to_bigint(arg1, tmp_buf1, &bn1, &bn1_len, &bn1_sign);
1360+
const intn_digit_t *bn2;
13741361
size_t bn2_len;
13751362
intn_integer_sign_t bn2_sign;
1376-
args_to_bigint(
1377-
arg1, arg2, tmp_buf1, tmp_buf2, &bn1, &bn1_len, &bn1_sign, &bn2, &bn2_len, &bn2_sign);
1363+
term_to_bigint(arg2, tmp_buf2, &bn2, &bn2_len, &bn2_sign);
13781364

13791365
int cmp_result = intn_cmp(bn1, bn1_len, bn2, bn2_len);
13801366
if (cmp_result < 0) {
@@ -1630,13 +1616,14 @@ static inline term bitwise_helper(
16301616
} else {
16311617
intn_digit_t tmp_buf1[INTN_INT64_LEN];
16321618
intn_digit_t tmp_buf2[INTN_INT64_LEN];
1633-
intn_digit_t *m;
1619+
const intn_digit_t *m;
16341620
size_t m_len;
16351621
intn_integer_sign_t m_sign;
1636-
intn_digit_t *n;
1622+
term_to_bigint(arg1, tmp_buf1, &m, &m_len, &m_sign);
1623+
const intn_digit_t *n;
16371624
size_t n_len;
16381625
intn_integer_sign_t n_sign;
1639-
args_to_bigint(arg1, arg2, tmp_buf1, tmp_buf2, &m, &m_len, &m_sign, &n, &n_len, &n_sign);
1626+
term_to_bigint(arg2, tmp_buf2, &n, &n_len, &n_sign);
16401627

16411628
intn_digit_t bigres[INTN_MAX_RES_LEN];
16421629
intn_integer_sign_t bigres_sign;
@@ -1709,7 +1696,7 @@ term bif_erlang_bsl_2(Context *ctx, uint32_t fail_label, int live, term arg1, te
17091696
}
17101697

17111698
intn_digit_t tmp_buf1[INTN_INT64_LEN];
1712-
intn_digit_t *m;
1699+
const intn_digit_t *m;
17131700
size_t m_len;
17141701
intn_integer_sign_t m_sign;
17151702
term_to_bigint(arg1, tmp_buf1, &m, &m_len, &m_sign);
@@ -1765,7 +1752,7 @@ term bif_erlang_bsr_2(Context *ctx, uint32_t fail_label, int live, term arg1, te
17651752
}
17661753

17671754
intn_digit_t tmp_buf1[INTN_INT64_LEN];
1768-
intn_digit_t *m;
1755+
const intn_digit_t *m;
17691756
size_t m_len;
17701757
intn_integer_sign_t m_sign;
17711758
term_to_bigint(arg1, tmp_buf1, &m, &m_len, &m_sign);
@@ -1826,7 +1813,7 @@ static term bnot_boxed_helper(Context *ctx, uint32_t fail_label, uint32_t live,
18261813
#endif
18271814
default: {
18281815
intn_digit_t tmp_buf1[INTN_INT64_LEN];
1829-
intn_digit_t *m;
1816+
const intn_digit_t *m;
18301817
size_t m_len;
18311818
intn_integer_sign_t m_sign;
18321819
term_to_bigint(arg1, tmp_buf1, &m, &m_len, &m_sign);

0 commit comments

Comments
 (0)