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 #include "src/crankshaft/mips64/lithium-codegen-mips64.h" | 5 #include "src/crankshaft/mips64/lithium-codegen-mips64.h" |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/crankshaft/hydrogen-osr.h" | 9 #include "src/crankshaft/hydrogen-osr.h" |
10 #include "src/crankshaft/mips64/lithium-gap-resolver-mips64.h" | 10 #include "src/crankshaft/mips64/lithium-gap-resolver-mips64.h" |
(...skipping 4010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4021 __ LoadRoot(a2, Heap::kUndefinedValueRootIndex); | 4021 __ LoadRoot(a2, Heap::kUndefinedValueRootIndex); |
4022 } | 4022 } |
4023 ElementsKind kind = instr->hydrogen()->elements_kind(); | 4023 ElementsKind kind = instr->hydrogen()->elements_kind(); |
4024 AllocationSiteOverrideMode override_mode = | 4024 AllocationSiteOverrideMode override_mode = |
4025 (AllocationSite::GetMode(kind) == TRACK_ALLOCATION_SITE) | 4025 (AllocationSite::GetMode(kind) == TRACK_ALLOCATION_SITE) |
4026 ? DISABLE_ALLOCATION_SITES | 4026 ? DISABLE_ALLOCATION_SITES |
4027 : DONT_OVERRIDE; | 4027 : DONT_OVERRIDE; |
4028 | 4028 |
4029 if (instr->arity() == 0) { | 4029 if (instr->arity() == 0) { |
4030 ArrayNoArgumentConstructorStub stub(isolate(), kind, override_mode); | 4030 ArrayNoArgumentConstructorStub stub(isolate(), kind, override_mode); |
4031 CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr); | 4031 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
4032 } else if (instr->arity() == 1) { | 4032 } else if (instr->arity() == 1) { |
4033 Label done; | 4033 Label done; |
4034 if (IsFastPackedElementsKind(kind)) { | 4034 if (IsFastPackedElementsKind(kind)) { |
4035 Label packed_case; | 4035 Label packed_case; |
4036 // We might need a change here, | 4036 // We might need a change here, |
4037 // look at the first argument. | 4037 // look at the first argument. |
4038 __ ld(a5, MemOperand(sp, 0)); | 4038 __ ld(a5, MemOperand(sp, 0)); |
4039 __ Branch(&packed_case, eq, a5, Operand(zero_reg)); | 4039 __ Branch(&packed_case, eq, a5, Operand(zero_reg)); |
4040 | 4040 |
4041 ElementsKind holey_kind = GetHoleyElementsKind(kind); | 4041 ElementsKind holey_kind = GetHoleyElementsKind(kind); |
4042 ArraySingleArgumentConstructorStub stub(isolate(), | 4042 ArraySingleArgumentConstructorStub stub(isolate(), |
4043 holey_kind, | 4043 holey_kind, |
4044 override_mode); | 4044 override_mode); |
4045 CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr); | 4045 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
4046 __ jmp(&done); | 4046 __ jmp(&done); |
4047 __ bind(&packed_case); | 4047 __ bind(&packed_case); |
4048 } | 4048 } |
4049 | 4049 |
4050 ArraySingleArgumentConstructorStub stub(isolate(), kind, override_mode); | 4050 ArraySingleArgumentConstructorStub stub(isolate(), kind, override_mode); |
4051 CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr); | 4051 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
4052 __ bind(&done); | 4052 __ bind(&done); |
4053 } else { | 4053 } else { |
4054 ArrayNArgumentsConstructorStub stub(isolate(), kind, override_mode); | 4054 ArrayNArgumentsConstructorStub stub(isolate(), kind, override_mode); |
4055 CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr); | 4055 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
4056 } | 4056 } |
4057 } | 4057 } |
4058 | 4058 |
4059 | 4059 |
4060 void LCodeGen::DoCallRuntime(LCallRuntime* instr) { | 4060 void LCodeGen::DoCallRuntime(LCallRuntime* instr) { |
4061 CallRuntime(instr->function(), instr->arity(), instr); | 4061 CallRuntime(instr->function(), instr->arity(), instr); |
4062 } | 4062 } |
4063 | 4063 |
4064 | 4064 |
4065 void LCodeGen::DoStoreCodeEntry(LStoreCodeEntry* instr) { | 4065 void LCodeGen::DoStoreCodeEntry(LStoreCodeEntry* instr) { |
(...skipping 1884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5950 __ Push(at, ToRegister(instr->function())); | 5950 __ Push(at, ToRegister(instr->function())); |
5951 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5951 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
5952 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5952 RecordSafepoint(Safepoint::kNoLazyDeopt); |
5953 } | 5953 } |
5954 | 5954 |
5955 | 5955 |
5956 #undef __ | 5956 #undef __ |
5957 | 5957 |
5958 } // namespace internal | 5958 } // namespace internal |
5959 } // namespace v8 | 5959 } // namespace v8 |
OLD | NEW |