2424#include "ecma-globals.h"
2525#include "ecma-helpers.h"
2626
27+ #define ECMA_NUMBER_SIGN_POS (ECMA_NUMBER_FRACTION_WIDTH + \
28+ ECMA_NUMBER_BIASED_EXP_WIDTH)
29+
2730#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
2831JERRY_STATIC_ASSERT (sizeof (ecma_number_t ) == sizeof (uint32_t ));
2932
@@ -37,16 +40,12 @@ ecma_number_pack (bool sign, /**< sign */
3740 uint32_t biased_exp , /**< biased exponent */
3841 uint64_t fraction ) /**< fraction */
3942{
40- const uint32_t fraction_pos = 0 ;
41- const uint32_t biased_exp_pos = fraction_pos + ECMA_NUMBER_FRACTION_WIDTH ;
42- const uint32_t sign_pos = biased_exp_pos + ECMA_NUMBER_BIASED_EXP_WIDTH ;
43-
4443 JERRY_ASSERT ((biased_exp & ~((1u << ECMA_NUMBER_BIASED_EXP_WIDTH ) - 1 )) == 0 );
4544 JERRY_ASSERT ((fraction & ~((1ull << ECMA_NUMBER_FRACTION_WIDTH ) - 1 )) == 0 );
4645
47- uint32_t packed_value = (((sign ? 1u : 0u ) << sign_pos ) |
48- (biased_exp << biased_exp_pos ) |
49- ((( uint32_t ) fraction ) << fraction_pos ));
46+ uint32_t packed_value = (((sign ? 1u : 0u ) << ECMA_NUMBER_SIGN_POS ) |
47+ (biased_exp << ECMA_NUMBER_FRACTION_WIDTH ) |
48+ ((uint32_t ) fraction ));
5049
5150 union
5251 {
@@ -68,10 +67,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
6867 uint32_t * biased_exp_p , /**< optional out: biased exponent */
6968 uint64_t * fraction_p ) /**< optional out: fraction */
7069{
71- const uint32_t fraction_pos = 0 ;
72- const uint32_t biased_exp_pos = fraction_pos + ECMA_NUMBER_FRACTION_WIDTH ;
73- const uint32_t sign_pos = biased_exp_pos + ECMA_NUMBER_BIASED_EXP_WIDTH ;
74-
7570 union
7671 {
7772 uint32_t u32_value ;
@@ -84,12 +79,12 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
8479
8580 if (sign_p != NULL )
8681 {
87- * sign_p = ((packed_value >> sign_pos ) != 0 );
82+ * sign_p = ((packed_value >> ECMA_NUMBER_SIGN_POS ) != 0 );
8883 }
8984
9085 if (biased_exp_p != NULL )
9186 {
92- * biased_exp_p = (((packed_value ) & ~(1u << sign_pos )) >> biased_exp_pos );
87+ * biased_exp_p = (((packed_value ) & ~(1u << ECMA_NUMBER_SIGN_POS )) >> ECMA_NUMBER_FRACTION_WIDTH );
9388 }
9489
9590 if (fraction_p != NULL )
@@ -106,10 +101,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
106101 */
107102const int32_t ecma_number_exponent_bias = 127 ;
108103
109- /**
110- * Relative precision used in calculation with ecma-numbers
111- */
112- const ecma_number_t ecma_number_relative_eps = 1.0e-10f ;
113104#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
114105JERRY_STATIC_ASSERT (sizeof (ecma_number_t ) == sizeof (uint64_t ));
115106
@@ -123,13 +114,9 @@ ecma_number_pack (bool sign, /**< sign */
123114 uint32_t biased_exp , /**< biased exponent */
124115 uint64_t fraction ) /**< fraction */
125116{
126- const uint32_t fraction_pos = 0 ;
127- const uint32_t biased_exp_pos = fraction_pos + ECMA_NUMBER_FRACTION_WIDTH ;
128- const uint32_t sign_pos = biased_exp_pos + ECMA_NUMBER_BIASED_EXP_WIDTH ;
129-
130- uint64_t packed_value = (((sign ? 1ull : 0ull ) << sign_pos ) |
131- (((uint64_t ) biased_exp ) << biased_exp_pos ) |
132- (fraction << fraction_pos ));
117+ uint64_t packed_value = (((sign ? 1ull : 0ull ) << ECMA_NUMBER_SIGN_POS ) |
118+ (((uint64_t ) biased_exp ) << ECMA_NUMBER_FRACTION_WIDTH ) |
119+ fraction );
133120
134121 JERRY_ASSERT ((biased_exp & ~((1u << ECMA_NUMBER_BIASED_EXP_WIDTH ) - 1 )) == 0 );
135122 JERRY_ASSERT ((fraction & ~((1ull << ECMA_NUMBER_FRACTION_WIDTH ) - 1 )) == 0 );
@@ -154,10 +141,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
154141 uint32_t * biased_exp_p , /**< optional out: biased exponent */
155142 uint64_t * fraction_p ) /**< optional out: fraction */
156143{
157- const uint32_t fraction_pos = 0 ;
158- const uint32_t biased_exp_pos = fraction_pos + ECMA_NUMBER_FRACTION_WIDTH ;
159- const uint32_t sign_pos = biased_exp_pos + ECMA_NUMBER_BIASED_EXP_WIDTH ;
160-
161144 union
162145 {
163146 uint64_t u64_value ;
@@ -169,12 +152,12 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
169152
170153 if (sign_p != NULL )
171154 {
172- * sign_p = ((packed_value >> sign_pos ) != 0 );
155+ * sign_p = ((packed_value >> ECMA_NUMBER_SIGN_POS ) != 0 );
173156 }
174157
175158 if (biased_exp_p != NULL )
176159 {
177- * biased_exp_p = (uint32_t ) (((packed_value ) & ~(1ull << sign_pos )) >> biased_exp_pos );
160+ * biased_exp_p = (uint32_t ) (((packed_value ) & ~(1ull << ECMA_NUMBER_SIGN_POS )) >> ECMA_NUMBER_FRACTION_WIDTH );
178161 }
179162
180163 if (fraction_p != NULL )
@@ -191,10 +174,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
191174 */
192175const int32_t ecma_number_exponent_bias = 1023 ;
193176
194- /**
195- * Relative precision used in calculation with ecma-numbers
196- */
197- const ecma_number_t ecma_number_relative_eps = 1.0e-16 ;
198177#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
199178
200179/**
@@ -636,7 +615,7 @@ ecma_number_trunc (ecma_number_t num) /**< ecma-number */
636615
637616 if (exponent < 0 )
638617 {
639- return 0 ;
618+ return ECMA_NUMBER_ZERO ;
640619 }
641620 else if (exponent < dot_shift )
642621 {
@@ -672,21 +651,18 @@ ecma_number_t
672651ecma_number_calc_remainder (ecma_number_t left_num , /**< left operand */
673652 ecma_number_t right_num ) /**< right operand */
674653{
675- ecma_number_t n = left_num , d = right_num ;
676-
677- JERRY_ASSERT (!ecma_number_is_nan (n )
678- && !ecma_number_is_zero (n )
679- && !ecma_number_is_infinity (n ));
680- JERRY_ASSERT (!ecma_number_is_nan (d )
681- && !ecma_number_is_zero (d )
682- && !ecma_number_is_infinity (d ));
683-
684- ecma_number_t q = ecma_number_trunc (ecma_number_divide (n , d ));
654+ JERRY_ASSERT (!ecma_number_is_nan (left_num )
655+ && !ecma_number_is_zero (left_num )
656+ && !ecma_number_is_infinity (left_num ));
657+ JERRY_ASSERT (!ecma_number_is_nan (right_num )
658+ && !ecma_number_is_zero (right_num )
659+ && !ecma_number_is_infinity (right_num ));
685660
686- ecma_number_t r = ecma_number_substract (n , ecma_number_multiply (d , q ));
661+ const ecma_number_t q = ecma_number_trunc (ecma_number_divide (left_num , right_num ));
662+ ecma_number_t r = ecma_number_substract (left_num , ecma_number_multiply (right_num , q ));
687663
688664 if (ecma_number_is_zero (r )
689- && ecma_number_is_negative (n ))
665+ && ecma_number_is_negative (left_num ))
690666 {
691667 r = ecma_number_negate (r );
692668 }
0 commit comments