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:
Zoltan Herczeg
2016-05-18 02:59:13 -07:00
parent 07dabff1ab
commit 7b9e6a873f
7 changed files with 249 additions and 1 deletions
+48
View File
@@ -44,6 +44,18 @@ ecma_value_t
opfunc_equal_value (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right value */
{
JERRY_ASSERT (!ecma_is_value_error (left_value)
&& !ecma_is_value_error (right_value));
if (ecma_are_values_integer_numbers (left_value, right_value))
{
if (left_value == right_value)
{
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
ECMA_TRY_CATCH (compare_result,
@@ -72,6 +84,18 @@ ecma_value_t
opfunc_not_equal_value (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right value */
{
JERRY_ASSERT (!ecma_is_value_error (left_value)
&& !ecma_is_value_error (right_value));
if (ecma_are_values_integer_numbers (left_value, right_value))
{
if (left_value == right_value)
{
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
ECMA_TRY_CATCH (compare_result,
@@ -102,6 +126,18 @@ ecma_value_t
opfunc_equal_value_type (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right value */
{
JERRY_ASSERT (!ecma_is_value_error (left_value)
&& !ecma_is_value_error (right_value));
if (ecma_are_values_integer_numbers (left_value, right_value))
{
if (left_value == right_value)
{
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
bool is_equal = ecma_op_strict_equality_compare (left_value, right_value);
return ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE
@@ -120,6 +156,18 @@ ecma_value_t
opfunc_not_equal_value_type (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right value */
{
JERRY_ASSERT (!ecma_is_value_error (left_value)
&& !ecma_is_value_error (right_value));
if (ecma_are_values_integer_numbers (left_value, right_value))
{
if (left_value == right_value)
{
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
bool is_equal = ecma_op_strict_equality_compare (left_value, right_value);
return ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE