Optimize arithmetic in VM.
Add, substract, mul, mod, and increment/decrement operators are optimized. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -732,6 +732,35 @@ ecma_value_assign_value (ecma_value_t *value_p, /**< [in, out] ecma value */
|
||||
}
|
||||
} /* ecma_value_assign_value */
|
||||
|
||||
/**
|
||||
* Update the value of a float number to a new value
|
||||
*
|
||||
* Note:
|
||||
* The original value is destroyed.
|
||||
*
|
||||
* @return updated ecma value
|
||||
*/
|
||||
ecma_value_t
|
||||
ecma_update_float_number (ecma_value_t float_value, /**< original float value */
|
||||
ecma_number_t new_number) /**< updated number value */
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_value_float_number (float_value));
|
||||
|
||||
ecma_integer_value_t integer_number = (ecma_integer_value_t) new_number;
|
||||
ecma_number_t *number_p = (ecma_number_t *) ecma_get_pointer_from_ecma_value (float_value);
|
||||
|
||||
if ((ecma_number_t) integer_number == new_number
|
||||
&& ((integer_number == 0) ? ecma_is_number_equal_to_positive_zero (new_number)
|
||||
: ECMA_IS_INTEGER_NUMBER (integer_number)))
|
||||
{
|
||||
ecma_dealloc_number (number_p);
|
||||
return ecma_make_integer_value (integer_number);
|
||||
}
|
||||
|
||||
*number_p = new_number;
|
||||
return float_value;
|
||||
} /* ecma_update_float_number */
|
||||
|
||||
/**
|
||||
* Assign a float number to an ecma-value
|
||||
*
|
||||
|
||||
@@ -143,7 +143,7 @@ extern ecma_value_t ecma_make_object_value (const ecma_object_t *);
|
||||
extern ecma_value_t ecma_make_error_value (ecma_value_t);
|
||||
extern ecma_value_t ecma_make_error_obj_value (const ecma_object_t *);
|
||||
extern ecma_integer_value_t ecma_get_integer_from_value (ecma_value_t) __attr_pure___;
|
||||
extern ecma_number_t ecma_get_float_from_value (ecma_value_t value) __attr_pure___;
|
||||
extern ecma_number_t ecma_get_float_from_value (ecma_value_t) __attr_pure___;
|
||||
extern ecma_number_t ecma_get_number_from_value (ecma_value_t) __attr_pure___;
|
||||
extern uint32_t ecma_get_uint32_from_value (ecma_value_t) __attr_pure___;
|
||||
extern ecma_string_t *ecma_get_string_from_value (ecma_value_t) __attr_pure___;
|
||||
@@ -153,6 +153,7 @@ extern ecma_value_t ecma_invert_boolean_value (ecma_value_t) __attr_pure___;
|
||||
extern ecma_value_t ecma_copy_value (ecma_value_t);
|
||||
extern ecma_value_t ecma_fast_copy_value (ecma_value_t);
|
||||
extern ecma_value_t ecma_copy_value_if_not_object (ecma_value_t);
|
||||
extern ecma_value_t ecma_update_float_number (ecma_value_t, ecma_number_t);
|
||||
extern void ecma_value_assign_value (ecma_value_t *, ecma_value_t);
|
||||
extern void ecma_value_assign_number (ecma_value_t *, ecma_number_t);
|
||||
extern void ecma_value_assign_uint32 (ecma_value_t *, uint32_t);
|
||||
|
||||
Reference in New Issue
Block a user