remotemono
Classes | Public Member Functions | Static Public Member Functions | List of all members
remotemono::RMonoAPIFunctionWrap< CommonT, ABI, RetT, ArgsT > Class Template Reference

#include <RMonoAPIFunctionWrap_Def.h>

Inheritance diagram for remotemono::RMonoAPIFunctionWrap< CommonT, ABI, RetT, ArgsT >:
Inheritance graph
[legend]
Collaboration diagram for remotemono::RMonoAPIFunctionWrap< CommonT, ABI, RetT, ArgsT >:
Collaboration graph
[legend]

Public Member Functions

RMonoAPIBasegetRemoteMonoAPI ()
 

Static Public Member Functions

template<size_t idx = 0>
constexpr static std::enable_if_t< idx< std::tuple_size_v< DefArgsTuple >, bool > needsWrapFuncArg() { typedef std::tuple_element_t< idx, DefArgsTuple > ArgType;if constexpr(std::is_base_of_v< Variant, typename ArgType::Type >||std::is_base_of_v< VariantArray, typename ArgType::Type >||std::is_base_of_v< std::string_view, typename ArgType::Type >||std::is_base_of_v< std::u16string_view, typename ArgType::Type >||std::is_base_of_v< std::u32string_view, typename ArgType::Type >||std::is_base_of_v< RMonoObjectHandleTag, typename ArgType::Type >||tags::has_param_tag_v< ArgType, tags::ParamOutTag >) { return true;} else { return needsWrapFuncArg< idx+1 >);} } template< size_t idx=0 > constexpr static std::enable_if_t< idx==std::tuple_size_v< DefArgsTuple >, bool > needsWrapFuncArg() { return false;} constexpr static bool needsWrapFunc() { if constexpr(std::is_base_of_v< Variant, typename DefRetType::Type >||std::is_base_of_v< VariantArray, typename DefRetType::Type >||std::is_base_of_v< std::string, typename DefRetType::Type >||std::is_base_of_v< std::u16string, typename DefRetType::Type >||std::is_base_of_v< std::u32string, typename DefRetType::Type >||std::is_base_of_v< RMonoObjectHandleTag, typename DefRetType::Type >) { return true;} else { return needsWrapFuncArg< 0 >);} }public:asmjit::Label compileWrap(blackbone::IAsmHelper &a);protected:void resetWrap() { wrapFunc.reset();}private:void generateWrapperAsm(AsmBuildContext &ctx);template< size_t wrapArgIdx > void genWrapperSpillArgsToStackX64(AsmBuildContext &ctx);void genWrapperReserveStack(AsmBuildContext &ctx);template< size_t wrapArgIdx, typename ArgT, typename... RestT > void genWrapperReserveArgStack(AsmBuildContext &ctx, PackHelper< ArgT >, PackHelper< RestT >... rest);template< size_t wrapArgIdx > void genWrapperReserveArgStack(AsmBuildContext &ctx) {} template< size_t rawArgIdx > void genWrapperCalculateRawArgStackSize(AsmBuildContext &ctx);void genWrapperBuildRawArgs(AsmBuildContext &ctx);template< size_t wrapArgIdx, size_t rawArgIdx, typename ArgT, typename... RestT > void genWrapperBuildRawArg(AsmBuildContext &ctx, PackHelper< ArgT >, PackHelper< RestT >... rest);template< size_t wrapArgIdx, size_t rawArgIdx > void genWrapperBuildRawArg(AsmBuildContext &ctx) {} template< size_t rawArgIdx > void genWrapperMoveStackArgsToRegsX64(AsmBuildContext &ctx);void genWrapperHandleRetAndOutParams(AsmBuildContext &ctx);template< size_t wrapArgIdx, size_t rawArgIdx, typename ArgT, typename... RestT > void genWrapperHandleOutParams(AsmBuildContext &ctx, PackHelper< ArgT >, PackHelper< RestT >... rest);template< size_t wrapArgIdx, size_t rawArgIdx > void genWrapperHandleOutParams(AsmBuildContext &ctx) {} void genGchandleGetTargetChecked(AsmBuildContext &ctx);void genGchandleNewChecked(AsmBuildContext &ctx);void genIsValueTypeInstance(AsmBuildContext &ctx);void genObjectUnbox(AsmBuildContext &ctx);template< size_t argIdx, typename ArgsTupleT > constexpr size_t calcStackArgOffset() { if constexpr(argIdx==0) { return 0;} else { return static_align(sizeof(std::tuple_element_t< argIdx-1, ArgsTupleT >), sizeof(irmono_voidp))+calcStackArgOffset< argIdx-1, ArgsTupleT >);} } template< size_t argIdx > asmjit::X86Mem ptrWrapFuncArg(AsmBuildContext &ctx, size_t partIdx=0, uint32_t size=0) { return asmjit::host::ptr((*ctx.a) ->zbp, int32_t(ctx.stackOffsArgBase+calcStackArgOffset< argIdx, typename RMonoAPIFunctionWrapTraits< CommonT >::WrapArgsTuple >)+partIdx *sizeof(irmono_voidp)), size);} template< size_t argIdx > asmjit::X86Mem ptrRawFuncArg(AsmBuildContext &ctx, size_t partIdx=0, uint32_t size=0) { return asmjit::host::ptr((*ctx.a) ->zsp, int32_t(calcStackArgOffset< argIdx, typename RMonoAPIFunctionRawTraits< CommonT >::RawArgsTuple >)+partIdx *sizeof(irmono_voidp)), size);}private:ABI *getABI() { return static_cast< CommonT * >this) -> getABI ()
 

Detailed Description

template<typename CommonT, typename ABI, typename RetT, typename... ArgsT>
class remotemono::RMonoAPIFunctionWrap< CommonT, ABI, RetT, ArgsT >

Documentation of this class is at RMonoAPIFunctionWrapBase

See also
RMonoAPIFunctionWrapBase

The documentation for this class was generated from the following file: