Index: src/mips/ic-mips.cc |
diff --git a/src/mips/ic-mips.cc b/src/mips/ic-mips.cc |
index 24b1b0feed3e39011c67292cb8750729da359a20..6db9892beb37e813dead72d598f37d4438039b28 100644 |
--- a/src/mips/ic-mips.cc |
+++ b/src/mips/ic-mips.cc |
@@ -61,12 +61,12 @@ static void GenerateGlobalInstanceTypeCheck(MacroAssembler* masm, |
// Generated code falls through if the receiver is a regular non-global |
// JS object with slow properties and no interceptors. |
-static void GenerateStringDictionaryReceiverCheck(MacroAssembler* masm, |
- Register receiver, |
- Register elements, |
- Register scratch0, |
- Register scratch1, |
- Label* miss) { |
+static void GenerateNameDictionaryReceiverCheck(MacroAssembler* masm, |
+ Register receiver, |
+ Register elements, |
+ Register scratch0, |
+ Register scratch1, |
+ Label* miss) { |
// Register usage: |
// receiver: holds the receiver on entry and is unchanged. |
// elements: holds the property dictionary on fall through. |
@@ -129,19 +129,19 @@ static void GenerateDictionaryLoad(MacroAssembler* masm, |
Label done; |
// Probe the dictionary. |
- StringDictionaryLookupStub::GeneratePositiveLookup(masm, |
- miss, |
- &done, |
- elements, |
- name, |
- scratch1, |
- scratch2); |
+ NameDictionaryLookupStub::GeneratePositiveLookup(masm, |
+ miss, |
+ &done, |
+ elements, |
+ name, |
+ scratch1, |
+ scratch2); |
// If probing finds an entry check that the value is a normal |
// property. |
__ bind(&done); // scratch2 == elements + 4 * index. |
- const int kElementsStartOffset = StringDictionary::kHeaderSize + |
- StringDictionary::kElementsStartIndex * kPointerSize; |
+ const int kElementsStartOffset = NameDictionary::kHeaderSize + |
+ NameDictionary::kElementsStartIndex * kPointerSize; |
const int kDetailsOffset = kElementsStartOffset + 2 * kPointerSize; |
__ lw(scratch1, FieldMemOperand(scratch2, kDetailsOffset)); |
__ And(at, |
@@ -182,19 +182,19 @@ static void GenerateDictionaryStore(MacroAssembler* masm, |
Label done; |
// Probe the dictionary. |
- StringDictionaryLookupStub::GeneratePositiveLookup(masm, |
- miss, |
- &done, |
- elements, |
- name, |
- scratch1, |
- scratch2); |
+ NameDictionaryLookupStub::GeneratePositiveLookup(masm, |
+ miss, |
+ &done, |
+ elements, |
+ name, |
+ scratch1, |
+ scratch2); |
// If probing finds an entry in the dictionary check that the value |
// is a normal property that is not read only. |
__ bind(&done); // scratch2 == elements + 4 * index. |
- const int kElementsStartOffset = StringDictionary::kHeaderSize + |
- StringDictionary::kElementsStartIndex * kPointerSize; |
+ const int kElementsStartOffset = NameDictionary::kHeaderSize + |
+ NameDictionary::kElementsStartIndex * kPointerSize; |
const int kDetailsOffset = kElementsStartOffset + 2 * kPointerSize; |
const int kTypeAndReadOnlyMask = |
(PropertyDetails::TypeField::kMask | |
@@ -305,22 +305,25 @@ static void GenerateFastArrayLoad(MacroAssembler* masm, |
} |
-// Checks whether a key is an array index string or an internalized string. |
-// Falls through if a key is an internalized string. |
-static void GenerateKeyStringCheck(MacroAssembler* masm, |
- Register key, |
- Register map, |
- Register hash, |
- Label* index_string, |
- Label* not_internalized) { |
+// Checks whether a key is an array index string or a unique name. |
+// Falls through if a key is a unique name. |
+static void GenerateKeyNameCheck(MacroAssembler* masm, |
+ Register key, |
+ Register map, |
+ Register hash, |
+ Label* index_string, |
+ Label* not_unique) { |
// The key is not a smi. |
- // Is it a string? |
+ Label unique; |
+ // Is it a name? |
__ GetObjectType(key, map, hash); |
- __ Branch(not_internalized, ge, hash, Operand(FIRST_NONSTRING_TYPE)); |
+ __ Branch(not_unique, hi, hash, Operand(LAST_UNIQUE_NAME_TYPE)); |
+ STATIC_ASSERT(LAST_UNIQUE_NAME_TYPE == FIRST_NONSTRING_TYPE); |
+ __ Branch(&unique, eq, hash, Operand(LAST_UNIQUE_NAME_TYPE)); |
// Is the string an array index, with cached numeric value? |
- __ lw(hash, FieldMemOperand(key, String::kHashFieldOffset)); |
- __ And(at, hash, Operand(String::kContainsCachedArrayIndexMask)); |
+ __ lw(hash, FieldMemOperand(key, Name::kHashFieldOffset)); |
+ __ And(at, hash, Operand(Name::kContainsCachedArrayIndexMask)); |
__ Branch(index_string, eq, at, Operand(zero_reg)); |
// Is the string internalized? |
@@ -328,7 +331,9 @@ static void GenerateKeyStringCheck(MacroAssembler* masm, |
__ lbu(hash, FieldMemOperand(map, Map::kInstanceTypeOffset)); |
STATIC_ASSERT(kInternalizedTag != 0); |
__ And(at, hash, Operand(kIsInternalizedMask)); |
- __ Branch(not_internalized, eq, at, Operand(zero_reg)); |
+ __ Branch(not_unique, eq, at, Operand(zero_reg)); |
+ |
+ __ bind(&unique); |
} |
@@ -426,7 +431,7 @@ void CallICBase::GenerateNormal(MacroAssembler* masm, int argc) { |
// Get the receiver of the function from the stack into a1. |
__ lw(a1, MemOperand(sp, argc * kPointerSize)); |
- GenerateStringDictionaryReceiverCheck(masm, a1, a0, a3, t0, &miss); |
+ GenerateNameDictionaryReceiverCheck(masm, a1, a0, a3, t0, &miss); |
// a0: elements |
// Search the dictionary - put result in register a1. |
@@ -529,11 +534,11 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) { |
__ lw(a1, MemOperand(sp, argc * kPointerSize)); |
Label do_call, slow_call, slow_load, slow_reload_receiver; |
- Label check_number_dictionary, check_string, lookup_monomorphic_cache; |
- Label index_smi, index_string; |
+ Label check_number_dictionary, check_name, lookup_monomorphic_cache; |
+ Label index_smi, index_name; |
// Check that the key is a smi. |
- __ JumpIfNotSmi(a2, &check_string); |
+ __ JumpIfNotSmi(a2, &check_name); |
__ bind(&index_smi); |
// Now the key is known to be a smi. This place is also jumped to from below |
// where a numeric string is converted to a smi. |
@@ -580,10 +585,10 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) { |
__ mov(a1, v0); |
__ jmp(&do_call); |
- __ bind(&check_string); |
- GenerateKeyStringCheck(masm, a2, a0, a3, &index_string, &slow_call); |
+ __ bind(&check_name); |
+ GenerateKeyNameCheck(masm, a2, a0, a3, &index_name, &slow_call); |
- // The key is known to be internalized. |
+ // The key is known to be a unique name. |
// If the receiver is a regular JS object with slow properties then do |
// a quick inline probe of the receiver's dictionary. |
// Otherwise do the monomorphic cache probe. |
@@ -610,14 +615,14 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) { |
__ bind(&slow_call); |
// This branch is taken if: |
// - the receiver requires boxing or access check, |
- // - the key is neither smi nor an internalized string, |
+ // - the key is neither smi nor a unique name, |
// - the value loaded is not a function, |
// - there is hope that the runtime will create a monomorphic call stub, |
// that will get fetched next time. |
__ IncrementCounter(counters->keyed_call_generic_slow(), 1, a0, a3); |
GenerateMiss(masm, argc); |
- __ bind(&index_string); |
+ __ bind(&index_name); |
__ IndexFromHash(a3, a2); |
// Now jump to the place where smi keys are handled. |
__ jmp(&index_smi); |
@@ -630,10 +635,10 @@ void KeyedCallIC::GenerateNormal(MacroAssembler* masm, int argc) { |
// -- ra : return address |
// ----------------------------------- |
- // Check if the name is a string. |
+ // Check if the name is really a name. |
Label miss; |
__ JumpIfSmi(a2, &miss); |
- __ IsObjectJSStringType(a2, a0, &miss); |
+ __ IsObjectNameType(a2, a0, &miss); |
CallICBase::GenerateNormal(masm, argc); |
__ bind(&miss); |
@@ -672,7 +677,7 @@ void LoadIC::GenerateNormal(MacroAssembler* masm) { |
// ----------------------------------- |
Label miss; |
- GenerateStringDictionaryReceiverCheck(masm, a0, a1, a3, t0, &miss); |
+ GenerateNameDictionaryReceiverCheck(masm, a0, a1, a3, t0, &miss); |
// a1: elements |
GenerateDictionaryLoad(masm, &miss, a1, a2, v0, a3, t0); |
@@ -920,7 +925,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { |
// -- a0 : key |
// -- a1 : receiver |
// ----------------------------------- |
- Label slow, check_string, index_smi, index_string, property_array_property; |
+ Label slow, check_name, index_smi, index_name, property_array_property; |
Label probe_dictionary, check_number_dictionary; |
Register key = a0; |
@@ -929,7 +934,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { |
Isolate* isolate = masm->isolate(); |
// Check that the key is a smi. |
- __ JumpIfNotSmi(key, &check_string); |
+ __ JumpIfNotSmi(key, &check_name); |
__ bind(&index_smi); |
// Now the key is known to be a smi. This place is also jumped to from below |
// where a numeric string is converted to a smi. |
@@ -968,8 +973,8 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { |
a3); |
GenerateRuntimeGetProperty(masm); |
- __ bind(&check_string); |
- GenerateKeyStringCheck(masm, key, a2, a3, &index_string, &slow); |
+ __ bind(&check_name); |
+ GenerateKeyNameCheck(masm, key, a2, a3, &index_name, &slow); |
GenerateKeyedLoadReceiverCheck( |
masm, receiver, a2, a3, Map::kHasIndexedInterceptor, &slow); |
@@ -983,16 +988,16 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { |
__ Branch(&probe_dictionary, eq, t0, Operand(at)); |
// Load the map of the receiver, compute the keyed lookup cache hash |
- // based on 32 bits of the map pointer and the string hash. |
+ // based on 32 bits of the map pointer and the name hash. |
__ lw(a2, FieldMemOperand(a1, HeapObject::kMapOffset)); |
__ sra(a3, a2, KeyedLookupCache::kMapHashShift); |
- __ lw(t0, FieldMemOperand(a0, String::kHashFieldOffset)); |
- __ sra(at, t0, String::kHashShift); |
+ __ lw(t0, FieldMemOperand(a0, Name::kHashFieldOffset)); |
+ __ sra(at, t0, Name::kHashShift); |
__ xor_(a3, a3, at); |
int mask = KeyedLookupCache::kCapacityMask & KeyedLookupCache::kHashMask; |
__ And(a3, a3, Operand(mask)); |
- // Load the key (consisting of map and internalized string) from the cache and |
+ // Load the key (consisting of map and unique name) from the cache and |
// check for match. |
Label load_in_object_property; |
static const int kEntriesPerBucket = KeyedLookupCache::kEntriesPerBucket; |
@@ -1085,7 +1090,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) { |
a3); |
__ Ret(); |
- __ bind(&index_string); |
+ __ bind(&index_name); |
__ IndexFromHash(a3, key); |
// Now jump to the place where smi keys are handled. |
__ Branch(&index_smi); |
@@ -1545,7 +1550,7 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) { |
// ----------------------------------- |
Label miss; |
- GenerateStringDictionaryReceiverCheck(masm, a1, a3, t0, t1, &miss); |
+ GenerateNameDictionaryReceiverCheck(masm, a1, a3, t0, t1, &miss); |
GenerateDictionaryStore(masm, &miss, a3, a2, a0, t0, t1); |
Counters* counters = masm->isolate()->counters(); |