diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-07 15:10:05 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-07 15:10:05 +0100 |
commit | ffdcebdffe8a2b6261e3eb468d7c19fd0b454a87 (patch) | |
tree | 774fe0c6d067901a57b4df9d495184b1198d9491 | |
parent | 18c6b54f820923549135724fee6cf66c26929b07 (diff) | |
download | busybox-ffdcebdffe8a2b6261e3eb468d7c19fd0b454a87.tar.gz |
bc: pull temporary into a register
function old new delta
bc_num_ulong 103 95 -8
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/bc.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 685427e58..9eafa80e9 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -1411,23 +1411,26 @@ static void bc_num_copy(BcNum *d, BcNum *s) } } -static BcStatus bc_num_ulong(BcNum *n, unsigned long *result) +static BcStatus bc_num_ulong(BcNum *n, unsigned long *result_p) { size_t i; - unsigned long pow; + unsigned long pow, result; if (n->neg) return bc_error("negative number"); - for (*result = 0, pow = 1, i = n->rdx; i < n->len; ++i) { + for (result = 0, pow = 1, i = n->rdx; i < n->len; ++i) { - unsigned long prev = *result, powprev = pow; + unsigned long prev = result, powprev = pow; - *result += ((unsigned long) n->num[i]) * pow; + result += ((unsigned long) n->num[i]) * pow; pow *= 10; - if (*result < prev || pow < powprev) + if (result < prev || pow < powprev) return bc_error("overflow"); + prev = result; + powprev = pow; } + *result_p = result; return BC_STATUS_SUCCESS; } @@ -5855,7 +5858,6 @@ static BcStatus bc_program_assign(char inst) BcStatus s; BcResult *left, *right, res; BcNum *l = NULL, *r = NULL; - unsigned long val, max; bool assign = inst == BC_INST_ASSIGN, ib, sc; s = bc_program_binOpPrep(&left, &l, &right, &r, assign); @@ -5909,6 +5911,7 @@ static BcStatus bc_program_assign(char inst) "bad obase; must be [2, BC_BASE_MAX]", //BC_RESULT_OBASE }; size_t *ptr; + unsigned long val, max; s = bc_num_ulong(l, &val); if (s) |