Skip to content

Commit 03ca514

Browse files
committed
Rework the CONFIG_ECMA_NUMBER_TYPE macro usage
The new approach defines a single JERRY_NUMBER_TYPE_FLOAT64 macro for which the allowed values are: * 1: use 64-bit floating point numbers * 0: use 32-bit floating point number By default the 64-bit floating point number mode is enabled. JerryScript-DCO-1.0-Signed-off-by: Peter Gal [email protected]
1 parent 27b62f6 commit 03ca514

17 files changed

+83
-79
lines changed

jerry-core/api/jerry-snapshot.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ snapshot_write_to_buffer_by_offset (uint8_t *buffer_p, /**< buffer */
120120
/**
121121
* Maximum snapshot write buffer offset.
122122
*/
123-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
123+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
124124
#define JERRY_SNAPSHOT_MAXIMUM_WRITE_OFFSET (0x7fffff >> 1)
125-
#else
125+
#else /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
126126
#define JERRY_SNAPSHOT_MAXIMUM_WRITE_OFFSET (UINT32_MAX >> 1)
127-
#endif
127+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
128128

129129
/**
130130
* Save snapshot helper.

jerry-core/api/jerry.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3255,9 +3255,9 @@ static jerry_typedarray_mapping_t jerry_typedarray_mappings[] =
32553255
TYPEDARRAY_ENTRY (UINT32, UINT32, 2),
32563256
TYPEDARRAY_ENTRY (INT32, INT32, 2),
32573257
TYPEDARRAY_ENTRY (FLOAT32, FLOAT32, 2),
3258-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
3258+
#if JERRY_NUMBER_TYPE_FLOAT64 == 1
32593259
TYPEDARRAY_ENTRY (FLOAT64, FLOAT64, 3),
3260-
#endif
3260+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
32613261

32623262
#undef TYPEDARRAY_ENTRY
32633263
};

jerry-core/config.h

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@
119119
#endif /* !defined(JERRY_ES2015_TEMPLATE_STRINGS) */
120120

121121
/**
122-
* Enables/disables the unicode case conversion in the engine
123-
* By default Unicode case conversion is enabled
122+
* Enables/disables the unicode case conversion in the engine.
123+
* By default Unicode case conversion is enabled.
124124
*/
125125
#ifndef JERRY_UNICODE_CASE_CONVERSION
126126
# define JERRY_UNICODE_CASE_CONVERSION 1
@@ -145,22 +145,20 @@
145145

146146
/**
147147
* Use 32-bit/64-bit float for ecma-numbers
148+
* This option is for expert use only!
149+
*
150+
* Allowed values:
151+
* 1: use 64-bit floating point number mode
152+
* 0: use 32-bit floating point number mode
153+
*
154+
* Default value: 1
148155
*/
149-
#define CONFIG_ECMA_NUMBER_FLOAT32 (1u) /* 32-bit float */
150-
#define CONFIG_ECMA_NUMBER_FLOAT64 (2u) /* 64-bit float */
151-
152-
#ifndef CONFIG_ECMA_NUMBER_TYPE
153-
# define CONFIG_ECMA_NUMBER_TYPE CONFIG_ECMA_NUMBER_FLOAT64
154-
#else /* CONFIG_ECMA_NUMBER_TYPE */
155-
# if (CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 \
156-
&& CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT64)
157-
# error "ECMA-number storage is configured incorrectly"
158-
# endif /* CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32
159-
&& CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT64 */
160-
#endif /* !CONFIG_ECMA_NUMBER_TYPE */
156+
#ifndef JERRY_NUMBER_TYPE_FLOAT64
157+
# define JERRY_NUMBER_TYPE_FLOAT64 1
158+
#endif
161159

162160
#if ((defined (JERRY_BUILTIN_DATE) && (JERRY_BUILTIN_DATE == 1)) \
163-
&& (CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32))
161+
&& (JERRY_NUMBER_TYPE_FLOAT64 != 1))
164162
# error "Date does not support float32"
165163
#endif
166164

@@ -313,4 +311,10 @@
313311
# error "Invalid value for JERRY_UNICODE_CASE_CONVERSION macro."
314312
#endif
315313

314+
#if !defined(JERRY_NUMBER_TYPE_FLOAT64) \
315+
|| ((JERRY_NUMBER_TYPE_FLOAT64 != 0) \
316+
&& (JERRY_NUMBER_TYPE_FLOAT64 != 1))
317+
# error "Invalid value for JERRY_NUMBER_TYPE_FLOAT64 macro."
318+
#endif
319+
316320
#endif /* !CONFIG_H */

jerry-core/ecma/base/ecma-globals.h

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ enum
190190
ECMA_VALUE_IMPLICIT_CONSTRUCTOR = ECMA_MAKE_VALUE (9), /**< special value for bound class constructors */
191191
};
192192

193-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
193+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
194194
/**
195195
* Maximum integer number for an ecma value
196196
*/
@@ -199,7 +199,7 @@ enum
199199
* Maximum integer number for an ecma value (shifted left with ECMA_DIRECT_SHIFT)
200200
*/
201201
#define ECMA_INTEGER_NUMBER_MAX_SHIFTED 0x7fffff0
202-
#else /* CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 */
202+
#else /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
203203
/**
204204
* Maximum integer number for an ecma value
205205
*/
@@ -208,9 +208,9 @@ enum
208208
* Maximum integer number for an ecma value (shifted left with ECMA_DIRECT_SHIFT)
209209
*/
210210
#define ECMA_INTEGER_NUMBER_MAX_SHIFTED 0x7ffffff0
211-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
211+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
212212

213-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
213+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
214214
/**
215215
* Minimum integer number for an ecma value
216216
*/
@@ -219,7 +219,7 @@ enum
219219
* Minimum integer number for an ecma value (shifted left with ECMA_DIRECT_SHIFT)
220220
*/
221221
#define ECMA_INTEGER_NUMBER_MIN_SHIFTED -0x7fffff0
222-
#else /* CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 */
222+
#else /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
223223
/**
224224
* Minimum integer number for an ecma value
225225
*/
@@ -228,7 +228,7 @@ enum
228228
* Minimum integer number for an ecma value (shifted left with ECMA_DIRECT_SHIFT)
229229
*/
230230
#define ECMA_INTEGER_NUMBER_MIN_SHIFTED (-0x7fffffff - 1) /* -0x80000000 */
231-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
231+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
232232

233233
#if ECMA_DIRECT_SHIFT != 4
234234
#error "Please update ECMA_INTEGER_NUMBER_MIN/MAX_SHIFTED according to the new value of ECMA_DIRECT_SHIFT."
@@ -243,11 +243,11 @@ enum
243243
/**
244244
* Maximum integer number, which if squared, still fits in ecma_integer_value_t
245245
*/
246-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
246+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
247247
#define ECMA_INTEGER_MULTIPLY_MAX 0xb50
248-
#else /* CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 */
248+
#else /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
249249
#define ECMA_INTEGER_MULTIPLY_MAX 0x2d41
250-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
250+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
251251

252252
/**
253253
* Checks whether the error flag is set.
@@ -1030,7 +1030,7 @@ typedef struct
10301030
ecma_object_t *set_p;
10311031
} ecma_property_descriptor_t;
10321032

1033-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
1033+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
10341034
/**
10351035
* Description of an ecma-number
10361036
*/
@@ -1066,7 +1066,7 @@ typedef float ecma_number_t;
10661066
* IEEE-754 2008, 3.6, Table 3.5
10671067
*/
10681068
#define ECMA_NUMBER_FRACTION_WIDTH (23)
1069-
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
1069+
#elif JERRY_NUMBER_TYPE_FLOAT64 == 1
10701070
/**
10711071
* Description of an ecma-number
10721072
*/
@@ -1102,7 +1102,7 @@ typedef double ecma_number_t;
11021102
* IEEE-754 2008, 3.6, Table 3.5
11031103
*/
11041104
#define ECMA_NUMBER_FRACTION_WIDTH (52)
1105-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
1105+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
11061106

11071107
/**
11081108
* Value '0' of ecma_number_t
@@ -1129,7 +1129,7 @@ typedef double ecma_number_t;
11291129
*/
11301130
#define ECMA_NUMBER_MINUS_ONE ((ecma_number_t) -1)
11311131

1132-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
1132+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
11331133
/**
11341134
* Number.MIN_VALUE (i.e., the smallest positive value of ecma-number)
11351135
*
@@ -1142,7 +1142,7 @@ typedef double ecma_number_t;
11421142
* See also: ECMA_262 v5, 15.7.3.2
11431143
*/
11441144
# define ECMA_NUMBER_MAX_VALUE (FLT_MAX)
1145-
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
1145+
#elif JERRY_NUMBER_TYPE_FLOAT64 == 1
11461146
/**
11471147
* Number.MAX_VALUE (i.e., the maximum value of ecma-number)
11481148
*
@@ -1155,7 +1155,7 @@ typedef double ecma_number_t;
11551155
* See also: ECMA_262 v5, 15.7.3.3
11561156
*/
11571157
# define ECMA_NUMBER_MIN_VALUE ((ecma_number_t) 5e-324)
1158-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
1158+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
11591159

11601160
/**
11611161
* Euler number

jerry-core/ecma/base/ecma-helpers-conversion.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* @{
2929
*/
3030

31-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
31+
#if JERRY_NUMBER_TYPE_FLOAT64 == 1
3232

3333
/**
3434
* \addtogroup ecmahelpersbigintegers Helpers for operations intermediate 128-bit integers
@@ -249,7 +249,7 @@ static const uint8_t ecma_uint4_clz[] = { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0,
249249
*/
250250
#define NUMBER_MIN_DECIMAL_EXPONENT -324
251251

252-
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
252+
#elif JERRY_NUMBER_TYPE_FLOAT64 == 0
253253

254254
/**
255255
* Number.MAX_VALUE exponent part when using 32 bit float representation.
@@ -260,7 +260,7 @@ static const uint8_t ecma_uint4_clz[] = { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0,
260260
*/
261261
#define NUMBER_MIN_DECIMAL_EXPONENT -45
262262

263-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
263+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
264264

265265
/**
266266
* Value of epsilon
@@ -568,7 +568,7 @@ ecma_utf8_string_to_number (const lit_utf8_byte_t *str_p, /**< utf-8 string */
568568
return sign ? -ECMA_NUMBER_ZERO : ECMA_NUMBER_ZERO;
569569
}
570570

571-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
571+
#if JERRY_NUMBER_TYPE_FLOAT64 == 1
572572
/*
573573
* 128-bit mantissa storage
574574
*
@@ -653,7 +653,7 @@ ecma_utf8_string_to_number (const lit_utf8_byte_t *str_p, /**< utf-8 string */
653653
fraction_uint64 = ECMA_UINT128_ROUND_HIGH_TO_UINT64 (fraction_uint128);
654654

655655
return ecma_number_make_from_sign_mantissa_and_exponent (sign, fraction_uint64, binary_exponent);
656-
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
656+
#elif JERRY_NUMBER_TYPE_FLOAT64 == 0
657657
/* Less precise conversion */
658658
ecma_number_t num = (ecma_number_t) (uint32_t) fraction_uint64;
659659

@@ -671,7 +671,7 @@ ecma_utf8_string_to_number (const lit_utf8_byte_t *str_p, /**< utf-8 string */
671671
}
672672

673673
return num;
674-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
674+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
675675
} /* ecma_utf8_string_to_number */
676676

677677
/**

jerry-core/ecma/base/ecma-helpers-number.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ JERRY_STATIC_ASSERT (((1 << (ECMA_DIRECT_SHIFT - 1)) | ECMA_TYPE_DIRECT) == ECMA
3737
#define ECMA_NUMBER_SIGN_POS (ECMA_NUMBER_FRACTION_WIDTH + \
3838
ECMA_NUMBER_BIASED_EXP_WIDTH)
3939

40-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
40+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
4141
JERRY_STATIC_ASSERT (sizeof (ecma_number_t) == sizeof (uint32_t),
4242
size_of_ecma_number_t_must_be_equal_to_4_bytes);
4343

@@ -112,7 +112,7 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
112112
*/
113113
const int32_t ecma_number_exponent_bias = 127;
114114

115-
#elif CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
115+
#elif JERRY_NUMBER_TYPE_FLOAT64 == 1
116116
JERRY_STATIC_ASSERT (sizeof (ecma_number_t) == sizeof (uint64_t),
117117
size_of_ecma_number_t_must_be_equal_to_8_bytes);
118118

@@ -186,7 +186,7 @@ ecma_number_unpack (ecma_number_t num, /**< ecma-number */
186186
*/
187187
const int32_t ecma_number_exponent_bias = 1023;
188188

189-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
189+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
190190

191191
/**
192192
* Get fraction of number

jerry-core/ecma/base/ecma-helpers-value.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ ecma_make_nan_value (void)
478478
static inline bool JERRY_ATTR_CONST JERRY_ATTR_ALWAYS_INLINE
479479
ecma_is_number_equal_to_positive_zero (ecma_number_t ecma_number) /**< number */
480480
{
481-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32
481+
#if JERRY_NUMBER_TYPE_FLOAT64 == 0
482482
union
483483
{
484484
uint32_t u32_value;
@@ -488,7 +488,7 @@ ecma_is_number_equal_to_positive_zero (ecma_number_t ecma_number) /**< number */
488488
u.float_value = ecma_number;
489489

490490
return u.u32_value == 0;
491-
#else /* CONFIG_ECMA_NUMBER_TYPE != CONFIG_ECMA_NUMBER_FLOAT32 */
491+
#else /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
492492
union
493493
{
494494
uint64_t u64_value;
@@ -498,7 +498,7 @@ ecma_is_number_equal_to_positive_zero (ecma_number_t ecma_number) /**< number */
498498
u.float_value = ecma_number;
499499

500500
return u.u64_value == 0;
501-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT32 */
501+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 0 */
502502
} /* ecma_is_number_equal_to_positive_zero */
503503

504504
/**

jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,11 @@ OBJECT_VALUE (LIT_MAGIC_STRING_FLOAT32_ARRAY_UL,
180180
ECMA_BUILTIN_ID_FLOAT32ARRAY,
181181
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
182182

183-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
183+
#if JERRY_NUMBER_TYPE_FLOAT64 == 1
184184
OBJECT_VALUE (LIT_MAGIC_STRING_FLOAT64_ARRAY_UL,
185185
ECMA_BUILTIN_ID_FLOAT64ARRAY,
186186
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
187-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
187+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
188188

189189
OBJECT_VALUE (LIT_MAGIC_STRING_UINT8_CLAMPED_ARRAY_UL,
190190
ECMA_BUILTIN_ID_UINT8CLAMPEDARRAY,

jerry-core/ecma/builtin-objects/ecma-builtins.inc.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ BUILTIN_ROUTINE (ECMA_BUILTIN_ID_FLOAT32ARRAY,
379379
true,
380380
float32array)
381381

382-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
382+
#if JERRY_NUMBER_TYPE_FLOAT64 == 1
383383
BUILTIN (ECMA_BUILTIN_ID_FLOAT64ARRAY_PROTOTYPE,
384384
ECMA_OBJECT_TYPE_GENERAL,
385385
ECMA_BUILTIN_ID_TYPEDARRAY_PROTOTYPE,
@@ -391,7 +391,7 @@ BUILTIN_ROUTINE (ECMA_BUILTIN_ID_FLOAT64ARRAY,
391391
ECMA_BUILTIN_ID_TYPEDARRAY,
392392
true,
393393
float64array)
394-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
394+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
395395

396396
BUILTIN (ECMA_BUILTIN_ID_UINT8CLAMPEDARRAY_PROTOTYPE,
397397
ECMA_OBJECT_TYPE_GENERAL,

jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-float64array-prototype.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#include "ecma-builtins.h"
1717

1818
#if defined(JERRY_ES2015_BUILTIN_TYPEDARRAY) && (JERRY_ES2015_BUILTIN_TYPEDARRAY == 1)
19-
#if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64
19+
#if JERRY_NUMBER_TYPE_FLOAT64 == 1
2020

2121
#define ECMA_BUILTINS_INTERNAL
2222
#include "ecma-builtins-internal.h"
@@ -41,5 +41,5 @@
4141
* @}
4242
*/
4343

44-
#endif /* CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 */
44+
#endif /* JERRY_NUMBER_TYPE_FLOAT64 == 1 */
4545
#endif /* defined(JERRY_ES2015_BUILTIN_TYPEDARRAY) && (JERRY_ES2015_BUILTIN_TYPEDARRAY == 1) */

0 commit comments

Comments
 (0)