| Index: src/x64/macro-assembler-x64.cc
|
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
|
| index d2db523eb501b3f4eb429446b70c3d43a7802bef..53dedda7ac7212ea282d8e731107e82db1870804 100644
|
| --- a/src/x64/macro-assembler-x64.cc
|
| +++ b/src/x64/macro-assembler-x64.cc
|
| @@ -1158,6 +1158,7 @@ void MacroAssembler::SmiToInteger64(Register dst, const Operand& src) {
|
|
|
|
|
| void MacroAssembler::SmiTest(Register src) {
|
| + AssertSmi(src);
|
| testq(src, src);
|
| }
|
|
|
| @@ -2252,7 +2253,8 @@ void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(
|
| ASSERT(kNotStringTag != 0);
|
| const int kFlatAsciiStringMask =
|
| kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
| - const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
| + const int kFlatAsciiStringTag =
|
| + kStringTag | kOneByteStringTag | kSeqStringTag;
|
|
|
| andl(scratch1, Immediate(kFlatAsciiStringMask));
|
| andl(scratch2, Immediate(kFlatAsciiStringMask));
|
| @@ -2298,7 +2300,8 @@ void MacroAssembler::JumpIfBothInstanceTypesAreNotSequentialAscii(
|
| ASSERT(kNotStringTag != 0);
|
| const int kFlatAsciiStringMask =
|
| kIsNotStringMask | kStringRepresentationMask | kStringEncodingMask;
|
| - const int kFlatAsciiStringTag = ASCII_STRING_TYPE;
|
| + const int kFlatAsciiStringTag =
|
| + kStringTag | kOneByteStringTag | kSeqStringTag;
|
|
|
| andl(scratch1, Immediate(kFlatAsciiStringMask));
|
| andl(scratch2, Immediate(kFlatAsciiStringMask));
|
| @@ -2316,11 +2319,15 @@ static void JumpIfNotUniqueNameHelper(MacroAssembler* masm,
|
| T operand_or_register,
|
| Label* not_unique_name,
|
| Label::Distance distance) {
|
| - STATIC_ASSERT(((SYMBOL_TYPE - 1) & kIsInternalizedMask) == kInternalizedTag);
|
| - masm->cmpb(operand_or_register, Immediate(kInternalizedTag));
|
| - masm->j(less, not_unique_name, distance);
|
| - masm->cmpb(operand_or_register, Immediate(SYMBOL_TYPE));
|
| - masm->j(greater, not_unique_name, distance);
|
| + STATIC_ASSERT(kInternalizedTag == 0 && kStringTag == 0);
|
| + Label succeed;
|
| + masm->testb(operand_or_register,
|
| + Immediate(kIsNotStringMask | kIsNotInternalizedMask));
|
| + masm->j(zero, &succeed, Label::kNear);
|
| + masm->cmpb(operand_or_register, Immediate(static_cast<uint8_t>(SYMBOL_TYPE)));
|
| + masm->j(not_equal, not_unique_name, distance);
|
| +
|
| + masm->bind(&succeed);
|
| }
|
|
|
|
|
| @@ -4668,25 +4675,25 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) {
|
| j(not_equal, &next);
|
| }
|
|
|
| -void MacroAssembler::TestJSArrayForAllocationSiteInfo(
|
| +void MacroAssembler::TestJSArrayForAllocationMemento(
|
| Register receiver_reg,
|
| Register scratch_reg) {
|
| - Label no_info_available;
|
| + Label no_memento_available;
|
| ExternalReference new_space_start =
|
| ExternalReference::new_space_start(isolate());
|
| ExternalReference new_space_allocation_top =
|
| ExternalReference::new_space_allocation_top_address(isolate());
|
|
|
| lea(scratch_reg, Operand(receiver_reg,
|
| - JSArray::kSize + AllocationSiteInfo::kSize - kHeapObjectTag));
|
| + JSArray::kSize + AllocationMemento::kSize - kHeapObjectTag));
|
| movq(kScratchRegister, new_space_start);
|
| cmpq(scratch_reg, kScratchRegister);
|
| - j(less, &no_info_available);
|
| + j(less, &no_memento_available);
|
| cmpq(scratch_reg, ExternalOperand(new_space_allocation_top));
|
| - j(greater, &no_info_available);
|
| - CompareRoot(MemOperand(scratch_reg, -AllocationSiteInfo::kSize),
|
| - Heap::kAllocationSiteInfoMapRootIndex);
|
| - bind(&no_info_available);
|
| + j(greater, &no_memento_available);
|
| + CompareRoot(MemOperand(scratch_reg, -AllocationMemento::kSize),
|
| + Heap::kAllocationMementoMapRootIndex);
|
| + bind(&no_memento_available);
|
| }
|
|
|
|
|
|
|