4
/* Transparent MorphOS gate function macros
6
Written by Harry "Piru" Sintonen, 2000-2001.
11
# include <exec/types.h>
12
# include <emul/emulregs.h>
13
# include <emul/emulinterface.h>
15
# define REG_a0 REG_A0
16
# define REG_a1 REG_A1
17
# define REG_a2 REG_A2
18
# define REG_a3 REG_A3
19
# define REG_a4 REG_A4
20
# define REG_a5 REG_A5
21
# define REG_a6 REG_A6
22
# define REG_a7 REG_A7
23
# define REG_d0 REG_D0
24
# define REG_d1 REG_D1
25
# define REG_d2 REG_D2
26
# define REG_d3 REG_D3
27
# define REG_d4 REG_D4
28
# define REG_d5 REG_D5
29
# define REG_d6 REG_D6
30
# define REG_d7 REG_D7
32
#define DECLGATE(t, fn, rt) \
33
t struct EmulLibEntry fn = {TRAP_ ## rt, 0, (void (*)(void)) _ ## fn};
34
#define DECLFUNC_1(fn, r1, t1, n1) _ ## fn(void)
35
#define DECLFUNC_2(fn, r1, t1, n1, r2, t2, n2) _ ## fn(void)
36
#define DECLFUNC_3(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3) _ ## fn(void)
37
#define DECLFUNC_4(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4) _ ## fn(void)
38
#define DECLFUNC_5(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5) _ ## fn(void)
39
#define DECLFUNC_6(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6) _ ## fn(void)
40
#define DECLFUNC_7(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7) _ ## fn(void)
41
#define DECLFUNC_8(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8) _ ## fn(void)
42
#define DECLFUNC_9(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9) _ ## fn(void)
43
#define DECLFUNC_10(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10) _ ## fn(void)
45
#define NATDECLGATE(t, fn, rt)
46
#define NATDECLFUNC_1(fn, r1, t1, n1) fn(void)
47
#define NATDECLFUNC_2(fn, r1, t1, n1, r2, t2, n2) fn(void)
48
#define NATDECLFUNC_3(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3) fn(void)
49
#define NATDECLFUNC_4(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4) fn(void)
50
#define NATDECLFUNC_5(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5) fn(void)
51
#define NATDECLFUNC_6(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6) fn(void)
52
#define NATDECLFUNC_7(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7) fn(void)
53
#define NATDECLFUNC_8(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8) fn(void)
54
#define NATDECLFUNC_9(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9) fn(void)
55
#define NATDECLFUNC_10(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10) fn(void)
57
#define DECLARG_1(r1, t1, n1) \
58
t1 n1 = (t1) REG_ ## r1;
60
#define DECLARG_2(r1, t1, n1, r2, t2, n2) \
61
t1 n1 = (t1) REG_ ## r1; \
62
t2 n2 = (t2) REG_ ## r2;
64
#define DECLARG_3(r1, t1, n1, r2, t2, n2, r3, t3, n3) \
65
t1 n1 = (t1) REG_ ## r1; \
66
t2 n2 = (t2) REG_ ## r2; \
67
t3 n3 = (t3) REG_ ## r3;
69
#define DECLARG_4(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4) \
70
t1 n1 = (t1) REG_ ## r1; \
71
t2 n2 = (t2) REG_ ## r2; \
72
t3 n3 = (t3) REG_ ## r3; \
73
t4 n4 = (t4) REG_ ## r4;
75
#define DECLARG_5(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5) \
76
t1 n1 = (t1) REG_ ## r1; \
77
t2 n2 = (t2) REG_ ## r2; \
78
t3 n3 = (t3) REG_ ## r3; \
79
t4 n4 = (t4) REG_ ## r4; \
80
t5 n5 = (t5) REG_ ## r5;
82
#define DECLARG_6(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6) \
83
t1 n1 = (t1) REG_ ## r1; \
84
t2 n2 = (t2) REG_ ## r2; \
85
t3 n3 = (t3) REG_ ## r3; \
86
t4 n4 = (t4) REG_ ## r4; \
87
t5 n5 = (t5) REG_ ## r5; \
88
t6 n6 = (t6) REG_ ## r6;
90
#define DECLARG_7(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7) \
91
t1 n1 = (t1) REG_ ## r1; \
92
t2 n2 = (t2) REG_ ## r2; \
93
t3 n3 = (t3) REG_ ## r3; \
94
t4 n4 = (t4) REG_ ## r4; \
95
t5 n5 = (t5) REG_ ## r5; \
96
t6 n6 = (t6) REG_ ## r6; \
97
t7 n7 = (t7) REG_ ## r7;
99
#define DECLARG_8(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8) \
100
t1 n1 = (t1) REG_ ## r1; \
101
t2 n2 = (t2) REG_ ## r2; \
102
t3 n3 = (t3) REG_ ## r3; \
103
t4 n4 = (t4) REG_ ## r4; \
104
t5 n5 = (t5) REG_ ## r5; \
105
t6 n6 = (t6) REG_ ## r6; \
106
t7 n7 = (t7) REG_ ## r7; \
107
t8 n8 = (t8) REG_ ## r8;
109
#define DECLARG_9(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9) \
110
t1 n1 = (t1) REG_ ## r1; \
111
t2 n2 = (t2) REG_ ## r2; \
112
t3 n3 = (t3) REG_ ## r3; \
113
t4 n4 = (t4) REG_ ## r4; \
114
t5 n5 = (t5) REG_ ## r5; \
115
t6 n6 = (t6) REG_ ## r6; \
116
t7 n7 = (t7) REG_ ## r7; \
117
t8 n8 = (t8) REG_ ## r8; \
118
t9 n9 = (t9) REG_ ## r9;
120
#define DECLARG_10(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10) \
121
t1 n1 = (t1) REG_ ## r1; \
122
t2 n2 = (t2) REG_ ## r2; \
123
t3 n3 = (t3) REG_ ## r3; \
124
t4 n4 = (t4) REG_ ## r4; \
125
t5 n5 = (t5) REG_ ## r5; \
126
t6 n6 = (t6) REG_ ## r6; \
127
t7 n7 = (t7) REG_ ## r7; \
128
t8 n8 = (t8) REG_ ## r8; \
129
t9 n9 = (t9) REG_ ## r9; \
130
t10 n10 = (t10) REG_ ## r10;
132
#else /* __MORPHOS__ */
134
#include "myregargs.h"
136
#define DECLARG_1(r1, t1, n1)
137
#define DECLARG_2(r1, t1, n1, r2, t2, n2)
138
#define DECLARG_3(r1, t1, n1, r2, t2, n2, r3, t3, n3)
139
#define DECLARG_4(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4)
140
#define DECLARG_5(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5)
141
#define DECLARG_6(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6)
142
#define DECLARG_7(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7)
143
#define DECLARG_8(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8)
144
#define DECLARG_9(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9)
145
#define DECLARG_10(r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10)
147
#define DECLGATE(t, fn, rt)
149
#define DECLFUNC_1(fn, r1, t1, n1) \
150
MASM fn(MREG(r1, t1 n1))
151
#define DECLFUNC_2(fn, r1, t1, n1, r2, t2, n2) \
152
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2))
153
#define DECLFUNC_3(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3) \
154
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3))
155
#define DECLFUNC_4(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4) \
156
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4))
157
#define DECLFUNC_5(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5) \
158
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4), MREG(r5, t5 n5))
159
#define DECLFUNC_6(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6) \
160
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4), MREG(r5, t5 n5), MREG(r6, t6 n6))
161
#define DECLFUNC_7(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7) \
162
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4), MREG(r5, t5 n5), MREG(r6, t6 n6), MREG(r7, t7 n7))
163
#define DECLFUNC_8(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8) \
164
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4), MREG(r5, t5 n5), MREG(r6, t6 n6), MREG(r7, t7 n7), MREG(r8, t8 n8))
165
#define DECLFUNC_9(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9) \
166
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4), MREG(r5, t5 n5), MREG(r6, t6 n6), MREG(r7, t7 n7), MREG(r8, t8 n8), MREG(r9, t9 n9))
167
#define DECLFUNC_10(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10) \
168
MASM fn(MREG(r1, t1 n1), MREG(r2, t2 n2), MREG(r3, t3 n3), MREG(r4, t4 n4), MREG(r5, t5 n5), MREG(r6, t6 n6), MREG(r7, t7 n7), MREG(r8, t8 n8), MREG(r9, t9 n9), MREG(r10, t10 n10))
170
#define NATDECLGATE(t, fn, rt)
172
#define NATDECLFUNC_1(fn, r1, t1, n1) \
173
DECLFUNC_1(fn, r1, t1, n1)
174
#define NATDECLFUNC_2(fn, r1, t1, n1, r2, t2, n2) \
175
DECLFUNC_2(fn, r1, t1, n1, r2, t2, n2)
176
#define NATDECLFUNC_3(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3) \
177
DECLFUNC_3(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3)
178
#define NATDECLFUNC_4(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4) \
179
DECLFUNC_4(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4)
180
#define NATDECLFUNC_5(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5) \
181
DECLFUNC_5(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5)
182
#define NATDECLFUNC_6(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6) \
183
DECLFUNC_6(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6)
184
#define NATDECLFUNC_7(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7) \
185
DECLFUNC_7(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7)
186
#define NATDECLFUNC_8(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8) \
187
DECLFUNC_8(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8)
188
#define NATDECLFUNC_9(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9) \
189
DECLFUNC_9(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9)
190
#define NATDECLFUNC_10(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10) \
191
DECLFUNC_10(fn, r1, t1, n1, r2, t2, n2, r3, t3, n3, r4, t4, n4, r5, t5, n5, r6, t6, n6, r7, t7, n7, r8, t8, n8, r9, t9, n9, r10, t10, n10)
193
#endif /* __MORPHOS__ */
195
#endif /* __DECLGATE_H__ */