diff --git a/rpcs3/Emu/ARMv7/Modules/sceAppMgr.cpp b/rpcs3/Emu/ARMv7/Modules/sceAppMgr.cpp index 0a68994608..5b39017a62 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceAppMgr.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceAppMgr.cpp @@ -32,7 +32,7 @@ s32 sceAppMgrReleaseBgmPort() } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)(func_ptr)name>(nid, &sceAppMgr, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceAppMgr, #name, name) psv_log_base sceAppMgr("SceAppMgr", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceAppUtil.cpp b/rpcs3/Emu/ARMv7/Modules/sceAppUtil.cpp index cf044a5034..815efa0461 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceAppUtil.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceAppUtil.cpp @@ -70,7 +70,7 @@ s32 sceAppUtilLoadSafeMemory(vm::psv::ptr buf, u32 bufSize, s64 offset) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceAppUtil, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceAppUtil, #name, name) psv_log_base sceAppUtil("SceAppUtil", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceAudio.cpp b/rpcs3/Emu/ARMv7/Modules/sceAudio.cpp index ec00510930..ad0ab8d9af 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceAudio.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceAudio.cpp @@ -45,7 +45,7 @@ s32 sceAudioOutGetAdopt(s32 portType) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceAudio, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceAudio, #name, name) psv_log_base sceAudio("SceAudio", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceAudioIn.cpp b/rpcs3/Emu/ARMv7/Modules/sceAudioIn.cpp index a4c051114f..29c7378b33 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceAudioIn.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceAudioIn.cpp @@ -20,7 +20,7 @@ s32 sceAudioInInput(s32 port, vm::psv::ptr destPtr) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceAudioIn, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceAudioIn, #name, name) psv_log_base sceAudioIn("SceAudioIn", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceAudiodec.cpp b/rpcs3/Emu/ARMv7/Modules/sceAudiodec.cpp index c152d21cfc..bf0d1a6bf9 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceAudiodec.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceAudiodec.cpp @@ -120,7 +120,7 @@ s32 sceAudiodecGetInternalError(vm::psv::ptr pCtrl, vm::psv::pt } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceAudiodec, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceAudiodec, #name, name) psv_log_base sceAudiodec("SceAudiodec", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceAudioenc.cpp b/rpcs3/Emu/ARMv7/Modules/sceAudioenc.cpp index 71b82fad55..d507170248 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceAudioenc.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceAudioenc.cpp @@ -102,7 +102,7 @@ s32 sceAudioencGetInternalError(vm::psv::ptr pCtrl, vm::psv::pt } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceAudioenc, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceAudioenc, #name, name) psv_log_base sceAudioenc("SceAudioenc", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceCamera.cpp b/rpcs3/Emu/ARMv7/Modules/sceCamera.cpp index 798205f84c..e341d6d75f 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceCamera.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceCamera.cpp @@ -247,7 +247,7 @@ void sceCameraUseCacheMemoryForTrial(s32 isCache) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceCamera, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceCamera, #name, name) psv_log_base sceCamera("SceCamera", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceCodecEngine.cpp b/rpcs3/Emu/ARMv7/Modules/sceCodecEngine.cpp index 1923b44ee9..cda018a995 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceCodecEngine.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceCodecEngine.cpp @@ -31,7 +31,7 @@ s32 sceCodecEnginePmonReset() } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceCodecEngine, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceCodecEngine, #name, name) psv_log_base sceCodecEngine("SceCodecEngine", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceCommonDialog.cpp b/rpcs3/Emu/ARMv7/Modules/sceCommonDialog.cpp index 0b43db1e52..3e7b998f63 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceCommonDialog.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceCommonDialog.cpp @@ -505,7 +505,7 @@ s32 scePhotoReviewDialogAbort() } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceCommonDialog, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceCommonDialog, #name, name) psv_log_base sceCommonDialog("SceCommonDialog", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceCtrl.cpp b/rpcs3/Emu/ARMv7/Modules/sceCtrl.cpp index 11c9a81e95..b858e40972 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceCtrl.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceCtrl.cpp @@ -66,7 +66,7 @@ s32 sceCtrlClearRapidFire(s32 port, s32 idx) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceCtrl, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceCtrl, #name, name) psv_log_base sceCtrl("SceCtrl", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceDbg.cpp b/rpcs3/Emu/ARMv7/Modules/sceDbg.cpp index d888311e01..6a2cc4c9a2 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceDbg.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceDbg.cpp @@ -31,7 +31,7 @@ s32 sceDbgLoggingHandler(vm::psv::ptr pFile, s32 line, s32 severity, } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceDbg, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceDbg, #name, name) psv_log_base sceDbg("SceDbg", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceDeci4p.cpp b/rpcs3/Emu/ARMv7/Modules/sceDeci4p.cpp index 2446e01b48..f0cf7e3c8e 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceDeci4p.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceDeci4p.cpp @@ -32,7 +32,7 @@ s32 sceKernelDeci4pRegisterCallback(s32 socketid, s32 cbid) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceDeci4p, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceDeci4p, #name, name) psv_log_base sceDeci4p("SceDeci4pUserp", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceDeflt.cpp b/rpcs3/Emu/ARMv7/Modules/sceDeflt.cpp index 328c4e5fd8..8e31b95c72 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceDeflt.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceDeflt.cpp @@ -70,7 +70,7 @@ s32 sceZipGetInfo(vm::psv::ptr pSrc, vm::psv::ptr(nid, &sceDeflt, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceDeflt, #name, name) psv_log_base sceDeflt("SceDeflt", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceDisplay.cpp b/rpcs3/Emu/ARMv7/Modules/sceDisplay.cpp index 8497aa903d..c03dbe24dd 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceDisplay.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceDisplay.cpp @@ -85,7 +85,7 @@ s32 sceDisplayUnregisterVblankStartCallback(s32 uid) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceDisplay, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceDisplay, #name, name) psv_log_base sceDisplay("SceDisplay", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceFiber.cpp b/rpcs3/Emu/ARMv7/Modules/sceFiber.cpp index f2c6432aeb..ab35f7a9be 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceFiber.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceFiber.cpp @@ -81,7 +81,7 @@ s32 sceFiberGetInfo(vm::psv::ptr fiber, vm::psv::ptr fib } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceFiber, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceFiber, #name, name) psv_log_base sceFiber("SceFiber", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceFios.cpp b/rpcs3/Emu/ARMv7/Modules/sceFios.cpp index 567ac3826d..d542e97549 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceFios.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceFios.cpp @@ -802,7 +802,7 @@ void sceFiosIOFilterPsarcDearchiver() throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceFios, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceFios, #name, name) psv_log_base sceFios("SceFios2", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceFpu.cpp b/rpcs3/Emu/ARMv7/Modules/sceFpu.cpp index e303923090..2992c6fc58 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceFpu.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceFpu.cpp @@ -4,7 +4,7 @@ extern psv_log_base sceFpu; -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceFpu, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceFpu, #name, name) psv_log_base sceFpu("SceFpu", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceGxm.cpp b/rpcs3/Emu/ARMv7/Modules/sceGxm.cpp index 4024696db0..f65f49b349 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceGxm.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceGxm.cpp @@ -1067,7 +1067,7 @@ s32 sceGxmSetUniformDataF(vm::psv::ptr uniformBuffer, vm::psv::ptr(nid, &sceGxm, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceGxm, #name, name) psv_log_base sceGxm("SceGxm", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceHttp.cpp b/rpcs3/Emu/ARMv7/Modules/sceHttp.cpp index c60a3b062c..c98509fac4 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceHttp.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceHttp.cpp @@ -353,7 +353,7 @@ s32 sceHttpsFreeCaList(vm::psv::ptr caList) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceHttp, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceHttp, #name, name) psv_log_base sceHttp("SceHttp", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceIme.cpp b/rpcs3/Emu/ARMv7/Modules/sceIme.cpp index 2abd44c5d2..797e282ace 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceIme.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceIme.cpp @@ -30,7 +30,7 @@ s32 sceImeClose() } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceIme, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceIme, #name, name) psv_log_base sceIme("SceIme", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceJpeg.cpp b/rpcs3/Emu/ARMv7/Modules/sceJpeg.cpp index 9db70e10be..06e8e0ec00 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceJpeg.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceJpeg.cpp @@ -106,7 +106,7 @@ s32 sceJpegSplitDecodeMJpeg(vm::psv::ptr pCtrl) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceJpeg, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceJpeg, #name, name) psv_log_base sceJpeg("SceJpeg", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceJpegEnc.cpp b/rpcs3/Emu/ARMv7/Modules/sceJpegEnc.cpp index fe3dd57317..690afd9e04 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceJpegEnc.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceJpegEnc.cpp @@ -75,7 +75,7 @@ s32 sceJpegEncoderCsc( } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceJpegEnc, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceJpegEnc, #name, name) psv_log_base sceJpegEnc("SceJpegEnc", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp index 641ebe6405..016917d6de 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp @@ -994,7 +994,7 @@ s32 sceIoGetstat(vm::psv::ptr name, vm::psv::ptr buf) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceLibKernel, #name, &name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceLibKernel, #name, &name) psv_log_base sceLibKernel("sceLibKernel", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp index ce88646e63..f6364a7514 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp @@ -246,7 +246,7 @@ namespace sce_libc_func } } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)sce_libc_func::name>(nid, &sceLibc, #name, sce_libc_func::name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceLibc, #name, sce_libc_func::name) psv_log_base sceLibc("SceLibc", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp index 7c79b3d373..0fc905e819 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibm.cpp @@ -9,7 +9,7 @@ namespace sce_libm_func } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)sce_libm_func::name>(nid, &sceLibm, #name, sce_libm_func::name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceLibm, #name, sce_libm_func::name) psv_log_base sceLibm("SceLibm", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp index db57dd51f9..263c0b3303 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibstdcxx.cpp @@ -23,7 +23,7 @@ namespace sce_libstdcxx_func } // Attention: find and set correct original mangled name in third parameter, for example: REG_FUNC(0xAE71DC3, operator_new_nothrow, "_ZnwjRKSt9nothrow_t"); -#define REG_FUNC(nid, name, orig_name) reg_psv_func<(func_ptr)sce_libstdcxx_func::name>(nid, &sceLibstdcxx, orig_name, sce_libstdcxx_func::name) +#define REG_FUNC(nid, name, orig_name) reg_psv_func(nid, &sceLibstdcxx, orig_name, sce_libstdcxx_func::name) psv_log_base sceLibstdcxx("SceLibstdcxx", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceLiveArea.cpp b/rpcs3/Emu/ARMv7/Modules/sceLiveArea.cpp index aa978c14d3..62eea18429 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLiveArea.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLiveArea.cpp @@ -14,7 +14,7 @@ s32 sceLiveAreaResourceGetStatus() throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceLiveArea, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceLiveArea, #name, name) psv_log_base sceLiveArea("SceLiveArea", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceLocation.cpp b/rpcs3/Emu/ARMv7/Modules/sceLocation.cpp index 456e0a82ca..8b61bca224 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLocation.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLocation.cpp @@ -172,7 +172,7 @@ s32 sceLocationSetGpsEmulationFile(vm::psv::ptr filename) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceLocation, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceLocation, #name, name) psv_log_base sceLocation("SceLibLocation", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceMd5.cpp b/rpcs3/Emu/ARMv7/Modules/sceMd5.cpp index 598f1c2a07..d31e193e81 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceMd5.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceMd5.cpp @@ -35,7 +35,7 @@ s32 sceMd5BlockResult(vm::psv::ptr pContext, vm::psv::ptr dig throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceMd5, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceMd5, #name, name) psv_log_base sceMd5("SceMd5", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceMotion.cpp b/rpcs3/Emu/ARMv7/Modules/sceMotion.cpp index f6300f7742..4128c78a65 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceMotion.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceMotion.cpp @@ -111,7 +111,7 @@ s32 sceMotionStopSampling() throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceMotion, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceMotion, #name, name) psv_log_base sceMotion("SceMotion", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceMt19937.cpp b/rpcs3/Emu/ARMv7/Modules/sceMt19937.cpp index 90d1e3f6b4..6a125206ec 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceMt19937.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceMt19937.cpp @@ -21,7 +21,7 @@ u32 sceMt19937UInt(vm::psv::ptr pCtx) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceMt19937, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceMt19937, #name, name) psv_log_base sceMt19937("SceMt19937", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNet.cpp b/rpcs3/Emu/ARMv7/Modules/sceNet.cpp index 0c5eece73f..347ba76df5 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNet.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNet.cpp @@ -295,7 +295,7 @@ s32 sceNetGetStatisticsInfo(vm::psv::ptr info, s32 flags) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNet, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNet, #name, name) psv_log_base sceNet("SceNet", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNetCtl.cpp b/rpcs3/Emu/ARMv7/Modules/sceNetCtl.cpp index 77f532a199..7f15d6bf1f 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNetCtl.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNetCtl.cpp @@ -128,7 +128,7 @@ s32 sceNetCtlAdhocGetInAddr(vm::psv::ptr inaddr) throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNetCtl, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNetCtl, #name, name) psv_log_base sceNetCtl("SceNetCtl", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNgs.cpp b/rpcs3/Emu/ARMv7/Modules/sceNgs.cpp index f818b0663b..f09993ba24 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNgs.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNgs.cpp @@ -429,7 +429,7 @@ s32 sceSulphaNgsTrace(vm::psv::ptr message) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNgs, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNgs, #name, name) psv_log_base sceNgs("SceNgs", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNpBasic.cpp b/rpcs3/Emu/ARMv7/Modules/sceNpBasic.cpp index 68cb0e56ab..e798df5f48 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNpBasic.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNpBasic.cpp @@ -208,7 +208,7 @@ s32 sceNpBasicGetPlaySessionLog(SceNpBasicPlaySessionLogType type, u32 index, vm throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNpBasic, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNpBasic, #name, name) psv_log_base sceNpBasic("SceNpBasic", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNpCommon.cpp b/rpcs3/Emu/ARMv7/Modules/sceNpCommon.cpp index ad1552166e..095de28b17 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNpCommon.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNpCommon.cpp @@ -59,7 +59,7 @@ s32 sceNpCmpNpIdInOrder(vm::psv::ptr npid1, vm::psv::ptr(nid, &sceNpCommon, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNpCommon, #name, name) psv_log_base sceNpCommon("SceNpCommon", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNpManager.cpp b/rpcs3/Emu/ARMv7/Modules/sceNpManager.cpp index 82fda858fe..5fce1c946e 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNpManager.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNpManager.cpp @@ -63,7 +63,7 @@ s32 sceNpManagerGetChatRestrictionFlag(vm::psv::ptr isRestricted) throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNpManager, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNpManager, #name, name) psv_log_base sceNpManager("SceNpManager", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNpMatching.cpp b/rpcs3/Emu/ARMv7/Modules/sceNpMatching.cpp index 8674527617..cdb9f5aa8e 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNpMatching.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNpMatching.cpp @@ -1302,7 +1302,7 @@ s32 sceNpMatching2SignalingGetPeerNetInfoResult( throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNpMatching, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNpMatching, #name, name) psv_log_base sceNpMatching("SceNpMatching2", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNpScore.cpp b/rpcs3/Emu/ARMv7/Modules/sceNpScore.cpp index 8107a63fcc..f093ab8b31 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNpScore.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNpScore.cpp @@ -333,7 +333,7 @@ s32 sceNpScoreSanitizeCommentAsync(s32 reqId, vm::psv::ptr comment, throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNpScore, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNpScore, #name, name) psv_log_base sceNpScore("SceNpScore", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceNpUtility.cpp b/rpcs3/Emu/ARMv7/Modules/sceNpUtility.cpp index 2de9d8cf7b..1aab007361 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceNpUtility.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceNpUtility.cpp @@ -136,7 +136,7 @@ s32 sceNpBandwidthTestAbort() throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceNpUtility, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceNpUtility, #name, name) psv_log_base sceNpUtility("SceNpUtility", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/scePerf.cpp b/rpcs3/Emu/ARMv7/Modules/scePerf.cpp index 4f35d054f2..fabf63691a 100644 --- a/rpcs3/Emu/ARMv7/Modules/scePerf.cpp +++ b/rpcs3/Emu/ARMv7/Modules/scePerf.cpp @@ -265,7 +265,7 @@ s32 sceRazorCpuSync() throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &scePerf, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &scePerf, #name, name) psv_log_base scePerf("ScePerf", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/scePgf.cpp b/rpcs3/Emu/ARMv7/Modules/scePgf.cpp index 99a53fe026..c4a1f21065 100644 --- a/rpcs3/Emu/ARMv7/Modules/scePgf.cpp +++ b/rpcs3/Emu/ARMv7/Modules/scePgf.cpp @@ -4,7 +4,7 @@ extern psv_log_base scePgf; -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &scePgf, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &scePgf, #name, name) psv_log_base scePgf("ScePgf", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/scePhotoExport.cpp b/rpcs3/Emu/ARMv7/Modules/scePhotoExport.cpp index cdcd5302fd..2046dff9ca 100644 --- a/rpcs3/Emu/ARMv7/Modules/scePhotoExport.cpp +++ b/rpcs3/Emu/ARMv7/Modules/scePhotoExport.cpp @@ -40,7 +40,7 @@ s32 scePhotoExportFromFile( throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &scePhotoExport, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &scePhotoExport, #name, name) psv_log_base scePhotoExport("ScePhotoExport", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceRazorCapture.cpp b/rpcs3/Emu/ARMv7/Modules/sceRazorCapture.cpp index cd1efdb57d..c14fba50b6 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceRazorCapture.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceRazorCapture.cpp @@ -19,7 +19,7 @@ bool sceRazorCaptureIsInProgress() throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceRazorCapture, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceRazorCapture, #name, name) psv_log_base sceRazorCapture("SceRazorCapture", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceRtc.cpp b/rpcs3/Emu/ARMv7/Modules/sceRtc.cpp index 8dad998c68..9b81d86072 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceRtc.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceRtc.cpp @@ -190,7 +190,7 @@ s32 sceRtcParseRFC3339(vm::psv::ptr pUtc, vm::psv::ptr pszDateT } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceRtc, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceRtc, #name, name) psv_log_base sceRtc("SceRtc", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSas.cpp b/rpcs3/Emu/ARMv7/Modules/sceSas.cpp index bea6b0ad2f..3d11ff98f1 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSas.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSas.cpp @@ -150,7 +150,7 @@ s32 sceSasSetEffectParam(u32 delayTime, u32 feedback) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSas, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSas, #name, name) psv_log_base sceSas("SceSas", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceScreenShot.cpp b/rpcs3/Emu/ARMv7/Modules/sceScreenShot.cpp index 18c8520feb..07b3f0a467 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceScreenShot.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceScreenShot.cpp @@ -33,7 +33,7 @@ s32 sceScreenShotEnable() } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceScreenShot, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceScreenShot, #name, name) psv_log_base sceScreenShot("SceScreenShot", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSfmt.cpp b/rpcs3/Emu/ARMv7/Modules/sceSfmt.cpp index 6220a21683..e6d2f2a4be 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSfmt.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSfmt.cpp @@ -4,7 +4,7 @@ extern psv_log_base sceSfmt; -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSfmt, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSfmt, #name, name) psv_log_base sceSfmt("SceSfmt", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSha.cpp b/rpcs3/Emu/ARMv7/Modules/sceSha.cpp index 7c34f13b43..5ec792b06d 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSha.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSha.cpp @@ -4,7 +4,7 @@ extern psv_log_base sceSha; -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSha, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSha, #name, name) psv_log_base sceSha("SceSha", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSqlite.cpp b/rpcs3/Emu/ARMv7/Modules/sceSqlite.cpp index 21cd2c1695..19f560c963 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSqlite.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSqlite.cpp @@ -4,7 +4,7 @@ extern psv_log_base sceSqlite; -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSqlite, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSqlite, #name, name) psv_log_base sceSqlite("SceSqlite", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSsl.cpp b/rpcs3/Emu/ARMv7/Modules/sceSsl.cpp index c758b91efe..02a377996a 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSsl.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSsl.cpp @@ -60,7 +60,7 @@ s32 sceSslFreeSslCertName(vm::psv::ptr certName) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSsl, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSsl, #name, name) psv_log_base sceSsl("SceSsl", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSulpha.cpp b/rpcs3/Emu/ARMv7/Modules/sceSulpha.cpp index c8bbd8f729..3df26668a4 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSulpha.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSulpha.cpp @@ -82,7 +82,7 @@ s32 sceSulphaAgentsUnregister(vm::psv::ptr handles, u32 a } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSulpha, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSulpha, #name, name) psv_log_base sceSulpha("SceSulpha", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSysmodule.cpp b/rpcs3/Emu/ARMv7/Modules/sceSysmodule.cpp index ae4d00a7f3..51158c0226 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSysmodule.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSysmodule.cpp @@ -25,7 +25,7 @@ s32 sceSysmoduleIsLoaded(u16 id) return SCE_OK; // module is loaded } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceSysmodule, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSysmodule, #name, name) psv_log_base sceSysmodule("SceSysmodule", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceSystemGesture.cpp b/rpcs3/Emu/ARMv7/Modules/sceSystemGesture.cpp index d43b14d1f6..0e894f79fb 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceSystemGesture.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceSystemGesture.cpp @@ -246,7 +246,7 @@ s32 sceSystemGestureGetTouchEventByEventID(vm::psv::ptr(nid, &sceSystemGesture, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceSystemGesture, #name, name) psv_log_base sceSystemGesture("SceSystemGesture", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceTouch.cpp b/rpcs3/Emu/ARMv7/Modules/sceTouch.cpp index 2058cf7d2a..b6ce6ccc77 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceTouch.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceTouch.cpp @@ -30,7 +30,7 @@ s32 sceTouchGetSamplingState(u32 port, vm::psv::ptr pState) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceTouch, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceTouch, #name, name) psv_log_base sceTouch("SceTouch", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceUlt.cpp b/rpcs3/Emu/ARMv7/Modules/sceUlt.cpp index 80db5be93f..68216d7ddc 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceUlt.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceUlt.cpp @@ -541,7 +541,7 @@ s32 sceUltUlthreadGetSelf(vm::psv::ptr> ulthread) throw __FUNCTION__; } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceUlt, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceUlt, #name, name) psv_log_base sceUlt("SceUlt", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceVideodec.cpp b/rpcs3/Emu/ARMv7/Modules/sceVideodec.cpp index e441b8b9fc..bec390ebe1 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceVideodec.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceVideodec.cpp @@ -176,7 +176,7 @@ s32 sceAvcdecDecodeFlush(vm::psv::ptr pCtrl) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceVideodec, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceVideodec, #name, name) psv_log_base sceVideodec("SceVideodec", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceVoice.cpp b/rpcs3/Emu/ARMv7/Modules/sceVoice.cpp index d8e8331f18..cddc5f43d2 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceVoice.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceVoice.cpp @@ -250,7 +250,7 @@ s32 sceVoiceGetResourceInfo(vm::psv::ptr pInfo) } -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceVoice, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceVoice, #name, name) psv_log_base sceVoice("SceVoice", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceVoiceQoS.cpp b/rpcs3/Emu/ARMv7/Modules/sceVoiceQoS.cpp index 0627b88b99..050570aaa9 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceVoiceQoS.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceVoiceQoS.cpp @@ -112,7 +112,7 @@ s32 sceVoiceQoSReadPacket(SceVoiceQoSConnectionId connectionId, vm::psv::ptr(nid, &sceVoiceQoS, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceVoiceQoS, #name, name) psv_log_base sceVoiceQoS("SceVoiceQos", []() { diff --git a/rpcs3/Emu/ARMv7/Modules/sceXml.cpp b/rpcs3/Emu/ARMv7/Modules/sceXml.cpp index f8aa8a3d85..525ce21565 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceXml.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceXml.cpp @@ -4,7 +4,7 @@ extern psv_log_base sceXml; -#define REG_FUNC(nid, name) reg_psv_func<(func_ptr)name>(nid, &sceXml, #name, name) +#define REG_FUNC(nid, name) reg_psv_func(nid, &sceXml, #name, name) psv_log_base sceXml("SceXml", []() { diff --git a/rpcs3/Emu/ARMv7/PSVFuncList.h b/rpcs3/Emu/ARMv7/PSVFuncList.h index 7c8d3680ef..1dab68fcb5 100644 --- a/rpcs3/Emu/ARMv7/PSVFuncList.h +++ b/rpcs3/Emu/ARMv7/PSVFuncList.h @@ -33,6 +33,12 @@ public: }; +#if defined(_MSC_VER) +typedef void(*psv_func_caller)(ARMv7Context&); +#else +typedef psv_func_caller std::function; +#endif + // Utilities for binding ARMv7Context to C++ function arguments received by HLE functions or sent to callbacks namespace psv_func_detail { @@ -352,50 +358,70 @@ namespace psv_func_detail return put_func_args(context, args...) || (t == ARG_STACK); } - template + template struct func_binder; - template + template struct func_binder { typedef void(*func_t)(T...); + static void do_call(ARMv7Context& context, func_t _func) + { + call(_func, get_func_args<0, 0, 0, T...>(context)); + } + static void do_call(ARMv7Context& context) { - call((func_t)func, get_func_args<0, 0, 0, T...>(context)); + do_call(context, (func_t)func); } }; - template + template struct func_binder { typedef void(*func_t)(ARMv7Context&, T...); + static void do_call(ARMv7Context& context, func_t _func) + { + call(_func, std::tuple_cat(std::tuple(context), get_func_args<0, 0, 0, T...>(context))); + } + static void do_call(ARMv7Context& context) { - call((func_t)func, std::tuple_cat(std::tuple(context), get_func_args<0, 0, 0, T...>(context))); + do_call(context, (func_t)func); } }; - template + template struct func_binder { typedef RT(*func_t)(T...); + static void do_call(ARMv7Context& context, func_t _func) + { + bind_result::value>::put_result(context, call(_func, get_func_args<0, 0, 0, T...>(context))); + } + static void do_call(ARMv7Context& context) { - bind_result::value>::put_result(context, call((func_t)func, get_func_args<0, 0, 0, T...>(context))); + do_call(context, (func_t)func); } }; - template + template struct func_binder { typedef RT(*func_t)(ARMv7Context&, T...); + static void do_call(ARMv7Context& context, func_t _func) + { + bind_result::value>::put_result(context, call(_func, std::tuple_cat(std::tuple(context), get_func_args<0, 0, 0, T...>(context)))); + } + static void do_call(ARMv7Context& context) { - bind_result::value>::put_result(context, call((func_t)func, std::tuple_cat(std::tuple(context), get_func_args<0, 0, 0, T...>(context)))); + do_call(context, (func_t)func); } }; @@ -434,7 +460,7 @@ struct psv_func { u32 nid; // Unique function ID (should be generated individually for each elf loaded) const char* name; // Function name for information - void(*func)(ARMv7Context& context); // Function caller + psv_func_caller func; // Function caller psv_log_base* module; // Module for information }; @@ -448,18 +474,26 @@ enum psv_special_function_index : u16 // Do not call directly u32 add_psv_func(psv_func data); // Do not call directly -template void reg_psv_func(u32 nid, psv_log_base* module, const char* name, RT(*_func)(T...)) +template u32 add_psv_func(u32 nid, psv_log_base* module, const char* name, RT(*_func)(T...)) { psv_func f; f.nid = nid; f.name = name; +#if defined(_MSC_VER) f.func = psv_func_detail::func_binder::do_call; +#else + f.func = [_func](ARMv7Context& context){ psv_func_detail::func_binder::do_call(context, _func); }; +#endif f.module = module; - add_psv_func(f); + return add_psv_func(f); } -typedef void(func_ptr)(); +#if defined(_MSC_VER) +#define reg_psv_func(nid, module, name, func) add_psv_func(nid, module, name, func) +#else +#define reg_psv_func(nid, module, name, func) add_psv_func(nid, module, name, func) +#endif // Find registered HLE function by NID psv_func* get_psv_func_by_nid(u32 nid, u32* out_index = nullptr); diff --git a/rpcs3/Emu/SysCalls/Modules.h b/rpcs3/Emu/SysCalls/Modules.h index 1bd14278b1..65b7d113d8 100644 --- a/rpcs3/Emu/SysCalls/Modules.h +++ b/rpcs3/Emu/SysCalls/Modules.h @@ -10,10 +10,10 @@ struct ModuleFunc { u32 id; Module* module; - void(*func)(PPUThread&); + ps3_func_caller func; vm::ptr lle_func; - ModuleFunc(u32 id, Module* module, void(*func)(PPUThread&), vm::ptr lle_func = vm::ptr::make(0)) + ModuleFunc(u32 id, Module* module, ps3_func_caller func, vm::ptr lle_func = vm::ptr::make(0)) : id(id) , module(module) , func(func) @@ -111,9 +111,9 @@ public: bool RemoveId(u32 id); - template __forceinline u32 AddFunc(const u32 nid, T _func); - template __forceinline u32 AddFunc(const char* name, T _func); - template __forceinline u32 AddFuncSub(const char group[8], const u64 ops[], const char* name, T _func); + template __forceinline u32 AddFunc(const u32 nid, T _func); + template __forceinline u32 AddFunc(const char* name, T _func); + template __forceinline u32 AddFuncSub(const char group[8], const u64 ops[], const char* name, T _func); }; u32 add_ps3_func(ModuleFunc func); @@ -123,19 +123,19 @@ void execute_ps3_func_by_index(PPUThread& CPU, u32 id); void clear_ps3_functions(); u32 get_function_id(const char* name); -template +template __forceinline u32 Module::AddFunc(const u32 nid, T _func) { return add_ps3_func(ModuleFunc(nid, this, ppu_func_detail::_bind_func(_func))); } -template +template __forceinline u32 Module::AddFunc(const char* name, T _func) { return AddFunc(get_function_id(name), _func); } -template +template __forceinline u32 Module::AddFuncSub(const char group[8], const u64 ops[], const char* name, T _func) { SFunc* sf = new SFunc; @@ -163,8 +163,8 @@ __forceinline u32 Module::AddFuncSub(const char group[8], const u64 ops[], const #define REG_SUB(module, group, name, ...) \ static const u64 name ## _table[] = {__VA_ARGS__ , 0}; \ - if (name ## _table[0]) module.AddFuncSub<(void())name>(group, name ## _table, #name, name) + if (name ## _table[0]) module.AddFuncSub<_targ(name)>(group, name ## _table, #name, name) -#define REG_FUNC(module, name) module.AddFunc<(void())name>(#name, name) +#define REG_FUNC(module, name) module.AddFunc<_targ(name)>(#name, name) #define UNIMPLEMENTED_FUNC(module) module.Error("%s", __FUNCTION__) diff --git a/rpcs3/Emu/SysCalls/SC_FUNC.h b/rpcs3/Emu/SysCalls/SC_FUNC.h index dfe0e4d783..0c7186de6f 100644 --- a/rpcs3/Emu/SysCalls/SC_FUNC.h +++ b/rpcs3/Emu/SysCalls/SC_FUNC.h @@ -1,6 +1,12 @@ #pragma once #include "Emu/Cell/PPUThread.h" +#if defined(_MSC_VER) +typedef void(*ps3_func_caller)(PPUThread&); +#else +typedef ps3_func_caller std::function; +#endif + namespace ppu_func_detail { enum bind_arg_type @@ -156,60 +162,88 @@ namespace ppu_func_detail static const bind_arg_type value = is_float ? ARG_FLOAT : (is_vector ? ARG_VECTOR : ARG_GENERAL); }; - template + template struct func_binder; - template + template struct func_binder { typedef void(*func_t)(T...); + static void do_call(PPUThread& CPU, func_t _func) + { + call(_func, iterate<0, 0, 0, T...>(CPU)); + } + static void do_call(PPUThread& CPU) { - call((func_t)func, iterate<0, 0, 0, T...>(CPU)); + do_call(CPU, (func_t)func); } }; - template + template struct func_binder { typedef void(*func_t)(PPUThread&, T...); + static void do_call(PPUThread& CPU, func_t _func) + { + call(_func, std::tuple_cat(std::tuple(CPU), iterate<0, 0, 0, T...>(CPU))); + } + static void do_call(PPUThread& CPU) { - call((func_t)func, std::tuple_cat(std::tuple(CPU), iterate<0, 0, 0, T...>(CPU))); + do_call(CPU, (func_t)func); } }; - template + template struct func_binder { typedef RT(*func_t)(T...); + static void do_call(PPUThread& CPU, func_t _func) + { + bind_result::value>::func(CPU, call(_func, iterate<0, 0, 0, T...>(CPU))); + } + static void do_call(PPUThread& CPU) { - bind_result::value>::func(CPU, call((func_t)func, iterate<0, 0, 0, T...>(CPU))); + do_call(CPU, (func_t)func); } }; - template + template struct func_binder { typedef RT(*func_t)(PPUThread&, T...); + static void do_call(PPUThread& CPU, func_t _func) + { + bind_result::value>::func(CPU, call(_func, std::tuple_cat(std::tuple(CPU), iterate<0, 0, 0, T...>(CPU)))); + } + static void do_call(PPUThread& CPU) { - bind_result::value>::func(CPU, call((func_t)func, std::tuple_cat(std::tuple(CPU), iterate<0, 0, 0, T...>(CPU)))); + do_call(CPU, (func_t)func); } }; - using bound_func_t = void(*)(PPUThread&); - - template - bound_func_t _bind_func(RT(*_func)(T...)) + template + ps3_func_caller _bind_func(RT(*_func)(T...)) { +#if defined(_MSC_VER) return ppu_func_detail::func_binder::do_call; +#else + return [_func](PPUThread& CPU){ ppu_func_detail::func_binder::do_call(CPU, _func); }; +#endif } } -#define bind_func(func) (ppu_func_detail::_bind_func<(void())func>(func)) +#if defined(_MSC_VER) +#define _targ(name) name +#else +#define _targ(name) nullptr +#endif + +#define bind_func(func) ppu_func_detail::_bind_func<_targ(func)>(func)