Rename CMK_TLS_THREAD to the more descriptive CMK_HAS_TLS_VARIABLES
[charm.git] / src / QuickThreads / qt.c
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #include "copyright.h"
9 #include "qt.h"
10
11 #ifdef QT_VARGS_DEFAULT
12
13 /* If the stack grows down, `vargs' is a pointer to the lowest
14    address in the block of arguments.  If the stack grows up, it is a
15    pointer to the highest address in the block. */
16
17   qt_t *
18 qt_vargs (qt_t *sp, int nbytes, void *vargs,
19           void *pt, qt_startup_t *startup,
20           qt_vuserf_t *vuserf, qt_cleanup_t *cleanup)
21 {
22   int i;
23
24   sp = QT_VARGS_MD0 (sp, nbytes);
25 #ifdef QT_GROW_UP
26     for (i=nbytes/sizeof(qt_word_t); i>0; --i) {
27       QT_SPUT (QT_VARGS_ADJUST(sp), i, ((qt_word_t *)vargs)[-i]);
28     }
29 #else
30     for (i=nbytes/sizeof(qt_word_t); i>0; --i) {
31       QT_SPUT (QT_VARGS_ADJUST(sp), i-1, ((qt_word_t *)vargs)[i-1]);
32     }
33 #endif
34
35   QT_VARGS_MD1 (QT_VADJ(sp));
36   QT_SPUT (QT_VADJ(sp), QT_VARGT_INDEX, pt);
37   QT_SPUT (QT_VADJ(sp), QT_VSTARTUP_INDEX, startup);
38   QT_SPUT (QT_VADJ(sp), QT_VUSERF_INDEX, vuserf);
39   QT_SPUT (QT_VADJ(sp), QT_VCLEANUP_INDEX, cleanup);
40   return ((qt_t *)QT_VADJ(sp));
41 }
42 #endif /* def QT_VARGS_DEFAULT */
43
44 void qt_null (void)
45 {
46 }
47
48 void _qt_null (void)
49 {
50 }
51
52 void qt_error (void)
53 {
54   extern void abort(void);
55   abort();
56 }
57
58 void _qt_error (void)
59 {
60   extern void abort(void);
61   abort();
62 }