mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Optimize ecma_number_to_uint32 (#3470)
The ecma_number_to_uint32 function is called many times, we can merge ecma_number_is_nan and ecma_number_is_infinity checks to !ecma_number_is_finite to let the compiler generate more optimal code for it. JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác oszi@inf.u-szeged.hu
This commit is contained in:
parent
8cb2be6001
commit
518fcf2c6a
@ -703,9 +703,7 @@ ecma_uint32_to_utf8_string (uint32_t value, /**< value to convert */
|
||||
uint32_t
|
||||
ecma_number_to_uint32 (ecma_number_t num) /**< ecma-number */
|
||||
{
|
||||
if (ecma_number_is_nan (num)
|
||||
|| ecma_number_is_zero (num)
|
||||
|| ecma_number_is_infinity (num))
|
||||
if (JERRY_UNLIKELY (ecma_number_is_zero (num) || !ecma_number_is_finite (num)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -329,6 +329,24 @@ ecma_number_is_infinity (ecma_number_t num) /**< ecma-number */
|
||||
&& (fraction == 0));
|
||||
} /* ecma_number_is_infinity */
|
||||
|
||||
/**
|
||||
* Check if number is finite
|
||||
*
|
||||
* @return true - if number is finite
|
||||
* false - if number is NaN or infinity
|
||||
*/
|
||||
extern inline bool JERRY_ATTR_ALWAYS_INLINE
|
||||
ecma_number_is_finite (ecma_number_t num) /**< ecma-number */
|
||||
{
|
||||
#if defined (__GNUC__) || defined (__clang__)
|
||||
return __builtin_isfinite (num);
|
||||
#elif defined (WIN32)
|
||||
return isfinite (num);
|
||||
#else
|
||||
return !ecma_number_is_nan (num) && !ecma_number_is_infinity (num);
|
||||
#endif /* defined (__GNUC__) || defined (__clang__) */
|
||||
} /* ecma_number_is_finite */
|
||||
|
||||
/**
|
||||
* Get fraction and exponent of the number
|
||||
*
|
||||
|
||||
@ -340,6 +340,7 @@ bool ecma_number_is_nan (ecma_number_t num);
|
||||
bool ecma_number_is_negative (ecma_number_t num);
|
||||
bool ecma_number_is_zero (ecma_number_t num);
|
||||
bool ecma_number_is_infinity (ecma_number_t num);
|
||||
bool ecma_number_is_finite (ecma_number_t num);
|
||||
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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user