diff options
Diffstat (limited to 'deps/v8/src/ic/mips/ic-mips.cc')
-rw-r--r-- | deps/v8/src/ic/mips/ic-mips.cc | 72 |
1 files changed, 26 insertions, 46 deletions
diff --git a/deps/v8/src/ic/mips/ic-mips.cc b/deps/v8/src/ic/mips/ic-mips.cc index a27d6b56f7..ae3615e3bb 100644 --- a/deps/v8/src/ic/mips/ic-mips.cc +++ b/deps/v8/src/ic/mips/ic-mips.cc @@ -159,8 +159,7 @@ static void GenerateKeyedLoadReceiverCheck(MacroAssembler* masm, static void GenerateFastArrayLoad(MacroAssembler* masm, Register receiver, Register key, Register elements, Register scratch1, Register scratch2, - Register result, Label* slow, - LanguageMode language_mode) { + Register result, Label* slow) { // Register use: // // receiver - holds the receiver on entry. @@ -216,13 +215,8 @@ static void GenerateFastArrayLoad(MacroAssembler* masm, Register receiver, __ Branch(&check_next_prototype); __ bind(&absent); - if (is_strong(language_mode)) { - // Strong mode accesses must throw in this case, so call the runtime. - __ Branch(slow); - } else { - __ LoadRoot(result, Heap::kUndefinedValueRootIndex); - __ Branch(&done); - } + __ LoadRoot(result, Heap::kUndefinedValueRootIndex); + __ Branch(&done); __ bind(&in_bounds); // Fast case: Do the load. @@ -230,8 +224,7 @@ static void GenerateFastArrayLoad(MacroAssembler* masm, Register receiver, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); // The key is a smi. STATIC_ASSERT(kSmiTag == 0 && kSmiTagSize < kPointerSizeLog2); - __ sll(at, key, kPointerSizeLog2 - kSmiTagSize); - __ addu(at, at, scratch1); + __ Lsa(at, scratch1, key, kPointerSizeLog2 - kSmiTagSize); __ lw(scratch2, MemOperand(at)); __ LoadRoot(at, Heap::kTheHoleValueRootIndex); @@ -271,8 +264,7 @@ static void GenerateKeyNameCheck(MacroAssembler* masm, Register key, __ bind(&unique); } - -void LoadIC::GenerateNormal(MacroAssembler* masm, LanguageMode language_mode) { +void LoadIC::GenerateNormal(MacroAssembler* masm) { Register dictionary = a0; DCHECK(!dictionary.is(LoadDescriptor::ReceiverRegister())); DCHECK(!dictionary.is(LoadDescriptor::NameRegister())); @@ -287,7 +279,7 @@ void LoadIC::GenerateNormal(MacroAssembler* masm, LanguageMode language_mode) { // Dictionary load failed, go slow (but don't miss). __ bind(&slow); - GenerateRuntimeGetProperty(masm, language_mode); + GenerateRuntimeGetProperty(masm); } @@ -311,7 +303,7 @@ void LoadIC::GenerateMiss(MacroAssembler* masm) { DCHECK(!AreAliased(t0, t1, LoadWithVectorDescriptor::SlotRegister(), LoadWithVectorDescriptor::VectorRegister())); - __ IncrementCounter(isolate->counters()->load_miss(), 1, t0, t1); + __ IncrementCounter(isolate->counters()->ic_load_miss(), 1, t0, t1); LoadIC_PushArgs(masm); @@ -319,17 +311,14 @@ void LoadIC::GenerateMiss(MacroAssembler* masm) { __ TailCallRuntime(Runtime::kLoadIC_Miss); } - -void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, - LanguageMode language_mode) { +void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { // The return address is in ra. __ mov(LoadIC_TempRegister(), LoadDescriptor::ReceiverRegister()); __ Push(LoadIC_TempRegister(), LoadDescriptor::NameRegister()); // Do tail-call to runtime routine. - __ TailCallRuntime(is_strong(language_mode) ? Runtime::kGetPropertyStrong - : Runtime::kGetProperty); + __ TailCallRuntime(Runtime::kGetProperty); } @@ -339,7 +328,7 @@ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { DCHECK(!AreAliased(t0, t1, LoadWithVectorDescriptor::SlotRegister(), LoadWithVectorDescriptor::VectorRegister())); - __ IncrementCounter(isolate->counters()->keyed_load_miss(), 1, t0, t1); + __ IncrementCounter(isolate->counters()->ic_keyed_load_miss(), 1, t0, t1); LoadIC_PushArgs(masm); @@ -347,21 +336,16 @@ void KeyedLoadIC::GenerateMiss(MacroAssembler* masm) { __ TailCallRuntime(Runtime::kKeyedLoadIC_Miss); } - -void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm, - LanguageMode language_mode) { +void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) { // The return address is in ra. __ Push(LoadDescriptor::ReceiverRegister(), LoadDescriptor::NameRegister()); // Do tail-call to runtime routine. - __ TailCallRuntime(is_strong(language_mode) ? Runtime::kKeyedGetPropertyStrong - : Runtime::kKeyedGetProperty); + __ TailCallRuntime(Runtime::kKeyedGetProperty); } - -void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm, - LanguageMode language_mode) { +void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm) { // The return address is in ra. Label slow, check_name, index_smi, index_name, property_array_property; Label probe_dictionary, check_number_dictionary; @@ -385,9 +369,9 @@ void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm, // Check the receiver's map to see if it has fast elements. __ CheckFastElements(a0, a3, &check_number_dictionary); - GenerateFastArrayLoad(masm, receiver, key, a0, a3, t0, v0, &slow, - language_mode); - __ IncrementCounter(isolate->counters()->keyed_load_generic_smi(), 1, t0, a3); + GenerateFastArrayLoad(masm, receiver, key, a0, a3, t0, v0, &slow); + __ IncrementCounter(isolate->counters()->ic_keyed_load_generic_smi(), 1, t0, + a3); __ Ret(); __ bind(&check_number_dictionary); @@ -405,9 +389,9 @@ void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm, // Slow case, key and receiver still in a2 and a1. __ bind(&slow); - __ IncrementCounter(isolate->counters()->keyed_load_generic_slow(), 1, t0, + __ IncrementCounter(isolate->counters()->ic_keyed_load_generic_slow(), 1, t0, a3); - GenerateRuntimeGetProperty(masm, language_mode); + GenerateRuntimeGetProperty(masm); __ bind(&check_name); GenerateKeyNameCheck(masm, key, a0, a3, &index_name, &slow); @@ -451,8 +435,8 @@ void KeyedLoadIC::GenerateMegamorphic(MacroAssembler* masm, GenerateGlobalInstanceTypeCheck(masm, a0, &slow); // Load the property to v0. GenerateDictionaryLoad(masm, &slow, a3, key, v0, t1, t0); - __ IncrementCounter(isolate->counters()->keyed_load_generic_symbol(), 1, t0, - a3); + __ IncrementCounter(isolate->counters()->ic_keyed_load_generic_symbol(), 1, + t0, a3); __ Ret(); __ bind(&index_name); @@ -491,8 +475,7 @@ static void KeyedStoreGenerateMegamorphicHelper( // there may be a callback on the element. Label holecheck_passed1; __ Addu(address, elements, FixedArray::kHeaderSize - kHeapObjectTag); - __ sll(at, key, kPointerSizeLog2 - kSmiTagSize); - __ addu(address, address, at); + __ Lsa(address, address, key, kPointerSizeLog2 - kSmiTagSize); __ lw(scratch, MemOperand(address)); __ Branch(&holecheck_passed1, ne, scratch, Operand(masm->isolate()->factory()->the_hole_value())); @@ -511,8 +494,7 @@ static void KeyedStoreGenerateMegamorphicHelper( } // It's irrelevant whether array is smi-only or not when writing a smi. __ Addu(address, elements, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); - __ sll(scratch, key, kPointerSizeLog2 - kSmiTagSize); - __ Addu(address, address, scratch); + __ Lsa(address, address, key, kPointerSizeLog2 - kSmiTagSize); __ sw(value, MemOperand(address)); __ Ret(); @@ -528,8 +510,7 @@ static void KeyedStoreGenerateMegamorphicHelper( __ sw(scratch, FieldMemOperand(receiver, JSArray::kLengthOffset)); } __ Addu(address, elements, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); - __ sll(scratch, key, kPointerSizeLog2 - kSmiTagSize); - __ Addu(address, address, scratch); + __ Lsa(address, address, key, kPointerSizeLog2 - kSmiTagSize); __ sw(value, MemOperand(address)); // Update write barrier for the elements array address. __ mov(scratch, value); // Preserve the value which is returned. @@ -550,8 +531,7 @@ static void KeyedStoreGenerateMegamorphicHelper( // go to the runtime. __ Addu(address, elements, Operand(FixedDoubleArray::kHeaderSize + kHoleNanUpper32Offset - kHeapObjectTag)); - __ sll(at, key, kPointerSizeLog2); - __ addu(address, address, at); + __ Lsa(address, address, key, kPointerSizeLog2); __ lw(scratch, MemOperand(address)); __ Branch(&fast_double_without_map_check, ne, scratch, Operand(kHoleNanUpper32)); @@ -791,11 +771,11 @@ void StoreIC::GenerateNormal(MacroAssembler* masm) { GenerateDictionaryStore(masm, &miss, dictionary, name, value, t2, t5); Counters* counters = masm->isolate()->counters(); - __ IncrementCounter(counters->store_normal_hit(), 1, t2, t5); + __ IncrementCounter(counters->ic_store_normal_hit(), 1, t2, t5); __ Ret(); __ bind(&miss); - __ IncrementCounter(counters->store_normal_miss(), 1, t2, t5); + __ IncrementCounter(counters->ic_store_normal_miss(), 1, t2, t5); GenerateMiss(masm); } |