Skip to content

Remove trivial ecma_number arithmetic functions #2123

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions jerry-core/ecma/base/ecma-helpers-conversion.c
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,7 @@ ecma_number_to_uint32 (ecma_number_t num) /**< ecma-number */
}

const bool sign = ecma_number_is_negative (num);
const ecma_number_t abs_num = sign ? ecma_number_negate (num) : num;
const ecma_number_t abs_num = sign ? -num : num;

/* 2 ^ 32 */
const uint64_t uint64_2_pow_32 = (1ull << 32);
Expand Down Expand Up @@ -1126,7 +1126,7 @@ ecma_number_to_utf8_string (ecma_number_t num, /**< ecma-number */
{
/* 3. */
*dst_p++ = LIT_CHAR_MINUS;
num = ecma_number_negate (num);
num = -num;
}

if (ecma_number_is_infinity (num))
Expand Down
89 changes: 6 additions & 83 deletions jerry-core/ecma/base/ecma-helpers-number.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ ecma_number_get_prev (ecma_number_t num) /**< ecma-number */

if (ecma_number_is_negative (num))
{
return ecma_number_negate (ecma_number_get_next (num));
return -ecma_number_get_next (num);
}

uint32_t biased_exp = ecma_number_get_biased_exponent_field (num);
Expand Down Expand Up @@ -555,7 +555,7 @@ ecma_number_get_next (ecma_number_t num) /**< ecma-number */

if (ecma_number_is_negative (num))
{
return ecma_number_negate (ecma_number_get_prev (num));
return -ecma_number_get_prev (num);
}

uint32_t biased_exp = ecma_number_get_biased_exponent_field (num);
Expand All @@ -581,35 +581,6 @@ ecma_number_get_next (ecma_number_t num) /**< ecma-number */
fraction);
} /* ecma_number_get_next */

/**
* Negate ecma-number
*
* @return negated number
*/
ecma_number_t
ecma_number_negate (ecma_number_t num) /**< ecma-number */
{
ecma_number_t negated = -num;

#ifndef JERRY_NDEBUG
bool sign;
uint32_t biased_exp;
uint64_t fraction;

ecma_number_unpack (num, &sign, &biased_exp, &fraction);

sign = !sign;

ecma_number_t negated_ieee754 = ecma_number_pack (sign, biased_exp, fraction);

JERRY_ASSERT (negated == negated_ieee754
|| (ecma_number_is_nan (negated)
&& ecma_number_is_nan (negated_ieee754)));
#endif /* !JERRY_NDEBUG */

return negated;
} /* ecma_number_negate */

/**
* Truncate fractional part of the number
*
Expand Down Expand Up @@ -637,7 +608,7 @@ ecma_number_trunc (ecma_number_t num) /**< ecma-number */
exponent);
if (sign)
{
return ecma_number_negate (tmp);
return -tmp;
}
else
{
Expand Down Expand Up @@ -670,66 +641,18 @@ ecma_number_calc_remainder (ecma_number_t left_num, /**< left operand */
&& !ecma_number_is_zero (right_num)
&& !ecma_number_is_infinity (right_num));

const ecma_number_t q = ecma_number_trunc (ecma_number_divide (left_num, right_num));
ecma_number_t r = ecma_number_substract (left_num, ecma_number_multiply (right_num, q));
const ecma_number_t q = ecma_number_trunc (left_num / right_num);
ecma_number_t r = left_num - right_num * q;

if (ecma_number_is_zero (r)
&& ecma_number_is_negative (left_num))
{
r = ecma_number_negate (r);
r = -r;
}

return r;
} /* ecma_number_calc_remainder */

/**
* ECMA-number addition.
*
* @return number - result of addition.
*/
ecma_number_t
ecma_number_add (ecma_number_t left_num, /**< left operand */
ecma_number_t right_num) /**< right operand */
{
return left_num + right_num;
} /* ecma_number_add */

/**
* ECMA-number substraction.
*
* @return number - result of substraction.
*/
ecma_number_t
ecma_number_substract (ecma_number_t left_num, /**< left operand */
ecma_number_t right_num) /**< right operand */
{
return ecma_number_add (left_num, ecma_number_negate (right_num));
} /* ecma_number_substract */

/**
* ECMA-number multiplication.
*
* @return number - result of multiplication.
*/
ecma_number_t
ecma_number_multiply (ecma_number_t left_num, /**< left operand */
ecma_number_t right_num) /**< right operand */
{
return left_num * right_num;
} /* ecma_number_multiply */

/**
* ECMA-number division.
*
* @return number - result of division.
*/
ecma_number_t
ecma_number_divide (ecma_number_t left_num, /**< left operand */
ecma_number_t right_num) /**< right operand */
{
return left_num / right_num;
} /* ecma_number_divide */

/**
* @}
* @}
Expand Down
2 changes: 1 addition & 1 deletion jerry-core/ecma/base/ecma-helpers-string.c
Original file line number Diff line number Diff line change
Expand Up @@ -1997,7 +1997,7 @@ ecma_get_string_magic (const ecma_string_t *string_p) /**< ecma-string */
*
* @return calculated hash
*/
lit_string_hash_t
inline lit_string_hash_t __attr_always_inline___
ecma_string_hash (const ecma_string_t *string_p) /**< ecma-string to calculate hash for */
{
return (string_p->hash);
Expand Down
5 changes: 0 additions & 5 deletions jerry-core/ecma/base/ecma-helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -243,13 +243,8 @@ ecma_number_t
ecma_number_make_from_sign_mantissa_and_exponent (bool sign, uint64_t mantissa, int32_t exponent);
ecma_number_t ecma_number_get_prev (ecma_number_t num);
ecma_number_t ecma_number_get_next (ecma_number_t num);
ecma_number_t ecma_number_negate (ecma_number_t num);
ecma_number_t ecma_number_trunc (ecma_number_t num);
ecma_number_t ecma_number_calc_remainder (ecma_number_t left_num, ecma_number_t right_num);
ecma_number_t ecma_number_add (ecma_number_t left_num, ecma_number_t right_num);
ecma_number_t ecma_number_substract (ecma_number_t left_num, ecma_number_t right_num);
ecma_number_t ecma_number_multiply (ecma_number_t left_num, ecma_number_t right_num);
ecma_number_t ecma_number_divide (ecma_number_t left_num, ecma_number_t right_num);
lit_utf8_size_t ecma_number_to_decimal (ecma_number_t num, lit_utf8_byte_t *out_digits_p, int32_t *out_decimal_exp_p);
lit_utf8_size_t ecma_number_to_binary_floating_point_number (ecma_number_t num,
lit_utf8_byte_t *out_digits_p,
Expand Down
2 changes: 1 addition & 1 deletion jerry-core/ecma/builtin-objects/ecma-builtin-helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ ecma_builtin_helper_array_index_normalize (ecma_number_t index, /**< index */
{
if (ecma_number_is_negative (index))
{
ecma_number_t index_neg = ecma_number_negate (index);
ecma_number_t index_neg = -index;

if (index_neg > length)
{
Expand Down
2 changes: 1 addition & 1 deletion jerry-core/ecma/builtin-objects/ecma-builtin-math.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ ecma_builtin_math_dispatch_routine (uint16_t builtin_routine_id, /**< built-in w
else if (ecma_number_is_negative (x)
&& x >= -ECMA_NUMBER_HALF)
{
x = ecma_number_negate (ECMA_NUMBER_ZERO);
x = -ECMA_NUMBER_ZERO;
}
else
{
Expand Down
11 changes: 5 additions & 6 deletions jerry-core/vm/opcodes-ecma-arithmetics.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@ do_number_arithmetic (number_arithmetic_op op, /**< number arithmetic operation
{
case NUMBER_ARITHMETIC_SUBSTRACTION:
{
result = ecma_number_substract (num_left, num_right);
result = num_left - num_right;
break;
}
case NUMBER_ARITHMETIC_MULTIPLICATION:
{
result = ecma_number_multiply (num_left, num_right);
result = num_left * num_right;
break;
}
case NUMBER_ARITHMETIC_DIVISION:
{
result = ecma_number_divide (num_left, num_right);
result = num_left / num_right;
break;
}
case NUMBER_ARITHMETIC_REMAINDER:
Expand Down Expand Up @@ -150,7 +150,7 @@ opfunc_addition (ecma_value_t left_value, /**< left value */
ECMA_OP_TO_NUMBER_TRY_CATCH (num_left, left_value, ret_value);
ECMA_OP_TO_NUMBER_TRY_CATCH (num_right, right_value, ret_value);

ret_value = ecma_make_number_value (ecma_number_add (num_left, num_right));
ret_value = ecma_make_number_value (num_left + num_right);

ECMA_OP_TO_NUMBER_FINALIZE (num_right);
ECMA_OP_TO_NUMBER_FINALIZE (num_left);
Expand Down Expand Up @@ -187,8 +187,7 @@ opfunc_unary_operation (ecma_value_t left_value, /**< left value */
left_value,
ret_value);

ret_value = ecma_make_number_value (is_plus ? num_var_value
: ecma_number_negate (num_var_value));
ret_value = ecma_make_number_value (is_plus ? num_var_value : -num_var_value);

ECMA_OP_TO_NUMBER_FINALIZE (num_var_value);

Expand Down
27 changes: 13 additions & 14 deletions jerry-core/vm/vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1696,8 +1696,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
if (ecma_is_value_float_number (left_value)
&& ecma_is_value_number (right_value))
{
ecma_number_t new_value = ecma_number_add (ecma_get_float_from_value (left_value),
ecma_get_number_from_value (right_value));
ecma_number_t new_value = (ecma_get_float_from_value (left_value) +
ecma_get_number_from_value (right_value));

result = ecma_update_float_number (left_value, new_value);
left_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
Expand All @@ -1707,8 +1707,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
if (ecma_is_value_float_number (right_value)
&& ecma_is_value_integer_number (left_value))
{
ecma_number_t new_value = ecma_number_add ((ecma_number_t) ecma_get_integer_from_value (left_value),
ecma_get_float_from_value (right_value));
ecma_number_t new_value = ((ecma_number_t) ecma_get_integer_from_value (left_value) +
ecma_get_float_from_value (right_value));

result = ecma_update_float_number (right_value, new_value);
right_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
Expand Down Expand Up @@ -1743,8 +1743,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
if (ecma_is_value_float_number (left_value)
&& ecma_is_value_number (right_value))
{
ecma_number_t new_value = ecma_number_substract (ecma_get_float_from_value (left_value),
ecma_get_number_from_value (right_value));
ecma_number_t new_value = (ecma_get_float_from_value (left_value) -
ecma_get_number_from_value (right_value));

result = ecma_update_float_number (left_value, new_value);
left_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
Expand All @@ -1754,8 +1754,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
if (ecma_is_value_float_number (right_value)
&& ecma_is_value_integer_number (left_value))
{
ecma_number_t new_value = ecma_number_substract ((ecma_number_t) ecma_get_integer_from_value (left_value),
ecma_get_float_from_value (right_value));
ecma_number_t new_value = ((ecma_number_t) ecma_get_integer_from_value (left_value) -
ecma_get_float_from_value (right_value));

result = ecma_update_float_number (right_value, new_value);
right_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
Expand Down Expand Up @@ -1797,17 +1797,16 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
break;
}

ecma_number_t multiply = ecma_number_multiply ((ecma_number_t) left_integer,
(ecma_number_t) right_integer);
ecma_number_t multiply = (ecma_number_t) left_integer * (ecma_number_t) right_integer;
result = ecma_make_number_value (multiply);
break;
}

if (ecma_is_value_float_number (left_value)
&& ecma_is_value_number (right_value))
{
ecma_number_t new_value = ecma_number_multiply (ecma_get_float_from_value (left_value),
ecma_get_number_from_value (right_value));
ecma_number_t new_value = (ecma_get_float_from_value (left_value) *
ecma_get_number_from_value (right_value));

result = ecma_update_float_number (left_value, new_value);
left_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
Expand All @@ -1817,8 +1816,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
if (ecma_is_value_float_number (right_value)
&& ecma_is_value_integer_number (left_value))
{
ecma_number_t new_value = ecma_number_multiply ((ecma_number_t) ecma_get_integer_from_value (left_value),
ecma_get_float_from_value (right_value));
ecma_number_t new_value = ((ecma_number_t) ecma_get_integer_from_value (left_value) *
ecma_get_float_from_value (right_value));

result = ecma_update_float_number (right_value, new_value);
right_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
Expand Down
2 changes: 0 additions & 2 deletions tests/unit-core/test-number-to-integer.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ main (void)
#define TEST_CASE(num, uint32) { num, uint32 }
TEST_CASE (1.0, 1),
TEST_CASE (0.0, 0),
TEST_CASE (ecma_number_negate (0.0), 0),
TEST_CASE (NAN, 0),
TEST_CASE (-NAN, 0),
TEST_CASE (INFINITY, 0),
Expand Down Expand Up @@ -73,7 +72,6 @@ main (void)
#define TEST_CASE(num, int32) { num, int32 }
TEST_CASE (1.0, 1),
TEST_CASE (0.0, 0),
TEST_CASE (ecma_number_negate (0.0), 0),
TEST_CASE (NAN, 0),
TEST_CASE (-NAN, 0),
TEST_CASE (INFINITY, 0),
Expand Down