aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-18 17:00:35 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-18 17:00:35 +0100
commitd340143247f9b3aff486a2a6a4dc1e11ab8c8f86 (patch)
tree5b48a18dd37512b2e43a5da96f19ecc06ece479e /miscutils
parent09fe0aaefac905287fc4b533714ec961ec8c6968 (diff)
downloadbusybox-w32-d340143247f9b3aff486a2a6a4dc1e11ab8c8f86.tar.gz
busybox-w32-d340143247f9b3aff486a2a6a4dc1e11ab8c8f86.tar.bz2
busybox-w32-d340143247f9b3aff486a2a6a4dc1e11ab8c8f86.zip
bc: get rid of G.prog.ob, G.prog.strmb
function old new delta zbc_num_printNum 489 540 +51 zbc_program_asciify 426 473 +47 zbc_program_print 686 684 -2 zbc_program_exec 4008 3995 -13 zbc_program_assign 474 440 -34 bc_vm_init 739 663 -76 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/4 up/down: 98/-125) Total: -27 bytes text data bss dec hex filename 981404 485 7296 989185 f1801 busybox_old 981377 485 7296 989158 f17e6 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/bc.c49
1 files changed, 20 insertions, 29 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 0b891d88a..566808e92 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -1355,14 +1355,6 @@ static void bc_num_one(BcNum *n)
1355 n->num[0] = 1; 1355 n->num[0] = 1;
1356} 1356}
1357 1357
1358static void bc_num_ten(BcNum *n)
1359{
1360 bc_num_setToZero(n, 0);
1361 n->len = 2;
1362 n->num[0] = 0;
1363 n->num[1] = 1;
1364}
1365
1366// Note: this also sets BcNum to zero 1358// Note: this also sets BcNum to zero
1367static void bc_num_init(BcNum *n, size_t req) 1359static void bc_num_init(BcNum *n, size_t req)
1368{ 1360{
@@ -2251,6 +2243,7 @@ static void bc_num_parseBase(BcNum *n, const char *val, unsigned base_t)
2251 2243
2252 bc_num_init_DEF_SIZE(&temp); 2244 bc_num_init_DEF_SIZE(&temp);
2253 bc_num_init_DEF_SIZE(&mult); 2245 bc_num_init_DEF_SIZE(&mult);
2246//TODO: have BcNumSmall type, with static buffer
2254 bc_num_init_DEF_SIZE(&base); 2247 bc_num_init_DEF_SIZE(&base);
2255 bc_num_ulong2num(&base, base_t); 2248 bc_num_ulong2num(&base, base_t);
2256 2249
@@ -5314,10 +5307,11 @@ static void bc_num_printDecimal(BcNum *n)
5314 bc_num_printHex((size_t) n->num[i], 1, i == rdx); 5307 bc_num_printHex((size_t) n->num[i], 1, i == rdx);
5315} 5308}
5316 5309
5317static BC_STATUS zbc_num_printNum(BcNum *n, BcNum *base, size_t width, BcNumDigitOp print) 5310static BC_STATUS zbc_num_printNum(BcNum *n, unsigned base_t, size_t width, BcNumDigitOp print)
5318{ 5311{
5319 BcStatus s; 5312 BcStatus s;
5320 BcVec stack; 5313 BcVec stack;
5314 BcNum base;
5321 BcNum intp, fracp, digit, frac_len; 5315 BcNum intp, fracp, digit, frac_len;
5322 unsigned long dig, *ptr; 5316 unsigned long dig, *ptr;
5323 size_t i; 5317 size_t i;
@@ -5335,13 +5329,16 @@ static BC_STATUS zbc_num_printNum(BcNum *n, BcNum *base, size_t width, BcNumDigi
5335 bc_num_init(&frac_len, BC_NUM_INT(n)); 5329 bc_num_init(&frac_len, BC_NUM_INT(n));
5336 bc_num_copy(&intp, n); 5330 bc_num_copy(&intp, n);
5337 bc_num_one(&frac_len); 5331 bc_num_one(&frac_len);
5332//TODO: have BcNumSmall type, with static buffer
5333 bc_num_init_DEF_SIZE(&base);
5334 bc_num_ulong2num(&base, base_t);
5338 5335
5339 bc_num_truncate(&intp, intp.rdx); 5336 bc_num_truncate(&intp, intp.rdx);
5340 s = zbc_num_sub(n, &intp, &fracp, 0); 5337 s = zbc_num_sub(n, &intp, &fracp, 0);
5341 if (s) goto err; 5338 if (s) goto err;
5342 5339
5343 while (intp.len != 0) { 5340 while (intp.len != 0) {
5344 s = zbc_num_divmod(&intp, base, &intp, &digit, 0); 5341 s = zbc_num_divmod(&intp, &base, &intp, &digit, 0);
5345 if (s) goto err; 5342 if (s) goto err;
5346 s = zbc_num_ulong(&digit, &dig); 5343 s = zbc_num_ulong(&digit, &dig);
5347 if (s) goto err; 5344 if (s) goto err;
@@ -5356,7 +5353,7 @@ static BC_STATUS zbc_num_printNum(BcNum *n, BcNum *base, size_t width, BcNumDigi
5356 if (!n->rdx) goto err; 5353 if (!n->rdx) goto err;
5357 5354
5358 for (radix = true; frac_len.len <= n->rdx; radix = false) { 5355 for (radix = true; frac_len.len <= n->rdx; radix = false) {
5359 s = zbc_num_mul(&fracp, base, &fracp, n->rdx); 5356 s = zbc_num_mul(&fracp, &base, &fracp, n->rdx);
5360 if (s) goto err; 5357 if (s) goto err;
5361 s = zbc_num_ulong(&fracp, &dig); 5358 s = zbc_num_ulong(&fracp, &dig);
5362 if (s) goto err; 5359 if (s) goto err;
@@ -5364,10 +5361,11 @@ static BC_STATUS zbc_num_printNum(BcNum *n, BcNum *base, size_t width, BcNumDigi
5364 s = zbc_num_sub(&fracp, &intp, &fracp, 0); 5361 s = zbc_num_sub(&fracp, &intp, &fracp, 0);
5365 if (s) goto err; 5362 if (s) goto err;
5366 print(dig, width, radix); 5363 print(dig, width, radix);
5367 s = zbc_num_mul(&frac_len, base, &frac_len, 0); 5364 s = zbc_num_mul(&frac_len, &base, &frac_len, 0);
5368 if (s) goto err; 5365 if (s) goto err;
5369 } 5366 }
5370 err: 5367 err:
5368 bc_num_free(&base);
5371 bc_num_free(&frac_len); 5369 bc_num_free(&frac_len);
5372 bc_num_free(&digit); 5370 bc_num_free(&digit);
5373 bc_num_free(&fracp); 5371 bc_num_free(&fracp);
@@ -5406,7 +5404,7 @@ static BC_STATUS zbc_num_printBase(BcNum *n)
5406 print = bc_num_printDigits; 5404 print = bc_num_printDigits;
5407 } 5405 }
5408 5406
5409 s = zbc_num_printNum(n, &G.prog.ob, width, print); 5407 s = zbc_num_printNum(n, G.prog.ob_t, width, print);
5410 n->neg = neg; 5408 n->neg = neg;
5411 5409
5412 RETURN_STATUS(s); 5410 RETURN_STATUS(s);
@@ -5692,8 +5690,6 @@ static BC_STATUS zbc_program_assign(char inst)
5692 5690
5693 if (val > max) 5691 if (val > max)
5694 RETURN_STATUS(bc_error(msg[s])); 5692 RETURN_STATUS(bc_error(msg[s]));
5695 if (!sc && !ib)
5696 bc_num_copy(&G.prog.ob, l);
5697 5693
5698 *ptr = (size_t) val; 5694 *ptr = (size_t) val;
5699 s = BC_STATUS_SUCCESS; 5695 s = BC_STATUS_SUCCESS;
@@ -6092,11 +6088,18 @@ static BC_STATUS zbc_program_asciify(void)
6092 if (s) RETURN_STATUS(s); 6088 if (s) RETURN_STATUS(s);
6093 6089
6094 if (BC_PROG_NUM(r, num)) { 6090 if (BC_PROG_NUM(r, num)) {
6091 BcNum strmb;
6092
6095 bc_num_init_DEF_SIZE(&n); 6093 bc_num_init_DEF_SIZE(&n);
6096 bc_num_copy(&n, num); 6094 bc_num_copy(&n, num);
6097 bc_num_truncate(&n, n.rdx); 6095 bc_num_truncate(&n, n.rdx);
6098 6096
6099 s = zbc_num_mod(&n, &G.prog.strmb, &n, 0); 6097//TODO: have BcNumSmall type, with static buffer
6098 bc_num_init_DEF_SIZE(&strmb);
6099 bc_num_ulong2num(&strmb, 0x100);
6100 s = zbc_num_mod(&n, &strmb, &n, 0);
6101 bc_num_free(&strmb);
6102
6100 if (s) goto num_err; 6103 if (s) goto num_err;
6101 s = zbc_num_ulong(&n, &val); 6104 s = zbc_num_ulong(&n, &val);
6102 if (s) goto num_err; 6105 if (s) goto num_err;
@@ -6156,7 +6159,7 @@ static BC_STATUS zbc_program_printStream(void)
6156 if (s) RETURN_STATUS(s); 6159 if (s) RETURN_STATUS(s);
6157 6160
6158 if (BC_PROG_NUM(r, n)) { 6161 if (BC_PROG_NUM(r, n)) {
6159 s = zbc_num_printNum(n, &G.prog.strmb, 1, bc_num_printChar); 6162 s = zbc_num_printNum(n, 0x100, 1, bc_num_printChar);
6160 } else { 6163 } else {
6161 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : n->rdx; 6164 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : n->rdx;
6162 str = *bc_program_str(idx); 6165 str = *bc_program_str(idx);
@@ -6945,10 +6948,6 @@ static BC_STATUS zbc_vm_exec(void)
6945#if ENABLE_FEATURE_CLEAN_UP 6948#if ENABLE_FEATURE_CLEAN_UP
6946static void bc_program_free(void) 6949static void bc_program_free(void)
6947{ 6950{
6948 bc_num_free(&G.prog.ob);
6949# if ENABLE_DC
6950 bc_num_free(&G.prog.strmb);
6951# endif
6952 bc_vec_free(&G.prog.fns); 6951 bc_vec_free(&G.prog.fns);
6953 bc_vec_free(&G.prog.fn_map); 6952 bc_vec_free(&G.prog.fn_map);
6954 bc_vec_free(&G.prog.vars); 6953 bc_vec_free(&G.prog.vars);
@@ -6984,16 +6983,8 @@ static void bc_program_init(void)
6984 6983
6985 // G.prog.nchars = G.prog.scale = 0; - already is 6984 // G.prog.nchars = G.prog.scale = 0; - already is
6986 G.prog.ib_t = 10; 6985 G.prog.ib_t = 10;
6987
6988 bc_num_init_DEF_SIZE(&G.prog.ob);
6989 bc_num_ten(&G.prog.ob);
6990 G.prog.ob_t = 10; 6986 G.prog.ob_t = 10;
6991 6987
6992#if ENABLE_DC
6993 bc_num_init_DEF_SIZE(&G.prog.strmb);
6994 bc_num_ulong2num(&G.prog.strmb, UCHAR_MAX + 1);
6995#endif
6996
6997 bc_num_init_DEF_SIZE(&G.prog.last); 6988 bc_num_init_DEF_SIZE(&G.prog.last);
6998 //bc_num_zero(&G.prog.last); - already is 6989 //bc_num_zero(&G.prog.last); - already is
6999 6990