[project @ 2002-10-31 14:10:40 by simonpj]
[ghc-hetmet.git] / ghc / includes / InfoMacros.h
index 80e9611..ecbd793 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: InfoMacros.h,v 1.14 2001/03/22 03:51:09 hwloidl Exp $
+ * $Id: InfoMacros.h,v 1.20 2002/09/25 20:43:34 wolfgang Exp $
  * 
  * (c) The GHC Team, 1998-1999
  *
 #define PROF_INFO(type_str, desc_str)
 #endif
 
-#ifdef USE_MINIINTERPRETER
-#define INIT_VECTOR {}
-#else
-#define INIT_VECTOR
-#endif
-
 /*
   On the GranSim/GUM specific parts of the InfoTables (GRAN/PAR):
 
@@ -86,8 +80,7 @@ INFO_TABLE_SRT(info,                          /* info-table label */  \
                 PROF_INFO(prof_type, prof_descr)                       \
                SRT_INFO(RBH,srt_,srt_off_,srt_len_),                   \
                 INCLUDE_RBH_INFO(info),                                        \
-                INIT_ENTRY(stg_RBH_##entry),                                   \
-                INIT_VECTOR                                             \
+                INIT_ENTRY(stg_RBH_##entry)                            \
        } ;                                                             \
         StgFunPtr stg_RBH_##entry (void) {                                  \
           FB_                                                           \
@@ -99,8 +92,7 @@ INFO_TABLE_SRT(info,                          /* info-table label */  \
                 PROF_INFO(prof_type, prof_descr)                       \
                SRT_INFO(type,srt_,srt_off_,srt_len_),                  \
                 INCLUDE_RBH_INFO(stg_RBH_##info),                              \
-                INIT_ENTRY(entry),                                      \
-                INIT_VECTOR                                             \
+                INIT_ENTRY(entry)                                       \
        }
 
 #else
@@ -118,8 +110,7 @@ INFO_TABLE_SRT(info,                                /* info-table label */  \
                layout : { payload : {ptrs,nptrs} },                    \
                 PROF_INFO(prof_type, prof_descr)                       \
                SRT_INFO(type,srt_,srt_off_,srt_len_),                  \
-                INIT_ENTRY(entry),                                      \
-                INIT_VECTOR                                             \
+                INIT_ENTRY(entry)                                       \
        }
 
 #endif
@@ -135,26 +126,24 @@ INFO_TABLE_SRT_BITMAP(info, entry, bitmap_, srt_, srt_off_, srt_len_,     \
         entry_class(stg_RBH_##entry);                                  \
         entry_class(entry);                                            \
        ED_RO_ StgInfoTable info;                                       \
-       info_class INFO_TBL_CONST StgInfoTable stg_RBH_##info = {               \
-               layout : { bitmap : (StgWord32)bitmap_ },               \
+       info_class INFO_TBL_CONST StgInfoTable stg_RBH_##info = {       \
+               layout : { bitmap : (StgWord)bitmap_ },                 \
                 PROF_INFO(prof_type, prof_descr)                       \
                SRT_INFO(RBH,srt_,srt_off_,srt_len_),                   \
                 INCLUDE_RBH_INFO(info),                                        \
-                INIT_ENTRY(stg_RBH_##entry),                           \
-                INIT_VECTOR                                            \
+                INIT_ENTRY(stg_RBH_##entry)                            \
        };                                                              \
-        StgFunPtr stg_RBH_##entry (void) {                                  \
+        StgFunPtr stg_RBH_##entry (void) {                              \
           FB_                                                           \
-            JMP_(stg_RBH_entry);                                            \
+            JMP_(stg_RBH_entry);                                        \
           FE_                                                           \
         } ;                                                             \
        info_class INFO_TBL_CONST StgInfoTable info = {                 \
-               layout : { bitmap : (StgWord32)bitmap_ },               \
+               layout : { bitmap : (StgWord)bitmap_ },                 \
                 PROF_INFO(prof_type, prof_descr)                       \
                SRT_INFO(type,srt_,srt_off_,srt_len_),                  \
-                INCLUDE_RBH_INFO(stg_RBH_##info),                              \
-                INIT_ENTRY(entry),                                     \
-                INIT_VECTOR                                            \
+                INCLUDE_RBH_INFO(stg_RBH_##info),                      \
+                INIT_ENTRY(entry)                                      \
        }
 
 #else
@@ -165,11 +154,10 @@ INFO_TABLE_SRT_BITMAP(info, entry, bitmap_, srt_, srt_off_, srt_len_,     \
                      prof_descr, prof_type)                            \
         entry_class(entry);                                            \
        info_class INFO_TBL_CONST StgInfoTable info = {                 \
-               layout : { bitmap : (StgWord32)bitmap_ },               \
+               layout : { bitmap : (StgWord)bitmap_ },                 \
                 PROF_INFO(prof_type, prof_descr)                       \
                SRT_INFO(type,srt_,srt_off_,srt_len_),                  \
-                INIT_ENTRY(entry),                                     \
-                INIT_VECTOR                                            \
+                INIT_ENTRY(entry)                                      \
        }
 #endif
 
@@ -188,8 +176,7 @@ INFO_TABLE(info, entry, ptrs, nptrs, type, info_class,              \
                 PROF_INFO(prof_type, prof_descr)               \
                STD_INFO(RBH),                                  \
                 INCLUDE_RBH_INFO(info),                                \
-                INIT_ENTRY(stg_RBH_##entry),                   \
-                INIT_VECTOR                                    \
+                INIT_ENTRY(stg_RBH_##entry)                    \
        } ;                                                     \
         StgFunPtr stg_RBH_##entry (void) {                          \
           FB_                                                   \
@@ -201,8 +188,7 @@ INFO_TABLE(info, entry, ptrs, nptrs, type, info_class,              \
                 PROF_INFO(prof_type, prof_descr)               \
                STD_INFO(type),                                 \
                 INCLUDE_RBH_INFO(stg_RBH_##info),                      \
-                INIT_ENTRY(entry),                             \
-                INIT_VECTOR                                    \
+                INIT_ENTRY(entry)                              \
        }
 
 #else
@@ -215,8 +201,7 @@ INFO_TABLE(info, entry, ptrs, nptrs, type, info_class,      \
                layout : { payload : {ptrs,nptrs} },    \
                 PROF_INFO(prof_type, prof_descr)       \
                STD_INFO(type),                         \
-                INIT_ENTRY(entry),                     \
-                INIT_VECTOR                            \
+                INIT_ENTRY(entry)                      \
        }
 
 #endif
@@ -236,8 +221,7 @@ INFO_TABLE_SELECTOR(info, entry, offset, info_class,                \
                 PROF_INFO(prof_type, prof_descr)               \
                STD_INFO(RBH),                                  \
                 INCLUDE_RBH_INFO(info),                                \
-                INIT_ENTRY(stg_RBH_##entry),                   \
-                INIT_VECTOR                                    \
+                INIT_ENTRY(stg_RBH_##entry)                    \
        };                                                      \
         StgFunPtr stg_RBH_##entry (void) {                          \
           FB_                                                   \
@@ -249,8 +233,7 @@ INFO_TABLE_SELECTOR(info, entry, offset, info_class,                \
                 PROF_INFO(prof_type, prof_descr)               \
                STD_INFO(THUNK_SELECTOR),                       \
                 INCLUDE_RBH_INFO(stg_RBH_##info),                      \
-                INIT_ENTRY(entry),                             \
-                INIT_VECTOR                                    \
+                INIT_ENTRY(entry)                              \
        }
 
 #else
@@ -263,8 +246,7 @@ INFO_TABLE_SELECTOR(info, entry, offset, info_class,        \
                layout : { selector_offset : offset },  \
                 PROF_INFO(prof_type, prof_descr)       \
                STD_INFO(THUNK_SELECTOR),               \
-                INIT_ENTRY(entry),                     \
-                INIT_VECTOR                            \
+                INIT_ENTRY(entry)                      \
        }
 
 #endif
@@ -279,8 +261,7 @@ INFO_TABLE_CONSTR(info, entry, ptrs, nptrs, tag_,type_,info_class,  \
                layout : { payload : {ptrs,nptrs} },                    \
                 PROF_INFO(prof_type, prof_descr)                       \
                 CONSTR_INFO(type_,tag_),                               \
-                INIT_ENTRY(entry),                                     \
-                INIT_VECTOR                                            \
+                INIT_ENTRY(entry)                                      \
        }
 
 #define constrTag(con) (get_itbl(con)->srt_len)
@@ -337,7 +318,7 @@ typedef struct {
        info_class INFO_TBL_CONST vec_info_2 info = {           \
                { alt_2, alt_1 },                               \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -349,7 +330,7 @@ typedef struct {
        info_class INFO_TBL_CONST vec_info_3 info = {           \
                { alt_3, alt_2, alt_1 },                        \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -361,7 +342,7 @@ typedef struct {
        info_class INFO_TBL_CONST vec_info_4 info = {           \
                { alt_4, alt_3, alt_2, alt_1 },                 \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -375,7 +356,7 @@ typedef struct {
                { alt_5, alt_4, alt_3, alt_2,                   \
                  alt_1 },                                      \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -389,7 +370,7 @@ typedef struct {
                { alt_6, alt_5, alt_4, alt_3,                   \
                  alt_2, alt_1 },                               \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -403,7 +384,7 @@ typedef struct {
                { alt_7, alt_6, alt_5, alt_4,                   \
                  alt_3, alt_2, alt_1 },                        \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -417,7 +398,7 @@ typedef struct {
                { alt_8, alt_7, alt_6, alt_5,                   \
                  alt_4, alt_3, alt_2, alt_1 },                 \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_)        \
                }                                               \
        }
@@ -470,9 +451,9 @@ typedef struct {
                   type, info_class,                            \
                   alt_1, alt_2)                                \
        info_class INFO_TBL_CONST vec_info_2 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                vec : { alt_1, alt_2 }                          \
        }
@@ -482,9 +463,9 @@ typedef struct {
                   alt_1, alt_2, alt_3                          \
                  )                                             \
        info_class INFO_TBL_CONST vec_info_3 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                 vec : { alt_1, alt_2, alt_3 }                  \
        }
@@ -494,9 +475,9 @@ typedef struct {
                   alt_1, alt_2, alt_3, alt_4                   \
                  )                                             \
        info_class INFO_TBL_CONST vec_info_4 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                 vec : { alt_1, alt_2, alt_3, alt_4 }           \
        }
@@ -507,9 +488,9 @@ typedef struct {
                   alt_5                                        \
                  )                                             \
        info_class INFO_TBL_CONST vec_info_5 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                 vec : { alt_1, alt_2, alt_3, alt_4,            \
                        alt_5 }                                 \
@@ -521,9 +502,9 @@ typedef struct {
                   alt_5, alt_6                                 \
                  )                                             \
        info_class INFO_TBL_CONST vec_info_6 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                 vec : { alt_1, alt_2, alt_3, alt_4,            \
                        alt_5, alt_6 }                          \
@@ -535,9 +516,9 @@ typedef struct {
                   alt_5, alt_6, alt_7                          \
                  )                                             \
        info_class INFO_TBL_CONST vec_info_7 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                 vec : { alt_1, alt_2, alt_3, alt_4,            \
                        alt_5, alt_6, alt_7 }                   \
@@ -549,9 +530,9 @@ typedef struct {
                   alt_5, alt_6, alt_7, alt_8                   \
                  )                                             \
        info_class INFO_TBL_CONST vec_info_8 info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                     INIT_ENTRY(NULL),                         \
+                     INIT_ENTRY(NULL)                          \
                },                                              \
                 vec : { alt_1, alt_2, alt_3, alt_4,            \
                        alt_5, alt_6, alt_7, alt_8 }            \
@@ -572,10 +553,9 @@ typedef vec_info_8 StgPolyInfoTable;
                           type, info_class, entry_class        \
                           )                                    \
   info_class INFO_TBL_CONST vec_info_8 nm##_info = {           \
-               i : { layout : { bitmap : (StgWord32)bitmap_ }, \
+               i : { layout : { bitmap : (StgWord)bitmap_ },   \
                      SRT_INFO(type,srt_,srt_off_,srt_len_),    \
-                      INIT_ENTRY(nm##_entry),                  \
-                     INIT_VECTOR                               \
+                      INIT_ENTRY(nm##_entry)                   \
                },                                              \
                vec : {                                         \
                        (F_) nm##_0_entry,                      \
@@ -606,7 +586,7 @@ typedef vec_info_8 StgPolyInfoTable;
                        (F_) nm##_0_entry                       \
                },                                              \
                i : {                                           \
-                  layout : { bitmap : (StgWord32)bitmap_ },    \
+                  layout : { bitmap : (StgWord)bitmap_ },      \
                   SRT_INFO(type,srt_,srt_off_,srt_len_),       \
                    INIT_ENTRY(nm##_entry)                      \
                }                                               \
@@ -617,8 +597,20 @@ typedef vec_info_8 StgPolyInfoTable;
 #define SRT(lbl) \
   static const StgSRT lbl = {
 
-#define BITMAP(lbl,size) \
-  static const StgLargeBitmap lbl = { size, {
+#define BITMAP(lbl,size,contents) \
+  static const StgLargeBitmap lbl = { \
+      (size*4+SIZEOF_VOID_P-1)/SIZEOF_VOID_P, { contents } };
+
+#if SIZEOF_VOID_P == 8
+#define BITMAP_SWITCH64(small, large)  small
+#define BITMAP64(first, second)                \
+  (((StgWord32)(first)) | ((StgWord)(StgWord32)(second) << 32))
+#else
+#define BITMAP_SWITCH64(small, large)  large
+#define BITMAP64(first, second)                first, second
+#endif
+#define BITMAP32(x)                    ((StgWord32)(x))
+#define COMMA                          ,
 
 /* DLL_SRT_ENTRY is used on the Win32 side when filling initialising
    an entry in an SRT table with a reference to a closure that's