bc: code shrink

function                                             old     new   delta
xc_parse_pushInst_and_Index                            -      16     +16
zbc_parse_expr                                      1818    1816      -2
xc_parse_pushIndex                                    65      61      -4
zbc_parse_pushSTR                                     63      58      -5
zbc_parse_name                                       448     442      -6
xc_parse_pushNUM                                      74      67      -7
zdc_parse_expr                                       479     470      -9
bc_parse_pushJUMP_ZERO                                21      12      -9
bc_parse_pushJUMP                                     21      12      -9
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/8 up/down: 16/-51)            Total: -35 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2019-01-09 11:17:19 +01:00
parent a1698a15dc
commit cfc2546ea4

View File

@ -3497,11 +3497,11 @@ static BC_STATUS zdc_lex_token(void)
#define zdc_lex_token(...) (zdc_lex_token(__VA_ARGS__) COMMA_SUCCESS) #define zdc_lex_token(...) (zdc_lex_token(__VA_ARGS__) COMMA_SUCCESS)
#endif // ENABLE_DC #endif // ENABLE_DC
static void xc_parse_push(char i) static void xc_parse_push(unsigned i)
{ {
BcVec *code = &G.prs.func->code; BcVec *code = &G.prs.func->code;
dbg_compile("%s:%d pushing bytecode %zd:%d", __func__, __LINE__, code->len, i); dbg_compile("%s:%d pushing bytecode %zd:%d", __func__, __LINE__, code->len, i);
bc_vec_pushByte(code, i); bc_vec_pushByte(code, (uint8_t)i);
} }
static void xc_parse_pushName(char *name) static void xc_parse_pushName(char *name)
@ -3556,17 +3556,21 @@ static void xc_parse_pushIndex(size_t idx)
} while (idx != 0); } while (idx != 0);
} }
static void xc_parse_pushInst_and_Index(unsigned inst, size_t idx)
{
xc_parse_push(inst);
xc_parse_pushIndex(idx);
}
#if ENABLE_BC #if ENABLE_BC
static void bc_parse_pushJUMP(size_t idx) static void bc_parse_pushJUMP(size_t idx)
{ {
xc_parse_push(BC_INST_JUMP); xc_parse_pushInst_and_Index(BC_INST_JUMP, idx);
xc_parse_pushIndex(idx);
} }
static void bc_parse_pushJUMP_ZERO(size_t idx) static void bc_parse_pushJUMP_ZERO(size_t idx)
{ {
xc_parse_push(BC_INST_JUMP_ZERO); xc_parse_pushInst_and_Index(BC_INST_JUMP_ZERO, idx);
xc_parse_pushIndex(idx);
} }
static BC_STATUS zbc_parse_pushSTR(void) static BC_STATUS zbc_parse_pushSTR(void)
@ -3574,8 +3578,7 @@ static BC_STATUS zbc_parse_pushSTR(void)
BcParse *p = &G.prs; BcParse *p = &G.prs;
char *str = xstrdup(p->lex_strnumbuf.v); char *str = xstrdup(p->lex_strnumbuf.v);
xc_parse_push(XC_INST_STR); xc_parse_pushInst_and_Index(XC_INST_STR, p->func->strs.len);
xc_parse_pushIndex(p->func->strs.len);
bc_vec_push(&p->func->strs, &str); bc_vec_push(&p->func->strs, &str);
RETURN_STATUS(zxc_lex_next()); RETURN_STATUS(zxc_lex_next());
@ -3594,8 +3597,7 @@ static void xc_parse_pushNUM(void)
#else // DC #else // DC
size_t idx = bc_vec_push(&G.prog.consts, &num); size_t idx = bc_vec_push(&G.prog.consts, &num);
#endif #endif
xc_parse_push(XC_INST_NUM); xc_parse_pushInst_and_Index(XC_INST_NUM, idx);
xc_parse_pushIndex(idx);
} }
static BC_STATUS zxc_parse_text_init(const char *text) static BC_STATUS zxc_parse_text_init(const char *text)
@ -3815,8 +3817,7 @@ static BC_STATUS zbc_parse_params(uint8_t flags)
} }
} }
xc_parse_push(BC_INST_CALL); xc_parse_pushInst_and_Index(BC_INST_CALL, nparams);
xc_parse_pushIndex(nparams);
RETURN_STATUS(BC_STATUS_SUCCESS); RETURN_STATUS(BC_STATUS_SUCCESS);
} }
@ -4934,8 +4935,7 @@ static void dc_parse_string(void)
dbg_lex_enter("%s:%d entered", __func__, __LINE__); dbg_lex_enter("%s:%d entered", __func__, __LINE__);
str = xstrdup(p->lex_strnumbuf.v); str = xstrdup(p->lex_strnumbuf.v);
xc_parse_push(XC_INST_STR); xc_parse_pushInst_and_Index(XC_INST_STR, len);
xc_parse_pushIndex(len);
bc_vec_push(&G.prog.strs, &str); bc_vec_push(&G.prog.strs, &str);
// Explanation needed here // Explanation needed here