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/interpreter-assembler.h" | 5 #include "src/compiler/interpreter-assembler.h" |
6 | 6 |
7 #include <ostream> | 7 #include <ostream> |
8 | 8 |
9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
10 #include "src/compiler/graph.h" | 10 #include "src/compiler/graph.h" |
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
700 Node* args[] = { GetAccumulator(), | 700 Node* args[] = { GetAccumulator(), |
701 RegisterFileRawPointer(), | 701 RegisterFileRawPointer(), |
702 new_bytecode_offset, | 702 new_bytecode_offset, |
703 BytecodeArrayTaggedPointer(), | 703 BytecodeArrayTaggedPointer(), |
704 DispatchTableRawPointer(), | 704 DispatchTableRawPointer(), |
705 GetContext() }; | 705 GetContext() }; |
706 raw_assembler_->TailCallN(call_descriptor(), target_code_object, args); | 706 raw_assembler_->TailCallN(call_descriptor(), target_code_object, args); |
707 } | 707 } |
708 | 708 |
709 void InterpreterAssembler::StackCheck() { | 709 void InterpreterAssembler::StackCheck() { |
710 RawMachineLabel ok, stack_guard; | 710 RawMachineLabel end, ok, stack_guard; |
711 Node* sp = raw_assembler_->LoadStackPointer(); | 711 Node* sp = raw_assembler_->LoadStackPointer(); |
712 Node* stack_limit = raw_assembler_->Load( | 712 Node* stack_limit = raw_assembler_->Load( |
713 MachineType::Pointer(), | 713 MachineType::Pointer(), |
714 raw_assembler_->ExternalConstant( | 714 raw_assembler_->ExternalConstant( |
715 ExternalReference::address_of_stack_limit(isolate()))); | 715 ExternalReference::address_of_stack_limit(isolate()))); |
716 Node* condition = raw_assembler_->UintPtrGreaterThanOrEqual(sp, stack_limit); | 716 Node* condition = raw_assembler_->UintPtrGreaterThanOrEqual(sp, stack_limit); |
717 raw_assembler_->Branch(condition, &ok, &stack_guard); | 717 raw_assembler_->Branch(condition, &ok, &stack_guard); |
718 raw_assembler_->Bind(&stack_guard); | 718 raw_assembler_->Bind(&stack_guard); |
719 CallRuntime(Runtime::kStackGuard); | 719 CallRuntime(Runtime::kStackGuard); |
720 raw_assembler_->Goto(&ok); | 720 raw_assembler_->Goto(&end); |
721 raw_assembler_->Bind(&ok); | 721 raw_assembler_->Bind(&ok); |
| 722 raw_assembler_->Goto(&end); |
| 723 raw_assembler_->Bind(&end); |
722 } | 724 } |
723 | 725 |
724 void InterpreterAssembler::Abort(BailoutReason bailout_reason) { | 726 void InterpreterAssembler::Abort(BailoutReason bailout_reason) { |
725 Node* abort_id = SmiTag(Int32Constant(bailout_reason)); | 727 Node* abort_id = SmiTag(Int32Constant(bailout_reason)); |
726 Node* ret_value = CallRuntime(Runtime::kAbort, abort_id); | 728 Node* ret_value = CallRuntime(Runtime::kAbort, abort_id); |
727 // Unreached, but keeps turbofan happy. | 729 // Unreached, but keeps turbofan happy. |
728 raw_assembler_->Return(ret_value); | 730 raw_assembler_->Return(ret_value); |
729 } | 731 } |
730 | 732 |
731 | 733 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 return raw_assembler_->call_descriptor(); | 771 return raw_assembler_->call_descriptor(); |
770 } | 772 } |
771 | 773 |
772 | 774 |
773 Zone* InterpreterAssembler::zone() { return raw_assembler_->zone(); } | 775 Zone* InterpreterAssembler::zone() { return raw_assembler_->zone(); } |
774 | 776 |
775 | 777 |
776 } // namespace compiler | 778 } // namespace compiler |
777 } // namespace internal | 779 } // namespace internal |
778 } // namespace v8 | 780 } // namespace v8 |
OLD | NEW |