Don't backtrack to remove bytecode if we're in aligned mode.

This commit is contained in:
Alex Shinn 2014-07-31 22:41:42 +09:00
parent 213af9c098
commit 6dfc5e9cfd

3
vm.c
View file

@ -163,6 +163,7 @@ static void generate_lit (sexp ctx, sexp value) {
} }
static void generate_drop_prev (sexp ctx, sexp prev) { static void generate_drop_prev (sexp ctx, sexp prev) {
#if ! SEXP_USE_ALIGNED_BYTECODE
if ((sexp_pairp(prev) && sexp_opcodep(sexp_car(prev)) if ((sexp_pairp(prev) && sexp_opcodep(sexp_car(prev))
&& ((sexp_opcode_return_type(sexp_car(prev)) == SEXP_VOID && ((sexp_opcode_return_type(sexp_car(prev)) == SEXP_VOID
&& sexp_opcode_class(sexp_car(prev)) != SEXP_OPC_FOREIGN) && sexp_opcode_class(sexp_car(prev)) != SEXP_OPC_FOREIGN)
@ -170,6 +171,7 @@ static void generate_drop_prev (sexp ctx, sexp prev) {
|| sexp_setp(prev) || sexp_litp(prev) || prev == SEXP_VOID) || sexp_setp(prev) || sexp_litp(prev) || prev == SEXP_VOID)
sexp_inc_context_pos(ctx, -(1 + sizeof(sexp))); sexp_inc_context_pos(ctx, -(1 + sizeof(sexp)));
else else
#endif
sexp_emit(ctx, SEXP_OP_DROP); sexp_emit(ctx, SEXP_OP_DROP);
} }
@ -486,6 +488,7 @@ static void generate_tail_jump (sexp ctx, sexp name, sexp loc, sexp lam, sexp ap
/* drop the current result and jump */ /* drop the current result and jump */
sexp_emit(ctx, SEXP_OP_JUMP); sexp_emit(ctx, SEXP_OP_JUMP);
sexp_context_align_pos(ctx);
sexp_emit_word(ctx, (sexp_uint_t) (-sexp_unbox_fixnum(sexp_context_pos(ctx)) + sexp_emit_word(ctx, (sexp_uint_t) (-sexp_unbox_fixnum(sexp_context_pos(ctx)) +
(sexp_pairp(sexp_lambda_locals(lam)) (sexp_pairp(sexp_lambda_locals(lam))
? 1 + sizeof(sexp) : 0))); ? 1 + sizeof(sexp) : 0)));