Integer acceleration for basic arithmetic and comparison.
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -218,6 +218,22 @@ ecma_is_value_integer_number (ecma_value_t value) /**< ecma value */
|
||||
return (value & ECMA_DIRECT_TYPE_MASK) == ECMA_DIRECT_TYPE_INTEGER_VALUE;
|
||||
} /* ecma_is_value_integer_number */
|
||||
|
||||
/**
|
||||
* Check if both values are integer ecma-numbers.
|
||||
*
|
||||
* @return true - if both values contain integer ecma-number values,
|
||||
* false - otherwise.
|
||||
*/
|
||||
inline bool __attr_pure___ __attr_always_inline___
|
||||
ecma_are_values_integer_numbers (ecma_value_t first_value, /**< first ecma value */
|
||||
ecma_value_t second_value) /**< second ecma value */
|
||||
{
|
||||
JERRY_STATIC_ASSERT (ECMA_DIRECT_TYPE_INTEGER_VALUE == 0,
|
||||
ecma_direct_type_integer_value_must_be_zero);
|
||||
|
||||
return ((first_value | second_value) & ECMA_DIRECT_TYPE_MASK) == ECMA_DIRECT_TYPE_INTEGER_VALUE;
|
||||
} /* ecma_are_values_integer_numbers */
|
||||
|
||||
/**
|
||||
* Check if the value is floating-point ecma-number.
|
||||
*
|
||||
@@ -471,6 +487,19 @@ ecma_make_error_obj_value (const ecma_object_t *object_p) /**< object to referen
|
||||
return ecma_make_error_value (ecma_make_object_value (object_p));
|
||||
} /* ecma_make_error_obj_value */
|
||||
|
||||
/**
|
||||
* Get integer value from an integer ecma value
|
||||
*
|
||||
* @return floating point value
|
||||
*/
|
||||
inline ecma_integer_value_t __attr_pure___ __attr_always_inline___
|
||||
ecma_get_integer_from_value (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_value_integer_number (value));
|
||||
|
||||
return ((ecma_integer_value_t) value) >> ECMA_DIRECT_SHIFT;
|
||||
} /* ecma_get_integer_from_value */
|
||||
|
||||
/**
|
||||
* Get floating point value from an ecma value
|
||||
*
|
||||
@@ -481,7 +510,7 @@ ecma_get_number_from_value (ecma_value_t value) /**< ecma value */
|
||||
{
|
||||
if (ecma_is_value_integer_number (value))
|
||||
{
|
||||
return (ecma_number_t) (((ecma_integer_value_t) value) >> ECMA_DIRECT_SHIFT);
|
||||
return (ecma_number_t) ecma_get_integer_from_value (value);
|
||||
}
|
||||
|
||||
JERRY_ASSERT (ecma_get_value_type_field (value) == ECMA_TYPE_FLOAT);
|
||||
|
||||
Reference in New Issue
Block a user