| 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 #ifndef V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ | 5 #ifndef V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ |
| 6 #define V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ | 6 #define V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | |
| 9 #include "src/builtins/builtins.h" | |
| 10 #include "src/frames.h" | |
| 11 #include "src/interpreter/bytecodes.h" | |
| 12 #include "src/interpreter/interpreter-assembler.h" | |
| 13 #include "src/runtime/runtime.h" | 8 #include "src/runtime/runtime.h" |
| 14 | 9 |
| 15 namespace v8 { | 10 namespace v8 { |
| 16 namespace internal { | 11 namespace internal { |
| 17 | |
| 18 namespace compiler { | |
| 19 class Node; | |
| 20 } // namespace compiler | |
| 21 | |
| 22 namespace interpreter { | 12 namespace interpreter { |
| 23 | 13 |
| 24 // List of supported intrisics, with upper case name, lower case name and | 14 // List of supported intrisics, with upper case name, lower case name and |
| 25 // expected number of arguments (-1 denoting argument count is variable). | 15 // expected number of arguments (-1 denoting argument count is variable). |
| 26 #define INTRINSICS_LIST(V) \ | 16 #define INTRINSICS_LIST(V) \ |
| 27 V(Call, call, -1) \ | 17 V(Call, call, -1) \ |
| 28 V(ClassOf, class_of, 1) \ | 18 V(ClassOf, class_of, 1) \ |
| 29 V(CreateIterResultObject, create_iter_result_object, 2) \ | 19 V(CreateIterResultObject, create_iter_result_object, 2) \ |
| 30 V(CreateAsyncFromSyncIterator, create_async_from_sync_iterator, 1) \ | 20 V(CreateAsyncFromSyncIterator, create_async_from_sync_iterator, 1) \ |
| 31 V(HasProperty, has_property, 2) \ | 21 V(HasProperty, has_property, 2) \ |
| (...skipping 12 matching lines...) Expand all Loading... |
| 44 class IntrinsicsHelper { | 34 class IntrinsicsHelper { |
| 45 public: | 35 public: |
| 46 enum class IntrinsicId { | 36 enum class IntrinsicId { |
| 47 #define DECLARE_INTRINSIC_ID(name, lower_case, count) k##name, | 37 #define DECLARE_INTRINSIC_ID(name, lower_case, count) k##name, |
| 48 INTRINSICS_LIST(DECLARE_INTRINSIC_ID) | 38 INTRINSICS_LIST(DECLARE_INTRINSIC_ID) |
| 49 #undef DECLARE_INTRINSIC_ID | 39 #undef DECLARE_INTRINSIC_ID |
| 50 kIdCount | 40 kIdCount |
| 51 }; | 41 }; |
| 52 STATIC_ASSERT(static_cast<uint32_t>(IntrinsicId::kIdCount) <= kMaxUInt8); | 42 STATIC_ASSERT(static_cast<uint32_t>(IntrinsicId::kIdCount) <= kMaxUInt8); |
| 53 | 43 |
| 54 explicit IntrinsicsHelper(InterpreterAssembler* assembler); | |
| 55 | |
| 56 compiler::Node* InvokeIntrinsic(compiler::Node* function_id, | |
| 57 compiler::Node* context, | |
| 58 compiler::Node* first_arg_reg, | |
| 59 compiler::Node* arg_count); | |
| 60 | |
| 61 static bool IsSupported(Runtime::FunctionId function_id); | 44 static bool IsSupported(Runtime::FunctionId function_id); |
| 62 static IntrinsicId FromRuntimeId(Runtime::FunctionId function_id); | 45 static IntrinsicId FromRuntimeId(Runtime::FunctionId function_id); |
| 63 static Runtime::FunctionId ToRuntimeId(IntrinsicId intrinsic_id); | 46 static Runtime::FunctionId ToRuntimeId(IntrinsicId intrinsic_id); |
| 64 | 47 |
| 65 private: | 48 private: |
| 66 enum InstanceTypeCompareMode { | 49 DISALLOW_IMPLICIT_CONSTRUCTORS(IntrinsicsHelper); |
| 67 kInstanceTypeEqual, | |
| 68 kInstanceTypeGreaterThanOrEqual | |
| 69 }; | |
| 70 | |
| 71 compiler::Node* IsInstanceType(compiler::Node* input, int type); | |
| 72 compiler::Node* CompareInstanceType(compiler::Node* map, int type, | |
| 73 InstanceTypeCompareMode mode); | |
| 74 compiler::Node* IntrinsicAsStubCall(compiler::Node* input, | |
| 75 compiler::Node* context, | |
| 76 Callable const& callable); | |
| 77 void AbortIfArgCountMismatch(int expected, compiler::Node* actual); | |
| 78 | |
| 79 #define DECLARE_INTRINSIC_HELPER(name, lower_case, count) \ | |
| 80 compiler::Node* name(compiler::Node* input, compiler::Node* arg_count, \ | |
| 81 compiler::Node* context); | |
| 82 INTRINSICS_LIST(DECLARE_INTRINSIC_HELPER) | |
| 83 #undef DECLARE_INTRINSIC_HELPER | |
| 84 | |
| 85 Isolate* isolate() { return isolate_; } | |
| 86 Zone* zone() { return zone_; } | |
| 87 | |
| 88 Isolate* isolate_; | |
| 89 Zone* zone_; | |
| 90 InterpreterAssembler* assembler_; | |
| 91 | |
| 92 DISALLOW_COPY_AND_ASSIGN(IntrinsicsHelper); | |
| 93 }; | 50 }; |
| 94 | 51 |
| 95 } // namespace interpreter | 52 } // namespace interpreter |
| 96 } // namespace internal | 53 } // namespace internal |
| 97 } // namespace v8 | 54 } // namespace v8 |
| 98 | 55 |
| 99 #endif | 56 #endif |
| OLD | NEW |