X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Fincludes%2FInfoMacros.h;h=0c1c5935a187d1b429cbcfd713ae4e539001d9aa;hb=61ee260aac98028cb46a4be1710194702111ac5b;hp=0295cfb176d341cd716c6887ebcb13c46eb1876d;hpb=0a92ced2e7f841bcbd22188d2b2ac597b504b46a;p=ghc-hetmet.git diff --git a/ghc/includes/InfoMacros.h b/ghc/includes/InfoMacros.h index 0295cfb..0c1c593 100644 --- a/ghc/includes/InfoMacros.h +++ b/ghc/includes/InfoMacros.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $Id: InfoMacros.h,v 1.13 2000/08/17 15:19:17 rrt Exp $ + * $Id: InfoMacros.h,v 1.17 2001/09/17 22:46:59 ken Exp $ * * (c) The GHC Team, 1998-1999 * @@ -78,23 +78,27 @@ INFO_TABLE_SRT(info, /* info-table label */ \ 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_ENTRY(stg_RBH_##entry), \ INIT_VECTOR \ } ; \ - 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 \ } @@ -128,26 +132,31 @@ INFO_TABLE_SRT(info, /* info-table label */ \ 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_ENTRY(stg_RBH_##entry), \ INIT_VECTOR \ }; \ - 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 \ @@ -156,7 +165,7 @@ 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), \ @@ -171,23 +180,27 @@ INFO_TABLE_SRT_BITMAP(info, entry, bitmap_, srt_, srt_off_, srt_len_, \ #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), \ + INCLUDE_RBH_INFO(info), \ + INIT_ENTRY(stg_RBH_##entry), \ INIT_VECTOR \ - }; \ - StgFunPtr RBH_##entry (void) { JMP_(RBH_entry); } ; \ - info_class INFO_TBL_CONST StgInfoTable info = { \ + } ; \ + 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 \ } @@ -215,23 +228,27 @@ INFO_TABLE(info, entry, ptrs, nptrs, type, info_class, \ #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_ENTRY(stg_RBH_##entry), \ INIT_VECTOR \ }; \ - 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 \ } @@ -320,7 +337,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_) \ } \ } @@ -332,7 +349,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_) \ } \ } @@ -344,7 +361,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_) \ } \ } @@ -358,7 +375,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_) \ } \ } @@ -372,7 +389,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_) \ } \ } @@ -386,7 +403,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_) \ } \ } @@ -400,7 +417,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_) \ } \ } @@ -453,7 +470,7 @@ 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), \ }, \ @@ -465,7 +482,7 @@ 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), \ }, \ @@ -477,7 +494,7 @@ 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), \ }, \ @@ -490,7 +507,7 @@ 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), \ }, \ @@ -504,7 +521,7 @@ 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), \ }, \ @@ -518,7 +535,7 @@ 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), \ }, \ @@ -532,7 +549,7 @@ 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), \ }, \ @@ -555,7 +572,7 @@ 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 \ @@ -589,7 +606,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) \ } \ @@ -600,8 +617,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