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/interpreter/interpreter.h" | 5 #include "src/interpreter/interpreter.h" |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
8 | 8 |
9 #include "src/ast/prettyprinter.h" | 9 #include "src/ast/prettyprinter.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
797 // ShiftRightLogical <src> | 797 // ShiftRightLogical <src> |
798 // | 798 // |
799 // Right Shifts register <src> by the count specified in the accumulator. | 799 // Right Shifts register <src> by the count specified in the accumulator. |
800 // Result is zero-filled. The accumulator and register <src> are converted to | 800 // Result is zero-filled. The accumulator and register <src> are converted to |
801 // uint32 before the operation 5 lsb bits from the accumulator are used as | 801 // uint32 before the operation 5 lsb bits from the accumulator are used as |
802 // count i.e. <src> << (accumulator & 0x1F). | 802 // count i.e. <src> << (accumulator & 0x1F). |
803 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) { | 803 void Interpreter::DoShiftRightLogical(InterpreterAssembler* assembler) { |
804 DoBinaryOp(CodeFactory::ShiftRightLogical(isolate_), assembler); | 804 DoBinaryOp(CodeFactory::ShiftRightLogical(isolate_), assembler); |
805 } | 805 } |
806 | 806 |
807 void Interpreter::DoCountOp(Runtime::FunctionId function_id, | 807 void Interpreter::DoCountOp(Callable callable, |
808 InterpreterAssembler* assembler) { | 808 InterpreterAssembler* assembler) { |
| 809 Node* target = __ HeapConstant(callable.code()); |
809 Node* value = __ GetAccumulator(); | 810 Node* value = __ GetAccumulator(); |
810 Node* one = __ NumberConstant(1); | |
811 Node* context = __ GetContext(); | 811 Node* context = __ GetContext(); |
812 Node* result = __ CallRuntime(function_id, context, value, one); | 812 Node* result = __ CallStub(callable.descriptor(), target, context, value); |
813 __ SetAccumulator(result); | 813 __ SetAccumulator(result); |
814 __ Dispatch(); | 814 __ Dispatch(); |
815 } | 815 } |
816 | 816 |
817 | 817 |
818 // Inc | 818 // Inc |
819 // | 819 // |
820 // Increments value in the accumulator by one. | 820 // Increments value in the accumulator by one. |
821 void Interpreter::DoInc(InterpreterAssembler* assembler) { | 821 void Interpreter::DoInc(InterpreterAssembler* assembler) { |
822 DoCountOp(Runtime::kAdd, assembler); | 822 DoCountOp(CodeFactory::Inc(isolate_), assembler); |
823 } | 823 } |
824 | 824 |
825 | 825 |
826 // Dec | 826 // Dec |
827 // | 827 // |
828 // Decrements value in the accumulator by one. | 828 // Decrements value in the accumulator by one. |
829 void Interpreter::DoDec(InterpreterAssembler* assembler) { | 829 void Interpreter::DoDec(InterpreterAssembler* assembler) { |
830 DoCountOp(Runtime::kSubtract, assembler); | 830 DoCountOp(CodeFactory::Dec(isolate_), assembler); |
831 } | 831 } |
832 | 832 |
833 | 833 |
834 // LogicalNot | 834 // LogicalNot |
835 // | 835 // |
836 // Perform logical-not on the accumulator, first casting the | 836 // Perform logical-not on the accumulator, first casting the |
837 // accumulator to a boolean value if required. | 837 // accumulator to a boolean value if required. |
838 void Interpreter::DoLogicalNot(InterpreterAssembler* assembler) { | 838 void Interpreter::DoLogicalNot(InterpreterAssembler* assembler) { |
839 Callable callable = CodeFactory::ToBoolean(isolate_); | 839 Callable callable = CodeFactory::ToBoolean(isolate_); |
840 Node* target = __ HeapConstant(callable.code()); | 840 Node* target = __ HeapConstant(callable.code()); |
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 // Illegal | 1681 // Illegal |
1682 // | 1682 // |
1683 // An invalid bytecode aborting execution if dispatched. | 1683 // An invalid bytecode aborting execution if dispatched. |
1684 void Interpreter::DoIllegal(InterpreterAssembler* assembler) { | 1684 void Interpreter::DoIllegal(InterpreterAssembler* assembler) { |
1685 __ Abort(kInvalidBytecode); | 1685 __ Abort(kInvalidBytecode); |
1686 } | 1686 } |
1687 | 1687 |
1688 } // namespace interpreter | 1688 } // namespace interpreter |
1689 } // namespace internal | 1689 } // namespace internal |
1690 } // namespace v8 | 1690 } // namespace v8 |
OLD | NEW |