[project @ 1998-11-26 09:17:22 by sof]
[ghc-hetmet.git] / ghc / includes / mkNativeHdr.lc
1 %
2 % (c) The AQUA Project, Glasgow University, 1994
3 %
4 \section[mkNativeGen-header]{Generate a header for the native code generator}
5
6 \begin{code}
7
8 #define MAIN_REG_MAP
9 #include "stgdefs.h"
10
11 #define OFFSET(table, x) ((StgUnion *) &(x) - (StgUnion *) (&table))
12
13
14 #define OFFSET_Dbl1 OFFSET(MainRegTable, MAIN_Dbl1)
15 #define OFFSET_Dbl2 OFFSET(MainRegTable, MAIN_Dbl2)
16 #define OFFSET_Lng1 OFFSET(MainRegTable, MAIN_Lng1)
17 #define OFFSET_Lng2 OFFSET(MainRegTable, MAIN_Lng2)
18 #define OFFSET_Flt1 OFFSET(MainRegTable, MAIN_Flt1)
19 #define OFFSET_Flt2 OFFSET(MainRegTable, MAIN_Flt2)
20 #define OFFSET_Flt3 OFFSET(MainRegTable, MAIN_Flt3)
21 #define OFFSET_Flt4 OFFSET(MainRegTable, MAIN_Flt4)
22 #define OFFSET_R1 OFFSET(MainRegTable, MAIN_R1)
23 #define OFFSET_R2 OFFSET(MainRegTable, MAIN_R2)
24 #define OFFSET_R3 OFFSET(MainRegTable, MAIN_R3)
25 #define OFFSET_R4 OFFSET(MainRegTable, MAIN_R4)
26 #define OFFSET_R5 OFFSET(MainRegTable, MAIN_R5)
27 #define OFFSET_R6 OFFSET(MainRegTable, MAIN_R6)
28 #define OFFSET_R7 OFFSET(MainRegTable, MAIN_R7)
29 #define OFFSET_R8 OFFSET(MainRegTable, MAIN_R8)
30 #define OFFSET_SpA OFFSET(MainRegTable, MAIN_SpA)
31 #define OFFSET_SuA OFFSET(MainRegTable, MAIN_SuA)
32 #define OFFSET_SpB OFFSET(MainRegTable, MAIN_SpB)
33 #define OFFSET_SuB OFFSET(MainRegTable, MAIN_SuB)
34 #define OFFSET_Hp OFFSET(MainRegTable, MAIN_Hp)
35 #define OFFSET_HpLim OFFSET(MainRegTable, MAIN_HpLim)
36 #define OFFSET_Tag OFFSET(MainRegTable, MAIN_Tag)
37 #define OFFSET_Ret OFFSET(MainRegTable, MAIN_Ret)
38 #define OFFSET_StkO OFFSET(MainRegTable, MAIN_StkO)
39 #define OFFSET_Liveness OFFSET(MainRegTable, MAIN_Liveness)
40
41 #define SM_HP OFFSET(StorageMgrInfo, StorageMgrInfo.hp)
42 #define SM_HPLIM OFFSET(StorageMgrInfo, StorageMgrInfo.hplim)
43 #define SM_ROOTNO OFFSET(StorageMgrInfo, StorageMgrInfo.rootno)
44 #define SM_ROOTS OFFSET(StorageMgrInfo, StorageMgrInfo.roots)
45 #define SM_CAFLIST OFFSET(StorageMgrInfo, StorageMgrInfo.CAFlist)
46 #define SM_OLDMUTABLES OFFSET(StorageMgrInfo, StorageMgrInfo.OldMutables)
47 #define SM_OLDLIM OFFSET(StorageMgrInfo, StorageMgrInfo.OldLim)
48 #define SM_FOREIGNOBJLIST OFFSET(StorageMgrInfo, StorageMgrInfo.ForeignObjList)
49 #define SM_OLDFOREIGNOBJLIST OFFSET(StorageMgrInfo, StorageMgrInfo.OldForeignObjList)
50 #define SM_STABLEPOINTERTABLE OFFSET(StorageMgrInfo, StorageMgrInfo.StablePointerTable)
51
52 STGRegisterTable MainRegTable;
53 smInfo StorageMgrInfo;
54
55 int
56 main()
57 {
58     printf("-- This file is created automatically.  Do not edit by hand.\n\n");
59
60     printf("\n-- Base table offsets for the Native Code Generator\n");
61
62     printf("#define OFFSET_Dbl1 %d\n", OFFSET_Dbl1);
63     printf("#define OFFSET_Dbl2 %d\n", OFFSET_Dbl2);
64 #if HAVE_LONG_LONG && SIZEOF_LONG < 8
65     printf("#define OFFSET_Lng1 %d\n", OFFSET_Lng1);
66     printf("#define OFFSET_Lng2 %d\n", OFFSET_Lng2);
67 #endif
68     printf("#define OFFSET_Flt1 %d\n", OFFSET_Flt1);
69     printf("#define OFFSET_Flt2 %d\n", OFFSET_Flt2);
70     printf("#define OFFSET_Flt3 %d\n", OFFSET_Flt3);
71     printf("#define OFFSET_Flt4 %d\n", OFFSET_Flt4);
72     printf("#define OFFSET_R1 %d\n", OFFSET_R1);
73     printf("#define OFFSET_R2 %d\n", OFFSET_R2);
74     printf("#define OFFSET_R3 %d\n", OFFSET_R3);
75     printf("#define OFFSET_R4 %d\n", OFFSET_R4);
76     printf("#define OFFSET_R5 %d\n", OFFSET_R5);
77     printf("#define OFFSET_R6 %d\n", OFFSET_R6);
78     printf("#define OFFSET_R7 %d\n", OFFSET_R7);
79     printf("#define OFFSET_R8 %d\n", OFFSET_R8);
80     printf("#define OFFSET_SpA %d\n", OFFSET_SpA);
81     printf("#define OFFSET_SuA %d\n", OFFSET_SuA);
82     printf("#define OFFSET_SpB %d\n", OFFSET_SpB);
83     printf("#define OFFSET_SuB %d\n", OFFSET_SuB);
84     printf("#define OFFSET_Hp %d\n", OFFSET_Hp);
85     printf("#define OFFSET_HpLim %d\n", OFFSET_HpLim);
86     printf("#define OFFSET_Tag %d\n", OFFSET_Tag);
87     printf("#define OFFSET_Ret %d\n", OFFSET_Ret);
88 #ifdef CONCURRENT
89     printf("#define OFFSET_StkO %d\n", OFFSET_StkO);
90     printf("#define OFFSET_Liveness %d\n", OFFSET_Liveness);
91 #else
92     printf("#define OFFSET_StkO panic \"OFFSET_StkO\"\n");
93     printf("#define OFFSET_Liveness panic \"OFFSET_Liveness\"\n");
94 #endif
95
96     printf("\n-- Storage Manager offsets for the Native Code Generator\n");
97
98     printf("#define SM_HP %d\n", SM_HP);
99     printf("#define SM_HPLIM %d\n", SM_HPLIM);
100     printf("#define SM_ROOTNO %d\n", SM_ROOTNO);
101     printf("#define SM_ROOTS %d\n", SM_ROOTS);
102     printf("#define SM_CAFLIST %d\n", SM_CAFLIST);
103 #if defined(GCap) || defined(GCgn)
104     printf("#define SM_OLDMUTABLES %d\n", SM_OLDMUTABLES);
105     printf("#define SM_OLDLIM %d\n", SM_OLDLIM);
106 #endif
107 #ifndef PAR
108     printf("#define SM_FOREIGNOBJLIST %d\n", SM_FOREIGNOBJLIST);
109 #if defined(GCap) || defined(GCgn)
110     printf("#define SM_OLDFOREIGNOBJLIST %d\n", SM_OLDFOREIGNOBJLIST);
111 #endif
112     printf("#define SM_STABLEPOINTERTABLE %d\n", SM_STABLEPOINTERTABLE);
113 #endif
114
115     printf("\n-- FILE size for the Native Code Generator\n");
116
117     printf("#define FILE_SIZE %d\n", sizeof(*stdin));
118
119     exit(0);
120 }
121
122 \end{code}