Improve equal operations.

The implementation is simplified and optimized
resulting the removal a large amount of code.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2016-06-03 02:10:44 -07:00
parent 5c852ab6fb
commit 6f33ab3e8f
6 changed files with 177 additions and 325 deletions
+8 -25
View File
@@ -19,6 +19,7 @@
#include "ecma-alloc.h"
#include "ecma-array-object.h"
#include "ecma-builtins.h"
#include "ecma-comparison.h"
#include "ecma-conversion.h"
#include "ecma-exceptions.h"
#include "ecma-function-object.h"
@@ -1483,17 +1484,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
{
JERRY_ASSERT (stack_top_p > frame_ctx_p->registers_p + register_end);
last_completion_value = opfunc_equal_value_type (left_value,
stack_top_p[-1]);
if (ecma_is_value_error (last_completion_value))
{
goto error;
}
result = last_completion_value;
if (result == ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE))
if (ecma_op_strict_equality_compare (left_value, stack_top_p[-1]))
{
byte_code_p = byte_code_start_p + branch_offset;
ecma_free_value (*--stack_top_p);
@@ -1726,26 +1717,18 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
}
case VM_OC_STRICT_EQUAL:
{
last_completion_value = opfunc_equal_value_type (left_value, right_value);
bool is_equal = ecma_op_strict_equality_compare (left_value, right_value);
if (ecma_is_value_error (last_completion_value))
{
goto error;
}
result = last_completion_value;
result = ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE
: ECMA_SIMPLE_VALUE_FALSE);
break;
}
case VM_OC_STRICT_NOT_EQUAL:
{
last_completion_value = opfunc_not_equal_value_type (left_value, right_value);
bool is_equal = ecma_op_strict_equality_compare (left_value, right_value);
if (ecma_is_value_error (last_completion_value))
{
goto error;
}
result = last_completion_value;
result = ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
: ECMA_SIMPLE_VALUE_TRUE);
break;
}
case VM_OC_BIT_OR: