further fix for floating point primitives
[ghc-hetmet.git] / ghc / includes / mkDerivedConstants.c
index 33b0398..27d4fa9 100644 (file)
@@ -22,6 +22,8 @@
 #include "Rts.h"
 #include "RtsFlags.h"
 #include "Storage.h"
+#include "OSThreads.h"
+#include "Capability.h"
 
 #include <stdio.h>
 
     def_size(#s_type "_NoHdr", sizeof(s_type) - sizeof(StgHeader)); \
     def_closure_size(#s_type, sizeof(s_type) - sizeof(StgHeader));
 
+#define thunk_size(s_type) \
+    def_size(#s_type "_NoThunkHdr", sizeof(s_type) - sizeof(StgThunkHeader)); \
+    closure_size(s_type)
+
 /* An access macro for use in C-- sources. */
 #define closure_field_macro(str) \
     printf("#define " str "(__ptr__)  REP_" str "[__ptr__+SIZEOF_StgHeader+OFFSET_" str "]\n");
     def_offset(str, OFFSET(s_type,field) - sizeof(StgHeader));
 
 #define closure_field_offset(s_type,field) \
-    closure_field_offset_(str(s_type,field),s_type,field);
+    closure_field_offset_(str(s_type,field),s_type,field)
 
 #define closure_payload_macro(str) \
     printf("#define " str "(__ptr__,__ix__)  W_[__ptr__+SIZEOF_StgHeader+OFFSET_" str " + WDS(__ix__)]\n");
     field_type_(str, s_type, field); \
     closure_field_macro(str)
 
-/*
- * Byte offset and MachRep for a TSO field, minus the header and
- * variable prof bit.
- */
-#define tso_offset(s_type, field) \
+/* Byte offset for a TSO field, minus the header and variable prof bit. */
+#define tso_payload_offset(s_type, field) \
     def_offset(str(s_type,field), OFFSET(s_type,field) - sizeof(StgHeader) - sizeof(StgTSOProfInfo));
 
-#define tso_field_macro(str) \
-    printf("#define " str "(__ptr__)  REP_" str "[__ptr__+SIZEOF_StgHeader+SIZEOF_OPT_StgTSOProfInfo+SIZEOF_OPT_StgTSOParInfo+SIZEOF_OPT_StgTSOGranInfo+SIZEOF_OPT_StgTSODistInfo+OFFSET_" str "]\n");
+/* Full byte offset for a TSO field, for use from Cmm */
+#define tso_field_offset_macro(str) \
+    printf("#define TSO_OFFSET_" str " (SIZEOF_StgHeader+SIZEOF_OPT_StgTSOProfInfo+SIZEOF_OPT_StgTSOParInfo+SIZEOF_OPT_StgTSOGranInfo+SIZEOF_OPT_StgTSODistInfo+OFFSET_" str ")\n");
+
+#define tso_field_offset(s_type, field) \
+    tso_payload_offset(s_type, field);         \
+    tso_field_offset_macro(str(s_type,field));
 
+#define tso_field_macro(str) \
+    printf("#define " str "(__ptr__)  REP_" str "[__ptr__+TSO_OFFSET_" str "]\n")
 #define tso_field(s_type, field)               \
-    tso_offset(s_type, field);                 \
     field_type(s_type, field);                 \
+    tso_field_offset(s_type,field);            \
     tso_field_macro(str(s_type,field))
-
+  
 #define opt_struct_size(s_type, option)                                        \
     printf("#ifdef " #option "\n");                                    \
     printf("#define SIZEOF_OPT_" #s_type " SIZEOF_" #s_type "\n");     \
@@ -204,6 +214,14 @@ main(int argc, char *argv[])
     field_offset(StgRegTable, rCurrentTSO);
     field_offset(StgRegTable, rCurrentNursery);
     field_offset(StgRegTable, rHpAlloc);
+    struct_field(StgRegTable, rRet);
+
+    // Needed for SMP builds
+    field_offset(StgRegTable, rmp_tmp_w);
+    field_offset(StgRegTable, rmp_tmp1);
+    field_offset(StgRegTable, rmp_tmp2);
+    field_offset(StgRegTable, rmp_result1);
+    field_offset(StgRegTable, rmp_result2);
 
     def_offset("stgGCEnter1", FUN_OFFSET(stgGCEnter1));
     def_offset("stgGCFun", FUN_OFFSET(stgGCFun));
@@ -232,6 +250,8 @@ main(int argc, char *argv[])
     struct_field_("StgHeader_ccs",  StgHeader, prof.ccs);
     struct_field_("StgHeader_ldvw", StgHeader, prof.hp.ldvw);
 
+    struct_size(StgSMPThunkHeader);
+
     closure_payload(StgClosure,payload);
 
     struct_field(StgEntCounter, allocs);
@@ -260,7 +280,7 @@ main(int argc, char *argv[])
     closure_field(StgTSO, trec);
     closure_field_("StgTSO_CCCS", StgTSO, prof.CCCS);
     tso_field(StgTSO, sp);
-    tso_offset(StgTSO, stack);
+    tso_field_offset(StgTSO, stack);
     tso_field(StgTSO, stack_size);
 
     struct_size(StgTSOProfInfo);
@@ -284,12 +304,12 @@ main(int argc, char *argv[])
     closure_field(StgPAP, arity);
     closure_payload(StgPAP, payload);
 
-    closure_size(StgAP);
+    thunk_size(StgAP);
     closure_field(StgAP, n_args);
     closure_field(StgAP, fun);
     closure_payload(StgAP, payload);
 
-    closure_size(StgAP_STACK);
+    thunk_size(StgAP_STACK);
     closure_field(StgAP_STACK, size);
     closure_field(StgAP_STACK, fun);
     closure_payload(StgAP_STACK, payload);
@@ -300,7 +320,6 @@ main(int argc, char *argv[])
     closure_field(StgMutVar, var);
 
     closure_size(StgAtomicallyFrame);
-    closure_field(StgAtomicallyFrame, waiting);
     closure_field(StgAtomicallyFrame, code);
 
     closure_size(StgCatchSTMFrame);
@@ -312,9 +331,6 @@ main(int argc, char *argv[])
     closure_field(StgCatchRetryFrame, alt_code);
     closure_field(StgCatchRetryFrame, first_code_trec);
 
-    closure_size(StgForeignObj);
-    closure_field(StgForeignObj,data);
-
     closure_size(StgWeak);
     closure_field(StgWeak,link);
     closure_field(StgWeak,key);
@@ -329,10 +345,6 @@ main(int argc, char *argv[])
     closure_field(StgMVar,tail);
     closure_field(StgMVar,value);
 
-    closure_size(StgTVar);
-    closure_field(StgTVar,current_value);
-    closure_field(StgTVar,first_wait_queue_entry);
-
     closure_size(StgBCO);
     closure_field(StgBCO, instrs);
     closure_field(StgBCO, literals);
@@ -360,7 +372,7 @@ main(int argc, char *argv[])
     struct_field(StgFunInfoExtraFwd, slow_apply);
     struct_field(StgFunInfoExtraFwd, fun_type);
     struct_field(StgFunInfoExtraFwd, arity);
-    struct_field(StgFunInfoExtraFwd, b.bitmap);
+    struct_field_("StgFunInfoExtraFwd_bitmap", StgFunInfoExtraFwd, b.bitmap);
 
     struct_size(StgFunInfoExtraRev);
     struct_field(StgFunInfoExtraRev, slow_apply_offset);