asm.h: m68000 needs '%c0' for *all* of its defines
[AROS.git] / arch / common / include / asm.c
blob4828cb4448efc7871ea1282424ef5faa426747d9
1 /*
2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <exec/alerts.h>
7 #include <exec/types.h>
8 #include <exec/execbase.h>
9 #include <exec/tasks.h>
10 #include <dos/dosextens.h>
12 #include <stddef.h>
14 #ifdef __mc68000
15 /* m68k relative addresses must *not* start with a '#' */
16 #define DEFINE(sym, val) \
17 asm volatile("\n#define " #sym " %c0 ": : "i" (val))
18 #else
19 #define DEFINE(sym, val) \
20 asm volatile("\n#define " #sym " %0 ": : "i" (val))
21 #endif
23 #define FuncOffset(x) (int)__AROS_GETJUMPVEC(0,x)
25 int main(void) {
26 asm volatile("\n/* Macros */" ::);
28 asm volatile("\n#define AROS_CSYMNAME(n) n\n" ::);
29 asm volatile("\n#define AROS_CDEFNAME(n) n\n" ::);
30 asm volatile("\n#define AROS_SLIB_ENTRY(n,s) s ## _ ## n\n" ::);
32 asm volatile("\n#define _FUNCTION(n) .type n,@function" ::);
33 asm volatile("\n#define _ALIGNMENT .balign %0" :: "i" (AROS_WORSTALIGN));
35 asm volatile("\n/* ExecBase */" ::);
36 DEFINE(AttnResched , offsetof (struct ExecBase, AttnResched));
37 DEFINE(IDNestCnt , offsetof (struct ExecBase, IDNestCnt));
38 DEFINE(TDNestCnt , offsetof (struct ExecBase, TDNestCnt));
39 DEFINE(TaskReady , offsetof (struct ExecBase, TaskReady));
40 DEFINE(ThisTask , offsetof (struct ExecBase, ThisTask));
41 DEFINE(SysFlags , offsetof (struct ExecBase, SysFlags));
42 DEFINE(IdleCount , offsetof (struct ExecBase, IdleCount));
43 DEFINE(DispCount , offsetof (struct ExecBase, DispCount));
44 DEFINE(Quantum , offsetof (struct ExecBase, Quantum));
45 DEFINE(Elapsed , offsetof (struct ExecBase, Elapsed));
47 asm volatile("\n/* struct Task */" ::);
48 DEFINE(tc_State , offsetof (struct Task, tc_State));
49 DEFINE(tc_Flags , offsetof (struct Task, tc_Flags));
50 DEFINE(tc_ExceptCode , offsetof (struct Task, tc_ExceptCode));
51 DEFINE(tc_ExceptData , offsetof (struct Task, tc_ExceptData));
52 DEFINE(tc_SigExcept , offsetof (struct Task, tc_SigExcept));
53 DEFINE(tc_SigRecvd , offsetof (struct Task, tc_SigRecvd));
54 DEFINE(tc_Launch , offsetof (struct Task, tc_Launch));
55 DEFINE(tc_Switch , offsetof (struct Task, tc_Switch));
56 DEFINE(tc_SPReg , offsetof (struct Task, tc_SPReg));
57 DEFINE(tc_SPLower , offsetof (struct Task, tc_SPLower));
58 DEFINE(tc_SPUpper , offsetof (struct Task, tc_SPUpper));
59 DEFINE(tc_IDNestCnt , offsetof (struct Task, tc_IDNestCnt));
60 DEFINE(tc_ETask , offsetof (struct Task, tc_UnionETask.tc_ETask));
61 DEFINE(iet_Context , sizeof (struct ETask) + 4);
63 asm volatile("\n/* struct DosBase */" ::);
64 DEFINE(dl_SysBase , offsetof (struct DosLibrary, dl_SysBase));
66 asm volatile("\n/* struct StackSwapStruct */" ::);
67 DEFINE(stk_Lower , offsetof (struct StackSwapStruct, stk_Lower));
68 DEFINE(stk_Upper , offsetof (struct StackSwapStruct, stk_Upper));
69 DEFINE(stk_Pointer , offsetof (struct StackSwapStruct, stk_Pointer));
71 asm volatile("\n/* Task Flags */" ::);
72 DEFINE(TS_RUN , TS_RUN);
73 DEFINE(TS_READY , TS_READY);
74 DEFINE(TF_EXCEPT , TF_EXCEPT);
75 DEFINE(TF_SWITCH , TF_SWITCH);
76 DEFINE(TF_LAUNCH , TF_LAUNCH);
78 asm volatile("\n/* Exec functions */" ::);
79 DEFINE(Reschedule , FuncOffset (8));
80 DEFINE(Switch , FuncOffset (9));
81 DEFINE(Dispatch , FuncOffset (10));
82 DEFINE(Exception , FuncOffset (11));
83 DEFINE(Alert , FuncOffset (18));
84 DEFINE(Disable , FuncOffset (20));
85 DEFINE(Enable , FuncOffset (21));
86 DEFINE(Enqueue , FuncOffset (45));
87 DEFINE(FindTask , FuncOffset (49));
88 DEFINE(StackSwap , FuncOffset (122));
90 asm volatile("\n/* Constants */" ::);
91 DEFINE(AT_DeadEnd , AT_DeadEnd);
92 DEFINE(AN_StackProbe , AN_StackProbe);
94 DEFINE(ln_Succ , offsetof (struct Node, ln_Succ));
95 DEFINE(ln_Pred , offsetof (struct Node, ln_Pred));
96 DEFINE(ln_Pri , offsetof (struct Node, ln_Pri));
98 DEFINE(lh_Head , offsetof (struct List, lh_Head));
99 DEFINE(lh_TailPred , offsetof (struct List, lh_TailPred));
102 #ifdef UseExecstubs
103 asm volatile("\n#define UseExecstubs 1" ::);
104 #endif
106 return 0;