OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #if V8_TARGET_ARCH_X64 | 7 #if V8_TARGET_ARCH_X64 |
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 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 __ movp(rbp, rsp); | 318 __ movp(rbp, rsp); |
319 __ Push(rsi); | 319 __ Push(rsi); |
320 // This variant of deopt can only be used with stubs. Since we don't | 320 // This variant of deopt can only be used with stubs. Since we don't |
321 // have a function pointer to install in the stack frame that we're | 321 // have a function pointer to install in the stack frame that we're |
322 // building, install a special marker there instead. | 322 // building, install a special marker there instead. |
323 DCHECK(info()->IsStub()); | 323 DCHECK(info()->IsStub()); |
324 __ Move(rsi, Smi::FromInt(StackFrame::STUB)); | 324 __ Move(rsi, Smi::FromInt(StackFrame::STUB)); |
325 __ Push(rsi); | 325 __ Push(rsi); |
326 __ movp(rsi, MemOperand(rsp, kPointerSize)); | 326 __ movp(rsi, MemOperand(rsp, kPointerSize)); |
327 __ call(kScratchRegister); | 327 __ call(kScratchRegister); |
| 328 info()->LogDeoptCallPosition(masm()->pc_offset(), |
| 329 table_entry->deopt_info.inlining_id); |
328 } | 330 } |
329 } else { | 331 } else { |
330 if (info()->saves_caller_doubles()) { | 332 if (info()->saves_caller_doubles()) { |
331 DCHECK(info()->IsStub()); | 333 DCHECK(info()->IsStub()); |
332 RestoreCallerDoubles(); | 334 RestoreCallerDoubles(); |
333 } | 335 } |
334 __ call(entry, RelocInfo::RUNTIME_ENTRY); | 336 __ call(entry, RelocInfo::RUNTIME_ENTRY); |
| 337 info()->LogDeoptCallPosition(masm()->pc_offset(), |
| 338 table_entry->deopt_info.inlining_id); |
335 } | 339 } |
336 } | 340 } |
337 return !is_aborted(); | 341 return !is_aborted(); |
338 } | 342 } |
339 | 343 |
340 | 344 |
341 bool LCodeGen::GenerateDeferredCode() { | 345 bool LCodeGen::GenerateDeferredCode() { |
342 DCHECK(is_generating()); | 346 DCHECK(is_generating()); |
343 if (deferred_.length() > 0) { | 347 if (deferred_.length() > 0) { |
344 for (int i = 0; !is_aborted() && i < deferred_.length(); i++) { | 348 for (int i = 0; !is_aborted() && i < deferred_.length(); i++) { |
(...skipping 5594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5939 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5943 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
5940 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5944 RecordSafepoint(Safepoint::kNoLazyDeopt); |
5941 } | 5945 } |
5942 | 5946 |
5943 | 5947 |
5944 #undef __ | 5948 #undef __ |
5945 | 5949 |
5946 } } // namespace v8::internal | 5950 } } // namespace v8::internal |
5947 | 5951 |
5948 #endif // V8_TARGET_ARCH_X64 | 5952 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |