| Index: src/ic/mips/ic-mips.cc
|
| diff --git a/src/mips/ic-mips.cc b/src/ic/mips/ic-mips.cc
|
| similarity index 82%
|
| rename from src/mips/ic-mips.cc
|
| rename to src/ic/mips/ic-mips.cc
|
| index 1f4a7bea2dd947703e554122da56c933c6db9829..cbfbc3b3ec9513cceb579dc8caf315ff517c62e6 100644
|
| --- a/src/mips/ic-mips.cc
|
| +++ b/src/ic/mips/ic-mips.cc
|
| @@ -3,16 +3,13 @@
|
| // found in the LICENSE file.
|
|
|
|
|
| -
|
| #include "src/v8.h"
|
|
|
| #if V8_TARGET_ARCH_MIPS
|
|
|
| -#include "src/code-stubs.h"
|
| #include "src/codegen.h"
|
| -#include "src/ic-inl.h"
|
| -#include "src/runtime.h"
|
| -#include "src/stub-cache.h"
|
| +#include "src/ic/ic.h"
|
| +#include "src/ic/stub-cache.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
| @@ -25,8 +22,7 @@ namespace internal {
|
| #define __ ACCESS_MASM(masm)
|
|
|
|
|
| -static void GenerateGlobalInstanceTypeCheck(MacroAssembler* masm,
|
| - Register type,
|
| +static void GenerateGlobalInstanceTypeCheck(MacroAssembler* masm, Register type,
|
| Label* global_object) {
|
| // Register usage:
|
| // type: holds the receiver instance type on entry.
|
| @@ -51,12 +47,9 @@ static void GenerateGlobalInstanceTypeCheck(MacroAssembler* masm,
|
| // is not a global object and does not have interceptors.
|
| // The address returned from GenerateStringDictionaryProbes() in scratch2
|
| // is used.
|
| -static void GenerateDictionaryLoad(MacroAssembler* masm,
|
| - Label* miss,
|
| - Register elements,
|
| - Register name,
|
| - Register result,
|
| - Register scratch1,
|
| +static void GenerateDictionaryLoad(MacroAssembler* masm, Label* miss,
|
| + Register elements, Register name,
|
| + Register result, Register scratch1,
|
| Register scratch2) {
|
| // Main use of the scratch registers.
|
| // scratch1: Used as temporary and to hold the capacity of the property
|
| @@ -65,23 +58,18 @@ static void GenerateDictionaryLoad(MacroAssembler* masm,
|
| Label done;
|
|
|
| // Probe the dictionary.
|
| - NameDictionaryLookupStub::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 = NameDictionary::kHeaderSize +
|
| + const int kElementsStartOffset =
|
| + NameDictionary::kHeaderSize +
|
| NameDictionary::kElementsStartIndex * kPointerSize;
|
| const int kDetailsOffset = kElementsStartOffset + 2 * kPointerSize;
|
| __ lw(scratch1, FieldMemOperand(scratch2, kDetailsOffset));
|
| - __ And(at,
|
| - scratch1,
|
| + __ And(at, scratch1,
|
| Operand(PropertyDetails::TypeField::kMask << kSmiTagSize));
|
| __ Branch(miss, ne, at, Operand(zero_reg));
|
|
|
| @@ -104,12 +92,9 @@ static void GenerateDictionaryLoad(MacroAssembler* masm,
|
| // is not a global object and does not have interceptors.
|
| // The address returned from GenerateStringDictionaryProbes() in scratch2
|
| // is used.
|
| -static void GenerateDictionaryStore(MacroAssembler* masm,
|
| - Label* miss,
|
| - Register elements,
|
| - Register name,
|
| - Register value,
|
| - Register scratch1,
|
| +static void GenerateDictionaryStore(MacroAssembler* masm, Label* miss,
|
| + Register elements, Register name,
|
| + Register value, Register scratch1,
|
| Register scratch2) {
|
| // Main use of the scratch registers.
|
| // scratch1: Used as temporary and to hold the capacity of the property
|
| @@ -118,23 +103,20 @@ static void GenerateDictionaryStore(MacroAssembler* masm,
|
| Label done;
|
|
|
| // Probe the dictionary.
|
| - NameDictionaryLookupStub::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 = NameDictionary::kHeaderSize +
|
| + const int kElementsStartOffset =
|
| + NameDictionary::kHeaderSize +
|
| NameDictionary::kElementsStartIndex * kPointerSize;
|
| const int kDetailsOffset = kElementsStartOffset + 2 * kPointerSize;
|
| const int kTypeAndReadOnlyMask =
|
| (PropertyDetails::TypeField::kMask |
|
| - PropertyDetails::AttributesField::encode(READ_ONLY)) << kSmiTagSize;
|
| + PropertyDetails::AttributesField::encode(READ_ONLY))
|
| + << kSmiTagSize;
|
| __ lw(scratch1, FieldMemOperand(scratch2, kDetailsOffset));
|
| __ And(at, scratch1, Operand(kTypeAndReadOnlyMask));
|
| __ Branch(miss, ne, at, Operand(zero_reg));
|
| @@ -146,19 +128,17 @@ static void GenerateDictionaryStore(MacroAssembler* masm,
|
|
|
| // Update the write barrier. Make sure not to clobber the value.
|
| __ mov(scratch1, value);
|
| - __ RecordWrite(
|
| - elements, scratch2, scratch1, kRAHasNotBeenSaved, kDontSaveFPRegs);
|
| + __ RecordWrite(elements, scratch2, scratch1, kRAHasNotBeenSaved,
|
| + kDontSaveFPRegs);
|
| }
|
|
|
|
|
| // Checks the receiver for special cases (value type, slow case bits).
|
| // Falls through for regular JS object.
|
| static void GenerateKeyedLoadReceiverCheck(MacroAssembler* masm,
|
| - Register receiver,
|
| - Register map,
|
| + Register receiver, Register map,
|
| Register scratch,
|
| - int interceptor_bit,
|
| - Label* slow) {
|
| + int interceptor_bit, Label* slow) {
|
| // Check that the object isn't a smi.
|
| __ JumpIfSmi(receiver, slow);
|
| // Get the map of the receiver.
|
| @@ -180,14 +160,10 @@ static void GenerateKeyedLoadReceiverCheck(MacroAssembler* masm,
|
|
|
| // Loads an indexed element from a fast case array.
|
| // If not_fast_array is NULL, doesn't perform the elements map check.
|
| -static void GenerateFastArrayLoad(MacroAssembler* masm,
|
| - Register receiver,
|
| - Register key,
|
| - Register elements,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register result,
|
| - Label* not_fast_array,
|
| +static void GenerateFastArrayLoad(MacroAssembler* masm, Register receiver,
|
| + Register key, Register elements,
|
| + Register scratch1, Register scratch2,
|
| + Register result, Label* not_fast_array,
|
| Label* out_of_range) {
|
| // Register use:
|
| //
|
| @@ -244,12 +220,9 @@ static void GenerateFastArrayLoad(MacroAssembler* masm,
|
|
|
| // 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) {
|
| +static void GenerateKeyNameCheck(MacroAssembler* masm, Register key,
|
| + Register map, Register hash,
|
| + Label* index_string, Label* not_unique) {
|
| // The key is not a smi.
|
| Label unique;
|
| // Is it a name?
|
| @@ -285,8 +258,8 @@ void LoadIC::GenerateMegamorphic(MacroAssembler* masm) {
|
| // Probe the stub cache.
|
| Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
|
| Code::ComputeHandlerFlags(Code::LOAD_IC));
|
| - masm->isolate()->stub_cache()->GenerateProbe(
|
| - masm, flags, receiver, name, a3, t0, t1, t2);
|
| + masm->isolate()->stub_cache()->GenerateProbe(masm, flags, receiver, name, a3,
|
| + t0, t1, t2);
|
|
|
| // Cache miss: Jump to runtime.
|
| GenerateMiss(masm);
|
| @@ -340,14 +313,10 @@ void LoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| -static MemOperand GenerateMappedArgumentsLookup(MacroAssembler* masm,
|
| - Register object,
|
| - Register key,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register scratch3,
|
| - Label* unmapped_case,
|
| - Label* slow_case) {
|
| +static MemOperand GenerateMappedArgumentsLookup(
|
| + MacroAssembler* masm, Register object, Register key, Register scratch1,
|
| + Register scratch2, Register scratch3, Label* unmapped_case,
|
| + Label* slow_case) {
|
| Heap* heap = masm->isolate()->heap();
|
|
|
| // Check that the receiver is a JSObject. Because of the map check
|
| @@ -365,11 +334,7 @@ static MemOperand GenerateMappedArgumentsLookup(MacroAssembler* masm,
|
| // Load the elements into scratch1 and check its map.
|
| Handle<Map> arguments_map(heap->sloppy_arguments_elements_map());
|
| __ lw(scratch1, FieldMemOperand(object, JSObject::kElementsOffset));
|
| - __ CheckMap(scratch1,
|
| - scratch2,
|
| - arguments_map,
|
| - slow_case,
|
| - DONT_DO_SMI_CHECK);
|
| + __ CheckMap(scratch1, scratch2, arguments_map, slow_case, DONT_DO_SMI_CHECK);
|
| // Check if element is in the range of mapped arguments. If not, jump
|
| // to the unmapped lookup with the parameter map in scratch1.
|
| __ lw(scratch2, FieldMemOperand(scratch1, FixedArray::kLengthOffset));
|
| @@ -413,18 +378,13 @@ static MemOperand GenerateUnmappedArgumentsLookup(MacroAssembler* masm,
|
| const int kBackingStoreOffset = FixedArray::kHeaderSize + kPointerSize;
|
| Register backing_store = parameter_map;
|
| __ lw(backing_store, FieldMemOperand(parameter_map, kBackingStoreOffset));
|
| - __ CheckMap(backing_store,
|
| - scratch,
|
| - Heap::kFixedArrayMapRootIndex,
|
| - slow_case,
|
| + __ CheckMap(backing_store, scratch, Heap::kFixedArrayMapRootIndex, slow_case,
|
| DONT_DO_SMI_CHECK);
|
| __ lw(scratch, FieldMemOperand(backing_store, FixedArray::kLengthOffset));
|
| __ Branch(slow_case, Ugreater_equal, key, Operand(scratch));
|
| __ li(scratch, Operand(kPointerSize >> 1));
|
| __ Mul(scratch, key, scratch);
|
| - __ Addu(scratch,
|
| - scratch,
|
| - Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| + __ Addu(scratch, scratch, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| __ Addu(scratch, backing_store, scratch);
|
| return MemOperand(scratch);
|
| }
|
| @@ -438,9 +398,8 @@ void KeyedLoadIC::GenerateSloppyArguments(MacroAssembler* masm) {
|
| DCHECK(key.is(a2));
|
|
|
| Label slow, notin;
|
| - MemOperand mapped_location =
|
| - GenerateMappedArgumentsLookup(
|
| - masm, receiver, key, a0, a3, t0, ¬in, &slow);
|
| + MemOperand mapped_location = GenerateMappedArgumentsLookup(
|
| + masm, receiver, key, a0, a3, t0, ¬in, &slow);
|
| __ Ret(USE_DELAY_SLOT);
|
| __ lw(v0, mapped_location);
|
| __ bind(¬in);
|
| @@ -470,8 +429,8 @@ void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
|
| __ sw(value, mapped_location);
|
| __ mov(t5, value);
|
| DCHECK_EQ(mapped_location.offset(), 0);
|
| - __ RecordWrite(a3, mapped_location.rm(), t5,
|
| - kRAHasNotBeenSaved, kDontSaveFPRegs);
|
| + __ RecordWrite(a3, mapped_location.rm(), t5, kRAHasNotBeenSaved,
|
| + kDontSaveFPRegs);
|
| __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, value); // (In delay slot) return the value stored in v0.
|
| __ bind(¬in);
|
| @@ -482,8 +441,8 @@ void KeyedStoreIC::GenerateSloppyArguments(MacroAssembler* masm) {
|
| __ sw(value, unmapped_location);
|
| __ mov(t5, value);
|
| DCHECK_EQ(unmapped_location.offset(), 0);
|
| - __ RecordWrite(a3, unmapped_location.rm(), t5,
|
| - kRAHasNotBeenSaved, kDontSaveFPRegs);
|
| + __ RecordWrite(a3, unmapped_location.rm(), t5, kRAHasNotBeenSaved,
|
| + kDontSaveFPRegs);
|
| __ Ret(USE_DELAY_SLOT);
|
| __ mov(v0, a0); // (In delay slot) return the value stored in v0.
|
| __ bind(&slow);
|
| @@ -529,9 +488,7 @@ const Register StoreIC::NameRegister() { return a2; }
|
| const Register StoreIC::ValueRegister() { return a0; }
|
|
|
|
|
| -const Register KeyedStoreIC::MapRegister() {
|
| - return a3;
|
| -}
|
| +const Register KeyedStoreIC::MapRegister() { return a3; }
|
|
|
|
|
| void KeyedLoadIC::GenerateRuntimeGetProperty(MacroAssembler* masm) {
|
| @@ -561,14 +518,13 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
| // 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.
|
|
|
| - GenerateKeyedLoadReceiverCheck(
|
| - masm, receiver, a0, a3, Map::kHasIndexedInterceptor, &slow);
|
| + GenerateKeyedLoadReceiverCheck(masm, receiver, a0, a3,
|
| + Map::kHasIndexedInterceptor, &slow);
|
|
|
| // 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, NULL, &slow);
|
| + GenerateFastArrayLoad(masm, receiver, key, a0, a3, t0, v0, NULL, &slow);
|
| __ IncrementCounter(isolate->counters()->keyed_load_generic_smi(), 1, t0, a3);
|
| __ Ret();
|
|
|
| @@ -587,17 +543,15 @@ void KeyedLoadIC::GenerateGeneric(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()->keyed_load_generic_slow(), 1, t0,
|
| a3);
|
| GenerateRuntimeGetProperty(masm);
|
|
|
| __ bind(&check_name);
|
| GenerateKeyNameCheck(masm, key, a0, a3, &index_name, &slow);
|
|
|
| - GenerateKeyedLoadReceiverCheck(
|
| - masm, receiver, a0, a3, Map::kHasNamedInterceptor, &slow);
|
| + GenerateKeyedLoadReceiverCheck(masm, receiver, a0, a3,
|
| + Map::kHasNamedInterceptor, &slow);
|
|
|
|
|
| // If the receiver is a fast-case object, check the keyed lookup
|
| @@ -671,10 +625,8 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
| __ sll(at, t2, kPointerSizeLog2);
|
| __ addu(at, receiver, at);
|
| __ lw(v0, MemOperand(at));
|
| - __ IncrementCounter(isolate->counters()->keyed_load_generic_lookup_cache(),
|
| - 1,
|
| - t0,
|
| - a3);
|
| + __ IncrementCounter(isolate->counters()->keyed_load_generic_lookup_cache(), 1,
|
| + t0, a3);
|
| __ Ret();
|
|
|
| // Load property array property.
|
| @@ -684,10 +636,8 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
| __ sll(v0, t1, kPointerSizeLog2);
|
| __ Addu(v0, v0, receiver);
|
| __ lw(v0, MemOperand(v0));
|
| - __ IncrementCounter(isolate->counters()->keyed_load_generic_lookup_cache(),
|
| - 1,
|
| - t0,
|
| - a3);
|
| + __ IncrementCounter(isolate->counters()->keyed_load_generic_lookup_cache(), 1,
|
| + t0, a3);
|
| __ Ret();
|
|
|
|
|
| @@ -700,9 +650,7 @@ void KeyedLoadIC::GenerateGeneric(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,
|
| + __ IncrementCounter(isolate->counters()->keyed_load_generic_symbol(), 1, t0,
|
| a3);
|
| __ Ret();
|
|
|
| @@ -723,10 +671,7 @@ void KeyedLoadIC::GenerateString(MacroAssembler* masm) {
|
| Register result = v0;
|
| DCHECK(!scratch.is(receiver) && !scratch.is(index));
|
|
|
| - StringCharAtGenerator char_at_generator(receiver,
|
| - index,
|
| - scratch,
|
| - result,
|
| + StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
|
| &miss, // When not a string.
|
| &miss, // When not a number.
|
| &miss, // When index out of range.
|
| @@ -746,7 +691,7 @@ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
|
| StrictMode strict_mode) {
|
| // Push receiver, key and value for runtime call.
|
| __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
|
| - __ li(a0, Operand(Smi::FromInt(strict_mode))); // Strict mode.
|
| + __ li(a0, Operand(Smi::FromInt(strict_mode))); // Strict mode.
|
| __ Push(a0);
|
|
|
| __ TailCallRuntime(Runtime::kSetProperty, 4, 1);
|
| @@ -754,18 +699,10 @@ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm,
|
|
|
|
|
| static void KeyedStoreGenerateGenericHelper(
|
| - MacroAssembler* masm,
|
| - Label* fast_object,
|
| - Label* fast_double,
|
| - Label* slow,
|
| - KeyedStoreCheckMap check_map,
|
| - KeyedStoreIncrementLength increment_length,
|
| - Register value,
|
| - Register key,
|
| - Register receiver,
|
| - Register receiver_map,
|
| - Register elements_map,
|
| - Register elements) {
|
| + MacroAssembler* masm, Label* fast_object, Label* fast_double, Label* slow,
|
| + KeyedStoreCheckMap check_map, KeyedStoreIncrementLength increment_length,
|
| + Register value, Register key, Register receiver, Register receiver_map,
|
| + Register elements_map, Register elements) {
|
| Label transition_smi_elements;
|
| Label finish_object_store, non_double_value, transition_double_elements;
|
| Label fast_double_without_map_check;
|
| @@ -829,13 +766,8 @@ static void KeyedStoreGenerateGenericHelper(
|
| __ sw(value, MemOperand(address));
|
| // Update write barrier for the elements array address.
|
| __ mov(scratch_value, value); // Preserve the value which is returned.
|
| - __ RecordWrite(elements,
|
| - address,
|
| - scratch_value,
|
| - kRAHasNotBeenSaved,
|
| - kDontSaveFPRegs,
|
| - EMIT_REMEMBERED_SET,
|
| - OMIT_SMI_CHECK);
|
| + __ RecordWrite(elements, address, scratch_value, kRAHasNotBeenSaved,
|
| + kDontSaveFPRegs, EMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
|
| __ Ret();
|
|
|
| __ bind(fast_double);
|
| @@ -849,9 +781,8 @@ static void KeyedStoreGenerateGenericHelper(
|
| // HOLECHECK: guards "A[i] double hole?"
|
| // We have to see if the double version of the hole is present. If so
|
| // go to the runtime.
|
| - __ Addu(address, elements,
|
| - Operand(FixedDoubleArray::kHeaderSize + kHoleNanUpper32Offset
|
| - - kHeapObjectTag));
|
| + __ Addu(address, elements, Operand(FixedDoubleArray::kHeaderSize +
|
| + kHoleNanUpper32Offset - kHeapObjectTag));
|
| __ sll(at, key, kPointerSizeLog2);
|
| __ addu(address, address, at);
|
| __ lw(scratch_value, MemOperand(address));
|
| @@ -861,13 +792,10 @@ static void KeyedStoreGenerateGenericHelper(
|
| slow);
|
|
|
| __ bind(&fast_double_without_map_check);
|
| - __ StoreNumberToDoubleElements(value,
|
| - key,
|
| + __ StoreNumberToDoubleElements(value, key,
|
| elements, // Overwritten.
|
| a3, // Scratch regs...
|
| - t0,
|
| - t1,
|
| - &transition_double_elements);
|
| + t0, t1, &transition_double_elements);
|
| if (increment_length == kIncrementLength) {
|
| // Add 1 to receiver->length.
|
| __ Addu(scratch_value, key, Operand(Smi::FromInt(1)));
|
| @@ -883,25 +811,19 @@ static void KeyedStoreGenerateGenericHelper(
|
|
|
| // Value is a double. Transition FAST_SMI_ELEMENTS ->
|
| // FAST_DOUBLE_ELEMENTS and complete the store.
|
| - __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
|
| - FAST_DOUBLE_ELEMENTS,
|
| - receiver_map,
|
| - t0,
|
| - slow);
|
| - AllocationSiteMode mode = AllocationSite::GetMode(FAST_SMI_ELEMENTS,
|
| - FAST_DOUBLE_ELEMENTS);
|
| - ElementsTransitionGenerator::GenerateSmiToDouble(
|
| - masm, receiver, key, value, receiver_map, mode, slow);
|
| + __ LoadTransitionedArrayMapConditional(
|
| + FAST_SMI_ELEMENTS, FAST_DOUBLE_ELEMENTS, receiver_map, t0, slow);
|
| + AllocationSiteMode mode =
|
| + AllocationSite::GetMode(FAST_SMI_ELEMENTS, FAST_DOUBLE_ELEMENTS);
|
| + ElementsTransitionGenerator::GenerateSmiToDouble(masm, receiver, key, value,
|
| + receiver_map, mode, slow);
|
| __ lw(elements, FieldMemOperand(receiver, JSObject::kElementsOffset));
|
| __ jmp(&fast_double_without_map_check);
|
|
|
| __ bind(&non_double_value);
|
| // Value is not a double, FAST_SMI_ELEMENTS -> FAST_ELEMENTS
|
| - __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
|
| - FAST_ELEMENTS,
|
| - receiver_map,
|
| - t0,
|
| - slow);
|
| + __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS, FAST_ELEMENTS,
|
| + receiver_map, t0, slow);
|
| mode = AllocationSite::GetMode(FAST_SMI_ELEMENTS, FAST_ELEMENTS);
|
| ElementsTransitionGenerator::GenerateMapChangeElementsTransition(
|
| masm, receiver, key, value, receiver_map, mode, slow);
|
| @@ -912,11 +834,8 @@ static void KeyedStoreGenerateGenericHelper(
|
| // Elements are FAST_DOUBLE_ELEMENTS, but value is an Object that's not a
|
| // HeapNumber. Make sure that the receiver is a Array with FAST_ELEMENTS and
|
| // transition array from FAST_DOUBLE_ELEMENTS to FAST_ELEMENTS
|
| - __ LoadTransitionedArrayMapConditional(FAST_DOUBLE_ELEMENTS,
|
| - FAST_ELEMENTS,
|
| - receiver_map,
|
| - t0,
|
| - slow);
|
| + __ LoadTransitionedArrayMapConditional(FAST_DOUBLE_ELEMENTS, FAST_ELEMENTS,
|
| + receiver_map, t0, slow);
|
| mode = AllocationSite::GetMode(FAST_DOUBLE_ELEMENTS, FAST_ELEMENTS);
|
| ElementsTransitionGenerator::GenerateDoubleToObject(
|
| masm, receiver, key, value, receiver_map, mode, slow);
|
| @@ -956,8 +875,8 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
| // Check that the receiver does not require access checks and is not observed.
|
| // The generic stub does not perform map checks or handle observed objects.
|
| __ lbu(t0, FieldMemOperand(receiver_map, Map::kBitFieldOffset));
|
| - __ And(t0, t0, Operand(1 << Map::kIsAccessCheckNeeded |
|
| - 1 << Map::kIsObserved));
|
| + __ And(t0, t0,
|
| + Operand(1 << Map::kIsAccessCheckNeeded | 1 << Map::kIsObserved));
|
| __ Branch(&slow, ne, t0, Operand(zero_reg));
|
| // Check if the object is a JS array or not.
|
| __ lbu(t0, FieldMemOperand(receiver_map, Map::kInstanceTypeOffset));
|
| @@ -991,8 +910,8 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
| __ lw(t0, FieldMemOperand(elements, FixedArray::kLengthOffset));
|
| __ Branch(&slow, hs, key, Operand(t0));
|
| __ lw(elements_map, FieldMemOperand(elements, HeapObject::kMapOffset));
|
| - __ Branch(
|
| - &check_if_double_array, ne, elements_map, Heap::kFixedArrayMapRootIndex);
|
| + __ Branch(&check_if_double_array, ne, elements_map,
|
| + Heap::kFixedArrayMapRootIndex);
|
|
|
| __ jmp(&fast_object_grow);
|
|
|
| @@ -1010,14 +929,13 @@ void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm,
|
| __ lw(t0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| __ Branch(&extra, hs, key, Operand(t0));
|
|
|
| - KeyedStoreGenerateGenericHelper(masm, &fast_object, &fast_double,
|
| - &slow, kCheckMap, kDontIncrementLength,
|
| - value, key, receiver, receiver_map,
|
| - elements_map, elements);
|
| + KeyedStoreGenerateGenericHelper(
|
| + masm, &fast_object, &fast_double, &slow, kCheckMap, kDontIncrementLength,
|
| + value, key, receiver, receiver_map, elements_map, elements);
|
| KeyedStoreGenerateGenericHelper(masm, &fast_object_grow, &fast_double_grow,
|
| - &slow, kDontCheckMap, kIncrementLength,
|
| - value, key, receiver, receiver_map,
|
| - elements_map, elements);
|
| + &slow, kDontCheckMap, kIncrementLength, value,
|
| + key, receiver, receiver_map, elements_map,
|
| + elements);
|
| }
|
|
|
|
|
| @@ -1051,8 +969,10 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
|
| __ Push(receiver, key); // Receiver, key.
|
|
|
| // Perform tail call to the entry.
|
| - __ TailCallExternalReference(ExternalReference(
|
| - IC_Utility(kLoadElementWithInterceptor), masm->isolate()), 2, 1);
|
| + __ TailCallExternalReference(
|
| + ExternalReference(IC_Utility(kLoadElementWithInterceptor),
|
| + masm->isolate()),
|
| + 2, 1);
|
|
|
| __ bind(&slow);
|
| GenerateMiss(masm);
|
| @@ -1105,8 +1025,8 @@ void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
| // Get the receiver from the stack and probe the stub cache.
|
| Code::Flags flags = Code::RemoveTypeAndHolderFromFlags(
|
| Code::ComputeHandlerFlags(Code::STORE_IC));
|
| - masm->isolate()->stub_cache()->GenerateProbe(
|
| - masm, flags, receiver, name, a3, t0, t1, t2);
|
| + masm->isolate()->stub_cache()->GenerateProbe(masm, flags, receiver, name, a3,
|
| + t0, t1, t2);
|
|
|
| // Cache miss: Jump to runtime.
|
| GenerateMiss(masm);
|
| @@ -1116,8 +1036,8 @@ void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
| void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
| __ Push(ReceiverRegister(), NameRegister(), ValueRegister());
|
| // Perform tail call to the entry.
|
| - ExternalReference ref = ExternalReference(IC_Utility(kStoreIC_Miss),
|
| - masm->isolate());
|
| + ExternalReference ref =
|
| + ExternalReference(IC_Utility(kStoreIC_Miss), masm->isolate());
|
| __ TailCallExternalReference(ref, 3, 1);
|
| }
|
|
|
| @@ -1189,7 +1109,7 @@ bool CompareIC::HasInlinedSmiCode(Address address) {
|
| // was inlined.
|
| Instr instr = Assembler::instr_at(andi_instruction_address);
|
| return Assembler::IsAndImmediate(instr) &&
|
| - Assembler::GetRt(instr) == static_cast<uint32_t>(zero_reg.code());
|
| + Assembler::GetRt(instr) == static_cast<uint32_t>(zero_reg.code());
|
| }
|
|
|
|
|
| @@ -1216,8 +1136,8 @@ void PatchInlinedSmiCode(Address address, InlinedSmiCheck check) {
|
| }
|
|
|
| if (FLAG_trace_ic) {
|
| - PrintF("[ patching ic at %p, andi=%p, delta=%d\n",
|
| - address, andi_instruction_address, delta);
|
| + PrintF("[ patching ic at %p, andi=%p, delta=%d\n", address,
|
| + andi_instruction_address, delta);
|
| }
|
|
|
| Address patch_address =
|
| @@ -1252,8 +1172,7 @@ void PatchInlinedSmiCode(Address address, InlinedSmiCheck check) {
|
| patcher.ChangeBranchCondition(eq);
|
| }
|
| }
|
| -
|
| -
|
| -} } // namespace v8::internal
|
| +}
|
| +} // namespace v8::internal
|
|
|
| #endif // V8_TARGET_ARCH_MIPS
|
|
|