-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSDI_compiler.h
executable file
·207 lines (191 loc) · 5 KB
/
SDI_compiler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#ifndef SDI_COMPILER_H
#define SDI_COMPILER_H
/* Includeheader
Name: SDI_compiler.h
Versionstring: $VER: SDI_compiler.h 1.13 (23.05.2004)
Author: SDI
Distribution: PD
Description: defines to hide compiler stuff
1.1 25.06.98 : created from data made by Gunter Nikl
1.2 17.11.99 : added VBCC
1.3 29.02.00 : fixed VBCC REG define
1.4 30.03.00 : fixed SAVEDS for VBCC
1.5 29.07.00 : added #undef statements (needed e.g. for AmiTCP together
with vbcc)
1.6 19.05.01 : added STACKEXT and Dice stuff
1.7 16.06.02 : added MorphOS specials and VARARGS68K
1.8 21.09.02 : added MorphOS register stuff
1.9 26.09.02 : added OFFSET macro. Thanks Frank Wille for suggestion
1.10 18.10.02 : reverted to old MorphOS-method for GCC
1.11 09.11.02 : added REGARGS define to MorphOS section
1.12 21.01.04 : added SDI_MORPHOSNOREG define to change behaviour
1.13 23.05.04 : added machine definitions
*/
/* Define SDI_MORPHOSNOREG in your makefile to switch register based functions
to normal C-Style functions as it is default for PPC. */
/*
** This is PD (Public Domain). This means you can do with it whatever you want
** without any restrictions. I only ask you to tell me improvements, so I may
** fix the main line of this files as well.
**
** To keep confusion level low: When changing this file, please note it in
** above history list and indicate that the change was not made by myself
** (e.g. add your name or nick name).
**
** Dirk Stöcker <[email protected]>
*/
#ifdef ASM
#undef ASM
#endif
#ifdef REG
#undef REG
#endif
#ifdef LREG
#undef LREG
#endif
#ifdef CONST
#undef CONST
#endif
#ifdef SAVEDS
#undef SAVEDS
#endif
#ifdef INLINE
#undef INLINE
#endif
#ifdef REGARGS
#undef REGARGS
#endif
#ifdef STDARGS
#undef STDARGS
#endif
#ifdef OFFSET
#undef OFFSET
#endif
/* first "exceptions" */
#if defined(__MAXON__)
#define STDARGS
#define STACKEXT
#define REGARGS
#define SAVEDS
#define INLINE inline
#elif defined(__VBCC__)
#define STDARGS
#define STACKEXT
#define REGARGS
#define INLINE
#define OFFSET(p,m) __offsetof(struct p,m)
#if defined(__MORPHOS__)
#define REG(reg,arg) __reg(MOS__##reg) arg
/* NOTE: This assumes "quick native mode" when compiling libraries. */
#define MOS__a0 "r24"
#define MOS__a1 "r25"
#define MOS__a2 "r26"
#define MOS__a3 "r27"
#define MOS__a4 "r28"
#define MOS__a5 "r29"
#define MOS__a6 "r30"
/* #define MOS__a7 "r31" */
#define MOS__d0 "r16"
#define MOS__d1 "r17"
#define MOS__d2 "r18"
#define MOS__d3 "r19"
#define MOS__d4 "r20"
#define MOS__d5 "r21"
#define MOS__d6 "r22"
#define MOS__d7 "r23"
#else
#define REG(reg,arg) __reg(#reg) arg
#endif
#elif defined(__STORM__)
#define STDARGS
#define STACKEXT
#define REGARGS
#define INLINE inline
#elif defined(__SASC)
#define ASM(arg) arg __asm
#elif defined(__GNUC__)
#if defined(__amigaos4__)
#define REG(reg,arg) arg
#define ASM(arg) arg
#else
#define REG(reg,arg) arg __asm(#reg)
#define LREG(reg,arg) register REG(reg,arg)
#endif
/* Don`t use __stackext for the MorphOS version
because we anyway don`t have a libnix ppc with stackext
Also we define a VARARGS68K define here to specify
functions that should work with that special attribute
of the MOS gcc compiler for varargs68k handling. */
#if defined(__MORPHOS__)
#define STDARGS
#define STACKEXT
#define REGARGS
#define VARARGS68K __attribute__((varargs68k))
#endif
#elif defined(_DCC)
#define REG(reg,arg) __##reg arg
#define STACKEXT __stkcheck
#define STDARGS __stkargs
#define INLINE static
#endif
/* then "common" ones */
#if defined(__MORPHOS__) && defined(SDI_MORPHOSNOREG)
#ifdef REG
#undef REG
#endif
#define REG(reg,arg) arg
#endif
#if !defined(ASM)
#define ASM(arg) arg
#endif
#if !defined(REG)
#define REG(reg,arg) register __##reg arg
#endif
#if !defined(LREG)
#define LREG(reg,arg) register arg
#endif
#if !defined(CONST)
#define CONST const
#endif
#if !defined(SAVEDS)
#define SAVEDS __saveds
#endif
#if !defined(INLINE)
#define INLINE static __inline
#endif
#if !defined(REGARGS)
#define REGARGS __regargs
#endif
#if !defined(STDARGS)
#define STDARGS __stdargs
#endif
#if !defined(STACKEXT)
#define STACKEXT __stackext
#endif
#if !defined(VARARGS68K)
#define VARARGS68K
#endif
#if !defined(OFFSET)
#define OFFSET(structName, structEntry) \
((char *)(&(((struct structName *)0)->structEntry))-(char *)0)
#endif
#if defined(__GNUC__) || defined(__VBCC__)
#if !defined(__mc68060) && !defined(__M68060)
#if !defined(__mc68040) && !defined(__M68040)
#if !defined(__mc68030) && !defined(__mc68020) \
&& !defined(__M68030) && !defined(__M68020)
#define _M68000
#else
#define _M68020
#endif
#else
#define _M68040
#endif
#else
#define _M68060
#endif
#if defined(__HAVE_68881__) || defined(__M68881) || defined(__M68882)
#define _M68881
#endif
#endif
#endif /* SDI_COMPILER_H */