* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ecmascript/compiler/call_signature.h"
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow"
#pragma clang diagnostic ignored "-Wunused-parameter"
#elif defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
#if defined(__clang__)
#pragma clang diagnostic pop
#elif defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
namespace panda::ecmascript::kungfu {
#define BINARY_CALL_SIGNATURE(name) \
\
CallSignature signature(#name, 0, 3, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
\
std::array<VariableType, 3> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
#define BINARY_CALL_SIGNATURE_WITH_GLOBALENV(name) \
\
CallSignature signature(#name, 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
\
std::array<VariableType, 4> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY() \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
DEF_CALL_SIGNATURE(Add)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Add)
}
DEF_CALL_SIGNATURE(Sub)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Sub)
}
DEF_CALL_SIGNATURE(Mul)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Mul)
}
DEF_CALL_SIGNATURE(Div)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Div)
}
DEF_CALL_SIGNATURE(Mod)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Mod)
}
DEF_CALL_SIGNATURE(Equal)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Equal)
}
DEF_CALL_SIGNATURE(NotEqual)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(NotEqual)
}
DEF_CALL_SIGNATURE(StrictEqual)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(StrictEqual)
}
DEF_CALL_SIGNATURE(StrictNotEqual)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(StrictNotEqual)
}
DEF_CALL_SIGNATURE(Less)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Less)
}
DEF_CALL_SIGNATURE(LessEq)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(LessEq)
}
DEF_CALL_SIGNATURE(Greater)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Greater)
}
DEF_CALL_SIGNATURE(GreaterEq)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(GreaterEq)
}
DEF_CALL_SIGNATURE(Shl)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Shl)
}
DEF_CALL_SIGNATURE(Shr)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Shr)
}
DEF_CALL_SIGNATURE(Ashr)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Ashr)
}
DEF_CALL_SIGNATURE(And)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(And)
}
DEF_CALL_SIGNATURE(Or)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Or)
}
DEF_CALL_SIGNATURE(Xor)
{
BINARY_CALL_SIGNATURE_WITH_GLOBALENV(Xor)
}
#ifndef NDEBUG
DEF_CALL_SIGNATURE(MulGCTest)
{
CallSignature MulGC("MulGCTest", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = MulGC;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::INT64(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
#else
DEF_CALL_SIGNATURE(MulGCTest) {}
#endif
#define UNARY_CALL_SIGNATURE(name) \
\
CallSignature signature(#name, 0, 2, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
\
std::array<VariableType, 2> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
#define UNARY_CALL_SIGNATURE_WITH_GLOBALENV(name) \
constexpr size_t paramCount = 3; \
CallSignature signature(#name, 0, paramCount, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
std::array<VariableType, paramCount> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY() \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
DEF_CALL_SIGNATURE(Inc)
{
UNARY_CALL_SIGNATURE(Inc)
}
DEF_CALL_SIGNATURE(Dec)
{
UNARY_CALL_SIGNATURE(Dec)
}
DEF_CALL_SIGNATURE(Neg)
{
UNARY_CALL_SIGNATURE(Neg)
}
DEF_CALL_SIGNATURE(Not)
{
UNARY_CALL_SIGNATURE(Not)
}
DEF_CALL_SIGNATURE(ToBooleanTrue)
{
UNARY_CALL_SIGNATURE(ToBooleanTrue)
}
DEF_CALL_SIGNATURE(ToBooleanFalse)
{
UNARY_CALL_SIGNATURE(ToBooleanFalse)
}
#define TWO_ARGS_CALL_SIGNATURE(name, retType) \
\
CallSignature signature(#name, 0, 2, \
ArgumentsOrder::DEFAULT_ORDER, retType); \
*callSign = signature; \
\
std::array<VariableType, 2> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
#define THREE_ARGS_CALL_SIGNATURE(name, retType) \
\
CallSignature signature(#name, 0, 3, \
ArgumentsOrder::DEFAULT_ORDER, retType); \
*callSign = signature; \
\
std::array<VariableType, 3> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
#define FOUR_ARGS_CALL_SIGNATURE(name, retType) \
\
CallSignature signature(#name, 0, 4, \
ArgumentsOrder::DEFAULT_ORDER, retType); \
*callSign = signature; \
\
std::array<VariableType, 4> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
#define FIVE_ARGS_CALL_SIGNATURE(name, retType) \
\
CallSignature signature(#name, 0, 5, \
ArgumentsOrder::DEFAULT_ORDER, retType); \
*callSign = signature; \
\
std::array<VariableType, 5> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
DEF_CALL_SIGNATURE(TypeOf)
{
TWO_ARGS_CALL_SIGNATURE(TypeOf, VariableType::JS_POINTER())
}
DEF_CALL_SIGNATURE(JSTaggedValueHasProperty)
{
FOUR_ARGS_CALL_SIGNATURE(JSTaggedValueHasProperty, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(SetPropertyByName)
{
constexpr size_t paramCount = 7;
CallSignature setPropertyByName("SetPropertyByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(DeprecatedSetPropertyByName)
{
constexpr size_t paramCount = 5;
CallSignature setPropertyByName("DeprecatedSetPropertyByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GetPropertyByNameWithMega)
{
constexpr size_t paramCount = 8;
CallSignature getPropertyByName("GetPropertyByNameWithMega", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SetPropertyByNameWithMega)
{
constexpr size_t paramCount = 9;
CallSignature setPropertyByName("SetPropertyByNameWithMega", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SetPropertyByNameWithOwn)
{
constexpr size_t paramCount = 5;
CallSignature setPropertyByNameWithOwn("SetPropertyByNameWithOwn", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByNameWithOwn;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SetPropertyByValue)
{
constexpr size_t paramCount = 7;
CallSignature setPropertyByName("SetPropertyByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(Definefunc)
{
constexpr size_t paramCount = 7;
CallSignature definefunc("Definefunc", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = definefunc;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
#define JIT_DEFINEFUNC_SIGNATURE(name) \
DEF_CALL_SIGNATURE(Define##name##ForJit) \
{ \
\
CallSignature definefunc("Define" #name "ForJit", 0, 7, ArgumentsOrder::DEFAULT_ORDER, \
VariableType::JS_ANY()); \
*callSign = definefunc; \
\
std::array<VariableType, 7> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::INT32(), \
VariableType::JS_ANY(), \
VariableType::INT32(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv); \
}
JIT_DEFINEFUNC_SIGNATURE(NormalFunc)
JIT_DEFINEFUNC_SIGNATURE(ArrowFunc)
JIT_DEFINEFUNC_SIGNATURE(BaseConstructor)
DEF_CALL_SIGNATURE(DefineField)
{
FIVE_ARGS_CALL_SIGNATURE(DefineField, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(ConvertCharToInt32)
{
constexpr size_t paramCount = 3;
CallSignature convertCharToInt32("ConvertCharToInt32", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::INT32());
*callSign = convertCharToInt32;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(ConvertCharToDouble)
{
constexpr size_t paramCount = 3;
CallSignature convertCharToDouble("ConvertCharToDouble", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::FLOAT64());
*callSign = convertCharToDouble;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(ConvertCharToString)
{
constexpr size_t paramCount = 3;
CallSignature temp("ConvertCharToString", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = temp;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(DeprecatedSetPropertyByValue)
{
constexpr size_t paramCount = 5;
CallSignature setPropertyByName("DeprecatedSetPropertyByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SetPropertyByValueWithOwn)
{
constexpr size_t paramCount = 5;
CallSignature setPropertyByValueWithOwn("SetPropertyByValueWithOwn", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByValueWithOwn;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GetPropertyByName)
{
constexpr size_t paramCount = 6;
CallSignature getPropertyByName("GetPropertyByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(IsIn)
{
FOUR_ARGS_CALL_SIGNATURE(IsIn, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(Instanceof)
{
constexpr size_t paramCount = 6;
CallSignature instanceof ("Instanceof", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = instanceof;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(OrdinaryHasInstance)
{
FOUR_ARGS_CALL_SIGNATURE(OrdinaryHasInstance, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(DeprecatedGetPropertyByName)
{
constexpr size_t paramCount = 4;
CallSignature getPropertyByName("DeprecatedGetPropertyByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getPropertyByName;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_POINTER(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(TryLdGlobalByName)
{
constexpr size_t paramCount = 5;
CallSignature signature("TryLdGlobalByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(TryStGlobalByName)
{
constexpr size_t paramCount = 6;
CallSignature signature("TryStGlobalByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(LdGlobalVar)
{
constexpr size_t paramCount = 5;
CallSignature signature("LdGlobalVar", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StGlobalVar)
{
constexpr size_t paramCount = 6;
CallSignature signature("StGlobalVar", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StOwnByValue)
{
constexpr size_t paramCount = 5;
CallSignature signature("StOwnByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StOwnByIndex)
{
constexpr size_t paramCount = 5;
CallSignature signature("StOwnByIndex", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StOwnByName)
{
constexpr size_t paramCount = 5;
CallSignature signature("StOwnByName", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StOwnByValueWithNameSet)
{
constexpr size_t paramCount = 5;
CallSignature signature("StOwnByValueWithNameSet", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StOwnByNameWithNameSet)
{
constexpr size_t paramCount = 5;
CallSignature signature("StOwnByNameWithNameSet", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StObjByIndex)
{
constexpr size_t paramCount = 5;
CallSignature signature("StObjByIndex", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(LdObjByIndex)
{
constexpr size_t paramCount = 4;
CallSignature signature("LdObjByIndex", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GetPropertyByIndex)
{
constexpr size_t paramCount = 4;
CallSignature getPropertyByIndex("GetPropertyByIndex", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getPropertyByIndex;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SetPropertyByIndex)
{
constexpr size_t paramCount = 5;
CallSignature setPropertyByIndex("SetPropertyByIndex", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByIndex;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SetPropertyByIndexWithOwn)
{
constexpr size_t paramCount = 5;
CallSignature setPropertyByIndexWithOwn("SetPropertyByIndexWithOwn", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = setPropertyByIndexWithOwn;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GetPropertyByValue)
{
constexpr size_t paramCount = 6;
CallSignature getPropertyByValue("GetPropertyByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getPropertyByValue;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(DeprecatedGetPropertyByValue)
{
constexpr size_t paramCount = 4;
CallSignature getPropertyByValue("DeprecatedGetPropertyByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getPropertyByValue;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(TryLoadICByName)
{
FOUR_ARGS_CALL_SIGNATURE(TryLoadICByName, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(TryLoadICByValue)
{
constexpr size_t paramCount = 6;
CallSignature tryLoadICByValue("TryLoadICByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = tryLoadICByValue;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(TryStoreICByName)
{
CallSignature tryStoreICByName("TryStoreICByName", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = tryStoreICByName;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(TryStoreICByValue)
{
constexpr size_t paramCount = 7;
CallSignature tryStoreICByValue("TryStoreICByValue", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = tryStoreICByValue;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
#define SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(name) \
\
CallSignature signature(#name, 0, 5, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID()); \
*callSign = signature; \
\
std::array<VariableType, 6> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_POINTER(), \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::INT64(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetGCLeafFunction(true); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv); \
\
std::vector<CallSignature::ParamAttr> paramAttrs = { \
CallSignature::ParamAttr::NoAttr, \
CallSignature::ParamAttr::NoAttr, \
CallSignature::ParamAttr::NoAttr, \
CallSignature::ParamAttr::NoAttr, \
CallSignature::ParamAttr::Dead, \
}; \
callSign->SetParamAttr(std::move(paramAttrs))
DEF_CALL_SIGNATURE(SetValueWithBarrier)
{
SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetValueWithBarrier);
}
DEF_CALL_SIGNATURE(SetNonSValueWithBarrier)
{
SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetNonSValueWithBarrier);
}
DEF_CALL_SIGNATURE(SetSValueWithBarrier)
{
SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(SetSValueWithBarrier);
}
DEF_CALL_SIGNATURE(ASMFastWriteBarrier)
{
SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(ASMFastWriteBarrier);
callSign->SetTargetKind(CallSignature::TargetKind::ASM_CALL_BARRIER_STUB);
}
DEF_CALL_SIGNATURE(VerifyBarrier)
{
SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(VerifyBarrier);
}
DEF_CALL_SIGNATURE(CMCSetValueWithBarrier)
{
SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON(CMCSetValueWithBarrier);
}
#undef SETVALUEBARRIER_CALL_ARGS_SIGNATURE_COMMON
DEF_CALL_SIGNATURE(NewThisObjectChecked)
{
TWO_ARGS_CALL_SIGNATURE(NewThisObjectChecked, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(ConstructorCheck)
{
FOUR_ARGS_CALL_SIGNATURE(ConstructorCheck, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(CreateEmptyArray)
{
TWO_ARGS_CALL_SIGNATURE(CreateEmptyArray, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(CreateArrayWithBuffer)
{
constexpr size_t paramCount = 5;
CallSignature signature("CreateArrayWithBuffer", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(CreateObjectHavingMethod)
{
THREE_ARGS_CALL_SIGNATURE(CreateObjectHavingMethod, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(CopyRestArgs)
{
constexpr size_t paramCount = 6;
CallSignature signature("CopyRestArgs", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(NewJSObject)
{
CallSignature signature("NewJSObject", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(FastNewThisObject)
{
TWO_ARGS_CALL_SIGNATURE(FastNewThisObject, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(FastSuperAllocateThis)
{
THREE_ARGS_CALL_SIGNATURE(FastSuperAllocateThis, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(NewLexicalEnv)
{
CallSignature signature("NewLexicalEnv", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GetUnmappedArgs)
{
constexpr size_t paramCount = 5;
CallSignature signature("GetUnmappedArgs", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GetCallSpreadArgs)
{
THREE_ARGS_CALL_SIGNATURE(GetCallSpreadArgs, VariableType::JS_ANY());
}
DEF_CALL_SIGNATURE(GetTaggedArrayPtrTest)
{
TWO_ARGS_CALL_SIGNATURE(GetTaggedArrayPtrTest, VariableType::JS_POINTER());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(Builtins)
{
CallSignature builtins("Builtins", 0, 9,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = builtins;
std::array<VariableType, 9> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(false);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::BUILTINS_STUB);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(BuiltinsWithArgv)
{
CallSignature builtinsWtihArgv("BuiltinsWithArgv", 0, 7,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = builtinsWtihArgv;
std::array<VariableType, 7> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::BUILTINS_WITH_ARGV_STUB);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(BytecodeHandler)
{
CallSignature bytecodeHandler("BytecodeHandler", 0, 7,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = bytecodeHandler;
std::array<VariableType, 7> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::BYTECODE_HANDLER);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(BytecodeDebuggerHandler)
{
CallSignature bytecodeHandler("BytecodeDebuggerHandler", 0, 7,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = bytecodeHandler;
std::array<VariableType, 7> params = { VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32() };
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::BYTECODE_DEBUGGER_HANDLER);
}
DEF_CALL_SIGNATURE(CallRuntime)
{
CallSignature runtimeCallTrampoline("CallRuntime", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = runtimeCallTrampoline;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::INT64(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(AsmInterpreterEntry)
{
CallSignature asmInterpreterEntry("AsmInterpreterEntry", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = asmInterpreterEntry;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
#define BASELINE_CALL_ARGS_SIGNATURE_COMMON(name) \
\
CallSignature signature(#name, 0, 1, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
std::array<VariableType, 1> params = { \
VariableType::NATIVE_POINTER(), \
}; \
callSign->SetVariadicArgs(true); \
callSign->SetParameters(params.data()); \
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
DEF_CALL_SIGNATURE(CallArg0AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallArg1AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallRangeAndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallNewAndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndCheckToBaseline)
}
DEF_CALL_SIGNATURE(SuperCallAndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndCheckToBaseline)
}
DEF_CALL_SIGNATURE(CallArg0AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallArg1AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallArgs2AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallArgs3AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArg0AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArg1AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArgs2AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArgs3AndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallRangeAndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallNewAndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(SuperCallAndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisRangeAndDispatchFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndDispatchFromBaseline)
}
DEF_CALL_SIGNATURE(CallArg0AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg0AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallArg1AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArg1AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallArgs2AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs2AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallArgs3AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallArgs3AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArg0AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg0AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArg1AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArg1AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArgs2AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs2AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisArgs3AndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisArgs3AndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallRangeAndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallRangeAndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallNewAndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallNewAndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(SuperCallAndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(SuperCallAndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(CallThisRangeAndCheckToBaselineFromBaseline)
{
BASELINE_CALL_ARGS_SIGNATURE_COMMON(CallThisRangeAndCheckToBaselineFromBaseline)
}
DEF_CALL_SIGNATURE(GetBaselineBuiltinFp)
{
CallSignature getBaselineBuiltinFp("GetBaselineBuiltinFp", 0, 1,
ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER());
*callSign = getBaselineBuiltinFp;
std::array<VariableType, 1> params = {
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(GeneratorReEnterAsmInterp)
{
CallSignature generatorReEnterAsmInterp("GeneratorReEnterAsmInterp", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = generatorReEnterAsmInterp;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(CallRuntimeWithArgv)
{
CallSignature runtimeCallTrampoline("CallRuntimeWithArgv", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = runtimeCallTrampoline;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(false);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_VARARGS);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
#define AOT_CALL_SIGNATURE(name) \
\
CallSignature signature(#name, 0, 6, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
std::array<VariableType, 6> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::INT64(), \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
}; \
callSign->SetVariadicArgs(true); \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
#define FAST_AOT_CALL_SIGNATURE(name) \
\
CallSignature signature(#name, 0, 3, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
std::array<VariableType, 3> params = { \
VariableType::NATIVE_POINTER(), \
VariableType::JS_ANY(), \
VariableType::JS_ANY(), \
}; \
callSign->SetVariadicArgs(true); \
callSign->SetParameters(params.data()); \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
DEF_CALL_SIGNATURE(OptimizedCallAndPushArgv)
{
AOT_CALL_SIGNATURE(OptimizedCallAndPushArgv)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(OptimizedFastCallAndPushArgv)
{
CallSignature optimizedFastCallAndPushArgv("OptimizedFastCallAndPushArgv", 0, 6,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = optimizedFastCallAndPushArgv;
std::array<VariableType, 6> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(JSCall)
{
AOT_CALL_SIGNATURE(JSCall)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(JSOptimizedCall)
{
AOT_CALL_SIGNATURE(JSOptimizedCall)
callSign->SetTargetKind(CallSignature::TargetKind::OPTIMIZED_STUB);
}
DEF_CALL_SIGNATURE(JSCallNew)
{
AOT_CALL_SIGNATURE(JSCallNew)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(JSOptimizedFastCall)
{
FAST_AOT_CALL_SIGNATURE(JSOptimizedFastCall)
callSign->SetTargetKind(CallSignature::TargetKind::OPTIMIZED_FAST_CALL_STUB);
}
DEF_CALL_SIGNATURE(AOTCallToAsmInterBridge)
{
AOT_CALL_SIGNATURE(AOTCallToAsmInterBridge)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FastCallToAsmInterBridge)
{
FAST_AOT_CALL_SIGNATURE(FastCallToAsmInterBridge)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(JSProxyCallInternalWithArgV)
{
TWO_ARGS_CALL_SIGNATURE(JSProxyCallInternalWithArgV, VariableType::JS_ANY());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetGCLeafFunction(true);
callSign->SetTailCall(true);
}
DEF_CALL_SIGNATURE(JSFunctionEntry)
{
CallSignature jsCallFunctionEntry("JSFunctionEntry", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = jsCallFunctionEntry;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::BOOL(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(OptimizedFastCallEntry)
{
CallSignature optimizedFastCallEntry("OptimizedFastCallEntry", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = optimizedFastCallEntry;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(ArkSteedCallEntry)
{
CallSignature steedCallEntry("ArkSteedCallEntry", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = steedCallEntry;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(SteedCallAndPushArgv)
{
AOT_CALL_SIGNATURE(SteedCallAndPushArgv)
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(SteedCallWithArgVAndPushArgv)
{
CallSignature steedCallWithArgV("SteedCallWithArgVAndPushArgv", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = steedCallWithArgV;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(ResumeRspAndDispatch)
{
CallSignature resumeRspAndDispatch("ResumeRspAndDispatch", 0, 8,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = resumeRspAndDispatch;
std::array<VariableType, 8> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(ResumeRspAndReturn)
{
CallSignature resumeRspAndReturn("ResumeRspAndReturn", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = resumeRspAndReturn;
std::array<VariableType, 3> params = {
VariableType::JS_ANY(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(ResumeRspAndReturnBaseline)
{
CallSignature resumeRspAndReturnBaseline("ResumeRspAndReturnBaseline", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = resumeRspAndReturnBaseline;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(ResumeCaughtFrameAndDispatch)
{
CallSignature resumeCaughtFrameAndDispatch("ResumeCaughtFrameAndDispatch", 0, 7,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = resumeCaughtFrameAndDispatch;
std::array<VariableType, 7> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(ResumeUncaughtFrameAndReturn)
{
CallSignature resumeUncaughtFrameAndReturn("ResumeUncaughtFrameAndReturn", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = resumeUncaughtFrameAndReturn;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(ResumeRspAndRollback)
{
CallSignature resumeRspAndRollback("ResumeRspAndRollback", 0, 8,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = resumeRspAndRollback;
std::array<VariableType, 8> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
}
DEF_CALL_SIGNATURE(JSHClassFindProtoTransitions)
{
CallSignature bigIntSameValueZero("JSHClassFindProtoTransitions", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = bigIntSameValueZero;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FinishObjSizeTracking)
{
CallSignature finishObjSizeTracking("FinishObjSizeTracking", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = finishObjSizeTracking;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(NumberHelperStringToDouble)
{
CallSignature bigIntSameValueZero("NumberHelperStringToDouble", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = bigIntSameValueZero;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CallBigIntAsIntN)
{
CallSignature signature("CallBigIntAsIntN", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_POINTER());
*callSign = signature;
std::array<VariableType, 2> params = {
VariableType::FLOAT64(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CallBigIntAsUintN)
{
CallSignature signature("CallBigIntAsUintN", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_POINTER());
*callSign = signature;
std::array<VariableType, 2> params = {
VariableType::FLOAT64(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(BigIntEquals)
{
CallSignature bigIntEquals("BigIntEquals", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
*callSign = bigIntEquals;
std::array<VariableType, 2> params = {
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(IntLexicographicCompare)
{
CallSignature intLexicographicCompare("IntLexicographicCompare", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = intLexicographicCompare;
std::array<VariableType, 2> params = {
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DoubleLexicographicCompare)
{
CallSignature doubleLexicographicCompare("DoubleLexicographicCompare", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = doubleLexicographicCompare;
std::array<VariableType, 2> params = {
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FastArraySortString)
{
THREE_ARGS_CALL_SIGNATURE(FastArraySortString, VariableType::INT32());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(StringToNumber)
{
CallSignature stringToNumber("StringToDoubleWithRadix", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = stringToNumber;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(GetExternalModuleVar)
{
CallSignature getExternalModuleVar("GetExternalModuleVar", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = getExternalModuleVar;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(ArrayTrim)
{
CallSignature ArrayTrim("ArrayTrim", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = ArrayTrim;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT64()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(BigIntSameValueZero)
{
CallSignature bigIntSameValueZero("BigIntSameValueZero", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::BOOL());
*callSign = bigIntSameValueZero;
std::array<VariableType, 2> params = {
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(StringGetStart)
{
CallSignature stringGetStart("StringGetStart", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = stringGetStart;
std::array<VariableType, 4> params = {
VariableType::BOOL(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(StringGetEnd)
{
CallSignature stringGetEnd("StringGetEnd", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = stringGetEnd;
std::array<VariableType, 5> params = {
VariableType::BOOL(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::INT32(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(ReverseTypedArray)
{
CallSignature reverseTypedArray("ReverseTypedArray", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = reverseTypedArray;
constexpr size_t PARAMCOUNT = 2;
std::array<VariableType, PARAMCOUNT> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(ReverseArray)
{
constexpr size_t paramCount = 3;
CallSignature ArrayReverse("ReverseArray", 0, paramCount,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = ArrayReverse;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(SortTypedArray)
{
CallSignature sortTypedArray("SortTypedArray", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = sortTypedArray;
constexpr size_t PARAMCOUNT = 2;
std::array<VariableType, PARAMCOUNT> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FillObject)
{
constexpr size_t paramCount = 5;
CallSignature ObjectFill("FillObject", 0, paramCount,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = ObjectFill;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::INT32()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(IsFastRegExp)
{
TWO_ARGS_CALL_SIGNATURE(IsFastRegExp, VariableType::BOOL())
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(LrInt)
{
constexpr size_t paramCount = 1;
CallSignature lrInt("LrInt", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT8());
*callSign = lrInt;
std::array<VariableType, paramCount> params = {
VariableType::FLOAT64(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
#define PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
\
CallSignature signature(#name, 0, 1, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY()); \
*callSign = signature; \
std::array<VariableType, 1> params = { \
VariableType::NATIVE_POINTER(), \
}; \
callSign->SetVariadicArgs(true); \
callSign->SetParameters(params.data()); \
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
#define PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(name) \
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
callSign->SetCallConv(CallSignature::CallConv::GHCCallConv);
#define PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_SIGNATURE(name) \
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
#define PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(name) \
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE_COMMON(name) \
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
DEF_CALL_SIGNATURE(PushCallArgsAndDispatchNative)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_SIGNATURE(PushCallArgsAndDispatchNative)
}
DEF_CALL_SIGNATURE(PushCallArg0AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArg0AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallArg1AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArg1AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallArgs2AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArgs2AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallArgs3AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallArgs3AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallThisArg0AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArg0AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallThisArg1AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArg1AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallThisArgs2AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArgs2AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallThisArgs3AndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisArgs3AndDispatch)
}
DEF_CALL_SIGNATURE(PushCallRangeAndDispatchNative)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushCallRangeAndDispatchNative)
}
DEF_CALL_SIGNATURE(PushCallNewAndDispatchNative)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushCallNewAndDispatchNative)
}
DEF_CALL_SIGNATURE(PushNewTargetAndDispatchNative)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(PushNewTargetAndDispatchNative)
}
DEF_CALL_SIGNATURE(PushCallNewAndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallNewAndDispatch)
}
DEF_CALL_SIGNATURE(PushSuperCallAndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushSuperCallAndDispatch)
}
DEF_CALL_SIGNATURE(PushCallRangeAndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallRangeAndDispatch)
}
DEF_CALL_SIGNATURE(PushCallThisRangeAndDispatch)
{
PUSH_CALL_ARGS_AND_DISPATCH_SIGNATURE(PushCallThisRangeAndDispatch)
}
DEF_CALL_SIGNATURE(CallGetter)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallGetter)
}
DEF_CALL_SIGNATURE(CallSetter)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallSetter)
}
DEF_CALL_SIGNATURE(CallContainersArgs2)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallContainersArgs2)
}
DEF_CALL_SIGNATURE(CallContainersArgs3)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallContainersArgs3)
}
DEF_CALL_SIGNATURE(CallReturnWithArgv)
{
PUSH_CALL_ARGS_AND_DISPATCH_NATIVE_RANGE_SIGNATURE(CallReturnWithArgv)
}
DEF_CALL_SIGNATURE(JSCallWithArgV)
{
CallSignature jSCallWithArgV("JSCallWithArgV", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = jSCallWithArgV;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(JSFastCallWithArgV)
{
CallSignature jSFastCallWithArgV("JSFastCallWithArgV", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = jSFastCallWithArgV;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT64(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(JSFastCallWithArgVAndPushArgv)
{
CallSignature jSCallWithArgV("JSFastCallWithArgVAndPushArgv", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = jSCallWithArgV;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT64(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(JSCallWithArgVAndPushArgv)
{
CallSignature jSCallWithArgVAndPushArgv("JSCallWithArgVAndPushArgv", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = jSCallWithArgVAndPushArgv;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(CallOptimized)
{
CallSignature callOptimized("CallOptimized", 0, 6,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = callOptimized;
std::array<VariableType, 6> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::WebKitJSCallConv);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(SuperCallWithArgV)
{
CallSignature superCallWithArgV("SuperCallWithArgV", 0, 5,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = superCallWithArgV;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(Dump)
{
constexpr size_t N_INPUT_PARAMETERS = 1;
CallSignature dump("Dump", 0, N_INPUT_PARAMETERS,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = dump;
std::array<VariableType, N_INPUT_PARAMETERS> params = {
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DebugDump)
{
constexpr size_t N_INPUT_PARAMETERS = 1;
CallSignature debugDump("DebugDump", 0, N_INPUT_PARAMETERS,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = debugDump;
std::array<VariableType, N_INPUT_PARAMETERS> params = {
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DumpWithHint)
{
constexpr size_t N_INPUT_PARAMETERS = 2;
CallSignature dumpWithHint("DumpWithHint", 0, N_INPUT_PARAMETERS,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = dumpWithHint;
std::array<VariableType, N_INPUT_PARAMETERS> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DebugDumpWithHint)
{
constexpr size_t N_INPUT_PARAMETERS = 2;
CallSignature debugDumpWithHint("DebugDumpWithHint", 0, N_INPUT_PARAMETERS,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = debugDumpWithHint;
std::array<VariableType, N_INPUT_PARAMETERS> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DebugPrint)
{
CallSignature debugPrint("DebugPrint", 0, 1,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = debugPrint;
std::array<VariableType, 1> params = {
VariableType::INT32(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DebugPrintCustom)
{
CallSignature debugPrintCustom("DebugPrintCustom", 0, 1,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = debugPrintCustom;
std::array<VariableType, 1> params = {
VariableType::NATIVE_POINTER()
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DebugPrintInstruction)
{
CallSignature debugPrintInstruction("DebugPrintInstruction", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = debugPrintInstruction;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CollectingOpcodes)
{
CallSignature collectingOpcodes("CollectingOpcodes", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = collectingOpcodes;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DebugOsrEntry)
{
CallSignature debugOsrEntry("DebugOsrEntry", 0, 2,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = debugOsrEntry;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(Comment)
{
CallSignature comment("Comment", 0, 1,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = comment;
std::array<VariableType, 1> params = {
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FatalPrint)
{
CallSignature fatalPrint("FatalPrint", 0, 1,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = fatalPrint;
std::array<VariableType, 1> params = {
VariableType::INT32(),
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FatalPrintCustom)
{
CallSignature fatalPrintCustom("FatalPrintCustom", 0, 1,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = fatalPrintCustom;
std::array<VariableType, 1> params = {
VariableType::NATIVE_POINTER()
};
callSign->SetVariadicArgs(true);
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(GetActualArgvNoGC)
{
CallSignature index("GetActualArgvNoGC", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER());
*callSign = index;
std::array<VariableType, 1> params = {
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(InsertOldToNewRSet)
{
CallSignature index("InsertOldToNewRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(InsertLocalToShareRSet)
{
CallSignature index("InsertLocalToShareRSet", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(SetBitAtomic)
{
CallSignature index("SetBitAtomic", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::INT32()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
#define DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(NAME) \
DEF_CALL_SIGNATURE(NAME) \
{ \
\
CallSignature index(#NAME, 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64()); \
*callSign = index; \
\
std::array<VariableType, 1> params = { \
VariableType::FLOAT64(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetGCLeafFunction(true); \
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
}
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcos)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAcosh)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAsin)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAsinh)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAtan)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatAtanh)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCos)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCosh)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatSin)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatSinh)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTan)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTanh)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatExp)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatExpm1)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatTrunc)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatFloor)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog2)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog10)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatLog1p)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCbrt)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatClz32)
DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME(FloatCeil)
#undef DEF_FLOAT_UNARY_CALL_SIGNATURE_BY_NAME
#define DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(NAME) \
DEF_CALL_SIGNATURE(NAME) \
{ \
\
CallSignature index(#NAME, 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64()); \
*callSign = index; \
\
std::array<VariableType, 2> params = { \
VariableType::FLOAT64(), \
VariableType::FLOAT64(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetGCLeafFunction(true); \
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC); \
}
DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatMod)
DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatAtan2)
DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME(FloatPow)
#undef DEF_FLOAT_BINARY_CALL_SIGNATURE_BY_NAME
DEF_CALL_SIGNATURE(CallDateNow)
{
CallSignature signature("CallDateNow", 0, 0, ArgumentsOrder::DEFAULT_ORDER,
VariableType::FLOAT64());
*callSign = signature;
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(UpdateFieldType)
{
CallSignature index("UpdateFieldType", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = index;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DoubleToInt)
{
CallSignature index("DoubleToInt", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = index;
std::array<VariableType, 2> params = {
VariableType::FLOAT64(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(SaturateTruncDoubleToInt32)
{
CallSignature index("SaturateTruncDoubleToInt32", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = index;
std::array<VariableType, 1> params = {
VariableType::FLOAT64(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(MarkingBarrier)
{
CallSignature index("MarkingBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(SharedGCMarkingBarrier)
{
CallSignature index("SharedGCMarkingBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(TryFillSweptRegion)
{
CallSignature index("TryFillSweptRegion", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 1> params = {
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CMCGCMarkingBarrier)
{
CallSignature index("CMCGCMarkingBarrier", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CheckObjectForCMS)
{
CallSignature index("CheckObjectForCMS", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::BOOL(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(GetValueWithBarrier)
{
CallSignature getValueWithBarrier("GetValueWithBarrier", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = getValueWithBarrier;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(LdLexVar)
{
CallSignature signature("LdLexVar", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(StLexVar)
{
CallSignature signature("StLexVar", 0, 5, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, 5> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::INT32(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(ReadBarrier)
{
CallSignature index("ReadBarrier", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = index;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetNoTailCall(true);
}
DEF_CALL_SIGNATURE(CopyCallTarget)
{
CallSignature copyCallTarget("CopyCallTarget", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = copyCallTarget;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CopyArgvArray)
{
CallSignature copyArgvArray("CopyArgvArray", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = copyArgvArray;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT64()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CallArg0Stub)
{
TWO_ARGS_CALL_SIGNATURE(CallArg0Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallArg1Stub)
{
THREE_ARGS_CALL_SIGNATURE(CallArg1Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallArg2Stub)
{
FOUR_ARGS_CALL_SIGNATURE(CallArg2Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallArg3Stub)
{
FIVE_ARGS_CALL_SIGNATURE(CallArg3Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallThis0Stub)
{
THREE_ARGS_CALL_SIGNATURE(CallThis0Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallThis1Stub)
{
FOUR_ARGS_CALL_SIGNATURE(CallThis1Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallThis2Stub)
{
FIVE_ARGS_CALL_SIGNATURE(CallThis2Stub, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CallThis3Stub)
{
CallSignature callThis3Stub("callThis3Stub", 0, 6,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = callThis3Stub;
std::array<VariableType, 6> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(NewFloat32ArrayWithNoArgs)
{
TWO_ARGS_CALL_SIGNATURE(NewFloat32ArrayWithNoArgs, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(NewFloat32Array)
{
FOUR_ARGS_CALL_SIGNATURE(NewFloat32Array, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(StringLoadElement)
{
constexpr size_t paramCount = 4;
CallSignature temp("StringLoadElement", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = temp;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(GetStringFromConstPool)
{
CallSignature temp("GetStringFromConstPool", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = temp;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(GetObjectFromConstPool)
{
CallSignature temp("GetObjectFromConstPool", 0, 4, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = temp;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(FastCallSelector)
{
CallSignature temp("FastCallSelector", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::INT32());
*callSign = temp;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT64(),
};
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(GetPrototype)
{
TWO_ARGS_CALL_SIGNATURE(GetPrototype, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CheckSuperAndNew)
{
THREE_ARGS_CALL_SIGNATURE(CheckSuperAndNew, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(SuperCallAndConstructorCheck)
{
CallSignature temp("SuperCallAndConstructorCheck", 0, 6,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = temp;
std::array<VariableType, 6> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT64(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
}
DEF_CALL_SIGNATURE(CallArg0)
{
TWO_ARGS_CALL_SIGNATURE(CallArg0, VariableType::JS_ANY())
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(CallArg1)
{
THREE_ARGS_CALL_SIGNATURE(CallArg1, VariableType::JS_ANY())
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(CallArgs2)
{
FOUR_ARGS_CALL_SIGNATURE(CallArgs2, VariableType::JS_ANY())
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(CallArgs3)
{
FIVE_ARGS_CALL_SIGNATURE(CallArgs3, VariableType::JS_ANY())
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(CallThisRange)
{
THREE_ARGS_CALL_SIGNATURE(CallThisRange, VariableType::JS_ANY())
callSign->SetVariadicArgs(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(CallRange)
{
TWO_ARGS_CALL_SIGNATURE(CallRange, VariableType::JS_ANY())
callSign->SetVariadicArgs(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB);
}
DEF_CALL_SIGNATURE(JsProxyCallInternal)
{
CallSignature proxyCallInternal("JsProxyCallInternal", 0, 4,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
*callSign = proxyCallInternal;
std::array<VariableType, 4> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(false);
callSign->SetParameters(params.data());
callSign->SetTailCall(true);
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::COMMON_STUB);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(JsBoundCallInternal)
{
CallSignature boundCallInternal("JsBoundCallInternal", 0, 6,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_POINTER());
*callSign = boundCallInternal;
std::array<VariableType, 6> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT64(),
VariableType::JS_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetVariadicArgs(false);
callSign->SetParameters(params.data());
callSign->SetTailCall(true);
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::COMMON_STUB);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(LazyDeoptEntry)
{
CallSignature lazyDeoptEntry("LazyDeoptEntry", 0, 0,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = lazyDeoptEntry;
std::array<VariableType, 0> params = {};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(DeoptHandlerAsm)
{
CallSignature deoptHandlerAsm("DeoptHandlerAsm", 0, 3,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = deoptHandlerAsm;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetVariadicArgs(false);
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
callSign->SetTargetKind(CallSignature::TargetKind::DEOPT_STUB);
}
DEF_CALL_SIGNATURE(TimeClip)
{
CallSignature index("TimeClip", 0, 1, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());
*callSign = index;
std::array<VariableType, 1> params = {
VariableType::FLOAT64(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CalcTimeValue)
{
CallSignature index("CalcTimeValue", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::FLOAT64());
*callSign = index;
std::array<VariableType, 3> params = {
VariableType::FLOAT64(),
VariableType::FLOAT64(),
VariableType::FLOAT64(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(StartCallTimer)
{
CallSignature index("StartCallTimer", 0, 3, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::BOOL()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(EndCallTimer)
{
CallSignature index("EndCallTimer", 0, 2, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = index;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(GetSingleCharCodeByIndex)
{
constexpr size_t paramCount = 4;
CallSignature signature("GetSingleCharCodeByIndex", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::INT32());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(CreateStringBySingleCharCode)
{
constexpr size_t paramCount = 3;
CallSignature signature("CreateStringByCharCode", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::JS_ANY()
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(Getpropiterator)
{
THREE_ARGS_CALL_SIGNATURE(Getpropiterator, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(Getnextpropname)
{
TWO_ARGS_CALL_SIGNATURE(Getnextpropname, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CreateJSSetIterator)
{
TWO_ARGS_CALL_SIGNATURE(CreateJSSetIterator, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(JSSetEntries)
{
TWO_ARGS_CALL_SIGNATURE(JSSetEntries, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CreateJSMapIterator)
{
TWO_ARGS_CALL_SIGNATURE(CreateJSMapIterator, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(JSMapKeys)
{
TWO_ARGS_CALL_SIGNATURE(JSMapKeys, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(JSMapValues)
{
TWO_ARGS_CALL_SIGNATURE(JSMapValues, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(JSMapGet)
{
FOUR_ARGS_CALL_SIGNATURE(JSMapGet, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(StringIteratorNext)
{
THREE_ARGS_CALL_SIGNATURE(StringIteratorNext, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(ArrayIteratorNext)
{
THREE_ARGS_CALL_SIGNATURE(ArrayIteratorNext, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(MapIteratorNext)
{
THREE_ARGS_CALL_SIGNATURE(MapIteratorNext, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(SetIteratorNext)
{
THREE_ARGS_CALL_SIGNATURE(SetIteratorNext, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(GetIterator)
{
THREE_ARGS_CALL_SIGNATURE(GetIterator, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(JSMapHas)
{
FOUR_ARGS_CALL_SIGNATURE(JSMapHas, VariableType::BOOL())
}
DEF_CALL_SIGNATURE(JSSetHas)
{
FOUR_ARGS_CALL_SIGNATURE(JSSetHas, VariableType::BOOL())
}
DEF_CALL_SIGNATURE(JSMapDelete)
{
FOUR_ARGS_CALL_SIGNATURE(JSMapDelete, VariableType::BOOL())
}
DEF_CALL_SIGNATURE(JSSetDelete)
{
FOUR_ARGS_CALL_SIGNATURE(JSSetDelete, VariableType::BOOL())
}
DEF_CALL_SIGNATURE(JSSetAdd)
{
FOUR_ARGS_CALL_SIGNATURE(JSSetAdd, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(FastStringEqual)
{
FOUR_ARGS_CALL_SIGNATURE(FastStringEqual, VariableType::BOOL())
}
DEF_CALL_SIGNATURE(FastStringAdd)
{
FOUR_ARGS_CALL_SIGNATURE(FastStringAdd, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(StringAdd)
{
constexpr size_t paramCount = 5;
CallSignature signature("StringAdd", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
DEF_CALL_SIGNATURE(DeleteObjectProperty)
{
FOUR_ARGS_CALL_SIGNATURE(DeleteObjectProperty, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CopyTypedArrayBuffer)
{
CallSignature CopyTypedArrayBuffer("CopyTypedArrayBuffer", 0, 6,
ArgumentsOrder::DEFAULT_ORDER, VariableType::JS_ANY());
*callSign = CopyTypedArrayBuffer;
std::array<VariableType, 6> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
VariableType::JS_POINTER(),
VariableType::INT32(),
VariableType::INT32(),
VariableType::INT32()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(CreateJSTypedArrayEntries)
{
TWO_ARGS_CALL_SIGNATURE(CreateJSTypedArrayEntries, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(SameValue)
{
FOUR_ARGS_CALL_SIGNATURE(SameValue, VariableType::BOOL())
}
DEF_CALL_SIGNATURE(CreateJSTypedArrayKeys)
{
TWO_ARGS_CALL_SIGNATURE(CreateJSTypedArrayKeys, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(CreateJSTypedArrayValues)
{
TWO_ARGS_CALL_SIGNATURE(CreateJSTypedArrayValues, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(GrowElementsCapacity)
{
constexpr size_t paramCount = 4;
CallSignature growElementsCapacity("GrowElementsCapacity", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = growElementsCapacity;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
#define CREATE_RSET_SIGNATURE_COMMON(name) \
CallSignature signature(#name, 0, 1, \
ArgumentsOrder::DEFAULT_ORDER, VariableType::NATIVE_POINTER()); \
*callSign = signature; \
std::array<VariableType, 1> params = { \
VariableType::NATIVE_POINTER(), \
}; \
callSign->SetParameters(params.data()); \
callSign->SetGCLeafFunction(true); \
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC)
DEF_CALL_SIGNATURE(CreateLocalToShare)
{
CREATE_RSET_SIGNATURE_COMMON(CreateLocalToShare);
}
DEF_CALL_SIGNATURE(CreateOldToNew)
{
CREATE_RSET_SIGNATURE_COMMON(CreateOldToNew);
}
#undef CREATE_RSET_SIGNATURE_COMMON
DEF_CALL_SIGNATURE(BatchBarrier)
{
constexpr size_t paramCount = 4;
CallSignature signature("BatchBarrier", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);;
}
DEF_CALL_SIGNATURE(ReverseBarrier)
{
constexpr size_t paramCount = 4;
CallSignature signature("ReverseBarrier", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);;
}
DEF_CALL_SIGNATURE(CopyObjectPrimitive)
{
constexpr size_t paramCount = 5;
CallSignature ArrayCopy("CopyObjectPrimitive", 0, paramCount,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = ArrayCopy;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(ObjectCopy)
{
constexpr size_t paramCount = 5;
CallSignature ArrayCopy("ObjectCopy", 0, paramCount,
ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = ArrayCopy;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32()
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(MoveBarrierInRegion)
{
constexpr size_t paramCount = 5;
CallSignature signature("MoveBarrierInRegion", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER, VariableType::VOID());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);;
}
DEF_CALL_SIGNATURE(MoveBarrierCrossRegion)
{
constexpr size_t paramCount = 6;
CallSignature signature("MoveBarrierCrossRegion", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::VOID());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);;
}
DEF_CALL_SIGNATURE(FindEntryFromNameDictionary)
{
THREE_ARGS_CALL_SIGNATURE(FindEntryFromNameDictionary, VariableType::INT32())
}
DEF_CALL_SIGNATURE(JSProxyGetProperty)
{
FIVE_ARGS_CALL_SIGNATURE(JSProxyGetProperty, VariableType::JS_ANY())
}
DEF_CALL_SIGNATURE(JSProxySetProperty)
{
constexpr size_t paramCount = 6;
CallSignature signature("JSProxySetProperty", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);;
}
DEF_CALL_SIGNATURE(JSProxySetPropertyNoThrow)
{
constexpr size_t paramCount = 6;
CallSignature signature("JSProxySetPropertyNoThrow", 0, paramCount, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = signature;
std::array<VariableType, paramCount> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
;
}
DEF_CALL_SIGNATURE(FindPatchModule)
{
TWO_ARGS_CALL_SIGNATURE(FindPatchModule, VariableType::JS_ANY())
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(FatalPrintMisstakenResolvedBinding)
{
CallSignature fatalPrintMisstakenResolvedBinding("FatalPrintMisstakenResolvedBinding",
0, 2, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = fatalPrintMisstakenResolvedBinding;
std::array<VariableType, 2> params = {
VariableType::INT32(),
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(LoadNativeModuleFailed)
{
CallSignature LoadNativeModuleFailed("LoadNativeModuleFailed", 0, 1, ArgumentsOrder::DEFAULT_ORDER,
VariableType::JS_ANY());
*callSign = LoadNativeModuleFailed;
std::array<VariableType, 1> params = {
VariableType::JS_ANY(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(MarkRSetCardTable)
{
CallSignature MarkRSetCardTable("MarkRSetCardTable", 0, 1, ArgumentsOrder::DEFAULT_ORDER,
VariableType::BOOL());
*callSign = MarkRSetCardTable;
std::array<VariableType, 1> params = {
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(MarkInBuffer)
{
CallSignature MarkInBuffer("MarkInBuffer", 0, 2, ArgumentsOrder::DEFAULT_ORDER,
VariableType::BOOL());
*callSign = MarkInBuffer;
std::array<VariableType, 2> params = {
VariableType::NATIVE_POINTER(),
VariableType::JS_POINTER(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetNoTailCall(true);
}
DEF_CALL_SIGNATURE(BatchMarkInBuffer)
{
CallSignature BatchMarkInBuffer("BatchMarkInBuffer", 0, 3, ArgumentsOrder::DEFAULT_ORDER,
VariableType::BOOL());
*callSign = BatchMarkInBuffer;
std::array<VariableType, 3> params = {
VariableType::NATIVE_POINTER(),
VariableType::NATIVE_POINTER(),
VariableType::INT32(),
};
callSign->SetParameters(params.data());
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
}
DEF_CALL_SIGNATURE(LoadBarrierCopyBack)
{
CallSignature LoadBarrierCopyBack("LoadBarrierCopyBack", 0, 0, ArgumentsOrder::DEFAULT_ORDER,
VariableType::BOOL());
*callSign = LoadBarrierCopyBack;
callSign->SetGCLeafFunction(true);
callSign->SetTargetKind(CallSignature::TargetKind::RUNTIME_STUB_NO_GC);
callSign->SetCallConv(CallSignature::CallConv::CCallConv);
}
}