OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/cpu-profiler.h" | 10 #include "src/cpu-profiler.h" |
(...skipping 4154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4165 Register name = ToRegister(instr->name()); | 4165 Register name = ToRegister(instr->name()); |
4166 DCHECK(receiver.is(LoadDescriptor::ReceiverRegister())); | 4166 DCHECK(receiver.is(LoadDescriptor::ReceiverRegister())); |
4167 DCHECK(name.is(LoadDescriptor::NameRegister())); | 4167 DCHECK(name.is(LoadDescriptor::NameRegister())); |
4168 DCHECK(receiver.is(r4)); | 4168 DCHECK(receiver.is(r4)); |
4169 DCHECK(name.is(r5)); | 4169 DCHECK(name.is(r5)); |
4170 Register scratch = r7; | 4170 Register scratch = r7; |
4171 Register extra = r8; | 4171 Register extra = r8; |
4172 Register extra2 = r9; | 4172 Register extra2 = r9; |
4173 Register extra3 = r10; | 4173 Register extra3 = r10; |
4174 | 4174 |
4175 #ifdef DEBUG | 4175 // The probe will tail call to a handler if found. |
4176 Register slot = FLAG_vector_ics ? ToRegister(instr->slot()) : no_reg; | 4176 isolate()->stub_cache()->GenerateProbe( |
4177 Register vector = FLAG_vector_ics ? ToRegister(instr->vector()) : no_reg; | 4177 masm(), Code::LOAD_IC, instr->hydrogen()->flags(), false, receiver, name, |
4178 DCHECK(!FLAG_vector_ics || | 4178 scratch, extra, extra2, extra3); |
4179 !AreAliased(slot, vector, scratch, extra, extra2, extra3)); | |
4180 #endif | |
4181 | |
4182 // Important for the tail-call. | |
4183 bool must_teardown_frame = NeedsEagerFrame(); | |
4184 | |
4185 if (!instr->hydrogen()->is_just_miss()) { | |
4186 DCHECK(!instr->hydrogen()->is_keyed_load()); | |
4187 | |
4188 // The probe will tail call to a handler if found. | |
4189 isolate()->stub_cache()->GenerateProbe( | |
4190 masm(), Code::LOAD_IC, instr->hydrogen()->flags(), must_teardown_frame, | |
4191 receiver, name, scratch, extra, extra2, extra3); | |
4192 } | |
4193 | 4179 |
4194 // Tail call to miss if we ended up here. | 4180 // Tail call to miss if we ended up here. |
4195 if (must_teardown_frame) __ LeaveFrame(StackFrame::INTERNAL); | 4181 LoadIC::GenerateMiss(masm()); |
4196 if (instr->hydrogen()->is_keyed_load()) { | |
4197 KeyedLoadIC::GenerateMiss(masm()); | |
4198 } else { | |
4199 LoadIC::GenerateMiss(masm()); | |
4200 } | |
4201 } | 4182 } |
4202 | 4183 |
4203 | 4184 |
4204 void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) { | 4185 void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) { |
4205 DCHECK(ToRegister(instr->result()).is(r3)); | 4186 DCHECK(ToRegister(instr->result()).is(r3)); |
4206 | 4187 |
4207 if (instr->hydrogen()->IsTailCall()) { | 4188 if (instr->hydrogen()->IsTailCall()) { |
4208 if (NeedsEagerFrame()) __ LeaveFrame(StackFrame::INTERNAL); | 4189 if (NeedsEagerFrame()) __ LeaveFrame(StackFrame::INTERNAL); |
4209 | 4190 |
4210 if (instr->target()->IsConstantOperand()) { | 4191 if (instr->target()->IsConstantOperand()) { |
(...skipping 1983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6194 __ Push(scope_info); | 6175 __ Push(scope_info); |
6195 __ push(ToRegister(instr->function())); | 6176 __ push(ToRegister(instr->function())); |
6196 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6177 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
6197 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6178 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6198 } | 6179 } |
6199 | 6180 |
6200 | 6181 |
6201 #undef __ | 6182 #undef __ |
6202 } | 6183 } |
6203 } // namespace v8::internal | 6184 } // namespace v8::internal |
OLD | NEW |