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/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 | 6 |
7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
8 #include "src/compiler/code-generator-impl.h" | 8 #include "src/compiler/code-generator-impl.h" |
9 #include "src/compiler/gap-resolver.h" | 9 #include "src/compiler/gap-resolver.h" |
10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 // We cannot use the constant pool to load the target since | 764 // We cannot use the constant pool to load the target since |
765 // we've already restored the caller's frame. | 765 // we've already restored the caller's frame. |
766 ConstantPoolUnavailableScope constant_pool_unavailable(masm()); | 766 ConstantPoolUnavailableScope constant_pool_unavailable(masm()); |
767 __ Jump(Handle<Code>::cast(i.InputHeapObject(0)), | 767 __ Jump(Handle<Code>::cast(i.InputHeapObject(0)), |
768 RelocInfo::CODE_TARGET); | 768 RelocInfo::CODE_TARGET); |
769 } | 769 } |
770 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 770 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
771 frame_access_state()->ClearSPDelta(); | 771 frame_access_state()->ClearSPDelta(); |
772 break; | 772 break; |
773 } | 773 } |
| 774 case kArchTailCallAddress: { |
| 775 int stack_param_delta = i.InputInt32(instr->InputCount() - 1); |
| 776 AssembleDeconstructActivationRecord(stack_param_delta); |
| 777 CHECK(!instr->InputAt(0)->IsImmediate()); |
| 778 __ Jump(i.InputRegister(0)); |
| 779 frame_access_state()->ClearSPDelta(); |
| 780 break; |
| 781 } |
774 case kArchCallJSFunction: { | 782 case kArchCallJSFunction: { |
775 v8::internal::Assembler::BlockTrampolinePoolScope block_trampoline_pool( | 783 v8::internal::Assembler::BlockTrampolinePoolScope block_trampoline_pool( |
776 masm()); | 784 masm()); |
777 EnsureSpaceForLazyDeopt(); | 785 EnsureSpaceForLazyDeopt(); |
778 Register func = i.InputRegister(0); | 786 Register func = i.InputRegister(0); |
779 if (FLAG_debug_code) { | 787 if (FLAG_debug_code) { |
780 // Check the function's context matches the context argument. | 788 // Check the function's context matches the context argument. |
781 __ LoadP(kScratchReg, | 789 __ LoadP(kScratchReg, |
782 FieldMemOperand(func, JSFunction::kContextOffset)); | 790 FieldMemOperand(func, JSFunction::kContextOffset)); |
783 __ cmp(cp, kScratchReg); | 791 __ cmp(cp, kScratchReg); |
(...skipping 1253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2037 padding_size -= v8::internal::Assembler::kInstrSize; | 2045 padding_size -= v8::internal::Assembler::kInstrSize; |
2038 } | 2046 } |
2039 } | 2047 } |
2040 } | 2048 } |
2041 | 2049 |
2042 #undef __ | 2050 #undef __ |
2043 | 2051 |
2044 } // namespace compiler | 2052 } // namespace compiler |
2045 } // namespace internal | 2053 } // namespace internal |
2046 } // namespace v8 | 2054 } // namespace v8 |
OLD | NEW |