| Index: src/mips/code-stubs-mips.cc
|
| diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
|
| index e3d1524f19b117508d2f0d591fa80581d3bcab75..ea75113c251e18964de6d29f41554d19f3f51b68 100644
|
| --- a/src/mips/code-stubs-mips.cc
|
| +++ b/src/mips/code-stubs-mips.cc
|
| @@ -1608,12 +1608,13 @@ static void EmitStrictTwoHeapObjectCompare(MacroAssembler* masm,
|
| // Check for oddballs: true, false, null, undefined.
|
| __ Branch(&return_not_equal, eq, a3, Operand(ODDBALL_TYPE));
|
|
|
| - // Now that we have the types we might as well check for symbol-symbol.
|
| - // Ensure that no non-strings have the symbol bit set.
|
| - STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsSymbolMask);
|
| - STATIC_ASSERT(kSymbolTag != 0);
|
| + // Now that we have the types we might as well check for
|
| + // internalized-internalized.
|
| + // Ensure that no non-strings have the internalized bit set.
|
| + STATIC_ASSERT(LAST_TYPE < kNotStringTag + kIsInternalizedMask);
|
| + STATIC_ASSERT(kInternalizedTag != 0);
|
| __ And(t2, a2, Operand(a3));
|
| - __ And(t0, t2, Operand(kIsSymbolMask));
|
| + __ And(t0, t2, Operand(kIsInternalizedMask));
|
| __ Branch(&return_not_equal, ne, t0, Operand(zero_reg));
|
| }
|
|
|
| @@ -1651,30 +1652,30 @@ static void EmitCheckForTwoHeapNumbers(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -// Fast negative check for symbol-to-symbol equality.
|
| -static void EmitCheckForSymbolsOrObjects(MacroAssembler* masm,
|
| - Register lhs,
|
| - Register rhs,
|
| - Label* possible_strings,
|
| - Label* not_both_strings) {
|
| +// Fast negative check for internalized-to-internalized equality.
|
| +static void EmitCheckForInternalizedStringsOrObjects(MacroAssembler* masm,
|
| + Register lhs,
|
| + Register rhs,
|
| + Label* possible_strings,
|
| + Label* not_both_strings) {
|
| ASSERT((lhs.is(a0) && rhs.is(a1)) ||
|
| (lhs.is(a1) && rhs.is(a0)));
|
|
|
| // a2 is object type of lhs.
|
| - // Ensure that no non-strings have the symbol bit set.
|
| + // Ensure that no non-strings have the internalized bit set.
|
| Label object_test;
|
| - STATIC_ASSERT(kSymbolTag != 0);
|
| + STATIC_ASSERT(kInternalizedTag != 0);
|
| __ And(at, a2, Operand(kIsNotStringMask));
|
| __ Branch(&object_test, ne, at, Operand(zero_reg));
|
| - __ And(at, a2, Operand(kIsSymbolMask));
|
| + __ And(at, a2, Operand(kIsInternalizedMask));
|
| __ Branch(possible_strings, eq, at, Operand(zero_reg));
|
| __ GetObjectType(rhs, a3, a3);
|
| __ Branch(not_both_strings, ge, a3, Operand(FIRST_NONSTRING_TYPE));
|
| - __ And(at, a3, Operand(kIsSymbolMask));
|
| + __ And(at, a3, Operand(kIsInternalizedMask));
|
| __ Branch(possible_strings, eq, at, Operand(zero_reg));
|
|
|
| - // Both are symbols. We already checked they weren't the same pointer
|
| - // so they are not equal.
|
| + // Both are internalized strings. We already checked they weren't the same
|
| + // pointer so they are not equal.
|
| __ Ret(USE_DELAY_SLOT);
|
| __ li(v0, Operand(1)); // Non-zero indicates not equal.
|
|
|
| @@ -1820,7 +1821,7 @@ static void ICCompareStub_CheckInputType(MacroAssembler* masm,
|
| __ CheckMap(input, scratch, Heap::kHeapNumberMapRootIndex, fail,
|
| DONT_DO_SMI_CHECK);
|
| }
|
| - // We could be strict about symbol/string here, but as long as
|
| + // We could be strict about internalized/string here, but as long as
|
| // hydrogen doesn't care, the stub doesn't have to care either.
|
| __ bind(&ok);
|
| }
|
| @@ -1933,25 +1934,28 @@ void ICCompareStub::GenerateGeneric(MacroAssembler* masm) {
|
| EmitStrictTwoHeapObjectCompare(masm, lhs, rhs);
|
| }
|
|
|
| - Label check_for_symbols;
|
| + Label check_for_internalized_strings;
|
| Label flat_string_check;
|
| // Check for heap-number-heap-number comparison. Can jump to slow case,
|
| // or load both doubles and jump to the code that handles
|
| - // that case. If the inputs are not doubles then jumps to check_for_symbols.
|
| + // that case. If the inputs are not doubles then jumps to
|
| + // check_for_internalized_strings.
|
| // In this case a2 will contain the type of lhs_.
|
| EmitCheckForTwoHeapNumbers(masm,
|
| lhs,
|
| rhs,
|
| &both_loaded_as_doubles,
|
| - &check_for_symbols,
|
| + &check_for_internalized_strings,
|
| &flat_string_check);
|
|
|
| - __ bind(&check_for_symbols);
|
| + __ bind(&check_for_internalized_strings);
|
| if (cc == eq && !strict()) {
|
| - // Returns an answer for two symbols or two detectable objects.
|
| + // Returns an answer for two internalized strings or two
|
| + // detectable objects.
|
| // Otherwise jumps to string case or not both strings case.
|
| // Assumes that a2 is the type of lhs_ on entry.
|
| - EmitCheckForSymbolsOrObjects(masm, lhs, rhs, &flat_string_check, &slow);
|
| + EmitCheckForInternalizedStringsOrObjects(
|
| + masm, lhs, rhs, &flat_string_check, &slow);
|
| }
|
|
|
| // Check for both being sequential ASCII strings, and inline if that is the
|
| @@ -4567,7 +4571,7 @@ void ArrayLengthStub::Generate(MacroAssembler* masm) {
|
| // -- a1 : receiver
|
| // -----------------------------------
|
| __ Branch(&miss, ne, a0,
|
| - Operand(masm->isolate()->factory()->length_symbol()));
|
| + Operand(masm->isolate()->factory()->length_string()));
|
| receiver = a1;
|
| } else {
|
| ASSERT(kind() == Code::LOAD_IC);
|
| @@ -4596,7 +4600,7 @@ void FunctionPrototypeStub::Generate(MacroAssembler* masm) {
|
| // -- a1 : receiver
|
| // -----------------------------------
|
| __ Branch(&miss, ne, a0,
|
| - Operand(masm->isolate()->factory()->prototype_symbol()));
|
| + Operand(masm->isolate()->factory()->prototype_string()));
|
| receiver = a1;
|
| } else {
|
| ASSERT(kind() == Code::LOAD_IC);
|
| @@ -4625,7 +4629,7 @@ void StringLengthStub::Generate(MacroAssembler* masm) {
|
| // -- a1 : receiver
|
| // -----------------------------------
|
| __ Branch(&miss, ne, a0,
|
| - Operand(masm->isolate()->factory()->length_symbol()));
|
| + Operand(masm->isolate()->factory()->length_string()));
|
| receiver = a1;
|
| } else {
|
| ASSERT(kind() == Code::LOAD_IC);
|
| @@ -4663,7 +4667,7 @@ void StoreArrayLengthStub::Generate(MacroAssembler* masm) {
|
| // -- a2 : receiver
|
| // -----------------------------------
|
| __ Branch(&miss, ne, a1,
|
| - Operand(masm->isolate()->factory()->length_symbol()));
|
| + Operand(masm->isolate()->factory()->length_string()));
|
| receiver = a2;
|
| value = a0;
|
| } else {
|
| @@ -5301,7 +5305,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
|
| // String is a cons string, check whether it is flat.
|
| __ bind(&cons_string);
|
| __ lw(a0, FieldMemOperand(subject, ConsString::kSecondOffset));
|
| - __ LoadRoot(a1, Heap::kEmptyStringRootIndex);
|
| + __ LoadRoot(a1, Heap::kempty_stringRootIndex);
|
| __ Branch(&runtime, ne, a0, Operand(a1));
|
| __ lw(subject, FieldMemOperand(subject, ConsString::kFirstOffset));
|
| // Is first part of cons or parent of slice a flat string?
|
| @@ -6138,7 +6142,7 @@ void StringHelper::GenerateTwoCharacterStringTableProbe(MacroAssembler* masm,
|
| Register scratch = scratch3;
|
|
|
| // Make sure that both characters are not digits as such strings has a
|
| - // different hash algorithm. Don't try to look for these in the symbol table.
|
| + // different hash algorithm. Don't try to look for these in the string table.
|
| Label not_array_index;
|
| __ Subu(scratch, c1, Operand(static_cast<int>('0')));
|
| __ Branch(¬_array_index,
|
| @@ -6173,21 +6177,21 @@ void StringHelper::GenerateTwoCharacterStringTableProbe(MacroAssembler* masm,
|
| // chars: two character string, char 1 in byte 0 and char 2 in byte 1.
|
| // hash: hash of two character string.
|
|
|
| - // Load symbol table.
|
| - // Load address of first element of the symbol table.
|
| + // Load string table.
|
| + // Load address of first element of the string table.
|
| Register string_table = c2;
|
| __ LoadRoot(string_table, Heap::kStringTableRootIndex);
|
|
|
| Register undefined = scratch4;
|
| __ LoadRoot(undefined, Heap::kUndefinedValueRootIndex);
|
|
|
| - // Calculate capacity mask from the symbol table capacity.
|
| + // Calculate capacity mask from the string table capacity.
|
| Register mask = scratch2;
|
| __ lw(mask, FieldMemOperand(string_table, StringTable::kCapacityOffset));
|
| __ sra(mask, mask, 1);
|
| __ Addu(mask, mask, -1);
|
|
|
| - // Calculate untagged address of the first element of the symbol table.
|
| + // Calculate untagged address of the first element of the string table.
|
| Register first_string_table_element = string_table;
|
| __ Addu(first_string_table_element, string_table,
|
| Operand(StringTable::kElementsStartOffset - kHeapObjectTag));
|
| @@ -6197,17 +6201,17 @@ void StringHelper::GenerateTwoCharacterStringTableProbe(MacroAssembler* masm,
|
| // hash: hash of two character string
|
| // mask: capacity mask
|
| // first_string_table_element: address of the first element of
|
| - // the symbol table
|
| + // the string table
|
| // undefined: the undefined object
|
| // scratch: -
|
|
|
| - // Perform a number of probes in the symbol table.
|
| + // Perform a number of probes in the string table.
|
| const int kProbes = 4;
|
| Label found_in_string_table;
|
| Label next_probe[kProbes];
|
| Register candidate = scratch5; // Scratch register contains candidate.
|
| for (int i = 0; i < kProbes; i++) {
|
| - // Calculate entry in symbol table.
|
| + // Calculate entry in string table.
|
| if (i > 0) {
|
| __ Addu(candidate, hash, Operand(StringTable::GetProbeOffset(i)));
|
| } else {
|
| @@ -6231,7 +6235,7 @@ void StringHelper::GenerateTwoCharacterStringTableProbe(MacroAssembler* masm,
|
| // Must be the hole (deleted entry).
|
| if (FLAG_debug_code) {
|
| __ LoadRoot(scratch, Heap::kTheHoleValueRootIndex);
|
| - __ Assert(eq, "oddball in symbol table is not undefined or the hole",
|
| + __ Assert(eq, "oddball in string table is not undefined or the hole",
|
| scratch, Operand(candidate));
|
| }
|
| __ jmp(&next_probe[i]);
|
| @@ -6392,7 +6396,7 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
| __ Branch(&sliced_string, ne, t0, Operand(zero_reg));
|
| // Cons string. Check whether it is flat, then fetch first part.
|
| __ lw(t1, FieldMemOperand(v0, ConsString::kSecondOffset));
|
| - __ LoadRoot(t0, Heap::kEmptyStringRootIndex);
|
| + __ LoadRoot(t0, Heap::kempty_stringRootIndex);
|
| __ Branch(&runtime, ne, t1, Operand(t0));
|
| __ lw(t1, FieldMemOperand(v0, ConsString::kFirstOffset));
|
| // Update instance type.
|
| @@ -6775,8 +6779,8 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
| // Adding two lengths can't overflow.
|
| STATIC_ASSERT(String::kMaxLength < String::kMaxLength * 2);
|
| __ Addu(t2, a2, Operand(a3));
|
| - // Use the symbol table when adding two one character strings, as it
|
| - // helps later optimizations to return a symbol here.
|
| + // Use the string table when adding two one character strings, as it
|
| + // helps later optimizations to return a string here.
|
| __ Branch(&longer_than_two, ne, t2, Operand(2));
|
|
|
| // Check that both strings are non-external ASCII strings.
|
| @@ -6793,7 +6797,7 @@ void StringAddStub::Generate(MacroAssembler* masm) {
|
| __ lbu(a2, FieldMemOperand(a0, SeqOneByteString::kHeaderSize));
|
| __ lbu(a3, FieldMemOperand(a1, SeqOneByteString::kHeaderSize));
|
|
|
| - // Try to lookup two character string in symbol table. If it is not found
|
| + // Try to lookup two character string in string table. If it is not found
|
| // just allocate a new one.
|
| Label make_two_character_string;
|
| StringHelper::GenerateTwoCharacterStringTableProbe(
|
| @@ -7138,7 +7142,7 @@ void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| -void ICCompareStub::GenerateSymbols(MacroAssembler* masm) {
|
| +void ICCompareStub::GenerateInternalizedStrings(MacroAssembler* masm) {
|
| ASSERT(state_ == CompareIC::SYMBOL);
|
| Label miss;
|
|
|
| @@ -7151,14 +7155,14 @@ void ICCompareStub::GenerateSymbols(MacroAssembler* masm) {
|
| // Check that both operands are heap objects.
|
| __ JumpIfEitherSmi(left, right, &miss);
|
|
|
| - // Check that both operands are symbols.
|
| + // Check that both operands are internalized strings.
|
| __ lw(tmp1, FieldMemOperand(left, HeapObject::kMapOffset));
|
| __ lw(tmp2, FieldMemOperand(right, HeapObject::kMapOffset));
|
| __ lbu(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset));
|
| __ lbu(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset));
|
| - STATIC_ASSERT(kSymbolTag != 0);
|
| + STATIC_ASSERT(kInternalizedTag != 0);
|
| __ And(tmp1, tmp1, Operand(tmp2));
|
| - __ And(tmp1, tmp1, kIsSymbolMask);
|
| + __ And(tmp1, tmp1, kIsInternalizedMask);
|
| __ Branch(&miss, eq, tmp1, Operand(zero_reg));
|
| // Make sure a0 is non-zero. At this point input operands are
|
| // guaranteed to be non-zero.
|
| @@ -7166,7 +7170,7 @@ void ICCompareStub::GenerateSymbols(MacroAssembler* masm) {
|
| STATIC_ASSERT(EQUAL == 0);
|
| STATIC_ASSERT(kSmiTag == 0);
|
| __ mov(v0, right);
|
| - // Symbols are compared by identity.
|
| + // Internalized strings are compared by identity.
|
| __ Ret(ne, left, Operand(right));
|
| __ li(v0, Operand(Smi::FromInt(EQUAL)));
|
| __ Ret();
|
| @@ -7216,13 +7220,13 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
|
|
|
| // Handle not identical strings.
|
|
|
| - // Check that both strings are symbols. If they are, we're done
|
| + // Check that both strings are internalized strings. If they are, we're done
|
| // because we already know they are not identical.
|
| if (equality) {
|
| ASSERT(GetCondition() == eq);
|
| - STATIC_ASSERT(kSymbolTag != 0);
|
| + STATIC_ASSERT(kInternalizedTag != 0);
|
| __ And(tmp3, tmp1, Operand(tmp2));
|
| - __ And(tmp5, tmp3, Operand(kIsSymbolMask));
|
| + __ And(tmp5, tmp3, Operand(kIsInternalizedMask));
|
| Label is_symbol;
|
| __ Branch(&is_symbol, eq, tmp5, Operand(zero_reg));
|
| // Make sure a0 is non-zero. At this point input operands are
|
| @@ -7425,11 +7429,11 @@ void StringDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm,
|
| Label the_hole;
|
| __ Branch(&the_hole, eq, entity_name, Operand(tmp));
|
|
|
| - // Check if the entry name is not a symbol.
|
| + // Check if the entry name is not a internalized string.
|
| __ lw(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset));
|
| __ lbu(entity_name,
|
| FieldMemOperand(entity_name, Map::kInstanceTypeOffset));
|
| - __ And(scratch0, entity_name, Operand(kIsSymbolMask));
|
| + __ And(scratch0, entity_name, Operand(kIsInternalizedMask));
|
| __ Branch(miss, eq, scratch0, Operand(zero_reg));
|
|
|
| __ bind(&the_hole);
|
| @@ -7605,11 +7609,11 @@ void StringDictionaryLookupStub::Generate(MacroAssembler* masm) {
|
| __ Branch(&in_dictionary, eq, entry_key, Operand(key));
|
|
|
| if (i != kTotalProbes - 1 && mode_ == NEGATIVE_LOOKUP) {
|
| - // Check if the entry name is not a symbol.
|
| + // Check if the entry name is not a internalized string.
|
| __ lw(entry_key, FieldMemOperand(entry_key, HeapObject::kMapOffset));
|
| __ lbu(entry_key,
|
| FieldMemOperand(entry_key, Map::kInstanceTypeOffset));
|
| - __ And(result, entry_key, Operand(kIsSymbolMask));
|
| + __ And(result, entry_key, Operand(kIsInternalizedMask));
|
| __ Branch(&maybe_in_dictionary, eq, result, Operand(zero_reg));
|
| }
|
| }
|
|
|