function_wrappers.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. // Copyright (c) 2012- PPSSPP Project.
  2. // This program is free software: you can redistribute it and/or modify
  3. // it under the terms of the GNU General Public License as published by
  4. // the Free Software Foundation, version 2.0 or later versions.
  5. // This program is distributed in the hope that it will be useful,
  6. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  7. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  8. // GNU General Public License 2.0 for more details.
  9. // A copy of the GPL 2.0 should have been included with the program.
  10. // If not, see http://www.gnu.org/licenses/
  11. // Official git repository and contact information can be found at
  12. // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
  13. #pragma once
  14. #include "common/common_types.h"
  15. #include "core/mem_map.h"
  16. #include "core/hle/hle.h"
  17. // For easy parameter parsing and return value processing.
  18. //32bit wrappers
  19. template<void func()> void WrapV_V() {
  20. func();
  21. }
  22. template<u32 func()> void WrapU_V() {
  23. RETURN(func());
  24. }
  25. template<int func(void *, const char *)> void WrapI_VC() {
  26. u32 param_1 = 0;
  27. u32 retval = func(&param_1, Memory::GetCharPointer(PARAM(1)));
  28. Core::g_app_core->SetReg(1, param_1);
  29. RETURN(retval);
  30. }
  31. template<u32 func(int, void *, int)> void WrapU_IVI() {
  32. u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)), PARAM(2));
  33. RETURN(retval);
  34. }
  35. template<int func(const char *, int, int, u32)> void WrapI_CIIU() {
  36. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
  37. RETURN(retval);
  38. }
  39. template<int func(int, const char *, u32, void *, void *, u32, int)> void WrapI_ICUVVUI() {
  40. u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2),
  41. Memory::GetPointer(PARAM(3)),Memory::GetPointer(PARAM(4)), PARAM(5), PARAM(6));
  42. RETURN(retval);
  43. }
  44. // Hm, do so many params get passed in registers?
  45. template<int func(const char *, int, const char *, int, int, int, int, int)> void WrapI_CICIIIII() {
  46. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), Memory::GetCharPointer(PARAM(2)),
  47. PARAM(3), PARAM(4), PARAM(5), PARAM(6), PARAM(7));
  48. RETURN(retval);
  49. }
  50. // Hm, do so many params get passed in registers?
  51. template<int func(const char *, int, int, int, int, int, int)> void WrapI_CIIIIII() {
  52. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  53. PARAM(3), PARAM(4), PARAM(5), PARAM(6));
  54. RETURN(retval);
  55. }
  56. // Hm, do so many params get passed in registers?
  57. template<int func(int, int, int, int, int, int, u32)> void WrapI_IIIIIIU() {
  58. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
  59. RETURN(retval);
  60. }
  61. // Hm, do so many params get passed in registers?
  62. template<int func(int, int, int, int, int, int, int, int, u32)> void WrapI_IIIIIIIIU() {
  63. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6), PARAM(7), PARAM(8));
  64. RETURN(retval);
  65. }
  66. template<u32 func(int, void *)> void WrapU_IV() {
  67. u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)));
  68. RETURN(retval);
  69. }
  70. template<float func()> void WrapF_V() {
  71. RETURNF(func());
  72. }
  73. // TODO: Not sure about the floating point parameter passing
  74. template<float func(int, float, u32)> void WrapF_IFU() {
  75. RETURNF(func(PARAM(0), PARAMF(0), PARAM(1)));
  76. }
  77. template<u32 func(u32)> void WrapU_U() {
  78. u32 retval = func(PARAM(0));
  79. RETURN(retval);
  80. }
  81. template<u32 func(u32, int)> void WrapU_UI() {
  82. u32 retval = func(PARAM(0), PARAM(1));
  83. RETURN(retval);
  84. }
  85. template<int func(u32)> void WrapI_U() {
  86. int retval = func(PARAM(0));
  87. RETURN(retval);
  88. }
  89. template<int func(u32, int)> void WrapI_UI() {
  90. int retval = func(PARAM(0), PARAM(1));
  91. RETURN(retval);
  92. }
  93. template<int func(u32, int, int, u32)> void WrapI_UIIU() {
  94. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  95. RETURN(retval);
  96. }
  97. template<u32 func(int, u32, int)> void WrapU_IUI() {
  98. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  99. RETURN(retval);
  100. }
  101. template<int func(u32, u32)> void WrapI_UU() {
  102. int retval = func(PARAM(0), PARAM(1));
  103. RETURN(retval);
  104. }
  105. template<int func(u32, float, float)> void WrapI_UFF() {
  106. // Not sure about the float arguments.
  107. int retval = func(PARAM(0), PARAMF(0), PARAMF(1));
  108. RETURN(retval);
  109. }
  110. template<int func(u32, u32, u32)> void WrapI_UUU() {
  111. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  112. RETURN(retval);
  113. }
  114. template<int func(u32, u32, u32, int)> void WrapI_UUUI() {
  115. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  116. RETURN(retval);
  117. }
  118. template<int func(u32, u32, u32, int, int, int,int )> void WrapI_UUUIIII() {
  119. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
  120. RETURN(retval);
  121. }
  122. template<int func(u32, u32, u32, u32)> void WrapI_UUUU() {
  123. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  124. RETURN(retval);
  125. }
  126. template<int func(u32, u32, u32, u32, u32)> void WrapI_UUUUU() {
  127. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  128. RETURN(retval);
  129. }
  130. template<int func(void*)> void WrapI_V() {
  131. u32 retval = func(Memory::GetPointer(PARAM(0)));
  132. RETURN(retval);
  133. }
  134. template<u32 func(int)> void WrapU_I() {
  135. u32 retval = func(PARAM(0));
  136. RETURN(retval);
  137. }
  138. template<u32 func(int, int, u32)> void WrapU_IIU() {
  139. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  140. RETURN(retval);
  141. }
  142. template<int func(int)> void WrapI_I() {
  143. int retval = func(PARAM(0));
  144. RETURN(retval);
  145. }
  146. template<void func(u32)> void WrapV_U() {
  147. func(PARAM(0));
  148. }
  149. template<void func(int)> void WrapV_I() {
  150. func(PARAM(0));
  151. }
  152. template<void func(u32, u32)> void WrapV_UU() {
  153. func(PARAM(0), PARAM(1));
  154. }
  155. template<void func(int, int)> void WrapV_II() {
  156. func(PARAM(0), PARAM(1));
  157. }
  158. template<void func(u32, const char *)> void WrapV_UC() {
  159. func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
  160. }
  161. template<int func(u32, const char *)> void WrapI_UC() {
  162. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
  163. RETURN(retval);
  164. }
  165. template<int func(u32, const char *, int)> void WrapI_UCI() {
  166. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2));
  167. RETURN(retval);
  168. }
  169. template<u32 func(u32, int , int , int, int, int)> void WrapU_UIIIII() {
  170. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
  171. RETURN(retval);
  172. }
  173. template<u32 func(u32, int , int , int, u32)> void WrapU_UIIIU() {
  174. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  175. RETURN(retval);
  176. }
  177. template<u32 func(u32, int , int , int, int, int, int)> void WrapU_UIIIIII() {
  178. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
  179. RETURN(retval);
  180. }
  181. template<u32 func(u32, u32)> void WrapU_UU() {
  182. u32 retval = func(PARAM(0), PARAM(1));
  183. RETURN(retval);
  184. }
  185. template<u32 func(u32, u32, int)> void WrapU_UUI() {
  186. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  187. RETURN(retval);
  188. }
  189. template<u32 func(u32, u32, int, int)> void WrapU_UUII() {
  190. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  191. RETURN(retval);
  192. }
  193. template<u32 func(const char *, u32, u32, u32)> void WrapU_CUUU() {
  194. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
  195. RETURN(retval);
  196. }
  197. template<void func(u32, int, u32, int, int)> void WrapV_UIUII() {
  198. func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  199. }
  200. template<u32 func(u32, int, u32, int, int)> void WrapU_UIUII() {
  201. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  202. RETURN(retval);
  203. }
  204. template<int func(u32, int, u32, int, int)> void WrapI_UIUII() {
  205. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  206. RETURN(retval);
  207. }
  208. template<u32 func(u32, int, u32, int)> void WrapU_UIUI() {
  209. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  210. RETURN(retval);
  211. }
  212. template<int func(u32, int, u32, int)> void WrapI_UIUI() {
  213. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  214. RETURN(retval);
  215. }
  216. template<u32 func(u32, int, u32)> void WrapU_UIU() {
  217. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  218. RETURN(retval);
  219. }
  220. template<u32 func(u32, int, u32, u32)> void WrapU_UIUU() {
  221. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  222. RETURN(retval);
  223. }
  224. template<u32 func(u32, int, int)> void WrapU_UII() {
  225. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  226. RETURN(retval);
  227. }
  228. template<u32 func(u32, int, int, u32)> void WrapU_UIIU() {
  229. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  230. RETURN(retval);
  231. }
  232. template<int func(u32, int, int, u32, u32)> void WrapI_UIIUU() {
  233. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  234. RETURN(retval);
  235. }
  236. template<int func(u32, u32, int, int)> void WrapI_UUII() {
  237. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  238. RETURN(retval);
  239. }
  240. template<int func(u32, u32, int, int, int)> void WrapI_UUIII() {
  241. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  242. RETURN(retval);
  243. }
  244. template<void func(u32, int, int, int)> void WrapV_UIII() {
  245. func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  246. }
  247. template<void func(u32, int, int, int, int, int)> void WrapV_UIIIII() {
  248. func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
  249. }
  250. template<void func(u32, int, int)> void WrapV_UII() {
  251. func(PARAM(0), PARAM(1), PARAM(2));
  252. }
  253. template<u32 func(int, u32)> void WrapU_IU() {
  254. int retval = func(PARAM(0), PARAM(1));
  255. RETURN(retval);
  256. }
  257. template<int func(int, u32)> void WrapI_IU() {
  258. int retval = func(PARAM(0), PARAM(1));
  259. RETURN(retval);
  260. }
  261. template<int func(u32, u32, int)> void WrapI_UUI() {
  262. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  263. RETURN(retval);
  264. }
  265. template<int func(u32, u32, int, u32)> void WrapI_UUIU() {
  266. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  267. RETURN(retval);
  268. }
  269. template<int func(int, int)> void WrapI_II() {
  270. int retval = func(PARAM(0), PARAM(1));
  271. RETURN(retval);
  272. }
  273. template<int func(int, int, int)> void WrapI_III() {
  274. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  275. RETURN(retval);
  276. }
  277. template<int func(int, u32, int)> void WrapI_IUI() {
  278. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  279. RETURN(retval);
  280. }
  281. template<int func(int, int, int, int)> void WrapI_IIII() {
  282. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  283. RETURN(retval);
  284. }
  285. template<int func(u32, int, int, int)> void WrapI_UIII() {
  286. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  287. RETURN(retval);
  288. }
  289. template<int func(int, int, int, u32, int)> void WrapI_IIIUI() {
  290. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  291. RETURN(retval);
  292. }
  293. template<int func(int, u32, u32, int, int)> void WrapI_IUUII() {
  294. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  295. RETURN(retval);
  296. }
  297. template<int func(int, const char *, int, u32, u32)> void WrapI_ICIUU() {
  298. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4));
  299. RETURN(retval);
  300. }
  301. template<int func(int, int, u32)> void WrapI_IIU() {
  302. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  303. RETURN(retval);
  304. }
  305. template<void func(int, u32)> void WrapV_IU() {
  306. func(PARAM(0), PARAM(1));
  307. }
  308. template<void func(u32, int)> void WrapV_UI() {
  309. func(PARAM(0), PARAM(1));
  310. }
  311. template<u32 func(const char *)> void WrapU_C() {
  312. u32 retval = func(Memory::GetCharPointer(PARAM(0)));
  313. RETURN(retval);
  314. }
  315. template<u32 func(const char *, const char *, const char *, u32)> void WrapU_CCCU() {
  316. u32 retval = func(Memory::GetCharPointer(PARAM(0)),
  317. Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)),
  318. PARAM(3));
  319. RETURN(retval);
  320. }
  321. template<int func(const char *)> void WrapI_C() {
  322. int retval = func(Memory::GetCharPointer(PARAM(0)));
  323. RETURN(retval);
  324. }
  325. template<int func(const char *, u32)> void WrapI_CU() {
  326. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
  327. RETURN(retval);
  328. }
  329. template<int func(const char *, u32, int)> void WrapI_CUI() {
  330. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
  331. RETURN(retval);
  332. }
  333. template<int func(int, const char *, int, u32)> void WrapI_ICIU() {
  334. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3));
  335. RETURN(retval);
  336. }
  337. template<int func(const char *, int, u32)> void WrapI_CIU() {
  338. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
  339. RETURN(retval);
  340. }
  341. template<int func(const char *, u32, u32)> void WrapI_CUU() {
  342. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
  343. RETURN(retval);
  344. }
  345. template<int func(const char *, u32, u32, u32)> void WrapI_CUUU() {
  346. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  347. PARAM(3));
  348. RETURN(retval);
  349. }
  350. template<int func(const char *, const char*, int, int)> void WrapI_CCII() {
  351. int retval = func(Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3));
  352. RETURN(retval);
  353. }
  354. template<int func(const char *, u32, u32, int, u32, u32)> void WrapI_CUUIUU() {
  355. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  356. PARAM(3), PARAM(4), PARAM(5));
  357. RETURN(retval);
  358. }
  359. template<int func(const char *, int, int, u32, int, int)> void WrapI_CIIUII() {
  360. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  361. PARAM(3), PARAM(4), PARAM(5));
  362. RETURN(retval);
  363. }
  364. template<int func(const char *, int, u32, u32, u32)> void WrapI_CIUUU() {
  365. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  366. PARAM(3), PARAM(4));
  367. RETURN(retval);
  368. }
  369. template<int func(const char *, u32, u32, u32, u32, u32)> void WrapI_CUUUUU() {
  370. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  371. PARAM(3), PARAM(4), PARAM(5));
  372. RETURN(retval);
  373. }
  374. template<u32 func(const char *, u32)> void WrapU_CU() {
  375. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
  376. RETURN((u32) retval);
  377. }
  378. template<u32 func(u32, const char *)> void WrapU_UC() {
  379. u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
  380. RETURN(retval);
  381. }
  382. template<u32 func(const char *, u32, u32)> void WrapU_CUU() {
  383. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
  384. RETURN((u32) retval);
  385. }
  386. template<u32 func(int, int, int)> void WrapU_III() {
  387. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  388. RETURN(retval);
  389. }
  390. template<u32 func(int, int)> void WrapU_II() {
  391. u32 retval = func(PARAM(0), PARAM(1));
  392. RETURN(retval);
  393. }
  394. template<u32 func(int, int, int, int)> void WrapU_IIII() {
  395. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  396. RETURN(retval);
  397. }
  398. template<u32 func(int, u32, u32)> void WrapU_IUU() {
  399. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  400. RETURN(retval);
  401. }
  402. template<u32 func(int, u32, u32, u32)> void WrapU_IUUU() {
  403. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  404. RETURN(retval);
  405. }
  406. template<u32 func(int, u32, u32, u32, u32)> void WrapU_IUUUU() {
  407. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  408. RETURN(retval);
  409. }
  410. template<u32 func(u32, u32, u32)> void WrapU_UUU() {
  411. u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
  412. RETURN(retval);
  413. }
  414. template<void func(int, u32, u32)> void WrapV_IUU() {
  415. func(PARAM(0), PARAM(1), PARAM(2));
  416. }
  417. template<void func(int, int, u32)> void WrapV_IIU() {
  418. func(PARAM(0), PARAM(1), PARAM(2));
  419. }
  420. template<void func(u32, int, u32)> void WrapV_UIU() {
  421. func(PARAM(0), PARAM(1), PARAM(2));
  422. }
  423. template<int func(u32, int, u32)> void WrapI_UIU() {
  424. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  425. RETURN(retval);
  426. }
  427. template<void func(int, u32, u32, u32, u32)> void WrapV_IUUUU() {
  428. func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  429. }
  430. template<void func(u32, u32, u32)> void WrapV_UUU() {
  431. func(PARAM(0), PARAM(1), PARAM(2));
  432. }
  433. template<void func(u32, u32, u32, u32)> void WrapV_UUUU() {
  434. func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  435. }
  436. template<void func(const char *, u32, int, u32)> void WrapV_CUIU() {
  437. func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
  438. }
  439. template<int func(const char *, u32, int, u32)> void WrapI_CUIU() {
  440. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
  441. RETURN(retval);
  442. }
  443. template<void func(u32, const char *, u32, int, u32)> void WrapV_UCUIU() {
  444. func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3),
  445. PARAM(4));
  446. }
  447. template<int func(u32, const char *, u32, int, u32)> void WrapI_UCUIU() {
  448. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2),
  449. PARAM(3), PARAM(4));
  450. RETURN(retval);
  451. }
  452. template<void func(const char *, u32, int, int, u32)> void WrapV_CUIIU() {
  453. func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3),
  454. PARAM(4));
  455. }
  456. template<int func(const char *, u32, int, int, u32)> void WrapI_CUIIU() {
  457. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  458. PARAM(3), PARAM(4));
  459. RETURN(retval);
  460. }
  461. template<u32 func(u32, u32, u32, u32)> void WrapU_UUUU() {
  462. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  463. RETURN(retval);
  464. }
  465. template<u32 func(u32, const char *, u32, u32)> void WrapU_UCUU() {
  466. u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3));
  467. RETURN(retval);
  468. }
  469. template<u32 func(u32, u32, u32, int)> void WrapU_UUUI() {
  470. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  471. RETURN(retval);
  472. }
  473. template<u32 func(u32, u32, u32, int, u32)> void WrapU_UUUIU() {
  474. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  475. RETURN(retval);
  476. }
  477. template<u32 func(u32, u32, u32, int, u32, int)> void WrapU_UUUIUI() {
  478. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
  479. RETURN(retval);
  480. }
  481. template<u32 func(u32, u32, int, u32)> void WrapU_UUIU() {
  482. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  483. RETURN(retval);
  484. }
  485. template<u32 func(u32, int, int, int)> void WrapU_UIII() {
  486. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  487. RETURN(retval);
  488. }
  489. template<int func(int, u32, u32, u32, u32)> void WrapI_IUUUU() {
  490. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  491. RETURN(retval);
  492. }
  493. template<int func(int, u32, u32, u32, u32, u32)> void WrapI_IUUUUU() {
  494. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
  495. RETURN(retval);
  496. }
  497. template<int func(int, u32, int, int)> void WrapI_IUII() {
  498. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  499. RETURN(retval);
  500. }
  501. template<u32 func(u32, u32, u32, u32, u32)> void WrapU_UUUUU() {
  502. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  503. RETURN(retval);
  504. }
  505. template<void func(u32, u32, u32, u32, u32)> void WrapV_UUUUU() {
  506. func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  507. }
  508. template<u32 func(const char *, const char *)> void WrapU_CC() {
  509. int retval = func(Memory::GetCharPointer(PARAM(0)),
  510. Memory::GetCharPointer(PARAM(1)));
  511. RETURN(retval);
  512. }
  513. template<void func(const char*)> void WrapV_C() {
  514. func(Memory::GetCharPointer(PARAM(0)));
  515. }
  516. template<void func(s64)> void WrapV_S64() {
  517. func(((s64)PARAM(1) << 32) | PARAM(0));
  518. }
  519. template<void func(const char *, int)> void WrapV_CI() {
  520. func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
  521. }
  522. template<u32 func(const char *, int)> void WrapU_CI() {
  523. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
  524. RETURN(retval);
  525. }
  526. template<u32 func(const char *, int, int)> void WrapU_CII() {
  527. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
  528. RETURN(retval);
  529. }
  530. template<int func(const char *, int, u32, int, u32)> void WrapU_CIUIU() {
  531. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  532. PARAM(3), PARAM(4));
  533. RETURN(retval);
  534. }
  535. template<u32 func(const char *, int, u32, int, u32, int)> void WrapU_CIUIUI() {
  536. u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
  537. PARAM(3), PARAM(4), PARAM(5));
  538. RETURN(retval);
  539. }
  540. template<u32 func(u32, u32, u32, u32, u32, u32)> void WrapU_UUUUUU() {
  541. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4),
  542. PARAM(5));
  543. RETURN(retval);
  544. }
  545. template<int func(int, u32, u32, u32)> void WrapI_IUUU() {
  546. int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  547. RETURN(retval);
  548. }
  549. template<int func(int, u32, u32)> void WrapI_IUU() {
  550. int retval = func(PARAM(0), PARAM(1), PARAM(2));
  551. RETURN(retval);
  552. }
  553. template<u32 func(u32, u32, u32, u32, u32, u32, u32)> void WrapU_UUUUUUU() {
  554. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
  555. RETURN(retval);
  556. }
  557. template<int func(u32, int, u32, u32)> void WrapI_UIUU() {
  558. u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
  559. RETURN(retval);
  560. }
  561. template<int func(int, const char *)> void WrapI_IC() {
  562. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
  563. RETURN(retval);
  564. }
  565. template <int func(int, const char *, const char *, u32, int)> void WrapI_ICCUI() {
  566. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3), PARAM(4));
  567. RETURN(retval);
  568. }
  569. template <int func(int, const char *, const char *, int)> void WrapI_ICCI() {
  570. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3));
  571. RETURN(retval);
  572. }
  573. template <int func(const char *, int, int)> void WrapI_CII() {
  574. int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
  575. RETURN(retval);
  576. }
  577. template <int func(int, const char *, int)> void WrapI_ICI() {
  578. int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2));
  579. RETURN(retval);
  580. }
  581. template<int func(int, void *, void *, void *, void *, u32, int)> void WrapI_IVVVVUI(){
  582. u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)), Memory::GetPointer(PARAM(2)), Memory::GetPointer(PARAM(3)), Memory::GetPointer(PARAM(4)), PARAM(5), PARAM(6) );
  583. RETURN(retval);
  584. }
  585. template<int func(int, const char *, u32, void *, int, int, int)> void WrapI_ICUVIII(){
  586. u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointer(PARAM(3)), PARAM(4), PARAM(5), PARAM(6));
  587. RETURN(retval);
  588. }
  589. template<int func(void*, u32)> void WrapI_VU(){
  590. u32 param_1 = 0;
  591. u32 retval = func(&param_1, PARAM(1));
  592. Core::g_app_core->SetReg(1, param_1);
  593. RETURN(retval);
  594. }
  595. template<int func(void*, void*, u32)> void WrapI_VVU(){
  596. u32 retval = func(Memory::GetPointer(PARAM(0)), Memory::GetPointer(PARAM(1)), PARAM(2));
  597. RETURN(retval);
  598. }
  599. template<int func(void*, u32, void*, int)> void WrapI_VUVI(){
  600. u32 retval = func(Memory::GetPointer(PARAM(0)), PARAM(1), Memory::GetPointer(PARAM(2)), PARAM(3));
  601. RETURN(retval);
  602. }
  603. template<int func(void*, u32, u32, u32, u32, u32)> void WrapI_VUUUUU(){
  604. u32 param_1 = 0;
  605. u32 retval = func(&param_1, PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
  606. Core::g_app_core->SetReg(1, param_1);
  607. RETURN(retval);
  608. }
  609. template<int func(u32, s64)> void WrapI_US64() {
  610. int retval = func(PARAM(0), (((u64)PARAM(3) << 32) | PARAM(2)));
  611. RETURN(retval);
  612. }
  613. template<int func(void*, void*, u32, u32, s64)> void WrapI_VVUUS64() {
  614. u32 param_1 = 0;
  615. int retval = func(&param_1, Memory::GetPointer(PARAM(1)), PARAM(2), PARAM(3), (((u64)PARAM(4) << 32) | PARAM(0)));
  616. Core::g_app_core->SetReg(1, param_1);
  617. RETURN(retval);
  618. }
  619. // TODO(bunnei): Is this correct? Probably not
  620. template<int func(u32, u32, u32, u32, s64)> void WrapI_UUUUS64() {
  621. int retval = func(PARAM(5), PARAM(1), PARAM(2), PARAM(3), (((u64)PARAM(4) << 32) | PARAM(0)));
  622. RETURN(retval);
  623. }