Remove some unnecessary write barriers for better performance.

This commit is contained in:
Jesse D. McDonald 2010-04-07 16:07:18 -05:00
parent 32952e9aa4
commit 075cbac672
1 changed files with 5 additions and 7 deletions

View File

@ -246,17 +246,11 @@ static value_t make_lambda(interp_state_t *state, value_t templ)
/* All but the instance variables are just shallow-copied. */
ls->slots[LAMBDA_SLOT_GLOBAL_VARS] = ts->slots[TEMPLATE_SLOT_GLOBAL_VARS];
WRITE_BARRIER(lambda_root.value);
ls->slots[LAMBDA_SLOT_FRAME_VARS] = ts->slots[TEMPLATE_SLOT_FRAME_VARS];
WRITE_BARRIER(lambda_root.value);
ls->slots[LAMBDA_SLOT_BYTE_CODE] = ts->slots[TEMPLATE_SLOT_BYTE_CODE];
WRITE_BARRIER(lambda_root.value);
ls->slots[LAMBDA_SLOT_TAIL_CALL] = ts->slots[TEMPLATE_SLOT_TAIL_CALL];
WRITE_BARRIER(lambda_root.value);
ls->slots[LAMBDA_SLOT_ARG_LIST] = ts->slots[TEMPLATE_SLOT_ARG_LIST];
WRITE_BARRIER(lambda_root.value);
ls->slots[LAMBDA_SLOT_CONTINUATION] = ts->slots[TEMPLATE_SLOT_CONTINUATION];
WRITE_BARRIER(lambda_root.value);
ls->slots[LAMBDA_SLOT_CONTEXT] = ts->slots[TEMPLATE_SLOT_CONTEXT];
WRITE_BARRIER(lambda_root.value);
@ -266,8 +260,8 @@ static value_t make_lambda(interp_state_t *state, value_t templ)
for (size_t i = 0; i < t_inst->size; ++i)
{
l_inst->elements[i] = get_input(state, t_inst->bytes[i]);
WRITE_BARRIER(object_value(l_inst));
}
WRITE_BARRIER(object_value(l_inst));
unregister_gc_root(&templ_root);
unregister_gc_root(&lambda_root);
@ -507,6 +501,10 @@ static void run_statement(interp_state_t *state, uint8_t code, uint8_t in1, uint
}
}
/*
* IMPORTANT: It is assumed that get_input() does not trigger garbage collection.
* If this were to change additional write barriers and/or GC roots may be required.
*/
static value_t get_input(const interp_state_t *state, fixnum_t var)
{
release_assert((var >= 0) && (var <= 255));