Chromium Code Reviews| Index: src/x64/lithium-x64.cc |
| diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc |
| index 974a97017cbcbec11338feaf1b5523bb56ee40fb..f3c4e94f31439b1e32dea5f0bf06b533bc2a8565 100644 |
| --- a/src/x64/lithium-x64.cc |
| +++ b/src/x64/lithium-x64.cc |
| @@ -280,7 +280,20 @@ void LInnerAllocatedObject::PrintDataTo(StringStream* stream) { |
| } |
| -void LCallConstantFunction::PrintDataTo(StringStream* stream) { |
| +void LCallJSFunction::PrintDataTo(StringStream* stream) { |
| + stream->Add("= "); |
| + function()->PrintTo(stream); |
| + stream->Add(" "); |
| + call_kind()->PrintTo(stream); |
| + stream->Add("#%d / ", arity()); |
| +} |
| + |
| + |
| +void LCallWithDescriptor::PrintDataTo(StringStream* stream) { |
| + for (int i = 0; i < InputCount(); i++) { |
| + InputAt(i)->PrintTo(stream); |
| + stream->Add(" "); |
| + } |
| stream->Add("#%d / ", arity()); |
| } |
| @@ -305,28 +318,12 @@ void LInvokeFunction::PrintDataTo(StringStream* stream) { |
| } |
| -void LCallKeyed::PrintDataTo(StringStream* stream) { |
| - stream->Add("[rcx] #%d / ", arity()); |
| -} |
| - |
| - |
| -void LCallNamed::PrintDataTo(StringStream* stream) { |
| - SmartArrayPointer<char> name_string = name()->ToCString(); |
| - stream->Add("%s #%d / ", name_string.get(), arity()); |
| -} |
| - |
| - |
| void LCallGlobal::PrintDataTo(StringStream* stream) { |
| SmartArrayPointer<char> name_string = name()->ToCString(); |
| stream->Add("%s #%d / ", name_string.get(), arity()); |
| } |
| -void LCallKnownGlobal::PrintDataTo(StringStream* stream) { |
| - stream->Add("#%d / ", arity()); |
| -} |
| - |
| - |
| void LCallNew::PrintDataTo(StringStream* stream) { |
| stream->Add("= "); |
| constructor()->PrintTo(stream); |
| @@ -569,8 +566,7 @@ LOperand* LChunkBuilder::Use(HValue* value, LUnallocated* operand) { |
| } |
| -template<int I, int T> |
| -LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr, |
| +LInstruction* LChunkBuilder::Define(LTemplateResultInstruction<1>* instr, |
| LUnallocated* result) { |
| result->set_virtual_register(current_instruction_->id()); |
| instr->set_result(result); |
| @@ -578,41 +574,36 @@ LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr, |
| } |
| -template<int I, int T> |
| LInstruction* LChunkBuilder::DefineAsRegister( |
| - LTemplateInstruction<1, I, T>* instr) { |
| + LTemplateResultInstruction<1>* instr) { |
| return Define(instr, |
| new(zone()) LUnallocated(LUnallocated::MUST_HAVE_REGISTER)); |
| } |
| -template<int I, int T> |
| LInstruction* LChunkBuilder::DefineAsSpilled( |
| - LTemplateInstruction<1, I, T>* instr, |
| + LTemplateResultInstruction<1>* instr, |
| int index) { |
| return Define(instr, |
| new(zone()) LUnallocated(LUnallocated::FIXED_SLOT, index)); |
| } |
| -template<int I, int T> |
| LInstruction* LChunkBuilder::DefineSameAsFirst( |
| - LTemplateInstruction<1, I, T>* instr) { |
| + LTemplateResultInstruction<1>* instr) { |
| return Define(instr, |
| new(zone()) LUnallocated(LUnallocated::SAME_AS_FIRST_INPUT)); |
| } |
| -template<int I, int T> |
| -LInstruction* LChunkBuilder::DefineFixed(LTemplateInstruction<1, I, T>* instr, |
| +LInstruction* LChunkBuilder::DefineFixed(LTemplateResultInstruction<1>* instr, |
| Register reg) { |
| return Define(instr, ToUnallocated(reg)); |
| } |
| -template<int I, int T> |
| LInstruction* LChunkBuilder::DefineFixedDouble( |
| - LTemplateInstruction<1, I, T>* instr, |
| + LTemplateResultInstruction<1>* instr, |
| XMMRegister reg) { |
| return Define(instr, ToUnallocated(reg)); |
| } |
| @@ -1167,9 +1158,33 @@ LInstruction* LChunkBuilder::DoGlobalReceiver(HGlobalReceiver* instr) { |
| } |
| -LInstruction* LChunkBuilder::DoCallConstantFunction( |
| - HCallConstantFunction* instr) { |
| - return MarkAsCall(DefineFixed(new(zone()) LCallConstantFunction, rax), instr); |
| +LInstruction* LChunkBuilder::DoCallJSFunction( |
| + HCallJSFunction* instr) { |
| + LOperand* function = UseFixed(instr->function(), rdi); |
| + LOperand* call_kind = UseFixed(instr->call_kind(), rcx); |
| + |
| + LCallJSFunction* result = new(zone()) LCallJSFunction(function, call_kind); |
| + |
| + return MarkAsCall(DefineFixed(result, rax), instr); |
| +} |
| + |
| + |
| +LInstruction* LChunkBuilder::DoCallWithDescriptor( |
| + HCallWithDescriptor* instr) { |
| + const CodeStubInterfaceDescriptor* descriptor = instr->descriptor(); |
| + |
| + LOperand* target = UseRegisterOrConstantAtStart(instr->target()); |
| + ZoneList<LOperand*> ops(instr->OperandCount(), zone()); |
| + ops.Add(target, zone()); |
| + for (int i = 1; i < instr->OperandCount(); i++) { |
| + LOperand* op = UseFixed(instr->OperandAt(i), |
| + descriptor->GetParameterRegister(i - 1)); |
|
Toon Verwaest
2013/12/18 16:11:41
4-space indent
Jarin
2013/12/30 15:15:47
Done.
|
| + ops.Add(op, zone()); |
| + } |
| + |
| + LCallWithDescriptor* result = new(zone()) LCallWithDescriptor( |
| + descriptor, ops, zone()); |
| + return MarkAsCall(DefineFixed(result, rax), instr); |
| } |
| @@ -1253,22 +1268,6 @@ LInstruction* LChunkBuilder::DoMathPowHalf(HUnaryMathOperation* instr) { |
| } |
| -LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) { |
| - ASSERT(instr->key()->representation().IsTagged()); |
| - LOperand* context = UseFixed(instr->context(), rsi); |
| - LOperand* key = UseFixed(instr->key(), rcx); |
| - LCallKeyed* result = new(zone()) LCallKeyed(context, key); |
| - return MarkAsCall(DefineFixed(result, rax), instr); |
| -} |
| - |
| - |
| -LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) { |
| - LOperand* context = UseFixed(instr->context(), rsi); |
| - LCallNamed* result = new(zone()) LCallNamed(context); |
| - return MarkAsCall(DefineFixed(result, rax), instr); |
| -} |
| - |
| - |
| LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) { |
| LOperand* context = UseFixed(instr->context(), rsi); |
| LCallGlobal* result = new(zone()) LCallGlobal(context); |
| @@ -1276,11 +1275,6 @@ LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) { |
| } |
| -LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) { |
| - return MarkAsCall(DefineFixed(new(zone()) LCallKnownGlobal, rax), instr); |
| -} |
| - |
| - |
| LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { |
| LOperand* context = UseFixed(instr->context(), rsi); |
| LOperand* constructor = UseFixed(instr->constructor(), rdi); |