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 3 // found in the LICENSE file. 4 5 #ifndef V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ 6 #define V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ 7 8 #include "src/runtime/runtime.h" 9 10 namespace v8 { 11 namespace internal { 12 namespace interpreter { 13 14 // List of supported intrisics, with upper case name, lower case name and 15 // expected number of arguments (-1 denoting argument count is variable). 16 #define INTRINSICS_LIST(V) \ 17 V(AsyncFunctionAwaitCaught, async_function_await_caught, 2) \ 18 V(AsyncFunctionAwaitUncaught, async_function_await_uncaught, 2) \ 19 V(AsyncFunctionEnter, async_function_enter, 2) \ 20 V(AsyncFunctionReject, async_function_reject, 2) \ 21 V(AsyncFunctionResolve, async_function_resolve, 2) \ 22 V(AsyncGeneratorAwaitCaught, async_generator_await_caught, 2) \ 23 V(AsyncGeneratorAwaitUncaught, async_generator_await_uncaught, 2) \ 24 V(AsyncGeneratorReject, async_generator_reject, 2) \ 25 V(AsyncGeneratorResolve, async_generator_resolve, 3) \ 26 V(AsyncGeneratorYield, async_generator_yield, 3) \ 27 V(CreateJSGeneratorObject, create_js_generator_object, 2) \ 28 V(GeneratorGetResumeMode, generator_get_resume_mode, 1) \ 29 V(GeneratorClose, generator_close, 1) \ 30 V(GetImportMetaObject, get_import_meta_object, 0) \ 31 V(CopyDataProperties, copy_data_properties, 2) \ 32 V(CopyDataPropertiesWithExcludedPropertiesOnStack, \ 33 copy_data_properties_with_excluded_properties_on_stack, -1) \ 34 V(CreateIterResultObject, create_iter_result_object, 2) \ 35 V(CreateAsyncFromSyncIterator, create_async_from_sync_iterator, 1) 36 37 class IntrinsicsHelper { 38 public: 39 enum class IntrinsicId { 40 #define DECLARE_INTRINSIC_ID(name, lower_case, count) k##name, 41 INTRINSICS_LIST(DECLARE_INTRINSIC_ID) 42 #undef DECLARE_INTRINSIC_ID 43 kIdCount 44 }; 45 STATIC_ASSERT(static_cast<uint32_t>(IntrinsicId::kIdCount) <= kMaxUInt8); 46 47 V8_EXPORT_PRIVATE static bool IsSupported(Runtime::FunctionId function_id); 48 static IntrinsicId FromRuntimeId(Runtime::FunctionId function_id); 49 static Runtime::FunctionId ToRuntimeId(IntrinsicId intrinsic_id); 50 51 private: 52 DISALLOW_IMPLICIT_CONSTRUCTORS(IntrinsicsHelper); 53 }; 54 55 } // namespace interpreter 56 } // namespace internal 57 } // namespace v8 58 59 #endif // V8_INTERPRETER_INTERPRETER_INTRINSICS_H_ 60