From 075cbac67279894e3621bfaa59f3b9f30b40de75 Mon Sep 17 00:00:00 2001 From: Jesse McDonald Date: Wed, 7 Apr 2010 16:07:18 -0500 Subject: [PATCH] Remove some unnecessary write barriers for better performance. --- interp.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/interp.c b/interp.c index 747e75d..8f7536a 100644 --- a/interp.c +++ b/interp.c @@ -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));