diff options
author | Jeffrey A Law <law@cygnus.com> | 1998-09-08 09:42:42 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-09-08 03:42:42 -0600 |
commit | 9de92eb5d03e618a22aa3ce2ff3a89fcef265292 (patch) | |
tree | c9990930f146d6de61201528647d19a1aa982f3b /libchill/rts.h | |
parent | e742fecc310dda4076d9f83d751b62fb9354e4de (diff) | |
download | gcc-9de92eb5d03e618a22aa3ce2ff3a89fcef265292.zip gcc-9de92eb5d03e618a22aa3ce2ff3a89fcef265292.tar.gz gcc-9de92eb5d03e618a22aa3ce2ff3a89fcef265292.tar.bz2 |
* rts.h: Update with missing code.
From-SVN: r22327
Diffstat (limited to 'libchill/rts.h')
-rw-r--r-- | libchill/rts.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/libchill/rts.h b/libchill/rts.h index 27019e7..f4c21fa 100644 --- a/libchill/rts.h +++ b/libchill/rts.h @@ -43,10 +43,109 @@ typedef struct unsigned char /*TaskingEnum*/ type; } TaskingStruct; +/* how an INSTANCE is implemented */ typedef struct { short ptype; short pcopy; } INSTANCE; +/* interface to underlaying os */ +typedef enum +{ + wait_wait, + wait_buffer_send, + wait_buffer_receive, + wait_buffer_free, + wait_event_delay, + wait_event_free, +} Delay_Reason; + +extern INSTANCE __whoami (); +extern void *__xmalloc_ (); + +#define THIS __whoami() +/* for easier changing to something different, + i.e. allocate_memory */ +#define MALLOC(ADDR,SIZE) ADDR = __xmalloc_(SIZE) +#define FREE(ADDR) free (ADDR) + +/* definitions for EVENTS */ +typedef struct EVENTQUEUE +{ + struct EVENTQUEUE *forward; /* next in the list */ + struct EVENTQUEUE **listhead; /* pointer to EVENT location */ + int priority; /* prio for DELAY or DELAY CASE */ + INSTANCE this; /* specify the instance is delayed */ + struct EVENTQUEUE *startlist; /* start of the list */ + struct EVENTQUEUE *chain; /* list of all events in an DELAY CASE */ + int is_continued; /* indicates a continue action on that event */ + INSTANCE who_continued; /* indicates who continued */ +} Event_Queue; + +typedef struct +{ + Event_Queue **ev; + unsigned long maxqueuelength; +} Event_Descr; + +/* definitions for BUFFERS */ +struct BUFFERQUEUE; + +typedef struct BUFFER_WAIT_QUEUE +{ + struct BUFFER_WAIT_QUEUE *forward; + struct BUFFERQUEUE **bufferaddr; + INSTANCE this; + struct BUFFER_WAIT_QUEUE *startlist; + struct BUFFER_WAIT_QUEUE *chain; + int is_sent; + INSTANCE who_sent; /* instance which have + send a buffer */ + unsigned long datalen; + void *dataptr; +} Buffer_Wait_Queue; + +typedef struct BUFFER_SEND_QUEUE +{ + struct BUFFER_SEND_QUEUE *forward; + int priority; + INSTANCE this; + int is_delayed; + unsigned long datalen; + void *dataptr; +} Buffer_Send_Queue; + +typedef struct BUFFERQUEUE +{ + Buffer_Wait_Queue *waitqueue; + unsigned long waitqueuelength; + Buffer_Send_Queue *sendqueue; + unsigned long sendqueuelength; +} Buffer_Queue; + +typedef struct +{ + Buffer_Queue **buf; + unsigned long maxqueuelength; +} Buffer_Descr; + +/* descriptor for data */ +typedef struct +{ + void *ptr; + int length; +} Data_Descr; + +/* time format runtime delivers */ +typedef struct +{ + unsigned long secs; + unsigned long nanosecs; +} RtsTime; + +extern void __rtstime (RtsTime *t); +extern int __delay_this (Delay_Reason reason, RtsTime *t, char *file, int lineno); +extern void __continue_that (INSTANCE ins, int prio, char *file, int lineno); + #endif /* __rts_h_ */ |