Introduce parser-time optimization that replaces a function's local variables with registers.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
@@ -543,11 +543,12 @@ vm_run_from_pos (const vm_instr_t *instrs_p, /**< byte-code array */
|
||||
const vm_instr_t *curr = &instrs_p[start_pos];
|
||||
JERRY_ASSERT (curr->op_idx == VM_OP_REG_VAR_DECL);
|
||||
|
||||
const idx_t min_reg_num = curr->data.reg_var_decl.min;
|
||||
const idx_t max_reg_num = curr->data.reg_var_decl.max;
|
||||
JERRY_ASSERT (max_reg_num >= min_reg_num);
|
||||
const idx_t min_reg_idx = curr->data.reg_var_decl.min;
|
||||
const idx_t max_reg_idx = curr->data.reg_var_decl.max;
|
||||
const idx_t local_var_regs_num = curr->data.reg_var_decl.local_var_regs_num;
|
||||
JERRY_ASSERT (max_reg_idx >= min_reg_idx);
|
||||
|
||||
const int32_t regs_num = max_reg_num - min_reg_num + 1;
|
||||
int32_t regs_num = max_reg_idx - min_reg_idx + 1;
|
||||
|
||||
MEM_DEFINE_LOCAL_ARRAY (regs, regs_num, ecma_value_t);
|
||||
|
||||
@@ -559,10 +560,10 @@ vm_run_from_pos (const vm_instr_t *instrs_p, /**< byte-code array */
|
||||
frame_ctx.is_strict = is_strict;
|
||||
frame_ctx.is_eval_code = is_eval_code;
|
||||
frame_ctx.is_call_in_direct_eval_form = false;
|
||||
frame_ctx.min_reg_num = min_reg_num;
|
||||
frame_ctx.max_reg_num = max_reg_num;
|
||||
frame_ctx.min_reg_idx = min_reg_idx;
|
||||
frame_ctx.max_reg_idx = max_reg_idx;
|
||||
frame_ctx.tmp_num_p = ecma_alloc_number ();
|
||||
vm_stack_add_frame (&frame_ctx.stack_frame, regs, regs_num);
|
||||
vm_stack_add_frame (&frame_ctx.stack_frame, regs, regs_num, local_var_regs_num);
|
||||
|
||||
vm_frame_ctx_t *prev_context_p = vm_top_context_p;
|
||||
vm_top_context_p = &frame_ctx;
|
||||
|
||||
Reference in New Issue
Block a user