Skip to content

Commit d6b1156

Browse files
committed
Don't use pointer compression where the ecma_value can store pointer value directly.
This changes affects those internal properties where the property value type is an ecma_object_t ptr. JerryScript-DCO-1.0-Signed-off-by: Robert Sipka rsipka.uszeged@partner.samsung.com
1 parent 02ba19f commit d6b1156

File tree

4 files changed

+127
-1
lines changed

4 files changed

+127
-1
lines changed

jerry-core/ecma/base/ecma-gc.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,16 @@ ecma_gc_mark_property (ecma_property_t *property_p) /**< property */
315315
case ECMA_INTERNAL_PROPERTY_SCOPE: /* a lexical environment */
316316
case ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP: /* an object */
317317
{
318+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
319+
320+
ecma_object_t *obj_p = ecma_get_object_from_value (property_value);
321+
322+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
323+
318324
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t, property_value);
319325

326+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
327+
320328
ecma_gc_set_object_visited (obj_p, true);
321329

322330
break;

jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,17 @@ ecma_builtin_function_prototype_object_bind (ecma_value_t this_arg, /**< this ar
247247
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
248248

249249
ecma_object_t *this_arg_obj_p = ecma_get_object_from_value (this_arg);
250+
251+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
252+
253+
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value = ecma_make_object_value (this_arg_obj_p);
254+
255+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
256+
250257
ECMA_SET_NON_NULL_POINTER (ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value, this_arg_obj_p);
251258

259+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
260+
252261
/* 8. */
253262
ecma_property_t *bound_this_prop_p;
254263
bound_this_prop_p = ecma_create_internal_property (function_p, ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_BOUND_THIS);

jerry-core/ecma/operations/ecma-function-object.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,17 @@ ecma_op_create_function_object (ecma_object_t *scope_p, /**< function's scope */
168168

169169
// 9.
170170
ecma_property_t *scope_prop_p = ecma_create_internal_property (f, ECMA_INTERNAL_PROPERTY_SCOPE);
171+
172+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
173+
174+
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value = ecma_make_object_value (scope_p);
175+
176+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
177+
171178
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value, scope_p);
172179

180+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
181+
173182
// 10., 11., 12.
174183
ecma_property_t *bytecode_prop_p = ecma_create_internal_property (f, ECMA_INTERNAL_PROPERTY_CODE_BYTECODE);
175184
MEM_CP_SET_NON_NULL_POINTER (ECMA_PROPERTY_VALUE_PTR (bytecode_prop_p)->value, bytecode_data_p);
@@ -529,9 +538,18 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object *
529538
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
530539

531540
ecma_object_t *target_func_obj_p;
541+
542+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
543+
544+
target_func_obj_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
545+
546+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
547+
532548
target_func_obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
533549
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
534550

551+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
552+
535553
/* 3. */
536554
ret_value = ecma_op_object_has_instance (target_func_obj_p, value);
537555
}
@@ -576,9 +594,17 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
576594
ecma_property_t *scope_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_SCOPE);
577595
ecma_property_t *bytecode_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_CODE_BYTECODE);
578596

597+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
598+
599+
ecma_object_t *scope_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
600+
601+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
602+
579603
ecma_object_t *scope_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
580604
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
581605

606+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
607+
582608
// 8.
583609
ecma_value_t this_binding;
584610
bool is_strict;
@@ -685,9 +711,18 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
685711
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
686712

687713
ecma_object_t *target_func_obj_p;
714+
715+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
716+
717+
target_func_obj_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
718+
719+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
720+
688721
target_func_obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
689722
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
690723

724+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
725+
691726
/* 4. */
692727
ecma_property_t *bound_args_prop_p;
693728
ecma_value_t bound_this_value = ECMA_PROPERTY_VALUE_PTR (bound_this_prop_p)->value;
@@ -870,9 +905,18 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
870905
ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION);
871906

872907
ecma_object_t *target_func_obj_p;
908+
909+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
910+
911+
target_func_obj_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
912+
913+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
914+
873915
target_func_obj_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
874916
ECMA_PROPERTY_VALUE_PTR (target_function_prop_p)->value);
875917

918+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
919+
876920
/* 2. */
877921
if (!ecma_is_constructor (ecma_make_object_value (target_func_obj_p)))
878922
{

jerry-core/ecma/operations/ecma-objects-arguments.c

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,22 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function
174174

175175
ecma_property_t *parameters_map_prop_p = ecma_create_internal_property (obj_p,
176176
ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
177-
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (parameters_map_prop_p)->value, map_p);
178177

179178
ecma_property_t *scope_prop_p = ecma_create_internal_property (map_p,
180179
ECMA_INTERNAL_PROPERTY_SCOPE);
180+
181+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
182+
183+
ECMA_PROPERTY_VALUE_PTR (parameters_map_prop_p)->value = ecma_make_object_value (map_p);
184+
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value = ecma_make_object_value (lex_env_p);
185+
186+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
187+
188+
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (parameters_map_prop_p)->value, map_p);
181189
ECMA_SET_POINTER (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value, lex_env_p);
182190

191+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
192+
183193
ecma_deref_object (map_p);
184194
}
185195
}
@@ -285,8 +295,18 @@ ecma_arguments_get_mapped_arg_value (ecma_object_t *map_p, /**< [[ParametersMap]
285295
equal to mapped argument's name */
286296
{
287297
ecma_property_t *scope_prop_p = ecma_get_internal_property (map_p, ECMA_INTERNAL_PROPERTY_SCOPE);
298+
299+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
300+
301+
ecma_object_t *lex_env_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
302+
303+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
304+
288305
ecma_object_t *lex_env_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
289306
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
307+
308+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
309+
290310
JERRY_ASSERT (lex_env_p != NULL
291311
&& ecma_is_lexical_environment (lex_env_p));
292312

@@ -316,9 +336,18 @@ ecma_op_arguments_object_get (ecma_object_t *obj_p, /**< the object */
316336
{
317337
// 1.
318338
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
339+
340+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
341+
342+
ecma_object_t *map_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
343+
344+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
345+
319346
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
320347
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
321348

349+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
350+
322351
// 2.
323352
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
324353

@@ -362,9 +391,18 @@ ecma_op_arguments_object_get_own_property (ecma_object_t *obj_p, /**< the object
362391

363392
// 3.
364393
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
394+
395+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
396+
397+
ecma_object_t *map_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
398+
399+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
400+
365401
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
366402
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
367403

404+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
405+
368406
// 4.
369407
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
370408

@@ -402,9 +440,18 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj
402440
{
403441
// 1.
404442
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
443+
444+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
445+
446+
ecma_object_t *map_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
447+
448+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
449+
405450
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
406451
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
407452

453+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
454+
408455
// 2.
409456
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
410457

@@ -443,9 +490,18 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj
443490
{
444491
/* emulating execution of function described by MakeArgSetter */
445492
ecma_property_t *scope_prop_p = ecma_get_internal_property (map_p, ECMA_INTERNAL_PROPERTY_SCOPE);
493+
494+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
495+
496+
ecma_object_t *lex_env_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
497+
498+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
499+
446500
ecma_object_t *lex_env_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
447501
ECMA_PROPERTY_VALUE_PTR (scope_prop_p)->value);
448502

503+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
504+
449505
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
450506
ecma_value_t arg_name_prop_value = ecma_get_named_data_property_value (mapped_prop_p);
451507

@@ -500,9 +556,18 @@ ecma_op_arguments_object_delete (ecma_object_t *obj_p, /**< the object */
500556
{
501557
// 1.
502558
ecma_property_t *map_prop_p = ecma_get_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP);
559+
560+
#ifdef ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY
561+
562+
ecma_object_t *map_p = ecma_get_object_from_value (ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
563+
564+
#else /* !ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
565+
503566
ecma_object_t *map_p = ECMA_GET_NON_NULL_POINTER (ecma_object_t,
504567
ECMA_PROPERTY_VALUE_PTR (map_prop_p)->value);
505568

569+
#endif /* ECMA_VALUE_CAN_STORE_UINTPTR_VALUE_DIRECTLY */
570+
506571
// 2.
507572
ecma_property_t *mapped_prop_p = ecma_op_object_get_own_property (map_p, property_name_p);
508573

0 commit comments

Comments
 (0)