OLD | NEW |
1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 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-generator.h" | 5 #include "src/interpreter/interpreter-generator.h" |
6 | 6 |
7 #include <array> | 7 #include <array> |
8 #include <tuple> | 8 #include <tuple> |
9 | 9 |
10 #include "src/builtins/builtins-arguments-gen.h" | 10 #include "src/builtins/builtins-arguments-gen.h" |
11 #include "src/builtins/builtins-constructor-gen.h" | 11 #include "src/builtins/builtins-constructor-gen.h" |
12 #include "src/builtins/builtins-forin-gen.h" | 12 #include "src/builtins/builtins-forin-gen.h" |
13 #include "src/code-events.h" | 13 #include "src/code-events.h" |
14 #include "src/code-factory.h" | 14 #include "src/code-factory.h" |
15 #include "src/factory.h" | 15 #include "src/factory.h" |
16 #include "src/ic/accessor-assembler.h" | 16 #include "src/ic/accessor-assembler.h" |
17 #include "src/interpreter/bytecode-flags.h" | 17 #include "src/interpreter/bytecode-flags.h" |
18 #include "src/interpreter/bytecodes.h" | 18 #include "src/interpreter/bytecodes.h" |
19 #include "src/interpreter/interpreter-assembler.h" | 19 #include "src/interpreter/interpreter-assembler.h" |
20 #include "src/interpreter/interpreter-intrinsics.h" | 20 #include "src/interpreter/interpreter-intrinsics-generator.h" |
21 #include "src/objects-inl.h" | 21 #include "src/objects-inl.h" |
22 | 22 |
23 namespace v8 { | 23 namespace v8 { |
24 namespace internal { | 24 namespace internal { |
25 namespace interpreter { | 25 namespace interpreter { |
26 | 26 |
27 using compiler::Node; | 27 using compiler::Node; |
28 typedef CodeStubAssembler::Label Label; | 28 typedef CodeStubAssembler::Label Label; |
29 typedef CodeStubAssembler::Variable Variable; | 29 typedef CodeStubAssembler::Variable Variable; |
30 | 30 |
(...skipping 2085 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2116 // InvokeIntrinsic <function_id> <first_arg> <arg_count> | 2116 // InvokeIntrinsic <function_id> <first_arg> <arg_count> |
2117 // | 2117 // |
2118 // Implements the semantic equivalent of calling the runtime function | 2118 // Implements the semantic equivalent of calling the runtime function |
2119 // |function_id| with the first argument in |first_arg| and |arg_count| | 2119 // |function_id| with the first argument in |first_arg| and |arg_count| |
2120 // arguments in subsequent registers. | 2120 // arguments in subsequent registers. |
2121 void InterpreterGenerator::DoInvokeIntrinsic(InterpreterAssembler* assembler) { | 2121 void InterpreterGenerator::DoInvokeIntrinsic(InterpreterAssembler* assembler) { |
2122 Node* function_id = __ BytecodeOperandIntrinsicId(0); | 2122 Node* function_id = __ BytecodeOperandIntrinsicId(0); |
2123 Node* first_arg_reg = __ BytecodeOperandReg(1); | 2123 Node* first_arg_reg = __ BytecodeOperandReg(1); |
2124 Node* arg_count = __ BytecodeOperandCount(2); | 2124 Node* arg_count = __ BytecodeOperandCount(2); |
2125 Node* context = __ GetContext(); | 2125 Node* context = __ GetContext(); |
2126 IntrinsicsHelper helper(assembler); | 2126 Node* result = GenerateInvokeIntrinsic(assembler, function_id, context, |
2127 Node* result = | 2127 first_arg_reg, arg_count); |
2128 helper.InvokeIntrinsic(function_id, context, first_arg_reg, arg_count); | |
2129 __ SetAccumulator(result); | 2128 __ SetAccumulator(result); |
2130 __ Dispatch(); | 2129 __ Dispatch(); |
2131 } | 2130 } |
2132 | 2131 |
2133 // CallRuntimeForPair <function_id> <first_arg> <arg_count> <first_return> | 2132 // CallRuntimeForPair <function_id> <first_arg> <arg_count> <first_return> |
2134 // | 2133 // |
2135 // Call the runtime function |function_id| which returns a pair, with the | 2134 // Call the runtime function |function_id| which returns a pair, with the |
2136 // first argument in register |first_arg| and |arg_count| arguments in | 2135 // first argument in register |first_arg| and |arg_count| arguments in |
2137 // subsequent registers. Returns the result in <first_return> and | 2136 // subsequent registers. Returns the result in <first_return> and |
2138 // <first_return + 1> | 2137 // <first_return + 1> |
(...skipping 1282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3421 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, | 3420 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, |
3422 __ SmiTag(new_state)); | 3421 __ SmiTag(new_state)); |
3423 __ SetAccumulator(old_state); | 3422 __ SetAccumulator(old_state); |
3424 | 3423 |
3425 __ Dispatch(); | 3424 __ Dispatch(); |
3426 } | 3425 } |
3427 | 3426 |
3428 } // namespace interpreter | 3427 } // namespace interpreter |
3429 } // namespace internal | 3428 } // namespace internal |
3430 } // namespace v8 | 3429 } // namespace v8 |
OLD | NEW |