@@ -88,12 +88,8 @@ _Static_assert(
8888static 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
9894const 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-
871857static 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