Main Page | Modules | Data Structures | File List | Data Fields | Globals

exec.h

Go to the documentation of this file.
00001 /* depends on beeos.h. */
00002 
00003 struct regs_struct {
00004     ushort SP;  ushort PC;  ushort IY;  ushort IX;
00005     ushort D;   uchar CCR;  ushort _tmp;    ushort _z;
00006     ushort _xy; ushort _d[GCC_SOFTREGCOUNT];
00007 };
00008 typedef struct regs_struct regs_t;
00009 
00010 struct task_struct {
00011     regs_t regs;
00012     ushort nextrun;
00013     ushort stacksize;
00014     char *stack;
00015     void (*func)(void);
00016     schar priority;
00017     bool sleeping;
00018     struct task_struct *prev_prior;
00019     struct task_struct *next_prior;
00020     struct task_struct *prev_time;
00021     struct task_struct *next_time;
00022 };
00023 typedef struct task_struct task_t;
00024     
00025 struct execbase_struct {
00026     task_t *current;
00027     task_t *head_prior;
00028     task_t *head_time;
00029     task_t *tail_prior;
00030     task_t *tail_time;
00031     task_t *idle_task;
00032     uchar numtasks;
00033     uchar activetasks;
00034     bool idle;
00035     bool blocked;
00036 };
00037 typedef struct execbase_struct execbase_t;
00038 
00039 #ifndef IN_EXEC
00040     extern execbase_t exec;
00041 #endif
00042 
00043 void bsleep (ushort sleeptime);
00044 void addtask (void (*func)(void), schar priority, ushort nextrun, ushort stacksize);
00045 void execprep (void);
00046 /* BEGIN EXEC.H CONFIG */
00047 /*#define EXEC_DEBUG*/
00048 /* END EXEC.H CONFIG */
00049 
00050 #ifdef IN_EXEC
00051 
00055 #define CONTEXT_SAVE() do {\
00056     __asm__ ("puld\n\tstd   %0": "=m" (tempregs._xy) : : "%d");\
00057     __asm__ ("puld\n\tstd   %0": "=m" (tempregs._z) : : "%d");\
00058     __asm__ ("puld\n\tstd   %0": "=m" (tempregs._tmp) : : "%d");\
00059     __asm__ ("pula\n\tstaa  %0": "=m" (tempregs.CCR) : : "%a");\
00060     __asm__ ("puld\n\tstd   %0": "=m" (tempregs.D) : : "%d");\
00061     __asm__ ("puld\n\tstd   %0": "=m" (tempregs.IX) : : "%d");\
00062     __asm__ ("puld\n\tstd   %0": "=m" (tempregs.IY) : : "%d");\
00063     __asm__ ("puld\n\tstd   %0": "=m" (tempregs.PC) : : "%d");\
00064     __asm__ ("tfr   sp,d\n\tstd %0": "=m" (tempregs.SP)  : : "%d");\
00065     tempregs._d[0] = _d1;\
00066     tempregs._d[1] = _d2;\
00067     tempregs._d[2] = _d3;\
00068     tempregs._d[3] = _d4;\
00069     tempregs._d[4] = _d5;\
00070     tempregs._d[5] = _d6;\
00071     tempregs._d[6] = _d7;\
00072     tempregs._d[7] = _d8;\
00073 } while (0)
00074 
00075 #define CONTEXT_RESTORE() do {\
00076     tempregs._d[0] = _d1;\
00077     tempregs._d[1] = _d2;\
00078     tempregs._d[2] = _d3;\
00079     tempregs._d[3] = _d4;\
00080     tempregs._d[4] = _d5;\
00081     tempregs._d[5] = _d6;\
00082     tempregs._d[6] = _d7;\
00083     tempregs._d[7] = _d8;\
00084     __asm__ ("ldd   %0\n\ttfr d,sp": : "m" (tempregs.SP) : "%d");\
00085     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs.PC) : "%d");\
00086     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs.IY) : "%d");\
00087     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs.IX) : "%d");\
00088     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs.D) : "%d");\
00089     __asm__ ("ldaa  %0\n\tpsha": : "m" (tempregs.CCR) : "%a");\
00090     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs._tmp) : "%d");\
00091     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs._z) : "%d");\
00092     __asm__ ("ldd   %0\n\tpshd": : "m" (tempregs._xy) : "%d");\
00093 } while (0)
00094 
00095 #endif

Generated on Sat Apr 10 17:08:02 2004 for BeeOS by doxygen 1.3.6-20040222