Reduce register pressure by reusing registers, allocated for argument preparation instruction sequence.

JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
Ruben Ayrapetyan
2015-06-28 17:59:50 +03:00
committed by Evgeny Gavrin
parent dc095bb902
commit 6e2733dbfd
3 changed files with 41 additions and 0 deletions
+35
View File
@@ -755,6 +755,41 @@ dumper_finish_scope (void)
STACK_DROP (temp_names, 1);
}
/**
* Handle start of argument preparation instruction sequence generation
*
* Note:
* Values of registers, allocated for the code sequence, are not used outside of the sequence,
* so they can be reused, reducing register pressure.
*
* To reuse the registers, counter of register allocator is saved, and restored then,
* after finishing generation of the code sequence, using dumper_finish_varg_code_sequence.
*
* FIXME:
* Implement general register allocation mechanism
*
* See also:
* dumper_finish_varg_code_sequence
*/
void
dumper_start_varg_code_sequence (void)
{
STACK_PUSH (temp_names, temp_name);
} /* dumper_start_varg_code_sequence */
/**
* Handle finish of argument preparation instruction sequence generation
*
* See also:
* dumper_start_varg_code_sequence
*/
void
dumper_finish_varg_code_sequence (void)
{
temp_name = STACK_TOP (temp_names);
STACK_DROP (temp_names, 1);
} /* dumper_finish_varg_code_sequence */
/**
* Check that byte-code operand refers to 'eval' string
*
+2
View File
@@ -58,6 +58,8 @@ void dumper_free (void);
void dumper_new_statement (void);
void dumper_new_scope (void);
void dumper_finish_scope (void);
void dumper_start_varg_code_sequence (void);
void dumper_finish_varg_code_sequence (void);
extern bool dumper_is_eval_literal (operand);
+4
View File
@@ -521,6 +521,8 @@ parse_argument_list (varg_list_type vlt, operand obj, uint8_t *args_count, opera
skip_newlines ();
while (!token_is (close_tt))
{
dumper_start_varg_code_sequence ();
operand op;
if (vlt == VARG_FUNC_DECL
@@ -572,6 +574,8 @@ parse_argument_list (varg_list_type vlt, operand obj, uint8_t *args_count, opera
}
args_num++;
dumper_finish_varg_code_sequence ();
}
if (args_count != NULL)