bc: "unsigned_n > 0" is shorter code than "unsigned_n >= 1"

function                                             old     new   delta
zbc_program_print                                    680     677      -3
zbc_program_exec                                    4089    4085      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-7)               Total: -7 bytes
   text	   data	    bss	    dec	    hex	filename
 981404	    485	   7296	 989185	  f1801	busybox_old
 981397	    485	   7296	 989178	  f17fa	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-19 17:09:01 +01:00
parent 65e1046abf
commit dfe1dd2031

View File

@ -707,8 +707,6 @@ typedef struct BcProgram {
size_t nchars; size_t nchars;
} BcProgram; } BcProgram;
#define BC_PROG_STACK(s, n) ((s)->len >= ((size_t) n))
#define BC_PROG_MAIN (0) #define BC_PROG_MAIN (0)
#define BC_PROG_READ (1) #define BC_PROG_READ (1)
#if ENABLE_DC #if ENABLE_DC
@ -838,6 +836,9 @@ struct globals {
# define COMMA_SUCCESS ,BC_STATUS_SUCCESS # define COMMA_SUCCESS ,BC_STATUS_SUCCESS
#endif #endif
#define STACK_HAS_MORE_THAN(s, n) ((s)->len > ((size_t)(n)))
#define STACK_HAS_EQUAL_OR_MORE_THAN(s, n) ((s)->len >= ((size_t)(n)))
#define BC_NUM_NEG(n, neg) ((((ssize_t)(n)) ^ -((ssize_t)(neg))) + (neg)) #define BC_NUM_NEG(n, neg) ((((ssize_t)(n)) ^ -((ssize_t)(neg))) + (neg))
#define BC_NUM_ONE(n) ((n)->len == 1 && (n)->rdx == 0 && (n)->num[0] == 1) #define BC_NUM_ONE(n) ((n)->len == 1 && (n)->rdx == 0 && (n)->num[0] == 1)
#define BC_NUM_INT(n) ((n)->len - (n)->rdx) #define BC_NUM_INT(n) ((n)->len - (n)->rdx)
@ -5048,7 +5049,7 @@ static BC_STATUS zbc_program_binOpPrep(BcResult **l, BcNum **ln,
bool hex; bool hex;
BcResultType lt, rt; BcResultType lt, rt;
if (!BC_PROG_STACK(&G.prog.results, 2)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 1))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
*r = bc_vec_item_rev(&G.prog.results, 0); *r = bc_vec_item_rev(&G.prog.results, 0);
@ -5091,7 +5092,7 @@ static BC_STATUS zbc_program_prep(BcResult **r, BcNum **n)
{ {
BcStatus s; BcStatus s;
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
*r = bc_vec_top(&G.prog.results); *r = bc_vec_top(&G.prog.results);
@ -5479,7 +5480,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx)
BcNum *num; BcNum *num;
bool pop = inst != BC_INST_PRINT; bool pop = inst != BC_INST_PRINT;
if (!BC_PROG_STACK(&G.prog.results, idx + 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, idx))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
r = bc_vec_item_rev(&G.prog.results, idx); r = bc_vec_item_rev(&G.prog.results, idx);
@ -5595,7 +5596,7 @@ static BC_STATUS zbc_program_assignStr(BcResult *r, BcVec *v, bool push)
res.t = BC_RESULT_STR; res.t = BC_RESULT_STR;
if (!push) { if (!push) {
if (!BC_PROG_STACK(&G.prog.results, 2)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 1))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
bc_vec_pop(v); bc_vec_pop(v);
bc_vec_pop(&G.prog.results); bc_vec_pop(&G.prog.results);
@ -5618,7 +5619,7 @@ static BC_STATUS zbc_program_copyToVar(char *name, bool var)
BcVec *v; BcVec *v;
BcNum *n; BcNum *n;
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
ptr = bc_vec_top(&G.prog.results); ptr = bc_vec_top(&G.prog.results);
@ -5761,7 +5762,7 @@ static BC_STATUS bc_program_pushVar(char *code, size_t *bgn,
BcNum *num = bc_vec_top(v); BcNum *num = bc_vec_top(v);
free(name); free(name);
if (!BC_PROG_STACK(v, 2 - copy)) { if (!STACK_HAS_MORE_THAN(v, 1 - copy)) {
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
} }
@ -5916,7 +5917,7 @@ static BC_STATUS zbc_program_return(char inst)
size_t i; size_t i;
BcInstPtr *ip = bc_vec_top(&G.prog.exestack); BcInstPtr *ip = bc_vec_top(&G.prog.exestack);
if (!BC_PROG_STACK(&G.prog.results, ip->len + inst == BC_INST_RET)) if (!STACK_HAS_EQUAL_OR_MORE_THAN(&G.prog.results, ip->len + (inst == BC_INST_RET)))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
f = bc_program_func(ip->func); f = bc_program_func(ip->func);
@ -5980,7 +5981,7 @@ static BC_STATUS zbc_program_builtin(char inst)
BcResult res; BcResult res;
bool len = inst == BC_INST_LENGTH; bool len = inst == BC_INST_LENGTH;
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
opnd = bc_vec_top(&G.prog.results); opnd = bc_vec_top(&G.prog.results);
@ -6054,7 +6055,7 @@ static BC_STATUS zbc_program_modexp(void)
BcResult *r1, *r2, *r3, res; BcResult *r1, *r2, *r3, res;
BcNum *n1, *n2, *n3; BcNum *n1, *n2, *n3;
if (!BC_PROG_STACK(&G.prog.results, 3)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 2))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
s = zbc_program_binOpPrep(&r2, &n2, &r3, &n3, false); s = zbc_program_binOpPrep(&r2, &n2, &r3, &n3, false);
if (s) RETURN_STATUS(s); if (s) RETURN_STATUS(s);
@ -6112,7 +6113,7 @@ static BC_STATUS zbc_program_asciify(void)
size_t len = G.prog.strs.len, idx; size_t len = G.prog.strs.len, idx;
unsigned long val; unsigned long val;
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
r = bc_vec_top(&G.prog.results); r = bc_vec_top(&G.prog.results);
@ -6184,7 +6185,7 @@ static BC_STATUS zbc_program_printStream(void)
size_t idx; size_t idx;
char *str; char *str;
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
r = bc_vec_top(&G.prog.results); r = bc_vec_top(&G.prog.results);
@ -6239,7 +6240,7 @@ static BC_STATUS zbc_program_execStr(char *code, size_t *bgn, bool cond)
BcInstPtr ip; BcInstPtr ip;
size_t fidx, sidx; size_t fidx, sidx;
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
r = bc_vec_top(&G.prog.results); r = bc_vec_top(&G.prog.results);
@ -6452,7 +6453,7 @@ static BC_STATUS zbc_program_exec(void)
break; break;
case BC_INST_POP: case BC_INST_POP:
dbg_exec("BC_INST_POP:"); dbg_exec("BC_INST_POP:");
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
s = bc_error_stack_has_too_few_elements(); s = bc_error_stack_has_too_few_elements();
else else
bc_vec_pop(&G.prog.results); bc_vec_pop(&G.prog.results);
@ -6534,7 +6535,7 @@ static BC_STATUS zbc_program_exec(void)
bc_program_stackLen(); bc_program_stackLen();
break; break;
case BC_INST_DUPLICATE: case BC_INST_DUPLICATE:
if (!BC_PROG_STACK(&G.prog.results, 1)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
ptr = bc_vec_top(&G.prog.results); ptr = bc_vec_top(&G.prog.results);
bc_result_copy(&r, ptr); bc_result_copy(&r, ptr);
@ -6542,7 +6543,7 @@ static BC_STATUS zbc_program_exec(void)
break; break;
case BC_INST_SWAP: { case BC_INST_SWAP: {
BcResult *ptr2; BcResult *ptr2;
if (!BC_PROG_STACK(&G.prog.results, 2)) if (!STACK_HAS_MORE_THAN(&G.prog.results, 1))
RETURN_STATUS(bc_error_stack_has_too_few_elements()); RETURN_STATUS(bc_error_stack_has_too_few_elements());
ptr = bc_vec_item_rev(&G.prog.results, 0); ptr = bc_vec_item_rev(&G.prog.results, 0);
ptr2 = bc_vec_item_rev(&G.prog.results, 1); ptr2 = bc_vec_item_rev(&G.prog.results, 1);
@ -6570,7 +6571,7 @@ static BC_STATUS zbc_program_exec(void)
break; break;
} }
case BC_INST_QUIT: case BC_INST_QUIT:
dbg_exec("BC_INST_NEG:"); dbg_exec("BC_INST_QUIT:");
if (G.prog.exestack.len <= 2) if (G.prog.exestack.len <= 2)
QUIT_OR_RETURN_TO_MAIN; QUIT_OR_RETURN_TO_MAIN;
bc_vec_npop(&G.prog.exestack, 2); bc_vec_npop(&G.prog.exestack, 2);