diff options
Diffstat (limited to 'deps/v8/src/crankshaft/mips/lithium-mips.cc')
-rw-r--r-- | deps/v8/src/crankshaft/mips/lithium-mips.cc | 102 |
1 files changed, 38 insertions, 64 deletions
diff --git a/deps/v8/src/crankshaft/mips/lithium-mips.cc b/deps/v8/src/crankshaft/mips/lithium-mips.cc index 71c34df516..a7880eee87 100644 --- a/deps/v8/src/crankshaft/mips/lithium-mips.cc +++ b/deps/v8/src/crankshaft/mips/lithium-mips.cc @@ -887,7 +887,7 @@ void LChunkBuilder::AddInstruction(LInstruction* instr, LInstruction* LChunkBuilder::DoPrologue(HPrologue* instr) { LInstruction* result = new (zone()) LPrologue(); - if (info_->num_heap_slots() > 0) { + if (info_->scope()->num_heap_slots() > 0) { result = MarkAsCall(result, instr); } return result; @@ -939,17 +939,6 @@ LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) { } -LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) { - LOperand* left = - UseFixed(instr->left(), InstanceOfDescriptor::LeftRegister()); - LOperand* right = - UseFixed(instr->right(), InstanceOfDescriptor::RightRegister()); - LOperand* context = UseFixed(instr->context(), cp); - LInstanceOf* result = new (zone()) LInstanceOf(context, left, right); - return MarkAsCall(DefineFixed(result, v0), instr); -} - - LInstruction* LChunkBuilder::DoHasInPrototypeChainAndBranch( HHasInPrototypeChainAndBranch* instr) { LOperand* object = UseRegister(instr->object()); @@ -1085,6 +1074,10 @@ LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) { return DoMathAbs(instr); case kMathLog: return DoMathLog(instr); + case kMathCos: + return DoMathCos(instr); + case kMathSin: + return DoMathSin(instr); case kMathExp: return DoMathExp(instr); case kMathSqrt: @@ -1114,16 +1107,25 @@ LInstruction* LChunkBuilder::DoMathClz32(HUnaryMathOperation* instr) { return DefineAsRegister(result); } +LInstruction* LChunkBuilder::DoMathCos(HUnaryMathOperation* instr) { + DCHECK(instr->representation().IsDouble()); + DCHECK(instr->value()->representation().IsDouble()); + LOperand* input = UseFixedDouble(instr->value(), f4); + return MarkAsCall(DefineFixedDouble(new (zone()) LMathCos(input), f4), instr); +} + +LInstruction* LChunkBuilder::DoMathSin(HUnaryMathOperation* instr) { + DCHECK(instr->representation().IsDouble()); + DCHECK(instr->value()->representation().IsDouble()); + LOperand* input = UseFixedDouble(instr->value(), f4); + return MarkAsCall(DefineFixedDouble(new (zone()) LMathSin(input), f4), instr); +} LInstruction* LChunkBuilder::DoMathExp(HUnaryMathOperation* instr) { DCHECK(instr->representation().IsDouble()); DCHECK(instr->value()->representation().IsDouble()); - LOperand* input = UseRegister(instr->value()); - LOperand* temp1 = TempRegister(); - LOperand* temp2 = TempRegister(); - LOperand* double_temp = TempDoubleRegister(); - LMathExp* result = new(zone()) LMathExp(input, double_temp, temp1, temp2); - return DefineAsRegister(result); + LOperand* input = UseFixedDouble(instr->value(), f4); + return MarkAsCall(DefineFixedDouble(new (zone()) LMathExp(input), f4), instr); } @@ -1925,20 +1927,6 @@ LInstruction* LChunkBuilder::DoClampToUint8(HClampToUint8* instr) { } -LInstruction* LChunkBuilder::DoDoubleBits(HDoubleBits* instr) { - HValue* value = instr->value(); - DCHECK(value->representation().IsDouble()); - return DefineAsRegister(new(zone()) LDoubleBits(UseRegister(value))); -} - - -LInstruction* LChunkBuilder::DoConstructDouble(HConstructDouble* instr) { - LOperand* lo = UseRegister(instr->lo()); - LOperand* hi = UseRegister(instr->hi()); - return DefineAsRegister(new(zone()) LConstructDouble(hi, lo)); -} - - LInstruction* LChunkBuilder::DoReturn(HReturn* instr) { LOperand* context = info()->IsStub() ? UseFixed(instr->context(), cp) @@ -1970,14 +1958,9 @@ LInstruction* LChunkBuilder::DoConstant(HConstant* instr) { LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { LOperand* context = UseFixed(instr->context(), cp); - LOperand* global_object = - UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); - LOperand* vector = NULL; - if (instr->HasVectorAndSlot()) { - vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); - } - LLoadGlobalGeneric* result = - new(zone()) LLoadGlobalGeneric(context, global_object, vector); + LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); + + LLoadGlobalGeneric* result = new (zone()) LLoadGlobalGeneric(context, vector); return MarkAsCall(DefineFixed(result, v0), instr); } @@ -2021,10 +2004,7 @@ LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { LOperand* context = UseFixed(instr->context(), cp); LOperand* object = UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); - LOperand* vector = NULL; - if (instr->HasVectorAndSlot()) { - vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); - } + LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); LInstruction* result = DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), v0); @@ -2096,10 +2076,7 @@ LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { LOperand* object = UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); - LOperand* vector = NULL; - if (instr->HasVectorAndSlot()) { - vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); - } + LOperand* vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); LInstruction* result = DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), @@ -2161,12 +2138,8 @@ LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { DCHECK(instr->key()->representation().IsTagged()); DCHECK(instr->value()->representation().IsTagged()); - LOperand* slot = NULL; - LOperand* vector = NULL; - if (instr->HasVectorAndSlot()) { - slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); - vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); - } + LOperand* slot = FixedTemp(StoreWithVectorDescriptor::SlotRegister()); + LOperand* vector = FixedTemp(StoreWithVectorDescriptor::VectorRegister()); LStoreKeyedGeneric* result = new (zone()) LStoreKeyedGeneric(context, obj, key, val, slot, vector); @@ -2255,12 +2228,8 @@ LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { LOperand* obj = UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); LOperand* val = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); - LOperand* slot = NULL; - LOperand* vector = NULL; - if (instr->HasVectorAndSlot()) { - slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); - vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); - } + LOperand* slot = FixedTemp(StoreWithVectorDescriptor::SlotRegister()); + LOperand* vector = FixedTemp(StoreWithVectorDescriptor::VectorRegister()); LStoreNamedGeneric* result = new (zone()) LStoreNamedGeneric(context, obj, val, slot, vector); @@ -2298,13 +2267,18 @@ LInstruction* LChunkBuilder::DoStringCharFromCode(HStringCharFromCode* instr) { LInstruction* LChunkBuilder::DoAllocate(HAllocate* instr) { - info()->MarkAsDeferredCalling(); - LOperand* context = UseAny(instr->context()); LOperand* size = UseRegisterOrConstant(instr->size()); LOperand* temp1 = TempRegister(); LOperand* temp2 = TempRegister(); - LAllocate* result = new(zone()) LAllocate(context, size, temp1, temp2); - return AssignPointerMap(DefineAsRegister(result)); + if (instr->IsAllocationFolded()) { + LFastAllocate* result = new (zone()) LFastAllocate(size, temp1, temp2); + return DefineAsRegister(result); + } else { + info()->MarkAsDeferredCalling(); + LOperand* context = UseAny(instr->context()); + LAllocate* result = new (zone()) LAllocate(context, size, temp1, temp2); + return AssignPointerMap(DefineAsRegister(result)); + } } |