1 // Copyright (c) 2012- PPSSPP Project.
2 
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, version 2.0 or later versions.
6 
7 // This program is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 // GNU General Public License 2.0 for more details.
11 
12 // A copy of the GPL 2.0 should have been included with the program.
13 // If not, see http://www.gnu.org/licenses/
14 
15 // Official git repository and contact information can be found at
16 // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
17 
18 #pragma once
19 
20 #include "Common/CommonTypes.h"
21 #include "Core/HLE/HLE.h"
22 #include "Core/MemMap.h"
23 
24 // For easy parameter parsing and return value processing.
25 
26 // 64bit wrappers
27 // 64bit values are always "aligned" in regs (never start on an odd reg.)
28 
WrapU64_V()29 template<u64 func()> void WrapU64_V() {
30 	u64 retval = func();
31 	RETURN64(retval);
32 }
33 
WrapU64_U()34 template<u64 func(u32)> void WrapU64_U() {
35 	u64 retval = func(PARAM(0));
36 	RETURN64(retval);
37 }
38 
WrapU64_I()39 template<u64 func(int)> void WrapU64_I() {
40 	u64 retval = func(PARAM(0));
41 	RETURN64(retval);
42 }
43 
WrapU64_UU64()44 template<u64 func(u32, u64)> void WrapU64_UU64() {
45 	u64 retval = func(PARAM(0), PARAM64(2));
46 	RETURN64(retval);
47 }
48 
WrapU64_IU64()49 template<u64 func(int, u64)> void WrapU64_IU64() {
50 	u64 retval = func(PARAM(0), PARAM64(2));
51 	RETURN64(retval);
52 }
53 
WrapI_IU64()54 template<int func(int, u64)> void WrapI_IU64() {
55 	int retval = func(PARAM(0), PARAM64(2));
56 	RETURN(retval);
57 }
58 
WrapI_UU64()59 template<int func(u32, u64)> void WrapI_UU64() {
60 	int retval = func(PARAM(0), PARAM64(2));
61 	RETURN(retval);
62 }
63 
WrapU_UU64()64 template<u32 func(u32, u64)> void WrapU_UU64() {
65 	u32 retval = func(PARAM(0), PARAM64(2));
66 	RETURN(retval);
67 }
68 
WrapI_UUU64()69 template<int func(u32, u32, u64)> void WrapI_UUU64() {
70 	int retval = func(PARAM(0), PARAM(1), PARAM64(2));
71 	RETURN(retval);
72 }
73 
WrapU_II64I()74 template<u32 func(int, s64, int)> void WrapU_II64I() {
75 	u32 retval = func(PARAM(0), PARAM64(2), PARAM(4));
76 	RETURN(retval);
77 }
78 
WrapU_UU64UU()79 template<u32 func(u32, u64, u32, u32)> void WrapU_UU64UU() {
80 	u32 retval = func(PARAM(0), PARAM64(2), PARAM(4), PARAM(5));
81 	RETURN(retval);
82 }
83 
WrapU_IU64UU()84 template<u32 func(int, u64, u32, u32)> void WrapU_IU64UU() {
85 	u32 retval = func(PARAM(0), PARAM64(2), PARAM(4), PARAM(5));
86 	RETURN(retval);
87 }
88 
WrapI_IICU64()89 template<int func(int, int, const char*, u64)> void WrapI_IICU64() {
90 	int retval = func(PARAM(0), PARAM(1), Memory::GetCharPointer(PARAM(2)), PARAM64(4));
91 	RETURN(retval);
92 }
93 
WrapI64_II64I()94 template<s64 func(int, s64, int)> void WrapI64_II64I() {
95 	s64 retval = func(PARAM(0), PARAM64(2), PARAM(4));
96 	RETURN64(retval);
97 }
98 
99 //32bit wrappers
WrapV_V()100 template<void func()> void WrapV_V() {
101 	func();
102 }
103 
WrapU_V()104 template<u32 func()> void WrapU_V() {
105 	RETURN(func());
106 }
107 
WrapU_IVI()108 template<u32 func(int, void *, int)> void WrapU_IVI() {
109 	u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)), PARAM(2));
110 	RETURN(retval);
111 }
112 
WrapI_CIIU()113 template<int func(const char *, int, int, u32)> void WrapI_CIIU() {
114 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
115 	RETURN(retval);
116 }
117 
WrapI_ICUVVUI()118 template<int func(int, const char *, u32, void *, void *, u32, int)> void WrapI_ICUVVUI() {
119 	u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointer(PARAM(3)),Memory::GetPointer(PARAM(4)), PARAM(5), PARAM(6) );
120 	RETURN(retval);
121 }
122 
123 // Hm, do so many params get passed in registers?
WrapI_CICIIIII()124 template<int func(const char *, int, const char *, int, int, int, int, int)> void WrapI_CICIIIII() {
125 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), Memory::GetCharPointer(PARAM(2)),
126 		PARAM(3), PARAM(4), PARAM(5), PARAM(6), PARAM(7));
127 	RETURN(retval);
128 }
129 
130 // Hm, do so many params get passed in registers?
WrapI_CIIIIII()131 template<int func(const char *, int, int, int, int, int, int)> void WrapI_CIIIIII() {
132 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
133 		PARAM(3), PARAM(4), PARAM(5), PARAM(6));
134 	RETURN(retval);
135 }
136 
WrapI_IIIC()137 template<int func(int, int, int, const char *)> void WrapI_IIIC() {
138 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), Memory::GetCharPointer(PARAM(3)));
139 	RETURN(retval);
140 }
141 
142 // Hm, do so many params get passed in registers?
WrapI_IIIIIIU()143 template<int func(int, int, int, int, int, int, u32)> void WrapI_IIIIIIU() {
144 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
145 	RETURN(retval);
146 }
147 
148 // Hm, do so many params get passed in registers?
WrapI_IIIIIIIIU()149 template<int func(int, int, int, int, int, int, int, int, u32)> void WrapI_IIIIIIIIU() {
150 	u32 param8 = *(const u32_le *)Memory::GetPointer(currentMIPS->r[29]); //Fixed 9th parameter, thanks to Kingcom
151 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6), PARAM(7), param8);
152 	RETURN(retval);
153 }
154 
WrapU_IV()155 template<u32 func(int, void *)> void WrapU_IV() {
156 	u32 retval = func(PARAM(0), Memory::GetPointer(PARAM(1)));
157 	RETURN(retval);
158 }
159 
WrapF_V()160 template<float func()> void WrapF_V() {
161 	RETURNF(func());
162 }
163 
164 // TODO: Not sure about the floating point parameter passing
WrapF_IFU()165 template<float func(int, float, u32)> void WrapF_IFU() {
166 	RETURNF(func(PARAM(0), PARAMF(0), PARAM(1)));
167 }
168 
WrapU_U()169 template<u32 func(u32)> void WrapU_U() {
170 	u32 retval = func(PARAM(0));
171 	RETURN(retval);
172 }
173 
WrapU_UI()174 template<u32 func(u32, int)> void WrapU_UI() {
175 	u32 retval = func(PARAM(0), PARAM(1));
176 	RETURN(retval);
177 }
178 
WrapI_U()179 template<int func(u32)> void WrapI_U() {
180 	int retval = func(PARAM(0));
181 	RETURN(retval);
182 }
183 
WrapI_UI()184 template<int func(u32, int)> void WrapI_UI() {
185 	int retval = func(PARAM(0), PARAM(1));
186 	RETURN(retval);
187 }
188 
WrapI_UIIU()189 template<int func(u32, int, int, u32)> void WrapI_UIIU() {
190 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
191 	RETURN(retval);
192 }
193 
WrapU_IUI()194 template<u32 func(int, u32, int)> void WrapU_IUI() {
195 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
196 	RETURN(retval);
197 }
198 
WrapI_UU()199 template<int func(u32, u32)> void WrapI_UU() {
200 	int retval = func(PARAM(0), PARAM(1));
201 	RETURN(retval);
202 }
203 
WrapI_UFF()204 template<int func(u32, float, float)> void WrapI_UFF() {
205 	// Not sure about the float arguments.
206 	int retval = func(PARAM(0), PARAMF(0), PARAMF(1));
207 	RETURN(retval);
208 }
209 
WrapI_UUU()210 template<int func(u32, u32, u32)> void WrapI_UUU() {
211 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
212 	RETURN(retval);
213 }
214 
WrapI_UUUI()215 template<int func(u32, u32, u32, int)> void WrapI_UUUI() {
216 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
217 	RETURN(retval);
218 }
219 
WrapI_UUUIIII()220 template<int func(u32, u32, u32, int, int, int,int )> void WrapI_UUUIIII() {
221 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
222 	RETURN(retval);
223 }
224 
WrapI_UUUU()225 template<int func(u32, u32, u32, u32)> void WrapI_UUUU() {
226 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
227 	RETURN(retval);
228 }
229 
WrapI_UUUUU()230 template<int func(u32, u32, u32, u32, u32)> void WrapI_UUUUU() {
231 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
232 	RETURN(retval);
233 }
234 
WrapI_V()235 template<int func()> void WrapI_V() {
236 	int retval = func();
237 	RETURN(retval);
238 }
239 
WrapU_I()240 template<u32 func(int)> void WrapU_I() {
241 	u32 retval = func(PARAM(0));
242 	RETURN(retval);
243 }
244 
WrapU_IIU()245 template<u32 func(int, int, u32)> void WrapU_IIU() {
246 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
247 	RETURN(retval);
248 }
249 
WrapI_I()250 template<int func(int)> void WrapI_I() {
251 	int retval = func(PARAM(0));
252 	RETURN(retval);
253 }
254 
WrapV_U()255 template<void func(u32)> void WrapV_U() {
256 	func(PARAM(0));
257 }
258 
WrapV_I()259 template<void func(int)> void WrapV_I() {
260 	func(PARAM(0));
261 }
262 
WrapV_UU()263 template<void func(u32, u32)> void WrapV_UU() {
264 	func(PARAM(0), PARAM(1));
265 }
266 
WrapV_II()267 template<void func(int, int)> void WrapV_II() {
268 	func(PARAM(0), PARAM(1));
269 }
270 
WrapV_UC()271 template<void func(u32, const char *)> void WrapV_UC() {
272 	func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
273 }
274 
WrapI_UC()275 template<int func(u32, const char *)> void WrapI_UC() {
276 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
277 	RETURN(retval);
278 }
279 
WrapI_UCI()280 template<int func(u32, const char *, int)> void WrapI_UCI() {
281 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2));
282 	RETURN(retval);
283 }
284 
WrapU_UIIIII()285 template<u32 func(u32, int , int , int, int, int)> void WrapU_UIIIII() {
286 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
287 	RETURN(retval);
288 }
289 
WrapU_UIIIU()290 template<u32 func(u32, int , int , int, u32)> void WrapU_UIIIU() {
291 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
292 	RETURN(retval);
293 }
294 
WrapU_UIIIIII()295 template<u32 func(u32, int , int , int, int, int, int)> void WrapU_UIIIIII() {
296 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
297 	RETURN(retval);
298 }
299 
WrapU_UU()300 template<u32 func(u32, u32)> void WrapU_UU() {
301 	u32 retval = func(PARAM(0), PARAM(1));
302 	RETURN(retval);
303 }
304 
WrapU_UUI()305 template<u32 func(u32, u32, int)> void WrapU_UUI() {
306 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
307 	RETURN(retval);
308 }
309 
WrapU_UUII()310 template<u32 func(u32, u32, int, int)> void WrapU_UUII() {
311 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
312 	RETURN(retval);
313 }
314 
WrapU_CUUU()315 template<u32 func(const char *, u32, u32, u32)> void WrapU_CUUU() {
316 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
317 	RETURN(retval);
318 }
319 
WrapV_UIUII()320 template<void func(u32, int, u32, int, int)> void WrapV_UIUII() {
321 	func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
322 }
323 
WrapU_UIUII()324 template<u32 func(u32, int, u32, int, int)> void WrapU_UIUII() {
325 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
326 	RETURN(retval);
327 }
328 
WrapI_UIUII()329 template<int func(u32, int, u32, int, int)> void WrapI_UIUII() {
330 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
331 	RETURN(retval);
332 }
333 
WrapU_UIUI()334 template<u32 func(u32, int, u32, int)> void WrapU_UIUI() {
335 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
336 	RETURN(retval);
337 }
338 
WrapI_UIUI()339 template<int func(u32, int, u32, int)> void WrapI_UIUI() {
340 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
341 	RETURN(retval);
342 }
343 
WrapU_UIU()344 template<u32 func(u32, int, u32)> void WrapU_UIU() {
345 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
346 	RETURN(retval);
347 }
348 
WrapU_UIUU()349 template<u32 func(u32, int, u32, u32)> void WrapU_UIUU() {
350 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
351 	RETURN(retval);
352 }
353 
WrapU_UII()354 template<u32 func(u32, int, int)> void WrapU_UII() {
355 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
356 	RETURN(retval);
357 }
358 
WrapU_UIIU()359 template<u32 func(u32, int, int, u32)> void WrapU_UIIU() {
360 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
361 	RETURN(retval);
362 }
363 
WrapI_UIIUU()364 template<int func(u32, int, int, u32, u32)> void WrapI_UIIUU() {
365 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
366 	RETURN(retval);
367 }
368 
WrapI_UUII()369 template<int func(u32, u32, int, int)> void WrapI_UUII() {
370 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
371 	RETURN(retval);
372 }
373 
WrapI_UUIII()374 template<int func(u32, u32, int, int, int)> void WrapI_UUIII() {
375 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
376 	RETURN(retval);
377 }
378 
WrapV_UIII()379 template<void func(u32, int, int, int)> void WrapV_UIII() {
380 	func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
381 }
382 
WrapV_UIIIII()383 template<void func(u32, int, int, int, int, int)> void WrapV_UIIIII() {
384 	func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
385 }
386 
WrapV_UII()387 template<void func(u32, int, int)> void WrapV_UII() {
388 	func(PARAM(0), PARAM(1), PARAM(2));
389 }
390 
WrapU_IU()391 template<u32 func(int, u32)> void WrapU_IU() {
392 	int retval = func(PARAM(0), PARAM(1));
393 	RETURN(retval);
394 }
395 
WrapI_IU()396 template<int func(int, u32)> void WrapI_IU() {
397 	int retval = func(PARAM(0), PARAM(1));
398 	RETURN(retval);
399 }
400 
WrapI_UUI()401 template<int func(u32, u32, int)> void WrapI_UUI() {
402 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
403 	RETURN(retval);
404 }
405 
WrapI_UUIU()406 template<int func(u32, u32, int, u32)> void WrapI_UUIU() {
407 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
408 	RETURN(retval);
409 }
410 
WrapI_II()411 template<int func(int, int)> void WrapI_II() {
412 	int retval = func(PARAM(0), PARAM(1));
413 	RETURN(retval);
414 }
415 
WrapI_III()416 template<int func(int, int, int)> void WrapI_III() {
417 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
418 	RETURN(retval);
419 }
420 
WrapI_IUI()421 template<int func(int, u32, int)> void WrapI_IUI() {
422 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
423 	RETURN(retval);
424 }
425 
WrapI_IIII()426 template<int func(int, int, int, int)> void WrapI_IIII() {
427 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
428 	RETURN(retval);
429 }
430 
WrapI_UIII()431 template<int func(u32, int, int, int)> void WrapI_UIII() {
432 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
433 	RETURN(retval);
434 }
435 
WrapI_IIIUI()436 template<int func(int, int, int, u32, int)> void WrapI_IIIUI() {
437 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
438 	RETURN(retval);
439 }
440 
WrapI_IUUII()441 template<int func(int, u32, u32, int, int)> void WrapI_IUUII() {
442 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
443 	RETURN(retval);
444 }
445 
WrapI_ICIUU()446 template<int func(int, const char *, int, u32, u32)> void WrapI_ICIUU() {
447 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3), PARAM(4));
448 	RETURN(retval);
449 }
450 
WrapI_IIU()451 template<int func(int, int, u32)> void WrapI_IIU() {
452 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
453 	RETURN(retval);
454 }
455 
WrapV_IU()456 template<void func(int, u32)> void WrapV_IU() {
457 	func(PARAM(0), PARAM(1));
458 }
459 
WrapV_UI()460 template<void func(u32, int)> void WrapV_UI() {
461 	func(PARAM(0), PARAM(1));
462 }
463 
WrapU_C()464 template<u32 func(const char *)> void WrapU_C() {
465 	u32 retval = func(Memory::GetCharPointer(PARAM(0)));
466 	RETURN(retval);
467 }
468 
WrapU_CCCU()469 template<u32 func(const char *, const char *, const char *, u32)> void WrapU_CCCU() {
470 	u32 retval = func(Memory::GetCharPointer(PARAM(0)),
471 			Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)),
472 			PARAM(3));
473 	RETURN(retval);
474 }
475 
WrapI_C()476 template<int func(const char *)> void WrapI_C() {
477 	int retval = func(Memory::GetCharPointer(PARAM(0)));
478 	RETURN(retval);
479 }
480 
WrapI_CU()481 template<int func(const char *, u32)> void WrapI_CU() {
482 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
483 	RETURN(retval);
484 }
485 
WrapI_CUI()486 template<int func(const char *, u32, int)> void WrapI_CUI() {
487 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
488 	RETURN(retval);
489 }
490 
WrapI_ICIU()491 template<int func(int, const char *, int, u32)> void WrapI_ICIU() {
492 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3));
493 	RETURN(retval);
494 }
495 
WrapI_CIU()496 template<int func(const char *, int, u32)> void WrapI_CIU() {
497 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
498 	RETURN(retval);
499 }
500 
WrapI_CUU()501 template<int func(const char *, u32, u32)> void WrapI_CUU() {
502 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
503 	RETURN(retval);
504 }
505 
WrapI_CUUU()506 template<int func(const char *, u32, u32, u32)> void WrapI_CUUU() {
507 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
508 			PARAM(3));
509 	RETURN(retval);
510 }
511 
WrapI_CCII()512 template<int func(const char *, const char*, int, int)> void WrapI_CCII() {
513 	int retval = func(Memory::GetCharPointer(PARAM(0)), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3));
514 	RETURN(retval);
515 }
516 
WrapI_CUUIUU()517 template<int func(const char *, u32, u32, int, u32, u32)> void WrapI_CUUIUU() {
518 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
519 			PARAM(3), PARAM(4), PARAM(5));
520 	RETURN(retval);
521 }
522 
WrapI_CIIUII()523 template<int func(const char *, int, int, u32, int, int)> void WrapI_CIIUII() {
524 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
525 		PARAM(3), PARAM(4), PARAM(5));
526 	RETURN(retval);
527 }
528 
WrapI_CIIIUUI()529 template<int func(const char *, int, int, int, u32, u32, int)> void WrapI_CIIIUUI() {
530 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
531 		PARAM(3), PARAM(4), PARAM(5), PARAM(6));
532 	RETURN(retval);
533 }
534 
WrapI_CIUUU()535 template<int func(const char *, int, u32, u32, u32)> void WrapI_CIUUU() {
536 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
537 			PARAM(3), PARAM(4));
538 	RETURN(retval);
539 }
540 
WrapI_CUUUUU()541 template<int func(const char *, u32, u32, u32, u32, u32)> void WrapI_CUUUUU() {
542 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
543 			PARAM(3), PARAM(4), PARAM(5));
544 	RETURN(retval);
545 }
546 
WrapU_CU()547 template<u32 func(const char *, u32)> void WrapU_CU() {
548 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
549 	RETURN((u32) retval);
550 }
551 
WrapU_UC()552 template<u32 func(u32, const char *)> void WrapU_UC() {
553 	u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
554 	RETURN(retval);
555 }
556 
WrapU_CUU()557 template<u32 func(const char *, u32, u32)> void WrapU_CUU() {
558 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
559 	RETURN((u32) retval);
560 }
561 
WrapU_III()562 template<u32 func(int, int, int)> void WrapU_III() {
563 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
564 	RETURN(retval);
565 }
566 
WrapU_II()567 template<u32 func(int, int)> void WrapU_II() {
568 	u32 retval = func(PARAM(0), PARAM(1));
569 	RETURN(retval);
570 }
571 
WrapU_IIII()572 template<u32 func(int, int, int, int)> void WrapU_IIII() {
573 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
574 	RETURN(retval);
575 }
576 
WrapU_IUU()577 template<u32 func(int, u32, u32)> void WrapU_IUU() {
578 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
579 	RETURN(retval);
580 }
581 
WrapU_IUUU()582 template<u32 func(int, u32, u32, u32)> void WrapU_IUUU() {
583 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
584 	RETURN(retval);
585 }
586 
WrapU_IUUUU()587 template<u32 func(int, u32, u32, u32, u32)> void WrapU_IUUUU() {
588 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
589 	RETURN(retval);
590 }
591 
WrapU_UUU()592 template<u32 func(u32, u32, u32)> void WrapU_UUU() {
593 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2));
594 	RETURN(retval);
595 }
596 
WrapV_IUU()597 template<void func(int, u32, u32)> void WrapV_IUU() {
598 	func(PARAM(0), PARAM(1), PARAM(2));
599 }
600 
WrapV_IIU()601 template<void func(int, int, u32)> void WrapV_IIU() {
602 	func(PARAM(0), PARAM(1), PARAM(2));
603 }
604 
WrapV_UIU()605 template<void func(u32, int, u32)> void WrapV_UIU() {
606 	func(PARAM(0), PARAM(1), PARAM(2));
607 }
608 
WrapI_UIU()609 template<int func(u32, int, u32)> void WrapI_UIU() {
610 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
611 	RETURN(retval);
612 }
613 
WrapV_IUUUU()614 template<void func(int, u32, u32, u32, u32)> void WrapV_IUUUU() {
615 	func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
616 }
617 
WrapV_UUU()618 template<void func(u32, u32, u32)> void WrapV_UUU() {
619 	func(PARAM(0), PARAM(1), PARAM(2));
620 }
621 
WrapV_UUUU()622 template<void func(u32, u32, u32, u32)> void WrapV_UUUU() {
623 	func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
624 }
625 
WrapV_CUIU()626 template<void func(const char *, u32, int, u32)> void WrapV_CUIU() {
627 	func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
628 }
629 
WrapI_CUIU()630 template<int func(const char *, u32, int, u32)> void WrapI_CUIU() {
631 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3));
632 	RETURN(retval);
633 }
634 
WrapV_UCUIU()635 template<void func(u32, const char *, u32, int, u32)> void WrapV_UCUIU() {
636 	func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3),
637 			PARAM(4));
638 }
639 
WrapI_UCUIU()640 template<int func(u32, const char *, u32, int, u32)> void WrapI_UCUIU() {
641 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2),
642 			PARAM(3), PARAM(4));
643 	RETURN(retval);
644 }
645 
WrapV_CUIIU()646 template<void func(const char *, u32, int, int, u32)> void WrapV_CUIIU() {
647 	func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2), PARAM(3),
648 			PARAM(4));
649 }
650 
WrapI_CUIIU()651 template<int func(const char *, u32, int, int, u32)> void WrapI_CUIIU() {
652 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
653 			PARAM(3), PARAM(4));
654 	RETURN(retval);
655 }
656 
WrapU_UUUU()657 template<u32 func(u32, u32, u32, u32)> void WrapU_UUUU() {
658 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
659 	RETURN(retval);
660 }
661 
WrapU_UCUU()662 template<u32 func(u32, const char *, u32, u32)> void WrapU_UCUU() {
663 	u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), PARAM(3));
664 	RETURN(retval);
665 }
666 
WrapU_UUUI()667 template<u32 func(u32, u32, u32, int)> void WrapU_UUUI() {
668 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
669 	RETURN(retval);
670 }
671 
WrapU_UUUIU()672 template<u32 func(u32, u32, u32, int, u32)> void WrapU_UUUIU() {
673 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
674 	RETURN(retval);
675 }
676 
WrapU_UUUIUI()677 template<u32 func(u32, u32, u32, int, u32, int)> void WrapU_UUUIUI() {
678 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
679 	RETURN(retval);
680 }
681 
WrapU_UUIU()682 template<u32 func(u32, u32, int, u32)> void WrapU_UUIU() {
683 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
684 	RETURN(retval);
685 }
686 
WrapU_UIII()687 template<u32 func(u32, int, int, int)> void WrapU_UIII() {
688 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
689 	RETURN(retval);
690 }
691 
WrapI_IUUUU()692 template<int func(int, u32, u32, u32, u32)> void WrapI_IUUUU() {
693 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
694 	RETURN(retval);
695 }
696 
WrapI_IUUUUU()697 template<int func(int, u32, u32, u32, u32, u32)> void WrapI_IUUUUU() {
698 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5));
699 	RETURN(retval);
700 }
701 
WrapI_IUII()702 template<int func(int, u32, int, int)> void WrapI_IUII() {
703 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
704 	RETURN(retval);
705 }
WrapU_UUUUU()706 template<u32 func(u32, u32, u32, u32, u32)> void WrapU_UUUUU() {
707 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
708 	RETURN(retval);
709 }
710 
WrapV_UUUUU()711 template<void func(u32, u32, u32, u32, u32)> void WrapV_UUUUU() {
712 	func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4));
713 }
714 
WrapU_CC()715 template<u32 func(const char *, const char *)> void WrapU_CC() {
716 	int retval = func(Memory::GetCharPointer(PARAM(0)),
717 			Memory::GetCharPointer(PARAM(1)));
718 	RETURN(retval);
719 }
720 
WrapV_CI()721 template<void func(const char *, int)> void WrapV_CI() {
722 	func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
723 }
724 
WrapU_CI()725 template<u32 func(const char *, int)> void WrapU_CI() {
726 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1));
727 	RETURN(retval);
728 }
729 
WrapU_CII()730 template<u32 func(const char *, int, int)> void WrapU_CII() {
731 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
732 	RETURN(retval);
733 }
734 
WrapU_CIUIU()735 template<int func(const char *, int, u32, int, u32)> void WrapU_CIUIU() {
736 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
737 			PARAM(3), PARAM(4));
738 	RETURN(retval);
739 }
740 
WrapU_CIUIUI()741 template<u32 func(const char *, int, u32, int, u32, int)> void WrapU_CIUIUI() {
742 	u32 retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2),
743 			PARAM(3), PARAM(4), PARAM(5));
744 	RETURN(retval);
745 }
746 
WrapU_UUUUUU()747 template<u32 func(u32, u32, u32, u32, u32, u32)> void WrapU_UUUUUU() {
748 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4),
749 			PARAM(5));
750 	RETURN(retval);
751 }
752 
WrapI_IUUU()753 template<int func(int, u32, u32, u32)> void WrapI_IUUU() {
754 	int retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
755 	RETURN(retval);
756 }
757 
WrapI_IUU()758 template<int func(int, u32, u32)> void WrapI_IUU() {
759 	int retval = func(PARAM(0), PARAM(1), PARAM(2));
760 	RETURN(retval);
761 }
762 
WrapU_UUUUUUU()763 template<u32 func(u32, u32, u32, u32, u32, u32, u32)> void WrapU_UUUUUUU() {
764   u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), PARAM(4), PARAM(5), PARAM(6));
765   RETURN(retval);
766 }
767 
WrapI_UIUU()768 template<int func(u32, int, u32, u32)> void WrapI_UIUU() {
769 	u32 retval = func(PARAM(0), PARAM(1), PARAM(2), PARAM(3));
770 	RETURN(retval);
771 }
772 
WrapI_IC()773 template<int func(int, const char *)> void WrapI_IC() {
774 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)));
775 	RETURN(retval);
776 }
777 
WrapI_ICCUI()778 template <int func(int, const char *, const char *, u32, int)> void WrapI_ICCUI() {
779 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3), PARAM(4));
780 	RETURN(retval);
781 }
782 
WrapI_ICCI()783 template <int func(int, const char *, const char *, int)> void WrapI_ICCI() {
784 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), Memory::GetCharPointer(PARAM(2)), PARAM(3));
785 	RETURN(retval);
786 }
787 
WrapI_CII()788 template <int func(const char *, int, int)> void WrapI_CII() {
789 	int retval = func(Memory::GetCharPointer(PARAM(0)), PARAM(1), PARAM(2));
790 	RETURN(retval);
791 }
792 
WrapI_ICI()793 template <int func(int, const char *, int)> void WrapI_ICI() {
794 	int retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2));
795 	RETURN(retval);
796 }
797 
WrapI_IVVVVUI()798 template<int func(int, void *, void *, void *, void *, u32, int)> void WrapI_IVVVVUI(){
799   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) );
800   RETURN(retval);
801 }
802 
WrapI_ICUVIII()803 template<int func(int, const char *, u32, void *, int, int, int)> void WrapI_ICUVIII(){
804   u32 retval = func(PARAM(0), Memory::GetCharPointer(PARAM(1)), PARAM(2), Memory::GetPointer(PARAM(3)), PARAM(4), PARAM(5), PARAM(6));
805   RETURN(retval);
806 }
807 
WrapI_VUI()808 template<int func(void *, u32, int)> void WrapI_VUI(){
809 	u32 retval = func(Memory::GetPointer(PARAM(0)), PARAM(1), PARAM(2));
810 	RETURN(retval);
811 }
812