| Index: src/x64/codegen-x64.cc
|
| ===================================================================
|
| --- src/x64/codegen-x64.cc (revision 7153)
|
| +++ src/x64/codegen-x64.cc (working copy)
|
| @@ -766,7 +766,7 @@
|
| __ AbortIfNotNumber(value.reg());
|
| }
|
| // Smi => false iff zero.
|
| - __ SmiCompare(value.reg(), Smi::FromInt(0));
|
| + __ Cmp(value.reg(), Smi::FromInt(0));
|
| if (value.is_smi()) {
|
| value.Unuse();
|
| dest->Split(not_zero);
|
| @@ -794,7 +794,7 @@
|
| dest->false_target()->Branch(equal);
|
|
|
| // Smi => false iff zero.
|
| - __ SmiCompare(value.reg(), Smi::FromInt(0));
|
| + __ Cmp(value.reg(), Smi::FromInt(0));
|
| dest->false_target()->Branch(equal);
|
| Condition is_smi = masm_->CheckSmi(value.reg());
|
| dest->true_target()->Branch(is_smi);
|
| @@ -1036,7 +1036,7 @@
|
| true, overwrite_mode);
|
| } else {
|
| // Set the flags based on the operation, type and loop nesting level.
|
| - // Bit operations always assume they likely operate on Smis. Still only
|
| + // Bit operations always assume they likely operate on smis. Still only
|
| // generate the inline Smi check code if this operation is part of a loop.
|
| // For all other operations only inline the Smi check code for likely smis
|
| // if the operation is part of a loop.
|
| @@ -2108,7 +2108,7 @@
|
| if (cc == equal) {
|
| Label comparison_done;
|
| __ SmiCompare(FieldOperand(left_side.reg(), String::kLengthOffset),
|
| - Smi::FromInt(1));
|
| + Smi::FromInt(1));
|
| __ j(not_equal, &comparison_done);
|
| uint8_t char_value =
|
| static_cast<uint8_t>(String::cast(*right_val)->Get(0));
|
| @@ -2294,7 +2294,7 @@
|
| // CompareStub and the inline code both support all values of cc.
|
| }
|
| // Implement comparison against a constant Smi, inlining the case
|
| - // where both sides are Smis.
|
| + // where both sides are smis.
|
| left_side->ToRegister();
|
| Register left_reg = left_side->reg();
|
| Smi* constant_smi = Smi::cast(*right_side->handle());
|
| @@ -2304,7 +2304,6 @@
|
| __ AbortIfNotSmi(left_reg);
|
| }
|
| // Test smi equality and comparison by signed int comparison.
|
| - // Both sides are smis, so we can use an Immediate.
|
| __ SmiCompare(left_reg, constant_smi);
|
| left_side->Unuse();
|
| right_side->Unuse();
|
| @@ -2314,7 +2313,7 @@
|
| JumpTarget is_smi;
|
| if (cc == equal) {
|
| // We can do the equality comparison before the smi check.
|
| - __ SmiCompare(left_reg, constant_smi);
|
| + __ Cmp(left_reg, constant_smi);
|
| dest->true_target()->Branch(equal);
|
| Condition left_is_smi = masm_->CheckSmi(left_reg);
|
| dest->false_target()->Branch(left_is_smi);
|
| @@ -2575,8 +2574,8 @@
|
| // adaptor frame below it.
|
| Label invoke, adapted;
|
| __ movq(rdx, Operand(rbp, StandardFrameConstants::kCallerFPOffset));
|
| - __ SmiCompare(Operand(rdx, StandardFrameConstants::kContextOffset),
|
| - Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
|
| + __ Cmp(Operand(rdx, StandardFrameConstants::kContextOffset),
|
| + Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
|
| __ j(equal, &adapted);
|
|
|
| // No arguments adaptor frame. Copy fixed number of arguments.
|
| @@ -3857,7 +3856,7 @@
|
| __ movq(rbx, rax);
|
|
|
| // If the property has been removed while iterating, we just skip it.
|
| - __ SmiCompare(rbx, Smi::FromInt(0));
|
| + __ Cmp(rbx, Smi::FromInt(0));
|
| node->continue_target()->Branch(equal);
|
|
|
| end_del_check.Bind();
|
| @@ -6198,15 +6197,15 @@
|
|
|
| // Skip the arguments adaptor frame if it exists.
|
| Label check_frame_marker;
|
| - __ SmiCompare(Operand(fp.reg(), StandardFrameConstants::kContextOffset),
|
| - Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
|
| + __ Cmp(Operand(fp.reg(), StandardFrameConstants::kContextOffset),
|
| + Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
|
| __ j(not_equal, &check_frame_marker);
|
| __ movq(fp.reg(), Operand(fp.reg(), StandardFrameConstants::kCallerFPOffset));
|
|
|
| // Check the marker in the calling frame.
|
| __ bind(&check_frame_marker);
|
| - __ SmiCompare(Operand(fp.reg(), StandardFrameConstants::kMarkerOffset),
|
| - Smi::FromInt(StackFrame::CONSTRUCT));
|
| + __ Cmp(Operand(fp.reg(), StandardFrameConstants::kMarkerOffset),
|
| + Smi::FromInt(StackFrame::CONSTRUCT));
|
| fp.Unuse();
|
| destination()->Split(equal);
|
| }
|
| @@ -6226,8 +6225,8 @@
|
|
|
| // Check if the calling frame is an arguments adaptor frame.
|
| __ movq(fp.reg(), Operand(rbp, StandardFrameConstants::kCallerFPOffset));
|
| - __ SmiCompare(Operand(fp.reg(), StandardFrameConstants::kContextOffset),
|
| - Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
|
| + __ Cmp(Operand(fp.reg(), StandardFrameConstants::kContextOffset),
|
| + Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
|
| __ j(not_equal, &exit);
|
|
|
| // Arguments adaptor case: Read the arguments length from the
|
| @@ -6783,8 +6782,8 @@
|
| // Fetch the map and check if array is in fast case.
|
| // Check that object doesn't require security checks and
|
| // has no indexed interceptor.
|
| - __ CmpObjectType(object.reg(), FIRST_JS_OBJECT_TYPE, tmp1.reg());
|
| - deferred->Branch(below);
|
| + __ CmpObjectType(object.reg(), JS_ARRAY_TYPE, tmp1.reg());
|
| + deferred->Branch(not_equal);
|
| __ testb(FieldOperand(tmp1.reg(), Map::kBitFieldOffset),
|
| Immediate(KeyedLoadIC::kSlowCaseBitFieldMask));
|
| deferred->Branch(not_zero);
|
| @@ -6826,7 +6825,7 @@
|
|
|
| Label done;
|
| __ InNewSpace(tmp1.reg(), tmp2.reg(), equal, &done);
|
| - // Possible optimization: do a check that both values are Smis
|
| + // Possible optimization: do a check that both values are smis
|
| // (or them and test against Smi mask.)
|
|
|
| __ movq(tmp2.reg(), tmp1.reg());
|
| @@ -8516,12 +8515,6 @@
|
| __ CmpObjectType(receiver.reg(), JS_ARRAY_TYPE, kScratchRegister);
|
| deferred->Branch(not_equal);
|
|
|
| - // Check that the key is within bounds. Both the key and the length of
|
| - // the JSArray are smis. Use unsigned comparison to handle negative keys.
|
| - __ SmiCompare(FieldOperand(receiver.reg(), JSArray::kLengthOffset),
|
| - key.reg());
|
| - deferred->Branch(below_equal);
|
| -
|
| // Get the elements array from the receiver and check that it is not a
|
| // dictionary.
|
| __ movq(tmp.reg(),
|
| @@ -8550,6 +8543,14 @@
|
| kScratchRegister);
|
| deferred->Branch(not_equal);
|
|
|
| + // Check that the key is within bounds. Both the key and the length of
|
| + // the JSArray are smis (because the fixed array check above ensures the
|
| + // elements are in fast case). Use unsigned comparison to handle negative
|
| + // keys.
|
| + __ SmiCompare(FieldOperand(receiver.reg(), JSArray::kLengthOffset),
|
| + key.reg());
|
| + deferred->Branch(below_equal);
|
| +
|
| // Store the value.
|
| SmiIndex index =
|
| masm()->SmiToIndex(kScratchRegister, key.reg(), kPointerSizeLog2);
|
|
|