diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-09 11:44:20 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-09 11:44:20 +0100 |
| commit | e20e00de341518f2a9d49bde77b9e4876b472a4e (patch) | |
| tree | 869b26639a52472d9d2edfab5a828b162d7f205f /miscutils | |
| parent | 5ec4b491258be628734f5c8fa315a1df55bffcf7 (diff) | |
| download | busybox-w32-e20e00de341518f2a9d49bde77b9e4876b472a4e.tar.gz busybox-w32-e20e00de341518f2a9d49bde77b9e4876b472a4e.tar.bz2 busybox-w32-e20e00de341518f2a9d49bde77b9e4876b472a4e.zip | |
bc: add and use bc_num_init_DEF_SIZE()
function old new delta
bc_num_init_DEF_SIZE - 10 +10
bc_num_binary 150 148 -2
bc_program_pushVar 208 203 -5
bc_program_modexp 741 736 -5
bc_program_copyToVar 316 311 -5
bc_program_call 352 347 -5
bc_array_expand 88 83 -5
bc_program_num 1125 1115 -10
bc_vm_init 821 786 -35
bc_program_exec 4152 4098 -54
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/9 up/down: 10/-126) Total: -116 bytes
text data bss dec hex filename
985988 477 7296 993761 f29e1 busybox_old
985872 477 7296 993645 f296d busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils')
| -rw-r--r-- | miscutils/bc.c | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 0dc3f843c..2e3c4139e 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
| @@ -1407,6 +1407,11 @@ static void bc_num_init(BcNum *n, size_t req) | |||
| 1407 | n->cap = req; | 1407 | n->cap = req; |
| 1408 | } | 1408 | } |
| 1409 | 1409 | ||
| 1410 | static void bc_num_init_DEF_SIZE(BcNum *n) | ||
| 1411 | { | ||
| 1412 | bc_num_init(n, BC_NUM_DEF_SIZE); | ||
| 1413 | } | ||
| 1414 | |||
| 1410 | static void bc_num_expand(BcNum *n, size_t req) | 1415 | static void bc_num_expand(BcNum *n, size_t req) |
| 1411 | { | 1416 | { |
| 1412 | req = req >= BC_NUM_DEF_SIZE ? req : BC_NUM_DEF_SIZE; | 1417 | req = req >= BC_NUM_DEF_SIZE ? req : BC_NUM_DEF_SIZE; |
| @@ -2260,8 +2265,8 @@ static void bc_num_parseBase(BcNum *n, const char *val, BcNum *base) | |||
| 2260 | for (i = 0; zero && i < len; ++i) zero = (val[i] == '.' || val[i] == '0'); | 2265 | for (i = 0; zero && i < len; ++i) zero = (val[i] == '.' || val[i] == '0'); |
| 2261 | if (zero) return; | 2266 | if (zero) return; |
| 2262 | 2267 | ||
| 2263 | bc_num_init(&temp, BC_NUM_DEF_SIZE); | 2268 | bc_num_init_DEF_SIZE(&temp); |
| 2264 | bc_num_init(&mult, BC_NUM_DEF_SIZE); | 2269 | bc_num_init_DEF_SIZE(&mult); |
| 2265 | 2270 | ||
| 2266 | for (i = 0; i < len; ++i) { | 2271 | for (i = 0; i < len; ++i) { |
| 2267 | 2272 | ||
| @@ -2584,7 +2589,7 @@ static BcStatus bc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale) | |||
| 2584 | 2589 | ||
| 2585 | bc_num_init(&num1, len); | 2590 | bc_num_init(&num1, len); |
| 2586 | bc_num_init(&num2, len); | 2591 | bc_num_init(&num2, len); |
| 2587 | bc_num_init(&half, BC_NUM_DEF_SIZE); | 2592 | bc_num_init_DEF_SIZE(&half); |
| 2588 | 2593 | ||
| 2589 | bc_num_one(&half); | 2594 | bc_num_one(&half); |
| 2590 | half.num[0] = 5; | 2595 | half.num[0] = 5; |
| @@ -2701,7 +2706,7 @@ static BcStatus bc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d) | |||
| 2701 | bc_num_expand(d, c->len); | 2706 | bc_num_expand(d, c->len); |
| 2702 | bc_num_init(&base, c->len); | 2707 | bc_num_init(&base, c->len); |
| 2703 | bc_num_init(&exp, b->len); | 2708 | bc_num_init(&exp, b->len); |
| 2704 | bc_num_init(&two, BC_NUM_DEF_SIZE); | 2709 | bc_num_init_DEF_SIZE(&two); |
| 2705 | bc_num_init(&temp, b->len); | 2710 | bc_num_init(&temp, b->len); |
| 2706 | 2711 | ||
| 2707 | bc_num_one(&two); | 2712 | bc_num_one(&two); |
| @@ -2792,7 +2797,7 @@ static void bc_array_expand(BcVec *a, size_t len) | |||
| 2792 | 2797 | ||
| 2793 | if (a->size == sizeof(BcNum) && a->dtor == bc_num_free) { | 2798 | if (a->size == sizeof(BcNum) && a->dtor == bc_num_free) { |
| 2794 | while (len > a->len) { | 2799 | while (len > a->len) { |
| 2795 | bc_num_init(&data.n, BC_NUM_DEF_SIZE); | 2800 | bc_num_init_DEF_SIZE(&data.n); |
| 2796 | bc_vec_push(a, &data.n); | 2801 | bc_vec_push(a, &data.n); |
| 2797 | } | 2802 | } |
| 2798 | } | 2803 | } |
| @@ -5530,7 +5535,7 @@ static BcStatus bc_program_op(char inst) | |||
| 5530 | 5535 | ||
| 5531 | s = bc_program_binOpPrep(&opd1, &n1, &opd2, &n2, false); | 5536 | s = bc_program_binOpPrep(&opd1, &n1, &opd2, &n2, false); |
| 5532 | if (s) return s; | 5537 | if (s) return s; |
| 5533 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 5538 | bc_num_init_DEF_SIZE(&res.d.n); |
| 5534 | 5539 | ||
| 5535 | s = bc_program_ops[inst - BC_INST_POWER](n1, n2, &res.d.n, G.prog.scale); | 5540 | s = bc_program_ops[inst - BC_INST_POWER](n1, n2, &res.d.n, G.prog.scale); |
| 5536 | if (s) goto err; | 5541 | if (s) goto err; |
| @@ -5784,7 +5789,7 @@ static BcStatus bc_program_logical(char inst) | |||
| 5784 | 5789 | ||
| 5785 | s = bc_program_binOpPrep(&opd1, &n1, &opd2, &n2, false); | 5790 | s = bc_program_binOpPrep(&opd1, &n1, &opd2, &n2, false); |
| 5786 | if (s) return s; | 5791 | if (s) return s; |
| 5787 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 5792 | bc_num_init_DEF_SIZE(&res.d.n); |
| 5788 | 5793 | ||
| 5789 | if (inst == BC_INST_BOOL_AND) | 5794 | if (inst == BC_INST_BOOL_AND) |
| 5790 | cond = bc_num_cmp(n1, &G.prog.zero) && bc_num_cmp(n2, &G.prog.zero); | 5795 | cond = bc_num_cmp(n1, &G.prog.zero) && bc_num_cmp(n2, &G.prog.zero); |
| @@ -5896,7 +5901,7 @@ static BcStatus bc_program_copyToVar(char *name, bool var) | |||
| 5896 | v = bc_program_search(name, var); | 5901 | v = bc_program_search(name, var); |
| 5897 | 5902 | ||
| 5898 | if (var) { | 5903 | if (var) { |
| 5899 | bc_num_init(&r.d.n, BC_NUM_DEF_SIZE); | 5904 | bc_num_init_DEF_SIZE(&r.d.n); |
| 5900 | bc_num_copy(&r.d.n, n); | 5905 | bc_num_copy(&r.d.n, n); |
| 5901 | } | 5906 | } |
| 5902 | else { | 5907 | else { |
| @@ -6035,7 +6040,7 @@ static BcStatus bc_program_pushVar(char *code, size_t *bgn, | |||
| 6035 | 6040 | ||
| 6036 | r.t = BC_RESULT_TEMP; | 6041 | r.t = BC_RESULT_TEMP; |
| 6037 | 6042 | ||
| 6038 | bc_num_init(&r.d.n, BC_NUM_DEF_SIZE); | 6043 | bc_num_init_DEF_SIZE(&r.d.n); |
| 6039 | bc_num_copy(&r.d.n, num); | 6044 | bc_num_copy(&r.d.n, num); |
| 6040 | } | 6045 | } |
| 6041 | else { | 6046 | else { |
| @@ -6164,7 +6169,7 @@ static BcStatus bc_program_call(char *code, size_t *idx) | |||
| 6164 | v = bc_program_search(a->name, a->idx); | 6169 | v = bc_program_search(a->name, a->idx); |
| 6165 | 6170 | ||
| 6166 | if (a->idx) { | 6171 | if (a->idx) { |
| 6167 | bc_num_init(¶m.n, BC_NUM_DEF_SIZE); | 6172 | bc_num_init_DEF_SIZE(¶m.n); |
| 6168 | bc_vec_push(v, ¶m.n); | 6173 | bc_vec_push(v, ¶m.n); |
| 6169 | } | 6174 | } |
| 6170 | else { | 6175 | else { |
| @@ -6203,7 +6208,7 @@ static BcStatus bc_program_return(char inst) | |||
| 6203 | bc_num_copy(&res.d.n, num); | 6208 | bc_num_copy(&res.d.n, num); |
| 6204 | } | 6209 | } |
| 6205 | else { | 6210 | else { |
| 6206 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 6211 | bc_num_init_DEF_SIZE(&res.d.n); |
| 6207 | bc_num_zero(&res.d.n); | 6212 | bc_num_zero(&res.d.n); |
| 6208 | } | 6213 | } |
| 6209 | 6214 | ||
| @@ -6261,7 +6266,7 @@ static BcStatus bc_program_builtin(char inst) | |||
| 6261 | return bc_error_variable_is_wrong_type(); | 6266 | return bc_error_variable_is_wrong_type(); |
| 6262 | #endif | 6267 | #endif |
| 6263 | 6268 | ||
| 6264 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 6269 | bc_num_init_DEF_SIZE(&res.d.n); |
| 6265 | 6270 | ||
| 6266 | if (inst == BC_INST_SQRT) s = bc_num_sqrt(num, &res.d.n, G.prog.scale); | 6271 | if (inst == BC_INST_SQRT) s = bc_num_sqrt(num, &res.d.n, G.prog.scale); |
| 6267 | #if ENABLE_BC | 6272 | #if ENABLE_BC |
| @@ -6299,7 +6304,7 @@ static BcStatus bc_program_divmod(void) | |||
| 6299 | s = bc_program_binOpPrep(&opd1, &n1, &opd2, &n2, false); | 6304 | s = bc_program_binOpPrep(&opd1, &n1, &opd2, &n2, false); |
| 6300 | if (s) return s; | 6305 | if (s) return s; |
| 6301 | 6306 | ||
| 6302 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 6307 | bc_num_init_DEF_SIZE(&res.d.n); |
| 6303 | bc_num_init(&res2.d.n, n2->len); | 6308 | bc_num_init(&res2.d.n, n2->len); |
| 6304 | 6309 | ||
| 6305 | s = bc_num_divmod(n1, n2, &res2.d.n, &res.d.n, G.prog.scale); | 6310 | s = bc_num_divmod(n1, n2, &res2.d.n, &res.d.n, G.prog.scale); |
| @@ -6369,7 +6374,7 @@ static void bc_program_stackLen(void) | |||
| 6369 | 6374 | ||
| 6370 | res.t = BC_RESULT_TEMP; | 6375 | res.t = BC_RESULT_TEMP; |
| 6371 | 6376 | ||
| 6372 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 6377 | bc_num_init_DEF_SIZE(&res.d.n); |
| 6373 | bc_num_ulong2num(&res.d.n, len); | 6378 | bc_num_ulong2num(&res.d.n, len); |
| 6374 | bc_vec_push(&G.prog.results, &res); | 6379 | bc_vec_push(&G.prog.results, &res); |
| 6375 | } | 6380 | } |
| @@ -6392,7 +6397,7 @@ static BcStatus bc_program_asciify(void) | |||
| 6392 | 6397 | ||
| 6393 | if (BC_PROG_NUM(r, num)) { | 6398 | if (BC_PROG_NUM(r, num)) { |
| 6394 | 6399 | ||
| 6395 | bc_num_init(&n, BC_NUM_DEF_SIZE); | 6400 | bc_num_init_DEF_SIZE(&n); |
| 6396 | bc_num_copy(&n, num); | 6401 | bc_num_copy(&n, num); |
| 6397 | bc_num_truncate(&n, n.rdx); | 6402 | bc_num_truncate(&n, n.rdx); |
| 6398 | 6403 | ||
| @@ -6610,7 +6615,7 @@ static void bc_program_pushGlobal(char inst) | |||
| 6610 | else | 6615 | else |
| 6611 | val = (unsigned long) G.prog.ob_t; | 6616 | val = (unsigned long) G.prog.ob_t; |
| 6612 | 6617 | ||
| 6613 | bc_num_init(&res.d.n, BC_NUM_DEF_SIZE); | 6618 | bc_num_init_DEF_SIZE(&res.d.n); |
| 6614 | bc_num_ulong2num(&res.d.n, val); | 6619 | bc_num_ulong2num(&res.d.n, val); |
| 6615 | bc_vec_push(&G.prog.results, &res); | 6620 | bc_vec_push(&G.prog.results, &res); |
| 6616 | } | 6621 | } |
| @@ -6760,7 +6765,7 @@ static BcStatus bc_program_exec(void) | |||
| 6760 | case BC_INST_BOOL_NOT: | 6765 | case BC_INST_BOOL_NOT: |
| 6761 | s = bc_program_prep(&ptr, &num); | 6766 | s = bc_program_prep(&ptr, &num); |
| 6762 | if (s) return s; | 6767 | if (s) return s; |
| 6763 | bc_num_init(&r.d.n, BC_NUM_DEF_SIZE); | 6768 | bc_num_init_DEF_SIZE(&r.d.n); |
| 6764 | if (!bc_num_cmp(num, &G.prog.zero)) | 6769 | if (!bc_num_cmp(num, &G.prog.zero)) |
| 6765 | bc_num_one(&r.d.n); | 6770 | bc_num_one(&r.d.n); |
| 6766 | else | 6771 | else |
| @@ -7356,31 +7361,30 @@ static void bc_program_init(void) | |||
| 7356 | memset(&ip, 0, sizeof(BcInstPtr)); | 7361 | memset(&ip, 0, sizeof(BcInstPtr)); |
| 7357 | 7362 | ||
| 7358 | /* G.prog.nchars = G.prog.scale = 0; - already is */ | 7363 | /* G.prog.nchars = G.prog.scale = 0; - already is */ |
| 7359 | 7364 | bc_num_init_DEF_SIZE(&G.prog.ib); | |
| 7360 | bc_num_init(&G.prog.ib, BC_NUM_DEF_SIZE); | ||
| 7361 | bc_num_ten(&G.prog.ib); | 7365 | bc_num_ten(&G.prog.ib); |
| 7362 | G.prog.ib_t = 10; | 7366 | G.prog.ib_t = 10; |
| 7363 | 7367 | ||
| 7364 | bc_num_init(&G.prog.ob, BC_NUM_DEF_SIZE); | 7368 | bc_num_init_DEF_SIZE(&G.prog.ob); |
| 7365 | bc_num_ten(&G.prog.ob); | 7369 | bc_num_ten(&G.prog.ob); |
| 7366 | G.prog.ob_t = 10; | 7370 | G.prog.ob_t = 10; |
| 7367 | 7371 | ||
| 7368 | bc_num_init(&G.prog.hexb, BC_NUM_DEF_SIZE); | 7372 | bc_num_init_DEF_SIZE(&G.prog.hexb); |
| 7369 | bc_num_ten(&G.prog.hexb); | 7373 | bc_num_ten(&G.prog.hexb); |
| 7370 | G.prog.hexb.num[0] = 6; | 7374 | G.prog.hexb.num[0] = 6; |
| 7371 | 7375 | ||
| 7372 | #if ENABLE_DC | 7376 | #if ENABLE_DC |
| 7373 | bc_num_init(&G.prog.strmb, BC_NUM_DEF_SIZE); | 7377 | bc_num_init_DEF_SIZE(&G.prog.strmb); |
| 7374 | bc_num_ulong2num(&G.prog.strmb, UCHAR_MAX + 1); | 7378 | bc_num_ulong2num(&G.prog.strmb, UCHAR_MAX + 1); |
| 7375 | #endif | 7379 | #endif |
| 7376 | 7380 | ||
| 7377 | bc_num_init(&G.prog.last, BC_NUM_DEF_SIZE); | 7381 | bc_num_init_DEF_SIZE(&G.prog.last); |
| 7378 | bc_num_zero(&G.prog.last); | 7382 | bc_num_zero(&G.prog.last); |
| 7379 | 7383 | ||
| 7380 | bc_num_init(&G.prog.zero, BC_NUM_DEF_SIZE); | 7384 | bc_num_init_DEF_SIZE(&G.prog.zero); |
| 7381 | bc_num_zero(&G.prog.zero); | 7385 | bc_num_zero(&G.prog.zero); |
| 7382 | 7386 | ||
| 7383 | bc_num_init(&G.prog.one, BC_NUM_DEF_SIZE); | 7387 | bc_num_init_DEF_SIZE(&G.prog.one); |
| 7384 | bc_num_one(&G.prog.one); | 7388 | bc_num_one(&G.prog.one); |
| 7385 | 7389 | ||
| 7386 | bc_vec_init(&G.prog.fns, sizeof(BcFunc), bc_func_free); | 7390 | bc_vec_init(&G.prog.fns, sizeof(BcFunc), bc_func_free); |
