Index: src/arm/code-stubs-arm.cc |
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
index 62fcc9a981ccd5946ed7946d006d7e6d5224d4d1..a6805e7b8029750f1dfdff376b3737517005651c 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -1535,12 +1535,13 @@ static void EmitStrictTwoHeapObjectCompare(MacroAssembler* masm, |
__ cmp(r3, Operand(ODDBALL_TYPE)); |
__ b(eq, &return_not_equal); |
- // 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_(r2, r2, Operand(r3)); |
- __ tst(r2, Operand(kIsSymbolMask)); |
+ __ tst(r2, Operand(kIsInternalizedMask)); |
__ b(ne, &return_not_equal); |
} |
@@ -1577,29 +1578,29 @@ 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(r0) && rhs.is(r1)) || |
(lhs.is(r1) && rhs.is(r0))); |
// r2 is object type of rhs. |
- // 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); |
__ tst(r2, Operand(kIsNotStringMask)); |
__ b(ne, &object_test); |
- __ tst(r2, Operand(kIsSymbolMask)); |
+ __ tst(r2, Operand(kIsInternalizedMask)); |
__ b(eq, possible_strings); |
__ CompareObjectType(lhs, r3, r3, FIRST_NONSTRING_TYPE); |
__ b(ge, not_both_strings); |
- __ tst(r3, Operand(kIsSymbolMask)); |
+ __ tst(r3, Operand(kIsInternalizedMask)); |
__ b(eq, possible_strings); |
- // Both are symbols. We already checked they weren't the same pointer |
+ // Both are internalized. We already checked they weren't the same pointer |
// so they are not equal. |
__ mov(r0, Operand(NOT_EQUAL)); |
__ Ret(); |
@@ -1746,7 +1747,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/non-internalized here, but as long as |
// hydrogen doesn't care, the stub doesn't have to care either. |
__ bind(&ok); |
} |
@@ -1844,27 +1845,29 @@ 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 into r0, r1, r2, r3 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 r2 will contain the type of rhs_. Never falls through. |
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); |
// In the strict case the EmitStrictTwoHeapObjectCompare already took care of |
- // symbols. |
+ // 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 r2 is the type of rhs_ 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 |
@@ -4533,7 +4536,7 @@ void ArrayLengthStub::Generate(MacroAssembler* masm) { |
// -- r0 : key |
// -- r1 : receiver |
// ----------------------------------- |
- __ cmp(r0, Operand(masm->isolate()->factory()->length_symbol())); |
+ __ cmp(r0, Operand(masm->isolate()->factory()->length_string())); |
__ b(ne, &miss); |
receiver = r1; |
} else { |
@@ -4562,7 +4565,7 @@ void FunctionPrototypeStub::Generate(MacroAssembler* masm) { |
// -- r0 : key |
// -- r1 : receiver |
// ----------------------------------- |
- __ cmp(r0, Operand(masm->isolate()->factory()->prototype_symbol())); |
+ __ cmp(r0, Operand(masm->isolate()->factory()->prototype_string())); |
__ b(ne, &miss); |
receiver = r1; |
} else { |
@@ -4591,7 +4594,7 @@ void StringLengthStub::Generate(MacroAssembler* masm) { |
// -- r0 : key |
// -- r1 : receiver |
// ----------------------------------- |
- __ cmp(r0, Operand(masm->isolate()->factory()->length_symbol())); |
+ __ cmp(r0, Operand(masm->isolate()->factory()->length_string())); |
__ b(ne, &miss); |
receiver = r1; |
} else { |
@@ -4629,7 +4632,7 @@ void StoreArrayLengthStub::Generate(MacroAssembler* masm) { |
// -- r1 : key |
// -- r2 : receiver |
// ----------------------------------- |
- __ cmp(r1, Operand(masm->isolate()->factory()->length_symbol())); |
+ __ cmp(r1, Operand(masm->isolate()->factory()->length_string())); |
__ b(ne, &miss); |
receiver = r2; |
value = r0; |
@@ -5233,7 +5236,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) { |
// String is a cons string, check whether it is flat. |
__ bind(&cons_string); |
__ ldr(r0, FieldMemOperand(subject, ConsString::kSecondOffset)); |
- __ CompareRoot(r0, Heap::kEmptyStringRootIndex); |
+ __ CompareRoot(r0, Heap::kempty_stringRootIndex); |
__ b(ne, &runtime); |
__ ldr(subject, FieldMemOperand(subject, ConsString::kFirstOffset)); |
// Is first part of cons or parent of slice a flat string? |
@@ -6078,7 +6081,7 @@ void StringHelper::GenerateCopyCharactersLong(MacroAssembler* masm, |
} |
-void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
+void StringHelper::GenerateTwoCharacterStringTableProbe(MacroAssembler* masm, |
Register c1, |
Register c2, |
Register scratch1, |
@@ -6091,7 +6094,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(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; |
__ sub(scratch, c1, Operand(static_cast<int>('0'))); |
__ cmp(scratch, Operand(static_cast<int>('9' - '0'))); |
@@ -6119,43 +6122,43 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(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. |
- Register symbol_table = c2; |
- __ LoadRoot(symbol_table, Heap::kSymbolTableRootIndex); |
+ // 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; |
- __ ldr(mask, FieldMemOperand(symbol_table, SymbolTable::kCapacityOffset)); |
+ __ ldr(mask, FieldMemOperand(string_table, StringTable::kCapacityOffset)); |
__ mov(mask, Operand(mask, ASR, 1)); |
__ sub(mask, mask, Operand(1)); |
- // Calculate untagged address of the first element of the symbol table. |
- Register first_symbol_table_element = symbol_table; |
- __ add(first_symbol_table_element, symbol_table, |
- Operand(SymbolTable::kElementsStartOffset - kHeapObjectTag)); |
+ // Calculate untagged address of the first element of the string table. |
+ Register first_string_table_element = string_table; |
+ __ add(first_string_table_element, string_table, |
+ Operand(StringTable::kElementsStartOffset - kHeapObjectTag)); |
// Registers |
// chars: two character string, char 1 in byte 0 and char 2 in byte 1. |
// hash: hash of two character string |
// mask: capacity mask |
- // first_symbol_table_element: address of the first element of |
- // the symbol table |
+ // first_string_table_element: address of the first element of |
+ // 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_symbol_table; |
+ 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) { |
- __ add(candidate, hash, Operand(SymbolTable::GetProbeOffset(i))); |
+ __ add(candidate, hash, Operand(StringTable::GetProbeOffset(i))); |
} else { |
__ mov(candidate, hash); |
} |
@@ -6163,9 +6166,9 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
__ and_(candidate, candidate, Operand(mask)); |
// Load the entry from the symble table. |
- STATIC_ASSERT(SymbolTable::kEntrySize == 1); |
+ STATIC_ASSERT(StringTable::kEntrySize == 1); |
__ ldr(candidate, |
- MemOperand(first_symbol_table_element, |
+ MemOperand(first_string_table_element, |
candidate, |
LSL, |
kPointerSizeLog2)); |
@@ -6181,7 +6184,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
if (FLAG_debug_code) { |
__ LoadRoot(ip, Heap::kTheHoleValueRootIndex); |
__ cmp(ip, candidate); |
- __ Assert(eq, "oddball in symbol table is not undefined or the hole"); |
+ __ Assert(eq, "oddball in string table is not undefined or the hole"); |
} |
__ jmp(&next_probe[i]); |
@@ -6201,7 +6204,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
// Assumes that word load is little endian. |
__ ldrh(scratch, FieldMemOperand(candidate, SeqOneByteString::kHeaderSize)); |
__ cmp(chars, scratch); |
- __ b(eq, &found_in_symbol_table); |
+ __ b(eq, &found_in_string_table); |
__ bind(&next_probe[i]); |
} |
@@ -6210,7 +6213,7 @@ void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm, |
// Scratch register contains result when we fall through to here. |
Register result = candidate; |
- __ bind(&found_in_symbol_table); |
+ __ bind(&found_in_string_table); |
__ Move(r0, result); |
} |
@@ -6335,7 +6338,7 @@ void SubStringStub::Generate(MacroAssembler* masm) { |
__ b(ne, &sliced_string); |
// Cons string. Check whether it is flat, then fetch first part. |
__ ldr(r5, FieldMemOperand(r0, ConsString::kSecondOffset)); |
- __ CompareRoot(r5, Heap::kEmptyStringRootIndex); |
+ __ CompareRoot(r5, Heap::kempty_stringRootIndex); |
__ b(ne, &runtime); |
__ ldr(r5, FieldMemOperand(r0, ConsString::kFirstOffset)); |
// Update instance type. |
@@ -6695,8 +6698,8 @@ void StringAddStub::Generate(MacroAssembler* masm) { |
// Adding two lengths can't overflow. |
STATIC_ASSERT(String::kMaxLength < String::kMaxLength * 2); |
__ add(r6, r2, Operand(r3)); |
- // 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. |
__ cmp(r6, Operand(2)); |
__ b(ne, &longer_than_two); |
@@ -6714,10 +6717,10 @@ void StringAddStub::Generate(MacroAssembler* masm) { |
__ ldrb(r2, FieldMemOperand(r0, SeqOneByteString::kHeaderSize)); |
__ ldrb(r3, FieldMemOperand(r1, 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::GenerateTwoCharacterSymbolTableProbe( |
+ StringHelper::GenerateTwoCharacterStringTableProbe( |
masm, r2, r3, r6, r7, r4, r5, r9, &make_two_character_string); |
__ IncrementCounter(counters->string_add_native(), 1, r2, r3); |
__ add(sp, sp, Operand(2 * kPointerSize)); |
@@ -7058,8 +7061,8 @@ void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) { |
} |
-void ICCompareStub::GenerateSymbols(MacroAssembler* masm) { |
- ASSERT(state_ == CompareIC::SYMBOL); |
+void ICCompareStub::GenerateInternalizedStrings(MacroAssembler* masm) { |
+ ASSERT(state_ == CompareIC::INTERNALIZED_STRING); |
Label miss; |
// Registers containing left and right operands respectively. |
@@ -7071,17 +7074,17 @@ 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. |
__ ldr(tmp1, FieldMemOperand(left, HeapObject::kMapOffset)); |
__ ldr(tmp2, FieldMemOperand(right, HeapObject::kMapOffset)); |
__ ldrb(tmp1, FieldMemOperand(tmp1, Map::kInstanceTypeOffset)); |
__ ldrb(tmp2, FieldMemOperand(tmp2, Map::kInstanceTypeOffset)); |
- STATIC_ASSERT(kSymbolTag != 0); |
+ STATIC_ASSERT(kInternalizedTag != 0); |
__ and_(tmp1, tmp1, Operand(tmp2)); |
- __ tst(tmp1, Operand(kIsSymbolMask)); |
+ __ tst(tmp1, Operand(kIsInternalizedMask)); |
__ b(eq, &miss); |
- // Symbols are compared by identity. |
+ // Internalized strings are compared by identity. |
__ cmp(left, right); |
// Make sure r0 is non-zero. At this point input operands are |
// guaranteed to be non-zero. |
@@ -7133,13 +7136,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)); |
- __ tst(tmp3, Operand(kIsSymbolMask)); |
+ __ tst(tmp3, Operand(kIsInternalizedMask)); |
// Make sure r0 is non-zero. At this point input operands are |
// guaranteed to be non-zero. |
ASSERT(right.is(r0)); |
@@ -7321,11 +7324,11 @@ void StringDictionaryLookupStub::GenerateNegativeLookup(MacroAssembler* masm, |
__ cmp(entity_name, tmp); |
__ b(eq, &the_hole); |
- // Check if the entry name is not a symbol. |
+ // Check if the entry name is not an internalized string. |
__ ldr(entity_name, FieldMemOperand(entity_name, HeapObject::kMapOffset)); |
__ ldrb(entity_name, |
FieldMemOperand(entity_name, Map::kInstanceTypeOffset)); |
- __ tst(entity_name, Operand(kIsSymbolMask)); |
+ __ tst(entity_name, Operand(kIsInternalizedMask)); |
__ b(eq, miss); |
__ bind(&the_hole); |
@@ -7494,11 +7497,11 @@ void StringDictionaryLookupStub::Generate(MacroAssembler* masm) { |
__ b(eq, &in_dictionary); |
if (i != kTotalProbes - 1 && mode_ == NEGATIVE_LOOKUP) { |
- // Check if the entry name is not a symbol. |
+ // Check if the entry name is not an internalized string. |
__ ldr(entry_key, FieldMemOperand(entry_key, HeapObject::kMapOffset)); |
__ ldrb(entry_key, |
FieldMemOperand(entry_key, Map::kInstanceTypeOffset)); |
- __ tst(entry_key, Operand(kIsSymbolMask)); |
+ __ tst(entry_key, Operand(kIsInternalizedMask)); |
__ b(eq, &maybe_in_dictionary); |
} |
} |