OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 } else { | 649 } else { |
650 // We cannot use the constant pool to load the target since | 650 // We cannot use the constant pool to load the target since |
651 // we've already restored the caller's frame. | 651 // we've already restored the caller's frame. |
652 ConstantPoolUnavailableScope constant_pool_unavailable(masm()); | 652 ConstantPoolUnavailableScope constant_pool_unavailable(masm()); |
653 __ Jump(Handle<Code>::cast(i.InputHeapObject(0)), | 653 __ Jump(Handle<Code>::cast(i.InputHeapObject(0)), |
654 RelocInfo::CODE_TARGET); | 654 RelocInfo::CODE_TARGET); |
655 } | 655 } |
656 frame_access_state()->ClearSPDelta(); | 656 frame_access_state()->ClearSPDelta(); |
657 break; | 657 break; |
658 } | 658 } |
| 659 case kArchTailCallAddress: { |
| 660 int stack_param_delta = i.InputInt32(instr->InputCount() - 1); |
| 661 AssembleDeconstructActivationRecord(stack_param_delta); |
| 662 CHECK(!instr->InputAt(0)->IsImmediate()); |
| 663 __ Jump(i.InputRegister(0)); |
| 664 frame_access_state()->ClearSPDelta(); |
| 665 break; |
| 666 } |
659 case kArchCallJSFunction: { | 667 case kArchCallJSFunction: { |
660 EnsureSpaceForLazyDeopt(); | 668 EnsureSpaceForLazyDeopt(); |
661 Register func = i.InputRegister(0); | 669 Register func = i.InputRegister(0); |
662 if (FLAG_debug_code) { | 670 if (FLAG_debug_code) { |
663 // Check the function's context matches the context argument. | 671 // Check the function's context matches the context argument. |
664 __ LoadP(kScratchReg, | 672 __ LoadP(kScratchReg, |
665 FieldMemOperand(func, JSFunction::kContextOffset)); | 673 FieldMemOperand(func, JSFunction::kContextOffset)); |
666 __ CmpP(cp, kScratchReg); | 674 __ CmpP(cp, kScratchReg); |
667 __ Assert(eq, kWrongFunctionContext); | 675 __ Assert(eq, kWrongFunctionContext); |
668 } | 676 } |
(...skipping 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2094 padding_size -= 2; | 2102 padding_size -= 2; |
2095 } | 2103 } |
2096 } | 2104 } |
2097 } | 2105 } |
2098 | 2106 |
2099 #undef __ | 2107 #undef __ |
2100 | 2108 |
2101 } // namespace compiler | 2109 } // namespace compiler |
2102 } // namespace internal | 2110 } // namespace internal |
2103 } // namespace v8 | 2111 } // namespace v8 |
OLD | NEW |