clang doesnt support global registers
[AROS.git] / arch / ppc-morphos / include / aros / cpu.h
blob3bbf4663403867b544e18b71bc7bb70a78c440b2
1 #ifndef AROS_MORPHOS_CPU_H
2 #define AROS_MORPHOS_CPU_H
3 /*
4 Copyright � 1995-2010, The AROS Development Team. All rights reserved.
5 $Id$
7 NOTE: This file must compile *without* any other header !
9 Desc: cpu.h include file for morphos arch
10 Lang: english
13 /* Information about size and alignment,
14 * the defines have to be numeric constants */
15 #define AROS_STACK_GROWS_DOWNWARDS 1 /* Stack direction */
16 #define AROS_BIG_ENDIAN 1 /* Big or little endian */
17 #define AROS_SIZEOFULONG 4 /* Size of an ULONG */
18 #define AROS_SIZEOFPTR 4 /* Size of a PTR */
19 #define AROS_WORDALIGN 2 /* Alignment for WORD */
20 #define AROS_LONGALIGN 2 /* Alignment for LONG */
21 #define AROS_QUADALIGN 2 /* Alignment for QUAD */
22 #define AROS_PTRALIGN 2 /* Alignment for PTR */
23 #define AROS_IPTRALIGN 2 /* Alignment for IPTR */
24 #define AROS_DOUBLEALIGN 2 /* Alignment for double */
25 #define AROS_WORSTALIGN 8 /* Worst case alignment */
28 * PowerPC note:
29 * Some (or maybe even all) PowerPC machines expect the stack to be aligned on 16-byte boundary.
30 * This is the reason number one for AROS_WORSTALIGN=16. The second reason is, the 440 CPU will
31 * generate an alignment exception if floating point data *crosses* the 16-byte boundary.
34 #define AROS_32BIT_TYPE int
35 /* For ABI V1 this should be done in common cpu.h */
36 #define AROS_LARGEST_TYPE long long
38 /* Note that MorphOS ABI DOES have linear varargs as an option */
39 #define __stackparm __attribute__((varargs68k))
41 #define AROS_SLOWSTACKTAGS 1
42 #define AROS_SLOWSTACKMETHODS 1
43 #define AROS_SLOWSTACKHOOKS 1
45 /* types and limits for sig_atomic_t */
46 #define AROS_SIG_ATOMIC_T int
47 #define AROS_SIG_ATOMIC_MIN (-0x7fffffff-1)
48 #define AROS_SIG_ATOMIC_MAX 0x7fffffff
50 #if defined(__GNUC__) && !defined(__clang__)
51 register unsigned char* AROS_GET_SP __asm__("%sp");
52 #endif
55 An offset value sometimes added to
56 or subtracted from the stack limits.
59 #define SP_OFFSET 0x10
62 One entry in a libraries' jumptable. For assembler compatibility, the
63 field jmp should contain the code for an absolute jmp to a 32bit
64 address. There are also a couple of macros which you should use to
65 access the vector table from C.
67 struct FullJumpVec
69 unsigned long addis; // simplified: lis 11, a@h
70 unsigned long ori; // : li 11, a@l
71 unsigned long mtspr; // : mtctr 11
72 unsigned long jmp; // bcctr : bctr 11
74 /* browse MPCFPE32B.pdf to understand opcode creation */
75 #define __AROS_SET_FULLJMP(v,a)\
77 struct FullJumpVec *_v = (v); \
78 _v->addis = (15 << 26) | (11 << 21) | ((ULONG)(a) >> 16); \
79 _v->ori = (24 << 26) | (11 << 21) | (11 << 16) | ((ULONG)(a) & 0x0000FFFF);\
80 _v->mtspr = (31 << 26) | (11 << 21) | ( 9 << 16) | (467 << 1); \
81 _v->jmp = (19 << 26) | (20 << 21) | (528 << 1); \
84 struct JumpVec
86 unsigned short jmp;
87 unsigned char vec[4];
90 /* Internal macros */
91 #define __AROS_SET_VEC(v,a) (*(ULONG*)(v)->vec=(ULONG)(a))
92 #define __AROS_GET_VEC(v) ((APTR)(*(ULONG*)(v)->vec))
94 /* Use these to acces a vector table */
95 #define LIB_VECTSIZE (sizeof (struct JumpVec))
96 #define __AROS_GETJUMPVEC(lib,n) (&((struct JumpVec *)lib)[-(n)])
97 #define __AROS_GETVECADDR(lib,n) (__AROS_GET_VEC(__AROS_GETJUMPVEC(lib,n)))
98 #define __AROS_SETVECADDR(lib,n,addr) (__AROS_SET_VEC(__AROS_GETJUMPVEC(lib,n),(APTR)(addr)))
99 #define __AROS_INITVEC(lib,n) __AROS_GETJUMPVEC(lib,n)->jmp = TRAP_LIB, \
100 __AROS_SETVECADDR(lib,n,_aros_not_implemented)
103 Code used to generate stub functions.
104 It must be *printed* with a function like printf into
105 a file to be compiled with gcc.
107 - The first parameter is the function name,
108 - The second parameter is the basename,
109 i.e. bname is the address of a pointer to the library base,
110 - The third parameter is the library vector to be called.
112 It's value must be computed by the stub generator with this code:
113 &(__AROS_GETJUMPVEC(0, n+1)->vec), where n is the library vector position in
114 the library vectors list.
117 #define STUBCODE_INIT \
118 "#define EMITSTUB(fname, bname, vec) " \
119 ".globl fname; " \
120 "fname : " \
121 "lis 11,bname@ha; " \
122 "lwz 11,bname@l(11); " \
123 "lwz 11,vec(11); " \
124 "mtctr 11; " \
125 "bctr;\n " \
126 "#define EMITALIAS(fname, alias) " \
127 ".weak alias; .set alias, fname\n"
128 #define STUBCODE \
129 "EMITSTUB(%s, %s, %d) "
130 #define ALIASCODE \
131 "EMITALIAS(%s, %s)\n"
133 We want to activate the execstubs and preserve all registers
134 when calling obtainsemaphore, obtainsemaphoreshared, releasesemaphore,
135 getcc, permit, forbid, enable, disable
137 #undef UseExecstubs
138 #define UseExecstubs 1
140 /* Macros to test/set failure of AllocEntry() */
141 #define AROS_ALLOCENTRY_FAILED(memType) \
142 ((struct MemList *)((IPTR)(memType) | 0x80ul<<(sizeof(APTR)-1)*8))
143 #define AROS_CHECK_ALLOCENTRY(memList) \
144 (!((IPTR)(memList) & 0x80ul<<(sizeof(APTR)-1)*8))
147 Find the next valid alignment for a structure if the next x bytes must
148 be skipped.
150 #define AROS_ALIGN(x) (((x)+AROS_WORSTALIGN-1)&-AROS_WORSTALIGN)
152 /* Prototypes */
153 extern void _aros_not_implemented (char *);
155 /* How much stack do we need ? Lots :-) */
156 #define AROS_STACKSIZE 32768
158 /* How to map function arguments to CPU registers */
160 /* What to do with the library base in header, prototype and call */
161 #define __AROS_LH_BASE(basetype,basename) basetype basename = (basetype)REG_A6
162 #define __AROS_LP_BASE(basetype,basename) basetype __base = basename
163 #define __AROS_LC_BASE(basetype,basename) REG_A6 = (LONG)__base
164 #define __AROS_LD_BASE(basetype,basename) basetype basename
166 /* How to transform an argument in header, opt prototype, call and forced
167 prototype. */
168 #define __AROS_LHA(type,name,reg) type name = (type) REG_##reg
169 #define __AROS_LPA(type,name,reg) type r##reg = name
170 #define __AROS_LCA(type,name,reg) REG_##reg = (LONG)r##reg
171 #define __AROS_LDA(type,name,reg) type
172 #define __AROS_UFHA(type,name,reg) type name = (type) REG_##reg
173 #define __AROS_UFPA(type,name,reg) type r##reg = name
174 #define __AROS_UFCA(type,name,reg) REG_##reg = (LONG)r##reg
175 #define __AROS_UFDA(type,name,reg) type
176 #define __AROS_LHAQUAD(type,name,reg1,reg2) type name
177 #define __AROS_LPAQUAD(type,name,reg1,reg2) type
178 #define __AROS_LCAQUAD(type,name,reg1,reg2) name
179 #define __AROS_LDAQUAD(type,name,reg1,reg2) type
181 /* Prefix for library function in header, prototype and call */
182 #define __AROS_LH_PREFIX /* eps */
183 #define __AROS_LP_PREFIX /* eps */
184 #define __AROS_LC_PREFIX /* eps */
185 #define __AROS_LD_PREFIX /* eps */
186 #define __AROS_UFH_PREFIX /* eps */
187 #define __AROS_UFP_PREFIX /* eps */
188 #define __AROS_UFC_PREFIX /* eps */
189 #define __AROS_UFD_PREFIX /* eps */
191 #define __UFC3R(_t,_n,t1,n1,r1,t2,n2,r2,t3,n3,r3,p) \
193 long _n1 = (long)(n1);\
194 long _n2 = (long)(n2);\
195 long _n3 = (long)(n3);\
196 long _re;\
197 __asm__ __volatile__(\
198 "mr 3,%3\n\t" \
199 "mr 4,%4\n\t" \
200 "mr 5,%5\n\t" \
201 "stw 1,%1\n\t" \
202 "mflr 0\n\t" \
203 "stwu 1,-16(1)\n\t" \
204 "stw 0,12(1)\n\t" \
205 "mr 0,%2\n\t" \
206 "mtlr 0\n\t" \
207 "blrl\n\t" \
208 "mr %0,3\n\t" \
209 "lwz 11,0(1)\n\t" \
210 "lwz 0,-4(11)\n\t" \
211 "mtlr 0\n\t" \
212 "mr 1,11\n\t" \
213 : "=r"(_re), "=m"(*(APTR *)p)\
214 : "r"(_n), "r"(_n1), "r"(_n2), "r"(_n3)\
215 : "cc", "memory", "0", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13");\
216 (_t)_re;\
218 #define AROS_UFC3R(t,n,a1,a2,a3,p,ss) __UFC3R(t,n,a1,a2,a3,p)
220 /* Library prototypes expand to nothing */
221 #define __AROS_CPU_SPECIFIC_LP
223 #define AROS_LPQUAD1(t,n,a1,bt,bn,o,s)
224 #define AROS_LPQUAD2(t,n,a1,a2,bt,bn,o,s)
226 #define AROS_LP0(t,n,bt,bn,o,s)
227 #define AROS_LP1(t,n,a1,bt,bn,o,s)
228 #define AROS_LP2(t,n,a1,a2,bt,bn,o,s)
229 #define AROS_LP3(t,n,a1,a2,a3,bt,bn,o,s)
230 #define AROS_LP4(t,n,a1,a2,a3,a4,bt,bn,o,s)
231 #define AROS_LP5(t,n,a1,a2,a3,a4,a5,bt,bn,o,s)
232 #define AROS_LP6(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,s)
233 #define AROS_LP7(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,s)
234 #define AROS_LP8(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,s)
235 #define AROS_LP9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,s)
236 #define AROS_LP10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,s)
237 #define AROS_LP11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,s)
238 #define AROS_LP12(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,bt,bn,o,s)
239 #define AROS_LP13(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,bt,bn,o,s)
240 #define AROS_LP14(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,bt,bn,o,s)
241 #define AROS_LP15(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,bt,bn,o,s)
243 #define AROS_LP0I(t,n,bt,bn,o,s)
244 #define AROS_LP1I(t,n,a1,bt,bn,o,s)
245 #define AROS_LP2I(t,n,a1,a2,bt,bn,o,s)
246 #define AROS_LP3I(t,n,a1,a2,a3,bt,bn,o,s)
247 #define AROS_LP4I(t,n,a1,a2,a3,a4,bt,bn,o,s)
248 #define AROS_LP5I(t,n,a1,a2,a3,a4,a5,bt,bn,o,s)
249 #define AROS_LP6I(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,s)
250 #define AROS_LP7I(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,s)
251 #define AROS_LP8I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,s)
252 #define AROS_LP9I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,s)
253 #define AROS_LP10I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,s)
254 #define AROS_LP11I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,s)
255 #define AROS_LP12I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,bt,bn,o,s)
256 #define AROS_LP13I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,bt,bn,o,s)
257 #define AROS_LP14I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,bt,bn,o,s)
258 #define AROS_LP15I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,bt,bn,o,s)
260 /* Library function calls. They are made through m68k emulator. */
261 #define __AROS_CPU_SPECIFIC_LC
263 /* Call a library function which requires the libbase */
264 #define AROS_LC0(t,n,bt,bn,o,s) \
265 ({ \
266 __AROS_LP_BASE(bt,bn); \
267 __AROS_LC_BASE(bt,bn); \
268 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
271 #define AROS_LC1(t,n,a1,bt,bn,o,s) \
272 ({ \
273 __AROS_LPA(a1); \
274 __AROS_LP_BASE(bt,bn); \
275 __AROS_LCA(a1); \
276 __AROS_LC_BASE(bt,bn); \
277 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
279 #define AROS_LC2(t,n,a1,a2,bt,bn,o,s) \
280 ({ \
281 __AROS_LPA(a1); \
282 __AROS_LPA(a2); \
283 __AROS_LP_BASE(bt,bn); \
284 __AROS_LCA(a1); \
285 __AROS_LCA(a2); \
286 __AROS_LC_BASE(bt,bn); \
287 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
289 #define AROS_LC3(t,n,a1,a2,a3,bt,bn,o,s) \
290 ({ \
291 __AROS_LPA(a1); \
292 __AROS_LPA(a2); \
293 __AROS_LPA(a3); \
294 __AROS_LP_BASE(bt,bn); \
295 __AROS_LCA(a1); \
296 __AROS_LCA(a2); \
297 __AROS_LCA(a3); \
298 __AROS_LC_BASE(bt,bn); \
299 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
301 #define AROS_LC4(t,n,a1,a2,a3,a4,bt,bn,o,s) \
302 ({ \
303 __AROS_LPA(a1); \
304 __AROS_LPA(a2); \
305 __AROS_LPA(a3); \
306 __AROS_LPA(a4); \
307 __AROS_LP_BASE(bt,bn); \
308 __AROS_LCA(a1); \
309 __AROS_LCA(a2); \
310 __AROS_LCA(a3); \
311 __AROS_LCA(a4); \
312 __AROS_LC_BASE(bt,bn); \
313 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
315 #define AROS_LC5(t,n,a1,a2,a3,a4,a5,bt,bn,o,s) \
316 ({ \
317 __AROS_LPA(a1); \
318 __AROS_LPA(a2); \
319 __AROS_LPA(a3); \
320 __AROS_LPA(a4); \
321 __AROS_LPA(a5); \
322 __AROS_LP_BASE(bt,bn); \
323 __AROS_LCA(a1); \
324 __AROS_LCA(a2); \
325 __AROS_LCA(a3); \
326 __AROS_LCA(a4); \
327 __AROS_LCA(a5); \
328 __AROS_LC_BASE(bt,bn); \
329 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
331 #define AROS_LC6(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,s) \
332 ({ \
333 __AROS_LPA(a1); \
334 __AROS_LPA(a2); \
335 __AROS_LPA(a3); \
336 __AROS_LPA(a4); \
337 __AROS_LPA(a5); \
338 __AROS_LPA(a6); \
339 __AROS_LP_BASE(bt,bn); \
340 __AROS_LCA(a1); \
341 __AROS_LCA(a2); \
342 __AROS_LCA(a3); \
343 __AROS_LCA(a4); \
344 __AROS_LCA(a5); \
345 __AROS_LCA(a6); \
346 __AROS_LC_BASE(bt,bn); \
347 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
349 #define AROS_LC7(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,s) \
350 ({ \
351 __AROS_LPA(a1); \
352 __AROS_LPA(a2); \
353 __AROS_LPA(a3); \
354 __AROS_LPA(a4); \
355 __AROS_LPA(a5); \
356 __AROS_LPA(a6); \
357 __AROS_LPA(a7); \
358 __AROS_LP_BASE(bt,bn); \
359 __AROS_LCA(a1); \
360 __AROS_LCA(a2); \
361 __AROS_LCA(a3); \
362 __AROS_LCA(a4); \
363 __AROS_LCA(a5); \
364 __AROS_LCA(a6); \
365 __AROS_LCA(a7); \
366 __AROS_LC_BASE(bt,bn); \
367 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
369 #define AROS_LC8(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,s) \
370 ({ \
371 __AROS_LPA(a1); \
372 __AROS_LPA(a2); \
373 __AROS_LPA(a3); \
374 __AROS_LPA(a4); \
375 __AROS_LPA(a5); \
376 __AROS_LPA(a6); \
377 __AROS_LPA(a7); \
378 __AROS_LPA(a8); \
379 __AROS_LP_BASE(bt,bn); \
380 __AROS_LCA(a1); \
381 __AROS_LCA(a2); \
382 __AROS_LCA(a3); \
383 __AROS_LCA(a4); \
384 __AROS_LCA(a5); \
385 __AROS_LCA(a6); \
386 __AROS_LCA(a7); \
387 __AROS_LCA(a8); \
388 __AROS_LC_BASE(bt,bn); \
389 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
391 #define AROS_LC9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,s) \
392 ({ \
393 __AROS_LPA(a1); \
394 __AROS_LPA(a2); \
395 __AROS_LPA(a3); \
396 __AROS_LPA(a4); \
397 __AROS_LPA(a5); \
398 __AROS_LPA(a6); \
399 __AROS_LPA(a7); \
400 __AROS_LPA(a8); \
401 __AROS_LPA(a9); \
402 __AROS_LP_BASE(bt,bn); \
403 __AROS_LCA(a1); \
404 __AROS_LCA(a2); \
405 __AROS_LCA(a3); \
406 __AROS_LCA(a4); \
407 __AROS_LCA(a5); \
408 __AROS_LCA(a6); \
409 __AROS_LCA(a7); \
410 __AROS_LCA(a8); \
411 __AROS_LCA(a9); \
412 __AROS_LC_BASE(bt,bn); \
413 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
415 #define AROS_LC10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,s) \
416 ({ \
417 __AROS_LPA(a1); \
418 __AROS_LPA(a2); \
419 __AROS_LPA(a3); \
420 __AROS_LPA(a4); \
421 __AROS_LPA(a5); \
422 __AROS_LPA(a6); \
423 __AROS_LPA(a7); \
424 __AROS_LPA(a8); \
425 __AROS_LPA(a9); \
426 __AROS_LPA(a10); \
427 __AROS_LP_BASE(bt,bn); \
428 __AROS_LCA(a1); \
429 __AROS_LCA(a2); \
430 __AROS_LCA(a3); \
431 __AROS_LCA(a4); \
432 __AROS_LCA(a5); \
433 __AROS_LCA(a6); \
434 __AROS_LCA(a7); \
435 __AROS_LCA(a8); \
436 __AROS_LCA(a9); \
437 __AROS_LCA(a10); \
438 __AROS_LC_BASE(bt,bn); \
439 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
441 #define AROS_LC11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,s) \
442 ({ \
443 __AROS_LPA(a1); \
444 __AROS_LPA(a2); \
445 __AROS_LPA(a3); \
446 __AROS_LPA(a4); \
447 __AROS_LPA(a5); \
448 __AROS_LPA(a6); \
449 __AROS_LPA(a7); \
450 __AROS_LPA(a8); \
451 __AROS_LPA(a9); \
452 __AROS_LPA(a10); \
453 __AROS_LPA(a11); \
454 __AROS_LP_BASE(bt,bn); \
455 __AROS_LCA(a1); \
456 __AROS_LCA(a2); \
457 __AROS_LCA(a3); \
458 __AROS_LCA(a4); \
459 __AROS_LCA(a5); \
460 __AROS_LCA(a6); \
461 __AROS_LCA(a7); \
462 __AROS_LCA(a8); \
463 __AROS_LCA(a9); \
464 __AROS_LCA(a10); \
465 __AROS_LCA(a11); \
466 __AROS_LC_BASE(bt,bn); \
467 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
469 #define AROS_LC12(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,bt,bn,o,s) \
470 ({ \
471 __AROS_LPA(a1); \
472 __AROS_LPA(a2); \
473 __AROS_LPA(a3); \
474 __AROS_LPA(a4); \
475 __AROS_LPA(a5); \
476 __AROS_LPA(a6); \
477 __AROS_LPA(a7); \
478 __AROS_LPA(a8); \
479 __AROS_LPA(a9); \
480 __AROS_LPA(a10); \
481 __AROS_LPA(a11); \
482 __AROS_LPA(a12); \
483 __AROS_LP_BASE(bt,bn); \
484 __AROS_LCA(a1); \
485 __AROS_LCA(a2); \
486 __AROS_LCA(a3); \
487 __AROS_LCA(a4); \
488 __AROS_LCA(a5); \
489 __AROS_LCA(a6); \
490 __AROS_LCA(a7); \
491 __AROS_LCA(a8); \
492 __AROS_LCA(a9); \
493 __AROS_LCA(a10); \
494 __AROS_LCA(a11); \
495 __AROS_LCA(a12); \
496 __AROS_LC_BASE(bt,bn); \
497 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
499 #define AROS_LC13(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,bt,bn,o,s) \
500 ({ \
501 __AROS_LPA(a1); \
502 __AROS_LPA(a2); \
503 __AROS_LPA(a3); \
504 __AROS_LPA(a4); \
505 __AROS_LPA(a5); \
506 __AROS_LPA(a6); \
507 __AROS_LPA(a7); \
508 __AROS_LPA(a8); \
509 __AROS_LPA(a9); \
510 __AROS_LPA(a10); \
511 __AROS_LPA(a11); \
512 __AROS_LPA(a12); \
513 __AROS_LPA(a13); \
514 __AROS_LP_BASE(bt,bn); \
515 __AROS_LCA(a1); \
516 __AROS_LCA(a2); \
517 __AROS_LCA(a3); \
518 __AROS_LCA(a4); \
519 __AROS_LCA(a5); \
520 __AROS_LCA(a6); \
521 __AROS_LCA(a7); \
522 __AROS_LCA(a8); \
523 __AROS_LCA(a9); \
524 __AROS_LCA(a10); \
525 __AROS_LCA(a11); \
526 __AROS_LCA(a12); \
527 __AROS_LCA(a13); \
528 __AROS_LC_BASE(bt,bn); \
529 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
531 #define AROS_LC14(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,bt,bn,o,s) \
532 ({ \
533 __AROS_LPA(a1); \
534 __AROS_LPA(a2); \
535 __AROS_LPA(a3); \
536 __AROS_LPA(a4); \
537 __AROS_LPA(a5); \
538 __AROS_LPA(a6); \
539 __AROS_LPA(a7); \
540 __AROS_LPA(a8); \
541 __AROS_LPA(a9); \
542 __AROS_LPA(a10); \
543 __AROS_LPA(a11); \
544 __AROS_LPA(a12); \
545 __AROS_LPA(a13); \
546 __AROS_LPA(a14); \
547 __AROS_LP_BASE(bt,bn); \
548 __AROS_LCA(a1); \
549 __AROS_LCA(a2); \
550 __AROS_LCA(a3); \
551 __AROS_LCA(a4); \
552 __AROS_LCA(a5); \
553 __AROS_LCA(a6); \
554 __AROS_LCA(a7); \
555 __AROS_LCA(a8); \
556 __AROS_LCA(a9); \
557 __AROS_LCA(a10); \
558 __AROS_LCA(a11); \
559 __AROS_LCA(a12); \
560 __AROS_LCA(a13); \
561 __AROS_LCA(a14); \
562 __AROS_LC_BASE(bt,bn); \
563 (t)MyEmulHandle->EmulCallDirectOS(- 6 *o); \
565 #define AROS_LC15(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,bt,bn,o,s) \
566 ({ \
567 __AROS_LPA(a1); \
568 __AROS_LPA(a2); \
569 __AROS_LPA(a3); \
570 __AROS_LPA(a4); \
571 __AROS_LPA(a5); \
572 __AROS_LPA(a6); \
573 __AROS_LPA(a7); \
574 __AROS_LPA(a8); \
575 __AROS_LPA(a9); \
576 __AROS_LPA(a10); \
577 __AROS_LPA(a11); \
578 __AROS_LPA(a12); \
579 __AROS_LPA(a13); \
580 __AROS_LPA(a14); \
581 __AROS_LPA(a15); \
582 __AROS_LP_BASE(bt,bn); \
583 __AROS_LCA(a1); \
584 __AROS_LCA(a2); \
585 __AROS_LCA(a3); \
586 __AROS_LCA(a4); \
587 __AROS_LCA(a5); \
588 __AROS_LCA(a6); \
589 __AROS_LCA(a7); \
590 __AROS_LCA(a8); \
591 __AROS_LCA(a9); \
592 __AROS_LCA(a10); \
593 __AROS_LCA(a11); \
594 __AROS_LCA(a12); \
595 __AROS_LCA(a13); \
596 __AROS_LCA(a14); \
597 __AROS_LCA(a15); \
598 __AROS_LC_BASE(bt,bn); \
599 (t)MyEmulHandle->EmulCallDirectOS(-6 * o); \
602 /* Call a library function which doesn't require the libbase */
603 #define AROS_LC0I(t,n,bt,bn,o,s) \
604 AROS_LC0(t,n,bt,bn,o,s)
605 #define AROS_LC1I(t,n,a1,bt,bn,o,s) \
606 AROS_LC1(t,n,a1,bt,bn,o,s)
607 #define AROS_LC2I(t,n,a1,a2,bt,bn,o,s) \
608 AROS_LC2(t,n,a1,a2,bt,bn,o,s)
609 #define AROS_LC3I(t,n,a1,a2,a3,bt,bn,o,s) \
610 AROS_LC3(t,n,a1,a2,a3,bt,bn,o,s)
611 #define AROS_LC4I(t,n,a1,a2,a3,a4,bt,bn,o,s) \
612 AROS_LC4(t,n,a1,a2,a3,a4,bt,bn,o,s)
613 #define AROS_LC5I(t,n,a1,a2,a3,a4,a5,bt,bn,o,s) \
614 AROS_LC5(t,n,a1,a2,a3,a4,a5,bt,bn,o,s)
615 #define AROS_LC6I(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,s) \
616 AROS_LC6(t,n,a1,a2,a3,a4,a5,a6,bt,bn,o,s)
617 #define AROS_LC7I(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,s) \
618 AROS_LC7(t,n,a1,a2,a3,a4,a5,a6,a7,bt,bn,o,s)
619 #define AROS_LC8I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,s) \
620 AROS_LC8(t,n,a1,a2,a3,a4,a5,a6,a7,a8,bt,bn,o,s)
621 #define AROS_LC9I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,s) \
622 AROS_LC9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,bt,bn,o,s)
623 #define AROS_LC10I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,s) \
624 AROS_LC10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,bt,bn,o,s)
625 #define AROS_LC11I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,s) \
626 AROS_LC11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,bt,bn,o,s)
627 #define AROS_LC12I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,bt,bn,o,s) \
628 AROS_LC12(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,bt,bn,o,s)
629 #define AROS_LC13I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,bt,bn,o,s) \
630 AROS_LC13(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,bt,bn,o,s)
631 #define AROS_LC14I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,bt,bn,o,s) \
632 AROS_LC14(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,bt,bn,o,s)
633 #define AROS_LC15I(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,bt,bn,o,s) \
634 AROS_LC15(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,bt,bn,o,s)
636 /* asmcall stuff follows. Also use m68k emulator traps as entry points. */
637 #define __AROS_CPU_SPECIFIC_ASMCALLS
639 #define AROS_ASMSYMNAME(s) (&s##_Gate)
641 #if !(UseRegisterArgs && defined(AROS_COMPILER_NO_REGARGS))
642 /* Function headers for user functions */
643 #define AROS_UFH0(t,n) \
644 __AROS_UFH_PREFIX t n##_Func (void); \
645 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
646 __AROS_UFH_PREFIX t n##_Func(void) \
649 #define AROS_UFH1(t,n,a1) \
650 __AROS_UFH_PREFIX t n##_Func (void); \
651 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
652 __AROS_UFH_PREFIX t n##_Func(void) \
654 __AROS_UFHA(a1);
656 #define AROS_UFH2(t,n,a1,a2) \
657 __AROS_UFH_PREFIX t n##_Func (void); \
658 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
659 __AROS_UFH_PREFIX t n##_Func(void) \
661 __AROS_UFHA(a1); \
662 __AROS_UFHA(a2);
664 #define AROS_UFH3(t,n,a1,a2,a3) \
665 __AROS_UFH_PREFIX t n##_Func (void); \
666 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
667 __AROS_UFH_PREFIX t n##_Func(void) \
669 __AROS_UFHA(a1); \
670 __AROS_UFHA(a2); \
671 __AROS_UFHA(a3);
673 #define AROS_UFH3S(t,n,a1,a2,a3) \
674 static __AROS_UFH_PREFIX t n##_Func (void); \
675 static const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
676 static __AROS_UFH_PREFIX t n##_Func(void) \
678 __AROS_UFHA(a1); \
679 __AROS_UFHA(a2); \
680 __AROS_UFHA(a3);
682 #define AROS_UFH4(t,n,a1,a2,a3,a4) \
683 __AROS_UFH_PREFIX t n##_Func (void); \
684 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
685 __AROS_UFH_PREFIX t n##_Func(void) \
687 __AROS_UFHA(a1); \
688 __AROS_UFHA(a2); \
689 __AROS_UFHA(a3); \
690 __AROS_UFHA(a4);
692 #define AROS_UFH5(t,n,a1,a2,a3,a4,a5) \
693 __AROS_UFH_PREFIX t n##_Func (void); \
694 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
695 __AROS_UFH_PREFIX t n##_Func(void) \
697 __AROS_UFHA(a1); \
698 __AROS_UFHA(a2); \
699 __AROS_UFHA(a3); \
700 __AROS_UFHA(a4); \
701 __AROS_UFHA(a5);
703 #define AROS_UFH5S(t,n,a1,a2,a3,a4,a5) \
704 __AROS_UFH_PREFIX static t n##_Func (void); \
705 static const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
706 __AROS_UFH_PREFIX static t n##_Func(void) \
708 __AROS_UFHA(a1); \
709 __AROS_UFHA(a2); \
710 __AROS_UFHA(a3); \
711 __AROS_UFHA(a4); \
712 __AROS_UFHA(a5);
714 #define AROS_UFH6(t,n,a1,a2,a3,a4,a5,a6) \
715 __AROS_UFH_PREFIX t n##_Func (void); \
716 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
717 __AROS_UFH_PREFIX t n##_Func(void) \
719 __AROS_UFHA(a1); \
720 __AROS_UFHA(a2); \
721 __AROS_UFHA(a3); \
722 __AROS_UFHA(a4); \
723 __AROS_UFHA(a5); \
724 __AROS_UFHA(a6);
726 #define AROS_UFH7(t,n,a1,a2,a3,a4,a5,a6,a7) \
727 __AROS_UFH_PREFIX t n##_Func (void); \
728 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
729 __AROS_UFH_PREFIX t n##_Func(void) \
731 __AROS_UFHA(a1); \
732 __AROS_UFHA(a2); \
733 __AROS_UFHA(a3); \
734 __AROS_UFHA(a4); \
735 __AROS_UFHA(a5); \
736 __AROS_UFHA(a6); \
737 __AROS_UFHA(a7);
739 #define AROS_UFH8(t,n,a1,a2,a3,a4,a5,a6,a7,a8) \
740 __AROS_UFH_PREFIX t n##_Func (void); \
741 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
742 __AROS_UFH_PREFIX t n##_Func(void) \
744 __AROS_UFHA(a1); \
745 __AROS_UFHA(a2); \
746 __AROS_UFHA(a3); \
747 __AROS_UFHA(a4); \
748 __AROS_UFHA(a5); \
749 __AROS_UFHA(a6); \
750 __AROS_UFHA(a7); \
751 __AROS_UFHA(a8);
753 #define AROS_UFH9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
754 __AROS_UFH_PREFIX t n##_Func (void); \
755 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
756 __AROS_UFH_PREFIX t n##_Func(void) \
758 __AROS_UFHA(a1); \
759 __AROS_UFHA(a2); \
760 __AROS_UFHA(a3); \
761 __AROS_UFHA(a4); \
762 __AROS_UFHA(a5); \
763 __AROS_UFHA(a6); \
764 __AROS_UFHA(a7); \
765 __AROS_UFHA(a8); \
766 __AROS_UFHA(a9);
768 #define AROS_UFH10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \
769 __AROS_UFH_PREFIX t n##_Func (void); \
770 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
771 __AROS_UFH_PREFIX t n##_Func(void) \
773 __AROS_UFHA(a1); \
774 __AROS_UFHA(a2); \
775 __AROS_UFHA(a3); \
776 __AROS_UFHA(a4); \
777 __AROS_UFHA(a5); \
778 __AROS_UFHA(a6); \
779 __AROS_UFHA(a7); \
780 __AROS_UFHA(a8); \
781 __AROS_UFHA(a9); \
782 __AROS_UFHA(a10);
784 #define AROS_UFH11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) \
785 __AROS_UFH_PREFIX t n##_Func (void); \
786 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
787 __AROS_UFH_PREFIX t n##_Func(void) \
789 __AROS_UFHA(a1); \
790 __AROS_UFHA(a2); \
791 __AROS_UFHA(a3); \
792 __AROS_UFHA(a4); \
793 __AROS_UFHA(a5); \
794 __AROS_UFHA(a6); \
795 __AROS_UFHA(a7); \
796 __AROS_UFHA(a8); \
797 __AROS_UFHA(a9); \
798 __AROS_UFHA(a10); \
799 __AROS_UFHA(a11);
801 #define AROS_UFH12(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
802 __AROS_UFH_PREFIX t n##_Func (void); \
803 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
804 __AROS_UFH_PREFIX t n##_Func(void) \
806 __AROS_UFHA(a1); \
807 __AROS_UFHA(a2); \
808 __AROS_UFHA(a3); \
809 __AROS_UFHA(a4); \
810 __AROS_UFHA(a5); \
811 __AROS_UFHA(a6); \
812 __AROS_UFHA(a7); \
813 __AROS_UFHA(a8); \
814 __AROS_UFHA(a9); \
815 __AROS_UFHA(a10); \
816 __AROS_UFHA(a11); \
817 __AROS_UFHA(a12);
819 #define AROS_UFH13(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) \
820 __AROS_UFH_PREFIX t n##_Func (void); \
821 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
822 __AROS_UFH_PREFIX t n##_Func(void) \
824 __AROS_UFHA(a1); \
825 __AROS_UFHA(a2); \
826 __AROS_UFHA(a3); \
827 __AROS_UFHA(a4); \
828 __AROS_UFHA(a5); \
829 __AROS_UFHA(a6); \
830 __AROS_UFHA(a7); \
831 __AROS_UFHA(a8); \
832 __AROS_UFHA(a9); \
833 __AROS_UFHA(a10); \
834 __AROS_UFHA(a11); \
835 __AROS_UFHA(a12); \
836 __AROS_UFHA(a13);
838 #define AROS_UFH14(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) \
839 __AROS_UFH_PREFIX t n##_Func (void); \
840 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
841 __AROS_UFH_PREFIX t n##_Func(void) \
843 __AROS_UFHA(a1); \
844 __AROS_UFHA(a2); \
845 __AROS_UFHA(a3); \
846 __AROS_UFHA(a4); \
847 __AROS_UFHA(a5); \
848 __AROS_UFHA(a6); \
849 __AROS_UFHA(a7); \
850 __AROS_UFHA(a8); \
851 __AROS_UFHA(a9); \
852 __AROS_UFHA(a10); \
853 __AROS_UFHA(a11); \
854 __AROS_UFHA(a12); \
855 __AROS_UFHA(a13); \
856 __AROS_UFHA(a14);
858 #define AROS_UFH15(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) \
859 __AROS_UFH_PREFIX t n##_Func (void); \
860 const struct EmulLibEntry n##_Gate = { TRAP_LIB, 0, (void(*))n##_Func }; \
861 __AROS_UFH_PREFIX t n##_Func(void) \
863 __AROS_UFHA(a1); \
864 __AROS_UFHA(a2); \
865 __AROS_UFHA(a3); \
866 __AROS_UFHA(a4); \
867 __AROS_UFHA(a5); \
868 __AROS_UFHA(a6); \
869 __AROS_UFHA(a7); \
870 __AROS_UFHA(a8); \
871 __AROS_UFHA(a9); \
872 __AROS_UFHA(a10); \
873 __AROS_UFHA(a11); \
874 __AROS_UFHA(a12); \
875 __AROS_UFHA(a13); \
876 __AROS_UFHA(a14); \
877 __AROS_UFHA(a15);
879 /* Call a user function */
880 #define AROS_UFC0(t,n) \
881 ((t)MyEmulHandle->EmulCallDirect68k((APTR)(n)))
883 #define AROS_UFC1(t,n,a1) \
884 ({ \
885 __AROS_UFPA(a1); \
886 __AROS_UFCA(a1); \
887 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
890 #define AROS_UFC2(t,n,a1,a2) \
891 ({ \
892 __AROS_UFPA(a1); \
893 __AROS_UFPA(a2); \
894 __AROS_UFCA(a1); \
895 __AROS_UFCA(a2); \
896 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
899 #define AROS_UFC3(t,n,a1,a2,a3) \
900 ({ \
901 __AROS_UFPA(a1); \
902 __AROS_UFPA(a2); \
903 __AROS_UFPA(a3); \
904 __AROS_UFCA(a1); \
905 __AROS_UFCA(a2); \
906 __AROS_UFCA(a3); \
907 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
910 #define AROS_UFC4(t,n,a1,a2,a3,a4) \
911 ({ \
912 __AROS_UFPA(a1); \
913 __AROS_UFPA(a2); \
914 __AROS_UFPA(a3); \
915 __AROS_UFPA(a4); \
916 __AROS_UFCA(a1); \
917 __AROS_UFCA(a2); \
918 __AROS_UFCA(a3); \
919 __AROS_UFCA(a4); \
920 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
923 #define AROS_UFC5(t,n,a1,a2,a3,a4,a5) \
924 ({ \
925 __AROS_UFPA(a1); \
926 __AROS_UFPA(a2); \
927 __AROS_UFPA(a3); \
928 __AROS_UFPA(a4); \
929 __AROS_UFPA(a5); \
930 __AROS_UFCA(a1); \
931 __AROS_UFCA(a2); \
932 __AROS_UFCA(a3); \
933 __AROS_UFCA(a4); \
934 __AROS_UFCA(a5); \
935 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
938 #define AROS_UFC6(t,n,a1,a2,a3,a4,a5,a6) \
939 ({ \
940 __AROS_UFPA(a1); \
941 __AROS_UFPA(a2); \
942 __AROS_UFPA(a3); \
943 __AROS_UFPA(a4); \
944 __AROS_UFPA(a5); \
945 __AROS_UFPA(a6); \
946 __AROS_UFCA(a1); \
947 __AROS_UFCA(a2); \
948 __AROS_UFCA(a3); \
949 __AROS_UFCA(a4); \
950 __AROS_UFCA(a5); \
951 __AROS_UFCA(a6); \
952 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
955 #define AROS_UFC7(t,n,a1,a2,a3,a4,a5,a6,a7) \
956 ({ \
957 __AROS_UFPA(a1); \
958 __AROS_UFPA(a2); \
959 __AROS_UFPA(a3); \
960 __AROS_UFPA(a4); \
961 __AROS_UFPA(a5); \
962 __AROS_UFPA(a6); \
963 __AROS_UFPA(a7); \
964 __AROS_UFCA(a1); \
965 __AROS_UFCA(a2); \
966 __AROS_UFCA(a3); \
967 __AROS_UFCA(a4); \
968 __AROS_UFCA(a5); \
969 __AROS_UFCA(a6); \
970 __AROS_UFCA(a7); \
971 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
974 #define AROS_UFC8(t,n,a1,a2,a3,a4,a5,a6,a7,a8) \
975 ({ \
976 __AROS_UFPA(a1); \
977 __AROS_UFPA(a2); \
978 __AROS_UFPA(a3); \
979 __AROS_UFPA(a4); \
980 __AROS_UFPA(a5); \
981 __AROS_UFPA(a6); \
982 __AROS_UFPA(a7); \
983 __AROS_UFPA(a8); \
984 __AROS_UFCA(a1); \
985 __AROS_UFCA(a2); \
986 __AROS_UFCA(a3); \
987 __AROS_UFCA(a4); \
988 __AROS_UFCA(a5); \
989 __AROS_UFCA(a6); \
990 __AROS_UFCA(a7); \
991 __AROS_UFCA(a8); \
992 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
995 #define AROS_UFC9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
996 ({ \
997 __AROS_UFPA(a1); \
998 __AROS_UFPA(a2); \
999 __AROS_UFPA(a3); \
1000 __AROS_UFPA(a4); \
1001 __AROS_UFPA(a5); \
1002 __AROS_UFPA(a6); \
1003 __AROS_UFPA(a7); \
1004 __AROS_UFPA(a8); \
1005 __AROS_UFPA(a9); \
1006 __AROS_UFCA(a1); \
1007 __AROS_UFCA(a2); \
1008 __AROS_UFCA(a3); \
1009 __AROS_UFCA(a4); \
1010 __AROS_UFCA(a5); \
1011 __AROS_UFCA(a6); \
1012 __AROS_UFCA(a7); \
1013 __AROS_UFCA(a8); \
1014 __AROS_UFCA(a9); \
1015 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1018 #define AROS_UFC10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \
1019 ({ \
1020 __AROS_UFPA(a1); \
1021 __AROS_UFPA(a2); \
1022 __AROS_UFPA(a3); \
1023 __AROS_UFPA(a4); \
1024 __AROS_UFPA(a5); \
1025 __AROS_UFPA(a6); \
1026 __AROS_UFPA(a7); \
1027 __AROS_UFPA(a8); \
1028 __AROS_UFPA(a9); \
1029 __AROS_UFPA(a10); \
1030 __AROS_UFCA(a1); \
1031 __AROS_UFCA(a2); \
1032 __AROS_UFCA(a3); \
1033 __AROS_UFCA(a4); \
1034 __AROS_UFCA(a5); \
1035 __AROS_UFCA(a6); \
1036 __AROS_UFCA(a7); \
1037 __AROS_UFCA(a8); \
1038 __AROS_UFCA(a9); \
1039 __AROS_UFCA(a10); \
1040 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1043 #define AROS_UFC11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) \
1044 ({ \
1045 __AROS_UFPA(a1); \
1046 __AROS_UFPA(a2); \
1047 __AROS_UFPA(a3); \
1048 __AROS_UFPA(a4); \
1049 __AROS_UFPA(a5); \
1050 __AROS_UFPA(a6); \
1051 __AROS_UFPA(a7); \
1052 __AROS_UFPA(a8); \
1053 __AROS_UFPA(a9); \
1054 __AROS_UFPA(a10); \
1055 __AROS_UFPA(a11); \
1056 __AROS_UFCA(a1); \
1057 __AROS_UFCA(a2); \
1058 __AROS_UFCA(a3); \
1059 __AROS_UFCA(a4); \
1060 __AROS_UFCA(a5); \
1061 __AROS_UFCA(a6); \
1062 __AROS_UFCA(a7); \
1063 __AROS_UFCA(a8); \
1064 __AROS_UFCA(a9); \
1065 __AROS_UFCA(a10); \
1066 __AROS_UFCA(a11); \
1067 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1070 #define AROS_UFC12(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
1071 ({ \
1072 __AROS_UFPA(a1); \
1073 __AROS_UFPA(a2); \
1074 __AROS_UFPA(a3); \
1075 __AROS_UFPA(a4); \
1076 __AROS_UFPA(a5); \
1077 __AROS_UFPA(a6); \
1078 __AROS_UFPA(a7); \
1079 __AROS_UFPA(a8); \
1080 __AROS_UFPA(a9); \
1081 __AROS_UFPA(a10); \
1082 __AROS_UFPA(a11); \
1083 __AROS_UFPA(a12); \
1084 __AROS_UFCA(a1); \
1085 __AROS_UFCA(a2); \
1086 __AROS_UFCA(a3); \
1087 __AROS_UFCA(a4); \
1088 __AROS_UFCA(a5); \
1089 __AROS_UFCA(a6); \
1090 __AROS_UFCA(a7); \
1091 __AROS_UFCA(a8); \
1092 __AROS_UFCA(a9); \
1093 __AROS_UFCA(a10); \
1094 __AROS_UFCA(a11); \
1095 __AROS_UFCA(a12); \
1096 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1099 #define AROS_UFC13(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) \
1100 ({ \
1101 __AROS_UFPA(a1); \
1102 __AROS_UFPA(a2); \
1103 __AROS_UFPA(a3); \
1104 __AROS_UFPA(a4); \
1105 __AROS_UFPA(a5); \
1106 __AROS_UFPA(a6); \
1107 __AROS_UFPA(a7); \
1108 __AROS_UFPA(a8); \
1109 __AROS_UFPA(a9); \
1110 __AROS_UFPA(a10); \
1111 __AROS_UFPA(a11); \
1112 __AROS_UFPA(a12); \
1113 __AROS_UFPA(a13); \
1114 __AROS_UFCA(a1); \
1115 __AROS_UFCA(a2); \
1116 __AROS_UFCA(a3); \
1117 __AROS_UFCA(a4); \
1118 __AROS_UFCA(a5); \
1119 __AROS_UFCA(a6); \
1120 __AROS_UFCA(a7); \
1121 __AROS_UFCA(a8); \
1122 __AROS_UFCA(a9); \
1123 __AROS_UFCA(a10); \
1124 __AROS_UFCA(a11); \
1125 __AROS_UFCA(a12); \
1126 __AROS_UFCA(a13); \
1127 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1130 #define AROS_UFC14(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) \
1131 ({ \
1132 __AROS_UFPA(a1); \
1133 __AROS_UFPA(a2); \
1134 __AROS_UFPA(a3); \
1135 __AROS_UFPA(a4); \
1136 __AROS_UFPA(a5); \
1137 __AROS_UFPA(a6); \
1138 __AROS_UFPA(a7); \
1139 __AROS_UFPA(a8); \
1140 __AROS_UFPA(a9); \
1141 __AROS_UFPA(a10); \
1142 __AROS_UFPA(a11); \
1143 __AROS_UFPA(a12); \
1144 __AROS_UFPA(a13); \
1145 __AROS_UFPA(a14); \
1146 __AROS_UFCA(a1); \
1147 __AROS_UFCA(a2); \
1148 __AROS_UFCA(a3); \
1149 __AROS_UFCA(a4); \
1150 __AROS_UFCA(a5); \
1151 __AROS_UFCA(a6); \
1152 __AROS_UFCA(a7); \
1153 __AROS_UFCA(a8); \
1154 __AROS_UFCA(a9); \
1155 __AROS_UFCA(a10); \
1156 __AROS_UFCA(a11); \
1157 __AROS_UFCA(a12); \
1158 __AROS_UFCA(a13); \
1159 __AROS_UFCA(a14); \
1160 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1163 #define AROS_UFC15(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) \
1164 ({ \
1165 __AROS_UFPA(a1); \
1166 __AROS_UFPA(a2); \
1167 __AROS_UFPA(a3); \
1168 __AROS_UFPA(a4); \
1169 __AROS_UFPA(a5); \
1170 __AROS_UFPA(a6); \
1171 __AROS_UFPA(a7); \
1172 __AROS_UFPA(a8); \
1173 __AROS_UFPA(a9); \
1174 __AROS_UFPA(a10); \
1175 __AROS_UFPA(a11); \
1176 __AROS_UFPA(a12); \
1177 __AROS_UFPA(a13); \
1178 __AROS_UFPA(a14); \
1179 __AROS_UFPA(a15); \
1180 __AROS_UFCA(a1); \
1181 __AROS_UFCA(a2); \
1182 __AROS_UFCA(a3); \
1183 __AROS_UFCA(a4); \
1184 __AROS_UFCA(a5); \
1185 __AROS_UFCA(a6); \
1186 __AROS_UFCA(a7); \
1187 __AROS_UFCA(a8); \
1188 __AROS_UFCA(a9); \
1189 __AROS_UFCA(a10); \
1190 __AROS_UFCA(a11); \
1191 __AROS_UFCA(a12); \
1192 __AROS_UFCA(a13); \
1193 __AROS_UFCA(a14); \
1194 __AROS_UFCA(a15); \
1195 (t)MyEmulHandle->EmulCallDirect68k((APTR)(n)); \
1198 #endif /* !(UseRegisterArgs && defined(AROS_COMPILER_NO_REGARGS)) */
1200 /* Prototypes for user functions */
1201 # define AROS_UFP0(t,n) \
1202 extern const struct EmulLibEntry n##_Gate;
1204 # define AROS_UFP1(t,n,a1) \
1205 extern const struct EmulLibEntry n##_Gate;
1207 # define AROS_UFP2(t,n,a1,a2) \
1208 extern const struct EmulLibEntry n##_Gate;
1210 # define AROS_UFP3(t,n,a1,a2,a3) \
1211 extern const struct EmulLibEntry n##_Gate;
1213 # define AROS_UFP3S(t,n,a1,a2,a3) \
1214 extern const struct EmulLibEntry n##_Gate;
1216 # define AROS_UFP4(t,n,a1,a2,a3,a4) \
1217 const struct EmulLibEntry Xj(n,_Gate);
1219 # define AROS_UFP5(t,n,a1,a2,a3,a4,a5) \
1220 extern const struct EmulLibEntry n##_Gate;
1222 # define AROS_UFP5S(t,n,a1,a2,a3,a4,a5) \
1223 extern const struct EmulLibEntry n##_Gate;
1224 # define AROS_UFP6(t,n,a1,a2,a3,a4,a5,a6) \
1225 extern const struct EmulLibEntry n##_Gate;
1227 # define AROS_UFP7(t,n,a1,a2,a3,a4,a5,a6,a7) \
1228 extern const struct EmulLibEntry n##_Gate;
1230 # define AROS_UFP8(t,n,a1,a2,a3,a4,a5,a6,a7,a8) \
1231 extern const struct EmulLibEntry n##_Gate;
1233 # define AROS_UFP9(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
1234 extern const struct EmulLibEntry n##_Gate;
1236 # define AROS_UFP10(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \
1237 extern const struct EmulLibEntry n##_Gate;
1239 # define AROS_UFP11(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) \
1240 extern const struct EmulLibEntry n##_Gate;
1242 # define AROS_UFP12(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
1243 extern const struct EmulLibEntry n##_Gate;
1245 # define AROS_UFP13(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) \
1246 extern const struct EmulLibEntry n##_Gate;
1248 # define AROS_UFP14(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) \
1249 extern const struct EmulLibEntry n##_Gate;
1251 # define AROS_UFP15(t,n,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) \
1252 extern const struct EmulLibEntry n##_Gate;
1254 #endif /* AROS_MORPHOS_CPU_H */