summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-07 15:10:05 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-07 15:10:05 +0100
commitffdcebdffe8a2b6261e3eb468d7c19fd0b454a87 (patch)
tree774fe0c6d067901a57b4df9d495184b1198d9491
parent18c6b54f820923549135724fee6cf66c26929b07 (diff)
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.c17
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)