summaryrefslogtreecommitdiff
path: root/ghc/includes/mkNativeHdr.lc
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/includes/mkNativeHdr.lc')
-rw-r--r--ghc/includes/mkNativeHdr.lc117
1 files changed, 117 insertions, 0 deletions
diff --git a/ghc/includes/mkNativeHdr.lc b/ghc/includes/mkNativeHdr.lc
new file mode 100644
index 0000000000..c4f51c75a8
--- /dev/null
+++ b/ghc/includes/mkNativeHdr.lc
@@ -0,0 +1,117 @@
+%
+% (c) The AQUA Project, Glasgow University, 1994
+%
+\section[mkNativeGen-header]{Generate a header for the native code generator}
+
+\begin{code}
+
+#define MAIN_REG_MAP
+#include "stgdefs.h"
+
+#define OFFSET(table, x) ((StgUnion *) &(x) - (StgUnion *) (&table))
+
+#define OFFSET_Dbl1 OFFSET(MainRegTable, RTBL_Dbl1)
+#define OFFSET_Dbl2 OFFSET(MainRegTable, RTBL_Dbl2)
+#define OFFSET_Flt1 OFFSET(MainRegTable, RTBL_Flt1)
+#define OFFSET_Flt2 OFFSET(MainRegTable, RTBL_Flt2)
+#define OFFSET_Flt3 OFFSET(MainRegTable, RTBL_Flt3)
+#define OFFSET_Flt4 OFFSET(MainRegTable, RTBL_Flt4)
+#define OFFSET_R1 OFFSET(MainRegTable, RTBL_R1)
+#define OFFSET_R2 OFFSET(MainRegTable, RTBL_R2)
+#define OFFSET_R3 OFFSET(MainRegTable, RTBL_R3)
+#define OFFSET_R4 OFFSET(MainRegTable, RTBL_R4)
+#define OFFSET_R5 OFFSET(MainRegTable, RTBL_R5)
+#define OFFSET_R6 OFFSET(MainRegTable, RTBL_R6)
+#define OFFSET_R7 OFFSET(MainRegTable, RTBL_R7)
+#define OFFSET_R8 OFFSET(MainRegTable, RTBL_R8)
+#define OFFSET_SpA OFFSET(MainRegTable, RTBL_SpA)
+#define OFFSET_SuA OFFSET(MainRegTable, RTBL_SuA)
+#define OFFSET_SpB OFFSET(MainRegTable, RTBL_SpB)
+#define OFFSET_SuB OFFSET(MainRegTable, RTBL_SuB)
+#define OFFSET_Hp OFFSET(MainRegTable, RTBL_Hp)
+#define OFFSET_HpLim OFFSET(MainRegTable, RTBL_HpLim)
+#define OFFSET_Tag OFFSET(MainRegTable, RTBL_Tag)
+#define OFFSET_Ret OFFSET(MainRegTable, RTBL_Ret)
+#define OFFSET_Activity OFFSET(MainRegTable, RTBL_Activity)
+#define OFFSET_StkO OFFSET(MainRegTable, RTBL_StkO)
+#define OFFSET_Liveness OFFSET(MainRegTable, RTBL_Liveness)
+
+#define SM_HP OFFSET(StorageMgrInfo, StorageMgrInfo.hp)
+#define SM_HPLIM OFFSET(StorageMgrInfo, StorageMgrInfo.hplim)
+#define SM_ROOTNO OFFSET(StorageMgrInfo, StorageMgrInfo.rootno)
+#define SM_ROOTS OFFSET(StorageMgrInfo, StorageMgrInfo.roots)
+#define SM_CAFLIST OFFSET(StorageMgrInfo, StorageMgrInfo.CAFlist)
+#define SM_OLDMUTABLES OFFSET(StorageMgrInfo, StorageMgrInfo.OldMutables)
+#define SM_OLDLIM OFFSET(StorageMgrInfo, StorageMgrInfo.OldLim)
+#define SM_MALLOCPTRLIST OFFSET(StorageMgrInfo, StorageMgrInfo.MallocPtrList)
+#define SM_OLDMALLOCPTRLIST OFFSET(StorageMgrInfo, StorageMgrInfo.OldMallocPtrList)
+#define SM_STABLEPOINTERTABLE OFFSET(StorageMgrInfo, StorageMgrInfo.StablePointerTable)
+
+STGRegisterTable MainRegTable;
+smInfo StorageMgrInfo;
+
+int
+main()
+{
+ printf("-- This file is created automatically. Do not edit by hand.\n\n");
+
+ printf("\n-- Base table offsets for the Native Code Generator\n");
+
+ printf("#define OFFSET_Dbl1 %d\n", OFFSET_Dbl1);
+ printf("#define OFFSET_Dbl2 %d\n", OFFSET_Dbl2);
+ printf("#define OFFSET_Flt1 %d\n", OFFSET_Flt1);
+ printf("#define OFFSET_Flt2 %d\n", OFFSET_Flt2);
+ printf("#define OFFSET_Flt3 %d\n", OFFSET_Flt3);
+ printf("#define OFFSET_Flt4 %d\n", OFFSET_Flt4);
+ printf("#define OFFSET_R1 %d\n", OFFSET_R1);
+ printf("#define OFFSET_R2 %d\n", OFFSET_R2);
+ printf("#define OFFSET_R3 %d\n", OFFSET_R3);
+ printf("#define OFFSET_R4 %d\n", OFFSET_R4);
+ printf("#define OFFSET_R5 %d\n", OFFSET_R5);
+ printf("#define OFFSET_R6 %d\n", OFFSET_R6);
+ printf("#define OFFSET_R7 %d\n", OFFSET_R7);
+ printf("#define OFFSET_R8 %d\n", OFFSET_R8);
+ printf("#define OFFSET_SpA %d\n", OFFSET_SpA);
+ printf("#define OFFSET_SuA %d\n", OFFSET_SuA);
+ printf("#define OFFSET_SpB %d\n", OFFSET_SpB);
+ printf("#define OFFSET_SuB %d\n", OFFSET_SuB);
+ printf("#define OFFSET_Hp %d\n", OFFSET_Hp);
+ printf("#define OFFSET_HpLim %d\n", OFFSET_HpLim);
+ printf("#define OFFSET_Tag %d\n", OFFSET_Tag);
+ printf("#define OFFSET_Ret %d\n", OFFSET_Ret);
+ printf("#define OFFSET_Activity %d\n", OFFSET_Activity);
+#ifdef CONCURRENT
+ printf("#define OFFSET_StkO %d\n", OFFSET_StkO);
+ printf("#define OFFSET_Liveness %d\n", OFFSET_Liveness);
+#else
+ printf("#define OFFSET_StkO panic \"OFFSET_StkO\"\n");
+ printf("#define OFFSET_Liveness panic \"OFFSET_Liveness\"\n");
+#endif
+
+ printf("\n-- Storage Manager offsets for the Native Code Generator\n");
+
+ printf("#define SM_HP %d\n", SM_HP);
+ printf("#define SM_HPLIM %d\n", SM_HPLIM);
+ printf("#define SM_ROOTNO %d\n", SM_ROOTNO);
+ printf("#define SM_ROOTS %d\n", SM_ROOTS);
+ printf("#define SM_CAFLIST %d\n", SM_CAFLIST);
+#if defined(GCap) || defined(GCgn)
+ printf("#define SM_OLDMUTABLES %d\n", SM_OLDMUTABLES);
+ printf("#define SM_OLDLIM %d\n", SM_OLDLIM);
+#endif
+#ifndef PAR
+ printf("#define SM_MALLOCPTRLIST %d\n", SM_MALLOCPTRLIST);
+#if defined(GCap) || defined(GCgn)
+ printf("#define SM_OLDMALLOCPTRLIST %d\n", SM_OLDMALLOCPTRLIST);
+#endif
+ printf("#define SM_STABLEPOINTERTABLE %d\n", SM_STABLEPOINTERTABLE);
+#endif
+
+ printf("\n-- FILE size for the Native Code Generator\n");
+
+ printf("#define FILE_SIZE %d\n", sizeof(*stdin));
+
+ exit(0);
+}
+
+\end{code}