24
24
#include "ecma-globals.h"
25
25
#include "ecma-helpers.h"
26
26
27
+ #define ECMA_NUMBER_SIGN_POS (ECMA_NUMBER_FRACTION_WIDTH + \
28
+ ECMA_NUMBER_BIASED_EXP_WIDTH)
29
+
27
30
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
28
31
JERRY_STATIC_ASSERT (sizeof (ecma_number_t ) == sizeof (uint32_t ));
29
32
@@ -37,16 +40,12 @@ ecma_number_pack (bool sign, /**< sign */
37
40
uint32_t biased_exp , /**< biased exponent */
38
41
uint64_t fraction ) /**< fraction */
39
42
{
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
-
44
43
JERRY_ASSERT ((biased_exp & ~((1u << ECMA_NUMBER_BIASED_EXP_WIDTH ) - 1 )) == 0 );
45
44
JERRY_ASSERT ((fraction & ~((1ull << ECMA_NUMBER_FRACTION_WIDTH ) - 1 )) == 0 );
46
45
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 ));
50
49
51
50
union
52
51
{
@@ -68,10 +67,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
68
67
uint32_t * biased_exp_p , /**< optional out: biased exponent */
69
68
uint64_t * fraction_p ) /**< optional out: fraction */
70
69
{
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
-
75
70
union
76
71
{
77
72
uint32_t u32_value ;
@@ -84,12 +79,12 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
84
79
85
80
if (sign_p != NULL )
86
81
{
87
- * sign_p = ((packed_value >> sign_pos ) != 0 );
82
+ * sign_p = ((packed_value >> ECMA_NUMBER_SIGN_POS ) != 0 );
88
83
}
89
84
90
85
if (biased_exp_p != NULL )
91
86
{
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 );
93
88
}
94
89
95
90
if (fraction_p != NULL )
@@ -106,10 +101,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
106
101
*/
107
102
const int32_t ecma_number_exponent_bias = 127 ;
108
103
109
- /**
110
- * Relative precision used in calculation with ecma-numbers
111
- */
112
- const ecma_number_t ecma_number_relative_eps = 1.0e-10f ;
113
104
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
114
105
JERRY_STATIC_ASSERT (sizeof (ecma_number_t ) == sizeof (uint64_t ));
115
106
@@ -123,13 +114,9 @@ ecma_number_pack (bool sign, /**< sign */
123
114
uint32_t biased_exp , /**< biased exponent */
124
115
uint64_t fraction ) /**< fraction */
125
116
{
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 );
133
120
134
121
JERRY_ASSERT ((biased_exp & ~((1u << ECMA_NUMBER_BIASED_EXP_WIDTH ) - 1 )) == 0 );
135
122
JERRY_ASSERT ((fraction & ~((1ull << ECMA_NUMBER_FRACTION_WIDTH ) - 1 )) == 0 );
@@ -154,10 +141,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
154
141
uint32_t * biased_exp_p , /**< optional out: biased exponent */
155
142
uint64_t * fraction_p ) /**< optional out: fraction */
156
143
{
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
-
161
144
union
162
145
{
163
146
uint64_t u64_value ;
@@ -169,12 +152,12 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
169
152
170
153
if (sign_p != NULL )
171
154
{
172
- * sign_p = ((packed_value >> sign_pos ) != 0 );
155
+ * sign_p = ((packed_value >> ECMA_NUMBER_SIGN_POS ) != 0 );
173
156
}
174
157
175
158
if (biased_exp_p != NULL )
176
159
{
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 );
178
161
}
179
162
180
163
if (fraction_p != NULL )
@@ -191,10 +174,6 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
191
174
*/
192
175
const int32_t ecma_number_exponent_bias = 1023 ;
193
176
194
- /**
195
- * Relative precision used in calculation with ecma-numbers
196
- */
197
- const ecma_number_t ecma_number_relative_eps = 1.0e-16 ;
198
177
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
199
178
200
179
/**
@@ -636,7 +615,7 @@ ecma_number_trunc (ecma_number_t num) /**< ecma-number */
636
615
637
616
if (exponent < 0 )
638
617
{
639
- return 0 ;
618
+ return ECMA_NUMBER_ZERO ;
640
619
}
641
620
else if (exponent < dot_shift )
642
621
{
@@ -672,21 +651,18 @@ ecma_number_t
672
651
ecma_number_calc_remainder (ecma_number_t left_num , /**< left operand */
673
652
ecma_number_t right_num ) /**< right operand */
674
653
{
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 ));
685
660
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 ));
687
663
688
664
if (ecma_number_is_zero (r )
689
- && ecma_number_is_negative (n ))
665
+ && ecma_number_is_negative (left_num ))
690
666
{
691
667
r = ecma_number_negate (r );
692
668
}
0 commit comments