1 #include <aros/asmcall.h>
6 extern struct M68k CPU
;
8 #define CPU_A0 CPU.A[0]
9 #define CPU_A1 CPU.A[1]
10 #define CPU_A2 CPU.A[2]
11 #define CPU_A3 CPU.A[3]
12 #define CPU_A4 CPU.A[4]
13 #define CPU_A5 CPU.A[5]
14 #define CPU_A6 CPU.A[6]
15 #define CPU_A7 CPU.A[7]
17 #define CPU_D0 CPU.D[0]
18 #define CPU_D1 CPU.D[1]
19 #define CPU_D2 CPU.D[2]
20 #define CPU_D3 CPU.D[3]
21 #define CPU_D4 CPU.D[4]
22 #define CPU_D5 CPU.D[5]
23 #define CPU_D6 CPU.D[6]
24 #define CPU_D7 CPU.D[7]
27 VOID call_##reg##(int (*func)()) \
29 CPU.D[0] = AROS_UFC2(ULONG, func, \
30 AROS_UFCA(ULONG, CPU_##reg##, reg), \
31 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
34 #define func1_VOID(reg) \
35 VOID call_##reg##_VOID(int (*func)()) \
37 CPU.D[0] = AROS_UFC2(ULONG, func, \
38 AROS_UFCA(ULONG, CPU_##reg##, reg), \
39 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
42 #define func2(reg1,reg2) \
43 VOID call_##reg1##_##reg2##(int (*func)()) \
45 CPU.D[0] = AROS_UFC3(ULONG, func, \
46 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
47 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
48 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
51 #define func2_VOID(reg1,reg2) \
52 VOID call_##reg1##_##reg2##_VOID(int (*func)()) \
54 AROS_UFC3(ULONG, func, \
55 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
56 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
57 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
60 #define func3(reg1,reg2,reg3) \
61 VOID call_##reg1##_##reg2##_##reg3##(int (*func)()) \
63 CPU.D[0] = AROS_UFC4(ULONG, func, \
64 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
65 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
66 AROS_UFCA(ULONG, CPU_##reg3##, reg3), \
67 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
70 #define func3_VOID(reg1,reg2,reg3) \
71 VOID call_##reg1##_##reg2##_##reg3##_VOID(int (*func)())\
73 AROS_UFC4(ULONG, func, \
74 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
75 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
76 AROS_UFCA(ULONG, CPU_##reg3##, reg3), \
77 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
80 #define func4(reg1,reg2,reg3,reg4) \
81 VOID call_##reg1##_##reg2##_##reg3##_##reg4##(int (*func)()) \
83 CPU.D[0] = AROS_UFC5(ULONG, func, \
84 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
85 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
86 AROS_UFCA(ULONG, CPU_##reg3##, reg3), \
87 AROS_UFCA(ULONG, CPU_##reg4##, reg4), \
88 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
91 #define func4_VOID(reg1,reg2,reg3,reg4) \
92 VOID call_##reg1##_##reg2##_##reg3##_##reg4##_VOID(int (*func)())\
94 AROS_UFC5(ULONG, func, \
95 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
96 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
97 AROS_UFCA(ULONG, CPU_##reg3##, reg3), \
98 AROS_UFCA(ULONG, CPU_##reg4##, reg4), \
99 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
102 #define func5(reg1,reg2,reg3,reg4,reg5) \
103 VOID call_##reg1##_##reg2##_##reg3##_##reg4##_##reg5##(int (*func)()) \
105 CPU.D[0] = AROS_UFC6(ULONG, func, \
106 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
107 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
108 AROS_UFCA(ULONG, CPU_##reg3##, reg3), \
109 AROS_UFCA(ULONG, CPU_##reg4##, reg4), \
110 AROS_UFCA(ULONG, CPU_##reg5##, reg5), \
111 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
114 #define func5_VOID(reg1,reg2,reg3,reg4,reg5) \
115 VOID call_##reg1##_##reg2##_##reg3##_##reg4##_##reg5##_VOID(int (*func)())\
117 AROS_UFC6(ULONG, func, \
118 AROS_UFCA(ULONG, CPU_##reg1##, reg1), \
119 AROS_UFCA(ULONG, CPU_##reg2##, reg2), \
120 AROS_UFCA(ULONG, CPU_##reg3##, reg3), \
121 AROS_UFCA(ULONG, CPU_##reg4##, reg4), \
122 AROS_UFCA(ULONG, CPU_##reg5##, reg5), \
123 AROS_UFCA(ULONG, CPU.A[6] , A6)); \
127 VOID
call_VOID(int (*func
)())
131 VOID
call_NOPARM(int (*func
)())
133 CPU
.D
[0] = AROS_UFC1(ULONG
, func
,
134 AROS_UFCA(ULONG
, CPU
.A
[6], A6
));
175 func5(A0
,A1
,A2
,D0
,D1
)