14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_COMPILER_CALL_SIGNATURE_H 174514f5e3Sopenharmony_ci#define ECMASCRIPT_COMPILER_CALL_SIGNATURE_H 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_ci#include <array> 204514f5e3Sopenharmony_ci#include <functional> 214514f5e3Sopenharmony_ci#include <memory> 224514f5e3Sopenharmony_ci 234514f5e3Sopenharmony_ci#include "ecmascript/compiler/variable_type.h" 244514f5e3Sopenharmony_ci 254514f5e3Sopenharmony_ci#include "libpandabase/macros.h" 264514f5e3Sopenharmony_ci#include "libpandabase/utils/bit_field.h" 274514f5e3Sopenharmony_ci 284514f5e3Sopenharmony_cinamespace panda::ecmascript::kungfu { 294514f5e3Sopenharmony_ciclass Circuit; 304514f5e3Sopenharmony_ci 314514f5e3Sopenharmony_cienum class ArgumentsOrder { 324514f5e3Sopenharmony_ci DEFAULT_ORDER, // Push Arguments in stack from right -> left 334514f5e3Sopenharmony_ci}; 344514f5e3Sopenharmony_ci 354514f5e3Sopenharmony_ciclass CallSignature { 364514f5e3Sopenharmony_cipublic: 374514f5e3Sopenharmony_ci using TargetConstructor = std::function<void *(void *)>; 384514f5e3Sopenharmony_ci enum class TargetKind : uint8_t { 394514f5e3Sopenharmony_ci COMMON_STUB = 0, 404514f5e3Sopenharmony_ci RUNTIME_STUB, 414514f5e3Sopenharmony_ci RUNTIME_STUB_VARARGS, 424514f5e3Sopenharmony_ci RUNTIME_STUB_NO_GC, 434514f5e3Sopenharmony_ci ASM_CALL_BARRIER_STUB, 444514f5e3Sopenharmony_ci OPTIMIZED_STUB, 454514f5e3Sopenharmony_ci OPTIMIZED_FAST_CALL_STUB, 464514f5e3Sopenharmony_ci DEOPT_STUB, 474514f5e3Sopenharmony_ci BYTECODE_HANDLER, 484514f5e3Sopenharmony_ci BYTECODE_DEBUGGER_HANDLER, 494514f5e3Sopenharmony_ci BYTECODE_HELPER_HANDLER, 504514f5e3Sopenharmony_ci BYTECODE_PROFILE_HANDLER, 514514f5e3Sopenharmony_ci BYTECODE_JIT_PROFILE_HANDLER, 524514f5e3Sopenharmony_ci JSFUNCTION, 534514f5e3Sopenharmony_ci BUILTINS_STUB, 544514f5e3Sopenharmony_ci BUILTINS_WITH_ARGV_STUB, 554514f5e3Sopenharmony_ci BASELINE_STUB, 564514f5e3Sopenharmony_ci 574514f5e3Sopenharmony_ci STUB_BEGIN = COMMON_STUB, 584514f5e3Sopenharmony_ci STUB_END = BYTECODE_HANDLER, 594514f5e3Sopenharmony_ci BCHANDLER_BEGIN = BYTECODE_HANDLER, 604514f5e3Sopenharmony_ci BCHANDLER_END = JSFUNCTION 614514f5e3Sopenharmony_ci }; 624514f5e3Sopenharmony_ci enum class CallConv: uint8_t { 634514f5e3Sopenharmony_ci CCallConv = 0, 644514f5e3Sopenharmony_ci GHCCallConv = 1, 654514f5e3Sopenharmony_ci WebKitJSCallConv = 2, 664514f5e3Sopenharmony_ci }; 674514f5e3Sopenharmony_ci // ParamAttr only works for LLVM backend. 684514f5e3Sopenharmony_ci enum class ParamAttr: uint8_t { 694514f5e3Sopenharmony_ci NoAttr = 0, 704514f5e3Sopenharmony_ci Dead 714514f5e3Sopenharmony_ci }; 724514f5e3Sopenharmony_ci static constexpr size_t TARGET_KIND_BIT_LENGTH = 5; 734514f5e3Sopenharmony_ci static constexpr size_t CALL_CONV_BIT_LENGTH = 2; 744514f5e3Sopenharmony_ci using TargetKindBit = panda::BitField<TargetKind, 0, TARGET_KIND_BIT_LENGTH>; 754514f5e3Sopenharmony_ci using CallConvBit = TargetKindBit::NextField<CallConv, CALL_CONV_BIT_LENGTH>; 764514f5e3Sopenharmony_ci using VariadicArgsBit = CallConvBit::NextField<bool, 1>; 774514f5e3Sopenharmony_ci using TailCallBit = VariadicArgsBit::NextField<bool, 1>; 784514f5e3Sopenharmony_ci using GCLeafFunctionBit = TailCallBit::NextField<bool, 1>; 794514f5e3Sopenharmony_ci 804514f5e3Sopenharmony_ci CallSignature(std::string name, int flags, size_t paramCounter, ArgumentsOrder order, 814514f5e3Sopenharmony_ci VariableType returnType) 824514f5e3Sopenharmony_ci : name_(name), paramCounter_(paramCounter), order_(order), returnType_(returnType) 834514f5e3Sopenharmony_ci { 844514f5e3Sopenharmony_ci SetTargetKind(TargetKind::COMMON_STUB); 854514f5e3Sopenharmony_ci SetCallConv(CallSignature::CallConv::CCallConv); 864514f5e3Sopenharmony_ci SetTailCall(false); 874514f5e3Sopenharmony_ci SetGCLeafFunction(false); 884514f5e3Sopenharmony_ci SetVariadicArgs(flags); 894514f5e3Sopenharmony_ci } 904514f5e3Sopenharmony_ci 914514f5e3Sopenharmony_ci CallSignature(std::string name, int flags, ArgumentsOrder order, VariableType returnType, 924514f5e3Sopenharmony_ci std::initializer_list<VariableType> params) 934514f5e3Sopenharmony_ci : CallSignature(std::move(name), flags, params.size(), order, returnType) 944514f5e3Sopenharmony_ci { 954514f5e3Sopenharmony_ci paramsType_ = std::make_unique<std::vector<VariableType>>(params); 964514f5e3Sopenharmony_ci } 974514f5e3Sopenharmony_ci 984514f5e3Sopenharmony_ci CallSignature() = default; 994514f5e3Sopenharmony_ci 1004514f5e3Sopenharmony_ci ~CallSignature() = default; 1014514f5e3Sopenharmony_ci 1024514f5e3Sopenharmony_ci CallSignature(CallSignature const &other) 1034514f5e3Sopenharmony_ci { 1044514f5e3Sopenharmony_ci name_ = other.name_; 1054514f5e3Sopenharmony_ci paramCounter_ = other.paramCounter_; 1064514f5e3Sopenharmony_ci order_ = other.order_; 1074514f5e3Sopenharmony_ci id_ = other.id_; 1084514f5e3Sopenharmony_ci returnType_ = other.returnType_; 1094514f5e3Sopenharmony_ci constructor_ = other.constructor_; 1104514f5e3Sopenharmony_ci if (paramCounter_ > 0 && other.paramsType_ != nullptr) { 1114514f5e3Sopenharmony_ci paramsType_ = std::make_unique<std::vector<VariableType>>(paramCounter_); 1124514f5e3Sopenharmony_ci for (size_t i = 0; i < paramCounter_; i++) { 1134514f5e3Sopenharmony_ci (*paramsType_)[i] = other.GetParametersType()[i]; 1144514f5e3Sopenharmony_ci } 1154514f5e3Sopenharmony_ci } 1164514f5e3Sopenharmony_ci kind_ = other.kind_; 1174514f5e3Sopenharmony_ci } 1184514f5e3Sopenharmony_ci 1194514f5e3Sopenharmony_ci CallSignature &operator=(CallSignature const &other) 1204514f5e3Sopenharmony_ci { 1214514f5e3Sopenharmony_ci name_ = other.name_; 1224514f5e3Sopenharmony_ci paramCounter_ = other.paramCounter_; 1234514f5e3Sopenharmony_ci order_ = other.order_; 1244514f5e3Sopenharmony_ci id_ = other.id_; 1254514f5e3Sopenharmony_ci returnType_ = other.returnType_; 1264514f5e3Sopenharmony_ci constructor_ = other.constructor_; 1274514f5e3Sopenharmony_ci if (paramCounter_ > 0 && other.paramsType_ != nullptr) { 1284514f5e3Sopenharmony_ci paramsType_ = std::make_unique<std::vector<VariableType>>(paramCounter_); 1294514f5e3Sopenharmony_ci for (size_t i = 0; i < paramCounter_; i++) { 1304514f5e3Sopenharmony_ci (*paramsType_)[i] = other.GetParametersType()[i]; 1314514f5e3Sopenharmony_ci } 1324514f5e3Sopenharmony_ci } 1334514f5e3Sopenharmony_ci kind_ = other.kind_; 1344514f5e3Sopenharmony_ci return *this; 1354514f5e3Sopenharmony_ci } 1364514f5e3Sopenharmony_ci 1374514f5e3Sopenharmony_ci bool IsCommonStub() const 1384514f5e3Sopenharmony_ci { 1394514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::COMMON_STUB); 1404514f5e3Sopenharmony_ci } 1414514f5e3Sopenharmony_ci 1424514f5e3Sopenharmony_ci bool IsRuntimeVAStub() const 1434514f5e3Sopenharmony_ci { 1444514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::RUNTIME_STUB_VARARGS); 1454514f5e3Sopenharmony_ci } 1464514f5e3Sopenharmony_ci 1474514f5e3Sopenharmony_ci bool IsRuntimeStub() const 1484514f5e3Sopenharmony_ci { 1494514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::RUNTIME_STUB); 1504514f5e3Sopenharmony_ci } 1514514f5e3Sopenharmony_ci 1524514f5e3Sopenharmony_ci bool IsASMCallBarrierStub() const 1534514f5e3Sopenharmony_ci { 1544514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::ASM_CALL_BARRIER_STUB); 1554514f5e3Sopenharmony_ci } 1564514f5e3Sopenharmony_ci 1574514f5e3Sopenharmony_ci bool IsRuntimeNGCStub() const 1584514f5e3Sopenharmony_ci { 1594514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::RUNTIME_STUB_NO_GC); 1604514f5e3Sopenharmony_ci } 1614514f5e3Sopenharmony_ci 1624514f5e3Sopenharmony_ci bool IsOptimizedStub() const 1634514f5e3Sopenharmony_ci { 1644514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::OPTIMIZED_STUB); 1654514f5e3Sopenharmony_ci } 1664514f5e3Sopenharmony_ci 1674514f5e3Sopenharmony_ci bool IsOptimizedFastCallStub() const 1684514f5e3Sopenharmony_ci { 1694514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::OPTIMIZED_FAST_CALL_STUB); 1704514f5e3Sopenharmony_ci } 1714514f5e3Sopenharmony_ci 1724514f5e3Sopenharmony_ci bool IsBCDebuggerStub() const 1734514f5e3Sopenharmony_ci { 1744514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::BYTECODE_DEBUGGER_HANDLER); 1754514f5e3Sopenharmony_ci } 1764514f5e3Sopenharmony_ci 1774514f5e3Sopenharmony_ci bool IsStub() const 1784514f5e3Sopenharmony_ci { 1794514f5e3Sopenharmony_ci TargetKind targetKind = GetTargetKind(); 1804514f5e3Sopenharmony_ci return TargetKind::STUB_BEGIN <= targetKind && targetKind < TargetKind::STUB_END; 1814514f5e3Sopenharmony_ci } 1824514f5e3Sopenharmony_ci 1834514f5e3Sopenharmony_ci bool IsBCStub() const 1844514f5e3Sopenharmony_ci { 1854514f5e3Sopenharmony_ci TargetKind targetKind = GetTargetKind(); 1864514f5e3Sopenharmony_ci return TargetKind::BCHANDLER_BEGIN <= targetKind && targetKind < TargetKind::BCHANDLER_END; 1874514f5e3Sopenharmony_ci } 1884514f5e3Sopenharmony_ci 1894514f5e3Sopenharmony_ci bool IsBuiltinsStub() const 1904514f5e3Sopenharmony_ci { 1914514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::BUILTINS_STUB); 1924514f5e3Sopenharmony_ci } 1934514f5e3Sopenharmony_ci 1944514f5e3Sopenharmony_ci bool IsBuiltinsWithArgvStub() const 1954514f5e3Sopenharmony_ci { 1964514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::BUILTINS_WITH_ARGV_STUB); 1974514f5e3Sopenharmony_ci } 1984514f5e3Sopenharmony_ci 1994514f5e3Sopenharmony_ci bool IsBCHandlerStub() const 2004514f5e3Sopenharmony_ci { 2014514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::BYTECODE_HANDLER); 2024514f5e3Sopenharmony_ci } 2034514f5e3Sopenharmony_ci 2044514f5e3Sopenharmony_ci bool IsDeoptStub() const 2054514f5e3Sopenharmony_ci { 2064514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::DEOPT_STUB); 2074514f5e3Sopenharmony_ci } 2084514f5e3Sopenharmony_ci 2094514f5e3Sopenharmony_ci bool IsBaselineStub() const 2104514f5e3Sopenharmony_ci { 2114514f5e3Sopenharmony_ci return (GetTargetKind() == TargetKind::BASELINE_STUB); 2124514f5e3Sopenharmony_ci } 2134514f5e3Sopenharmony_ci 2144514f5e3Sopenharmony_ci void SetParameters(VariableType *paramsType) 2154514f5e3Sopenharmony_ci { 2164514f5e3Sopenharmony_ci if (paramCounter_ > 0 && paramsType_ == nullptr) { 2174514f5e3Sopenharmony_ci paramsType_ = std::make_unique<std::vector<VariableType>>(paramCounter_); 2184514f5e3Sopenharmony_ci for (size_t i = 0; i < paramCounter_; i++) { 2194514f5e3Sopenharmony_ci (*paramsType_)[i] = paramsType[i]; 2204514f5e3Sopenharmony_ci } 2214514f5e3Sopenharmony_ci } 2224514f5e3Sopenharmony_ci } 2234514f5e3Sopenharmony_ci 2244514f5e3Sopenharmony_ci VariableType *GetParametersType() const 2254514f5e3Sopenharmony_ci { 2264514f5e3Sopenharmony_ci if (paramsType_ != nullptr) { 2274514f5e3Sopenharmony_ci return paramsType_->data(); 2284514f5e3Sopenharmony_ci } else { 2294514f5e3Sopenharmony_ci return nullptr; 2304514f5e3Sopenharmony_ci } 2314514f5e3Sopenharmony_ci } 2324514f5e3Sopenharmony_ci 2334514f5e3Sopenharmony_ci void SetParamAttr(std::vector<ParamAttr> &¶mAttr) 2344514f5e3Sopenharmony_ci { 2354514f5e3Sopenharmony_ci if (paramCounter_ > 0 && paramsAttr_ == nullptr) { 2364514f5e3Sopenharmony_ci paramsAttr_ = std::make_unique<std::vector<ParamAttr>>(paramAttr); 2374514f5e3Sopenharmony_ci } 2384514f5e3Sopenharmony_ci } 2394514f5e3Sopenharmony_ci 2404514f5e3Sopenharmony_ci std::vector<ParamAttr> *GetParamAttr() const 2414514f5e3Sopenharmony_ci { 2424514f5e3Sopenharmony_ci if (paramsAttr_ != nullptr) { 2434514f5e3Sopenharmony_ci return paramsAttr_.get(); 2444514f5e3Sopenharmony_ci } else { 2454514f5e3Sopenharmony_ci return nullptr; 2464514f5e3Sopenharmony_ci } 2474514f5e3Sopenharmony_ci } 2484514f5e3Sopenharmony_ci 2494514f5e3Sopenharmony_ci size_t GetParametersCount() const 2504514f5e3Sopenharmony_ci { 2514514f5e3Sopenharmony_ci return paramCounter_; 2524514f5e3Sopenharmony_ci } 2534514f5e3Sopenharmony_ci 2544514f5e3Sopenharmony_ci VariableType GetReturnType() const 2554514f5e3Sopenharmony_ci { 2564514f5e3Sopenharmony_ci return returnType_; 2574514f5e3Sopenharmony_ci } 2584514f5e3Sopenharmony_ci 2594514f5e3Sopenharmony_ci ArgumentsOrder GetArgumentsOrder() const 2604514f5e3Sopenharmony_ci { 2614514f5e3Sopenharmony_ci return order_; 2624514f5e3Sopenharmony_ci } 2634514f5e3Sopenharmony_ci 2644514f5e3Sopenharmony_ci bool IsVariadicArgs() const 2654514f5e3Sopenharmony_ci { 2664514f5e3Sopenharmony_ci return VariadicArgsBit::Decode(kind_); 2674514f5e3Sopenharmony_ci } 2684514f5e3Sopenharmony_ci 2694514f5e3Sopenharmony_ci void SetVariadicArgs(bool variable) 2704514f5e3Sopenharmony_ci { 2714514f5e3Sopenharmony_ci VariadicArgsBit::Set<uint64_t>(variable, &kind_); 2724514f5e3Sopenharmony_ci } 2734514f5e3Sopenharmony_ci 2744514f5e3Sopenharmony_ci void SetTailCall(bool tailCall) 2754514f5e3Sopenharmony_ci { 2764514f5e3Sopenharmony_ci TailCallBit::Set<uint64_t>(tailCall, &kind_); 2774514f5e3Sopenharmony_ci } 2784514f5e3Sopenharmony_ci 2794514f5e3Sopenharmony_ci bool GetTailCall() const 2804514f5e3Sopenharmony_ci { 2814514f5e3Sopenharmony_ci return TailCallBit::Decode(kind_); 2824514f5e3Sopenharmony_ci } 2834514f5e3Sopenharmony_ci 2844514f5e3Sopenharmony_ci void SetGCLeafFunction(bool value) 2854514f5e3Sopenharmony_ci { 2864514f5e3Sopenharmony_ci GCLeafFunctionBit::Set<uint64_t>(value, &kind_); 2874514f5e3Sopenharmony_ci } 2884514f5e3Sopenharmony_ci 2894514f5e3Sopenharmony_ci bool GetGCLeafFunction() const 2904514f5e3Sopenharmony_ci { 2914514f5e3Sopenharmony_ci return GCLeafFunctionBit::Decode(kind_); 2924514f5e3Sopenharmony_ci } 2934514f5e3Sopenharmony_ci 2944514f5e3Sopenharmony_ci TargetKind GetTargetKind() const 2954514f5e3Sopenharmony_ci { 2964514f5e3Sopenharmony_ci return TargetKindBit::Decode(kind_); 2974514f5e3Sopenharmony_ci } 2984514f5e3Sopenharmony_ci 2994514f5e3Sopenharmony_ci void SetTargetKind(TargetKind kind) 3004514f5e3Sopenharmony_ci { 3014514f5e3Sopenharmony_ci TargetKindBit::Set<uint64_t>(kind, &kind_); 3024514f5e3Sopenharmony_ci } 3034514f5e3Sopenharmony_ci 3044514f5e3Sopenharmony_ci CallConv GetCallConv() const 3054514f5e3Sopenharmony_ci { 3064514f5e3Sopenharmony_ci return CallConvBit::Decode(kind_); 3074514f5e3Sopenharmony_ci } 3084514f5e3Sopenharmony_ci 3094514f5e3Sopenharmony_ci void SetCallConv(CallConv cc) 3104514f5e3Sopenharmony_ci { 3114514f5e3Sopenharmony_ci CallConvBit::Set<uint64_t>(cc, &kind_); 3124514f5e3Sopenharmony_ci } 3134514f5e3Sopenharmony_ci 3144514f5e3Sopenharmony_ci const std::string &GetName() const 3154514f5e3Sopenharmony_ci { 3164514f5e3Sopenharmony_ci return name_; 3174514f5e3Sopenharmony_ci } 3184514f5e3Sopenharmony_ci 3194514f5e3Sopenharmony_ci void SetName(const std::string &str) 3204514f5e3Sopenharmony_ci { 3214514f5e3Sopenharmony_ci name_ = str; 3224514f5e3Sopenharmony_ci } 3234514f5e3Sopenharmony_ci 3244514f5e3Sopenharmony_ci void SetConstructor(TargetConstructor ctor) 3254514f5e3Sopenharmony_ci { 3264514f5e3Sopenharmony_ci constructor_ = ctor; 3274514f5e3Sopenharmony_ci } 3284514f5e3Sopenharmony_ci 3294514f5e3Sopenharmony_ci TargetConstructor GetConstructor() const 3304514f5e3Sopenharmony_ci { 3314514f5e3Sopenharmony_ci return constructor_; 3324514f5e3Sopenharmony_ci } 3334514f5e3Sopenharmony_ci 3344514f5e3Sopenharmony_ci bool HasConstructor() const 3354514f5e3Sopenharmony_ci { 3364514f5e3Sopenharmony_ci return constructor_ != nullptr; 3374514f5e3Sopenharmony_ci } 3384514f5e3Sopenharmony_ci 3394514f5e3Sopenharmony_ci int GetID() const 3404514f5e3Sopenharmony_ci { 3414514f5e3Sopenharmony_ci return id_; 3424514f5e3Sopenharmony_ci } 3434514f5e3Sopenharmony_ci 3444514f5e3Sopenharmony_ci void SetID(int id) 3454514f5e3Sopenharmony_ci { 3464514f5e3Sopenharmony_ci id_ = id; 3474514f5e3Sopenharmony_ci } 3484514f5e3Sopenharmony_ci 3494514f5e3Sopenharmony_ciprivate: 3504514f5e3Sopenharmony_ci std::string name_; 3514514f5e3Sopenharmony_ci size_t paramCounter_ {0}; 3524514f5e3Sopenharmony_ci int id_ {-1}; 3534514f5e3Sopenharmony_ci ArgumentsOrder order_ {ArgumentsOrder::DEFAULT_ORDER}; 3544514f5e3Sopenharmony_ci VariableType returnType_ {VariableType::VOID()}; 3554514f5e3Sopenharmony_ci std::unique_ptr<std::vector<VariableType>> paramsType_ {nullptr}; 3564514f5e3Sopenharmony_ci std::unique_ptr<std::vector<ParamAttr>> paramsAttr_ {nullptr}; 3574514f5e3Sopenharmony_ci TargetConstructor constructor_ {nullptr}; 3584514f5e3Sopenharmony_ci uint64_t kind_ {0}; 3594514f5e3Sopenharmony_ci}; 3604514f5e3Sopenharmony_ci 3614514f5e3Sopenharmony_ci#define EXPLICIT_CALL_SIGNATURE_LIST(V) \ 3624514f5e3Sopenharmony_ci V(Add) \ 3634514f5e3Sopenharmony_ci V(Sub) \ 3644514f5e3Sopenharmony_ci V(Mul) \ 3654514f5e3Sopenharmony_ci V(MulGCTest) \ 3664514f5e3Sopenharmony_ci V(Div) \ 3674514f5e3Sopenharmony_ci V(Mod) \ 3684514f5e3Sopenharmony_ci V(TypeOf) \ 3694514f5e3Sopenharmony_ci V(Equal) \ 3704514f5e3Sopenharmony_ci V(NotEqual) \ 3714514f5e3Sopenharmony_ci V(StrictEqual) \ 3724514f5e3Sopenharmony_ci V(StrictNotEqual) \ 3734514f5e3Sopenharmony_ci V(Less) \ 3744514f5e3Sopenharmony_ci V(LessEq) \ 3754514f5e3Sopenharmony_ci V(Greater) \ 3764514f5e3Sopenharmony_ci V(GreaterEq) \ 3774514f5e3Sopenharmony_ci V(Shl) \ 3784514f5e3Sopenharmony_ci V(Shr) \ 3794514f5e3Sopenharmony_ci V(Ashr) \ 3804514f5e3Sopenharmony_ci V(And) \ 3814514f5e3Sopenharmony_ci V(Or) \ 3824514f5e3Sopenharmony_ci V(Xor) \ 3834514f5e3Sopenharmony_ci V(Instanceof) \ 3844514f5e3Sopenharmony_ci V(Inc) \ 3854514f5e3Sopenharmony_ci V(Dec) \ 3864514f5e3Sopenharmony_ci V(Neg) \ 3874514f5e3Sopenharmony_ci V(Not) \ 3884514f5e3Sopenharmony_ci V(ToBooleanTrue) \ 3894514f5e3Sopenharmony_ci V(ToBooleanFalse) \ 3904514f5e3Sopenharmony_ci V(SetPropertyByName) \ 3914514f5e3Sopenharmony_ci V(DeprecatedSetPropertyByName) \ 3924514f5e3Sopenharmony_ci V(SetPropertyByNameWithOwn) \ 3934514f5e3Sopenharmony_ci V(SetPropertyByValue) \ 3944514f5e3Sopenharmony_ci V(DeprecatedSetPropertyByValue) \ 3954514f5e3Sopenharmony_ci V(TryLdGlobalByName) \ 3964514f5e3Sopenharmony_ci V(TryStGlobalByName) \ 3974514f5e3Sopenharmony_ci V(LdGlobalVar) \ 3984514f5e3Sopenharmony_ci V(StGlobalVar) \ 3994514f5e3Sopenharmony_ci V(StOwnByIndex) \ 4004514f5e3Sopenharmony_ci V(StOwnByValue) \ 4014514f5e3Sopenharmony_ci V(StOwnByName) \ 4024514f5e3Sopenharmony_ci V(StOwnByValueWithNameSet) \ 4034514f5e3Sopenharmony_ci V(StOwnByNameWithNameSet) \ 4044514f5e3Sopenharmony_ci V(StObjByIndex) \ 4054514f5e3Sopenharmony_ci V(LdObjByIndex) \ 4064514f5e3Sopenharmony_ci V(SetPropertyByValueWithOwn) \ 4074514f5e3Sopenharmony_ci V(GetPropertyByName) \ 4084514f5e3Sopenharmony_ci V(DeprecatedGetPropertyByName) \ 4094514f5e3Sopenharmony_ci V(GetPropertyByIndex) \ 4104514f5e3Sopenharmony_ci V(SetPropertyByIndex) \ 4114514f5e3Sopenharmony_ci V(SetPropertyByIndexWithOwn) \ 4124514f5e3Sopenharmony_ci V(GetPropertyByValue) \ 4134514f5e3Sopenharmony_ci V(DeprecatedGetPropertyByValue) \ 4144514f5e3Sopenharmony_ci V(TryLoadICByName) \ 4154514f5e3Sopenharmony_ci V(TryLoadICByValue) \ 4164514f5e3Sopenharmony_ci V(TryStoreICByName) \ 4174514f5e3Sopenharmony_ci V(TryStoreICByValue) \ 4184514f5e3Sopenharmony_ci V(SetValueWithBarrier) \ 4194514f5e3Sopenharmony_ci V(SetNonSValueWithBarrier) \ 4204514f5e3Sopenharmony_ci V(SetValueWithEdenBarrier) \ 4214514f5e3Sopenharmony_ci V(SetNonSValueWithEdenBarrier) \ 4224514f5e3Sopenharmony_ci V(SetSValueWithBarrier) \ 4234514f5e3Sopenharmony_ci V(NewLexicalEnv) \ 4244514f5e3Sopenharmony_ci V(CopyRestArgs) \ 4254514f5e3Sopenharmony_ci V(GetUnmappedArgs) \ 4264514f5e3Sopenharmony_ci V(GetCallSpreadArgs) \ 4274514f5e3Sopenharmony_ci V(NewThisObjectChecked) \ 4284514f5e3Sopenharmony_ci V(ConstructorCheck) \ 4294514f5e3Sopenharmony_ci V(CreateEmptyArray) \ 4304514f5e3Sopenharmony_ci V(CreateArrayWithBuffer) \ 4314514f5e3Sopenharmony_ci V(NewJSObject) \ 4324514f5e3Sopenharmony_ci V(GetTaggedArrayPtrTest) \ 4334514f5e3Sopenharmony_ci V(BytecodeHandler) \ 4344514f5e3Sopenharmony_ci V(Builtins) \ 4354514f5e3Sopenharmony_ci V(BuiltinsWithArgv) \ 4364514f5e3Sopenharmony_ci V(BytecodeDebuggerHandler) \ 4374514f5e3Sopenharmony_ci V(CallRuntime) \ 4384514f5e3Sopenharmony_ci V(AsmInterpreterEntry) \ 4394514f5e3Sopenharmony_ci V(CallArg0AndCheckToBaseline) \ 4404514f5e3Sopenharmony_ci V(CallArg1AndCheckToBaseline) \ 4414514f5e3Sopenharmony_ci V(CallArgs2AndCheckToBaseline) \ 4424514f5e3Sopenharmony_ci V(CallArgs3AndCheckToBaseline) \ 4434514f5e3Sopenharmony_ci V(CallThisArg0AndCheckToBaseline) \ 4444514f5e3Sopenharmony_ci V(CallThisArg1AndCheckToBaseline) \ 4454514f5e3Sopenharmony_ci V(CallThisArgs2AndCheckToBaseline) \ 4464514f5e3Sopenharmony_ci V(CallThisArgs3AndCheckToBaseline) \ 4474514f5e3Sopenharmony_ci V(CallRangeAndCheckToBaseline) \ 4484514f5e3Sopenharmony_ci V(CallNewAndCheckToBaseline) \ 4494514f5e3Sopenharmony_ci V(SuperCallAndCheckToBaseline) \ 4504514f5e3Sopenharmony_ci V(CallThisRangeAndCheckToBaseline) \ 4514514f5e3Sopenharmony_ci V(GeneratorReEnterAsmInterp) \ 4524514f5e3Sopenharmony_ci V(CallRuntimeWithArgv) \ 4534514f5e3Sopenharmony_ci V(OptimizedCallAndPushArgv) \ 4544514f5e3Sopenharmony_ci V(OptimizedFastCallAndPushArgv) \ 4554514f5e3Sopenharmony_ci V(AOTCallToAsmInterBridge) \ 4564514f5e3Sopenharmony_ci V(FastCallToAsmInterBridge) \ 4574514f5e3Sopenharmony_ci V(PushCallArg0AndDispatch) \ 4584514f5e3Sopenharmony_ci V(PushCallArgsAndDispatchNative) \ 4594514f5e3Sopenharmony_ci V(PushCallArg1AndDispatch) \ 4604514f5e3Sopenharmony_ci V(PushCallArgs2AndDispatch) \ 4614514f5e3Sopenharmony_ci V(PushCallArgs3AndDispatch) \ 4624514f5e3Sopenharmony_ci V(PushCallRangeAndDispatch) \ 4634514f5e3Sopenharmony_ci V(PushCallRangeAndDispatchNative) \ 4644514f5e3Sopenharmony_ci V(PushCallThisRangeAndDispatch) \ 4654514f5e3Sopenharmony_ci V(PushCallThisArg0AndDispatch) \ 4664514f5e3Sopenharmony_ci V(PushCallThisArg1AndDispatch) \ 4674514f5e3Sopenharmony_ci V(PushCallThisArgs2AndDispatch) \ 4684514f5e3Sopenharmony_ci V(PushCallThisArgs3AndDispatch) \ 4694514f5e3Sopenharmony_ci V(PushCallNewAndDispatchNative) \ 4704514f5e3Sopenharmony_ci V(PushNewTargetAndDispatchNative) \ 4714514f5e3Sopenharmony_ci V(PushCallNewAndDispatch) \ 4724514f5e3Sopenharmony_ci V(PushSuperCallAndDispatch) \ 4734514f5e3Sopenharmony_ci V(CallGetter) \ 4744514f5e3Sopenharmony_ci V(CallSetter) \ 4754514f5e3Sopenharmony_ci V(CallContainersArgs2) \ 4764514f5e3Sopenharmony_ci V(CallContainersArgs3) \ 4774514f5e3Sopenharmony_ci V(JSCallWithArgV) \ 4784514f5e3Sopenharmony_ci V(JSFastCallWithArgV) \ 4794514f5e3Sopenharmony_ci V(JSFastCallWithArgVAndPushArgv) \ 4804514f5e3Sopenharmony_ci V(JSCallWithArgVAndPushArgv) \ 4814514f5e3Sopenharmony_ci V(SuperCallWithArgV) \ 4824514f5e3Sopenharmony_ci V(ResumeRspAndDispatch) \ 4834514f5e3Sopenharmony_ci V(ResumeRspAndReturn) \ 4844514f5e3Sopenharmony_ci V(ResumeRspAndReturnBaseline) \ 4854514f5e3Sopenharmony_ci V(ResumeCaughtFrameAndDispatch) \ 4864514f5e3Sopenharmony_ci V(ResumeUncaughtFrameAndReturn) \ 4874514f5e3Sopenharmony_ci V(ResumeRspAndRollback) \ 4884514f5e3Sopenharmony_ci V(StringsAreEquals) \ 4894514f5e3Sopenharmony_ci V(BigIntEquals) \ 4904514f5e3Sopenharmony_ci V(BigIntSameValueZero) \ 4914514f5e3Sopenharmony_ci V(CallBigIntAsIntN) \ 4924514f5e3Sopenharmony_ci V(CallBigIntAsUintN) \ 4934514f5e3Sopenharmony_ci V(Dump) \ 4944514f5e3Sopenharmony_ci V(DebugDump) \ 4954514f5e3Sopenharmony_ci V(DumpWithHint) \ 4964514f5e3Sopenharmony_ci V(DebugDumpWithHint) \ 4974514f5e3Sopenharmony_ci V(DebugPrint) \ 4984514f5e3Sopenharmony_ci V(DebugPrintCustom) \ 4994514f5e3Sopenharmony_ci V(DebugPrintInstruction) \ 5004514f5e3Sopenharmony_ci V(DebugOsrEntry) \ 5014514f5e3Sopenharmony_ci V(Comment) \ 5024514f5e3Sopenharmony_ci V(FatalPrint) \ 5034514f5e3Sopenharmony_ci V(FatalPrintCustom) \ 5044514f5e3Sopenharmony_ci V(GetActualArgvNoGC) \ 5054514f5e3Sopenharmony_ci V(InsertNewToEdenRSet) \ 5064514f5e3Sopenharmony_ci V(InsertOldToNewRSet) \ 5074514f5e3Sopenharmony_ci V(InsertLocalToShareRSet) \ 5084514f5e3Sopenharmony_ci V(SetBitAtomic) \ 5094514f5e3Sopenharmony_ci V(DoubleToInt) \ 5104514f5e3Sopenharmony_ci V(DoubleToLength) \ 5114514f5e3Sopenharmony_ci V(FloatMod) \ 5124514f5e3Sopenharmony_ci V(FloatAcos) \ 5134514f5e3Sopenharmony_ci V(FloatAcosh) \ 5144514f5e3Sopenharmony_ci V(FloatAsin) \ 5154514f5e3Sopenharmony_ci V(FloatAsinh) \ 5164514f5e3Sopenharmony_ci V(FloatAtan) \ 5174514f5e3Sopenharmony_ci V(FloatAtan2) \ 5184514f5e3Sopenharmony_ci V(FloatAtanh) \ 5194514f5e3Sopenharmony_ci V(FloatCos) \ 5204514f5e3Sopenharmony_ci V(FloatCosh) \ 5214514f5e3Sopenharmony_ci V(FloatSin) \ 5224514f5e3Sopenharmony_ci V(FloatSinh) \ 5234514f5e3Sopenharmony_ci V(FloatTan) \ 5244514f5e3Sopenharmony_ci V(FloatTanh) \ 5254514f5e3Sopenharmony_ci V(FloatTrunc) \ 5264514f5e3Sopenharmony_ci V(FloatLog) \ 5274514f5e3Sopenharmony_ci V(FloatLog2) \ 5284514f5e3Sopenharmony_ci V(FloatLog10) \ 5294514f5e3Sopenharmony_ci V(FloatLog1p) \ 5304514f5e3Sopenharmony_ci V(FloatExp) \ 5314514f5e3Sopenharmony_ci V(FloatExpm1) \ 5324514f5e3Sopenharmony_ci V(FloatCbrt) \ 5334514f5e3Sopenharmony_ci V(FloatClz32) \ 5344514f5e3Sopenharmony_ci V(FloatFloor) \ 5354514f5e3Sopenharmony_ci V(FloatPow) \ 5364514f5e3Sopenharmony_ci V(FloatCeil) \ 5374514f5e3Sopenharmony_ci V(CallDateNow) \ 5384514f5e3Sopenharmony_ci V(NumberIsFinite) \ 5394514f5e3Sopenharmony_ci V(FindElementWithCache) \ 5404514f5e3Sopenharmony_ci V(UpdateFieldType) \ 5414514f5e3Sopenharmony_ci V(MarkingBarrier) \ 5424514f5e3Sopenharmony_ci V(MarkingBarrierWithEden) \ 5434514f5e3Sopenharmony_ci V(SharedGCMarkingBarrier) \ 5444514f5e3Sopenharmony_ci V(StoreBarrier) \ 5454514f5e3Sopenharmony_ci V(CallArg0) \ 5464514f5e3Sopenharmony_ci V(CallArg1) \ 5474514f5e3Sopenharmony_ci V(CallArgs2) \ 5484514f5e3Sopenharmony_ci V(CallArgs3) \ 5494514f5e3Sopenharmony_ci V(CallThisRange) \ 5504514f5e3Sopenharmony_ci V(CallRange) \ 5514514f5e3Sopenharmony_ci V(JSCall) \ 5524514f5e3Sopenharmony_ci V(JSOptimizedCall) \ 5534514f5e3Sopenharmony_ci V(JSOptimizedFastCall) \ 5544514f5e3Sopenharmony_ci V(JSFunctionEntry) \ 5554514f5e3Sopenharmony_ci V(OptimizedFastCallEntry) \ 5564514f5e3Sopenharmony_ci V(JSProxyCallInternalWithArgV) \ 5574514f5e3Sopenharmony_ci V(CreateArrayFromList) \ 5584514f5e3Sopenharmony_ci V(JSObjectGetMethod) \ 5594514f5e3Sopenharmony_ci V(JsProxyCallInternal) \ 5604514f5e3Sopenharmony_ci V(JsBoundCallInternal) \ 5614514f5e3Sopenharmony_ci V(DeoptHandlerAsm) \ 5624514f5e3Sopenharmony_ci V(JSCallNew) \ 5634514f5e3Sopenharmony_ci V(CallOptimized) \ 5644514f5e3Sopenharmony_ci V(TimeClip) \ 5654514f5e3Sopenharmony_ci V(SetDateValues) \ 5664514f5e3Sopenharmony_ci V(CallReturnWithArgv) \ 5674514f5e3Sopenharmony_ci V(StartCallTimer) \ 5684514f5e3Sopenharmony_ci V(EndCallTimer) \ 5694514f5e3Sopenharmony_ci V(GetSingleCharCodeByIndex) \ 5704514f5e3Sopenharmony_ci V(CreateStringBySingleCharCode) \ 5714514f5e3Sopenharmony_ci V(FastStringEqual) \ 5724514f5e3Sopenharmony_ci V(FastStringAdd) \ 5734514f5e3Sopenharmony_ci V(DeleteObjectProperty) \ 5744514f5e3Sopenharmony_ci V(Getpropiterator) \ 5754514f5e3Sopenharmony_ci V(Getnextpropname) \ 5764514f5e3Sopenharmony_ci V(CreateJSSetIterator) \ 5774514f5e3Sopenharmony_ci V(CreateJSMapIterator) \ 5784514f5e3Sopenharmony_ci V(JSMapGet) \ 5794514f5e3Sopenharmony_ci V(JSMapHas) \ 5804514f5e3Sopenharmony_ci V(JSMapKeys) \ 5814514f5e3Sopenharmony_ci V(JSMapValues) \ 5824514f5e3Sopenharmony_ci V(JSSetHas) \ 5834514f5e3Sopenharmony_ci V(JSSetAdd) \ 5844514f5e3Sopenharmony_ci V(JSMapDelete) \ 5854514f5e3Sopenharmony_ci V(JSSetDelete) \ 5864514f5e3Sopenharmony_ci V(CreateJSTypedArrayEntries) \ 5874514f5e3Sopenharmony_ci V(CreateJSTypedArrayKeys) \ 5884514f5e3Sopenharmony_ci V(CreateJSTypedArrayValues) \ 5894514f5e3Sopenharmony_ci V(JSSetEntries) \ 5904514f5e3Sopenharmony_ci V(JSHClassFindProtoTransitions) \ 5914514f5e3Sopenharmony_ci V(NumberHelperStringToDouble) \ 5924514f5e3Sopenharmony_ci V(GetStringToListCacheArray) \ 5934514f5e3Sopenharmony_ci V(FastArraySort) \ 5944514f5e3Sopenharmony_ci V(FastArraySortString) \ 5954514f5e3Sopenharmony_ci V(StringToNumber) \ 5964514f5e3Sopenharmony_ci V(StringGetStart) \ 5974514f5e3Sopenharmony_ci V(StringGetEnd) \ 5984514f5e3Sopenharmony_ci V(ArrayTrim) \ 5994514f5e3Sopenharmony_ci V(OptimizedFastJmp) \ 6004514f5e3Sopenharmony_ci V(CopyTypedArrayBuffer) \ 6014514f5e3Sopenharmony_ci V(CallArg0AndDispatchFromBaseline) \ 6024514f5e3Sopenharmony_ci V(CallArg1AndDispatchFromBaseline) \ 6034514f5e3Sopenharmony_ci V(CallArgs2AndDispatchFromBaseline) \ 6044514f5e3Sopenharmony_ci V(CallArgs3AndDispatchFromBaseline) \ 6054514f5e3Sopenharmony_ci V(CallThisArg0AndDispatchFromBaseline) \ 6064514f5e3Sopenharmony_ci V(CallThisArg1AndDispatchFromBaseline) \ 6074514f5e3Sopenharmony_ci V(CallThisArgs2AndDispatchFromBaseline) \ 6084514f5e3Sopenharmony_ci V(CallThisArgs3AndDispatchFromBaseline) \ 6094514f5e3Sopenharmony_ci V(CallRangeAndDispatchFromBaseline) \ 6104514f5e3Sopenharmony_ci V(CallNewAndDispatchFromBaseline) \ 6114514f5e3Sopenharmony_ci V(SuperCallAndDispatchFromBaseline) \ 6124514f5e3Sopenharmony_ci V(CallThisRangeAndDispatchFromBaseline) \ 6134514f5e3Sopenharmony_ci V(CallArg0AndCheckToBaselineFromBaseline) \ 6144514f5e3Sopenharmony_ci V(CallArg1AndCheckToBaselineFromBaseline) \ 6154514f5e3Sopenharmony_ci V(CallArgs2AndCheckToBaselineFromBaseline) \ 6164514f5e3Sopenharmony_ci V(CallArgs3AndCheckToBaselineFromBaseline) \ 6174514f5e3Sopenharmony_ci V(CallThisArg0AndCheckToBaselineFromBaseline) \ 6184514f5e3Sopenharmony_ci V(CallThisArg1AndCheckToBaselineFromBaseline) \ 6194514f5e3Sopenharmony_ci V(CallThisArgs2AndCheckToBaselineFromBaseline) \ 6204514f5e3Sopenharmony_ci V(CallThisArgs3AndCheckToBaselineFromBaseline) \ 6214514f5e3Sopenharmony_ci V(CallRangeAndCheckToBaselineFromBaseline) \ 6224514f5e3Sopenharmony_ci V(CallNewAndCheckToBaselineFromBaseline) \ 6234514f5e3Sopenharmony_ci V(SuperCallAndCheckToBaselineFromBaseline) \ 6244514f5e3Sopenharmony_ci V(CallThisRangeAndCheckToBaselineFromBaseline) \ 6254514f5e3Sopenharmony_ci V(SameValue) \ 6264514f5e3Sopenharmony_ci V(GetBaselineBuiltinFp) \ 6274514f5e3Sopenharmony_ci V(StringIteratorNext) \ 6284514f5e3Sopenharmony_ci V(Definefunc) \ 6294514f5e3Sopenharmony_ci V(DefineField) \ 6304514f5e3Sopenharmony_ci V(ConvertCharToInt32) \ 6314514f5e3Sopenharmony_ci V(ConvertCharToDouble) \ 6324514f5e3Sopenharmony_ci V(ASMFastWriteBarrier) \ 6334514f5e3Sopenharmony_ci V(ASMWriteBarrierWithEden) \ 6344514f5e3Sopenharmony_ci V(VerifyBarrier) \ 6354514f5e3Sopenharmony_ci V(IsFastRegExp) 6364514f5e3Sopenharmony_ci 6374514f5e3Sopenharmony_ci#define DECL_CALL_SIGNATURE(name) \ 6384514f5e3Sopenharmony_ciclass name##CallSignature final { \ 6394514f5e3Sopenharmony_ci public: \ 6404514f5e3Sopenharmony_ci static void Initialize(CallSignature *descriptor); \ 6414514f5e3Sopenharmony_ci }; 6424514f5e3Sopenharmony_ciEXPLICIT_CALL_SIGNATURE_LIST(DECL_CALL_SIGNATURE) 6434514f5e3Sopenharmony_ci 6444514f5e3Sopenharmony_ci// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 6454514f5e3Sopenharmony_ci#define DEF_CALL_SIGNATURE(name) \ 6464514f5e3Sopenharmony_ci void name##CallSignature::Initialize([[maybe_unused]] CallSignature *callSign) 6474514f5e3Sopenharmony_ci} // namespace panda::ecmascript::kungfu 6484514f5e3Sopenharmony_ci#endif // ECMASCRIPT_COMPILER_CALL_SIGNATURE_H 649