Passing less number of arguments to a function is generally faster. So

the three boolean arguments of ecma_create_named_data_property and the
two boolean arguments of ecma_create_named_accessor_property are combined
into one uint8_t argument. On ARM-32 it is preferred to have less than
four arguments, since these arguments can be passed in registers.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2016-05-29 23:47:46 -07:00
parent 379698733a
commit 8c92972b2f
17 changed files with 128 additions and 86 deletions
@@ -103,7 +103,8 @@ ecma_op_create_array_object (const ecma_value_t *arguments_list_p, /**< list of
ecma_property_t *length_prop_p = ecma_create_named_data_property (obj_p,
length_magic_string_p,
true, false, false);
ECMA_PROPERTY_FLAG_WRITABLE);
ecma_set_named_data_property_value (length_prop_p, ecma_make_number_value ((ecma_number_t) length));
ecma_deref_ecma_string (length_magic_string_p);
+1 -1
View File
@@ -120,7 +120,7 @@ ecma_new_standard_error_with_message (ecma_standard_error_t error_type, /**< nat
ecma_string_t *message_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_MESSAGE);
ecma_property_t *prop_p = ecma_create_named_data_property (new_error_obj_p,
message_magic_string_p,
true, false, true);
ECMA_PROPERTY_CONFIGURABLE_WRITABLE);
ecma_set_named_data_property_value (prop_p,
ecma_make_string_value (ecma_copy_or_ref_ecma_string (message_string_p)));
@@ -311,9 +311,7 @@ ecma_op_function_try_lazy_instantiate_property (ecma_object_t *obj_p, /**< the f
// 15
ecma_property_t *length_prop_p = ecma_create_named_data_property (obj_p,
property_name_p,
false,
false,
false);
ECMA_PROPERTY_FIXED);
ecma_named_data_property_assign_value (obj_p, length_prop_p, ecma_make_uint32_value (len));
@@ -349,9 +347,7 @@ ecma_op_function_try_lazy_instantiate_property (ecma_object_t *obj_p, /**< the f
// 18.
ecma_property_t *prototype_prop_p = ecma_create_named_data_property (obj_p,
property_name_p,
true,
false,
false);
ECMA_PROPERTY_FLAG_WRITABLE);
ecma_named_data_property_assign_value (obj_p, prototype_prop_p, ecma_make_object_value (proto_p));
+9 -2
View File
@@ -135,9 +135,16 @@ ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environme
if (ecma_get_lex_env_type (lex_env_p) == ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE)
{
uint8_t prop_attributes = ECMA_PROPERTY_FLAG_WRITABLE;
if (is_deletable)
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_CONFIGURABLE);
}
ecma_create_named_data_property (lex_env_p,
name_p,
true, false, is_deletable);
prop_attributes);
}
else
{
@@ -399,7 +406,7 @@ ecma_op_create_immutable_binding (ecma_object_t *lex_env_p, /**< lexical environ
*/
ecma_property_t *prop_p = ecma_create_named_data_property (lex_env_p,
name_p,
false, false, false);
ECMA_PROPERTY_FIXED);
JERRY_ASSERT (ecma_is_value_undefined (ecma_get_named_data_property_value (prop_p)));
@@ -403,11 +403,10 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */
}
}
ecma_property_t *new_prop_p = ecma_create_named_data_property (obj_p,
property_name_p,
true, /* Writable */
true, /* Enumerable */
true); /* Configurable */
ecma_property_t *new_prop_p;
new_prop_p = ecma_create_named_data_property (obj_p,
property_name_p,
ECMA_PROPERTY_CONFIGURABLE_ENUMERABLE_WRITABLE);
JERRY_ASSERT (ecma_is_value_undefined (ecma_get_named_data_property_value (new_prop_p)));
ecma_set_named_data_property_value (new_prop_p, ecma_copy_value_if_not_object (value));
@@ -635,12 +634,24 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
JERRY_ASSERT (property_desc_type == ECMA_PROPERTY_TYPE_GENERIC
|| property_desc_type == ECMA_PROPERTY_TYPE_NAMEDDATA);
uint8_t prop_attributes = 0;
if (property_desc_p->is_configurable)
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_CONFIGURABLE);
}
if (property_desc_p->is_enumerable)
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_ENUMERABLE);
}
if (property_desc_p->is_writable)
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_WRITABLE);
}
ecma_property_t *new_prop_p = ecma_create_named_data_property (obj_p,
property_name_p,
property_desc_p->is_writable,
property_desc_p->is_enumerable,
property_desc_p->is_configurable);
prop_attributes);
JERRY_ASSERT (property_desc_p->is_value_defined
|| ecma_is_value_undefined (property_desc_p->value));
@@ -651,12 +662,22 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
{
// b.
uint8_t prop_attributes = 0;
if (property_desc_p->is_configurable)
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_CONFIGURABLE);
}
if (property_desc_p->is_enumerable)
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_ENUMERABLE);
}
ecma_create_named_accessor_property (obj_p,
property_name_p,
property_desc_p->get_p,
property_desc_p->set_p,
property_desc_p->is_enumerable,
property_desc_p->is_configurable);
prop_attributes);
}
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
@@ -727,8 +748,12 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
/* The following implementation can be optimized by directly overwriting
* the fields of current_p if this code path is performance critical. */
uint8_t prop_attributes = ECMA_PROPERTY_FLAG_CONFIGURABLE;
bool was_enumerable = ecma_is_property_enumerable (current_p);
if (ecma_is_property_enumerable (current_p))
{
prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_ENUMERABLE);
}
ecma_delete_property (obj_p, current_p);
@@ -740,8 +765,7 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
property_name_p,
NULL,
NULL,
was_enumerable,
true);
prop_attributes);
}
else
{
@@ -749,9 +773,7 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
current_p = ecma_create_named_data_property (obj_p,
property_name_p,
false,
was_enumerable,
true);
prop_attributes);
}
}
@@ -142,7 +142,7 @@ re_initialize_props (ecma_object_t *re_obj_p, /**< RegExp obejct */
{
prop_p = ecma_create_named_data_property (re_obj_p,
magic_string_p,
false, false, false);
ECMA_PROPERTY_FIXED);
}
ecma_deref_ecma_string (magic_string_p);
@@ -161,7 +161,7 @@ re_initialize_props (ecma_object_t *re_obj_p, /**< RegExp obejct */
{
prop_p = ecma_create_named_data_property (re_obj_p,
magic_string_p,
false, false, false);
ECMA_PROPERTY_FIXED);
}
ecma_deref_ecma_string (magic_string_p);
@@ -177,7 +177,7 @@ re_initialize_props (ecma_object_t *re_obj_p, /**< RegExp obejct */
{
prop_p = ecma_create_named_data_property (re_obj_p,
magic_string_p,
false, false, false);
ECMA_PROPERTY_FIXED);
}
ecma_deref_ecma_string (magic_string_p);
@@ -193,7 +193,7 @@ re_initialize_props (ecma_object_t *re_obj_p, /**< RegExp obejct */
{
prop_p = ecma_create_named_data_property (re_obj_p,
magic_string_p,
false, false, false);
ECMA_PROPERTY_FIXED);
}
ecma_deref_ecma_string (magic_string_p);
@@ -209,7 +209,7 @@ re_initialize_props (ecma_object_t *re_obj_p, /**< RegExp obejct */
{
prop_p = ecma_create_named_data_property (re_obj_p,
magic_string_p,
true, false, false);
ECMA_PROPERTY_FLAG_WRITABLE);
}
ecma_deref_ecma_string (magic_string_p);
@@ -101,7 +101,7 @@ ecma_op_create_string_object (const ecma_value_t *arguments_list_p, /**< list of
ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
ecma_property_t *length_prop_p = ecma_create_named_data_property (obj_p,
length_magic_string_p,
false, false, false);
ECMA_PROPERTY_FIXED);
ecma_set_named_data_property_value (length_prop_p, ecma_make_number_value (length_value));
ecma_deref_ecma_string (length_magic_string_p);
@@ -191,7 +191,7 @@ ecma_op_string_object_get_own_property (ecma_object_t *obj_p, /**< a String obje
new_prop_p = ecma_create_named_data_property (obj_p,
new_prop_name_p,
false, true, false);
ECMA_PROPERTY_FLAG_ENUMERABLE);
ecma_set_named_data_property_value (new_prop_p,
ecma_make_string_value (new_prop_str_value_p));