OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #if V8_TARGET_ARCH_X87 | 5 #if V8_TARGET_ARCH_X87 |
6 | 6 |
7 #include "src/crankshaft/x87/lithium-codegen-x87.h" | 7 #include "src/crankshaft/x87/lithium-codegen-x87.h" |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 3989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4000 | 4000 |
4001 | 4001 |
4002 void LCodeGen::DoCallFunction(LCallFunction* instr) { | 4002 void LCodeGen::DoCallFunction(LCallFunction* instr) { |
4003 HCallFunction* hinstr = instr->hydrogen(); | 4003 HCallFunction* hinstr = instr->hydrogen(); |
4004 DCHECK(ToRegister(instr->context()).is(esi)); | 4004 DCHECK(ToRegister(instr->context()).is(esi)); |
4005 DCHECK(ToRegister(instr->function()).is(edi)); | 4005 DCHECK(ToRegister(instr->function()).is(edi)); |
4006 DCHECK(ToRegister(instr->result()).is(eax)); | 4006 DCHECK(ToRegister(instr->result()).is(eax)); |
4007 | 4007 |
4008 int arity = instr->arity(); | 4008 int arity = instr->arity(); |
4009 ConvertReceiverMode mode = hinstr->convert_mode(); | 4009 ConvertReceiverMode mode = hinstr->convert_mode(); |
4010 TailCallMode tail_call_mode = hinstr->tail_call_mode(); | |
4011 if (hinstr->HasVectorAndSlot()) { | 4010 if (hinstr->HasVectorAndSlot()) { |
4012 Register slot_register = ToRegister(instr->temp_slot()); | 4011 Register slot_register = ToRegister(instr->temp_slot()); |
4013 Register vector_register = ToRegister(instr->temp_vector()); | 4012 Register vector_register = ToRegister(instr->temp_vector()); |
4014 DCHECK(slot_register.is(edx)); | 4013 DCHECK(slot_register.is(edx)); |
4015 DCHECK(vector_register.is(ebx)); | 4014 DCHECK(vector_register.is(ebx)); |
4016 | 4015 |
4017 AllowDeferredHandleDereference vector_structure_check; | 4016 AllowDeferredHandleDereference vector_structure_check; |
4018 Handle<TypeFeedbackVector> vector = hinstr->feedback_vector(); | 4017 Handle<TypeFeedbackVector> vector = hinstr->feedback_vector(); |
4019 int index = vector->GetIndex(hinstr->slot()); | 4018 int index = vector->GetIndex(hinstr->slot()); |
4020 | 4019 |
4021 __ mov(vector_register, vector); | 4020 __ mov(vector_register, vector); |
4022 __ mov(slot_register, Immediate(Smi::FromInt(index))); | 4021 __ mov(slot_register, Immediate(Smi::FromInt(index))); |
4023 | 4022 |
4024 Handle<Code> ic = CodeFactory::CallICInOptimizedCode(isolate(), arity, mode, | 4023 Handle<Code> ic = |
4025 tail_call_mode) | 4024 CodeFactory::CallICInOptimizedCode(isolate(), arity, mode).code(); |
4026 .code(); | |
4027 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 4025 CallCode(ic, RelocInfo::CODE_TARGET, instr); |
4028 } else { | 4026 } else { |
4029 __ Set(eax, arity); | 4027 __ Set(eax, arity); |
4030 CallCode(isolate()->builtins()->Call(mode, tail_call_mode), | 4028 CallCode(isolate()->builtins()->Call(mode), RelocInfo::CODE_TARGET, instr); |
4031 RelocInfo::CODE_TARGET, instr); | |
4032 } | 4029 } |
4033 } | 4030 } |
4034 | 4031 |
4035 | 4032 |
4036 void LCodeGen::DoCallNewArray(LCallNewArray* instr) { | 4033 void LCodeGen::DoCallNewArray(LCallNewArray* instr) { |
4037 DCHECK(ToRegister(instr->context()).is(esi)); | 4034 DCHECK(ToRegister(instr->context()).is(esi)); |
4038 DCHECK(ToRegister(instr->constructor()).is(edi)); | 4035 DCHECK(ToRegister(instr->constructor()).is(edi)); |
4039 DCHECK(ToRegister(instr->result()).is(eax)); | 4036 DCHECK(ToRegister(instr->result()).is(eax)); |
4040 | 4037 |
4041 __ Move(eax, Immediate(instr->arity())); | 4038 __ Move(eax, Immediate(instr->arity())); |
(...skipping 1974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6016 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6013 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6017 } | 6014 } |
6018 | 6015 |
6019 | 6016 |
6020 #undef __ | 6017 #undef __ |
6021 | 6018 |
6022 } // namespace internal | 6019 } // namespace internal |
6023 } // namespace v8 | 6020 } // namespace v8 |
6024 | 6021 |
6025 #endif // V8_TARGET_ARCH_X87 | 6022 #endif // V8_TARGET_ARCH_X87 |
OLD | NEW |