[project @ 2002-07-21 11:46:34 by panne]
[ghc-hetmet.git] / ghc / includes / mkNativeHdr.c
1 /* --------------------------------------------------------------------------
2  * $Id: mkNativeHdr.c,v 1.10 2002/07/21 11:46:34 panne Exp $
3  *
4  * (c) The GHC Team, 1992-1998
5  *
6  * Generate a header for the native code generator
7  *
8  * ------------------------------------------------------------------------*/
9
10 #include "Stg.h"
11
12 #include <stdio.h>
13
14 #define OFFSET(table, x) ((StgUnion *) &(x) - (StgUnion *) (&table))
15
16 #define OFFSET_R1    OFFSET(RegTable, RegTable.rR1)
17 #define OFFSET_R2    OFFSET(RegTable, RegTable.rR2)
18 #define OFFSET_R3    OFFSET(RegTable, RegTable.rR3)
19 #define OFFSET_R4    OFFSET(RegTable, RegTable.rR4)
20 #define OFFSET_R5    OFFSET(RegTable, RegTable.rR5)
21 #define OFFSET_R6    OFFSET(RegTable, RegTable.rR6)
22 #define OFFSET_R7    OFFSET(RegTable, RegTable.rR7)
23 #define OFFSET_R8    OFFSET(RegTable, RegTable.rR8)
24 #define OFFSET_R9    OFFSET(RegTable, RegTable.rR9)
25 #define OFFSET_R10   OFFSET(RegTable, RegTable.rR10)
26 #define OFFSET_F1    OFFSET(RegTable, RegTable.rF1)
27 #define OFFSET_F2    OFFSET(RegTable, RegTable.rF2)
28 #define OFFSET_F3    OFFSET(RegTable, RegTable.rF3)
29 #define OFFSET_F4    OFFSET(RegTable, RegTable.rF4)
30 #define OFFSET_D1    OFFSET(RegTable, RegTable.rD1)
31 #define OFFSET_D2    OFFSET(RegTable, RegTable.rD2)
32 #define OFFSET_L1    OFFSET(RegTable, RegTable.rL1)
33 #define OFFSET_Sp    OFFSET(RegTable, RegTable.rSp)
34 #define OFFSET_Su    OFFSET(RegTable, RegTable.rSu)
35 #define OFFSET_SpLim OFFSET(RegTable, RegTable.rSpLim)
36 #define OFFSET_Hp    OFFSET(RegTable, RegTable.rHp)
37 #define OFFSET_HpLim OFFSET(RegTable, RegTable.rHpLim)
38 #define OFFSET_CurrentTSO OFFSET(RegTable, RegTable.rCurrentTSO)
39 #define OFFSET_CurrentNursery OFFSET(RegTable, RegTable.rCurrentNursery)
40 #define OFFSET_HpAlloc OFFSET(RegTable, RegTable.rHpAlloc)
41
42 #define FUN_OFFSET(sym) ((StgPtr)&cap.f.sym - (StgPtr)&cap.r)
43
44 #define OFFSET_stgChk0       FUN_OFFSET(stgChk0)
45 #define OFFSET_stgChk1       FUN_OFFSET(stgChk1)
46 #define OFFSET_stgGCEnter1   FUN_OFFSET(stgGCEnter1)
47 #define OFFSET_stgUpdatePAP  FUN_OFFSET(stgUpdatePAP)
48
49 #define OFFW_Capability_r  OFFSET(cap, cap.r)
50
51 #define TSO_SP       OFFSET(tso, tso.sp)
52 #define TSO_SU       OFFSET(tso, tso.su)
53 #define TSO_STACK    OFFSET(tso, tso.stack)
54
55 #define BDESCR_START OFFSET(bd, bd.start)
56 #define BDESCR_FREE  OFFSET(bd, bd.free)
57 #define BDESCR_BLOCKS OFFSET(bd, bd.blocks)
58
59 StgRegTable RegTable;
60
61 Capability cap;
62
63 StgTSO tso;
64 bdescr bd;
65
66 int
67 main()
68 {
69     printf("-- This file is created automatically.  Do not edit by hand.\n\n");
70
71     printf("\n-- Base table offsets for the Native Code Generator\n");
72
73     printf("#define OFFSET_R1 %d\n", OFFSET_R1);
74     printf("#define OFFSET_R2 %d\n", OFFSET_R2);
75     printf("#define OFFSET_R3 %d\n", OFFSET_R3);
76     printf("#define OFFSET_R4 %d\n", OFFSET_R4);
77     printf("#define OFFSET_R5 %d\n", OFFSET_R5);
78     printf("#define OFFSET_R6 %d\n", OFFSET_R6);
79     printf("#define OFFSET_R7 %d\n", OFFSET_R7);
80     printf("#define OFFSET_R8 %d\n", OFFSET_R8);
81     printf("#define OFFSET_R9 %d\n", OFFSET_R9);
82     printf("#define OFFSET_R10 %d\n", OFFSET_R10);
83     printf("#define OFFSET_F1 %d\n", OFFSET_F1);
84     printf("#define OFFSET_F2 %d\n", OFFSET_F2);
85     printf("#define OFFSET_F3 %d\n", OFFSET_F3);
86     printf("#define OFFSET_F4 %d\n", OFFSET_F4);
87     printf("#define OFFSET_D1 %d\n", OFFSET_D1);
88     printf("#define OFFSET_D2 %d\n", OFFSET_D2);
89 #ifdef SUPPORT_LONG_LONGS
90     printf("#define OFFSET_L1 %d\n", OFFSET_L1);
91 #endif
92     printf("#define OFFSET_Sp %d\n", OFFSET_Sp);
93     printf("#define OFFSET_Su %d\n", OFFSET_Su);
94     printf("#define OFFSET_SpLim %d\n", OFFSET_SpLim);
95     printf("#define OFFSET_Hp %d\n", OFFSET_Hp);
96     printf("#define OFFSET_HpLim %d\n", OFFSET_HpLim);
97     printf("#define OFFSET_CurrentTSO %d\n", OFFSET_CurrentTSO);
98     printf("#define OFFSET_CurrentNursery %d\n", OFFSET_CurrentNursery);
99     printf("#define OFFSET_HpAlloc %d\n", OFFSET_HpAlloc);
100
101     printf("#define OFFSET_stgChk0 (%d)\n", OFFSET_stgChk0);
102     printf("#define OFFSET_stgChk1 (%d)\n", OFFSET_stgChk1);
103     printf("#define OFFSET_stgGCEnter1 (%d)\n", OFFSET_stgGCEnter1);
104     printf("#define OFFSET_stgUpdatePAP (%d)\n", OFFSET_stgUpdatePAP);
105
106     printf("\n-- Offset of the .r (StgRegTable) field in a Capability\n");
107
108     printf("#define OFFW_Capability_r (%d)\n", OFFW_Capability_r);
109
110     printf("\n-- Storage Manager offsets for the Native Code Generator\n");
111
112     printf("\n-- TSO offsets for the Native Code Generator\n");
113
114     printf("#define TSO_SP %d\n", TSO_SP);
115     printf("#define TSO_SU %d\n", TSO_SU);
116     printf("#define TSO_STACK %d\n", TSO_STACK);
117
118     printf("\n-- Block descriptor offsets for the Native Code Generator\n");
119
120     printf("#define BDESCR_START %d\n", BDESCR_START);
121     printf("#define BDESCR_FREE %d\n", BDESCR_FREE);
122     printf("#define BDESCR_BLOCKS %d\n", BDESCR_BLOCKS);
123
124     printf("\n-- FILE size for the Native Code Generator\n");
125
126     printf("#define FILE_SIZE %d\n", sizeof(*stdin));
127
128     exit(0);
129 }