Index: src/x64/stub-cache-x64.cc |
=================================================================== |
--- src/x64/stub-cache-x64.cc (revision 3528) |
+++ src/x64/stub-cache-x64.cc (working copy) |
@@ -1827,17 +1827,15 @@ |
// depending on the this.x = ...; assignment in the function. |
for (int i = 0; i < shared->this_property_assignments_count(); i++) { |
if (shared->IsThisPropertyAssignmentArgument(i)) { |
- Label not_passed; |
- // Set the property to undefined. |
- __ movq(Operand(r9, i * kPointerSize), r8); |
// Check if the argument assigned to the property is actually passed. |
+ // If argument is not passed the property is set to undefined, |
+ // otherwise find it on the stack. |
int arg_number = shared->GetThisPropertyAssignmentArgument(i); |
+ __ movq(rbx, r8); |
__ cmpq(rax, Immediate(arg_number)); |
- __ j(below_equal, ¬_passed); |
- // Argument passed - find it on the stack. |
- __ movq(rbx, Operand(rcx, arg_number * -kPointerSize)); |
+ __ cmovq(above, rbx, Operand(rcx, arg_number * -kPointerSize)); |
+ // Store value in the property. |
__ movq(Operand(r9, i * kPointerSize), rbx); |
- __ bind(¬_passed); |
} else { |
// Set the property to the constant value. |
Handle<Object> constant(shared->GetThisPropertyAssignmentConstant(i)); |