/* ----------------------------------------------------------------------------
- * $Id: InfoMacros.h,v 1.12 2000/05/26 10:14:33 sewardj Exp $
+ * $Id: InfoMacros.h,v 1.19 2002/06/03 12:56:41 matthewc 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):
type, /* closure type */ \
info_class, entry_class, /* C storage classes */ \
prof_descr, prof_type) /* profiling info */ \
- entry_class(RBH_##entry); \
+ entry_class(stg_RBH_##entry); \
entry_class(entry); \
ED_RO_ StgInfoTable info; \
- info_class INFO_TBL_CONST StgInfoTable RBH_##info = { \
+ info_class INFO_TBL_CONST StgInfoTable stg_RBH_##info = { \
layout : { payload : {ptrs,nptrs} }, \
PROF_INFO(prof_type, prof_descr) \
SRT_INFO(RBH,srt_,srt_off_,srt_len_), \
INCLUDE_RBH_INFO(info), \
- INIT_ENTRY(RBH_##entry), \
- INIT_VECTOR \
+ INIT_ENTRY(stg_RBH_##entry), \
} ; \
- StgFunPtr RBH_##entry (void) { JMP_(RBH_entry); } ; \
+ StgFunPtr stg_RBH_##entry (void) { \
+ FB_ \
+ JMP_(stg_RBH_entry); \
+ FE_ \
+ } ; \
info_class INFO_TBL_CONST StgInfoTable info = { \
layout : { payload : {ptrs,nptrs} }, \
PROF_INFO(prof_type, prof_descr) \
SRT_INFO(type,srt_,srt_off_,srt_len_), \
- INCLUDE_RBH_INFO(RBH_##info), \
+ INCLUDE_RBH_INFO(stg_RBH_##info), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#else
PROF_INFO(prof_type, prof_descr) \
SRT_INFO(type,srt_,srt_off_,srt_len_), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#endif
INFO_TABLE_SRT_BITMAP(info, entry, bitmap_, srt_, srt_off_, srt_len_, \
type, info_class, entry_class, \
prof_descr, prof_type) \
- entry_class(RBH_##entry); \
+ entry_class(stg_RBH_##entry); \
entry_class(entry); \
ED_RO_ StgInfoTable info; \
- info_class INFO_TBL_CONST StgInfoTable 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(RBH_##entry), \
- INIT_VECTOR \
+ INIT_ENTRY(stg_RBH_##entry), \
}; \
- StgFunPtr RBH_##entry (void) { JMP_(RBH_entry); } ; \
+ StgFunPtr stg_RBH_##entry (void) { \
+ FB_ \
+ 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(RBH_##info), \
+ INCLUDE_RBH_INFO(stg_RBH_##info), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
+
#else
#define \
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 \
}
#endif
#define \
INFO_TABLE(info, entry, ptrs, nptrs, type, info_class, \
entry_class, prof_descr, prof_type) \
- entry_class(RBH_##entry); \
+ entry_class(stg_RBH_##entry); \
entry_class(entry); \
- ED_RO_ StgInfoTable info; \
- info_class INFO_TBL_CONST StgInfoTable RBH_##info = { \
+ ED_ StgInfoTable info; \
+ info_class INFO_TBL_CONST StgInfoTable stg_RBH_##info = { \
layout : { payload : {ptrs,nptrs} }, \
PROF_INFO(prof_type, prof_descr) \
STD_INFO(RBH), \
- INCLUDE_RBH_INFO(info), \
- INIT_ENTRY(RBH_##entry), \
- INIT_VECTOR \
- }; \
- StgFunPtr RBH_##entry (void) { JMP_(RBH_entry); } ; \
- info_class INFO_TBL_CONST StgInfoTable info = { \
+ INCLUDE_RBH_INFO(info), \
+ INIT_ENTRY(stg_RBH_##entry), \
+ } ; \
+ StgFunPtr stg_RBH_##entry (void) { \
+ FB_ \
+ JMP_(stg_RBH_entry); \
+ FE_ \
+ } ; \
+ info_class INFO_TBL_CONST StgInfoTable info = { \
layout : { payload : {ptrs,nptrs} }, \
PROF_INFO(prof_type, prof_descr) \
STD_INFO(type), \
- INCLUDE_RBH_INFO(RBH_##info), \
+ INCLUDE_RBH_INFO(stg_RBH_##info), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#else
PROF_INFO(prof_type, prof_descr) \
STD_INFO(type), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#endif
#define \
INFO_TABLE_SELECTOR(info, entry, offset, info_class, \
entry_class, prof_descr, prof_type) \
- entry_class(RBH_##entry); \
+ entry_class(stg_RBH_##entry); \
entry_class(entry); \
ED_RO_ StgInfoTable info; \
- info_class INFO_TBL_CONST StgInfoTable RBH_##info = { \
+ info_class INFO_TBL_CONST StgInfoTable stg_RBH_##info = { \
layout : { selector_offset : offset }, \
PROF_INFO(prof_type, prof_descr) \
STD_INFO(RBH), \
INCLUDE_RBH_INFO(info), \
- INIT_ENTRY(RBH_##entry), \
- INIT_VECTOR \
+ INIT_ENTRY(stg_RBH_##entry), \
}; \
- StgFunPtr RBH_##entry (void) { JMP_(RBH_entry); } ; \
+ StgFunPtr stg_RBH_##entry (void) { \
+ FB_ \
+ JMP_(stg_RBH_entry); \
+ FE_ \
+ } ; \
info_class INFO_TBL_CONST StgInfoTable info = { \
layout : { selector_offset : offset }, \
PROF_INFO(prof_type, prof_descr) \
STD_INFO(THUNK_SELECTOR), \
- INCLUDE_RBH_INFO(RBH_##info), \
+ INCLUDE_RBH_INFO(stg_RBH_##info), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#else
PROF_INFO(prof_type, prof_descr) \
STD_INFO(THUNK_SELECTOR), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#endif
PROF_INFO(prof_type, prof_descr) \
CONSTR_INFO(type_,tag_), \
INIT_ENTRY(entry), \
- INIT_VECTOR \
}
#define constrTag(con) (get_itbl(con)->srt_len)
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_) \
} \
}
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_) \
} \
}
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_) \
} \
}
{ 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_) \
} \
}
{ 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_) \
} \
}
{ 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_) \
} \
}
{ 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_) \
} \
}
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), \
}, \
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), \
}, \
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), \
}, \
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), \
}, \
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), \
}, \
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), \
}, \
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), \
}, \
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 \
}, \
vec : { \
(F_) nm##_0_entry, \
(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) \
} \
#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
to distinguish these kinds of references.
(ToDo: fill in a more precise href.)
*/
-#ifdef HAVE_WIN32_DLL_SUPPORT /* mingw DietHEP doesn't seem to care either way */
+#ifdef ENABLE_WIN32_DLL_SUPPORT /* mingw DietHEP doesn't seem to care either way */
#define DLL_SRT_ENTRY(x) ((StgClosure*)(((char*)&DLL_IMPORT_DATA_VAR(x)) + 1))
#else
#define DLL_SRT_ENTRY(x) no-can-do