bc: avoid successive bc_vec_item(&func->autos, i)

function                                             old     new   delta
zbc_func_insert                                       97     100      +3
zbc_program_call                                     353     354      +1
zbc_program_exec                                    4085    4078      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-7)               Total: -3 bytes
   text	   data	    bss	    dec	    hex	filename
 981403	    485	   7296	 989184	  f1800	busybox_old
 981400	    485	   7296	 989181	  f17fd	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-19 17:55:23 +01:00
parent f36a0adf8b
commit 87888ce4d8

View File

@ -2504,11 +2504,13 @@ static BC_STATUS zbc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
#if ENABLE_BC #if ENABLE_BC
static BC_STATUS zbc_func_insert(BcFunc *f, char *name, bool var) static BC_STATUS zbc_func_insert(BcFunc *f, char *name, bool var)
{ {
BcId *autoid;
BcId a; BcId a;
size_t i; size_t i;
for (i = 0; i < f->autos.len; ++i) { autoid = (void*)f->autos.v;
if (strcmp(name, ((BcId *) bc_vec_item(&f->autos, i))->name) == 0) for (i = 0; i < f->autos.len; i++, autoid++) {
if (strcmp(name, autoid->name) == 0)
RETURN_STATUS(bc_error("function parameter or auto var has the same name as another")); RETURN_STATUS(bc_error("function parameter or auto var has the same name as another"));
} }
@ -5888,12 +5890,11 @@ static BC_STATUS zbc_program_call(char *code, size_t *idx)
if (s) RETURN_STATUS(s); if (s) RETURN_STATUS(s);
} }
for (; i < func->autos.len; ++i) { a = bc_vec_item(&func->autos, i);
for (; i < func->autos.len; i++, a++) {
BcVec *v; BcVec *v;
a = bc_vec_item(&func->autos, i);
v = bc_program_search(a->name, a->idx); v = bc_program_search(a->name, a->idx);
if (a->idx) { if (a->idx) {
BcNum n2; BcNum n2;
bc_num_init_DEF_SIZE(&n2); bc_num_init_DEF_SIZE(&n2);
@ -5915,6 +5916,7 @@ static BC_STATUS zbc_program_return(char inst)
{ {
BcResult res; BcResult res;
BcFunc *f; BcFunc *f;
BcId *a;
size_t i; size_t i;
BcInstPtr *ip = bc_vec_top(&G.prog.exestack); BcInstPtr *ip = bc_vec_top(&G.prog.exestack);
@ -5939,10 +5941,9 @@ static BC_STATUS zbc_program_return(char inst)
} }
// We need to pop arguments as well, so this takes that into account. // We need to pop arguments as well, so this takes that into account.
for (i = 0; i < f->autos.len; ++i) { a = (void*)f->autos.v;
for (i = 0; i < f->autos.len; i++, a++) {
BcVec *v; BcVec *v;
BcId *a = bc_vec_item(&f->autos, i);
v = bc_program_search(a->name, a->idx); v = bc_program_search(a->name, a->idx);
bc_vec_pop(v); bc_vec_pop(v);
} }