// Copyright (c) 2012- PPSSPP Project. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, version 2.0 or later versions. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License 2.0 for more details. // A copy of the GPL 2.0 should have been included with the program. // If not, see http://www.gnu.org/licenses/ // Official git repository and contact information can be found at // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. #pragma once #include #include "Common/CommonTypes.h" #include "Core/HLE/HLE.h" #include "Core/MemMap.h" // For easy parameter parsing and return value processing. // Each wrapper names the signature it unpacks. The function may also take the MIPSState it runs on // as an extra first parameter, which is how an implementation gets at the CPU (instead of currentMIPS). template struct HLEFuncTypes; template struct HLEFuncTypes { typedef R (*Plain)(Args...); typedef R (*WithState)(MIPSState *, Args...); }; template inline auto HLECall(MIPSState *mips, CallArgs... args) { typedef HLEFuncTypes Types; typedef std::decay_t FuncType; if constexpr (std::is_same_v) { return func(mips, args...); } else { static_assert(std::is_same_v, "HLE function doesn't match the signature of its wrapper"); return func(args...); } } // 64bit wrappers // 64bit values are always "aligned" in regs (never start on an odd reg.) template void WrapU64_V(MIPSState *mips) { u64 retval = HLECall(mips); RETURN64(retval); } template void WrapU64_U(MIPSState *mips) { u64 retval = HLECall(mips, PARAM(0)); RETURN64(retval); } template void WrapU64_I(MIPSState *mips) { u64 retval = HLECall(mips, PARAM(0)); RETURN64(retval); } template void WrapU64_UU64(MIPSState *mips) { u64 retval = HLECall(mips, PARAM(0), PARAM64(2)); RETURN64(retval); } template void WrapU64_IU64(MIPSState *mips) { u64 retval = HLECall(mips, PARAM(0), PARAM64(2)); RETURN64(retval); } template void WrapI_IU64(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM64(2)); RETURN(retval); } template void WrapI_UU64(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM64(2)); RETURN(retval); } template void WrapU_UU64(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM64(2)); RETURN(retval); } template void WrapI_UUU64(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM64(2)); RETURN(retval); } template void WrapU_II64I(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM64(2), PARAM(4)); RETURN(retval); } template void WrapU_UU64UU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM64(2), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapU_IU64UU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM64(2), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_IICU64(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), Memory::GetCharPointer(PARAM(2)), PARAM64(4)); RETURN(retval); } template void WrapI64_II64I(MIPSState *mips) { s64 retval = HLECall(mips, PARAM(0), PARAM64(2), PARAM(4)); RETURN64(retval); } //32bit wrappers template void WrapV_V(MIPSState *mips) { HLECall(mips); } template void WrapU_V(MIPSState *mips) { RETURN((HLECall(mips))); } template void WrapU_IVI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetPointerWriteOrException(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapI_CIIU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_ICUVVUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointerWriteOrException(PARAM(3)),Memory::GetPointerWriteOrException(PARAM(4)), PARAM(5), PARAM(6) ); RETURN(retval); } // Hm, do so many params get passed in registers? template void WrapI_CICIIIII(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), Memory::GetCharPointer(PARAM(2)), PARAM(3), PARAM(4), PARAM(5), PARAM(6), PARAM(7)); RETURN(retval); } // Hm, do so many params get passed in registers? template void WrapI_CIIIIII(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_IIIC(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), Memory::GetCharPointer(PARAM(3))); RETURN(retval); } // Hm, do so many params get passed in registers? template void WrapI_IIIIIIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } // Hm, do so many params get passed in registers? template void WrapI_IIIIIIIIU(MIPSState *mips) { u32 param8 = *(const u32_le *)Memory::GetPointerWriteOrException(currentMIPS->r[29]); //Fixed 9th parameter, thanks to Kingcom u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6), PARAM(7), param8); RETURN(retval); } template void WrapU_IV(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetPointerWriteOrException(PARAM(1))); RETURN(retval); } template void WrapF_V(MIPSState *mips) { RETURNF((HLECall(mips))); } // TODO: Not sure about the floating point parameter passing template void WrapF_IFU(MIPSState *mips) { RETURNF((HLECall(mips, PARAM(0), PARAMF(0), PARAM(1)))); } template void WrapU_U(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0)); RETURN(retval); } template void WrapU_UI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapI_U(MIPSState *mips) { int retval = HLECall(mips, PARAM(0)); RETURN(retval); } template void WrapI_UI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapI_UIIU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_IUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_UU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapI_UFF(MIPSState *mips) { // Not sure about the float arguments. int retval = HLECall(mips, PARAM(0), PARAMF(0), PARAMF(1)); RETURN(retval); } template void WrapI_UUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_UUUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_UUUIIII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_UUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_UUUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_UCUUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_UICUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), Memory::GetCharPointer(PARAM(2)), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_UUIC(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), Memory::GetCharPointer(PARAM(3))); RETURN(retval); } template void WrapI_UUIUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_V(MIPSState *mips) { int retval = HLECall(mips); RETURN(retval); } template void WrapU_I(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0)); RETURN(retval); } template void WrapU_IIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_I(MIPSState *mips) { int retval = HLECall(mips, PARAM(0)); RETURN(retval); } template void WrapV_U(MIPSState *mips) { HLECall(mips, PARAM(0)); } template void WrapV_I(MIPSState *mips) { HLECall(mips, PARAM(0)); } template void WrapV_UU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1)); } template void WrapV_II(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1)); } template void WrapV_UC(MIPSState *mips) { HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1))); } template void WrapI_UC(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1))); RETURN(retval); } template void WrapI_UCI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapU_UIIIII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapU_IIIIIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapU_UIIIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapU_UIIIIII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapU_UU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapU_UUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_UUII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_CUUU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapV_UIUII(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); } template void WrapU_UIUII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_UIUII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapU_UIUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_UIUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_UIUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_UIIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_UIIUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_UUII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_UUIII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapV_UIII(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); } template void WrapV_UIIIII(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); } template void WrapV_UII(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); } template void WrapU_IU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapI_IU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapI_UUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_UUIU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_II(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapI_III(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_IUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_IIII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_UIII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_IIIUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_IIIUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_IUUII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_IUUIII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_ICIUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_IIU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapV_IU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1)); } template void WrapV_UI(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1)); } template void WrapU_C(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0))); RETURN(retval); } template void WrapU_CCCU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3)); RETURN(retval); } template void WrapI_C(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0))); RETURN(retval); } template void WrapI_CU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1)); RETURN(retval); } template void WrapI_ICU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapI_CUI(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_CUI(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_ICIU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_ICUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_ICUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_IIUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_CIU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_CUU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_CUUU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_CCII(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_CUUIUU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_CIIUII(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_CIIIUUI(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_CIUUU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_CUUUUU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapU_CCU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapU_CU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1)); RETURN((u32) retval); } template void WrapU_UC(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1))); RETURN(retval); } template void WrapU_CUU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN((u32) retval); } template void WrapU_III(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_II(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1)); RETURN(retval); } template void WrapU_IIII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_IUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_IUUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_IUUUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapU_UUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapV_IUU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); } template void WrapV_IIU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); } template void WrapV_UIU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); } template void WrapI_UIU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapV_IUUUU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); } template void WrapV_UUU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); } template void WrapV_UUUU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); } template void WrapV_CUIU(MIPSState *mips) { HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3)); } template void WrapI_CUIU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapV_UCUIU(MIPSState *mips) { HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4)); } template void WrapI_UCUIU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapV_CUIIU(MIPSState *mips) { HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); } template void WrapI_CUIIU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapU_UUUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UCUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UUUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UUUIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapU_UUUIUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapU_UUIU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UIII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_IUUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_IUUUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_IUUIUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_IUII(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapU_UUUUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapV_UUUUU(MIPSState *mips) { HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); } template void WrapU_CC(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1))); RETURN(retval); } template void WrapV_CI(MIPSState *mips) { HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1)); } template void WrapU_CI(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1)); RETURN(retval); } template void WrapU_CII(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_CIUIU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapU_CIUIUI(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapU_UUUUUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_IUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_IUUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_IUIIUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_IUIIUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5)); RETURN(retval); } template void WrapI_IUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_UUUUUUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_UUUUUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_IUUUUUU(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_UIUU(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), PARAM(1), PARAM(2), PARAM(3)); RETURN(retval); } template void WrapI_IC(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1))); RETURN(retval); } template void WrapI_ICCUI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3), PARAM(4)); RETURN(retval); } template void WrapI_ICCI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3)); RETURN(retval); } template void WrapI_CII(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapI_ICI(MIPSState *mips) { int retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapI_IVVVVUI(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetPointerWriteOrException(PARAM(1)), Memory::GetPointerWriteOrException(PARAM(2)), Memory::GetPointerWriteOrException(PARAM(3)), Memory::GetPointerWriteOrException(PARAM(4)), PARAM(5), PARAM(6) ); RETURN(retval); } template void WrapI_ICUVIII(MIPSState *mips) { u32 retval = HLECall(mips, PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointerWriteOrException(PARAM(3)), PARAM(4), PARAM(5), PARAM(6)); RETURN(retval); } template void WrapI_VUI(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetPointerWriteOrException(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_VUU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetPointerWriteOrException(PARAM(0)), PARAM(1), PARAM(2)); RETURN(retval); } template void WrapU_VC(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetPointerWriteOrException(PARAM(0)), Memory::GetCharPointer(PARAM(1))); RETURN(retval); } template void WrapI_CCU(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapI_CC(MIPSState *mips) { int retval = HLECall(mips, Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1))); RETURN(retval); } template void WrapU_VCU(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetPointerWriteOrException(PARAM(0)), Memory::GetCharPointer(PARAM(1)), PARAM(2)); RETURN(retval); } template void WrapU_VI(MIPSState *mips) { u32 retval = HLECall(mips, Memory::GetPointerWriteOrException(PARAM(0)), PARAM(1)); RETURN(retval); }