since we dont use the build system to build openssl, we need to pass the TARGET_SYSROOT
[AROS-Contrib.git] / Misc / berger / callfuncs.c
blob3cacb5584b15c78c2fbd7e7ae05c9d4bad0da234
1 #include <aros/asmcall.h>
3 #include "m68k.h"
4 #include "callfuncs.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]
26 #define func1(reg) \
27 VOID call_##reg##(int (*func)()) \
28 { \
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)()) \
36 { \
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)()) \
44 { \
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)()) \
53 { \
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)()) \
62 { \
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)())\
72 { \
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)()) \
82 { \
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)())\
93 { \
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));
137 func1(A0)
138 func1(D0)
139 func1(A1)
140 func1(D1)
142 func1_VOID(A0)
143 func1_VOID(A1)
144 func1_VOID(A5)
146 func1_VOID(D0)
147 func1_VOID(D1)
148 func1_VOID(D7)
150 /* 2 arguments */
151 func2(A1,D0)
152 func2(D0,D1)
153 func2(D0,A1)
154 func2(A1,D1)
155 func2(A0,D0)
156 func2(A0,A1)
158 func2_VOID(A0, A1)
159 func2_VOID(A1, D0)
160 func2_VOID(D0, D1)
161 func2_VOID(D0, A1)
163 /* 3 arguments */
164 func3_VOID(A1,A2,D0)
165 func3_VOID(A0,A1,D0)
167 func3(A0,A1,A2)
168 func3(A1,A2,A3)
169 func3(A1,A0,D0)
171 /* 4 arguments */
172 func4(A0,D0,A1,D1)
174 /* 5 arguments */
175 func5(A0,A1,A2,D0,D1)